From 3bb8ca0225dd660aecef57e5936e3ca4c5e5a8b2 Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Fri, 15 May 2026 17:20:55 +0100 Subject: [PATCH 1/7] update tests project --- Directory.Build.props | 2 +- Directory.Packages.props | 10 +- uSync.Tests/packages.lock.json | 180 ++++++++++++++++----------------- 3 files changed, 96 insertions(+), 96 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index b3cd03a6..b70a39d8 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 17.0.0 + 18.0.0 Kevin Jump Jumoo diff --git a/Directory.Packages.props b/Directory.Packages.props index 274464f4..a04dac92 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -12,9 +12,9 @@ - + - + @@ -22,11 +22,11 @@ - - + + - + diff --git a/uSync.Tests/packages.lock.json b/uSync.Tests/packages.lock.json index 39637b8d..f1d693e8 100644 --- a/uSync.Tests/packages.lock.json +++ b/uSync.Tests/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "coverlet.collector": { "type": "Direct", - "requested": "[8.0.1, )", - "resolved": "8.0.1", - "contentHash": "heVQl5tKYnnIDYlR1QMVGueYH6iriZTcZB6AjDczQNwZzxkjDIt9C84Pt4cCiZYrbo7jkZOYGWbs6Lo9wAtVLg==" + "requested": "[10.0.0, )", + "resolved": "10.0.0", + "contentHash": "WFejCcOUR6k8UYyDnnR6Gk+obFYMsWrZuNqPJnsVFGVhpPSN0y20D4qbdKJnXinYGx9PQ397Hf9TnU1NBST8vA==" }, "Microsoft.NET.Test.Sdk": { "type": "Direct", @@ -31,9 +31,9 @@ }, "Umbraco.Cms.Tests": { "type": "Direct", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "Sdvgh2AKQEjscPmd5rUQd5sNhecuqH5znySHnO6NqtYlzhuppMhvxOip/v4XdokyBLRVtvIJVWUfY56ATBAr+A==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "R1q6Mu9O6ZcOmYW+yPtptzXpQFUWBqbfUXB20FmYp2seXpKfr7Mf8ELn6zY9tJEuFGIKrFmPWjJC3D+qaPvsEA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -95,15 +95,15 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Tests.Integration": { "type": "Direct", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "bohpMnZT3wMHCgg3I5749Gtk/Yo4whb+ub8uyDJ9J1k/AuHAa9NPoSVAfYoJsDeUfAwSZMZnjnexLn4CqYcCzw==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "5n0H7zL1pXvwAeqCRgrHUYQHbfsWoTaCy4aLhoAZziD2JuBVug8l03UHUuHhN/0kDhMNMGfMKNDXnPpmhPuGlw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -171,12 +171,12 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Api.Management": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.DevelopmentMode.Backoffice": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Tests": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.DevelopmentMode.Backoffice": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Tests": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1978,8 +1978,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "R4WLYVnErcgg0tjCENVf/1A3q2chiTDvITORP45tVOIYyYizjDTdAGBwfnMX1vfgocsp/4Dn+QlRG7IxPtwjcQ==", + "resolved": "18.0.0-beta2", + "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2014,15 +2014,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Api.Delivery": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "yYFM+nZPxP/2f7VTyrgudgXfNkBUKnhhsBJNqawiyuykcuyFGP/Whh+vZfa6yiL+ASynQUz3RyzvEaqXlU91Cg==", + "resolved": "18.0.0-beta2", + "contentHash": "sCLcSUx3jSqvH85gtmimSIDpaHgSx+k8rrshm2RYt+SxXFDfd8u3kfzYiWvEfL9t/lus+PFGactTfsZIseQv+w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2072,15 +2072,15 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "43ikGhOoaLDqdO1yoP0slXL/b8GQFgFd3l1yhCNqAXW6yfOzjtZtjCme86JiIcD80jEQVdsfOC1N9j6cq/qn3Q==", + "resolved": "18.0.0-beta2", + "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -2119,14 +2119,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Imaging.ImageSharp": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "QcrMzCgoMYc8WmWJhACyj7cc/SJVTanvoexzbt0Zj4s+Jo+RbyU9aUtF/JE+eXAOTNNFFahKEo0fX103RHfKag==", + "resolved": "18.0.0-beta2", + "contentHash": "IAEdOfiYDbN+8Zg2Bnc9gKvuxK6bxoOcF7QifswUYwCVGLUcHSLQa2y18Q9EhvDzekI1C+n/QOpxSIi+WeZ+aA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2175,14 +2175,14 @@ "SixLabors.ImageSharp.Web": "3.2.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "I1jAbcAG2FOyyB78pdJFGoGfq5jMD3E1mUq8bEd3Af5vwwmI6QKdVRr9hbMr+jOc7nKRJR/2DfW2etRk7NRWbQ==", + "resolved": "18.0.0-beta2", + "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2219,14 +2219,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "exBiWDVnk0Q4mHkgtr7oZkGfmZdEySmvQQe9RJIdI9wQVa/B/f7ekHsP4y/UpdCfK+t2Yo9/Y9Bgma2FgKzSNA==", + "resolved": "18.0.0-beta2", + "contentHash": "oIXjv+CZS1Lo22afYqM5ratzwAZ19lHorsPeMZCyrXQGch+eaKDRE31fvDk7qzAzTGtNJ7CE7Vx/Pyep5iEeIg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2266,15 +2266,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore.Sqlite": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "ae/hnEso/IaL37XBX8LNfpWjWIjrIvmLxN1GVUpxHSuLN43uiNOh+5Egv75kGH5PNogVL/q/kZe6jm7JbJhtpg==", + "resolved": "18.0.0-beta2", + "contentHash": "zXBxj2uSBPjuIWWrFoltf6fj9eGGY+362tlTJzTJAnJH4zuYCKH5g96vbZeNT4Vf/AWSm6IaODfNIor5B8uEjg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2314,14 +2314,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore.SqlServer": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "xaEo9b/5YZz337zkztJr8hO4UPAzBy5MUHKClhuhswWiYf/e6mZ7QHjgzr8EMNOp/7l6NVCBozpe631z4Ib1Lw==", + "resolved": "18.0.0-beta2", + "contentHash": "GkVcFZ7mlR5znfgwrAfnK8bmw5ZYz4v47+kikEBPflyCikB3npLzJXRGYle6oRCqfiGabpkr0R/6f+cqcXM8Uw==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2361,14 +2361,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.Sqlite": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "xNG44UitYjtonq17Mnjv/PmXFiNOXS+tYejuh8VBkRK3jMluKTa3VjVI0ryJ+U2MINzW0OZpsDdupJR0dN0MJQ==", + "resolved": "18.0.0-beta2", + "contentHash": "V+Qd4rkrmcA/S7liz7JYIMuHEWLH3lwm5v3Wv+OXkIQw+0LMxojkJBEWpaHOgPgx5+s3DhxlAjNWxy8bx2GKGg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2406,14 +2406,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.SqlServer": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "RJcr+iYtYCvism/aIW9no1TB2FBvLp9y98NdgyPTVe9NsSTtprTi/LOu+AIaRxoF1EsyRj5/6J3Pd6BpZIHN8w==", + "resolved": "18.0.0-beta2", + "contentHash": "ASeEwkRIbH05clQuCP0y7Er2/CQUs+YcAvg7T6R2PlPqnvCKn5DrvcfEtLyaMrQTiZPAcnCTQz6goGswyGb7Sw==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2451,14 +2451,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "003JNQGNCCAsTiE2nWbzFcN7QqsdRCVSt2OSxjo/FeOvtiXXh0/lpBqQGbSIKKePmc0DoZhHoEEJObGGKPxg+w==", + "resolved": "18.0.0-beta2", + "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2498,15 +2498,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.StaticAssets": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "sW4P1ugCnr3xEpLvfq8DWRzMtRaUOKBVVkUPUZPQDH9HUdhEVvQYYaB8kMSxEuQRchRfXS3QuwbdlMD4L4JQKA==", + "resolved": "18.0.0-beta2", + "contentHash": "1y4mi1ZTguyVj2ZDefSeoPkkvGO/E2GYl+6m66Kpq2ahylJTVPkeBhAIMMsu65nkKTa5F3vXFCF7lEH0p4Ut2A==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2542,15 +2542,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Api.Management": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Website": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Targets": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "LG8BsgJa8Jm0YYtPVVgYR2nyPiNLfCv5veg+/wwnnVckLhj61TiMuBd20HZQj/vhQQ5mJFE0ld1LxlI9KN8qcQ==", + "resolved": "18.0.0-beta2", + "contentHash": "y+zIONeex68VhV/HOgQcNI+uGgo4/7bzNsOcO8nuO2BfV2vvmBnkc9OROZHqfpEubhJ8kVG9fbE5QEVHgBbMTQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2601,16 +2601,16 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Delivery": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Api.Management": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.StaticAssets": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Api.Delivery": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.StaticAssets": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "bKWNmblTB7mwCzTsVKHwt9WqZAXj1SAfAVHa1uVl5rsXM8OdjKJj3z5xN6C12Yvsd0ooYKZSrKf9c9GLMp/ZHA==", + "resolved": "18.0.0-beta2", + "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2642,8 +2642,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -2663,15 +2663,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta1, )", + "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" } }, "Umbraco.Cms": { "type": "CentralTransitive", "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "lsmckxMzxQGjOrwwUrmmhL5tqx3Go/0B1mdQvQWG7Af/mno7HcOLRoae1P4+hbNdwnJ3igb0OgzrJ8oYJsQDSQ==", + "resolved": "18.0.0-beta2", + "contentHash": "cqqBnfXcCMu8SVALVn/zJIeNYu/PIVRIWHgwCaMwfmHSZIf9URoysSPgl4TSKrt2iA4qycg6QBmyTqe6HdVdQg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2729,20 +2729,20 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Imaging.ImageSharp": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore.SqlServer": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore.Sqlite": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Persistence.SqlServer": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Persistence.Sqlite": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Targets": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Imaging.ImageSharp": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore.SqlServer": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore.Sqlite": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Persistence.SqlServer": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Persistence.Sqlite": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Targets": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "MXXp0wSyuyo25Rgw0uxYIlT9Y31s6JpuAzqC9EMJ01dB7JAr5CX7/Wl0Q8fC7EXGP5GZWnMgpf8XYcBPprJIxg==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2793,17 +2793,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "1BsszW3rDLf4xjY+wZpP0XaBihhHsrxmk2Msqu5JlGZZAE8miqRjtVDzrjKS2/WlgbWOfTx+TiparTwK0PMvzA==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -2822,8 +2822,8 @@ "Umbraco.Cms.DevelopmentMode.Backoffice": { "type": "CentralTransitive", "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "ijjEgkgL/DDR5a5PGlXjPYDOKePGXKyvTaOxuATlK1651h/3KeQIQRP+wQ6xwJmJIt9dVqkETbZps+BaFunn4g==", + "resolved": "18.0.0-beta2", + "contentHash": "PH0+/qAsyhi2dg8XrnQb3knau96MAA7Ri/w4Hjz6jV4zdNx2Cphmv9cwTNqMSmGHOlcbygSxgi7iPApBPXAuFg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2872,15 +2872,15 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "resolved": "18.0.0-beta2", + "contentHash": "Bt+rQmPuRG9qfNK/F04ZlgrPNI85zSWm5G4JFhC075vY68bB37RbRAVuoMn8UgDAPrLMXqzk9kh4Jnr5tgFrkA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2927,7 +2927,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } } From b14f4d330fbdbfd79f7143e94155dffdf197738d Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Mon, 18 May 2026 16:14:11 +0100 Subject: [PATCH 2/7] WIP - Element library (export/import) --- uSync.BackOffice/BackOfficeConstants.cs | 11 + .../Cache/CacheLifecycleManager.cs | 19 + .../Services/SyncActionService.cs | 1 - .../SyncHandlers/Handlers/ContentHandler.cs | 50 +- .../SyncHandlers/Handlers/ElementHandler.cs | 307 +++++++++ .../Handlers/PublishableContentHandlerBase.cs | 90 +++ .../{ => Models}/ISyncHandlerFactory.cs | 3 +- .../SyncHandlers/SyncHandlerRoot.cs | 46 +- uSync.BackOffice/packages.lock.json | 58 +- .../uSyncBackOfficeBuilderExtensions.cs | 15 + .../Actions/SyncFolderController.cs | 2 +- .../Services/uSyncManagementService.cs | 1 - uSync.Core/Cache/SyncEntityCache.cs | 6 +- uSync.Core/ISyncItemFactory.cs | 4 + .../ISyncEntityContainerSerializer.cs | 20 + .../Serialization/Models/SyncParentItem.cs | 9 + .../Serializers/ContentSerializer.cs | 650 ++---------------- .../Serializers/ContentSerializerBase.cs | 67 +- .../Serializers/ContentTemplateSerializer.cs | 4 +- .../Serializers/ElementContainerSerializer.cs | 119 ++++ .../Serializers/ElementSerializer.cs | 156 +++++ .../Serializers/MediaSerializer.cs | 21 +- .../PublishableContentBaseSerializer.cs | 615 +++++++++++++++++ .../Serializers/SyncContentUpdateResult.cs | 16 +- .../Serialization/SyncTreeSerializerBase.cs | 6 +- uSync.Core/SyncItemFactory.cs | 11 +- uSync.Core/packages.lock.json | 54 +- uSync.Core/uSyncConstants.cs | 2 + 28 files changed, 1605 insertions(+), 758 deletions(-) create mode 100644 uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs create mode 100644 uSync.BackOffice/SyncHandlers/Handlers/PublishableContentHandlerBase.cs rename uSync.BackOffice/SyncHandlers/{ => Models}/ISyncHandlerFactory.cs (97%) create mode 100644 uSync.Core/Serialization/ISyncEntityContainerSerializer.cs create mode 100644 uSync.Core/Serialization/Models/SyncParentItem.cs create mode 100644 uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs create mode 100644 uSync.Core/Serialization/Serializers/ElementSerializer.cs create mode 100644 uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs diff --git a/uSync.BackOffice/BackOfficeConstants.cs b/uSync.BackOffice/BackOfficeConstants.cs index f76be673..ad63e86a 100644 --- a/uSync.BackOffice/BackOfficeConstants.cs +++ b/uSync.BackOffice/BackOfficeConstants.cs @@ -93,6 +93,11 @@ public static class Priorites /// public const int Macros = USYNC_RESERVED_LOWER + 70; + /// + /// Elements Priority. + /// + public const int Elements = USYNC_RESERVED_LOWER + 190; + /// /// Media priority /// @@ -259,5 +264,11 @@ public static class Handlers public const string WebhookHandler = "WebhookHandler"; + /// + /// Handler for Element (Library) items + /// + public const string ElementHandler = "ElementHandler"; + + } } diff --git a/uSync.BackOffice/Cache/CacheLifecycleManager.cs b/uSync.BackOffice/Cache/CacheLifecycleManager.cs index 37b6a5b6..609f670d 100644 --- a/uSync.BackOffice/Cache/CacheLifecycleManager.cs +++ b/uSync.BackOffice/Cache/CacheLifecycleManager.cs @@ -26,6 +26,9 @@ public class CacheLifecycleManager : INotificationAsyncHandler, INotificationAsyncHandler, INotificationAsyncHandler, + INotificationAsyncHandler, + INotificationAsyncHandler, + INotificationAsyncHandler, INotificationAsyncHandler, INotificationAsyncHandler, INotificationAsyncHandler @@ -95,6 +98,22 @@ public CacheLifecycleManager( /// public Task HandleAsync(ContentMovingNotification notification, CancellationToken c) => ClearOnEvents(); + /// + /// clear the cache on the Umbraco Element Saving notification + /// + public Task HandleAsync(ElementSavingNotification notification, CancellationToken c) => ClearOnEvents(); + + /// + /// clear the cache on the Umbraco Element Deleting notification + /// + public Task HandleAsync(ElementDeletingNotification notification, CancellationToken c) => ClearOnEvents(); + + /// + /// clear the cache on the Element Moving notification + /// + public Task HandleAsync(ElementMovingNotification notification, CancellationToken c) => ClearOnEvents(); + + /// /// Clear the cache on the Umbraco Media Saving notification /// diff --git a/uSync.BackOffice/Services/SyncActionService.cs b/uSync.BackOffice/Services/SyncActionService.cs index 91310959..6c7441c4 100644 --- a/uSync.BackOffice/Services/SyncActionService.cs +++ b/uSync.BackOffice/Services/SyncActionService.cs @@ -13,7 +13,6 @@ using uSync.BackOffice.Configuration; using uSync.BackOffice.Extensions; using uSync.BackOffice.Models; -using uSync.BackOffice.SyncHandlers; using uSync.BackOffice.SyncHandlers.Models; namespace uSync.BackOffice.Services; diff --git a/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs b/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs index 19e05d33..7f528688 100644 --- a/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs +++ b/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs @@ -30,7 +30,7 @@ namespace uSync.BackOffice.SyncHandlers.Handlers; /// [SyncHandler(uSyncConstants.Handlers.ContentHandler, "Content", "Content", uSyncConstants.Priorites.Content , Icon = "icon-document", IsTwoPass = true, EntityType = UdiEntityType.Document)] -public class ContentHandler : ContentHandlerBase, ISyncHandler, +public class ContentHandler : PublishableContentHandlerBase, ISyncHandler, INotificationAsyncHandler>, INotificationAsyncHandler>, @@ -77,34 +77,10 @@ public ContentHandler( protected override Task HasChildrenAsync(IContent item) => Task.FromResult(_contentService.HasChildren(item.Id)); - /// - /// Get child items - /// - /// - /// The core method works for all services, (using entities) - but if we look up - /// the actual type for content and media, we save ourselves an extra lookup later on - /// and this speeds up the itteration by quite a bit (onle less db trip per item). - /// - protected override Task> GetChildItemsAsync(IEntity? parent) - { - return uSyncTaskHelper.FromResultOf>(() => - { - if (parent is null) return _contentService.GetRootContent(); - - var items = new List(); - const int pageSize = 5000; - var page = 0; - var total = long.MaxValue; - while (page * pageSize < total) - { - items.AddRange(_contentService.GetPagedChildren(parent.Id, page++, pageSize, out total)); - } - return items; - - }); - } + protected override IEnumerable GetRootItems() + => _contentService.GetRootContent(); - /// + /// /// Handle the publish events for content /// /// @@ -143,22 +119,4 @@ public async Task HandleAsync(ContentUnpublishedNotification notification, Cance await ProcessItem(notification, item, handlerFolders); } } - - private async Task ProcessItem(EnumerableObjectNotification notification, IContent item, string[] handlerFolders) - { - try - { - var attempts = await ExportAsync(item, handlerFolders, DefaultConfig); - foreach (var attempt in attempts.Where(x => x.Success)) - { - if (attempt.FileName is null) continue; - await this.CleanUpAsync(item, attempt.FileName, handlerFolders.Last()); - } - } - catch (Exception ex) - { - logger.LogWarning(ex, "Failed to create uSync export file"); - notification.Messages.Add(new EventMessage("uSync", $"Failed to create export file : {ex.Message}", EventMessageType.Warning)); - } - } } diff --git a/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs b/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs new file mode 100644 index 00000000..790c2858 --- /dev/null +++ b/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs @@ -0,0 +1,307 @@ +using Microsoft.Extensions.Logging; + +using Org.BouncyCastle.Security.Certificates; + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Xml.Linq; + +using Umbraco.Cms.Core.Cache; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Strings; + +using uSync.BackOffice.Configuration; +using uSync.BackOffice.Services; +using uSync.BackOffice.SyncHandlers.Interfaces; +using uSync.BackOffice.SyncHandlers.Models; +using uSync.Core; +using uSync.Core.Models; +using uSync.Core.Serialization; +using uSync.Core.Tracking; + +using static Umbraco.Cms.Core.Constants; +using static Umbraco.Cms.Core.Constants.HttpContext; + +namespace uSync.BackOffice.SyncHandlers.Handlers; + +[SyncHandler( + alias: uSyncConstants.Handlers.ElementHandler, + name: "Library", folder: "Element", + priority: uSyncConstants.Priorites.Elements, + Icon = "icon-books", IsTwoPass = true, EntityType = UdiEntityType.Element)] +public class ElementHandler : PublishableContentHandlerBase, ISyncHandler, + INotificationAsyncHandler>, + INotificationAsyncHandler>, + INotificationAsyncHandler, + INotificationAsyncHandler, + INotificationAsyncHandler>, + INotificationAsyncHandler>, + INotificationAsyncHandler>, + INotificationAsyncHandler>, + INotificationAsyncHandler>, + INotificationAsyncHandler> +{ + private readonly IElementService _elementService; + private readonly IElementContainerService _containerService; + + private readonly IList> _treeTrackers; + private readonly ISyncEntityContainerSerializer _containerSerializer; + + public override string Group => uSyncConstants.Groups.Content; + + public ElementHandler( + ILogger> logger, + IEntityService entityService, + AppCaches appCaches, + IShortStringHelper shortStringHelper, + ISyncFileService syncFileService, + ISyncEventService mutexService, + ISyncConfigService uSyncConfigService, + Core.ISyncItemFactory syncItemFactory, + IElementService elementService, + IElementContainerService containerService) + : base(logger, entityService, appCaches, shortStringHelper, syncFileService, mutexService, uSyncConfigService, syncItemFactory) + { + _elementService = elementService; + + _treeTrackers = [.. this.itemFactory.GetTrackers()]; + + _containerSerializer = this.itemFactory + .GetContainerSerializers(UmbracoObjectTypes.Element) + .FirstOrDefault() + ?? throw new Exception($"No container serializer found for {UmbracoObjectTypes.Element}"); + + ItemObjectType = UmbracoObjectTypes.Element; + ItemContainerType = UmbracoObjectTypes.ElementContainer; + _containerService = containerService; + } + + /// + protected override Task HasChildrenAsync(IElement item) + => Task.FromResult(false); + + protected override IEnumerable GetRootItems() + { + var rootElements = entityService.GetRootEntities(UmbracoObjectTypes.Element); + return rootElements; + } + + private async Task GetContainer(Guid key) + => await _containerService.GetAsync(key); + + public override async Task> ExportContainer(IEntity item, string[] folders, HandlerSettings config) + { + if (item is null) + return [uSyncAction.Fail(nameof(item), this.handlerType, this.ItemType, ChangeType.Fail, "Item not set", + new ArgumentNullException(nameof(item)))]; + + var container = await GetContainer(item.Key); + if (container == null) + return [uSyncAction.Fail(nameof(item), this.handlerType, this.ItemType, ChangeType.Fail, "Container not found", + new Exception($"Container with key {item.Key} not found"))]; + + if (await _mutexService.FireItemStartingEventAsync(new CancelableuSyncItemNotification(container))) + { + return [uSyncActionHelper + .ReportAction(ChangeType.NoChange, GetContainerName(container), string.Empty, string.Empty, GetContainerKey(container), this.Alias, + "Change stopped by delegate event")]; + } + + var targetFolder = folders.Last(); + + var filename = (await GetContainerPathAsync(targetFolder, container, config.GuidNames, config.UseFlatStructure)) + .ToAppSafeFileName(); + + // + if (IsLockedAtRoot(folders, filename.Substring(targetFolder.Length + 1))) + { + // if we have lock roots on, then this item will not export + // because exporting would mean the root was no longer used. + return [uSyncAction.SetAction(true, syncFileService.GetSiteRelativePath(filename), + type: typeof(IElement).ToString(), + change: ChangeType.NoChange, + message: "Not exported (would overwrite root value)", + filename: filename)]; + } + + + var attempt = await Export_DoContainerExport(container, filename, folders, config); + + if (attempt.Change > ChangeType.NoChange) + await _mutexService.FireItemCompletedEventAsync(new uSyncExportedItemNotification(attempt.Item, ChangeType.Export)); + + return [uSyncActionHelper.SetAction(attempt, syncFileService.GetSiteRelativePath(filename), GetContainerKey(container), this.Alias)]; + } + + private async Task> Export_DoContainerExport(EntityContainer item, string filename, string[] folders, HandlerSettings config) + { + var attempt = await SerializeContainerAsync(item, new SyncSerializerOptions(config.Settings)); + if (attempt.Success is false || attempt.Item is null) return attempt; + + if (await ShouldExportAsync(attempt.Item, config) is false) + return SyncAttempt.Succeed(Path.GetFileName(filename), ChangeType.NoChange, "Not Exported (Based on configuration)"); + + var files = await Task.WhenAll(folders + .Select(async x => await GetContainerPathAsync(x, item, config.GuidNames, config.UseFlatStructure)) + .ToArray()); + + var nodes = await syncFileService.GetAllNodesAsync(files[..^1]); + if (nodes.Count > 0) + { + nodes.Add(attempt.Item); + var differences = syncFileService.GetDifferences(nodes, trackers.FirstOrDefault()); + if (differences is not null && differences.HasElements) + { + if (config.FullFileOnDifference) + { + await syncFileService.SaveXElementAsync(attempt.Item, filename); + } + else + { + await syncFileService.SaveXElementAsync(differences, filename); + } + } + else + { + + if (syncFileService.FileExists(filename)) + { + // we don't delete them - because in deployments they might then hang around + // we mark them as reverted and then they don't get processed. + var emptyNode = XElementExtensions.MakeEmpty(attempt.Item.GetKey(), SyncActionType.None, "Reverted to root"); + await syncFileService.SaveXElementAsync(emptyNode, filename); + } + } + } + else + { + await syncFileService.SaveXElementAsync(attempt.Item, filename); + } + + if (config.CreateClean) + await CreateCleanFileAsync(GetContainerKey(item), filename); + + return attempt; + } + + protected async Task> SerializeContainerAsync(EntityContainer item, SyncSerializerOptions options) + => await _containerSerializer.SerializeAsync(item, options); + + private async Task GetContainerPathAsync(string folder, EntityContainer item, bool GuidNames, bool isFlat) + { + if (isFlat && GuidNames) return Path.Combine(folder, $"{GetContainerKey(item)}.{this.uSyncConfig.Settings.DefaultExtension}"); + var path = Path.Combine(folder, $"{GetContainerEntityPath(item, GuidNames, isFlat)}.{this.uSyncConfig.Settings.DefaultExtension}"); + + // if this is flat but not using GUID filenames, then we check for clashes. + if (isFlat && !GuidNames) return await CheckAndFixContainerFileClashAsync(path, item); + return path; + } + + private Guid GetContainerKey(EntityContainer item) => item.Key; + private string GetContainerName(EntityContainer item) => item.Name ?? item.Id.ToString(); + + private string GetContainerEntityPath(EntityContainer item, bool GuidNames, bool isFlat) + => GuidNames ? GetContainerKey(item).ToString() : GetContainerName(item).ToAppSafeFileName(); + + virtual protected async Task CheckAndFixContainerFileClashAsync(string path, EntityContainer item) + { + if (syncFileService.FileExists(path)) + { + var node = await syncFileService.LoadXElementAsync(path); + + if (node == null) return path; + if (GetContainerKey(item) == node.GetKey()) return path; + if (GetXmlMatchString(node).Equals(GetContainerItemMatchString(item), StringComparison.InvariantCultureIgnoreCase)) return path; + + // get here we have a clash, we should append something + var append = GetContainerKey(item).ToShortKeyString(8); // (this is the shortened GUID like media folders do) + return Path.Combine(Path.GetDirectoryName(path) ?? string.Empty, + Path.GetFileNameWithoutExtension(path) + "_" + append + Path.GetExtension(path)); + } + + return path; + } + + private string GetContainerItemMatchString(EntityContainer item) + { + var itemPath = item.Level.ToString(); + if (item.Trashed) + itemPath = _containerSerializer.GetEntityContainerPath(item); + + return $"{item.Name}_{itemPath}"; + } + + /// + /// Handle the publish events for content + /// + /// + /// some publication events do not fire the save notification, so we need to handle those here. + /// + public async Task HandleAsync(ElementPublishedNotification notification, CancellationToken cancellationToken) + { + if (!ShouldProcessEvent()) return; + if (notification.State.TryGetValue(uSync.EventPausedKey, out var paused) && paused is true) + return; + + var handlerFolders = GetDefaultHandlerFolders(); + + foreach (var item in notification.PublishedEntities) + { + await ProcessItem(notification, item, handlerFolders); + } + } + + /// + /// un-publish content items, this is called when content is unpublished (not deleted) + /// + /// + /// un-publish does not fire the save notification, so we need to handle those here. + /// + public async Task HandleAsync(ElementUnpublishedNotification notification, CancellationToken cancellationToken) + { + if (!ShouldProcessEvent()) return; + if (notification.State.TryGetValue(uSync.EventPausedKey, out var paused) && paused is true) + return; + + var handlerFolders = GetDefaultHandlerFolders(); + + foreach (var item in notification.UnpublishedEntities) + { + await ProcessItem(notification, item, handlerFolders); + } + } + + protected override async Task DeserializeItemToAction(XElement node, string filename, SyncSerializerOptions serializerOptions) + { + if (node.Name.LocalName == global::uSync.Core.uSyncConstants.Serialization.ElementContainer) + { + var containerAttempt = await _containerSerializer.DeserializeAsync(node, serializerOptions); + var containerAction = uSyncActionHelper.SetAction(containerAttempt, GetNameFromFileOrNode(filename, node), node.GetKey(), this.Alias, IsTwoPass); + + if (containerAttempt.Item != null) containerAction.Item = containerAttempt.Item; + if (containerAttempt.Details != null && containerAttempt.Details.Any()) containerAction.Details = containerAttempt.Details; + + return containerAction; + } + + // get the item. + var attempt = await DeserializeItemAsync(node, serializerOptions); + var action = uSyncActionHelper.SetAction(attempt, GetNameFromFileOrNode(filename, node), node.GetKey(), this.Alias, IsTwoPass); + + // add item if we have it. + if (attempt.Item != null) action.Item = attempt.Item; + + // add details if we have them + if (attempt.Details != null && attempt.Details.Any()) action.Details = attempt.Details; + return action; + } +} diff --git a/uSync.BackOffice/SyncHandlers/Handlers/PublishableContentHandlerBase.cs b/uSync.BackOffice/SyncHandlers/Handlers/PublishableContentHandlerBase.cs new file mode 100644 index 00000000..cc97f20b --- /dev/null +++ b/uSync.BackOffice/SyncHandlers/Handlers/PublishableContentHandlerBase.cs @@ -0,0 +1,90 @@ +using Microsoft.Extensions.Logging; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +using Umbraco.Cms.Core.Cache; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; +using Umbraco.Cms.Core.Notifications; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Strings; + +using uSync.BackOffice.Configuration; +using uSync.BackOffice.Services; +using uSync.Core; +using uSync.Core.Extensions; + +namespace uSync.BackOffice.SyncHandlers.Handlers; + +public abstract class PublishableContentHandlerBase + : ContentHandlerBase + where TObject : class, IPublishableContentBase +{ + protected UmbracoObjectTypes ContainerType => UmbracoObjectTypes.Document; + + protected PublishableContentHandlerBase( + ILogger> logger, + IEntityService entityService, + AppCaches appCaches, + IShortStringHelper shortStringHelper, + ISyncFileService syncFileService, + ISyncEventService mutexService, + ISyncConfigService uSyncConfigService, + ISyncItemFactory syncItemFactory) + : base(logger, entityService, appCaches, shortStringHelper, syncFileService, mutexService, uSyncConfigService, syncItemFactory) + { } + + protected abstract IEnumerable GetRootItems(); + + /// + /// Get child items + /// + /// + /// The core method works for all services, (using entities) - but if we look up + /// the actual type for content and media, we save ourselves an extra lookup later on + /// and this speeds up the itteration by quite a bit (onle less db trip per item). + /// + protected override Task> GetChildItemsAsync(IEntity? parent) + { + return uSyncTaskHelper.FromResultOf>(() => + { + if (parent is null) return GetRootItems(); + + var items = new List(); + const int pageSize = 5000; + var page = 0; + var total = long.MaxValue; + while (page * pageSize < total) + { + items.AddRange(entityService.GetPagedChildren(parent.Id, ItemObjectType, page++, pageSize, out total)); + } + return items; + + }); + } + + + protected async Task ProcessItem(EnumerableObjectNotification notification, TObject item, string[] handlerFolders) + { + try + { + var attempts = await ExportAsync(item, handlerFolders, DefaultConfig); + foreach (var attempt in attempts.Where(x => x.Success)) + { + if (attempt.FileName is null) continue; + await this.CleanUpAsync(item, attempt.FileName, handlerFolders.Last()); + } + } + catch (Exception ex) + { + logger.LogWarning(ex, "Failed to create uSync export file"); + notification.Messages.Add(new EventMessage("uSync", $"Failed to create export file : {ex.Message}", EventMessageType.Warning)); + } + } + +} diff --git a/uSync.BackOffice/SyncHandlers/ISyncHandlerFactory.cs b/uSync.BackOffice/SyncHandlers/Models/ISyncHandlerFactory.cs similarity index 97% rename from uSync.BackOffice/SyncHandlers/ISyncHandlerFactory.cs rename to uSync.BackOffice/SyncHandlers/Models/ISyncHandlerFactory.cs index 89945223..3d361f23 100644 --- a/uSync.BackOffice/SyncHandlers/ISyncHandlerFactory.cs +++ b/uSync.BackOffice/SyncHandlers/Models/ISyncHandlerFactory.cs @@ -1,9 +1,8 @@ using System.Collections.Generic; using uSync.BackOffice.SyncHandlers.Interfaces; -using uSync.BackOffice.SyncHandlers.Models; -namespace uSync.BackOffice.SyncHandlers; +namespace uSync.BackOffice.SyncHandlers.Models; /// /// Factory for accessing the handlers and their configuration diff --git a/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs b/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs index 222b996d..0040d2fc 100644 --- a/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs +++ b/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs @@ -1,4 +1,8 @@ -using Microsoft.Extensions.Logging; +using Lucene.Net.Util; + +using Microsoft.Extensions.Logging; + +using Org.BouncyCastle.Tls; using System; using System.Collections.Generic; @@ -494,18 +498,10 @@ virtual protected async Task> ImportSingleElementAsync( var serializerOptions = new SyncSerializerOptions(options.Flags, settings.Settings, options.UserId); serializerOptions.MergeSettings(options.Settings); - // get the item. - var attempt = await DeserializeItemAsync(node, serializerOptions); - var action = uSyncActionHelper.SetAction(attempt, GetNameFromFileOrNode(filename, node), node.GetKey(), this.Alias, IsTwoPass); - - // add item if we have it. - if (attempt.Item != null) action.Item = attempt.Item; - - // add details if we have them - if (attempt.Details != null && attempt.Details.Any()) action.Details = attempt.Details; + uSyncAction action = await DeserializeItemToAction(node, filename, serializerOptions); // this might not be the place to do this because, two pass items are imported at another point too. - await _mutexService.FireItemCompletedEventAsync(new uSyncImportedItemNotification(node, attempt.Change)); + await _mutexService.FireItemCompletedEventAsync(new uSyncImportedItemNotification(node, action.Change)); return [action]; } @@ -518,6 +514,20 @@ virtual protected async Task> ImportSingleElementAsync( } + protected virtual async Task DeserializeItemToAction(XElement node, string filename, SyncSerializerOptions serializerOptions) + { + // get the item. + var attempt = await DeserializeItemAsync(node, serializerOptions); + var action = uSyncActionHelper.SetAction(attempt, GetNameFromFileOrNode(filename, node), node.GetKey(), this.Alias, IsTwoPass); + + // add item if we have it. + if (attempt.Item != null) action.Item = attempt.Item; + + // add details if we have them + if (attempt.Details != null && attempt.Details.Any()) action.Details = attempt.Details; + return action; + } + /// /// Works through a list of items that have been processed and performs the second import pass on them. @@ -821,6 +831,9 @@ virtual public async Task> ExportAllAsync(TContainer? p if (ItemContainerType != UmbracoObjectTypes.Unknown) { + if (parent is not null) + actions.AddRange(await ExportContainer(parent, folders, config)); + var containers = await GetFoldersAsync(parent); foreach (var container in containers) { @@ -890,6 +903,15 @@ public async Task> ExportAsync(Udi udi, string[] folder } + + /// + /// support for handlers that want to export their containers, that are of a different model type + /// to the items they export. + /// + + public virtual Task> ExportContainer(TContainer item, string[] folders, HandlerSettings config) + => Task.FromResult(Enumerable.Empty()); + /// /// Export a given item to disk /// @@ -1962,7 +1984,7 @@ public async Task GetItemStatusAsync(XElement node) #endregion - private string GetNameFromFileOrNode(string filename, XElement node) + protected string GetNameFromFileOrNode(string filename, XElement node) { if (string.IsNullOrWhiteSpace(filename) is true) return node.GetAlias(); return syncFileService.GetSiteRelativePath(filename); diff --git a/uSync.BackOffice/packages.lock.json b/uSync.BackOffice/packages.lock.json index f9e6194d..42b270a2 100644 --- a/uSync.BackOffice/packages.lock.json +++ b/uSync.BackOffice/packages.lock.json @@ -1237,8 +1237,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "R4WLYVnErcgg0tjCENVf/1A3q2chiTDvITORP45tVOIYyYizjDTdAGBwfnMX1vfgocsp/4Dn+QlRG7IxPtwjcQ==", + "resolved": "18.0.0-beta2", + "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1273,15 +1273,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "43ikGhOoaLDqdO1yoP0slXL/b8GQFgFd3l1yhCNqAXW6yfOzjtZtjCme86JiIcD80jEQVdsfOC1N9j6cq/qn3Q==", + "resolved": "18.0.0-beta2", + "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1320,14 +1320,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "I1jAbcAG2FOyyB78pdJFGoGfq5jMD3E1mUq8bEd3Af5vwwmI6QKdVRr9hbMr+jOc7nKRJR/2DfW2etRk7NRWbQ==", + "resolved": "18.0.0-beta2", + "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1364,14 +1364,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "003JNQGNCCAsTiE2nWbzFcN7QqsdRCVSt2OSxjo/FeOvtiXXh0/lpBqQGbSIKKePmc0DoZhHoEEJObGGKPxg+w==", + "resolved": "18.0.0-beta2", + "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1411,15 +1411,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "bKWNmblTB7mwCzTsVKHwt9WqZAXj1SAfAVHa1uVl5rsXM8OdjKJj3z5xN6C12Yvsd0ooYKZSrKf9c9GLMp/ZHA==", + "resolved": "18.0.0-beta2", + "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1451,29 +1451,29 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta1, )", + "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "MXXp0wSyuyo25Rgw0uxYIlT9Y31s6JpuAzqC9EMJ01dB7JAr5CX7/Wl0Q8fC7EXGP5GZWnMgpf8XYcBPprJIxg==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1524,17 +1524,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "1BsszW3rDLf4xjY+wZpP0XaBihhHsrxmk2Msqu5JlGZZAE8miqRjtVDzrjKS2/WlgbWOfTx+TiparTwK0PMvzA==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", diff --git a/uSync.BackOffice/uSyncBackOfficeBuilderExtensions.cs b/uSync.BackOffice/uSyncBackOfficeBuilderExtensions.cs index 57cee45b..917fcbdb 100644 --- a/uSync.BackOffice/uSyncBackOfficeBuilderExtensions.cs +++ b/uSync.BackOffice/uSyncBackOfficeBuilderExtensions.cs @@ -25,6 +25,7 @@ using uSync.BackOffice.SyncHandlers; using uSync.BackOffice.SyncHandlers.Handlers; using uSync.BackOffice.SyncHandlers.Interfaces; +using uSync.BackOffice.SyncHandlers.Models; using uSync.BackOffice.Tracker; using uSync.Core; @@ -200,6 +201,10 @@ internal static void AddHandlerNotifications(this IUmbracoBuilder builder) .AddNotificationAsyncHandler() .AddNotificationAsyncHandler() + .AddNotificationAsyncHandler() + .AddNotificationAsyncHandler() + .AddNotificationAsyncHandler() + .AddNotificationAsyncHandler() .AddNotificationAsyncHandler() .AddNotificationAsyncHandler() @@ -226,6 +231,13 @@ internal static void AddHandlerNotifications(this IUmbracoBuilder builder) builder.AddNotificationAsyncHandler(); builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); + builder.AddNotificationAsyncHandler(); builder.AddNotificationAsyncHandler(); builder.AddNotificationAsyncHandler(); @@ -254,6 +266,9 @@ internal static void AddHandlerNotifications(this IUmbracoBuilder builder) AddNotificationAsyncHandler(). AddNotificationAsyncHandler(). AddNotificationAsyncHandler(). + AddNotificationAsyncHandler(). + AddNotificationAsyncHandler(). + AddNotificationAsyncHandler(). AddNotificationAsyncHandler(). AddNotificationAsyncHandler(). AddNotificationAsyncHandler(); diff --git a/uSync.Backoffice.Management.Api/Controllers/Actions/SyncFolderController.cs b/uSync.Backoffice.Management.Api/Controllers/Actions/SyncFolderController.cs index 2edfa02c..7ac81f58 100644 --- a/uSync.Backoffice.Management.Api/Controllers/Actions/SyncFolderController.cs +++ b/uSync.Backoffice.Management.Api/Controllers/Actions/SyncFolderController.cs @@ -5,7 +5,7 @@ using uSync.BackOffice; using uSync.BackOffice.Configuration; -using uSync.BackOffice.SyncHandlers; +using uSync.BackOffice.SyncHandlers.Models; namespace uSync.Backoffice.Management.Api.Controllers.Actions; diff --git a/uSync.Backoffice.Management.Api/Services/uSyncManagementService.cs b/uSync.Backoffice.Management.Api/Services/uSyncManagementService.cs index 9ba186b7..8d311a90 100644 --- a/uSync.Backoffice.Management.Api/Services/uSyncManagementService.cs +++ b/uSync.Backoffice.Management.Api/Services/uSyncManagementService.cs @@ -11,7 +11,6 @@ using uSync.BackOffice.Hubs; using uSync.BackOffice.Models; using uSync.BackOffice.Services; -using uSync.BackOffice.SyncHandlers; using uSync.BackOffice.SyncHandlers.Models; using uSync.BackOffice.Tracker; diff --git a/uSync.Core/Cache/SyncEntityCache.cs b/uSync.Core/Cache/SyncEntityCache.cs index e537b582..709dace7 100644 --- a/uSync.Core/Cache/SyncEntityCache.cs +++ b/uSync.Core/Cache/SyncEntityCache.cs @@ -124,9 +124,9 @@ public void AddName(int id, Guid guid, string name) return null; } } - public IEnumerable GetAll(UmbracoObjectTypes objectType, int[] ids) + public IEnumerable GetAll(UmbracoObjectTypes[] objectTypes, int[] ids) { - if (!_cacheEnabled) return entityService.GetAll(objectType, ids); + if (!_cacheEnabled) return entityService.GetAll(objectTypes, ids); var items = new List(); var unCachedIds = new List(); @@ -146,7 +146,7 @@ public IEnumerable GetAll(UmbracoObjectTypes objectType, int[] ids) // if you call this with blank you get everything! if (unCachedIds.Count > 0) { - var remaining = entityService.GetAll(objectType, unCachedIds.ToArray()).ToList(); + var remaining = entityService.GetAll(objectTypes, unCachedIds.ToArray()).ToList(); foreach (var item in remaining) { items.AddNotNull(cache.GetCacheItem(item.Id.ToString(), () => { return item; })); diff --git a/uSync.Core/ISyncItemFactory.cs b/uSync.Core/ISyncItemFactory.cs index 58049884..8d565f72 100644 --- a/uSync.Core/ISyncItemFactory.cs +++ b/uSync.Core/ISyncItemFactory.cs @@ -1,5 +1,8 @@ using System.Xml.Linq; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; + using uSync.Core.Cache; using uSync.Core.Dependency; using uSync.Core.Models; @@ -50,6 +53,7 @@ public interface ISyncItemFactory /// get all the possible dependencies for an object (based on the passed flags) /// Task> GetDependenciesAsync(TObject item, DependencyFlags flags); + IEnumerable> GetContainerSerializers(UmbracoObjectTypes containedType) where TObject : ITreeEntity; /// /// an entity cache - can be used to improve lookup times on large syncs. diff --git a/uSync.Core/Serialization/ISyncEntityContainerSerializer.cs b/uSync.Core/Serialization/ISyncEntityContainerSerializer.cs new file mode 100644 index 00000000..9962eaf6 --- /dev/null +++ b/uSync.Core/Serialization/ISyncEntityContainerSerializer.cs @@ -0,0 +1,20 @@ +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; + +namespace uSync.Core.Serialization; + +public interface ISyncEntityContainerSerializer : ISyncSerializer + where TObject : ITreeEntity +{ + /// + /// the type that the conainers contain - this is used to determine the path of the item, and to determine the root items + /// + UmbracoObjectTypes ContainedType { get; } + + /// + /// the path . + /// + /// + /// + string GetEntityContainerPath(TObject item); +} \ No newline at end of file diff --git a/uSync.Core/Serialization/Models/SyncParentItem.cs b/uSync.Core/Serialization/Models/SyncParentItem.cs new file mode 100644 index 00000000..a9ea72b9 --- /dev/null +++ b/uSync.Core/Serialization/Models/SyncParentItem.cs @@ -0,0 +1,9 @@ +namespace uSync.Core.Serialization.Models; + +public record SyncParentItem { + public required int Id { get; init; } + public required Guid Key { get; init; } + public required string Name { get; init; } + public string? Path { get; set; } + public int Level { get; set; } +} diff --git a/uSync.Core/Serialization/Serializers/ContentSerializer.cs b/uSync.Core/Serialization/Serializers/ContentSerializer.cs index 1b64cef0..6d1b4e1d 100644 --- a/uSync.Core/Serialization/Serializers/ContentSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ContentSerializer.cs @@ -14,14 +14,14 @@ using uSync.Core.Extensions; using uSync.Core.Mapping; using uSync.Core.Models; +using uSync.Core.Serialization.Models; namespace uSync.Core.Serialization.Serializers; [SyncSerializer("5CB57139-8AF7-4813-95AD-C075D74636C2", "ContentSerializer", uSyncConstants.Serialization.Content)] -public class ContentSerializer : ContentSerializerBase, ISyncSerializer +public class ContentSerializer : PublishableContentBaseSerializer, ISyncSerializer { protected readonly IContentService contentService; - protected readonly IUserService userService; protected readonly ITemplateService _templateService; protected readonly ISyncDocumentUrlCleaner? _urlCleaner; @@ -51,50 +51,18 @@ public ContentSerializer( IUserService userService, ITemplateService templateService, ISyncDocumentUrlCleaner? urlCleaner) - : base(entityService, languageService, relationService, shortStringHelper, logger, UmbracoObjectTypes.Document, syncMappers) + : base(entityService, languageService, relationService, shortStringHelper, logger, UmbracoObjectTypes.Document, syncMappers, userService) { this.contentService = contentService; this.relationAlias = Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias; - this.userService = userService; _templateService = templateService; _urlCleaner = urlCleaner; } #region Serialization - protected override async Task> SerializeCoreAsync(IContent item, SyncSerializerOptions options) - { - var node = InitializeNode(item, item.ContentType.Alias, options); - - var info = await SerializeInfoAsync(item, options); - - var properties = await SerializePropertiesAsync(item, options); - - node.Add(info); - node.Add(properties); - - return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), node, typeof(IContent), ChangeType.Export); - } - - protected override async Task SerializeInfoAsync(IContent item, SyncSerializerOptions options) - { - var info = await base.SerializeInfoAsync(item, options); - - info.Add(SerializePublishedStatus(item, options)); - - info.Add(await SerializeScheduleAsync(item, options)); - info.Add(await SerializeTemplateAsync(item, options)); - - if (options.GetSetting(uSyncConstants.DefaultSettings.IncludeUserInfo, uSyncConstants.DefaultSettings.IncludeUserInfo_Default)) - { - info.Add(await SerializerWriterInfoAsync(item)); - } - - return info; - } - - protected virtual async Task SerializeTemplateAsync(IContent item, SyncSerializerOptions options) + protected override async Task SerializeTemplateAsync(IContent item, SyncSerializerOptions options) { if (item.TemplateId != null && item.TemplateId.HasValue) { @@ -109,148 +77,15 @@ protected virtual async Task SerializeTemplateAsync(IContent item, Syn return new XElement(uSyncConstants.Xml.Template); } - private static XElement SerializePublishedStatus(IContent item, SyncSerializerOptions options) - { - // get the list of cultures we are serializing from the configuration - var activeCultures = options.GetCultures(); + protected override ContentScheduleCollection GetScheduleById(int id) + => contentService.GetContentScheduleByContentId(id); - var published = new XElement("Published"); - - // to make this a non-breaking change, we say default = item.published, but when - // dealing with cultures it isn't used. - published.Add(new XAttribute("Default", item.Published)); - - foreach (var culture in item.AvailableCultures.OrderBy(x => x)) - { - if (activeCultures.IsValid(culture)) - { - published.Add(new XElement("Published", item.IsCulturePublished(culture), - new XAttribute("Culture", culture))); - } - } - return published; - } - - protected virtual Task SerializeScheduleAsync(IContent item, SyncSerializerOptions options) - { - return uSyncTaskHelper.FromResultOf(() => - { - var node = new XElement("Schedule"); - var schedules = contentService.GetContentScheduleByContentId(item.Id); - - var cultures = options.GetCultures(); - - if (schedules != null) - { - foreach (var schedule in schedules.FullSchedule - .OrderBy(x => x.Action.ToString()) - .ThenBy(x => x.Culture)) - { - - // only export if its a blank culture or one of the ones we have set. - if (cultures.IsValidOrBlank(schedule.Culture)) - { - node.Add(new XElement("ContentSchedule", - new XElement("Culture", schedule.Culture), - new XElement("Action", schedule.Action), - new XElement("Date", schedule.Date.ToString("s")))); - } - } - } - - return node; - }); - } - - private Task SerializerWriterInfoAsync(IContent item) - { - return uSyncTaskHelper.FromResultOf(() => - { - var userInfoNode = new XElement("UserInfo"); - var usernames = new Dictionary(); - - userInfoNode.Add(new XElement("Writer", usernames.GetUsername(item.WriterId, userService.GetUserById!))); - userInfoNode.Add(new XElement("Creator", usernames.GetUsername(item.CreatorId, userService.GetUserById!))); - userInfoNode.Add(new XElement("Publisher", usernames.GetUsername(item.PublisherId, userService.GetUserById!))); - - return userInfoNode; - }); - } #endregion #region De-serialization - protected override async Task> DeserializeCoreAsync(XElement node, SyncSerializerOptions options) - { - var attempt = await FindOrCreateAsync(node); - if (!attempt.Success || attempt.Result is null) - throw attempt.Exception ?? new Exception($"Unknown error {node.GetAlias()}"); - - var item = attempt.Result; - - var details = new List(); - - details.AddRange(await DeserializeBaseAsync(item, node, options)); - - details.AddNotNull(await DeserializeTemplate(item, node)); - - var propertiesAttempt = await DeserializePropertiesAsync(item, node, options); - if (!propertiesAttempt.Success) - { - return SyncAttempt.Fail(item.Name ?? item.Id.ToString(), item, ChangeType.ImportFail, "Failed to deserialize properties", attempt.Exception); - } - - details.AddRange(propertiesAttempt.Result); - - var publishTimer = Stopwatch.StartNew(); - - - if (details.HasWarning() && options.FailOnWarnings()) - { - // Fail on warning. means we don't save or publish because something is wrong ? - return SyncAttempt.Fail(item.Name ?? item.Id.ToString(), item, ChangeType.ImportFail, "Failed with warnings", details, - new Exception("Import failed because of warnings, and fail on warnings is true")); - } - - // read user ids from the xml, - var userId = DeserializeWriterInfo(item, node); - - // if the userId hasn't been set in the options , we use the one from the xml. - if (options.UserId == -1) - { - options.UserId = userId; - } - - // published status - // this does the last save and publish - var saveAttempt = await DoSaveOrPublishAsync(item, node, options); - if (saveAttempt.Success) - { - var message = saveAttempt.Message; - - if (details.Any(x => x.Change == ChangeDetailType.Warning)) - message += $" with warning(s)"; - - if (publishTimer.ElapsedMilliseconds > 10000) - { - message += $" (Slow publish {publishTimer.ElapsedMilliseconds}ms)"; - } - - var changeType = options.GetSetting(uSyncConstants.DefaultSettings.OnlyPublishDirty, uSyncConstants.DefaultSettings.OnlyPublishDirty_Default) && !item.IsDirty() - ? ChangeType.NoChange : ChangeType.Import; - - // we say no change back, this stops the core second pass function from saving - // this item (which we have just done with DoSaveOrPublish) - return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), saveAttempt.Content as IContent ?? item, changeType, message ?? string.Empty, true, details); - } - else - { - return SyncAttempt.Fail(item.Name ?? item.Id.ToString(), item, ChangeType.ImportFail, saveAttempt.Message ?? string.Empty, saveAttempt.Exception); - } - } - - protected virtual async Task DeserializeTemplate(IContent item, XElement node) + protected override async Task DeserializeTemplate(IContent item, XElement node) { var templateNode = node.Element(uSyncConstants.Xml.Info)?.Element("Template"); @@ -284,446 +119,14 @@ protected override async Task> DeserializeCoreAsync(XEleme return null; } - public int DeserializeWriterInfo(IContent item, XElement node) - { - var writerNode = node.Element(uSyncConstants.Xml.Info)?.Element("UserInfo"); - if (writerNode == null) return -1; - - var emails = new Dictionary(StringComparer.InvariantCultureIgnoreCase); - - item.CreatorId = emails.GetEmails(writerNode.Element("Creator").ValueOrDefault(string.Empty), userService.GetByEmail!); - item.WriterId = emails.GetEmails(writerNode.Element("Writer").ValueOrDefault(string.Empty), userService.GetByEmail!); - item.PublisherId = emails.GetEmails(writerNode.Element("Publisher").ValueOrDefault(string.Empty), userService.GetByEmail!); - - return item.WriterId; - } - - /// - /// Second pass. - /// - /// - /// in v9.4 we eliminated this - but because schedules now require the content to - /// exist, we need to second pass schedules, only. 99% of the time this shouldn't - /// have any impact. - /// - public override async Task> DeserializeSecondPassAsync(IContent item, XElement node, SyncSerializerOptions options) - { - var details = new List(); - - details.AddRange(await this.DeserializeSecondPassSharedAsync(item, node, options, - Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias)); - - var changes = await DeserializeSchedulesAsync(item, node, options); - if (changes.Count != 0) - return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), item, ChangeType.Import, "" ?? string.Empty, true, - [.. details, .. changes]); - - // if we have changed the sort order, then we return a change, else it was no change. - return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), item, - details.Count == 0 ? ChangeType.NoChange : ChangeType.Import, details); - } - - private Task> DeserializeSchedulesAsync(IContent item, XElement node, SyncSerializerOptions options) - { - return uSyncTaskHelper.FromResultOf(() => - { - var changes = new List(); - var nodeSchedules = new ContentScheduleCollection(); - var currentSchedules = contentService.GetContentScheduleByContentId(item.Id); - var cultures = options.GetDeserializedCultures(node); - - var schedules = node.Element(uSyncConstants.Xml.Info)?.Element("Schedule"); - if (schedules != null && schedules.HasElements) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("De-serialize Schedules {name}", item.Name); - - foreach (var schedule in schedules.Elements("ContentSchedule")) - { - var importSchedule = GetContentScheduleFromNode(schedule); - if (cultures.IsValidOrBlank(importSchedule.Culture)) - { - if (importSchedule.Date < DateTime.Now) - continue; // don't add schedules in the past - - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Adding {action} {culture} {date}", importSchedule.Action, importSchedule.Culture, importSchedule.Date); - - nodeSchedules.Add(importSchedule); - - var existing = FindSchedule(currentSchedules, importSchedule); - if (existing != null) - { - currentSchedules.Remove(existing); - } - currentSchedules.Add(importSchedule); - changes.Add(uSyncChange.Update("Schedule", $"{importSchedule.Culture} {importSchedule.Action}", "", importSchedule.Date.ToString())); - } - } - } - - if (currentSchedules != null) - { - // remove things that are in the current but not the import. - var toRemove = currentSchedules.FullSchedule.Where(x => FindSchedule(nodeSchedules, x) == null) - .ToList(); - - if (logger.IsEnabled(LogLevel.Debug) && toRemove.Count > 0) - logger.LogDebug("Removing Schedules {name} ({count} to remove)", item.Name, toRemove.Count); - - foreach (var oldItem in toRemove) - { - if (cultures.IsValidOrBlank(oldItem.Culture)) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Removing Schedule : {culture} {action} {date}", oldItem.Culture, oldItem.Action, oldItem.Date); - - // only remove a culture if this serialization included it. - // we don't remove things we didn't serialize. - currentSchedules.Remove(oldItem); - - changes.Add(uSyncChange.Delete("Schedule", $"{oldItem.Culture} - {oldItem.Action}", oldItem.Date.ToString())); - } - } - - if (changes.Count != 0) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Saving Schedule changes: {item}", item.Name); - - contentService.PersistContentSchedule(item, currentSchedules); - return changes; - } - - return []; - } - - - return []; - }); - } - - private static ContentSchedule GetContentScheduleFromNode(XElement scheduleNode) - { - var key = Guid.Empty; - var culture = scheduleNode.Element("Culture").ValueOrDefault(string.Empty); - var date = scheduleNode.Element("Date").ValueOrDefault(DateTime.MinValue); - var action = scheduleNode.Element("Action").ValueOrDefault(ContentScheduleAction.Release); - - return new ContentSchedule(key, culture, date, action); - } - - private static ContentSchedule? FindSchedule(ContentScheduleCollection currentSchedules, ContentSchedule newSchedule) - { - var schedule = currentSchedules.GetSchedule(newSchedule.Culture, newSchedule.Action); - if (schedule != null && schedule.Any()) return schedule.FirstOrDefault(); - - return null; - } - // trashed helpers. protected override void MoveToRecycleBin(IContent item) => contentService.MoveToRecycleBin(item); protected override void SetTrashed(IContent item) => ((ContentBase)item).Trashed = true; protected override void MoveItem(IContent item, int parentId) => contentService.Move(item, parentId); protected override IContent? GetByKey(Guid id) => contentService.GetById(id); - [Obsolete("Use DoSaveOrPublishAsync will be removed in v18")] - protected virtual Attempt DoSaveOrPublish(IContent item, XElement node, SyncSerializerOptions options) - { - SyncContentUpdateResult result = DoSaveOrPublishAsync(item, node, options).Result; - return Attempt.If(result.Success, result.Message); - } - - protected virtual async Task DoSaveOrPublishAsync(IContent item, XElement node, SyncSerializerOptions options) - { - if (options.GetSetting(uSyncConstants.DefaultSettings.OnlyPublishDirty, uSyncConstants.DefaultSettings.OnlyPublishDirty_Default) && !item.IsDirty()) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("{name} not publishing because nothing is dirty [{dirty} {userDirty}]", item.Name, item.IsDirty(), item.IsAnyUserPropertyDirty()); - - return new SyncContentUpdateResult(true, item, "No changes"); - } - - var trashed = item.Trashed || (node.Element(uSyncConstants.Xml.Info)?.Element("Trashed").ValueOrDefault(false) ?? false); - var publishedNode = node.Element(uSyncConstants.Xml.Info)?.Element("Published"); - if (!trashed && publishedNode != null) - { - var schedules = GetSchedules(node.Element(uSyncConstants.Xml.Info)?.Element("Schedule")); - - var scheduleCollection = new ContentScheduleCollection(); - foreach (var schedule in schedules) - { - scheduleCollection.Add(schedule); - } - - // v14 we always save now, as save and publish doesn't do that anymore... - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Performing Save: {id} {name}", item.Id, item.Name); - - var result = contentService.Save(item, options.UserId, scheduleCollection); - if (result.Success) - item = contentService.GetById(item.Id) ?? item; - else - { - // something went wrong saving. ??? - logger.LogWarning("Failed to save item {name} [{messages}]", item.Name, result.EventMessages?.FormatMessages(",") ?? "(none)"); - return new SyncContentUpdateResult(false, item, $"Failed to save {item.Name} [{result.EventMessages?.FormatMessages(",") ?? "(none)"}]"); - } - - if (publishedNode.HasElements) - { - // culture based publishing. - var cultures = options.GetDeserializedCultures(node); - - // Only unpublished cultures, when we are not already filtered by cultures - // this stops things we don't care about this time being unpublished. - var unpublishMissingCultures = cultures.Count == 0; - - var cultureStatuses = new Dictionary(); - - foreach (var culturePublish in publishedNode.Elements("Published")) - { - var culture = culturePublish.Attribute("Culture").ValueOrDefault(string.Empty); - - if (!string.IsNullOrWhiteSpace(culture) && cultures.IsValid(culture)) - { - // is the item published in the config file - var configState = culturePublish.ValueOrDefault(false) - ? uSyncContentState.Published - : uSyncContentState.Unpublished; - - // pending or outstanding scheduled actions can change the action we take. - cultureStatuses[culture] = - schedules.CalculateCultureState(culture, configState); - } - } - - if (cultureStatuses.Count > 0) - { - return await PublishItemAsync(item, cultureStatuses, unpublishMissingCultures, options.UserId); - } - } - else - { - var state = publishedNode.Attribute("Default").ValueOrDefault(false) - ? uSyncContentState.Published - : uSyncContentState.Unpublished; - - state = schedules.CalculateCultureState(string.Empty, state); - - if (state == uSyncContentState.Published) - { - return await PublishItemAsync(item, options.UserId); - } - else if (state == uSyncContentState.Unpublished && item.Published == true) - { - contentService.Unpublish(item); - } - } - } - else - { - // save? - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Performing Save (Not published): {id} {name}", item.Id, item.Name); - - await SaveItemAsync(item, options.UserId); - item = contentService.GetById(item.Id) ?? item; - } - - return new SyncContentUpdateResult(true, item, "Saved"); - } - - /// - /// work out what the current status of a given culture should be. - /// - - private static List GetSchedules(XElement? schedulesNode) - { - var schedules = new List(); - if (schedulesNode != null && schedulesNode.HasElements) - { - foreach (var schedule in schedulesNode.Elements("ContentSchedule")) - { - schedules.Add(GetContentScheduleFromNode(schedule)); - } - } - return schedules; - } - - /// - /// Publish a single item, all cultures - /// - [Obsolete("Use PublishItemAsync will be removed in v18")] - public Attempt PublishItem(IContent item, int userId) - { - var result = PublishItemAsync(item, userId).Result; - return Attempt.If(result.Success, result.Message); - } - - /// - /// Publish a single item, all cultures - /// - public Task PublishItemAsync(IContent item, int userId) - { - try - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Publishing: {item}", item.Name); - - var result = contentService.Publish(item, cultures: [], userId: userId); - if (!result.Success) - { - var messages = result.EventMessages?.FormatMessages(","); - logger.LogError("Failed to publish {result} [{messages}]", result.Result, messages ?? "(none)"); - if (result.InvalidProperties is not null) - { - logger.LogError("Invalid Properties: {properties}", string.Join(", ", result.InvalidProperties.Select(x => x.Alias))); - } - - } - - return Task.FromResult(result.FromPublishResult()); - } - catch (ArgumentNullException ex) - { - // we can get thrown a null argument exception by the notifier, - // which is non critical! but we are ignoring this error. ! <= 8.1.5 - if (!ex.Message.Contains("siteUri")) throw; - - return Task.FromResult(new SyncContentUpdateResult - { - Success = true, - Content = GetByKey(item.Key) ?? item, - Message = "Published", - Exception = ex - }); - } - } - - /// - /// Publish/unpublish Specified cultures for an item, and optionally un-publish missing cultures - /// - [Obsolete("Use PublishItemAsync will be removed in v18")] - private Attempt PublishItem(IContent item, IDictionary cultures, bool unpublishMissing, int userId) - { - var result = PublishItemAsync(item, cultures, unpublishMissing, userId).Result; - return Attempt.If(result.Success, result.Message); - } - - private async Task PublishItemAsync(IContent item, IDictionary cultures, bool unpublishMissing, int userId) - { - if (cultures == null) return await PublishItemAsync(item, userId); - - try - { - IContent content = item; - - var publishedCultures = cultures - .Where(x => x.Value == uSyncContentState.Published) - .Select(x => x.Key) - .ToArray(); - - if (publishedCultures.Length > 0) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Publishing {item} for {cultures}", item.Name, string.Join(",", publishedCultures)); - - var result = contentService.Publish(item, publishedCultures, userId); - - // if this fails, we return the result - if (!result.Success) - { - var messages = result.EventMessages?.FormatMessages(","); - logger.LogError("Failed to publish {result} [{messages}]", result.Result, messages ?? "(none)"); - if (result.InvalidProperties != null) - { - logger.LogError("Invalid Properties: {properties}", string.Join(", ", result.InvalidProperties.Select(x => x.Alias))); - } - - return result.FromPublishResult(); - } - - content = result.Content as IContent ?? content; - } - - var unpublishedCultures = cultures - .Where(x => x.Value == uSyncContentState.Unpublished) - .Select(x => x.Key) - .ToArray(); - - if (unpublishedCultures.Length > 0) - { - - foreach (var culture in unpublishedCultures) - { - // unpublish if the culture is currently published. - if (item.PublishedCultures.InvariantContains(culture)) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Unpublishing {item} for {culture}", item.Name, culture); - - var result = contentService.Unpublish(item, culture, userId); - if (result.Success) - content = result.Content as IContent ?? content; - } - - } - } - - if (unpublishMissing) - { - content = UnpublishMissingCultures(item, [.. cultures.Select(x => x.Key)]); - } - - return new SyncContentUpdateResult(true, content, "Done"); - } - catch (ArgumentNullException ex) - { - // we can get thrown a null argument exception by the notifier, - // which is non critical! but we are ignoring this error. ! <= 8.1.5 - if (!ex.Message.Contains("siteUri")) throw; - - return new SyncContentUpdateResult - { - Success = true, - Content = GetByKey(item.Key) ?? item, - Message = "Published", - Exception = ex - }; - } - } - /// - /// unpublish any cultures that are marked as published, in umbraco but are not published - /// in our *.config file. - /// - /// - /// - private IContent UnpublishMissingCultures(IContent item, string[] allCultures) - { - IContent content = item; - - var missingCultures = item - .PublishedCultures - .Where(x => !allCultures.InvariantContains(x)) - .ToArray(); - - if (missingCultures != null && missingCultures.Length > 0) - { - foreach (var culture in missingCultures) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Unpublishing {item} culture not defined in config file {culture}", item.Name, culture); - - var result = contentService.Unpublish(item, culture); - if (result.Success) - content = result.Content as IContent ?? content; - } - } - - return content; - } - + public override Task SaveWithSchedulesAsync(IContent item, int userId, ContentScheduleCollection scheduleCollection) + => Task.FromResult(contentService.Save(item, userId, scheduleCollection)); #endregion protected override Task> CreateItemAsync(string alias, ITreeEntity? parent, string itemType) @@ -770,8 +173,23 @@ private IContent UnpublishMissingCultures(IContent item, string[] allCultures) #endregion - protected override Task FindParentByIdAsync(int id) - => Task.FromResult(contentService.GetById(id)); + protected override Task FindParentByIdAsync(int id) + { + return uSyncTaskHelper.FromResultOf(() => + { + var parent = contentService.GetById(id); + if (parent != null) + { + return new SyncParentItem + { + Id = parent.Id, + Key = parent.Key, + Name = parent.Name ?? parent.Id.ToString() + }; + } + return null; + }); + } public override Task SaveAsync(IEnumerable items) => Task.FromResult(contentService.Save(items)); @@ -779,7 +197,15 @@ public override Task SaveAsync(IEnumerable items) public override async Task SaveItemAsync(IContent item) => await SaveItemAsync(item, -1); - public Task SaveItemAsync(IContent item, int userId) + protected override Task PersistSchedulesAsync(IContent item, ContentScheduleCollection schedules) + { + return uSyncTaskHelper.FromResultOf(() => + { + contentService.PersistContentSchedule(item, schedules); + }); + } + + public override Task SaveItemAsync(IContent item, int userId) { return uSyncTaskHelper.FromResultOf(() => { @@ -796,6 +222,12 @@ public Task SaveItemAsync(IContent item, int userId) }); } + protected override PublishResult Unpublish(IContent item, string? culture, int userId = -1) + => contentService.Unpublish(item, culture, userId); + + protected override PublishResult Publish(IContent item, string[] cultures, int userId = -1) + => contentService.Publish(item, cultures, userId); + public override Task DeleteItemAsync(IContent item) { return uSyncTaskHelper.FromResultOf(() => diff --git a/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs b/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs index 00214dcd..be4a4a99 100644 --- a/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs +++ b/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs @@ -15,6 +15,7 @@ using uSync.Core.Extensions; using uSync.Core.Mapping; using uSync.Core.Models; +using uSync.Core.Serialization.Models; namespace uSync.Core.Serialization.Serializers; @@ -22,6 +23,8 @@ public abstract class ContentSerializerBase : SyncTreeSerializerBase objectTypes = [this.umbracoObjectType]; + if (this.containerType != UmbracoObjectTypes.Unknown) + objectTypes.Add(this.containerType); + + var items = syncMappers.EntityCache.GetAll([..objectTypes], [.. lookups]); // var items = entityService.GetAll(this.umbracoObjectType, lookups.ToArray()); foreach (var item in items) { @@ -979,7 +986,7 @@ public override async Task> SerializeEmptyAsync(TObject it } else if (parentKey == Guid.Empty) { - return FindAtRootAsync(alias).Result; + return await FindAtRootAsync(alias); } return default; @@ -987,9 +994,11 @@ public override async Task> SerializeEmptyAsync(TObject it protected virtual async Task FindItemAsync(string alias, TObject? parent) { + var folderType = this.containerType != UmbracoObjectTypes.Unknown ? this.containerType : this.umbracoObjectType; + if (parent != null) { - var children = entityService.GetChildren(parent.Id, this.umbracoObjectType); + var children = entityService.GetChildren(parent.Id, folderType); var child = children.FirstOrDefault(x => x.Name?.ToSafeAlias(shortStringHelper)?.InvariantEquals(alias) is true); if (child != null) return await FindItemAsync(child.Key); @@ -1007,7 +1016,20 @@ public override async Task> SerializeEmptyAsync(TObject it public override string ItemAlias(TObject item) => item.Name ?? item.Id.ToString(); - protected async Task FindParentAsync(XElement node, bool searchByAlias = false) + protected virtual async Task FindItemAsParent(Guid key) + { + var item = await FindItemAsync(key); + return item == null ? null : new SyncParentItem + { + Id = item.Id, + Key = item.Key, + Name = item.Name ?? item.Id.ToString(), + Path = item.Path, + Level = item.Level + }; + } + + protected async Task FindParentAsync(XElement node, bool searchByAlias = false) { var item = default(TObject); @@ -1019,8 +1041,15 @@ public override string ItemAlias(TObject item) if (logger.IsEnabled(LogLevel.Trace)) logger.LogTrace("Looking for Parent by Key {Key}", key); - item = await FindItemAsync(key); - if (item != null) return item; + var parentItem = await FindItemAsParent(key); + if (parentItem != null) return new SyncParentItem + { + Id = parentItem.Id, + Key = parentItem.Key, + Name = parentItem.Name ?? parentItem.Id.ToString(), + Path = parentItem.Path, + Level = parentItem.Level + }; } if (item == null && searchByAlias) @@ -1036,14 +1065,28 @@ public override string ItemAlias(TObject item) } } - return item; + return item is null ? null : new SyncParentItem + { + Id = item.Id, + Key = item.Key, + Name = item.Name ?? item.Id.ToString(), + Path = item.Path, + Level = item.Level + }; } - protected async Task FindParentByPathAsync(string path, bool failIfNotExact = false) + protected async Task FindParentByPathAsync(string path, bool failIfNotExact = false) { // logger.Debug(serializerType, "Looking for Parent by path {Path}", path); var folders = path.ToDelimitedList("/").ToList(); - return await FindByPathAsync(folders.Take(folders.Count - 1), failIfNotExact); + var item = await FindByPathAsync(folders.Take(folders.Count - 1), failIfNotExact); + return item == null ? null : new SyncParentItem + { + Id = item.Id, + Key = item.Key, + Name = item.Name ?? item.Id.ToString(), + Path = item.Path + }; } protected async Task FindByPathAsync(IEnumerable folders, bool failIfNotExact) @@ -1117,8 +1160,8 @@ protected override async Task HasParentItemAsync(XElement node) private void CleanCaches(int id) { - // clean the name cache for this id. - // nameCache.Remove(id); + if (logger.IsEnabled(LogLevel.Trace)) + logger.LogTrace("Cleaning name cache for id {id}", id); } protected CachedName? GetCachedName(int id) @@ -1227,5 +1270,5 @@ private List GetExcludedProperties(SyncSerializerOptions options) /// ` /// find the item by id, (we really don't want to do this, but parents are only stored in content by id). /// - protected abstract Task FindParentByIdAsync(int id); + protected abstract Task FindParentByIdAsync(int id); } diff --git a/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs b/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs index 039346ec..bf05b6e3 100644 --- a/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs @@ -143,11 +143,11 @@ protected override async Task> DeserializeCoreAsync(XEleme }); } - protected override Task DoSaveOrPublishAsync(IContent item, XElement node, SyncSerializerOptions options) + protected override Task> DoSaveOrPublishAsync(IContent item, XElement node, SyncSerializerOptions options) { contentService.SaveBlueprint(item, null, options.UserId); var updatedItem = contentService.GetBlueprintById(item.Id); - return Task.FromResult(new SyncContentUpdateResult + return Task.FromResult(new SyncContentUpdateResult { Success = true, Content = updatedItem ?? item, diff --git a/uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs b/uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs new file mode 100644 index 00000000..0036c929 --- /dev/null +++ b/uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs @@ -0,0 +1,119 @@ +using Microsoft.Extensions.Logging; + +using System.Xml.Linq; + +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Services; + +using uSync.Core.Models; + +namespace uSync.Core.Serialization.Serializers; + +[SyncSerializer("8AD4ED7F-9E47-4918-ACAE-146132F5AB56", + "Element Serializer", uSyncConstants.Serialization.ElementContainer, IsTwoPass = false)] +internal class ElementContainerSerializer : SyncSerializerBase, + ISyncEntityContainerSerializer +{ + private readonly IElementContainerService _containerService; + private readonly IIdKeyMap _idKeyMap; + + public ElementContainerSerializer( + IEntityService entityService, + ILogger> logger, + IElementContainerService containerService, + IIdKeyMap idKeyMap) : base(entityService, logger) + { + _containerService = containerService; + _idKeyMap = idKeyMap; + } + + public UmbracoObjectTypes ContainedType => UmbracoObjectTypes.Element; + + public override async Task DeleteItemAsync(EntityContainer item) + => await _containerService.DeleteAsync(item.Key, Constants.Security.SuperUserKey); + + public override async Task FindItemAsync(Guid key) + => await _containerService.GetAsync(key); + + public override Task FindItemAsync(string alias) + => Task.FromResult(null); + + public string GetEntityContainerPath(EntityContainer item) => string.Empty; + + public override string ItemAlias(EntityContainer item) => item.Name ?? item.Id.ToString(); + + public override async Task SaveItemAsync(EntityContainer item) + { + if (item.Name is null) return; + + if (item.HasIdentity) { + await _containerService.UpdateAsync(item.Key, item.Name, Constants.Security.SuperUserKey); + } + else { + Guid? parentKey = null; + var parentKeyAttempt = _idKeyMap.GetKeyForId(item.Id, UmbracoObjectTypes.ElementContainer); + if (parentKeyAttempt.Success) + parentKey = parentKeyAttempt.Result; + + await _containerService.CreateAsync(item.Key, item.Name, parentKey, Constants.Security.SuperUserKey); + } + } + + protected override async Task> DeserializeCoreAsync(XElement node, SyncSerializerOptions options) + { + var item = await FindItemAsync(node); + if (item is null) + { + // create a new one. + item = new EntityContainer(ContainedType.GetGuid()); + } + + item.Name = node.GetAlias(); + item.Key = node.GetKey(); + item.SortOrder = int.TryParse(node.Attribute("SortOrder")?.Value, out var sortOrder) ? sortOrder : item.SortOrder; + + var parentNode = node.Element("Parent"); + if (parentNode is not null) + { + var parentKey = parentNode.Attribute("Key")?.Value; + if (Guid.TryParse(parentKey, out var parentGuid)) + { + var parentItem = await _containerService.GetAsync(parentGuid); + if (parentItem is not null) + { + item.ParentId = parentItem.Id; + } + else + { + logger.LogWarning("Parent with key {ParentKey} not found for container {ContainerName}", parentKey, item.Name); + } + } + else + { + logger.LogWarning("Invalid parent key {ParentKey} for container {ContainerName}", parentKey, item.Name); + } + } + + return SyncAttempt.Succeed(ItemAlias(item), item, ChangeType.Import, []); + + } + + protected override async Task> SerializeCoreAsync(EntityContainer item, SyncSerializerOptions options) + { + var node = InitializeBaseNode(item, ItemAlias(item), item.Level); + node.Add(new XElement("SortOrder", item.SortOrder)); + + if (item.ParentId != -1) { + var parent = await _containerService.GetParentAsync(item); + if (parent is not null) { + node.Add(new XElement("Parent", + new XAttribute("Key", parent.Key)), + new XElement(parent.Name ?? string.Empty)); + } + } + + return SyncAttempt.Succeed(ItemAlias(item), node, ChangeType.Export, []); + + } +} diff --git a/uSync.Core/Serialization/Serializers/ElementSerializer.cs b/uSync.Core/Serialization/Serializers/ElementSerializer.cs new file mode 100644 index 00000000..503e22a8 --- /dev/null +++ b/uSync.Core/Serialization/Serializers/ElementSerializer.cs @@ -0,0 +1,156 @@ +using Microsoft.Extensions.Logging; + +using System.Xml.Linq; + +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Strings; + +using uSync.Core.Extensions; +using uSync.Core.Mapping; +using uSync.Core.Models; +using uSync.Core.Serialization.Models; + +namespace uSync.Core.Serialization.Serializers; + +[SyncSerializer("7EF3FF65-DD5E-4BDF-B82F-E8ED6F638BE9", "ElementSerializer", uSyncConstants.Serialization.Element)] +public class ElementSerializer : PublishableContentBaseSerializer, ISyncSerializer +{ + private readonly IElementService _elementService; + private readonly IElementContainerService _containerService; + private readonly IContentTypeService _contentTypeService; + + public ElementSerializer( + IEntityService entityService, + ILanguageService languageService, + IRelationService relationService, + IShortStringHelper shortStringHelper, + ILogger> logger, + SyncValueMapperCollection syncMappers, + IElementService elementService, + IElementContainerService containerService, + IContentTypeService contentTypeService, + IUserService userService) + : base(entityService, languageService, relationService, shortStringHelper, logger, + UmbracoObjectTypes.Element, syncMappers, userService) + { + _elementService = elementService; + _containerService = containerService; + _contentTypeService = contentTypeService; + + containerType = UmbracoObjectTypes.ElementContainer; + } + + public override Task DeleteItemAsync(IElement item) + => Task.FromResult(_elementService.Delete(item)); + + public override Task FindItemAsync(Guid key) + => Task.FromResult(_elementService.GetById(key)); + + public override Task SaveItemAsync(IElement item) + => Task.FromResult(_elementService.Save(item)); + + protected override Task> CreateItemAsync(string alias, ITreeEntity? parent, string itemType) + { + var contentType = _contentTypeService.Get(itemType); + if (contentType is null) + return Task.FromResult(Attempt.Fail(new Exception($"No content type found with alias {itemType}"))); + + var element = new Element(alias, parent?.Id ?? -1, contentType); + var operationalResult = _elementService.Save(element); + if (operationalResult.Success is false) + { + var messages = operationalResult.EventMessages?.FormatMessages() ?? ""; + return Task.FromResult(Attempt.Fail(new Exception($"Failed to create element with alias {alias} and content type {itemType}. {messages}"))); + } + + return Task.FromResult(Attempt.Succeed(element)); + } + + // We have a mixture of IElement and IElementContainer, but the root finder is only looking for containers, + // so we need to find a way to find elements at root level. + protected override Task FindAtRootAsync(string alias) + { + return uSyncTaskHelper.FromResultOf(() => + { + var rootElements = entityService.GetChildren(Constants.System.Root, UmbracoObjectTypes.Element); + if (rootElements is null || rootElements.Any() is false) return null; + + var rootElement = rootElements.FirstOrDefault(x => x.Name?.Equals(alias, StringComparison.InvariantCultureIgnoreCase) is true); + if (rootElement is null) return null; + + return GetByKey(rootElement.Key); + + }); + } + + protected override Task FindItemAsParent(Guid key) + { + return uSyncTaskHelper.FromResultOf(() => + { + var container = entityService.Get(key, UmbracoObjectTypes.ElementContainer); + if (container is null) return null; + + return container is null ? null : + new SyncParentItem + { + Id = container.Id, + Key = container.Key, + Name = container.Name ?? container.Id.ToString(), + Path = container.Path, + Level = container.Level + }; + }); + } + + protected override async Task FindParentByIdAsync(int id) + { + var container = entityService.Get(id, UmbracoObjectTypes.ElementContainer); + if (container is null) return null; + + var parent = await _containerService.GetAsync(container.Key); + if (parent is not null) + { + return new SyncParentItem { Id = parent.Id, Key = parent.Key, Name = parent.Name ?? parent.Id.ToString() }; + } + return null; + } + + + protected override Task DeserializeTemplate(IElement item, XElement node) + => Task.FromResult(null); + + protected override ContentScheduleCollection GetScheduleById(int id) + => _elementService.GetContentScheduleByContentId(id); + + public override Task SaveItemAsync(IElement item, int userId) + { + return uSyncTaskHelper.FromResultOf(() => + { + try + { + _elementService.Save(item, userId); + } + catch (ArgumentNullException ex) + { + // we can get thrown a null argument exception by the notifier, + // which is non critical! but we are ignoring this error. ! <= 8.1.5 + if (!ex.Message.Contains("siteUri")) throw; + } + }); + } + + protected override PublishResult Unpublish(IElement item, string? culture, int userId = -1) + => _elementService.Unpublish(item, culture, userId); + + protected override PublishResult Publish(IElement item, string[] cultures, int userId = -1) + => _elementService.Publish(item, cultures, userId); + + protected override Task PersistSchedulesAsync(IElement item, ContentScheduleCollection schedules) + => uSyncTaskHelper.FromResultOf(() => _elementService.PersistContentSchedule(item, schedules)); + + public override Task SaveWithSchedulesAsync(IElement item, int userId, ContentScheduleCollection scheduleCollection) + => Task.FromResult(_elementService.Save(item, userId, scheduleCollection)); +} diff --git a/uSync.Core/Serialization/Serializers/MediaSerializer.cs b/uSync.Core/Serialization/Serializers/MediaSerializer.cs index 9b9fe8c1..54121c2c 100644 --- a/uSync.Core/Serialization/Serializers/MediaSerializer.cs +++ b/uSync.Core/Serialization/Serializers/MediaSerializer.cs @@ -14,6 +14,7 @@ using uSync.Core.Extensions; using uSync.Core.Mapping; using uSync.Core.Models; +using uSync.Core.Serialization.Models; namespace uSync.Core.Serialization.Serializers; @@ -235,7 +236,21 @@ public override Task SaveItemAsync(IMedia item) public override Task DeleteItemAsync(IMedia item) => uSyncTaskHelper.FromResultOf(() => { return _mediaService.Delete(item); }); - protected override Task FindParentByIdAsync(int id) - => Task.FromResult(_mediaService.GetById(id)); - + protected override Task FindParentByIdAsync(int id) + { + return uSyncTaskHelper.FromResultOf(() => + { + var parent = _mediaService.GetById(id); + if (parent != null) + { + return new SyncParentItem + { + Id = parent.Id, + Key = parent.Key, + Name = parent.Name ?? string.Empty + }; + } + return null; + }); + } } diff --git a/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs b/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs new file mode 100644 index 00000000..83cb4bbd --- /dev/null +++ b/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs @@ -0,0 +1,615 @@ +using Microsoft.Extensions.Logging; + +using System.Diagnostics; +using System.Xml.Linq; + +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Core.Strings; +using Umbraco.Extensions; + +using uSync.Core.Extensions; +using uSync.Core.Mapping; +using uSync.Core.Models; + +namespace uSync.Core.Serialization.Serializers; + +public abstract class PublishableContentBaseSerializer : ContentSerializerBase + where TObject : class, IPublishableContentBase +{ + protected readonly IUserService _userService; + + protected PublishableContentBaseSerializer( + IEntityService entityService, + ILanguageService languageService, + IRelationService relationService, + IShortStringHelper shortStringHelper, + ILogger> logger, + UmbracoObjectTypes umbracoObjectType, + SyncValueMapperCollection syncMappers, + IUserService userService) + : base(entityService, languageService, relationService, shortStringHelper, logger, umbracoObjectType, syncMappers) + { + _userService = userService; + } + + protected override async Task> SerializeCoreAsync(TObject item, SyncSerializerOptions options) + { + var node = InitializeNode(item, item.ContentType.Alias, options); + + var info = await SerializeInfoAsync(item, options); + + var properties = await SerializePropertiesAsync(item, options); + + node.Add(info); + node.Add(properties); + + return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), node, typeof(IContent), ChangeType.Export); + } + + + protected override async Task SerializeInfoAsync(TObject item, SyncSerializerOptions options) + { + var info = await base.SerializeInfoAsync(item, options); + + info.Add(SerializePublishedStatus(item, options)); + + info.Add(await SerializeScheduleAsync(item, options)); + info.AddIfNotNull(await SerializeTemplateAsync(item, options)); + + if (options.GetSetting(uSyncConstants.DefaultSettings.IncludeUserInfo, uSyncConstants.DefaultSettings.IncludeUserInfo_Default)) + { + info.Add(await SerializerWriterInfoAsync(item)); + } + + return info; + } + + protected static XElement SerializePublishedStatus(TObject item, SyncSerializerOptions options) + { + // get the list of cultures we are serializing from the configuration + var activeCultures = options.GetCultures(); + + var published = new XElement("Published"); + + // to make this a non-breaking change, we say default = item.published, but when + // dealing with cultures it isn't used. + published.Add(new XAttribute("Default", item.Published)); + + foreach (var culture in item.AvailableCultures.OrderBy(x => x)) + { + if (activeCultures.IsValid(culture)) + { + published.Add(new XElement("Published", item.IsCulturePublished(culture), + new XAttribute("Culture", culture))); + } + } + return published; + } + + protected virtual Task SerializeTemplateAsync(TObject item, SyncSerializerOptions options) => Task.FromResult(null); + + protected abstract ContentScheduleCollection GetScheduleById(int id); + + protected virtual Task SerializeScheduleAsync(TObject item, SyncSerializerOptions options) + { + return uSyncTaskHelper.FromResultOf(() => + { + var node = new XElement("Schedule"); + var schedules = GetScheduleById(item.Id); + + var cultures = options.GetCultures(); + + if (schedules != null) + { + foreach (var schedule in schedules.FullSchedule + .OrderBy(x => x.Action.ToString()) + .ThenBy(x => x.Culture)) + { + + // only export if its a blank culture or one of the ones we have set. + if (cultures.IsValidOrBlank(schedule.Culture)) + { + node.Add(new XElement("ContentSchedule", + new XElement("Culture", schedule.Culture), + new XElement("Action", schedule.Action), + new XElement("Date", schedule.Date.ToString("s")))); + } + } + } + + return node; + }); + } + + protected Task SerializerWriterInfoAsync(TObject item) + { + return uSyncTaskHelper.FromResultOf(() => + { + var userInfoNode = new XElement("UserInfo"); + var usernames = new Dictionary(); + + userInfoNode.Add(new XElement("Writer", usernames.GetUsername(item.WriterId, _userService.GetUserById!))); + userInfoNode.Add(new XElement("Creator", usernames.GetUsername(item.CreatorId, _userService.GetUserById!))); + userInfoNode.Add(new XElement("Publisher", usernames.GetUsername(item.PublisherId, _userService.GetUserById!))); + + return userInfoNode; + }); + } + + protected abstract Task DeserializeTemplate(TObject item, XElement node); + + protected override async Task> DeserializeCoreAsync(XElement node, SyncSerializerOptions options) + { + var attempt = await FindOrCreateAsync(node); + if (!attempt.Success || attempt.Result is null) + throw attempt.Exception ?? new Exception($"Unknown error {node.GetAlias()}"); + + var item = attempt.Result; + + var details = new List(); + + details.AddRange(await DeserializeBaseAsync(item, node, options)); + + details.AddNotNull(await DeserializeTemplate(item, node)); + + var propertiesAttempt = await DeserializePropertiesAsync(item, node, options); + if (!propertiesAttempt.Success) + { + return SyncAttempt.Fail(item.Name ?? item.Id.ToString(), item, ChangeType.ImportFail, "Failed to deserialize properties", attempt.Exception); + } + + details.AddRange(propertiesAttempt.Result); + + var publishTimer = Stopwatch.StartNew(); + + + if (details.HasWarning() && options.FailOnWarnings()) + { + // Fail on warning. means we don't save or publish because something is wrong ? + return SyncAttempt.Fail(item.Name ?? item.Id.ToString(), item, ChangeType.ImportFail, "Failed with warnings", details, + new Exception("Import failed because of warnings, and fail on warnings is true")); + } + + // read user ids from the xml, + var userId = DeserializeWriterInfo(item, node); + + // if the userId hasn't been set in the options , we use the one from the xml. + if (options.UserId == -1) + { + options.UserId = userId; + } + + // published status + // this does the last save and publish + var saveAttempt = await DoSaveOrPublishAsync(item, node, options); + if (saveAttempt.Success) + { + var message = saveAttempt.Message; + + if (details.Any(x => x.Change == ChangeDetailType.Warning)) + message += $" with warning(s)"; + + if (publishTimer.ElapsedMilliseconds > 10000) + { + message += $" (Slow publish {publishTimer.ElapsedMilliseconds}ms)"; + } + + var changeType = options.GetSetting(uSyncConstants.DefaultSettings.OnlyPublishDirty, uSyncConstants.DefaultSettings.OnlyPublishDirty_Default) && !item.IsDirty() + ? ChangeType.NoChange : ChangeType.Import; + + // we say no change back, this stops the core second pass function from saving + // this item (which we have just done with DoSaveOrPublish) + return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), saveAttempt.Content as TObject ?? item, changeType, message ?? string.Empty, true, details); + } + else + { + return SyncAttempt.Fail(item.Name ?? item.Id.ToString(), item, ChangeType.ImportFail, saveAttempt.Message ?? string.Empty, saveAttempt.Exception); + } + } + + public int DeserializeWriterInfo(TObject item, XElement node) + { + var writerNode = node.Element(uSyncConstants.Xml.Info)?.Element("UserInfo"); + if (writerNode == null) return -1; + + var emails = new Dictionary(StringComparer.InvariantCultureIgnoreCase); + + item.CreatorId = emails.GetEmails(writerNode.Element("Creator").ValueOrDefault(string.Empty), _userService.GetByEmail!); + item.WriterId = emails.GetEmails(writerNode.Element("Writer").ValueOrDefault(string.Empty), _userService.GetByEmail!); + item.PublisherId = emails.GetEmails(writerNode.Element("Publisher").ValueOrDefault(string.Empty), _userService.GetByEmail!); + + return item.WriterId; + } + + protected virtual async Task> DoSaveOrPublishAsync(TObject item, XElement node, SyncSerializerOptions options) + { + if (options.GetSetting(uSyncConstants.DefaultSettings.OnlyPublishDirty, uSyncConstants.DefaultSettings.OnlyPublishDirty_Default) && !item.IsDirty()) + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("{name} not publishing because nothing is dirty [{dirty} {userDirty}]", item.Name, item.IsDirty(), item.IsAnyUserPropertyDirty()); + + return new SyncContentUpdateResult(true, item, "No changes"); + } + + var trashed = item.Trashed || (node.Element(uSyncConstants.Xml.Info)?.Element("Trashed").ValueOrDefault(false) ?? false); + var publishedNode = node.Element(uSyncConstants.Xml.Info)?.Element("Published"); + if (!trashed && publishedNode != null) + { + var schedules = GetSchedules(node.Element(uSyncConstants.Xml.Info)?.Element("Schedule")); + + var scheduleCollection = new ContentScheduleCollection(); + foreach (var schedule in schedules) + { + scheduleCollection.Add(schedule); + } + + // v14 we always save now, as save and publish doesn't do that anymore... + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Performing Save: {id} {name}", item.Id, item.Name); + + var result = await SaveWithSchedulesAsync(item, options.UserId, scheduleCollection); + if (result?.Success == true) + item = GetByKey(item.Key) ?? item; + else + { + // something went wrong saving. ??? + logger.LogWarning("Failed to save item {name} [{messages}]", item.Name, result?.EventMessages?.FormatMessages(",") ?? "(none)"); + return new SyncContentUpdateResult(false, item, $"Failed to save {item.Name} [{result?.EventMessages?.FormatMessages(",") ?? "(none)"}]"); + } + + if (publishedNode.HasElements) + { + // culture based publishing. + var cultures = options.GetDeserializedCultures(node); + + // Only unpublished cultures, when we are not already filtered by cultures + // this stops things we don't care about this time being unpublished. + var unpublishMissingCultures = cultures.Count == 0; + + var cultureStatuses = new Dictionary(); + + foreach (var culturePublish in publishedNode.Elements("Published")) + { + var culture = culturePublish.Attribute("Culture").ValueOrDefault(string.Empty); + + if (!string.IsNullOrWhiteSpace(culture) && cultures.IsValid(culture)) + { + // is the item published in the config file + var configState = culturePublish.ValueOrDefault(false) + ? uSyncContentState.Published + : uSyncContentState.Unpublished; + + // pending or outstanding scheduled actions can change the action we take. + cultureStatuses[culture] = + schedules.CalculateCultureState(culture, configState); + } + } + + if (cultureStatuses.Count > 0) + { + return await PublishItemAsync(item, cultureStatuses, unpublishMissingCultures, options.UserId); + } + } + else + { + var state = publishedNode.Attribute("Default").ValueOrDefault(false) + ? uSyncContentState.Published + : uSyncContentState.Unpublished; + + state = schedules.CalculateCultureState(string.Empty, state); + + if (state == uSyncContentState.Published) + { + return await PublishItemAsync(item, options.UserId); + } + else if (state == uSyncContentState.Unpublished && item.Published == true) + { + Unpublish(item, culture: null, options.UserId); + } + } + } + else + { + // save? + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Performing Save (Not published): {id} {name}", item.Id, item.Name); + + await SaveItemAsync(item, options.UserId); + item = GetByKey(item.Key) ?? item; + } + + return new SyncContentUpdateResult(true, item, "Saved"); + } + + + /// + /// work out what the current status of a given culture should be. + /// + + private static List GetSchedules(XElement? schedulesNode) + { + var schedules = new List(); + if (schedulesNode != null && schedulesNode.HasElements) + { + foreach (var schedule in schedulesNode.Elements("ContentSchedule")) + { + schedules.Add(GetContentScheduleFromNode(schedule)); + } + } + return schedules; + } + + private static ContentSchedule GetContentScheduleFromNode(XElement scheduleNode) + { + var key = Guid.Empty; + var culture = scheduleNode.Element("Culture").ValueOrDefault(string.Empty); + var date = scheduleNode.Element("Date").ValueOrDefault(DateTime.MinValue); + var action = scheduleNode.Element("Action").ValueOrDefault(ContentScheduleAction.Release); + + return new ContentSchedule(key, culture, date, action); + } + + /// + /// Publish a single item, all cultures + /// + public Task> PublishItemAsync(TObject item, int userId) + { + try + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Publishing: {item}", item.Name); + + var result = Publish(item, cultures: [], userId: userId); + if (!result.Success) + { + var messages = result.EventMessages?.FormatMessages(","); + logger.LogError("Failed to publish {result} [{messages}]", result.Result, messages ?? "(none)"); + if (result.InvalidProperties is not null) + { + logger.LogError("Invalid Properties: {properties}", string.Join(", ", result.InvalidProperties.Select(x => x.Alias))); + } + + } + + return Task.FromResult(result.FromPublishResult()); + } + catch (ArgumentNullException ex) + { + // we can get thrown a null argument exception by the notifier, + // which is non critical! but we are ignoring this error. ! <= 8.1.5 + if (!ex.Message.Contains("siteUri")) throw; + + return Task.FromResult(new SyncContentUpdateResult + { + Success = true, + Content = GetByKey(item.Key) ?? item, + Message = "Published", + Exception = ex + }); + } + } + + private async Task> PublishItemAsync(TObject item, IDictionary cultures, bool unpublishMissing, int userId) + { + if (cultures == null) return await PublishItemAsync(item, userId); + + try + { + TObject publishableItem = item; + + var publishedCultures = cultures + .Where(x => x.Value == uSyncContentState.Published) + .Select(x => x.Key) + .ToArray(); + + if (publishedCultures.Length > 0) + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Publishing {item} for {cultures}", item.Name, string.Join(",", publishedCultures)); + + var result = Publish(item, publishedCultures, userId); + + // if this fails, we return the result + if (!result.Success) + { + var messages = result.EventMessages?.FormatMessages(","); + logger.LogError("Failed to publish {result} [{messages}]", result.Result, messages ?? "(none)"); + if (result.InvalidProperties != null) + { + logger.LogError("Invalid Properties: {properties}", string.Join(", ", result.InvalidProperties.Select(x => x.Alias))); + } + + return result.FromPublishResult(); + } + + publishableItem = result.Content as TObject ?? publishableItem; + } + + var unpublishedCultures = cultures + .Where(x => x.Value == uSyncContentState.Unpublished) + .Select(x => x.Key) + .ToArray(); + + if (unpublishedCultures.Length > 0) + { + + foreach (var culture in unpublishedCultures) + { + // unpublish if the culture is currently published. + if (item.PublishedCultures.InvariantContains(culture)) + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Unpublishing {item} for {culture}", item.Name, culture); + + var result = Unpublish(item, culture, userId); + if (result.Success) + publishableItem = result.Content as TObject ?? publishableItem; + } + + } + } + + if (unpublishMissing) + { + publishableItem = UnpublishMissingCultures(item, [.. cultures.Select(x => x.Key)]); + } + + return new SyncContentUpdateResult(true, publishableItem, "Done"); + } + catch (ArgumentNullException ex) + { + // we can get thrown a null argument exception by the notifier, + // which is non critical! but we are ignoring this error. ! <= 8.1.5 + if (!ex.Message.Contains("siteUri")) throw; + + return new SyncContentUpdateResult + { + Success = true, + Content = GetByKey(item.Key) ?? item, + Message = "Published", + Exception = ex + }; + } + } + /// + /// unpublish any cultures that are marked as published, in umbraco but are not published + /// in our *.config file. + /// + /// + /// + private TObject UnpublishMissingCultures(TObject item, string[] allCultures) + { + TObject publishableItem = item; + + var missingCultures = item + .PublishedCultures + .Where(x => !allCultures.InvariantContains(x)) + .ToArray(); + + if (missingCultures != null && missingCultures.Length > 0) + { + foreach (var culture in missingCultures) + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Unpublishing {item} culture not defined in config file {culture}", item.Name, culture); + + var result = Unpublish(item, culture); + if (result.Success) + publishableItem = result.Content as TObject ?? publishableItem; + } + } + + return publishableItem; + } + + public abstract Task SaveItemAsync(TObject item, int userId); + + public abstract Task SaveWithSchedulesAsync(TObject item, int userId, ContentScheduleCollection scheduleCollection); + protected abstract PublishResult Unpublish(TObject item, string? culture, int userId = -1); + protected abstract PublishResult Publish(TObject item, string[] cultures, int userId = -1); + + public override async Task> DeserializeSecondPassAsync(TObject item, XElement node, SyncSerializerOptions options) + { + var details = new List(); + + details.AddRange(await this.DeserializeSecondPassSharedAsync(item, node, options, + Constants.Conventions.RelationTypes.RelateParentDocumentOnDeleteAlias)); + + var changes = await DeserializeSchedulesAsync(item, node, options); + if (changes.Count != 0) + return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), item, ChangeType.Import, "" ?? string.Empty, true, + [.. details, .. changes]); + + // if we have changed the sort order, then we return a change, else it was no change. + return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), item, + details.Count == 0 ? ChangeType.NoChange : ChangeType.Import, details); + } + + private async Task> DeserializeSchedulesAsync(TObject item, XElement node, SyncSerializerOptions options) + { + var changes = new List(); + var nodeSchedules = new ContentScheduleCollection(); + var currentSchedules = GetScheduleById(item.Id); + var cultures = options.GetDeserializedCultures(node); + + var schedules = node.Element(uSyncConstants.Xml.Info)?.Element("Schedule"); + if (schedules != null && schedules.HasElements) + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("De-serialize Schedules {name}", item.Name); + + foreach (var schedule in schedules.Elements("ContentSchedule")) + { + var importSchedule = GetContentScheduleFromNode(schedule); + if (cultures.IsValidOrBlank(importSchedule.Culture)) + { + if (importSchedule.Date < DateTime.Now) + continue; // don't add schedules in the past + + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Adding {action} {culture} {date}", importSchedule.Action, importSchedule.Culture, importSchedule.Date); + + nodeSchedules.Add(importSchedule); + + var existing = FindSchedule(currentSchedules, importSchedule); + if (existing != null) + { + currentSchedules.Remove(existing); + } + currentSchedules.Add(importSchedule); + changes.Add(uSyncChange.Update("Schedule", $"{importSchedule.Culture} {importSchedule.Action}", "", importSchedule.Date.ToString())); + } + } + } + + if (currentSchedules != null) + { + // remove things that are in the current but not the import. + var toRemove = currentSchedules.FullSchedule.Where(x => FindSchedule(nodeSchedules, x) == null) + .ToList(); + + if (logger.IsEnabled(LogLevel.Debug) && toRemove.Count > 0) + logger.LogDebug("Removing Schedules {name} ({count} to remove)", item.Name, toRemove.Count); + + foreach (var oldItem in toRemove) + { + if (cultures.IsValidOrBlank(oldItem.Culture)) + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Removing Schedule : {culture} {action} {date}", oldItem.Culture, oldItem.Action, oldItem.Date); + + // only remove a culture if this serialization included it. + // we don't remove things we didn't serialize. + currentSchedules.Remove(oldItem); + + changes.Add(uSyncChange.Delete("Schedule", $"{oldItem.Culture} - {oldItem.Action}", oldItem.Date.ToString())); + } + } + + if (changes.Count != 0) + { + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Saving Schedule changes: {item}", item.Name); + + await PersistSchedulesAsync(item, currentSchedules); + return changes; + } + + return []; + } + + return []; + } + + private static ContentSchedule? FindSchedule(ContentScheduleCollection currentSchedules, ContentSchedule newSchedule) + { + var schedule = currentSchedules.GetSchedule(newSchedule.Culture, newSchedule.Action); + if (schedule != null && schedule.Any()) return schedule.FirstOrDefault(); + + return null; + } + + protected abstract Task PersistSchedulesAsync(TObject item, ContentScheduleCollection schedules); +} diff --git a/uSync.Core/Serialization/Serializers/SyncContentUpdateResult.cs b/uSync.Core/Serialization/Serializers/SyncContentUpdateResult.cs index e201f4d3..f4a53700 100644 --- a/uSync.Core/Serialization/Serializers/SyncContentUpdateResult.cs +++ b/uSync.Core/Serialization/Serializers/SyncContentUpdateResult.cs @@ -5,12 +5,13 @@ namespace uSync.Core.Serialization.Serializers; -public class SyncContentUpdateResult +public class SyncContentUpdateResult + where TObject : class, IPublishableContentBase { public SyncContentUpdateResult() { } [SetsRequiredMembers] - public SyncContentUpdateResult(bool success, IContent? item, string? message) + public SyncContentUpdateResult(bool success, TObject? item, string? message) { Success = success; Content = item; @@ -19,7 +20,7 @@ public SyncContentUpdateResult(bool success, IContent? item, string? message) public required bool Success { get; set; } - public required IContent? Content { get; set; } + public required TObject? Content { get; set; } public string? Message { get; set; } public Exception? Exception { get; set; } @@ -30,11 +31,12 @@ public static class SyncContentUpdateResultExtensions /// /// turns the PublishResult into a SyncContentUpdateResult for use in the content serializers /// - public static SyncContentUpdateResult FromPublishResult(this PublishResult result) + public static SyncContentUpdateResult FromPublishResult(this PublishResult result) + where TObject : class, IPublishableContentBase { - if (result.Success && result.Content is IContent content) + if (result.Success && result.Content is TObject content) { - return new SyncContentUpdateResult(true, content, null); + return new SyncContentUpdateResult(true, content, null); } var errorMessage = result.EventMessages?.FormatMessages(":") ?? string.Empty; @@ -44,6 +46,6 @@ public static SyncContentUpdateResult FromPublishResult(this PublishResult resul message += string.Join(",", result.InvalidProperties.Select(x => x.Alias)); } - return new SyncContentUpdateResult(false, result.Content as IContent ?? null, message); + return new SyncContentUpdateResult(false, result.Content as TObject ?? null, message); } } \ No newline at end of file diff --git a/uSync.Core/Serialization/SyncTreeSerializerBase.cs b/uSync.Core/Serialization/SyncTreeSerializerBase.cs index a83474f8..4c1988da 100644 --- a/uSync.Core/Serialization/SyncTreeSerializerBase.cs +++ b/uSync.Core/Serialization/SyncTreeSerializerBase.cs @@ -6,6 +6,8 @@ using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Services; +using uSync.Core.Serialization.Models; + namespace uSync.Core.Serialization; public abstract class SyncTreeSerializerBase : SyncSerializerBase @@ -88,7 +90,7 @@ protected virtual Task HasParentItemAsync(XElement node) /// /// calculates the Umbraco Path value for an item, based on the parent /// - protected string CalculateNodePath(TObject item, TObject? parent) + protected string CalculateNodePath(TObject item, SyncParentItem? parent) { if (parent == null) { @@ -103,7 +105,7 @@ protected string CalculateNodePath(TObject item, TObject? parent) /// /// calculates the Level based on the parent. /// - protected int CalculateNodeLevel(TObject item, TObject? parent) + protected int CalculateNodeLevel(TObject item, SyncParentItem? parent) { if (parent == null) { diff --git a/uSync.Core/SyncItemFactory.cs b/uSync.Core/SyncItemFactory.cs index 42f907c8..7139644e 100644 --- a/uSync.Core/SyncItemFactory.cs +++ b/uSync.Core/SyncItemFactory.cs @@ -1,5 +1,8 @@ using System.Xml.Linq; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; + using uSync.Core.Cache; using uSync.Core.Dependency; using uSync.Core.Models; @@ -35,10 +38,16 @@ public SyncItemFactory( public IEnumerable> GetSerializers() => _syncSerializers.GetSerializers(); + public IEnumerable> GetContainerSerializers(UmbracoObjectTypes containedType) + where TObject : ITreeEntity + => _syncSerializers.GetSerializers() + .OfType>() + .Where(x => x.ContainedType == containedType); + + public ISyncSerializer? GetSerializer(string name) => _syncSerializers.GetSerializer(name); - public IEnumerable> GetTrackers() => _syncTrackers.GetTrackers(); diff --git a/uSync.Core/packages.lock.json b/uSync.Core/packages.lock.json index 7a14486a..5e7dda02 100644 --- a/uSync.Core/packages.lock.json +++ b/uSync.Core/packages.lock.json @@ -15,9 +15,9 @@ }, "Umbraco.Cms.Api.Management": { "type": "Direct", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "MXXp0wSyuyo25Rgw0uxYIlT9Y31s6JpuAzqC9EMJ01dB7JAr5CX7/Wl0Q8fC7EXGP5GZWnMgpf8XYcBPprJIxg==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -68,9 +68,9 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1353,8 +1353,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "R4WLYVnErcgg0tjCENVf/1A3q2chiTDvITORP45tVOIYyYizjDTdAGBwfnMX1vfgocsp/4Dn+QlRG7IxPtwjcQ==", + "resolved": "18.0.0-beta2", + "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1389,15 +1389,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "43ikGhOoaLDqdO1yoP0slXL/b8GQFgFd3l1yhCNqAXW6yfOzjtZtjCme86JiIcD80jEQVdsfOC1N9j6cq/qn3Q==", + "resolved": "18.0.0-beta2", + "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1436,14 +1436,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "I1jAbcAG2FOyyB78pdJFGoGfq5jMD3E1mUq8bEd3Af5vwwmI6QKdVRr9hbMr+jOc7nKRJR/2DfW2etRk7NRWbQ==", + "resolved": "18.0.0-beta2", + "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1480,14 +1480,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "003JNQGNCCAsTiE2nWbzFcN7QqsdRCVSt2OSxjo/FeOvtiXXh0/lpBqQGbSIKKePmc0DoZhHoEEJObGGKPxg+w==", + "resolved": "18.0.0-beta2", + "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1527,15 +1527,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta1", - "contentHash": "bKWNmblTB7mwCzTsVKHwt9WqZAXj1SAfAVHa1uVl5rsXM8OdjKJj3z5xN6C12Yvsd0ooYKZSrKf9c9GLMp/ZHA==", + "resolved": "18.0.0-beta2", + "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1567,16 +1567,16 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "1BsszW3rDLf4xjY+wZpP0XaBihhHsrxmk2Msqu5JlGZZAE8miqRjtVDzrjKS2/WlgbWOfTx+TiparTwK0PMvzA==", + "requested": "[18.0.0-beta2, )", + "resolved": "18.0.0-beta2", + "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", diff --git a/uSync.Core/uSyncConstants.cs b/uSync.Core/uSyncConstants.cs index 3057ba3d..70f29ecd 100644 --- a/uSync.Core/uSyncConstants.cs +++ b/uSync.Core/uSyncConstants.cs @@ -46,6 +46,8 @@ public static class Serialization public const string Media = "Media"; public const string Users = "Users"; public const string Members = "Members"; + public const string Element = "Element"; + public const string ElementContainer = "ElementContainer"; public const string Domain = "Domain"; From 03995ee9b14c7272e3bf18d391254b7e1212b35b Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Mon, 18 May 2026 17:07:04 +0100 Subject: [PATCH 3/7] v18 element trackers --- .../Tracking/Impliment/ContentTracker.cs | 2 +- .../Tracking/Impliment/ElementTracker.cs | 18 ++++++++++++++++++ .../Tracking/Impliment/ElementXmlTracker.cs | 13 +++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 uSync.Core/Tracking/Impliment/ElementTracker.cs create mode 100644 uSync.Core/Tracking/Impliment/ElementXmlTracker.cs diff --git a/uSync.Core/Tracking/Impliment/ContentTracker.cs b/uSync.Core/Tracking/Impliment/ContentTracker.cs index becd5120..70a79f6b 100644 --- a/uSync.Core/Tracking/Impliment/ContentTracker.cs +++ b/uSync.Core/Tracking/Impliment/ContentTracker.cs @@ -10,4 +10,4 @@ public class ContentXmlTracker : ContentBaseTracker, ISyncTracker, ISyncTracker +{ + public ElementTracker(SyncSerializerCollection serializers) + : base(serializers) + { } + + public override List TrackingItems => + [ + TrackingItem.Single("Parent", "/Parent"), + TrackingItem.Single("SortOrder", "/SortOrder") + ]; +} \ No newline at end of file diff --git a/uSync.Core/Tracking/Impliment/ElementXmlTracker.cs b/uSync.Core/Tracking/Impliment/ElementXmlTracker.cs new file mode 100644 index 00000000..3fddcc4a --- /dev/null +++ b/uSync.Core/Tracking/Impliment/ElementXmlTracker.cs @@ -0,0 +1,13 @@ + +using Umbraco.Cms.Core.Models; + +using uSync.Core.Serialization; + +namespace uSync.Core.Tracking.Impliment; + +public class ElementXmlTracker : ContentBaseTracker, ISyncTracker +{ + public ElementXmlTracker(SyncSerializerCollection serializers) + : base(serializers) + { } +} \ No newline at end of file From de95bd9dda07461e8b5a39b7dc5be50b56e22c55 Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Wed, 20 May 2026 15:07:14 +0100 Subject: [PATCH 4/7] Handling trashed state. --- .../SyncHandlers/Handlers/ElementHandler.cs | 5 +- .../Serializers/ContentSerializerBase.cs | 25 +++++++++- .../Serializers/ElementSerializer.cs | 48 ++++++++++++++++--- .../PublishableContentBaseSerializer.cs | 3 +- 4 files changed, 67 insertions(+), 14 deletions(-) diff --git a/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs b/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs index 790c2858..22978ea6 100644 --- a/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs +++ b/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs @@ -104,10 +104,9 @@ public override async Task> ExportContainer(IEntity ite return [uSyncAction.Fail(nameof(item), this.handlerType, this.ItemType, ChangeType.Fail, "Item not set", new ArgumentNullException(nameof(item)))]; + // nothing to export ? var container = await GetContainer(item.Key); - if (container == null) - return [uSyncAction.Fail(nameof(item), this.handlerType, this.ItemType, ChangeType.Fail, "Container not found", - new Exception($"Container with key {item.Key} not found"))]; + if (container == null) return []; if (await _mutexService.FireItemStartingEventAsync(new CancelableuSyncItemNotification(container))) { diff --git a/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs b/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs index be4a4a99..2a62a3fc 100644 --- a/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs +++ b/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs @@ -830,9 +830,13 @@ public override bool IsValid(XElement node) && node.Element(uSyncConstants.Xml.Info) != null; + // these are the functions using the simple 'getItem(alias)' // that we cannot use for content/media trees. - protected override async Task> FindOrCreateAsync(XElement node) + protected override Task> FindOrCreateAsync(XElement node) + => FindOrCreateAsync(node, new SyncSerializerOptions()); + + protected async Task> FindOrCreateAsync(XElement node, SyncSerializerOptions options) { var item = await FindItemAsync(node); if (item is not null) @@ -863,9 +867,18 @@ public override bool IsValid(XElement node) var contentTypeAlias = node.Element(uSyncConstants.Xml.Info)? .Element("ContentType").ValueOrDefault(node.Name.LocalName) ?? node.Name.LocalName; - return await CreateItemAsync(alias, parent, contentTypeAlias); + return await CreateItemAsync(new ContentItemCreationOptions + { + Alias = alias, + Parent = parent, + ContentTypeAlias = contentTypeAlias, + Node = node, + }, options); } + protected virtual Task> CreateItemAsync(ContentItemCreationOptions creation, SyncSerializerOptions options) + => CreateItemAsync(creation.Alias, creation.Parent, creation.ContentTypeAlias); + protected override string GetItemBaseType(XElement node) => node.Name.LocalName; @@ -1272,3 +1285,11 @@ private List GetExcludedProperties(SyncSerializerOptions options) /// protected abstract Task FindParentByIdAsync(int id); } + +public class ContentItemCreationOptions +{ + public required string Alias { get; set; } + public ITreeEntity? Parent { get; set; } + public required string ContentTypeAlias { get; set; } + public required XElement Node { get; set; } +} \ No newline at end of file diff --git a/uSync.Core/Serialization/Serializers/ElementSerializer.cs b/uSync.Core/Serialization/Serializers/ElementSerializer.cs index 503e22a8..9dbc8ea3 100644 --- a/uSync.Core/Serialization/Serializers/ElementSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ElementSerializer.cs @@ -21,6 +21,8 @@ public class ElementSerializer : PublishableContentBaseSerializer, ISy private readonly IElementService _elementService; private readonly IElementContainerService _containerService; private readonly IContentTypeService _contentTypeService; + private readonly IElementEditingService _elementEditingService; + private readonly IIdKeyMap _keyMap; public ElementSerializer( IEntityService entityService, @@ -32,8 +34,10 @@ public ElementSerializer( IElementService elementService, IElementContainerService containerService, IContentTypeService contentTypeService, - IUserService userService) - : base(entityService, languageService, relationService, shortStringHelper, logger, + IUserService userService, + IElementEditingService elementEditingService, + IIdKeyMap keyMap) + : base(entityService, languageService, relationService, shortStringHelper, logger, UmbracoObjectTypes.Element, syncMappers, userService) { _elementService = elementService; @@ -41,6 +45,8 @@ public ElementSerializer( _contentTypeService = contentTypeService; containerType = UmbracoObjectTypes.ElementContainer; + _elementEditingService = elementEditingService; + _keyMap = keyMap; } public override Task DeleteItemAsync(IElement item) @@ -49,21 +55,49 @@ public override Task DeleteItemAsync(IElement item) public override Task FindItemAsync(Guid key) => Task.FromResult(_elementService.GetById(key)); + protected override void SetTrashed(IElement item) + => ((ContentBase)item).Trashed = true; + + protected override void MoveToRecycleBin(IElement item) + { + _elementEditingService.MoveToRecycleBinAsync(item.Key, Constants.Security.SuperUserKey) + .Wait(); + } + + protected override void MoveItem(IElement item, int parentId) + { + var parentAttempt = _keyMap.GetKeyForId(parentId, UmbracoObjectTypes.ElementContainer); + Guid? parentKey = parentAttempt.Success ? parentAttempt.Result : null; + _elementEditingService.RestoreAsync(item.Key, parentKey, Constants.Security.SuperUserKey) + .Wait(); + } + public override Task SaveItemAsync(IElement item) - => Task.FromResult(_elementService.Save(item)); + { + _elementService.Save(item); + return Task.CompletedTask; + } + // gone wrong if we get this. protected override Task> CreateItemAsync(string alias, ITreeEntity? parent, string itemType) + => throw new NotImplementedException(); + + protected override Task> CreateItemAsync(ContentItemCreationOptions creation, SyncSerializerOptions options) { - var contentType = _contentTypeService.Get(itemType); + var contentType = _contentTypeService.Get(creation.ContentTypeAlias); if (contentType is null) - return Task.FromResult(Attempt.Fail(new Exception($"No content type found with alias {itemType}"))); + return Task.FromResult(Attempt.Fail(new Exception($"No content type found with alias {creation.ContentTypeAlias}"))); + + var element = new Element(creation.Alias, creation.Parent?.Id ?? -1, contentType); + + // elements require the node name is set before the save happens. + var changes = DeserializeName(element, creation.Node, options); - var element = new Element(alias, parent?.Id ?? -1, contentType); var operationalResult = _elementService.Save(element); if (operationalResult.Success is false) { var messages = operationalResult.EventMessages?.FormatMessages() ?? ""; - return Task.FromResult(Attempt.Fail(new Exception($"Failed to create element with alias {alias} and content type {itemType}. {messages}"))); + return Task.FromResult(Attempt.Fail(new Exception($"Failed to create element with alias {creation.Alias} and content type {creation.ContentTypeAlias}. {messages}"))); } return Task.FromResult(Attempt.Succeed(element)); diff --git a/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs b/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs index 83cb4bbd..5a05c8f5 100644 --- a/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs +++ b/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs @@ -139,10 +139,9 @@ protected Task SerializerWriterInfoAsync(TObject item) } protected abstract Task DeserializeTemplate(TObject item, XElement node); - protected override async Task> DeserializeCoreAsync(XElement node, SyncSerializerOptions options) { - var attempt = await FindOrCreateAsync(node); + var attempt = await FindOrCreateAsync(node, options); if (!attempt.Success || attempt.Result is null) throw attempt.Exception ?? new Exception($"Unknown error {node.GetAlias()}"); From 064347e6362b3d4327f2b5e0805a8641ecb49545 Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Fri, 12 Jun 2026 12:02:50 +0100 Subject: [PATCH 5/7] Elements working tree. --- Directory.Packages.props | 18 +- uSync.AutoTemplates/packages.lock.json | 6 +- .../Handlers/ContentHandlerBase.cs | 15 +- .../SyncHandlers/Handlers/ElementHandler.cs | 52 +- .../SyncHandlers/SyncHandlerRoot.cs | 7 +- uSync.BackOffice/packages.lock.json | 92 +- .../packages.lock.json | 70 +- .../packages.lock.json | 70 +- .../usync-assets/package-lock.json | 4 +- .../usync-assets/package.json | 2 +- uSync.Community.Contrib/packages.lock.json | 92 +- .../packages.lock.json | 96 +- uSync.Core/Extensions/ChangeListExtensions.cs | 27 +- uSync.Core/Extensions/XElementExtensions.cs | 39 +- uSync.Core/Keys/IKeyMappingService.cs | 38 + .../Extensions/SyncEntityExtensions.cs | 18 + .../Serializers/ContentSerializer.cs | 79 +- .../Serializers/ContentSerializerBase.cs | 215 +- .../Serializers/ContentTemplateSerializer.cs | 42 +- .../Serializers/ContentTypeBaseSerializer.cs | 2 +- .../Serializers/ContentTypeSerializer.cs | 11 + .../Serializers/ElementContainerSerializer.cs | 100 +- .../Serializers/ElementSerializer.cs | 3 + .../Serializers/MediaSerializer.cs | 2 + .../Serializers/MemberTypeSerializer.cs | 32 +- .../PublishableContentBaseSerializer.cs | 10 +- .../Serialization/SyncTreeSerializerBase.cs | 32 +- uSync.Core/packages.lock.json | 88 +- uSync.Core/uSyncConstants.cs | 13 +- uSync.Extend/packages.lock.json | 70 +- .../history-client/package-lock.json | 4 +- uSync.History/history-client/package.json | 2 +- uSync.History/packages.lock.json | 74 +- uSync.SchemaGenerator/packages.lock.json | 88 +- .../appsettings-schema.Umbraco.Cms.json | 6 + uSync.Tests/packages.lock.json | 212 +- uSync.Tests/umbraco-package-schema.json | 15411 +--------------- uSync/packages.lock.json | 76 +- 38 files changed, 970 insertions(+), 16248 deletions(-) create mode 100644 uSync.Core/Keys/IKeyMappingService.cs create mode 100644 uSync.Core/Serialization/Extensions/SyncEntityExtensions.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index a04dac92..3f5e0340 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -12,25 +12,25 @@ - - - + + + - + - - - + + + - + - + \ No newline at end of file diff --git a/uSync.AutoTemplates/packages.lock.json b/uSync.AutoTemplates/packages.lock.json index 213215f6..b80b2cc6 100644 --- a/uSync.AutoTemplates/packages.lock.json +++ b/uSync.AutoTemplates/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "Umbraco.Cms.Core": { "type": "Direct", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", diff --git a/uSync.BackOffice/SyncHandlers/Handlers/ContentHandlerBase.cs b/uSync.BackOffice/SyncHandlers/Handlers/ContentHandlerBase.cs index 3f2f249c..3961b125 100644 --- a/uSync.BackOffice/SyncHandlers/Handlers/ContentHandlerBase.cs +++ b/uSync.BackOffice/SyncHandlers/Handlers/ContentHandlerBase.cs @@ -18,6 +18,8 @@ using uSync.Core; using uSync.Core.Serialization; +using uSyncCoreConstants = uSync.Core.uSyncConstants; + namespace uSync.BackOffice.SyncHandlers.Handlers; /// @@ -103,8 +105,9 @@ protected override async Task ShouldImportAsync(XElement node, HandlerSett private static bool ShouldImportTrashedItem(XElement node, HandlerSettings config) { // unless the setting is explicit we don't import trashed items. - var trashed = node.Element("Info")?.Element("Trashed").ValueOrDefault(false); - if (trashed.GetValueOrDefault(false) && !config.GetSetting("ImportTrashed", false)) return false; + var isTrashed = node.IsTrashed(); + if (isTrashed && !config.GetSetting(uSyncCoreConstants.DefaultSettings.ImportTrashed, + uSyncCoreConstants.DefaultSettings.ImportTrashed_Default)) return false; return true; } @@ -116,7 +119,7 @@ private bool ImportPaths(XElement node, HandlerSettings config) if (include.Length > 0) { - var path = node.Element("Info")?.Element("Path").ValueOrDefault(string.Empty); + var path = node.GetPath(); if (!string.IsNullOrWhiteSpace(path) && !include.Any(x => path.InvariantStartsWith(x))) { if (logger.IsEnabled(LogLevel.Debug)) @@ -130,7 +133,7 @@ private bool ImportPaths(XElement node, HandlerSettings config) .Split([','], StringSplitOptions.RemoveEmptyEntries); if (exclude.Length > 0) { - var path = node.Element("Info")?.Element("Path").ValueOrDefault(string.Empty); + var path = node.GetPath(); if (!string.IsNullOrWhiteSpace(path) && exclude.Any(x => path.InvariantStartsWith(x))) { if (logger.IsEnabled(LogLevel.Debug)) @@ -183,8 +186,8 @@ protected override async Task ShouldExportAsync(XElement node, HandlerSett if (!await base.ShouldExportAsync(node, config)) return false; // We export trashed items by default, (but we don't import them by default) - var trashed = node.Element("Info")?.Element("Trashed").ValueOrDefault(false); - if (trashed.GetValueOrDefault(false) && !config.GetSetting("ExportTrashed", true)) return false; + var isTrashed = node.IsTrashed(); + if (isTrashed && !config.GetSetting("ExportTrashed", true)) return false; if (config.GetSetting("RulesOnExport", false)) { diff --git a/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs b/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs index 22978ea6..e6e1467e 100644 --- a/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs +++ b/uSync.BackOffice/SyncHandlers/Handlers/ElementHandler.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.Logging; +using Lucene.Net.Analysis.Cjk; + +using Microsoft.Extensions.Logging; using Org.BouncyCastle.Security.Certificates; @@ -281,11 +283,14 @@ public async Task HandleAsync(ElementUnpublishedNotification notification, Cance protected override async Task DeserializeItemToAction(XElement node, string filename, SyncSerializerOptions serializerOptions) { - if (node.Name.LocalName == global::uSync.Core.uSyncConstants.Serialization.ElementContainer) + if (NodeIsContainer(node)) { var containerAttempt = await _containerSerializer.DeserializeAsync(node, serializerOptions); var containerAction = uSyncActionHelper.SetAction(containerAttempt, GetNameFromFileOrNode(filename, node), node.GetKey(), this.Alias, IsTwoPass); + if (containerAttempt.Success && containerAttempt.Item != null) + await _containerSerializer.DeserializeSecondPassAsync(containerAttempt.Item, node, serializerOptions); + if (containerAttempt.Item != null) containerAction.Item = containerAttempt.Item; if (containerAttempt.Details != null && containerAttempt.Details.Any()) containerAction.Details = containerAttempt.Details; @@ -303,4 +308,47 @@ protected override async Task DeserializeItemToAction(XElement node if (attempt.Details != null && attempt.Details.Any()) action.Details = attempt.Details; return action; } + + protected override async Task> GetChangesAsync(XElement node, XElement currentNode, SyncSerializerOptions options) + { + if (NodeIsContainer(node) is false) + return await itemFactory.GetChangesAsync(node, currentNode, options); + else + return await itemFactory.GetChangesAsync(node, currentNode, options); + } + + protected override async Task IsItemCurrentAsync(XElement node, SyncSerializerOptions options) + { + if (NodeIsContainer(node) is false) + { + return await base.IsItemCurrentAsync(node, options); + } + else + { + var change = new SyncChangeInfo + { + CurrentNode = await SerializeContainerFromNodeAsync(node, options), + }; + change.Change = await _containerSerializer.IsCurrentAsync(node, change.CurrentNode, options); + return change; + } + } + + private async Task SerializeContainerFromNodeAsync(XElement node, SyncSerializerOptions options) + { + var item = await _containerSerializer.FindItemAsync(node); + if (item is null) return null; + + var cultures = node.GetCultures(); + if (string.IsNullOrWhiteSpace(cultures) is false) + options.Settings[Core.uSyncConstants.CultureKey] = cultures; + + var attempt = await _containerSerializer.SerializeAsync(item, options); + if (attempt.Success) return attempt.Item; + + return null; + } + + private static bool NodeIsContainer(XElement node) + => node.Name.LocalName == global::uSync.Core.uSyncConstants.Serialization.ElementContainer; } diff --git a/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs b/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs index 0040d2fc..0acd656b 100644 --- a/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs +++ b/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs @@ -1360,6 +1360,7 @@ public virtual async Task> ReportElementSingleAsync(XEl } catch (FormatException fex) { + logger.LogWarning(fex, "error reading file {file}", filename); return [uSyncActionHelper .ReportActionFail(Path.GetFileName(node.GetAlias()), $"format error {fex.Message}")]; @@ -1402,7 +1403,7 @@ protected async Task> ReportItemAsync(string file, Hand } - private async Task> GetChangesAsync(XElement node, XElement currentNode, SyncSerializerOptions options) + protected virtual async Task> GetChangesAsync(XElement node, XElement currentNode, SyncSerializerOptions options) => await itemFactory.GetChangesAsync(node, currentNode, options); #endregion @@ -1927,7 +1928,7 @@ protected async Task> DeserializeItemAsync(XElement node, S protected async Task> DeserializeItemSecondPassAsync(TObject item, XElement node, SyncSerializerOptions options) => await serializer.DeserializeSecondPassAsync(item, node, options); - private async Task IsItemCurrentAsync(XElement node, SyncSerializerOptions options) + protected virtual async Task IsItemCurrentAsync(XElement node, SyncSerializerOptions options) { var change = new SyncChangeInfo { @@ -1957,7 +1958,7 @@ private async Task IsItemCurrentAsync(XElement node, SyncSeriali return null; } - private class SyncChangeInfo + protected class SyncChangeInfo { public ChangeType Change { get; set; } public XElement? CurrentNode { get; set; } diff --git a/uSync.BackOffice/packages.lock.json b/uSync.BackOffice/packages.lock.json index 42b270a2..fb3c137d 100644 --- a/uSync.BackOffice/packages.lock.json +++ b/uSync.BackOffice/packages.lock.json @@ -4,13 +4,13 @@ "net10.0": { "Microsoft.SourceLink.GitHub": { "type": "Direct", - "requested": "[10.0.201, )", - "resolved": "10.0.201", - "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", + "requested": "[10.0.300, )", + "resolved": "10.0.300", + "contentHash": "QzCtLkXVb3l4IxcpvJCbzUwMLihAmLN6vVLjQGSzYSF8d2dvXxqJAZk83RV3gYnp2egz8jRMgSR2woY3vOahTA==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.201", - "Microsoft.SourceLink.Common": "10.0.201", - "System.IO.Hashing": "10.0.5" + "Microsoft.Build.Tasks.Git": "10.0.300", + "Microsoft.SourceLink.Common": "10.0.300", + "System.IO.Hashing": "10.0.8" } }, "Asp.Versioning.Abstractions": { @@ -337,10 +337,10 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "resolved": "10.0.300", + "contentHash": "P0kaQwVZx4xIUe2FtrLyBadYNXuAljttJUPvjBYRuHhPE8L77L42KakLDkaADRiUrGspoLcMwayjrbQhYTr0zA==", "dependencies": { - "System.IO.Hashing": "10.0.5" + "System.IO.Hashing": "10.0.8" } }, "Microsoft.Extensions.AmbientMetadata.Application": { @@ -773,8 +773,8 @@ }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" + "resolved": "10.0.300", + "contentHash": "0jlkXaUGjYlWTIVPve5MftjKHnT3SlAtq9BCLV4J9IjdPrxV/+4rMlBSjfr1khG8/GC6KGojjola8E1VvWF0qQ==" }, "MimeKit": { "type": "Transitive", @@ -1206,8 +1206,8 @@ }, "System.IO.Hashing": { "type": "Transitive", - "resolved": "10.0.5", - "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" + "resolved": "10.0.8", + "contentHash": "+dJsbPJ3FyUbTZNplFj0RCKePFizmv6ewDV46JE9q/IVH4c3xTCftHfHelLsAKf0jryIPqgMb5GpS0x7TAY3mg==" }, "System.Linq.Async": { "type": "Transitive", @@ -1237,8 +1237,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1273,15 +1273,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1320,14 +1320,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1364,14 +1364,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1411,15 +1411,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1451,8 +1451,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1465,15 +1465,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1524,17 +1524,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1552,9 +1552,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1601,7 +1601,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Backoffice.Management.Api/packages.lock.json b/uSync.Backoffice.Management.Api/packages.lock.json index 5367f09a..107b8ca3 100644 --- a/uSync.Backoffice.Management.Api/packages.lock.json +++ b/uSync.Backoffice.Management.Api/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "Umbraco.Cms.Api.Management": { "type": "Direct", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -57,9 +57,9 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1269,8 +1269,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1305,15 +1305,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1352,14 +1352,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1396,14 +1396,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1443,15 +1443,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1483,8 +1483,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1492,27 +1492,27 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1530,9 +1530,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1579,7 +1579,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Backoffice.Management.Client/packages.lock.json b/uSync.Backoffice.Management.Client/packages.lock.json index 933f1fe7..e13d7db5 100644 --- a/uSync.Backoffice.Management.Client/packages.lock.json +++ b/uSync.Backoffice.Management.Client/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1431,27 +1431,27 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1502,17 +1502,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1530,9 +1530,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1579,7 +1579,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Backoffice.Management.Client/usync-assets/package-lock.json b/uSync.Backoffice.Management.Client/usync-assets/package-lock.json index d5df0717..0889a601 100644 --- a/uSync.Backoffice.Management.Client/usync-assets/package-lock.json +++ b/uSync.Backoffice.Management.Client/usync-assets/package-lock.json @@ -1,12 +1,12 @@ { "name": "@jumoo/usync", - "version": "17.3.2", + "version": "18.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@jumoo/usync", - "version": "17.3.2", + "version": "18.0.0", "license": "MPL-2.0", "devDependencies": { "@hey-api/openapi-ts": "^0.97.1", diff --git a/uSync.Backoffice.Management.Client/usync-assets/package.json b/uSync.Backoffice.Management.Client/usync-assets/package.json index 2292d5a6..9e377494 100644 --- a/uSync.Backoffice.Management.Client/usync-assets/package.json +++ b/uSync.Backoffice.Management.Client/usync-assets/package.json @@ -8,7 +8,7 @@ "homepage": "https://jumoo.co.uk/uSync", "license": "MPL-2.0", "type": "module", - "version": "17.3.2", + "version": "18.0.0", "main": "./dist/usync.js", "types": "./dist/index.d.ts", "module": "./dist/usync.js", diff --git a/uSync.Community.Contrib/packages.lock.json b/uSync.Community.Contrib/packages.lock.json index dab573e6..8c994854 100644 --- a/uSync.Community.Contrib/packages.lock.json +++ b/uSync.Community.Contrib/packages.lock.json @@ -4,13 +4,13 @@ "net10.0": { "Microsoft.SourceLink.GitHub": { "type": "Direct", - "requested": "[10.0.201, )", - "resolved": "10.0.201", - "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", + "requested": "[10.0.300, )", + "resolved": "10.0.300", + "contentHash": "QzCtLkXVb3l4IxcpvJCbzUwMLihAmLN6vVLjQGSzYSF8d2dvXxqJAZk83RV3gYnp2egz8jRMgSR2woY3vOahTA==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.201", - "Microsoft.SourceLink.Common": "10.0.201", - "System.IO.Hashing": "10.0.5" + "Microsoft.Build.Tasks.Git": "10.0.300", + "Microsoft.SourceLink.Common": "10.0.300", + "System.IO.Hashing": "10.0.8" } }, "Asp.Versioning.Abstractions": { @@ -337,10 +337,10 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "resolved": "10.0.300", + "contentHash": "P0kaQwVZx4xIUe2FtrLyBadYNXuAljttJUPvjBYRuHhPE8L77L42KakLDkaADRiUrGspoLcMwayjrbQhYTr0zA==", "dependencies": { - "System.IO.Hashing": "10.0.5" + "System.IO.Hashing": "10.0.8" } }, "Microsoft.Extensions.AmbientMetadata.Application": { @@ -773,8 +773,8 @@ }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" + "resolved": "10.0.300", + "contentHash": "0jlkXaUGjYlWTIVPve5MftjKHnT3SlAtq9BCLV4J9IjdPrxV/+4rMlBSjfr1khG8/GC6KGojjola8E1VvWF0qQ==" }, "MimeKit": { "type": "Transitive", @@ -1206,8 +1206,8 @@ }, "System.IO.Hashing": { "type": "Transitive", - "resolved": "10.0.5", - "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" + "resolved": "10.0.8", + "contentHash": "+dJsbPJ3FyUbTZNplFj0RCKePFizmv6ewDV46JE9q/IVH4c3xTCftHfHelLsAKf0jryIPqgMb5GpS0x7TAY3mg==" }, "System.Linq.Async": { "type": "Transitive", @@ -1237,8 +1237,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1273,15 +1273,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1320,14 +1320,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1364,14 +1364,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1411,15 +1411,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1451,23 +1451,23 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1518,17 +1518,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1546,9 +1546,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1595,7 +1595,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Community.DataTypeSerializers/packages.lock.json b/uSync.Community.DataTypeSerializers/packages.lock.json index e4afc357..0278a279 100644 --- a/uSync.Community.DataTypeSerializers/packages.lock.json +++ b/uSync.Community.DataTypeSerializers/packages.lock.json @@ -4,20 +4,20 @@ "net10.0": { "Microsoft.SourceLink.GitHub": { "type": "Direct", - "requested": "[10.0.201, )", - "resolved": "10.0.201", - "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", + "requested": "[10.0.300, )", + "resolved": "10.0.300", + "contentHash": "QzCtLkXVb3l4IxcpvJCbzUwMLihAmLN6vVLjQGSzYSF8d2dvXxqJAZk83RV3gYnp2egz8jRMgSR2woY3vOahTA==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.201", - "Microsoft.SourceLink.Common": "10.0.201", - "System.IO.Hashing": "10.0.5" + "Microsoft.Build.Tasks.Git": "10.0.300", + "Microsoft.SourceLink.Common": "10.0.300", + "System.IO.Hashing": "10.0.8" } }, "Umbraco.Cms.Core": { "type": "Direct", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -35,9 +35,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "Direct", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -84,7 +84,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -412,10 +412,10 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "resolved": "10.0.300", + "contentHash": "P0kaQwVZx4xIUe2FtrLyBadYNXuAljttJUPvjBYRuHhPE8L77L42KakLDkaADRiUrGspoLcMwayjrbQhYTr0zA==", "dependencies": { - "System.IO.Hashing": "10.0.5" + "System.IO.Hashing": "10.0.8" } }, "Microsoft.Extensions.AmbientMetadata.Application": { @@ -848,8 +848,8 @@ }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" + "resolved": "10.0.300", + "contentHash": "0jlkXaUGjYlWTIVPve5MftjKHnT3SlAtq9BCLV4J9IjdPrxV/+4rMlBSjfr1khG8/GC6KGojjola8E1VvWF0qQ==" }, "MimeKit": { "type": "Transitive", @@ -1281,8 +1281,8 @@ }, "System.IO.Hashing": { "type": "Transitive", - "resolved": "10.0.5", - "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" + "resolved": "10.0.8", + "contentHash": "+dJsbPJ3FyUbTZNplFj0RCKePFizmv6ewDV46JE9q/IVH4c3xTCftHfHelLsAKf0jryIPqgMb5GpS0x7TAY3mg==" }, "System.Linq.Async": { "type": "Transitive", @@ -1312,8 +1312,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1348,15 +1348,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1395,14 +1395,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1439,14 +1439,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1486,15 +1486,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1526,8 +1526,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1535,27 +1535,27 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1606,9 +1606,9 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Core/Extensions/ChangeListExtensions.cs b/uSync.Core/Extensions/ChangeListExtensions.cs index 5cbf72a0..875d7013 100644 --- a/uSync.Core/Extensions/ChangeListExtensions.cs +++ b/uSync.Core/Extensions/ChangeListExtensions.cs @@ -1,4 +1,6 @@ -using uSync.Core.Extensions; +using System.Linq.Expressions; + +using uSync.Core.Extensions; using uSync.Core.Models; namespace uSync.Core; @@ -49,4 +51,27 @@ public static bool HasErrors(this List changes) public static bool HasWarning(this List changes) => changes.Any(x => x.Change == ChangeDetailType.Warning); + + + /// + /// If differs from the current property value, + /// records a change and applies the setter. + /// + public static uSyncChange? ApplyIfChanged( + this TObject item, + Expression> propertyExpr, + TValue newValue, + Action setter, + string path = "") + { + var getter = propertyExpr.Compile(); + var oldValue = getter(item); + + if (EqualityComparer.Default.Equals(oldValue, newValue)) return null; + + var propName = ((MemberExpression)propertyExpr.Body).Member.Name; + setter(item, newValue); + + return uSyncChange.Update(path, propName, oldValue?.ToString() ?? string.Empty, newValue?.ToString() ?? string.Empty, true); + } } diff --git a/uSync.Core/Extensions/XElementExtensions.cs b/uSync.Core/Extensions/XElementExtensions.cs index 7f91c281..968ca832 100644 --- a/uSync.Core/Extensions/XElementExtensions.cs +++ b/uSync.Core/Extensions/XElementExtensions.cs @@ -1,4 +1,6 @@ -using System.Diagnostics.CodeAnalysis; +using Org.BouncyCastle.Bcpg.Sig; + +using System.Diagnostics.CodeAnalysis; using System.Security.Cryptography; using System.Xml; using System.Xml.Linq; @@ -50,16 +52,31 @@ public static string GetSegments(this XElement node) /// Not all items have a parent /// public static Guid GetParentKey(this XElement node) - { - var result = node + => node.Element(uSyncConstants.Xml.Parent)?.GetKey() + ?? node.Element(uSyncConstants.Xml.Info)? + .Element(uSyncConstants.Xml.Parent)? + .GetKey() ?? Guid.Empty; + + public static XElement? GetParentNode(this XElement node) + => node.Element(uSyncConstants.Xml.Parent) + ?? node.Element(uSyncConstants.Xml.Info)?.Element(uSyncConstants.Xml.Parent); + + public static XElement? GetNameNode(this XElement node) + => node .Element(uSyncConstants.Xml.Info)? - .Element(uSyncConstants.Xml.Parent)? - .Attribute(uSyncConstants.Xml.Key).ValueOrDefault(Guid.Empty); + .Element(uSyncConstants.Xml.Name); - return result is not null && result.HasValue - ? result.Value - : Guid.Empty; - } + public static XElement? GetNodeNameNode(this XElement node) + => node + .Element(uSyncConstants.Xml.Info)? + .Element(uSyncConstants.Xml.NodeName); + + + public static string? GetDefaultName(this XElement node) + => node.Attribute(uSyncConstants.Xml.Default).ValueOrDefault(null); + + public static XElement? GetPropertiesNode(this XElement node) + => node.Element(uSyncConstants.Xml.Properties); /// /// get the nice path name that is stored in the xml, gives us something to show @@ -71,6 +88,10 @@ public static string GetPath(this XElement node) => node.Element(uSyncConstants.Xml.Info)? .Element(uSyncConstants.Xml.Path).ValueOrDefault(string.Empty) ?? string.Empty; + public static bool IsTrashed(this XElement node) + => node.Element(uSyncConstants.Xml.Info)? + .Element(uSyncConstants.Xml.Trashed).ValueOrDefault(false) is true; + /// /// does the xml represent an 'Empty' item (deleted/renamed/etc) /// diff --git a/uSync.Core/Keys/IKeyMappingService.cs b/uSync.Core/Keys/IKeyMappingService.cs new file mode 100644 index 00000000..f0f0add8 --- /dev/null +++ b/uSync.Core/Keys/IKeyMappingService.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace uSync.Core.Keys; + +/// +/// Umbraco have decided the keys can't be changed anymore. +/// +/// +/// This is a very odd decision 🤷 as Keys where put in the database for this very reason (because you couldn't change internal table ids) +/// basically with a fixed guid, you just have a slower lookup key, because in sql guid lookups are slower than id ones, and all the other +/// benfits are gone. +/// +/// It means we have to maintain a mapping of old keys to new keys, and this is that mapping. +/// because the keys are now fixed if a key is different but linked to anywhere (in a datatype,doctype, content or property) +/// then the previous solution of 'fixing' the key will no longer work. +/// +/// so we have to keep a record of keys that come from the source that don't match thoese of the same items on the target site. +/// and then when ever we encounter a key, we need to check and do a lookup to see if it needs to be mapped to the new key. +/// +/// we are going to try and cache this in memory for a sync, but because people can sync different bits at different times, +/// we need to keep a record of this in the database as well, so that if we sync content one day, and then sync doctypes +/// another day, the keys will still be mapped correctly. +/// +public interface ISyncKeyMappingService +{ + Guid? FetchKey(Guid? key); + void AddKey(Guid? oldKey, Guid newKey); + void DeleteKey(Guid? key); +} + +internal class SyncKeyMappingService : ISyncKeyMappingService +{ + public Guid? FetchKey(Guid? key) => key; + public void AddKey(Guid? oldKey, Guid newKey) { } + public void DeleteKey(Guid? key) { } +} \ No newline at end of file diff --git a/uSync.Core/Serialization/Extensions/SyncEntityExtensions.cs b/uSync.Core/Serialization/Extensions/SyncEntityExtensions.cs new file mode 100644 index 00000000..cd1ddfb6 --- /dev/null +++ b/uSync.Core/Serialization/Extensions/SyncEntityExtensions.cs @@ -0,0 +1,18 @@ +using Umbraco.Cms.Core.Models.Entities; + +using uSync.Core.Serialization.Models; + +namespace uSync.Core.Serialization.Extensions; + +internal static class SyncEntityExtensions +{ + public static int CalculateNodeLevel(this TObject item, SyncParentItem? parent) + where TObject : IEntity + => parent is null ? 1 : parent.Level + 1; + + public static string CalculateNodePath(this TObject item, SyncParentItem? parent) + where TObject : IEntity + => parent is null + ? string.Join(",", -1, item.Id) + : string.Join(",", parent.Path, item.Id); +} diff --git a/uSync.Core/Serialization/Serializers/ContentSerializer.cs b/uSync.Core/Serialization/Serializers/ContentSerializer.cs index 6d1b4e1d..b530f8fd 100644 --- a/uSync.Core/Serialization/Serializers/ContentSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ContentSerializer.cs @@ -26,20 +26,6 @@ public class ContentSerializer : PublishableContentBaseSerializer, ISy protected readonly ITemplateService _templateService; protected readonly ISyncDocumentUrlCleaner? _urlCleaner; - [Obsolete("Use the constructor with urlCleaner, will be removed in v19")] - public ContentSerializer( - IEntityService entityService, - ILanguageService languageService, - IRelationService relationService, - IShortStringHelper shortStringHelper, - ILogger logger, - IContentService contentService, - SyncValueMapperCollection syncMappers, - IUserService userService, - ITemplateService templateService - ) : this(entityService, languageService, relationService, shortStringHelper, logger, contentService, syncMappers, userService, templateService, null) - { } - public ContentSerializer( IEntityService entityService, ILanguageService languageService, @@ -60,63 +46,50 @@ public ContentSerializer( _urlCleaner = urlCleaner; } + protected override int RecycleBinId => Constants.System.RecycleBinContent; + #region Serialization protected override async Task SerializeTemplateAsync(IContent item, SyncSerializerOptions options) { - if (item.TemplateId != null && item.TemplateId.HasValue) - { - var template = await _templateService.GetAsync(item.TemplateId.Value); - if (template != null) - { - return new XElement(uSyncConstants.Xml.Template, - new XAttribute(uSyncConstants.Xml.Key, template.Key), - template.Alias); - } - } - return new XElement(uSyncConstants.Xml.Template); + if (item.TemplateId is null || item.TemplateId.HasValue is false) + return new XElement(uSyncConstants.Xml.Template); + + var template = await _templateService.GetAsync(item.TemplateId.Value); + if (template is null) + return new XElement(uSyncConstants.Xml.Template); + + return new XElement(uSyncConstants.Xml.Template, + new XAttribute(uSyncConstants.Xml.Key, template.Key), + template.Alias); + } protected override ContentScheduleCollection GetScheduleById(int id) => contentService.GetContentScheduleByContentId(id); - #endregion #region De-serialization protected override async Task DeserializeTemplate(IContent item, XElement node) { - var templateNode = node.Element(uSyncConstants.Xml.Info)?.Element("Template"); + var templateNode = node.Element(uSyncConstants.Xml.Info)? + .Element(uSyncConstants.Xml.Template); + + if (templateNode is null) return null; - if (templateNode != null) - { - var alias = templateNode.ValueOrDefault(string.Empty); - if (!string.IsNullOrWhiteSpace(alias)) - { - var template = await _templateService.GetAsync(alias); - if (template != null && template.Id != item.TemplateId) - { - var oldValue = item.TemplateId; - item.TemplateId = template.Id; - return uSyncChange.Update("Template", "Template", oldValue, template.Id); - } - } + var alias = templateNode.ValueOrDefault(string.Empty); + var key = templateNode.GetKey(); - var key = templateNode.ValueOrDefault(Guid.Empty); - if (key != Guid.Empty) - { - var template = await _templateService.GetAsync(key); - if (template != null && template.Id != item.TemplateId) - { - var oldValue = item.TemplateId; - item.TemplateId = template.Id; - return uSyncChange.Update("Template", "Template", oldValue, template.Id); - } - } - } + var template = await _templateService.GetAsync(alias) + ?? await _templateService.GetAsync(key); + + if (template is null || template.Id == item.TemplateId) return null; - return null; + var oldValue = item.TemplateId; + item.TemplateId = template.Id; + return uSyncChange.Update("Template", "Template", oldValue, template.Id); } // trashed helpers. diff --git a/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs b/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs index 2a62a3fc..9d199a74 100644 --- a/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs +++ b/uSync.Core/Serialization/Serializers/ContentSerializerBase.cs @@ -16,6 +16,8 @@ using uSync.Core.Mapping; using uSync.Core.Models; using uSync.Core.Serialization.Models; +using uSync.Core.Serialization.Extensions; + namespace uSync.Core.Serialization.Serializers; @@ -59,10 +61,7 @@ public ContentSerializerBase( /// protected virtual XElement InitializeNode(TObject item, string typeName, SyncSerializerOptions options) { - var node = new XElement(this.ItemType, - new XAttribute(uSyncConstants.Xml.Key, item.Key), - new XAttribute(uSyncConstants.Xml.Alias, item.Name ?? item.Id.ToString()), - new XAttribute(uSyncConstants.Xml.Level, GetLevel(item))); + var node = InitializeBaseNode(item, ItemAlias(item), GetLevel(item)); // are we only serializing some cultures ? var cultures = options.GetSetting(uSyncConstants.CultureKey, string.Empty); @@ -154,7 +153,7 @@ protected virtual async Task SerializeInfoAsync(TObject item, SyncSeri var cultures = options.GetCultures(); - var title = new XElement("NodeName", new XAttribute("Default", item.Name ?? item.Id.ToString())); + var title = new XElement(uSyncConstants.Xml.NodeName, new XAttribute("Default", item.Name ?? item.Id.ToString())); foreach (var culture in item.AvailableCultures.OrderBy(x => x)) { if (cultures.IsValidOrBlank(culture)) @@ -178,7 +177,7 @@ protected virtual async Task SerializeInfoAsync(TObject item, SyncSeri /// private XElement GetTrashedInfo(TObject item) { - var trashed = new XElement("Trashed", item.Trashed); + var trashed = new XElement(uSyncConstants.Xml.Trashed, item.Trashed); if (item.Trashed) { var trashedParent = GetTrashedParent(item); @@ -318,6 +317,41 @@ protected override async Task> CanDeserializeAsync(XElement return SyncAttempt.Succeed("No check", ChangeType.NoChange); } + protected abstract int RecycleBinId { get; } + + /// + /// calculate what the parent, path and level should be for this item, based on the info in the file, and the current state of the system. + /// + protected async Task<(int parentId, string nodePath, int nodeLevel)> GetParentPathAndLevelAsync(TObject item, XElement node) + { + var isTrashed = node.IsTrashed(); + if (isTrashed && item.ParentId == Constants.System.Root) + return (RecycleBinId, string.Empty, 1); + + var parentId = -1; + var nodeLevel = item.CalculateNodeLevel(default); + var nodePath = item.CalculateNodePath(default); + + var parentNode = node.GetParentNode(); + if (parentNode is null) + return (parentId, nodePath, nodeLevel); + + var parentItem = await FindParentAsync(parentNode, false); + if (parentItem is not null) + return (parentItem.Id, item.CalculateNodePath(parentItem), item.CalculateNodeLevel(parentItem)); + + // look for the parent by path. + var friendlyPath = node.GetPath(); + if (string.IsNullOrWhiteSpace(friendlyPath)) + return (parentId, nodePath, nodeLevel); + + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Find Parent failed, will search by path {FriendlyPath}", friendlyPath); + + parentItem = await FindParentByPathAsync(friendlyPath); + return (parentItem?.Id ?? parentId, nodePath, nodeLevel); + } + protected virtual async Task> DeserializeBaseAsync(TObject item, XElement node, SyncSerializerOptions options) { var info = node?.Element(uSyncConstants.Xml.Info); @@ -325,78 +359,30 @@ protected virtual async Task> DeserializeBaseAsync(TObj var changes = new List(); - var trashed = info.Element("Trashed").ValueOrDefault(false); + var (parentId, nodePath, nodeLevel) = await GetParentPathAndLevelAsync(item, info); - if (!trashed) + if (item.ParentId != parentId) { - // only try and set the path if the item isn't trashed. + changes.AddUpdate(uSyncConstants.Xml.Parent, item.ParentId, parentId); - var parentId = -1; - var nodeLevel = CalculateNodeLevel(item, default); - var nodePath = CalculateNodePath(item, default); - - var parentNode = info.Element(uSyncConstants.Xml.Parent); - if (parentNode != null && parentNode.Attribute(uSyncConstants.Xml.Key).ValueOrDefault(Guid.Empty) != Guid.Empty) - { - if (parentNode.GetKey() == Guid.Empty) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Parent is root (-1)"); - } - else - { - var parent = await FindParentAsync(parentNode, false); - if (parent == null) - { - var friendlyPath = info.Element(uSyncConstants.Xml.Path).ValueOrDefault(string.Empty); - if (!string.IsNullOrWhiteSpace(friendlyPath)) - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Find Parent failed, will search by path {FriendlyPath}", friendlyPath); - - parent = await FindParentByPathAsync(friendlyPath); - } - } + if (logger.IsEnabled(LogLevel.Trace)) + logger.LogTrace("{Id} Setting Parent {ParentId}", item.Id, parentId); - if (parent != null) - { - parentId = parent.Id; - nodePath = CalculateNodePath(item, parent); - nodeLevel = CalculateNodeLevel(item, parent); - } - else - { - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Unable to find parent but parent node is set in configuration"); - } - } - } + item.ParentId = parentId; + } - if (!item.Trashed) + if (item.Trashed is false) + { + // the following are calculated (not in the file + // because they might change without this node being saved). + if (item.Path != nodePath) { - // we change if its not in the bin, - // if its in the bin it will get fixed by handle trashed state. - if (item.ParentId != parentId) - { - changes.AddUpdate(uSyncConstants.Xml.Parent, item.ParentId, parentId); + changes.AddUpdate(uSyncConstants.Xml.Path, item.Path, nodePath); - if (logger.IsEnabled(LogLevel.Trace)) - logger.LogTrace("{Id} Setting Parent {ParentId}", item.Id, parentId); - - item.ParentId = parentId; - } - - // the following are calculated (not in the file - // because they might change without this node being saved). - if (item.Path != nodePath) - { - changes.AddUpdate(uSyncConstants.Xml.Path, item.Path, nodePath); - - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("{Id} Setting Path {idPath} was {oldPath}", item.Id, nodePath, item.Path); + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("{Id} Setting Path {idPath} was {oldPath}", item.Id, nodePath, item.Path); - item.Path = nodePath; - } + item.Path = nodePath; } if (item.Level != nodeLevel) @@ -409,17 +395,6 @@ protected virtual async Task> DeserializeBaseAsync(TObj item.Level = nodeLevel; } } - else // trashed. - { - // we need to set the parent to something, - // or the move will fail. - if (item.ParentId == -1) - { - item.ParentId = item is IContent - ? Constants.System.RecycleBinContent - : Constants.System.RecycleBinMedia; - } - } var key = node.GetKey(); if (key != Guid.Empty && item.Key != key) @@ -429,7 +404,7 @@ protected virtual async Task> DeserializeBaseAsync(TObj if (logger.IsEnabled(LogLevel.Trace)) logger.LogTrace("{Id} Setting Key {Key}", item.Id, key); - if (item.Id > 0) + if (item.HasIdentity) await OnKeyChange(item, item.Key, key); item.Key = key; @@ -462,21 +437,17 @@ protected virtual Task OnKeyChange(TObject item, Guid oldKey, Guid newKey) protected IEnumerable DeserializeName(TObject item, XElement node, SyncSerializerOptions options) { - var nameNode = node.Element(uSyncConstants.Xml.Info)?.Element("NodeName"); - if (nameNode == null) - return []; + var nameNode = node.GetNodeNameNode(); + if (nameNode == null) return []; var updated = false; - - var changes = new List(); - var name = nameNode.Attribute("Default").ValueOrDefault(string.Empty); - if (name != string.Empty && item.Name != name) + var name = nameNode.GetDefaultName(); + if (name is not null && item.Name != name) { changes.AddUpdate(uSyncConstants.Xml.Name, item.Name ?? item.Id.ToString(), name); updated = true; - item.Name = name; } @@ -486,28 +457,26 @@ protected IEnumerable DeserializeName(TObject item, XElement node, foreach (var cultureNode in nameNode.Elements(uSyncConstants.Xml.Name)) { - var culture = cultureNode.Attribute("Culture").ValueOrDefault(string.Empty); - if (culture == string.Empty) continue; + var culture = cultureNode.Attribute("Culture").ValueOrDefault(null); + if (string.IsNullOrEmpty(culture)) continue; - if (activeCultures.IsValid(culture)) - { - // v14: if the culture is missing we need to add it - if (item.CultureInfos?.TryGetValue(culture, out var cultureInfo) is false) - { - item.CultureInfos.Add(new ContentCultureInfos(culture)); - } + if (activeCultures.IsValid(culture) is false) continue; - var cultureName = cultureNode.ValueOrDefault(string.Empty); - var currentCultureName = item.GetCultureName(culture) ?? ""; - if (string.IsNullOrEmpty(cultureName) is false - && cultureName != currentCultureName) - { - changes.AddUpdate($"Name ({culture})", currentCultureName, cultureName); - updated = true; + // v14: if the culture is missing we need to add it + if (item.CultureInfos?.TryGetValue(culture, out var cultureInfo) is false) + item.CultureInfos.Add(new ContentCultureInfos(culture)); - item.SetCultureName(cultureName, culture); - } + var cultureName = cultureNode.ValueOrDefault(string.Empty); + var currentCultureName = item.GetCultureName(culture) ?? ""; + if (string.IsNullOrEmpty(cultureName) is false + && cultureName != currentCultureName) + { + changes.AddUpdate($"Name ({culture})", currentCultureName, cultureName); + updated = true; + + item.SetCultureName(cultureName, culture); } + } } @@ -523,7 +492,7 @@ protected async Task, string>> DeserializePropertiesAs var activeCultures = options.GetDeserializedCultures(node); - var properties = node.Element("Properties"); + var properties = node.GetPropertiesNode(); if (properties == null || !properties.HasElements) return Attempt.SucceedWithStatus(errors, changes); // new Exception("No Properties in the content node")); @@ -544,8 +513,8 @@ protected async Task, string>> DeserializePropertiesAs foreach (var value in values) { - var culture = value.Attribute("Culture").ValueOrDefault(string.Empty); - var segment = value.Attribute("Segment").ValueOrDefault(string.Empty); + var culture = value.GetCultures(); + var segment = value.GetSegments(); var propValue = value.ValueOrDefault(string.Empty); if (logger.IsEnabled(LogLevel.Trace)) @@ -562,7 +531,7 @@ protected async Task, string>> DeserializePropertiesAs { if (logger.IsEnabled(LogLevel.Trace)) logger.LogTrace("Item does not vary by culture - but uSync item file contains culture"); - + // if we get here, then things are wrong, so we will try to fix them. // // if the content config thinks it should vary by culture, but the document type doesn't @@ -725,8 +694,11 @@ protected virtual void MoveItem(TObject item, int parentId) { } var info = node.Element(uSyncConstants.Xml.Info); if (info is null) return null; - var trashed = info.Element("Trashed").ValueOrDefault(false); - var restoreParent = info.Element("Trashed")?.Attribute("Parent").ValueOrDefault(Guid.Empty) ?? Guid.Empty; + var trashed = info.Element(uSyncConstants.Xml.Trashed).ValueOrDefault(false); + var restoreParent = info.Element(uSyncConstants.Xml.Trashed)? + .Attribute(uSyncConstants.Xml.Parent) + .ValueOrDefault(Guid.Empty) ?? Guid.Empty; + return await HandleTrashedState(item, trashed, restoreParent, relationAlias); } @@ -844,10 +816,7 @@ public override bool IsValid(XElement node) var alias = node.GetAlias(); - var parentKey = node.Element(uSyncConstants.Xml.Info) - ?.Element(uSyncConstants.Xml.Parent) - ?.Attribute(uSyncConstants.Xml.Key) - .ValueOrDefault(Guid.Empty) ?? Guid.Empty; + var parentKey = node.GetParentKey(); if (parentKey != Guid.Empty) { @@ -929,7 +898,7 @@ private string GetFriendlyPath(string path) if (this.containerType != UmbracoObjectTypes.Unknown) objectTypes.Add(this.containerType); - var items = syncMappers.EntityCache.GetAll([..objectTypes], [.. lookups]); + var items = syncMappers.EntityCache.GetAll([.. objectTypes], [.. lookups]); // var items = entityService.GetAll(this.umbracoObjectType, lookups.ToArray()); foreach (var item in items) { @@ -1152,16 +1121,14 @@ public override string ItemAlias(TObject item) /// protected override async Task HasParentItemAsync(XElement node) { - var info = node.Element(uSyncConstants.Xml.Info); - var parentNode = info?.Element(uSyncConstants.Xml.Parent); + var parentNode = node.GetParentNode(); if (parentNode == null) return true; - - if (parentNode.Attribute(uSyncConstants.Xml.Key).ValueOrDefault(Guid.Empty) == Guid.Empty) return true; + if (parentNode.GetKey() == Guid.Empty) return true; var parent = await FindParentAsync(parentNode, false); if (parent == null) { - var friendlyPath = info?.Element(uSyncConstants.Xml.Path).ValueOrDefault(string.Empty) ?? string.Empty; + var friendlyPath = node.GetPath(); if (!string.IsNullOrWhiteSpace(friendlyPath)) { parent = await FindParentByPathAsync(friendlyPath, true); diff --git a/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs b/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs index bf05b6e3..5f8c19a3 100644 --- a/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ContentTemplateSerializer.cs @@ -48,7 +48,8 @@ protected override async Task SerializeInfoAsync(IContent item, SyncSe protected override async Task> DeserializeCoreAsync(XElement node, SyncSerializerOptions options) { var attempt = await FindOrCreateAsync(node); - if (!attempt.Success || attempt.Result is null) throw attempt.Exception ?? new Exception($"Unknown error {node.GetAlias()}"); + if (!attempt.Success || attempt.Result is null) + throw attempt.Exception ?? new Exception($"Unknown error {node.GetAlias()}"); var item = attempt.Result; @@ -88,23 +89,18 @@ protected override async Task> DeserializeCoreAsync(XEleme if (item != null) return item; } - var contentTypeAlias = node.Name.LocalName; - if (node.IsEmptyItem()) - { - contentTypeAlias = node.GetAlias(); - } + var contentTypeAlias = node.IsEmptyItem() + ? node.GetAlias() + : node.Name.LocalName; var contentType = _contentTypeService.Get(contentTypeAlias); - if (contentType != null) - { - var blueprints = contentService.GetBlueprintsForContentTypes(contentType.Id); - if (blueprints != null && blueprints.Any()) - { - return blueprints.FirstOrDefault(x => x.Name == node.GetAlias()); - } - } + if (contentType is null) return null; - return null; + var blueprints = contentService.GetBlueprintsForContentTypes(contentType.Id); + if (blueprints is null || blueprints.Any() == false) return null; + + return blueprints + .FirstOrDefault(x => x.Name == node.GetAlias()); } @@ -156,14 +152,14 @@ protected override Task> DoSaveOrPublishAsync( } public override Task SaveItemAsync(IContent item) - => uSyncTaskHelper.FromResultOf(() => - { - contentService.SaveBlueprint(item, null, Constants.Security.SuperUserId); - }); + { + contentService.SaveBlueprint(item, null); + return Task.CompletedTask; + } public override Task DeleteItemAsync(IContent item) - => uSyncTaskHelper.FromResultOf(() => - { - contentService.DeleteBlueprint(item); - }); + { + contentService.DeleteBlueprint(item); + return Task.CompletedTask; + } } diff --git a/uSync.Core/Serialization/Serializers/ContentTypeBaseSerializer.cs b/uSync.Core/Serialization/Serializers/ContentTypeBaseSerializer.cs index 80c4776a..4fa1acef 100644 --- a/uSync.Core/Serialization/Serializers/ContentTypeBaseSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ContentTypeBaseSerializer.cs @@ -56,7 +56,7 @@ protected XElement SerializeBase(TObject item) protected XElement SerializeInfo(TObject item) { return new XElement(uSyncConstants.Xml.Info, - new XElement("Name", item.Name), + new XElement(uSyncConstants.Xml.Name, item.Name), new XElement("Icon", item.Icon), new XElement("Thumbnail", item.Thumbnail), new XElement("Description", string.IsNullOrWhiteSpace(item.Description) ? "" : item.Description), diff --git a/uSync.Core/Serialization/Serializers/ContentTypeSerializer.cs b/uSync.Core/Serialization/Serializers/ContentTypeSerializer.cs index e04e21d1..4f78e8c3 100644 --- a/uSync.Core/Serialization/Serializers/ContentTypeSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ContentTypeSerializer.cs @@ -101,6 +101,8 @@ protected async Task SerializeInfoAsync(IContentType item) info.Add(new XElement("DefaultTemplate", templateAlias)); info.AddIfNotNull(SerializeTemplates(item)); + info.Add(new XElement("AllowedInLibrary", item.AllowedInLibrary)); + return info; } @@ -228,6 +230,15 @@ private async Task> DeserializeContentTypePropertiesAsync(ICon } + var allowedInLibrary = info.Element("AllowedInLibrary").ValueOrDefault(false); + if (item.AllowedInLibrary != allowedInLibrary) + { + changes.AddUpdate("AllowedInLibrary", item.AllowedInLibrary, allowedInLibrary, "Info/AllowedInLibrary"); + item.AllowedInLibrary = allowedInLibrary; + } + + + var masterTemplate = info?.Element("DefaultTemplate").ValueOrDefault(string.Empty) ?? string.Empty; if (!string.IsNullOrEmpty(masterTemplate)) { diff --git a/uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs b/uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs index 0036c929..3238ffed 100644 --- a/uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ElementContainerSerializer.cs @@ -4,14 +4,17 @@ using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Services; using uSync.Core.Models; +using static Umbraco.Cms.Core.Constants.HttpContext; + namespace uSync.Core.Serialization.Serializers; [SyncSerializer("8AD4ED7F-9E47-4918-ACAE-146132F5AB56", - "Element Serializer", uSyncConstants.Serialization.ElementContainer, IsTwoPass = false)] + "Element Serializer", uSyncConstants.Serialization.ElementContainer, IsTwoPass = true)] internal class ElementContainerSerializer : SyncSerializerBase, ISyncEntityContainerSerializer { @@ -62,58 +65,91 @@ public override async Task SaveItemAsync(EntityContainer item) protected override async Task> DeserializeCoreAsync(XElement node, SyncSerializerOptions options) { - var item = await FindItemAsync(node); - if (item is null) + var details = new List(); + + var item = await FindItemAsync(node) + ?? new EntityContainer(ContainedType.GetGuid()); + + var name = node.GetAlias(); + if (item.Name != name) { - // create a new one. - item = new EntityContainer(ContainedType.GetGuid()); + details.AddUpdate(uSyncConstants.Xml.Name, ItemAlias(item), item.Name, name); + item.Name = name; } - item.Name = node.GetAlias(); - item.Key = node.GetKey(); - item.SortOrder = int.TryParse(node.Attribute("SortOrder")?.Value, out var sortOrder) ? sortOrder : item.SortOrder; + var key = node.GetKey(); + if (item.Key != key) { + details.AddUpdate(uSyncConstants.Xml.Key, ItemAlias(item), item.Key.ToString(), key.ToString()); + item.Key = key; + } - var parentNode = node.Element("Parent"); - if (parentNode is not null) + var sortOrder = node.Element(uSyncConstants.Xml.SortOrder).ValueOrDefault(item.SortOrder); + if (item.SortOrder != sortOrder) { - var parentKey = parentNode.Attribute("Key")?.Value; - if (Guid.TryParse(parentKey, out var parentGuid)) - { - var parentItem = await _containerService.GetAsync(parentGuid); - if (parentItem is not null) - { - item.ParentId = parentItem.Id; - } - else - { - logger.LogWarning("Parent with key {ParentKey} not found for container {ContainerName}", parentKey, item.Name); - } - } - else + details.AddUpdate(uSyncConstants.Xml.SortOrder, ItemAlias(item), item.SortOrder.ToString(), sortOrder.ToString()); + item.SortOrder = sortOrder; + } + + return SyncAttempt.Succeed(ItemAlias(item), item, ChangeType.Import, details); + } + + public override async Task> DeserializeSecondPassAsync(EntityContainer item, XElement node, SyncSerializerOptions options) + { + var details = new List(); + + var parentId = await GetParentIdAsync(node, item); + if (item.ParentId != parentId) + { + var parent = await GetParentAsync(node); + if (parent is not null) { - logger.LogWarning("Invalid parent key {ParentKey} for container {ContainerName}", parentKey, item.Name); + details.AddUpdate(uSyncConstants.Xml.Parent, ItemAlias(item), item.ParentId.ToString(), parentId.ToString()); + await _containerService.MoveAsync(item.Key, parent?.Key, Constants.Security.SuperUserKey); } } - return SyncAttempt.Succeed(ItemAlias(item), item, ChangeType.Import, []); + return SyncAttempt.Succeed(ItemAlias(item), item, ChangeType.Import, details); + + } + + private async Task GetParentAsync(XElement node) + { + var parentNode = node.Element(uSyncConstants.Xml.Parent); + if (parentNode is null) return null; + + var parentGuid = parentNode.GetKey(); + if (parentGuid == Guid.Empty) return null; + + return await _containerService.GetAsync(parentGuid); + } + + private async Task GetParentIdAsync(XElement node, EntityContainer item) + { + var parentNode = node.Element(uSyncConstants.Xml.Parent); + if (parentNode is null) return item.ParentId; + + var parentGuid = parentNode.GetKey(); + if (parentGuid == Guid.Empty) return Constants.System.Root; + + var parentItem = await _containerService.GetAsync(parentGuid); + if (parentItem is null) return item.ParentId; + return parentItem.Id; } protected override async Task> SerializeCoreAsync(EntityContainer item, SyncSerializerOptions options) { var node = InitializeBaseNode(item, ItemAlias(item), item.Level); - node.Add(new XElement("SortOrder", item.SortOrder)); + node.Add(new XElement(uSyncConstants.Xml.SortOrder, item.SortOrder)); if (item.ParentId != -1) { var parent = await _containerService.GetParentAsync(item); if (parent is not null) { - node.Add(new XElement("Parent", - new XAttribute("Key", parent.Key)), - new XElement(parent.Name ?? string.Empty)); + node.Add(new XElement(uSyncConstants.Xml.Parent, + new XAttribute(uSyncConstants.Xml.Key, parent.Key), parent.Name ?? string.Empty)); } } - return SyncAttempt.Succeed(ItemAlias(item), node, ChangeType.Export, []); - + return SyncAttempt.Succeed(ItemAlias(item), node, typeof(IElement), ChangeType.Export); } } diff --git a/uSync.Core/Serialization/Serializers/ElementSerializer.cs b/uSync.Core/Serialization/Serializers/ElementSerializer.cs index 9dbc8ea3..37c1d78c 100644 --- a/uSync.Core/Serialization/Serializers/ElementSerializer.cs +++ b/uSync.Core/Serialization/Serializers/ElementSerializer.cs @@ -49,6 +49,9 @@ public ElementSerializer( _keyMap = keyMap; } + protected override int RecycleBinId => Constants.System.RecycleBinElement; + + public override Task DeleteItemAsync(IElement item) => Task.FromResult(_elementService.Delete(item)); diff --git a/uSync.Core/Serialization/Serializers/MediaSerializer.cs b/uSync.Core/Serialization/Serializers/MediaSerializer.cs index 54121c2c..92e91d46 100644 --- a/uSync.Core/Serialization/Serializers/MediaSerializer.cs +++ b/uSync.Core/Serialization/Serializers/MediaSerializer.cs @@ -48,6 +48,8 @@ public MediaSerializer( ]; } + protected override int RecycleBinId => Constants.System.RecycleBinMedia; + protected override async Task> DeserializeCoreAsync(XElement node, SyncSerializerOptions options) { var attempt = await FindOrCreateAsync(node); diff --git a/uSync.Core/Serialization/Serializers/MemberTypeSerializer.cs b/uSync.Core/Serialization/Serializers/MemberTypeSerializer.cs index 5f031655..0f868964 100644 --- a/uSync.Core/Serialization/Serializers/MemberTypeSerializer.cs +++ b/uSync.Core/Serialization/Serializers/MemberTypeSerializer.cs @@ -99,22 +99,22 @@ protected override void SerializeExtraProperties(XElement node, IMemberType item protected override async Task SerializePropertiesAsync(IMemberType item) { var node = await base.SerializePropertiesAsync(item); - foreach (var property in node.Elements("GenericProperty") ?? []) - { - var alias = property.Element(uSyncConstants.Xml.Alias).ValueOrDefault(string.Empty); - if (!string.IsNullOrWhiteSpace(alias) && _builtInProperties.TryGetValue(alias, out string? value)) - { - var key = value; - if (!item.Alias.InvariantEquals("Member")) - { - key = $"{item.Alias}{alias}".GetDeterministicHashCode().ToGuid().ToString(); - } - - var keyElement = property.Element(uSyncConstants.Xml.Key); - if (keyElement is not null) - keyElement.Value = key; - } - } + //foreach (var property in node.Elements("GenericProperty") ?? []) + //{ + // var alias = property.Element(uSyncConstants.Xml.Alias).ValueOrDefault(string.Empty); + // if (!string.IsNullOrWhiteSpace(alias) && _builtInProperties.TryGetValue(alias, out string? value)) + // { + // var key = value; + // if (!item.Alias.InvariantEquals("Member")) + // { + // key = $"{item.Alias}{alias}".GetDeterministicHashCode().ToGuid().ToString(); + // } + + // var keyElement = property.Element(uSyncConstants.Xml.Key); + // if (keyElement is not null) + // keyElement.Value = key; + // } + //} return node; } diff --git a/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs b/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs index 5a05c8f5..ff17a5a9 100644 --- a/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs +++ b/uSync.Core/Serialization/Serializers/PublishableContentBaseSerializer.cs @@ -45,7 +45,7 @@ protected override async Task> SerializeCoreAsync(TObject node.Add(info); node.Add(properties); - return SyncAttempt.Succeed(item.Name ?? item.Id.ToString(), node, typeof(IContent), ChangeType.Export); + return SyncAttempt.Succeed(ItemAlias(item), node, typeof(TObject), ChangeType.Export); } @@ -75,14 +75,14 @@ protected static XElement SerializePublishedStatus(TObject item, SyncSerializerO // to make this a non-breaking change, we say default = item.published, but when // dealing with cultures it isn't used. - published.Add(new XAttribute("Default", item.Published)); + published.Add(new XAttribute(uSyncConstants.Xml.Default, item.Published)); foreach (var culture in item.AvailableCultures.OrderBy(x => x)) { if (activeCultures.IsValid(culture)) { published.Add(new XElement("Published", item.IsCulturePublished(culture), - new XAttribute("Culture", culture))); + new XAttribute(uSyncConstants.Xml.Culture, culture))); } } return published; @@ -232,9 +232,9 @@ protected virtual async Task> DoSaveOrPublishAs return new SyncContentUpdateResult(true, item, "No changes"); } - var trashed = item.Trashed || (node.Element(uSyncConstants.Xml.Info)?.Element("Trashed").ValueOrDefault(false) ?? false); + var itemOrNodeTrashed = item.Trashed || node.IsTrashed(); var publishedNode = node.Element(uSyncConstants.Xml.Info)?.Element("Published"); - if (!trashed && publishedNode != null) + if (!itemOrNodeTrashed && publishedNode != null) { var schedules = GetSchedules(node.Element(uSyncConstants.Xml.Info)?.Element("Schedule")); diff --git a/uSync.Core/Serialization/SyncTreeSerializerBase.cs b/uSync.Core/Serialization/SyncTreeSerializerBase.cs index 4c1988da..69dc456b 100644 --- a/uSync.Core/Serialization/SyncTreeSerializerBase.cs +++ b/uSync.Core/Serialization/SyncTreeSerializerBase.cs @@ -85,35 +85,5 @@ public override async Task IsCurrentAsync(XElement node, SyncSeriali /// does the parent item (as defined in the xml) exist in umbraco for this item? /// protected virtual Task HasParentItemAsync(XElement node) - => Task.FromResult(true); - - /// - /// calculates the Umbraco Path value for an item, based on the parent - /// - protected string CalculateNodePath(TObject item, SyncParentItem? parent) - { - if (parent == null) - { - return string.Join(",", -1, item.Id); - } - else - { - return string.Join(",", parent.Path, item.Id); - } - } - - /// - /// calculates the Level based on the parent. - /// - protected int CalculateNodeLevel(TObject item, SyncParentItem? parent) - { - if (parent == null) - { - return 1; - } - else - { - return parent.Level + 1; - } - } + => Task.FromResult(true); } diff --git a/uSync.Core/packages.lock.json b/uSync.Core/packages.lock.json index 5e7dda02..e67c37ab 100644 --- a/uSync.Core/packages.lock.json +++ b/uSync.Core/packages.lock.json @@ -4,20 +4,20 @@ "net10.0": { "Microsoft.SourceLink.GitHub": { "type": "Direct", - "requested": "[10.0.201, )", - "resolved": "10.0.201", - "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", + "requested": "[10.0.300, )", + "resolved": "10.0.300", + "contentHash": "QzCtLkXVb3l4IxcpvJCbzUwMLihAmLN6vVLjQGSzYSF8d2dvXxqJAZk83RV3gYnp2egz8jRMgSR2woY3vOahTA==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.201", - "Microsoft.SourceLink.Common": "10.0.201", - "System.IO.Hashing": "10.0.5" + "Microsoft.Build.Tasks.Git": "10.0.300", + "Microsoft.SourceLink.Common": "10.0.300", + "System.IO.Hashing": "10.0.8" } }, "Umbraco.Cms.Api.Management": { "type": "Direct", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -68,17 +68,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Website": { "type": "Direct", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -125,7 +125,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -453,10 +453,10 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "resolved": "10.0.300", + "contentHash": "P0kaQwVZx4xIUe2FtrLyBadYNXuAljttJUPvjBYRuHhPE8L77L42KakLDkaADRiUrGspoLcMwayjrbQhYTr0zA==", "dependencies": { - "System.IO.Hashing": "10.0.5" + "System.IO.Hashing": "10.0.8" } }, "Microsoft.Extensions.AmbientMetadata.Application": { @@ -889,8 +889,8 @@ }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.201", - "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" + "resolved": "10.0.300", + "contentHash": "0jlkXaUGjYlWTIVPve5MftjKHnT3SlAtq9BCLV4J9IjdPrxV/+4rMlBSjfr1khG8/GC6KGojjola8E1VvWF0qQ==" }, "MimeKit": { "type": "Transitive", @@ -1322,8 +1322,8 @@ }, "System.IO.Hashing": { "type": "Transitive", - "resolved": "10.0.5", - "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" + "resolved": "10.0.8", + "contentHash": "+dJsbPJ3FyUbTZNplFj0RCKePFizmv6ewDV46JE9q/IVH4c3xTCftHfHelLsAKf0jryIPqgMb5GpS0x7TAY3mg==" }, "System.Linq.Async": { "type": "Transitive", @@ -1353,8 +1353,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1389,15 +1389,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1436,14 +1436,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1480,14 +1480,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1527,15 +1527,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1567,16 +1567,16 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", diff --git a/uSync.Core/uSyncConstants.cs b/uSync.Core/uSyncConstants.cs index 70f29ecd..dcd1d553 100644 --- a/uSync.Core/uSyncConstants.cs +++ b/uSync.Core/uSyncConstants.cs @@ -14,11 +14,17 @@ public static class Xml public const string Info = "Info"; public const string Name = "Name"; + public const string NodeName = "NodeName"; - public const string SortOrder = "SortOrder"; + public const string Default = "Default"; + public const string Trashed = "Trashed"; + public const string Culture = "Culture"; + public const string Segment = "Segment"; - public const string ItemType = "itemType"; + public const string Properties = "Properties"; + public const string SortOrder = "SortOrder"; + public const string ItemType = "itemType"; public const string Template = "Template"; } @@ -145,6 +151,9 @@ public static class DefaultSettings public const string UsingRazorViews = "UsingRazorViews"; public const bool UsingRazorViews_Default = false; + public const string ImportTrashed = "ImportTrashed"; + public const bool ImportTrashed_Default = false; + } public const int DependencyCountMax = 204800; diff --git a/uSync.Extend/packages.lock.json b/uSync.Extend/packages.lock.json index 933f1fe7..e13d7db5 100644 --- a/uSync.Extend/packages.lock.json +++ b/uSync.Extend/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1431,27 +1431,27 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1502,17 +1502,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1530,9 +1530,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1579,7 +1579,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.History/history-client/package-lock.json b/uSync.History/history-client/package-lock.json index c9bd6758..3fd917ac 100644 --- a/uSync.History/history-client/package-lock.json +++ b/uSync.History/history-client/package-lock.json @@ -1,12 +1,12 @@ { "name": "usync-history-client", - "version": "17.3.2", + "version": "18.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "usync-history-client", - "version": "17.3.2", + "version": "18.0.0", "devDependencies": { "@hey-api/openapi-ts": "^0.95.0", "@jumoo/translate": "^17.2.3", diff --git a/uSync.History/history-client/package.json b/uSync.History/history-client/package.json index bca2bcfc..fa479ce3 100644 --- a/uSync.History/history-client/package.json +++ b/uSync.History/history-client/package.json @@ -1,6 +1,6 @@ { "name": "usync-history-client", - "version": "17.3.2", + "version": "18.0.0", "licence": "Custom", "description": "uSync history function", "type": "module", diff --git a/uSync.History/packages.lock.json b/uSync.History/packages.lock.json index f836b948..c96aecb0 100644 --- a/uSync.History/packages.lock.json +++ b/uSync.History/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1431,34 +1431,34 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.backoffice.management.api": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "uSync.BackOffice": "[17.0.0, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "uSync.BackOffice": "[18.0.0, )" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1509,17 +1509,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1537,9 +1537,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1586,7 +1586,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.SchemaGenerator/packages.lock.json b/uSync.SchemaGenerator/packages.lock.json index 3b5504fe..13876c44 100644 --- a/uSync.SchemaGenerator/packages.lock.json +++ b/uSync.SchemaGenerator/packages.lock.json @@ -10,12 +10,12 @@ }, "NJsonSchema": { "type": "Direct", - "requested": "[11.5.2, )", - "resolved": "11.5.2", - "contentHash": "CAmnt4tnylb82Ro6f2EFIGz8rmThuCsITECUNqGhVEQ5VvxV+XwsTPz6LF58MbvUEV1jVcH+uxxljgM/etgK7A==", + "requested": "[11.6.1, )", + "resolved": "11.6.1", + "contentHash": "miqvNY4OSXCWVqaMqt0A8VUkij0UH1oPosHMLP+t6/nWNSSzWDPmm7G2DjVW7M9evy0x5DE2pS/DDTtKCpbzSQ==", "dependencies": { - "NJsonSchema.Annotations": "11.5.2", - "Namotion.Reflection": "3.4.3", + "NJsonSchema.Annotations": "11.6.1", + "Namotion.Reflection": "3.5.0", "Newtonsoft.Json": "13.0.3" } }, @@ -804,8 +804,8 @@ }, "Namotion.Reflection": { "type": "Transitive", - "resolved": "3.4.3", - "contentHash": "KLk2gLR9f8scM82EiL+p9TONXXPy9+IAZVMzJOA/Wsa7soZD7UJGG6j0fq0D9ZoVnBRRnSeEC7kShhRo3Olgaw==" + "resolved": "3.5.0", + "contentHash": "FnASiAaTGSmB4SaSroIwnK4ph9noFIXZpPOMezDqWw5S/TNakzSnawPeM7u0Auq1/EqJXeqG4s6UjfrGBH33Ow==" }, "NCrontab": { "type": "Transitive", @@ -827,8 +827,8 @@ }, "NJsonSchema.Annotations": { "type": "Transitive", - "resolved": "11.5.2", - "contentHash": "OfYQgNzJZb1r/gR5vza0DbBLxnmcITDhA5CXFuX1qxuP3rRdQMjbIz5VyDVHCU1QxyrfAymzajbh7iszEvyFGQ==" + "resolved": "11.6.1", + "contentHash": "WA4z8iK+0SOh2/qoo7rtEanj/LjJZ8oWWoXI8u1xcYMk6VzHONqpabJBYGrzqDO41ld+VQHOFL+B8MXncIVSSA==" }, "NPoco": { "type": "Transitive", @@ -1235,8 +1235,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1271,15 +1271,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1318,14 +1318,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1362,14 +1362,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1409,15 +1409,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1449,8 +1449,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1458,27 +1458,27 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1529,17 +1529,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1557,9 +1557,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1606,7 +1606,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Tests/appsettings-schema.Umbraco.Cms.json b/uSync.Tests/appsettings-schema.Umbraco.Cms.json index b8c18630..7fb5e643 100755 --- a/uSync.Tests/appsettings-schema.Umbraco.Cms.json +++ b/uSync.Tests/appsettings-schema.Umbraco.Cms.json @@ -1845,6 +1845,12 @@ "type": "boolean", "description": "Gets or sets a value indicating whether unattended package migrations are enabled.\n " }, + "MigrationClaimTimeout": { + "type": "string", + "description": "Gets or sets the maximum time a migration leadership claim is considered valid before\nanother server may take over. Protects against a leader crashing mid-migration.\n ", + "format": "duration", + "default": "02:00:00" + }, "UnattendedUserName": { "type": [ "null", diff --git a/uSync.Tests/packages.lock.json b/uSync.Tests/packages.lock.json index f1d693e8..14a1b6dd 100644 --- a/uSync.Tests/packages.lock.json +++ b/uSync.Tests/packages.lock.json @@ -4,18 +4,18 @@ "net10.0": { "coverlet.collector": { "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "WFejCcOUR6k8UYyDnnR6Gk+obFYMsWrZuNqPJnsVFGVhpPSN0y20D4qbdKJnXinYGx9PQ397Hf9TnU1NBST8vA==" + "requested": "[10.0.1, )", + "resolved": "10.0.1", + "contentHash": "27jXSV/0DbVqF5jDrAxuQFZ9oaz6gmG03p8ttxAFk+X0M4woFYj7MoWDLCna5EGLb0CE6OE7X6ZH3Wt5smTtaA==" }, "Microsoft.NET.Test.Sdk": { "type": "Direct", - "requested": "[18.5.1, )", - "resolved": "18.5.1", - "contentHash": "SfqVaLiIqAbRWuPg5BP4QFwBIirQj/YIL8Dhxl6zntBKbXp0cQykoV480SmwG+yRMiWptxEI6NbHQuGSZ8b97w==", + "requested": "[18.6.0, )", + "resolved": "18.6.0", + "contentHash": "kAIBt0MsYR0o2RULmlW5BhQ1ha50aGEgLKG4f1p0kePBGLJCprqs3S+NxRrYN8UH7mSQRPKpeiH9mwPMEKUObQ==", "dependencies": { - "Microsoft.CodeCoverage": "18.5.1", - "Microsoft.TestPlatform.TestHost": "18.5.1" + "Microsoft.CodeCoverage": "18.6.0", + "Microsoft.TestPlatform.TestHost": "18.6.0" } }, "NUnit3TestAdapter": { @@ -31,9 +31,9 @@ }, "Umbraco.Cms.Tests": { "type": "Direct", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "R1q6Mu9O6ZcOmYW+yPtptzXpQFUWBqbfUXB20FmYp2seXpKfr7Mf8ELn6zY9tJEuFGIKrFmPWjJC3D+qaPvsEA==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "3Q2XMtr1VP931TZigVTxW7qxPftXvhr99OcAgtWOSC4J8HM8f6+WKfhb07V9T11zo53iYjpOBsp6/FTvbeDW4Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -95,15 +95,15 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Tests.Integration": { "type": "Direct", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "5n0H7zL1pXvwAeqCRgrHUYQHbfsWoTaCy4aLhoAZziD2JuBVug8l03UHUuHhN/0kDhMNMGfMKNDXnPpmhPuGlw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "VAq7hjZIU5LTKXC/dgucJREiO3uvuAHW1f73tOcSVTY+AWjezNr2Qg0Mbvv5YTP54/Pj7hEJoYXeMgrhfzapGg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -171,12 +171,12 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.DevelopmentMode.Backoffice": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Tests": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.DevelopmentMode.Backoffice": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Tests": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -657,8 +657,8 @@ }, "Microsoft.CodeCoverage": { "type": "Transitive", - "resolved": "18.5.1", - "contentHash": "vMFDR1ZjqzzgKmM0zrPie7Gv9Y+ZppjODB5Quzu9Eq0TlIusUfUCYFPEawO91zQuqwzvdFbJSU7WHNtjStffJQ==" + "resolved": "18.6.0", + "contentHash": "bkmCXn/65Cd0LdO2zTb/ValGAJ1H8y/CgYOiBb3jsDyHI3Y1ljKx6RBvhvn3e5D/4R4I00RRwLf+Bd2Sn6bJjA==" }, "Microsoft.Data.SqlClient": { "type": "Transitive", @@ -1383,15 +1383,15 @@ }, "Microsoft.TestPlatform.ObjectModel": { "type": "Transitive", - "resolved": "18.5.1", - "contentHash": "KNZd+M0S0rz5eNAln0pbZX+A/RbokYZCbGKx4fN4CkhtWhkz6nSJDO+9LGYjRE4d0WPVriJ2JnVubkjt3+PpMg==" + "resolved": "18.6.0", + "contentHash": "gQTW4BIfM2ZLxixo9ITXoulLKjn20FiiHtqTsx9PENqTrX7368ZeJ5L0QZJyReXDWORPRV8jXwZR6Aar8JOyaA==" }, "Microsoft.TestPlatform.TestHost": { "type": "Transitive", - "resolved": "18.5.1", - "contentHash": "RM+3JNHEoHOCFXzVntUcIiYxzPjzBN0N8wto6HYXi76YyBTZ/3CeRL8U+Pk5zx3AUrOmHxDvKJwGUCdElU9bJg==", + "resolved": "18.6.0", + "contentHash": "em1eLz5Q46+hsCtAXdXggWAPd9gQyT4ngdsQ7k1eWvQgpsjtS/wAOJ/5TteieFdiAvrEq1iVn00LtusAxRaVmQ==", "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.5.1", + "Microsoft.TestPlatform.ObjectModel": "18.6.0", "Newtonsoft.Json": "13.0.3" } }, @@ -1978,8 +1978,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2014,15 +2014,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Api.Delivery": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "sCLcSUx3jSqvH85gtmimSIDpaHgSx+k8rrshm2RYt+SxXFDfd8u3kfzYiWvEfL9t/lus+PFGactTfsZIseQv+w==", + "resolved": "18.0.0-rc1", + "contentHash": "7hGfG4Q1O0ucmPsO9IYHZVJMJIUuwk5NMsn1rU6F5kzZIC7VoX5KBv+cmIp3IqWkfZyGWB9VlYxppbjFgXcdwA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2072,15 +2072,15 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -2119,14 +2119,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Imaging.ImageSharp": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IAEdOfiYDbN+8Zg2Bnc9gKvuxK6bxoOcF7QifswUYwCVGLUcHSLQa2y18Q9EhvDzekI1C+n/QOpxSIi+WeZ+aA==", + "resolved": "18.0.0-rc1", + "contentHash": "5u6PcOo2+9qomKw5AGoTiiyui80oSu4j3lU3R7U1v8uXWfDeOr98WWRTkp8JHJBMMH5/XFmxS6LAOzjVbggIAw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2175,14 +2175,14 @@ "SixLabors.ImageSharp.Web": "3.2.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2219,14 +2219,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "oIXjv+CZS1Lo22afYqM5ratzwAZ19lHorsPeMZCyrXQGch+eaKDRE31fvDk7qzAzTGtNJ7CE7Vx/Pyep5iEeIg==", + "resolved": "18.0.0-rc1", + "contentHash": "sm9ltBDHJ+BRiUJLK/sBA4uEdmb/HR2YTAe01fkLVwFOSFQM9O6Rkjsu/J0XPP79P3l9EJQ0rrjXnbFv+g2wjg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2266,15 +2266,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore.Sqlite": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "zXBxj2uSBPjuIWWrFoltf6fj9eGGY+362tlTJzTJAnJH4zuYCKH5g96vbZeNT4Vf/AWSm6IaODfNIor5B8uEjg==", + "resolved": "18.0.0-rc1", + "contentHash": "I/+b3ZA0QuTtvH3CNnRDviyP2y0kMISkvmr/vk64h0Dh8oJ3UPyBq9e4Lrh2kwZLZf/D+5aJhlHF/I6zT6Ld9Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2314,14 +2314,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore.SqlServer": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "GkVcFZ7mlR5znfgwrAfnK8bmw5ZYz4v47+kikEBPflyCikB3npLzJXRGYle6oRCqfiGabpkr0R/6f+cqcXM8Uw==", + "resolved": "18.0.0-rc1", + "contentHash": "ZwE5KdER0bOK+/7Zm/29f3XnkO4ZDh+TpYSLUcM7uAfcxq2WJ+HCR61jetjxIUasRYDeo1JFGabyQRR1ffxRgg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2361,14 +2361,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.Sqlite": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "V+Qd4rkrmcA/S7liz7JYIMuHEWLH3lwm5v3Wv+OXkIQw+0LMxojkJBEWpaHOgPgx5+s3DhxlAjNWxy8bx2GKGg==", + "resolved": "18.0.0-rc1", + "contentHash": "rKcEDHbqUvdPDx2PUQjCRxwEHVvrAMILeL1cP7PLZZd6ycxMdxXYKjeclKK5hSJHqIZnBtSBQxzaL6cqucjnvQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2406,14 +2406,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.SqlServer": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "ASeEwkRIbH05clQuCP0y7Er2/CQUs+YcAvg7T6R2PlPqnvCKn5DrvcfEtLyaMrQTiZPAcnCTQz6goGswyGb7Sw==", + "resolved": "18.0.0-rc1", + "contentHash": "zU6+VSRf0+jpXWf6SVox3og+oF2sn3AoLmN6C//JjGIGv7A0KcScTVK7Y1vRmQPKowAJWeshk5yhHTyy/CXwWA==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2451,14 +2451,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2498,15 +2498,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.StaticAssets": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "1y4mi1ZTguyVj2ZDefSeoPkkvGO/E2GYl+6m66Kpq2ahylJTVPkeBhAIMMsu65nkKTa5F3vXFCF7lEH0p4Ut2A==", + "resolved": "18.0.0-rc1", + "contentHash": "UpEgSfdVdJLYjz3s+RiUWpgSsi5kqmSQGapFzaWjKrM7ZS3kTysySCE4BkZMaRhYRlrlNDRAVvaQWe/uNDLp0g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2542,15 +2542,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Website": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Targets": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "y+zIONeex68VhV/HOgQcNI+uGgo4/7bzNsOcO8nuO2BfV2vvmBnkc9OROZHqfpEubhJ8kVG9fbE5QEVHgBbMTQ==", + "resolved": "18.0.0-rc1", + "contentHash": "Y/kqdu9To+KMnGmGkmpDs9RFUsqMufmphOlbJZhlxdl1rp4oeemsvq4FmXItw7AuSfRJJZzqYw/Xv+/iOIX1Cw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2601,16 +2601,16 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Delivery": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.StaticAssets": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Delivery": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.StaticAssets": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2642,8 +2642,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -2651,27 +2651,27 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms": { "type": "CentralTransitive", "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta2", - "contentHash": "cqqBnfXcCMu8SVALVn/zJIeNYu/PIVRIWHgwCaMwfmHSZIf9URoysSPgl4TSKrt2iA4qycg6QBmyTqe6HdVdQg==", + "resolved": "18.0.0-rc1", + "contentHash": "ab3gB4RPeFO9Kap3nA/lpci2WsME11uYp8ulf6qAD10SIC1BAAZWmy060fCmXtrySu1Xd01QQxFAVcF5TwsolA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2729,20 +2729,20 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Imaging.ImageSharp": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore.SqlServer": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore.Sqlite": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Persistence.SqlServer": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Persistence.Sqlite": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Targets": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Imaging.ImageSharp": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore.SqlServer": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore.Sqlite": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Persistence.SqlServer": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Persistence.Sqlite": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Targets": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2793,17 +2793,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -2822,8 +2822,8 @@ "Umbraco.Cms.DevelopmentMode.Backoffice": { "type": "CentralTransitive", "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta2", - "contentHash": "PH0+/qAsyhi2dg8XrnQb3knau96MAA7Ri/w4Hjz6jV4zdNx2Cphmv9cwTNqMSmGHOlcbygSxgi7iPApBPXAuFg==", + "resolved": "18.0.0-rc1", + "contentHash": "oeEb2b8kO16cgb0dfhJEkw9dPpD0z27YUz+mB9Bz6M4qblkR7G1csmKlgpZELkTUtJxOx7W6tMDDOpTHF0jnzg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2872,15 +2872,15 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta2", - "contentHash": "Bt+rQmPuRG9qfNK/F04ZlgrPNI85zSWm5G4JFhC075vY68bB37RbRAVuoMn8UgDAPrLMXqzk9kh4Jnr5tgFrkA==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2927,7 +2927,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Tests/umbraco-package-schema.json b/uSync.Tests/umbraco-package-schema.json index 322347d5..e9fd9e33 100755 --- a/uSync.Tests/umbraco-package-schema.json +++ b/uSync.Tests/umbraco-package-schema.json @@ -1,15072 +1,9 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { - "CollectionAliasConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.CollectionAlias%22%3E" - }, - { - "properties": { - "match": { - "description": "The collection that this extension should be available in", - "type": "string" - } - }, - "required": [ - "match" - ], - "type": "object" - } - ] - }, - "DelayConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.Delay%22%3E" - }, - { - "properties": { - "offset": { - "type": "string" - } - }, - "required": [ - "offset" - ], - "type": "object" - } - ] - }, - "ManifestAppEntryPoint": { - "description": "Manifest for an `appEntryPoint`, which is loaded up front when the app starts.\n\nThis type of extension gives full control and will simply load the specified JS file.\nYou could have custom logic to decide which extensions to load/register by using extensionRegistry.\nThis is useful for extensions that need to be loaded up front, like an `authProvider`.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "appEntryPoint", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestAuditLogAction": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaAuditLogAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "auditLogAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestAuditLogActionDefaultKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "default", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaAuditLogActionDefaultKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "auditLogAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestAuthProvider": { - "description": "Represents an authentication provider that can be used to authenticate users.\nThe provider needs to be registered in the API that the authorization request is sent to in order to be used.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forProviderName": { - "description": "The provider name that this provider is for.", - "examples": "'Umbraco.Github'", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaAuthProvider", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "authProvider", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forProviderName", - "name", - "type" - ], - "type": "object" - }, - "ManifestBackofficeEntryPoint": { - "description": "Manifest for an `backofficeEntryPoint`, which is loaded after the Backoffice has been loaded and authentication has been done.\n\nThis type of extension gives full control and will simply load the specified JS file.\nYou could have custom logic to decide which extensions to load/register by using extensionRegistry.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "backofficeEntryPoint", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestBase": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestBundle": { - "description": "This type of extension takes a JS module and registers all exported manifests from the pointed JS file.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "bundle", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollection": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaCollection" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "collection", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollectionAction": { - "description": "An action to perform on an entity\nFor example for content you may wish to create a new document etc", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaCollectionAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "collectionAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollectionActionCreateKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "create", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaCollectionAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "collectionAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollectionMenu": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaCollectionMenu" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "collectionMenu", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollectionMenuItem": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "collectionMenuItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollectionTextFilter": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "collectionTextFilter", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollectionView": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaCollectionView", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "collectionView", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestCollectionViewTableKind": { - "description": "Manifest type for the `table` kind of `collectionView`.\nAllows registering a table collection view with custom columns via manifest meta.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "table", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaCollectionViewTableKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "collectionView", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestCondition": { - "description": "This type of extension takes a JS module and registers all exported manifests from the pointed JS file.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "condition", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestCurrentUserAction": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaCurrentUserAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "currentUserAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestDashboard": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaDashboard", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "dashboard", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestDataSourceDataMapping": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "forDataModel": { - "type": "string" - }, - "forDataSource": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaDataSourceDataMapping" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "dataSourceDataMapping", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forDataModel", - "forDataSource", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityAction": { - "description": "An action to perform on an entity\nFor example for content you may wish to create a new document etc", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionContentRollbackKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "contentRollback", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionContentRollbackKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionCreateFolderKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "folderCreate", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionFolderKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionCreateKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "create", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionCreateKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionDefaultKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "default", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionDefaultKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionDeleteFolderKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "folderDelete", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionFolderKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionDeleteKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "delete", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionDeleteKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionDuplicateToKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "duplicateTo", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionDuplicateToKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionMoveToKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "moveTo", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionMoveToKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionReloadTreeItemChildrenKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "reloadTreeItemChildren", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionReloadTreeItemChildrenKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionSortChildrenOfContentKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "sortChildrenOfContent", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionSortChildrenOfKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionSortChildrenOfKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "sortChildrenOf", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionSortChildrenOfKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityActionUpdateFolderKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "folderUpdate", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityActionFolderKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityBulkAction": { - "description": "An action to perform on multiple entities\nFor example for content you may wish to move one or more documents in bulk", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityBulkAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityBulkAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityBulkActionDefaultKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "default", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityBulkActionDefaultKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityBulkAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityBulkActionDeleteKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "delete", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityBulkActionDeleteKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityBulkAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityBulkActionDuplicateToKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "duplicateTo", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityBulkActionDuplicateToKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityBulkAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityBulkActionMoveToKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "moveTo", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityBulkActionMoveToKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityBulkAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityBulkActionTrashKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "trash", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityBulkActionTrashKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityBulkAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityCollectionItemCard": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "description": "The entity types this collection item supports.", - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityCollectionItemCard", - "description": "Additional metadata for the collection item." - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityCollectionItemCard", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityCollectionItemRef": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "description": "The entity types this collection item supports.", - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityCollectionItemRef", - "description": "Additional metadata for the collection item." - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityCollectionItemRef", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityCreateOptionAction": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityCreateOptionAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityCreateOptionAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityCreateOptionActionFolderKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "folder", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaEntityCreateOptionActionFolderKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityCreateOptionAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityItemRef": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityItemRef", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "entityItemRef", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntityUserPermission": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityUserPermission" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "entityUserPermission", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestEntryPoint": { - "description": "Manifest for an `entryPoint`, which is loaded after the Backoffice has been loaded and authentication has been done.\n\nThis type of extension gives full control and will simply load the specified JS file.\nYou could have custom logic to decide which extensions to load/register by using extensionRegistry.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "entryPoint", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestExternalLoginProvider": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaExternalLoginProvider", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "externalLoginProvider", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestGlobalContext": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "globalContext", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestGlobalSearch": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaGlobalSearch" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "globalSearch", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestGranularUserPermission": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaGranularUserPermission", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "userGranularPermission", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestHeaderApp": { - "description": "Header apps are displayed in the top right corner of the backoffice\nThe two provided header apps are the search and the user menu", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "headerApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestHeaderAppButtonKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "button", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaHeaderAppButtonKind", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "headerApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestIcons": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "icons", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestItemStore": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "itemStore", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestLocalization": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaLocalization" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "localization", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestMarkedExtension": { - "description": "The `markedExtension` extension-type is currently for internal use and should be considered experimental.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaMarkedExtension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "markedExtension", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestMenu": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "menu", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestMenuItem": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaMenuItem", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "menuItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestMenuItemActionKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "action", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaMenuItemActionKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "menuItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestMenuItemLinkKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "link", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaMenuItemLinkKind", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "menuItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestMenuItemTreeKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "tree", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaMenuItemTreeKind", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "menuItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestMfaLoginProvider": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forProviderName": { - "description": "The provider names that this provider is for.", - "examples": "'Umbraco.GoogleAuthenticator'", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaMfaLoginProvider", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "mfaLoginProvider", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forProviderName", - "name", - "type" - ], - "type": "object" - }, - "ManifestModal": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "modal", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestPickerSearchResultItem": { - "description": "Represents a picker search result element.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "pickerSearchResultItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "name", - "type" - ], - "type": "object" - }, - "ManifestPreviewAppProvider": { - "description": "Preview apps are displayed in the menu of the preview window.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "previewApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyContext": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "forPropertyEditorUis": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaPropertyContext" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "propertyContext", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forPropertyEditorUis", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyEditorDataSource": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "dataSourceType": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaPropertyEditorDataSource" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "propertyEditorDataSource", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "dataSourceType", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyEditorSchema": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaPropertyEditorSchema" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "propertyEditorSchema", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyEditorUi": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaPropertyEditorUi", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "propertyEditorUi", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyValidationPathTranslator": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "forEditorAlias": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "propertyValidationPathTranslator", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEditorAlias", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyValueCloner": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "forEditorAlias": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "propertyValueCloner", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEditorAlias", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyValuePreset": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "forPropertyEditorSchemaAlias": { - "type": "string" - }, - "forPropertyEditorUiAlias": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "propertyValuePreset", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestPropertyValueResolver": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "forEditorAlias": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaPropertyValueResolver" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "propertyValueResolver", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEditorAlias", - "name", - "type" - ], - "type": "object" - }, - "ManifestRepository": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "repository", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestSearchProvider": { - "description": "Represents an search provider that can be used to search.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaSearchProvider" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "searchProvider", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestSearchResultItem": { - "description": "Represents a search result element.", - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "searchResultItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "name", - "type" - ], - "type": "object" - }, - "ManifestSection": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaSection" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "section", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestSectionContext": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaSectionContext" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "sectionContext", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestSectionRoute": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaSectionRoute" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "sectionRoute", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestSectionSidebarApp": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "sectionSidebarApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestSectionView": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaSectionView", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "sectionView", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestStore": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "store", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestTree": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaTree" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "tree", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestTreeItem": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "treeItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forEntityTypes", - "name", - "type" - ], - "type": "object" - }, - "ManifestUfmComponent": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaUfmComponent" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "ufmComponent", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestUfmFilter": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaUfmFilter" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "ufmFilter", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestUserProfileApp": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaUserProfileApp", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "userProfileApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestValueSummary": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forValueType": { - "description": "The value type this summary is registered for.", - "enum": [ - "Umb.ValueType.Section.Aliases", - "Umb.ValueType.User.State", - "Umb.ValueType.UserGroup.References" - ], - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaValueSummary" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "valueSummary", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "valueResolver": { - "description": "Optional resolver for batch-resolving raw values before rendering.\nUsed by the coordinator for efficient batching across multiple elements.", - "type": "object" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forValueType", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspace": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaWorkspace" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "workspace", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceAction>": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceActionDefaultKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "default", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceActionDefaultKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceActionMenuItem": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forWorkspaceActions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define which workspace actions this menu item should be shown for.", - "examples": "[\r\n['Umb.WorkspaceAction.Document.Save', 'Umb.WorkspaceAction.Document.SaveAndPublish'],\r\n\"Umb.WorkspaceAction.Document.Save\"\r\n]" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceActionMenuItem" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceActionMenuItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forWorkspaceActions", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceActionMenuItemDefaultKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "forWorkspaceActions": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define which workspace actions this menu item should be shown for.", - "examples": "[\r\n['Umb.WorkspaceAction.Document.Save', 'Umb.WorkspaceAction.Document.SaveAndPublish'],\r\n\"Umb.WorkspaceAction.Document.Save\"\r\n]" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "default", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceActionMenuItemDefaultKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceActionMenuItem", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "forWorkspaceActions", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceContext": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceContext", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceContextMenuStructureKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "menuStructure", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceContextMenuStructureKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceContext", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceDefaultKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "default", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceDefaultKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "workspace", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceFooterApp": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceFooterApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceFooterAppMenuBreadcrumbKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "menuBreadcrumb", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceFooterApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "variantMenuBreadcrumb", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceFooterApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceInfoApp": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceInfoApp", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceInfoApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceInfoAppAuditLogKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "auditLog", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceInfoAppAuditLogKind", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceInfoApp", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceRoutableKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "routable", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceRoutableKind" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "type": { - "const": "workspace", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceView": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceView", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceView", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceViewCollectionKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "collection", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceViewCollectionKind", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceView", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceViewContentCollectionKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "contentCollection", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceView", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceView", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "ManifestWorkspaceViewContentTypeDesignEditorKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "const": "contentTypeDesignEditor", - "description": "The kind of the extension, used to group extensions together", - "type": "string" - }, - "meta": { - "$ref": "#/definitions/MetaWorkspaceViewContentTypeDesignEditorKind", - "description": "This contains properties specific to the type of extension" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "type": { - "const": "workspaceView", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "kind", - "meta", - "name", - "type" - ], - "type": "object" - }, - "MetaAuditLogAction": { - "type": "object" - }, - "MetaAuditLogActionDefaultKind": { - "properties": { - "additionalOptions": { - "type": "boolean" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - } - }, - "required": [ - "icon", - "label" - ], - "type": "object" - }, - "MetaAuthProvider": { - "properties": { - "behavior": { - "description": "The behavior of the provider when it is used.", - "properties": { - "autoRedirect": { - "default": false, - "description": "If true, the user will be redirected to the provider's login page immediately.", - "type": "boolean" - }, - "popupFeatures": { - "default": "'width=600,height=600,menubar=no,location=no,resizable=yes,scrollbars=yes,status=no,toolbar=no'", - "description": "The features of the popup that is opened when the user logs in.", - "type": "string" - }, - "popupTarget": { - "default": "'umbracoAuthPopup'", - "description": "The target of the popup that is opened when the user logs in.", - "type": "string" - } - }, - "type": "object" - }, - "defaultView": { - "description": "The default view of the provider that is shown to the user.\nIf no element is provided, then the button will be rendered as a", - "properties": { - "color": { - "default": "'secondary'", - "description": "The color of the provider that is shown to the user.", - "enum": [ - "", - "danger", - "default", - "invalid", - "positive", - "warning" - ], - "type": "string" - }, - "icon": { - "default": "'icon-cloud'", - "description": "The icon of the provider that is shown to the user.", - "examples": "['icon-cloud', 'icon-github', 'icon-google', 'icon-facebook', 'icon-twitter', 'icon-x', 'icon-microsoft']", - "type": "string" - }, - "look": { - "default": "'default'", - "description": "The look of the provider that is shown to the user.", - "enum": [ - "", - "default", - "outline", - "placeholder", - "primary", - "secondary" - ], - "type": "string" - } - }, - "type": "object" - }, - "label": { - "description": "The label of the provider that is shown to the user.", - "type": "string" - }, - "linking": { - "description": "The linking options of the provider when it is used.", - "properties": { - "allowManualLinking": { - "default": false, - "description": "If true, the user will be able to link the provider to an existing account.", - "type": "boolean" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "MetaCollection": { - "properties": { - "noItemsLabel": { - "type": "string" - }, - "repositoryAlias": { - "type": "string" - } - }, - "required": [ - "repositoryAlias" - ], - "type": "object" - }, - "MetaCollectionAction": { - "properties": { - "additionalOptions": { - "type": "boolean" - }, - "href": { - "type": "string" - }, - "label": { - "type": "string" - } - }, - "required": [ - "label" - ], - "type": "object" - }, - "MetaCollectionMenu": { - "properties": { - "collectionRepositoryAlias": { - "type": "string" - } - }, - "required": [ - "collectionRepositoryAlias" - ], - "type": "object" - }, - "MetaCollectionView": { - "properties": { - "icon": { - "description": "An icon to represent the collection view", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the collection view", - "type": "string" - }, - "pathName": { - "description": "The URL pathname for this collection view that can be deep linked to by sharing the url", - "type": "string" - } - }, - "required": [ - "icon", - "label", - "pathName" - ], - "type": "object" - }, - "MetaCollectionViewTableKind": { - "description": "Meta configuration for the `table` kind of `collectionView`.", - "properties": { - "columns": { - "description": "Additional columns to render between the name and entity actions columns.", - "items": { - "$ref": "#/definitions/MetaCollectionViewTableKindColumn" - }, - "type": "array" - }, - "icon": { - "description": "An icon to represent the collection view", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the collection view", - "type": "string" - }, - "pathName": { - "description": "The URL pathname for this collection view that can be deep linked to by sharing the url", - "type": "string" - } - }, - "type": "object" - }, - "MetaCollectionViewTableKindColumn": { - "description": "Configuration for a single column in a table collection view kind.", - "properties": { - "field": { - "description": "The property name on the collection item model to display in this column.", - "type": "string" - }, - "label": { - "description": "The column header label. Supports localization strings (e.g. `#general_status`).", - "type": "string" - }, - "valueType": { - "description": "Optional value type for rendering a value summary in this column.", - "enum": [ - "Umb.ValueType.Section.Aliases", - "Umb.ValueType.User.State", - "Umb.ValueType.UserGroup.References" - ], - "type": "string" - } - }, - "required": [ - "field", - "label" - ], - "type": "object" - }, - "MetaCurrentUserAction": { - "type": "object" - }, - "MetaDashboard": { - "properties": { - "label": { - "description": "The displayed name (label) in the navigation.", - "type": "string" - }, - "pathname": { - "description": "This is the URL path part for this view. This is used for navigating or deep linking directly to the dashboard\nhttps://yoursite.com/section/settings/dashboard/my-dashboard-path", - "examples": [ - "my-dashboard-path" - ], - "type": "string" - } - }, - "type": "object" - }, - "MetaDataSourceDataMapping": { - "type": "object" - }, - "MetaEntityAction": { - "type": "object" - }, - "MetaEntityActionContentRollbackKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "detailRepositoryAlias": { - "type": "string" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - }, - "rollbackNotificationMessage": { - "type": "string" - }, - "rollbackRepositoryAlias": { - "type": "string" - } - }, - "required": [ - "detailRepositoryAlias", - "icon", - "label", - "rollbackRepositoryAlias" - ], - "type": "object" - }, - "MetaEntityActionCreateKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "icon", - "label" - ], - "type": "object" - }, - "MetaEntityActionDefaultKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "icon", - "label" - ], - "type": "object" - }, - "MetaEntityActionDeleteKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "confirm": { - "properties": { - "headline": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "type": "object" - }, - "detailRepositoryAlias": { - "type": "string" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "itemRepositoryAlias": { - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "detailRepositoryAlias", - "icon", - "itemRepositoryAlias", - "label" - ], - "type": "object" - }, - "MetaEntityActionDuplicateToKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "duplicateRepositoryAlias": { - "type": "string" - }, - "foldersOnly": { - "type": "boolean" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - }, - "treeAlias": { - "type": "string" - }, - "treeRepositoryAlias": { - "type": "string" - } - }, - "required": [ - "duplicateRepositoryAlias", - "icon", - "label", - "treeAlias", - "treeRepositoryAlias" - ], - "type": "object" - }, - "MetaEntityActionFolderKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "folderRepositoryAlias": { - "type": "string" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "folderRepositoryAlias", - "icon", - "label" - ], - "type": "object" - }, - "MetaEntityActionMoveToKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "foldersOnly": { - "type": "boolean" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - }, - "moveRepositoryAlias": { - "type": "string" - }, - "treeAlias": { - "type": "string" - }, - "treeRepositoryAlias": { - "type": "string" - } - }, - "required": [ - "icon", - "label", - "moveRepositoryAlias", - "treeAlias", - "treeRepositoryAlias" - ], - "type": "object" - }, - "MetaEntityActionReloadTreeItemChildrenKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "icon", - "label" - ], - "type": "object" - }, - "MetaEntityActionSortChildrenOfKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - }, - "sortChildrenOfRepositoryAlias": { - "type": "string" - }, - "treeRepositoryAlias": { - "type": "string" - } - }, - "required": [ - "icon", - "label", - "sortChildrenOfRepositoryAlias", - "treeRepositoryAlias" - ], - "type": "object" - }, - "MetaEntityBulkAction": { - "type": "object" - }, - "MetaEntityBulkActionDefaultKind": { - "properties": { - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "type": "object" - }, - "MetaEntityBulkActionDeleteKind": { - "properties": { - "detailRepositoryAlias": { - "type": "string" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "itemRepositoryAlias": { - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "detailRepositoryAlias", - "itemRepositoryAlias" - ], - "type": "object" - }, - "MetaEntityBulkActionDuplicateToKind": { - "properties": { - "alias": { - "description": "The alias of the extension, ensure it is unique", - "type": "string" - }, - "api": { - "description": "The file location of the api javascript file to load", - "type": "string" - }, - "bulkDuplicateRepositoryAlias": { - "type": "string" - }, - "conditions": { - "description": "Set the conditions for when the extension should be loaded", - "items": { - "anyOf": [ - { - "$ref": "#/definitions/UmbEntityUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbLanguageUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsRoutableContextConditionConfig" - }, - { - "$ref": "#/definitions/UmbPropertyHasValueConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/UmbEntityContentTypeUniqueConditionConfig" - }, - { - "$ref": "#/definitions/SectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbSectionUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/WorkspaceAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityIsNewConditionConfig" - }, - { - "$ref": "#/definitions/UmbWorkspaceEntityTypeConditionConfig" - }, - { - "$ref": "#/definitions/UmbContentWorkspaceIsLoadedConditionConfig" - }, - { - "$ref": "#/definitions/CollectionAliasConditionConfig" - }, - { - "$ref": "#/definitions/UmbCollectionHasItemsConditionConfig" - }, - { - "$ref": "#/definitions/UmbCurrentUserGroupIdConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsAdminConditionConfig" - }, - { - "$ref": "#/definitions/UmbIsServerProductionModeConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowChangePassword%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDeleteAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowDisableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowEnableAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowExternalLoginAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowMfaAction%22%3E" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.User.AllowUnlockAction%22%3E" - }, - { - "$ref": "#/definitions/UmbFallbackUserPermissionConditionConfig" - }, - { - "$ref": "#/definitions/UmbInModalConditionConfig" - }, - { - "$ref": "#/definitions/DelayConditionConfig" - }, - { - "$ref": "#/definitions/SwitchConditionConfig" - }, - { - "$ref": "#/definitions/UmbConditionConfigBase%3Cstring%3E" - } - ] - }, - "type": "array" - }, - "element": { - "description": "The file location of the element javascript file to load", - "type": "string" - }, - "elementName": { - "description": "The HTML web component name to use such as 'my-dashboard'\nNote it is NOT , just the element name.", - "type": "string" - }, - "foldersOnly": { - "type": "boolean" - }, - "forEntityTypes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "hideTreeRoot": { - "type": "boolean" - }, - "js": { - "description": "The file location of the javascript file to load", - "type": "string" - }, - "kind": { - "description": "The kind of the extension, used to group extensions together", - "examples": [ - "button" - ] - }, - "meta": { - "$ref": "#/definitions/MetaEntityBulkAction" - }, - "name": { - "description": "The friendly name of the extension", - "type": "string" - }, - "overwrites": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ], - "description": "Define one or more extension aliases that this extension should overwrite." - }, - "treeAlias": { - "type": "string" - }, - "type": { - "const": "entityBulkAction", - "description": "The type of extension such as dashboard etc...", - "type": "string" - }, - "weight": { - "description": "Extensions such as dashboards are ordered by weight with higher numbers being first in the list", - "type": "number" - } - }, - "required": [ - "alias", - "bulkDuplicateRepositoryAlias", - "forEntityTypes", - "meta", - "name", - "treeAlias", - "type" - ], - "type": "object" - }, - "MetaEntityBulkActionMoveToKind": { - "properties": { - "bulkMoveRepositoryAlias": { - "type": "string" - }, - "foldersOnly": { - "type": "boolean" - }, - "hideTreeRoot": { - "type": "boolean" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - }, - "treeAlias": { - "type": "string" - } - }, - "required": [ - "bulkMoveRepositoryAlias", - "treeAlias" - ], - "type": "object" - }, - "MetaEntityBulkActionTrashKind": { - "properties": { - "bulkTrashRepositoryAlias": { - "type": "string" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "bulkTrashRepositoryAlias" - ], - "type": "object" - }, - "MetaEntityCollectionItemCard": { - "type": "object" - }, - "MetaEntityCollectionItemRef": { - "type": "object" - }, - "MetaEntityCreateOptionAction": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "description": { - "description": "A description of the action to be performed", - "examples": [ - "Create a document type with a template", - "Create a document from a blueprint" - ], - "type": "string" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create with Template", - "Create from Blueprint" - ], - "type": "string" - } - }, - "required": [ - "icon", - "label" - ], - "type": "object" - }, - "MetaEntityCreateOptionActionFolderKind": { - "properties": { - "additionalOptions": { - "description": "The action requires additional input from the user.\nA dialog will prompt the user for more information or to make a choice.", - "type": "{boolean}" - }, - "description": { - "description": "A description of the action to be performed", - "examples": [ - "Create a document type with a template", - "Create a document from a blueprint" - ], - "type": "string" - }, - "folderRepositoryAlias": { - "type": "string" - }, - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create with Template", - "Create from Blueprint" - ], - "type": "string" - } - }, - "required": [ - "folderRepositoryAlias", - "icon", - "label" - ], - "type": "object" - }, - "MetaEntityItemRef": { - "type": "object" - }, - "MetaEntityUserPermission": { - "properties": { - "description": { - "type": "string" - }, - "group": { - "type": "string" - }, - "label": { - "type": "string" - }, - "verbs": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "verbs" - ], - "type": "object" - }, - "MetaExternalLoginProvider": { - "properties": { - "label": { - "type": "string" - }, - "pathname": { - "type": "string" - } - }, - "required": [ - "label", - "pathname" - ], - "type": "object" - }, - "MetaGlobalSearch": { - "properties": { - "label": { - "type": "string" - }, - "searchProviderAlias": { - "type": "string" - }, - "sectionAlias": { - "type": "string" - } - }, - "required": [ - "label", - "searchProviderAlias" - ], - "type": "object" - }, - "MetaGranularUserPermission": { - "properties": { - "description": { - "type": "string" - }, - "descriptionKey": { - "type": "string" - }, - "label": { - "type": "string" - }, - "labelKey": { - "type": "string" - }, - "schemaType": { - "type": "string" - } - }, - "required": [ - "schemaType" - ], - "type": "object" - }, - "MetaHeaderAppButtonKind": { - "properties": { - "href": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - } - }, - "required": [ - "href", - "icon", - "label" - ], - "type": "object" - }, - "MetaLocalization": { - "properties": { - "culture": { - "description": "The culture is a combination of a language and a country. The language is represented by an ISO 639-1 code and the country is represented by an ISO 3166-1 alpha-2 code.\r\nThe language and country are separated by a dash.\r\nThe value is used to describe the language of the translations according to the extension system\r\nand it will be set as the `lang` attribute on the `` element.", - "type": "string" - }, - "direction": { - "default": "ltr", - "description": "The value is used to describe the direction of the translations according to the extension system\r\nand it will be set as the `dir` attribute on the `` element. It defaults to `ltr`.", - "enum": [ - "ltr", - "rtl" - ], - "type": "string" - }, - "localizations": { - "$ref": "#/definitions/UmbLocalizationDictionary", - "description": "The localizations." - } - }, - "required": [ - "culture" - ], - "type": "object" - }, - "MetaMarkedExtension": { - "properties": { - "alias": { - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "MetaMenuItem": { - "properties": { - "entityType": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "menus": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "label", - "menus" - ], - "type": "object" - }, - "MetaMenuItemActionKind": { - "properties": { - "entityType": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "menus": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "label", - "menus" - ], - "type": "object" - }, - "MetaMenuItemLinkKind": { - "properties": { - "entityType": { - "type": "string" - }, - "href": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "menus": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "href", - "label", - "menus" - ], - "type": "object" - }, - "MetaMenuItemTreeKind": { - "properties": { - "entityType": { - "type": "string" - }, - "hideTreeRoot": { - "type": "boolean" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "menus": { - "items": { - "type": "string" - }, - "type": "array" - }, - "treeAlias": { - "type": "string" - } - }, - "required": [ - "label", - "menus", - "treeAlias" - ], - "type": "object" - }, - "MetaMfaLoginProvider": { - "properties": { - "label": { - "type": "string" - } - }, - "type": "object" - }, - "MetaPropertyContext": { - "type": "object" - }, - "MetaPropertyEditorDataSource": { - "properties": { - "description": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "settings": { - "$ref": "#/definitions/PropertyEditorSettings" - } - }, - "required": [ - "label" - ], - "type": "object" - }, - "MetaPropertyEditorSchema": { - "properties": { - "defaultPropertyEditorUiAlias": { - "type": "string" - }, - "settings": { - "$ref": "#/definitions/PropertyEditorSettings" - } - }, - "required": [ - "defaultPropertyEditorUiAlias" - ], - "type": "object" - }, - "MetaPropertyEditorUi": { - "properties": { - "group": { - "default": "Common", - "description": "The group that this property editor UI belongs to, which will be used to group the property editor UIs in the property editor picker.\nIf not specified, the property editor UI will be grouped under \"Common\".", - "type": "string" - }, - "icon": { - "type": "string" - }, - "keywords": { - "description": "A list of keywords that can be used to search for this property editor UI in the property editor picker.\nIf not specified, the property editor UI will not have any keywords.", - "items": { - "type": "string" - }, - "type": "array" - }, - "label": { - "type": "string" - }, - "propertyEditorSchemaAlias": { - "description": "The alias of the property editor schema that this property editor UI is for.\nIf not specified, the property editor UI can only be used to configure other property editors.", - "type": "string" - }, - "settings": { - "$ref": "#/definitions/PropertyEditorSettings" - }, - "supportsDataSource": { - "properties": { - "enabled": { - "description": "Whether the property editor UI is enabled for use with data sources.", - "type": "{boolean}" - }, - "forDataSourceTypes": { - "description": "A list of allowed property editor data source kinds that can be used with this property editor UI.\nIf not specified, any data sources can be used.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "enabled", - "forDataSourceTypes" - ], - "type": "object" - }, - "supportsReadOnly": { - "type": "boolean" - } - }, - "required": [ - "group", - "icon", - "label" - ], - "type": "object" - }, - "MetaPropertyValueResolver": { - "type": "object" - }, - "MetaSearchProvider": { - "properties": { - "label": { - "description": "The label of the provider that is shown to the user.", - "type": "string" - } - }, - "type": "object" - }, - "MetaSection": { - "properties": { - "label": { - "type": "string" - }, - "pathname": { - "type": "string" - }, - "preventUrlRetention": { - "type": "boolean" - } - }, - "required": [ - "label", - "pathname" - ], - "type": "object" - }, - "MetaSectionContext": { - "type": "object" - }, - "MetaSectionRoute": { - "properties": { - "path": { - "type": "string" - } - }, - "type": "object" - }, - "MetaSectionView": { - "properties": { - "icon": { - "description": "The icon displayed for this view in the navigation.", - "examples": [ - "box" - ], - "type": "string" - }, - "label": { - "description": "The displayed name (label) in the navigation.", - "type": "string" - }, - "pathname": { - "description": "This is the URL path part for this view. This is used for navigating or deep linking directly to the view\nhttps://yoursite.com/section/settings/view/my-view-path", - "examples": [ - "my-view-path" - ], - "type": "string" - } - }, - "required": [ - "icon" - ], - "type": "object" - }, - "MetaTree": { - "properties": { - "repositoryAlias": { - "type": "string" - } - }, - "required": [ - "repositoryAlias" - ], - "type": "object" - }, - "MetaUfmComponent": { - "properties": { - "alias": { - "type": "string" - }, - "marker": { - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "MetaUfmFilter": { - "properties": { - "alias": { - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "MetaUserProfileApp": { - "properties": { - "label": { - "type": "string" - }, - "pathname": { - "type": "string" - } - }, - "required": [ - "label", - "pathname" - ], - "type": "object" - }, - "MetaValueSummary": { - "type": "object" - }, - "MetaWorkspace": { - "properties": { - "entityType": { - "type": "string" - } - }, - "required": [ - "entityType" - ], - "type": "object" - }, - "MetaWorkspaceAction": { - "type": "object" - }, - "MetaWorkspaceActionDefaultKind": { - "properties": { - "additionalOptions": { - "type": "boolean" - }, - "color": { - "enum": [ - "", - "danger", - "default", - "invalid", - "positive", - "warning" - ], - "type": "string" - }, - "href": { - "type": "string" - }, - "label": { - "type": "string" - }, - "look": { - "enum": [ - "", - "default", - "outline", - "placeholder", - "primary", - "secondary" - ], - "type": "string" - } - }, - "type": "object" - }, - "MetaWorkspaceActionMenuItem": { - "type": "object" - }, - "MetaWorkspaceActionMenuItemDefaultKind": { - "properties": { - "icon": { - "description": "An icon to represent the action to be performed", - "examples": [ - "icon-box", - "icon-grid" - ], - "type": "string" - }, - "label": { - "description": "The friendly name of the action to perform", - "examples": [ - "Create", - "Create Content Template" - ], - "type": "string" - } - }, - "required": [ - "icon", - "label" - ], - "type": "object" - }, - "MetaWorkspaceContextMenuStructureKind": { - "properties": { - "menuItemAlias": { - "type": "string" - } - }, - "required": [ - "menuItemAlias" - ], - "type": "object" - }, - "MetaWorkspaceDefaultKind": { - "properties": { - "entityType": { - "type": "string" - }, - "headline": { - "type": "string" - } - }, - "required": [ - "entityType", - "headline" - ], - "type": "object" - }, - "MetaWorkspaceInfoApp": { - "type": "object" - }, - "MetaWorkspaceInfoAppAuditLogKind": { - "properties": { - "auditLogRepositoryAlias": { - "type": "string" - } - }, - "required": [ - "auditLogRepositoryAlias" - ], - "type": "object" - }, - "MetaWorkspaceRoutableKind": { - "properties": { - "entityType": { - "type": "string" - } - }, - "required": [ - "entityType" - ], - "type": "object" - }, - "MetaWorkspaceView": { - "properties": { - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "pathname": { - "type": "string" - } - }, - "required": [ - "icon", - "label", - "pathname" - ], - "type": "object" - }, - "MetaWorkspaceViewCollectionKind": { - "properties": { - "collectionAlias": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "pathname": { - "type": "string" - } - }, - "required": [ - "collectionAlias", - "icon", - "label", - "pathname" - ], - "type": "object" - }, - "MetaWorkspaceViewContentTypeDesignEditorKind": { - "properties": { - "compositionRepositoryAlias": { - "type": "string" - }, - "icon": { - "type": "string" - }, - "label": { - "type": "string" - }, - "pathname": { - "type": "string" - } - }, - "required": [ - "icon", - "label", - "pathname" - ], - "type": "object" - }, - "PropertyEditorSettings": { - "properties": { - "defaultData": { - "items": { - "$ref": "#/definitions/PropertyEditorSettingsDefaultData" - }, - "type": "array" - }, - "properties": { - "items": { - "$ref": "#/definitions/PropertyEditorSettingsProperty" - }, - "type": "array" - } - }, - "required": [ - "properties" - ], - "type": "object" - }, - "PropertyEditorSettingsDefaultData": { - "properties": { - "alias": { - "type": "string" - }, - "value": {} - }, - "required": [ - "alias", - "value" - ], - "type": "object" - }, - "PropertyEditorSettingsProperty": { - "properties": { - "alias": { - "type": "string" - }, - "config": { - "items": { - "properties": { - "alias": { - "type": "string" - }, - "value": {} - }, - "required": [ - "alias" - ], - "type": "object" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "label": { - "type": "string" - }, - "propertyEditorDataSourceAlias": { - "type": "string" - }, - "propertyEditorUiAlias": { - "type": "string" - }, - "validation": { - "properties": { - "mandatory": { - "type": "boolean" - }, - "mandatoryMessage": { - "type": [ - "null", - "string" - ] - } - }, - "required": [ - "mandatory" - ], - "type": "object" - }, - "weight": { - "type": "number" - } - }, - "required": [ - "alias", - "label", - "propertyEditorUiAlias" - ], - "type": "object" - }, - "SectionAliasConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.SectionAlias%22%3E" - }, - { - "properties": { - "match": { - "description": "Define the section that this extension should be available in", - "type": "string" - }, - "oneOf": { - "description": "Define one or more workspaces that this extension should be available in", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "match" - ], - "type": "object" - } - ] - }, - "SwitchConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.Switch%22%3E" - }, - { - "properties": { - "frequency": { - "type": "string" - } - }, - "required": [ - "frequency" - ], - "type": "object" - } - ] - }, - "UmbCollectionHasItemsConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.CollectionHasItems", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.CollectionAlias\">": { - "properties": { - "alias": { - "const": "Umb.Condition.CollectionAlias", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.Delay\">": { - "properties": { - "alias": { - "const": "Umb.Condition.Delay", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.Entity.Type\">": { - "properties": { - "alias": { - "const": "Umb.Condition.Entity.Type", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.Entity.Unique\">": { - "properties": { - "alias": { - "const": "Umb.Condition.Entity.Unique", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.EntityContentType.Unique\">": { - "properties": { - "alias": { - "const": "Umb.Condition.EntityContentType.Unique", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.SectionAlias\">": { - "properties": { - "alias": { - "const": "Umb.Condition.SectionAlias", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.SectionUserPermission\">": { - "properties": { - "alias": { - "const": "Umb.Condition.SectionUserPermission", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.Switch\">": { - "properties": { - "alias": { - "const": "Umb.Condition.Switch", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.User.AllowChangePassword\">": { - "properties": { - "alias": { - "const": "Umb.Condition.User.AllowChangePassword", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.User.AllowDeleteAction\">": { - "properties": { - "alias": { - "const": "Umb.Condition.User.AllowDeleteAction", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.User.AllowDisableAction\">": { - "properties": { - "alias": { - "const": "Umb.Condition.User.AllowDisableAction", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.User.AllowEnableAction\">": { - "properties": { - "alias": { - "const": "Umb.Condition.User.AllowEnableAction", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.User.AllowExternalLoginAction\">": { - "properties": { - "alias": { - "const": "Umb.Condition.User.AllowExternalLoginAction", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.User.AllowMfaAction\">": { - "properties": { - "alias": { - "const": "Umb.Condition.User.AllowMfaAction", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.User.AllowUnlockAction\">": { - "properties": { - "alias": { - "const": "Umb.Condition.User.AllowUnlockAction", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.UserPermission.Fallback\">": { - "properties": { - "alias": { - "const": "Umb.Condition.UserPermission.Fallback", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.UserPermission.Language\">": { - "properties": { - "alias": { - "const": "Umb.Condition.UserPermission.Language", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.WorkspaceContentTypeAlias\">": { - "properties": { - "alias": { - "const": "Umb.Condition.WorkspaceContentTypeAlias", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.WorkspaceContentTypeUnique\">": { - "properties": { - "alias": { - "const": "Umb.Condition.WorkspaceContentTypeUnique", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase<\"Umb.Condition.WorkspaceEntityType\">": { - "properties": { - "alias": { - "const": "Umb.Condition.WorkspaceEntityType", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbConditionConfigBase": { - "properties": { - "alias": { - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbContentWorkspaceIsLoadedConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.Workspace.ContentIsLoaded", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbCurrentUserGroupIdConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.CurrentUser.GroupId", - "type": "string" - }, - "allOf": { - "description": "The user groups that the current user must be a member of to pass the condition.", - "examples": "[['guid1', 'guid2']]", - "items": { - "type": "string" - }, - "type": "array" - }, - "match": { - "description": "The user group that the current user must be a member of to pass the condition.", - "examples": "['guid1']", - "type": "string" - }, - "noneOf": { - "description": "The user group(s) that the current user must not be a member of to pass the condition.", - "examples": "[['guid1', 'guid2']]", - "items": { - "type": "string" - }, - "type": "array" - }, - "oneOf": { - "description": "The user group(s) that the current user must be a member of to pass the condition.", - "examples": "[['guid1', 'guid2']]", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbEntityContentTypeUniqueConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.EntityContentType.Unique%22%3E" - }, - { - "properties": { - "match": { - "description": "Define the unique (GUID) of the entity content type for which this extension should be available.", - "type": "string" - }, - "oneOf": { - "description": "Define one or more unique (GUIDs) of entity content types for which this extension should be available.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - } - ] - }, - "UmbEntityTypeConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.Entity.Type%22%3E" - }, - { - "properties": { - "match": { - "type": "string" - }, - "oneOf": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "match" - ], - "type": "object" - } - ] - }, - "UmbEntityUnique": { - "type": [ - "null", - "string" - ] - }, - "UmbEntityUniqueConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.Entity.Unique%22%3E" - }, - { - "properties": { - "match": { - "type": [ - "null", - "string" - ] - }, - "oneOf": { - "items": { - "$ref": "#/definitions/UmbEntityUnique" - }, - "type": "array" - } - }, - "type": "object" - } - ] - }, - "UmbFallbackUserPermissionConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.UserPermission.Fallback%22%3E" - }, - { - "properties": { - "allOf": { - "description": "The user must have all of the permissions in this array for the condition to be met.", - "items": { - "type": "string" - }, - "type": "array" - }, - "oneOf": { - "description": "The user must have at least one of the permissions in this array for the condition to be met.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - } - ] - }, - "UmbInModalConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.InModal", - "type": "string" - }, - "match": { - "description": "The expected modal state to match.\n- `true`: Condition is permitted when inside a modal (default)\n- `false`: Condition is permitted when NOT inside a modal", - "type": "boolean" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbIsAdminConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.CurrentUser.IsAdmin", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbIsRoutableContextConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.IsRoutableContext", - "type": "string" - }, - "match": { - "description": "The expected routable context state to match.\n- `true`: Condition is permitted when inside a routable context (default)\n- `false`: Condition is permitted when NOT inside a routable context", - "type": "boolean" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbIsServerProductionModeConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.Server.IsProductionMode", - "type": "string" - }, - "match": { - "description": "If true (default), the condition is permitted when in Production mode.\nIf false, the condition is permitted when NOT in Production mode.", - "type": "boolean" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbLanguageUserPermissionConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.UserPermission.Language%22%3E" - }, - { - "properties": { - "allOf": { - "description": "The user must have all of the permissions in this array for the condition to be met.", - "items": { - "type": "string" - }, - "type": "array" - }, - "match": { - "type": "string" - }, - "oneOf": { - "description": "The user must have at least one of the permissions in this array for the condition to be met.", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "match" - ], - "type": "object" - } - ] - }, - "UmbLocalizationDictionary": { - "type": "object" - }, - "UmbPropertyHasValueConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.Property.HasValue", - "type": "string" - } - }, - "required": [ - "alias" - ], - "type": "object" - }, - "UmbSectionUserPermissionConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.SectionUserPermission%22%3E" - }, - { - "properties": { - "match": { - "type": "string" - } - }, - "required": [ - "match" - ], - "type": "object" - } - ] - }, - "UmbWorkspaceContentTypeAliasConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.WorkspaceContentTypeAlias%22%3E" - }, - { - "properties": { - "match": { - "description": "Define a content type alias in which workspace this extension should be available", - "type": "string" - }, - "oneOf": { - "description": "Define one or more content type aliases in which workspace this extension should be available", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - } - ] - }, - "UmbWorkspaceContentTypeUniqueConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.WorkspaceContentTypeUnique%22%3E" - }, - { - "properties": { - "match": { - "description": "Define a content type unique (GUID) in which workspace this extension should be available", - "type": "string" - }, - "oneOf": { - "description": "Define one or more content type unique (GUIDs) in which workspace this extension should be available", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - } - ] - }, - "UmbWorkspaceEntityIsNewConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.WorkspaceEntityIsNew", - "type": "string" - }, - "match": { - "type": "boolean" - } - }, - "required": [ - "alias", - "match" - ], + "(ManifestUfmFilter|ManifestUfmComponent|ManifestMarkedExtension|ManifestPropertyValueCloner|UmbPropertyEditorExtensions|ManifestPropertyValuePreset|ManifestPropertyValueResolver|ManifestEntityActionDuplicateToKind|ManifestEntityActionMoveToKind|ManifestEntityActionReloadTreeItemChildrenKind|ManifestEntityActionSortChildrenOfKind|UmbSectionExtensions|ManifestDashboard|ManifestWorkspaceDefaultKind|ManifestWorkspaceActionDefaultKind|ManifestWorkspaceFooterApp|ManifestWorkspaceFooterAppMenuBreadcrumbKind|ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind|ManifestWorkspaceViewContentTypeDesignEditorKind|ManifestWorkspaceView|ManifestWorkspaceRoutableKind|ManifestWorkspaceContext|ManifestTreeItem|ManifestTree|ManifestEntityActionCreateFolderKind|ManifestEntityActionDeleteFolderKind|ManifestEntityActionUpdateFolderKind|ManifestEntityCreateOptionActionFolderKind|ManifestMenu|ManifestMenuItem|ManifestMenuItemActionKind|ManifestMenuItemLinkKind|ManifestWorkspaceContextMenuStructureKind|ManifestMenuItemTreeKind|ManifestModal|ManifestCollectionAction|ManifestCollection|ManifestCollectionActionCreateKind|ManifestCollectionTextFilter|ManifestCollectionMenu|ManifestCollectionView|ManifestCollectionViewTableKind|ManifestWorkspaceViewCollectionKind|ManifestValueSummary|ManifestAuditLogActionDefaultKind|ManifestEntityActionContentRollbackKind|ManifestWorkspaceInfoAppAuditLogKind|ManifestWorkspaceViewContentCollectionKind|ManifestEntityActionSortChildrenOfContentKind|ManifestUserProfileApp|ManifestAuthProvider|ManifestIcons|ManifestEntityUserPermission|ManifestGranularUserPermission|ManifestLocalization|ManifestPickerSearchResultItem|ManifestCollectionMenuItem|ManifestPropertyEditorDataSource|ManifestEntityActionDeleteKind|ManifestEntityActionDefaultKind|ManifestEntityActionCreateKind|ManifestSearchProvider|ManifestSearchResultItem|ManifestGlobalSearch|ManifestAppEntryPoint|ManifestBackofficeEntryPoint|ManifestEntryPoint|UmbCoreManifestTypes|ManifestEntityItemRef|ManifestDataSourceDataMapping|ManifestPropertyContext|ManifestSectionContext|ManifestWorkspaceActionMenuItem|ManifestWorkspaceActionMenuItemDefaultKind|ManifestWorkspaceInfoApp|ManifestWorkspaceAction>|ManifestWorkspace|ManifestEntityCreateOptionAction|ManifestEntityCollectionItemCard|ManifestEntityCollectionItemRef|ManifestAuditLogAction|ManifestCurrentUserAction|ManifestPropertyValidationPathTranslator|ManifestEntityAction|ManifestEntityBulkActionDeleteKind|UmbEntityBulkActionExtensions|ManifestExternalLoginProvider|ManifestGlobalContext|ManifestHeaderApp|ManifestHeaderAppButtonKind|ManifestMfaLoginProvider|ManifestPreviewAppProvider|ManifestRepository|UmbStoreExtensions)[]": { "type": "object" }, - "UmbWorkspaceEntityTypeConditionConfig": { - "allOf": [ - { - "$ref": "#/definitions/UmbConditionConfigBase%3C%22Umb.Condition.WorkspaceEntityType%22%3E" - }, - { - "properties": { - "match": { - "description": "Define the workspace that this extension should be available in", - "type": "string" - } - }, - "required": [ - "match" - ], - "type": "object" - } - ] - }, "UmbracoPackageImportmap": { "properties": { "imports": { @@ -15109,29 +46,6 @@ "type": "string" }, "type": "object" - }, - "WorkspaceAliasConditionConfig": { - "properties": { - "alias": { - "const": "Umb.Condition.WorkspaceAlias", - "type": "string" - }, - "match": { - "description": "Define the workspace that this extension should be available in", - "type": "string" - }, - "oneOf": { - "description": "Define one or more workspaces that this extension should be available in", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "alias" - ], - "type": "object" } }, "description": "Umbraco package manifest JSON", @@ -15152,327 +66,8 @@ "type": "boolean" }, "extensions": { - "items": { - "anyOf": [ - { - "$ref": "#/definitions/ManifestBase" - }, - { - "$ref": "#/definitions/ManifestEntityActionDeleteKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionDefaultKind" - }, - { - "$ref": "#/definitions/ManifestUfmFilter" - }, - { - "$ref": "#/definitions/ManifestUfmComponent" - }, - { - "$ref": "#/definitions/ManifestMarkedExtension" - }, - { - "$ref": "#/definitions/ManifestPropertyValueCloner" - }, - { - "$ref": "#/definitions/ManifestPropertyEditorUi" - }, - { - "$ref": "#/definitions/ManifestPropertyEditorSchema" - }, - { - "$ref": "#/definitions/ManifestPropertyValuePreset" - }, - { - "$ref": "#/definitions/ManifestPropertyValueResolver" - }, - { - "$ref": "#/definitions/ManifestEntityActionDuplicateToKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionMoveToKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionReloadTreeItemChildrenKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionSortChildrenOfKind" - }, - { - "$ref": "#/definitions/ManifestSectionRoute" - }, - { - "$ref": "#/definitions/ManifestSectionSidebarApp" - }, - { - "$ref": "#/definitions/ManifestSectionView" - }, - { - "$ref": "#/definitions/ManifestSection" - }, - { - "$ref": "#/definitions/ManifestDashboard" - }, - { - "$ref": "#/definitions/ManifestWorkspaceDefaultKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceActionDefaultKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceFooterApp" - }, - { - "$ref": "#/definitions/ManifestWorkspaceFooterAppMenuBreadcrumbKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceFooterAppVariantMenuBreadcrumbKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceViewContentTypeDesignEditorKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceView%3CMetaWorkspaceView%3E" - }, - { - "$ref": "#/definitions/ManifestWorkspaceRoutableKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceContext" - }, - { - "$ref": "#/definitions/ManifestTreeItem" - }, - { - "$ref": "#/definitions/ManifestTree" - }, - { - "$ref": "#/definitions/ManifestEntityActionCreateFolderKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionDeleteFolderKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionUpdateFolderKind" - }, - { - "$ref": "#/definitions/ManifestEntityCreateOptionActionFolderKind" - }, - { - "$ref": "#/definitions/ManifestMenu" - }, - { - "$ref": "#/definitions/ManifestMenuItem" - }, - { - "$ref": "#/definitions/ManifestMenuItemActionKind" - }, - { - "$ref": "#/definitions/ManifestMenuItemLinkKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceContextMenuStructureKind" - }, - { - "$ref": "#/definitions/ManifestMenuItemTreeKind" - }, - { - "$ref": "#/definitions/ManifestModal" - }, - { - "$ref": "#/definitions/ManifestCollectionAction" - }, - { - "$ref": "#/definitions/ManifestCollection" - }, - { - "$ref": "#/definitions/ManifestCollectionActionCreateKind" - }, - { - "$ref": "#/definitions/ManifestCollectionTextFilter" - }, - { - "$ref": "#/definitions/ManifestCollectionMenu" - }, - { - "$ref": "#/definitions/ManifestCollectionView" - }, - { - "$ref": "#/definitions/ManifestCollectionViewTableKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceViewCollectionKind" - }, - { - "$ref": "#/definitions/ManifestValueSummary" - }, - { - "$ref": "#/definitions/ManifestAuditLogActionDefaultKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionContentRollbackKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceInfoAppAuditLogKind" - }, - { - "$ref": "#/definitions/ManifestWorkspaceViewContentCollectionKind" - }, - { - "$ref": "#/definitions/ManifestEntityActionSortChildrenOfContentKind" - }, - { - "$ref": "#/definitions/ManifestUserProfileApp" - }, - { - "$ref": "#/definitions/ManifestAuthProvider" - }, - { - "$ref": "#/definitions/ManifestIcons" - }, - { - "$ref": "#/definitions/ManifestEntityUserPermission" - }, - { - "$ref": "#/definitions/ManifestGranularUserPermission" - }, - { - "$ref": "#/definitions/ManifestLocalization" - }, - { - "$ref": "#/definitions/ManifestPickerSearchResultItem" - }, - { - "$ref": "#/definitions/ManifestCollectionMenuItem" - }, - { - "$ref": "#/definitions/ManifestPropertyEditorDataSource" - }, - { - "$ref": "#/definitions/ManifestEntityActionCreateKind" - }, - { - "$ref": "#/definitions/ManifestSearchProvider" - }, - { - "$ref": "#/definitions/ManifestSearchResultItem" - }, - { - "$ref": "#/definitions/ManifestGlobalSearch" - }, - { - "$ref": "#/definitions/ManifestCondition" - }, - { - "$ref": "#/definitions/ManifestAppEntryPoint" - }, - { - "$ref": "#/definitions/ManifestBackofficeEntryPoint" - }, - { - "$ref": "#/definitions/ManifestEntryPoint" - }, - { - "$ref": "#/definitions/ManifestBundle%3CUmbCoreManifestTypes%3E" - }, - { - "$ref": "#/definitions/ManifestEntityItemRef%3CMetaEntityItemRef%3E" - }, - { - "$ref": "#/definitions/ManifestDataSourceDataMapping%3CMetaDataSourceDataMapping%3E" - }, - { - "$ref": "#/definitions/ManifestEntityAction%3CMetaEntityAction%3E" - }, - { - "$ref": "#/definitions/ManifestPropertyContext%3CMetaPropertyContext%3E" - }, - { - "$ref": "#/definitions/ManifestSectionContext%3CMetaSectionContext%3E" - }, - { - "$ref": "#/definitions/ManifestWorkspaceActionMenuItem%3CMetaWorkspaceActionMenuItem%3E" - }, - { - "$ref": "#/definitions/ManifestWorkspaceActionMenuItemDefaultKind%3CMetaWorkspaceActionMenuItemDefaultKind%3E" - }, - { - "$ref": "#/definitions/ManifestWorkspaceInfoApp%3CMetaWorkspaceInfoApp%3E" - }, - { - "$ref": "#/definitions/ManifestWorkspaceAction%3CMetaWorkspaceAction%2CUmbWorkspaceAction%3CMetaWorkspaceAction%3E%3E" - }, - { - "$ref": "#/definitions/ManifestWorkspace%3CMetaWorkspace%2CUmbControllerHostElement%2CUmbWorkspaceContext%3E" - }, - { - "$ref": "#/definitions/ManifestEntityCreateOptionAction%3CMetaEntityCreateOptionAction%3E" - }, - { - "$ref": "#/definitions/ManifestEntityCollectionItemCard%3CMetaEntityCollectionItemCard%3E" - }, - { - "$ref": "#/definitions/ManifestEntityCollectionItemRef%3CMetaEntityCollectionItemRef%3E" - }, - { - "$ref": "#/definitions/ManifestAuditLogAction%3CMetaAuditLogAction%3E" - }, - { - "$ref": "#/definitions/ManifestCurrentUserAction%3CMetaCurrentUserAction%3E" - }, - { - "$ref": "#/definitions/ManifestPropertyValidationPathTranslator%3Cany%3E" - }, - { - "$ref": "#/definitions/ManifestEntityBulkActionDeleteKind" - }, - { - "$ref": "#/definitions/ManifestEntityBulkAction%3CMetaEntityBulkAction%3E" - }, - { - "$ref": "#/definitions/ManifestEntityBulkActionDefaultKind%3CMetaEntityBulkActionDefaultKind%3E" - }, - { - "$ref": "#/definitions/ManifestEntityBulkActionDuplicateToKind" - }, - { - "$ref": "#/definitions/ManifestEntityBulkActionMoveToKind" - }, - { - "$ref": "#/definitions/ManifestEntityBulkActionTrashKind" - }, - { - "$ref": "#/definitions/ManifestExternalLoginProvider" - }, - { - "$ref": "#/definitions/ManifestGlobalContext" - }, - { - "$ref": "#/definitions/ManifestHeaderApp" - }, - { - "$ref": "#/definitions/ManifestHeaderAppButtonKind" - }, - { - "$ref": "#/definitions/ManifestMfaLoginProvider" - }, - { - "$ref": "#/definitions/ManifestPreviewAppProvider" - }, - { - "$ref": "#/definitions/ManifestRepository%3CUmbApi%3E" - }, - { - "$ref": "#/definitions/ManifestStore" - }, - { - "$ref": "#/definitions/ManifestItemStore" - } - ] - }, - "title": "An array of Umbraco package manifest types that will be installed", - "type": "array" + "$ref": "#/definitions/(ManifestUfmFilter%7CManifestUfmComponent%7CManifestMarkedExtension%7CManifestPropertyValueCloner%7CUmbPropertyEditorExtensions%7CManifestPropertyValuePreset%7CManifestPropertyValueResolver%7CManifestEntityActionDuplicateToKind%7CManifestEntityActionMoveToKind%7CManifestEntityActionReloadTreeItemChildrenKind%7CManifestEntityActionSortChildrenOfKind%7CUmbSectionExtensions%7CManifestDashboard%7CManifestWorkspaceDefaultKind%7CManifestWorkspaceActionDefaultKind%7CManifestWorkspaceFooterApp%7CManifestWorkspaceFooterAppMenuBreadcrumbKind%7CManifestWorkspaceFooterAppVariantMenuBreadcrumbKind%7CManifestWorkspaceViewContentTypeDesignEditorKind%7CManifestWorkspaceView%3CMetaWorkspaceView%3E%7CManifestWorkspaceRoutableKind%7CManifestWorkspaceContext%7CManifestTreeItem%7CManifestTree%7CManifestEntityActionCreateFolderKind%7CManifestEntityActionDeleteFolderKind%7CManifestEntityActionUpdateFolderKind%7CManifestEntityCreateOptionActionFolderKind%7CManifestMenu%7CManifestMenuItem%7CManifestMenuItemActionKind%7CManifestMenuItemLinkKind%7CManifestWorkspaceContextMenuStructureKind%7CManifestMenuItemTreeKind%7CManifestModal%7CManifestCollectionAction%7CManifestCollection%7CManifestCollectionActionCreateKind%7CManifestCollectionTextFilter%7CManifestCollectionMenu%7CManifestCollectionView%7CManifestCollectionViewTableKind%7CManifestWorkspaceViewCollectionKind%7CManifestValueSummary%7CManifestAuditLogActionDefaultKind%7CManifestEntityActionContentRollbackKind%7CManifestWorkspaceInfoAppAuditLogKind%7CManifestWorkspaceViewContentCollectionKind%7CManifestEntityActionSortChildrenOfContentKind%7CManifestUserProfileApp%7CManifestAuthProvider%7CManifestIcons%7CManifestEntityUserPermission%7CManifestGranularUserPermission%7CManifestLocalization%7CManifestPickerSearchResultItem%7CManifestCollectionMenuItem%7CManifestPropertyEditorDataSource%7CManifestEntityActionDeleteKind%7CManifestEntityActionDefaultKind%7CManifestEntityActionCreateKind%7CManifestSearchProvider%7CManifestSearchResultItem%7CManifestGlobalSearch%7CManifestAppEntryPoint%7CManifestBackofficeEntryPoint%7CManifestEntryPoint%7CUmbCoreManifestTypes%7CManifestEntityItemRef%3CMetaEntityItemRef%3E%7CManifestDataSourceDataMapping%3CMetaDataSourceDataMapping%3E%7CManifestPropertyContext%3CMetaPropertyContext%3E%7CManifestSectionContext%3CMetaSectionContext%3E%7CManifestWorkspaceActionMenuItem%3CMetaWorkspaceActionMenuItem%3E%7CManifestWorkspaceActionMenuItemDefaultKind%3CMetaWorkspaceActionMenuItemDefaultKind%3E%7CManifestWorkspaceInfoApp%3CMetaWorkspaceInfoApp%3E%7CManifestWorkspaceAction%3CMetaWorkspaceAction%2CUmbWorkspaceAction%3CMetaWorkspaceAction%3E%3E%7CManifestWorkspace%3CMetaWorkspace%2CUmbControllerHostElement%2CUmbWorkspaceContext%3E%7CManifestEntityCreateOptionAction%3CMetaEntityCreateOptionAction%3E%7CManifestEntityCollectionItemCard%3CMetaEntityCollectionItemCard%3E%7CManifestEntityCollectionItemRef%3CMetaEntityCollectionItemRef%3E%7CManifestAuditLogAction%3CMetaAuditLogAction%3E%7CManifestCurrentUserAction%3CMetaCurrentUserAction%3E%7CManifestPropertyValidationPathTranslator%3Cany%3E%7CManifestEntityAction%3CMetaEntityAction%3E%7CManifestEntityBulkActionDeleteKind%7CUmbEntityBulkActionExtensions%7CManifestExternalLoginProvider%7CManifestGlobalContext%7CManifestHeaderApp%7CManifestHeaderAppButtonKind%7CManifestMfaLoginProvider%7CManifestPreviewAppProvider%7CManifestRepository%3CUmbApi%3E%7CUmbStoreExtensions)%5B%5D", + "title": "An array of Umbraco package manifest types that will be installed" }, "id": { "title": "The unique identifier of the Umbraco package", diff --git a/uSync/packages.lock.json b/uSync/packages.lock.json index 28da6151..d93d532f 100644 --- a/uSync/packages.lock.json +++ b/uSync/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "UMO41loUCLv6I9ABwCkHCOqrMAjg3OGH7nwGLGQNZ72SXWH8eXbSB4Q6kjMlazjgZWkM/GcBWLzmF5pxPxLcGw==", + "resolved": "18.0.0-rc1", + "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "61P1BVzGGI/HEvoiwfQln5sS2YvxhigIm5L6I5zACtASqbYKyp1XczEqBWjfTt17EZrMrmG/GLCLZktIugrf7g==", + "resolved": "18.0.0-rc1", + "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "IspvXGcv9nUwSZX2GTFjf0rtFVFXHreFjE6Wnq1iz2L8w6wM10MPtZx8ww+cTgGhyD3p/czRSqvqXoK69QkNuA==", + "resolved": "18.0.0-rc1", + "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "PRVT2N3iDsefWPATGRO1XkwIRDZTQtQpO7l+YaEd3Wl6lmhgJH1zqWv8EOxtaVi8OAAgGoLORwx+qZba1YHgww==", + "resolved": "18.0.0-rc1", + "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-beta2", - "contentHash": "b2jRMuMaqYsolkpLasQkQDclFCg7BBR5QFzhScIu6DLx2iZSlEfgV5yCGu5Feo4QiZCqovuNHCSMkZtTU5yr8w==", + "resolved": "18.0.0-rc1", + "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1431,20 +1431,20 @@ "type": "Project", "dependencies": { "uSync.Community.Contrib": "[12.0.0, )", - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.backoffice.management.api": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "uSync.BackOffice": "[17.0.0, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "uSync.BackOffice": "[18.0.0, )" } }, "usync.backoffice.management.client": { "type": "Project", "dependencies": { - "uSync.BackOffice": "[17.0.0, )" + "uSync.BackOffice": "[18.0.0, )" } }, "usync.backoffice.targets": { @@ -1453,21 +1453,21 @@ "usync.community.contrib": { "type": "Project", "dependencies": { - "uSync.Core": "[17.0.0, )" + "uSync.Core": "[18.0.0, )" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-beta2, )", - "Umbraco.Cms.Web.Website": "[18.0.0-beta1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "4jwkgzeDTety06E7HhVRX8eEFaILLDn0xcU72t2l99atdUmq+PHDoby6UmIzz4CuCyDcOYETCgSKn8VxdbL1zQ==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1518,17 +1518,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-beta2, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-beta2, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-beta2, )", - "resolved": "18.0.0-beta2", - "contentHash": "Qp9B8+Zq+sA2UVuQQ4k6QIVGmiadii5t1uwaiPng1SObLz9anaz6hdcDVX7ihctGBK1lxuGofSm9fk7OK3Uhfw==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1546,9 +1546,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-beta1", - "contentHash": "faAWkFprz+cdVXogERqlPQ5hZ39PG+r2L7thQBdeCwDIKDynSBs6SgFbszOp54zNO9dgU4QrUrwrTAKPr5j1tg==", + "requested": "[18.0.0-rc1, )", + "resolved": "18.0.0-rc1", + "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1595,7 +1595,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-beta1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", "ncrontab": "3.4.0" } } From 7ae9d602cd48d7e83a238586c2133daff4abd3fa Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Fri, 12 Jun 2026 12:03:58 +0100 Subject: [PATCH 6/7] 18.0.0-rc2 --- Directory.Packages.props | 10 +- uSync.AutoTemplates/packages.lock.json | 6 +- uSync.BackOffice/packages.lock.json | 66 +++---- .../packages.lock.json | 66 +++---- .../packages.lock.json | 66 +++---- uSync.Community.Contrib/packages.lock.json | 66 +++---- .../packages.lock.json | 66 +++---- uSync.Core/packages.lock.json | 62 +++--- uSync.Extend/packages.lock.json | 66 +++---- uSync.History/packages.lock.json | 68 +++---- uSync.SchemaGenerator/packages.lock.json | 66 +++---- uSync.Tests/packages.lock.json | 178 +++++++++--------- uSync/packages.lock.json | 68 +++---- 13 files changed, 427 insertions(+), 427 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 3f5e0340..db9b856c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -12,9 +12,9 @@ - - - + + + @@ -22,8 +22,8 @@ - - + + diff --git a/uSync.AutoTemplates/packages.lock.json b/uSync.AutoTemplates/packages.lock.json index b80b2cc6..6049d61b 100644 --- a/uSync.AutoTemplates/packages.lock.json +++ b/uSync.AutoTemplates/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "Umbraco.Cms.Core": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", diff --git a/uSync.BackOffice/packages.lock.json b/uSync.BackOffice/packages.lock.json index fb3c137d..8b0eab71 100644 --- a/uSync.BackOffice/packages.lock.json +++ b/uSync.BackOffice/packages.lock.json @@ -1237,8 +1237,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1273,15 +1273,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1320,14 +1320,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1364,14 +1364,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1411,15 +1411,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1451,8 +1451,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1465,15 +1465,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1524,17 +1524,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1552,9 +1552,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1601,7 +1601,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Backoffice.Management.Api/packages.lock.json b/uSync.Backoffice.Management.Api/packages.lock.json index 107b8ca3..45d7b139 100644 --- a/uSync.Backoffice.Management.Api/packages.lock.json +++ b/uSync.Backoffice.Management.Api/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "Umbraco.Cms.Api.Management": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -57,9 +57,9 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1269,8 +1269,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1305,15 +1305,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1352,14 +1352,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1396,14 +1396,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1443,15 +1443,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1483,8 +1483,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1504,15 +1504,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1530,9 +1530,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1579,7 +1579,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Backoffice.Management.Client/packages.lock.json b/uSync.Backoffice.Management.Client/packages.lock.json index e13d7db5..e1e80fc7 100644 --- a/uSync.Backoffice.Management.Client/packages.lock.json +++ b/uSync.Backoffice.Management.Client/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1443,15 +1443,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1502,17 +1502,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1530,9 +1530,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1579,7 +1579,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Community.Contrib/packages.lock.json b/uSync.Community.Contrib/packages.lock.json index 8c994854..de8cd445 100644 --- a/uSync.Community.Contrib/packages.lock.json +++ b/uSync.Community.Contrib/packages.lock.json @@ -1237,8 +1237,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1273,15 +1273,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1320,14 +1320,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1364,14 +1364,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1411,15 +1411,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1451,23 +1451,23 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1518,17 +1518,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1546,9 +1546,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1595,7 +1595,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Community.DataTypeSerializers/packages.lock.json b/uSync.Community.DataTypeSerializers/packages.lock.json index 0278a279..ab3712da 100644 --- a/uSync.Community.DataTypeSerializers/packages.lock.json +++ b/uSync.Community.DataTypeSerializers/packages.lock.json @@ -15,9 +15,9 @@ }, "Umbraco.Cms.Core": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -35,9 +35,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -84,7 +84,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1312,8 +1312,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1348,15 +1348,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1395,14 +1395,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1439,14 +1439,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1486,15 +1486,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1526,8 +1526,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1547,15 +1547,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1606,9 +1606,9 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Core/packages.lock.json b/uSync.Core/packages.lock.json index e67c37ab..fe7afce3 100644 --- a/uSync.Core/packages.lock.json +++ b/uSync.Core/packages.lock.json @@ -15,9 +15,9 @@ }, "Umbraco.Cms.Api.Management": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -68,17 +68,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Website": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -125,7 +125,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1353,8 +1353,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1389,15 +1389,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1436,14 +1436,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1480,14 +1480,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1527,15 +1527,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1567,16 +1567,16 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", diff --git a/uSync.Extend/packages.lock.json b/uSync.Extend/packages.lock.json index e13d7db5..e1e80fc7 100644 --- a/uSync.Extend/packages.lock.json +++ b/uSync.Extend/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1443,15 +1443,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1502,17 +1502,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1530,9 +1530,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1579,7 +1579,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.History/packages.lock.json b/uSync.History/packages.lock.json index c96aecb0..f74a3da1 100644 --- a/uSync.History/packages.lock.json +++ b/uSync.History/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1437,7 +1437,7 @@ "usync.backoffice.management.api": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", "uSync.BackOffice": "[18.0.0, )" } }, @@ -1450,15 +1450,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1509,17 +1509,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1537,9 +1537,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1586,7 +1586,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.SchemaGenerator/packages.lock.json b/uSync.SchemaGenerator/packages.lock.json index 13876c44..be543461 100644 --- a/uSync.SchemaGenerator/packages.lock.json +++ b/uSync.SchemaGenerator/packages.lock.json @@ -1235,8 +1235,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1271,15 +1271,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1318,14 +1318,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1362,14 +1362,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1409,15 +1409,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1449,8 +1449,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1470,15 +1470,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1529,17 +1529,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1557,9 +1557,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1606,7 +1606,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync.Tests/packages.lock.json b/uSync.Tests/packages.lock.json index 14a1b6dd..25f9a73e 100644 --- a/uSync.Tests/packages.lock.json +++ b/uSync.Tests/packages.lock.json @@ -31,9 +31,9 @@ }, "Umbraco.Cms.Tests": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "3Q2XMtr1VP931TZigVTxW7qxPftXvhr99OcAgtWOSC4J8HM8f6+WKfhb07V9T11zo53iYjpOBsp6/FTvbeDW4Q==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "kA0SlvdBDT+tCcr/jD68tMEaeR07OeqMFV4sfUHSls3Kdr5H7CovRdkQe+YcsH9ZR/xMxQ4jk5Y2xIcx/k126g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -95,15 +95,15 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Tests.Integration": { "type": "Direct", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "VAq7hjZIU5LTKXC/dgucJREiO3uvuAHW1f73tOcSVTY+AWjezNr2Qg0Mbvv5YTP54/Pj7hEJoYXeMgrhfzapGg==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "7IeNvpLUGnBLdIJMOoRQHjKf1OM61dO80qYgBmrreGxXlmkJUSTTaCmdtbofX1hQYqBmJBdxZ3f029+ebY+6nQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -171,12 +171,12 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.DevelopmentMode.Backoffice": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Tests": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.DevelopmentMode.Backoffice": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Tests": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1978,8 +1978,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2014,15 +2014,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Api.Delivery": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "7hGfG4Q1O0ucmPsO9IYHZVJMJIUuwk5NMsn1rU6F5kzZIC7VoX5KBv+cmIp3IqWkfZyGWB9VlYxppbjFgXcdwA==", + "resolved": "18.0.0-rc2", + "contentHash": "OrCR3RLHmwMy2U0FsgobybXH0GEakq2CHWpeShGn6UgBX3/vojnVvfPEifAultjIsTjov+waxbszZwPJsvO/qA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2072,15 +2072,15 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -2119,14 +2119,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Imaging.ImageSharp": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "5u6PcOo2+9qomKw5AGoTiiyui80oSu4j3lU3R7U1v8uXWfDeOr98WWRTkp8JHJBMMH5/XFmxS6LAOzjVbggIAw==", + "resolved": "18.0.0-rc2", + "contentHash": "rOJMhbd2OZNvzrK/s2YL3uY4x7UF23N+UwYco3pfsjPboNfXPvB1JT73X55DAWlpPb3iOVc59a4hErW+Mj4hFw==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2175,14 +2175,14 @@ "SixLabors.ImageSharp.Web": "3.2.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2219,14 +2219,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "sm9ltBDHJ+BRiUJLK/sBA4uEdmb/HR2YTAe01fkLVwFOSFQM9O6Rkjsu/J0XPP79P3l9EJQ0rrjXnbFv+g2wjg==", + "resolved": "18.0.0-rc2", + "contentHash": "fHPa4PJRhOtj4vAYjwkeMFZWieMme3t0Ij7frQVSnwBm7f8JM0C1+04ne99mMy+zV1c7rZSv58b5G5C39wotmw==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2266,15 +2266,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore.Sqlite": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "I/+b3ZA0QuTtvH3CNnRDviyP2y0kMISkvmr/vk64h0Dh8oJ3UPyBq9e4Lrh2kwZLZf/D+5aJhlHF/I6zT6Ld9Q==", + "resolved": "18.0.0-rc2", + "contentHash": "5yen2WH9DE0WhfxL9PSW/NuAmpVE5VQGDPxCZgvs6KvnHLnlJpvDxioE3iQZ4B5dtVpyW6QHSGZc4eUqJf3XyA==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2314,14 +2314,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.EFCore.SqlServer": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "ZwE5KdER0bOK+/7Zm/29f3XnkO4ZDh+TpYSLUcM7uAfcxq2WJ+HCR61jetjxIUasRYDeo1JFGabyQRR1ffxRgg==", + "resolved": "18.0.0-rc2", + "contentHash": "h7Kp5fsspPOlkawUzmsv2dWODBmhRHRYQjD0t/oltUmvAf/cTQWy1Z+iqlUcBd5qmM8+jYQe5blR+5IuD5O1nw==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2361,14 +2361,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.Sqlite": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "rKcEDHbqUvdPDx2PUQjCRxwEHVvrAMILeL1cP7PLZZd6ycxMdxXYKjeclKK5hSJHqIZnBtSBQxzaL6cqucjnvQ==", + "resolved": "18.0.0-rc2", + "contentHash": "eYrNn2Co1mFX411oa0Gf93H+NKHQQga3Y4xbH+vv839U0kO0nWjJS+OAcUvfOmvubE5/8Yy1dAI+t76QMh8D+w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2406,14 +2406,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Persistence.SqlServer": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "zU6+VSRf0+jpXWf6SVox3og+oF2sn3AoLmN6C//JjGIGv7A0KcScTVK7Y1vRmQPKowAJWeshk5yhHTyy/CXwWA==", + "resolved": "18.0.0-rc2", + "contentHash": "Yn3k50mSQ9Rn21rUZ5ed+LEPYed1+BR+YJCLD14035hnsfzxmMQL/wx7nGyGH7PvOS6EjOgA4p5YaAt70h8D9w==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2451,14 +2451,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -2498,15 +2498,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.StaticAssets": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "UpEgSfdVdJLYjz3s+RiUWpgSsi5kqmSQGapFzaWjKrM7ZS3kTysySCE4BkZMaRhYRlrlNDRAVvaQWe/uNDLp0g==", + "resolved": "18.0.0-rc2", + "contentHash": "VJ96eoW++lI0HU1oZX0LYJUmyDA4KfOavbAbK7fg6IW/csV+KesSUIw4HoNNk0zYGom06AIo6EC7xFobtV8xIA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2542,15 +2542,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Targets": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "Y/kqdu9To+KMnGmGkmpDs9RFUsqMufmphOlbJZhlxdl1rp4oeemsvq4FmXItw7AuSfRJJZzqYw/Xv+/iOIX1Cw==", + "resolved": "18.0.0-rc2", + "contentHash": "Wy+F4ryIxsu2jrGMniiBdh+jNmtkStcffv8/xVDR3liNrGmFdnHVuEzIqyoHMHH7y+1lXfMZ2P3CTt8mbvn4yQ==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2601,16 +2601,16 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Delivery": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.StaticAssets": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Delivery": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.StaticAssets": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2642,8 +2642,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -2663,15 +2663,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms": { "type": "CentralTransitive", "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ab3gB4RPeFO9Kap3nA/lpci2WsME11uYp8ulf6qAD10SIC1BAAZWmy060fCmXtrySu1Xd01QQxFAVcF5TwsolA==", + "resolved": "18.0.0-rc2", + "contentHash": "tz3hzoSwT2ER6sqJOgs2zKsFOHfwW8KKa8sXmYD1RkKyb+zmnN+EGznWV3TcW12GSJAgyC6hTWKMUYUAWz/b2g==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2729,20 +2729,20 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Imaging.ImageSharp": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore.SqlServer": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Persistence.EFCore.Sqlite": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Persistence.SqlServer": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Persistence.Sqlite": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Targets": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Imaging.ImageSharp": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore.SqlServer": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Persistence.EFCore.Sqlite": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Persistence.SqlServer": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Persistence.Sqlite": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Targets": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2793,17 +2793,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -2822,8 +2822,8 @@ "Umbraco.Cms.DevelopmentMode.Backoffice": { "type": "CentralTransitive", "requested": "[18.0.0-beta1, )", - "resolved": "18.0.0-rc1", - "contentHash": "oeEb2b8kO16cgb0dfhJEkw9dPpD0z27YUz+mB9Bz6M4qblkR7G1csmKlgpZELkTUtJxOx7W6tMDDOpTHF0jnzg==", + "resolved": "18.0.0-rc2", + "contentHash": "4qf7uJXoTxGBRqjhfqu/vJZlOXBR46sxXCAs4o9vp56p2OpOUoF6kGmGXi3DQ/m1qjqp2sMmeCCqhDK8fq3jZg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2872,15 +2872,15 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -2927,7 +2927,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } diff --git a/uSync/packages.lock.json b/uSync/packages.lock.json index d93d532f..ed34cc46 100644 --- a/uSync/packages.lock.json +++ b/uSync/packages.lock.json @@ -1208,8 +1208,8 @@ }, "Umbraco.Cms.Api.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "D0EsmMwyzii0mJP1d5c0360+qTEjQck4ifx7asyepTqtHPiN8LURzD7/BYc4z/1ck6tNEAquWXEFCN0HPKyylw==", + "resolved": "18.0.0-rc2", + "contentHash": "FCi4dqGdW8xkGV4UDvXXWMOkIY6RWb74tnCaMXx49g+tLtoksNszxeHVp/fs3brqsUszW69LFKkMEnTvhhXP3Q==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1244,15 +1244,15 @@ "Serilog.Sinks.Map": "2.0.0", "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "IWdGRK/nVju/clbMHao9PF+pEfdVDhCGGQPwP+kcD+faUKej2MqZklJ6SA8B0OEfuISFCu1hf9T5APVfAtsrnA==", + "resolved": "18.0.0-rc2", + "contentHash": "cZZ35rLN/TbbwtHyr+LUv0HiK9PK5qfrno95+WMJXmeAfVD1M99y4A9LUguDc/V6lVViJhLcDMl8II+mxcNXnA==", "dependencies": { "Examine": "3.7.1", "Examine.Core": "3.7.1", @@ -1291,14 +1291,14 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "1MdBVLHBOPB+f9112fC+QOiRWldHbbWTCePx/TFq5qr/hs0KQ9jjYrMxySesMemJGQ7pTI5P1c40XazUpEG+5w==", + "resolved": "18.0.0-rc2", + "contentHash": "TdGE9QJKZUnmGoB2xTN/RCgTTV/iFiWAv8TfVuyDORsyHSc2fS0Pdej1X0xC4YShfgCemlBSTpNnMj1n8LpO0Q==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1335,14 +1335,14 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.PublishedCache.HybridCache": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "VMFHAnGpztzSdrQHRi1UCam5s6Ebw7eY4kMp9tlAzpKCxk+mVyJSOq325Sjh69Wf7w0jNUPIAF7TZzEOut+vpg==", + "resolved": "18.0.0-rc2", + "contentHash": "ebLr4fQYoCOJ+tDGM9jN3hAJ+WaAQXcJ2iQPwmgZPBGaGWiOc6v3X3wyL8Ia5FVyAqGqKwdMTQ6sLsZk1+IBmQ==", "dependencies": { "Examine.Core": "3.7.1", "HtmlAgilityPack": "1.12.4", @@ -1382,15 +1382,15 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Core": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Core": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Web.Common": { "type": "Transitive", - "resolved": "18.0.0-rc1", - "contentHash": "RhYaCexksmhjedMSL9+s5k95f6NyXEjAdlcv33PT/a17tZ60jAml8Yrzfy6wXfUFStH0Y8be4BoF1mwCGdQp6w==", + "resolved": "18.0.0-rc2", + "contentHash": "5Jnu1jp4hFmGYx1NaRiWVKYEZvyJLZ3m5zTwjUAUd/MTvHaGPxd/aO+rKmseq4FVjvIbd6ilu2vttkAoChUwKA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1422,8 +1422,8 @@ "Serilog.Sinks.File": "7.0.0", "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", - "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Examine.Lucene": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, @@ -1437,7 +1437,7 @@ "usync.backoffice.management.api": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", "uSync.BackOffice": "[18.0.0, )" } }, @@ -1459,15 +1459,15 @@ "usync.core": { "type": "Project", "dependencies": { - "Umbraco.Cms.Api.Management": "[18.0.0-rc1, )", - "Umbraco.Cms.Web.Website": "[18.0.0-rc1, )" + "Umbraco.Cms.Api.Management": "[18.0.0-rc2, )", + "Umbraco.Cms.Web.Website": "[18.0.0-rc2, )" } }, "Umbraco.Cms.Api.Management": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "ld6uuL+6XQjTjgiIJDYOKm6tWpXyQdRnvQJs0xt74M5pJmuA0VrEOS281KKg68bGxw77Msl5rfMeL1yKfJY/dQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "8F/ZRhAX6Z8jYU+lms47tkkdnuWIYqCA4jnU2uJTAvKPXsvFa1Lb9NXtxgCdeX8p+CYgSfBfg4/aSieg+BhyTg==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1518,17 +1518,17 @@ "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Api.Common": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.Infrastructure": "[18.0.0-rc1, 19.0.0)", - "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Api.Common": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.Infrastructure": "[18.0.0-rc2, 19.0.0)", + "Umbraco.Cms.PublishedCache.HybridCache": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } }, "Umbraco.Cms.Core": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "EfZ1tfmx/wMCdzDnJ+HY0rdnwvJV/kUbld4gE7sCaQ70uMXFoTSRJA99MHIs6+TxLEabF0tG+u/0wsMlNA56cQ==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "aJU2hB4I3eJSNPCzx7HbnF9+GuHFSUINo4qlXuywE1Tk/1ctfTvCYqewGbPU3uJEgSAvOm6OD/j94zTlg9b1OA==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "10.0.7", "Microsoft.Extensions.Caching.Memory": "10.0.7", @@ -1546,9 +1546,9 @@ }, "Umbraco.Cms.Web.Website": { "type": "CentralTransitive", - "requested": "[18.0.0-rc1, )", - "resolved": "18.0.0-rc1", - "contentHash": "AfM3ZUwn1YUaznHBdDsLJdhWK2jAjYBZ3wpKe3oSoqeOPCI2eWrluKTUFE6Gs9NIZnDusJOt2scMBBLsaKcn/g==", + "requested": "[18.0.0-rc2, )", + "resolved": "18.0.0-rc2", + "contentHash": "dnTxHJ0Y8IdB2ADCH6zH0avnpdKuwIVv6Vtdmz4sirePiP+mizvsIVEgjv00bWRGXQ0zLg2El4a2Dwfr6V/5DA==", "dependencies": { "Asp.Versioning.Mvc": "10.0.0", "Asp.Versioning.Mvc.ApiExplorer": "10.0.0", @@ -1595,7 +1595,7 @@ "Serilog.Sinks.Map": "2.0.0", "System.Linq.Async": "7.0.1", "System.Security.Cryptography.Xml": "10.0.7", - "Umbraco.Cms.Web.Common": "[18.0.0-rc1, 19.0.0)", + "Umbraco.Cms.Web.Common": "[18.0.0-rc2, 19.0.0)", "ncrontab": "3.4.0" } } From c6404a111b2f6539d7f415e7eb7d195da720700a Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Fri, 12 Jun 2026 12:12:37 +0100 Subject: [PATCH 7/7] V17/merge 18 (#967) * V17/image upload mapper (#959) * update packages * Split image upload and Image cropper mappers (to handle uploads in media slightly diffrently) * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * add missing xml comments * add debug , so we can see which mapper we hit. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * check on loading if the backoffice is there, if it's not we don't register anything for uSync. (only works on backoffice servers) (#962) * V17/block encoding (#963) * revert the encoding of blocks from #955 - because that breaks rendering as per #958 * Add Null checks to health check (cause it can load without the services). * v17.3.4 - package files. * Fix https://github.com/Jumoo/uSync.Complete.Issues/issues/297 - write clean files even when folder has no children (so last items get deleted) (#964) * update obsolete call to pagedChildren on content handler. (#965) --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- uSync.AutoTemplates/AutoTemplateComposer.cs | 8 +- .../Extensions/uSyncActionExtensions.cs | 4 +- .../HealthChecks/SyncFolderIntegrityChecks.cs | 18 +- .../Services/ISyncVersionFileService.cs | 12 ++ .../Services/SyncVersionFileService.cs | 14 ++ .../SyncHandlers/SyncHandlerRoot.cs | 5 +- uSync.BackOffice/uSyncBackOffice.cs | 3 + uSync.BackOffice/uSyncBackOfficeComposer.cs | 18 +- .../ApiComposer.cs | 5 +- .../uSyncManifestReader.cs | 9 +- .../Extensions/SyncBuilderExtensions.cs | 9 + uSync.Core/Mapping/Mappers/ImagePathMapper.cs | 150 +--------------- .../Mapping/Mappers/ImagePathMapperBase.cs | 163 ++++++++++++++++++ .../Mapping/Mappers/ImageUploadMapper.cs | 51 ++++++ uSync.Core/Mapping/SyncBlockMapperBase.cs | 14 +- uSync.History/uSyncHistoryComposer.cs | 5 + 16 files changed, 319 insertions(+), 169 deletions(-) create mode 100644 uSync.Core/Extensions/SyncBuilderExtensions.cs create mode 100644 uSync.Core/Mapping/Mappers/ImagePathMapperBase.cs create mode 100644 uSync.Core/Mapping/Mappers/ImageUploadMapper.cs diff --git a/uSync.AutoTemplates/AutoTemplateComposer.cs b/uSync.AutoTemplates/AutoTemplateComposer.cs index c056436f..1b36d052 100644 --- a/uSync.AutoTemplates/AutoTemplateComposer.cs +++ b/uSync.AutoTemplates/AutoTemplateComposer.cs @@ -1,4 +1,6 @@ -using Umbraco.Cms.Core.Composing; +using System.Linq; + +using Umbraco.Cms.Core.Composing; using Umbraco.Cms.Core.DependencyInjection; namespace uSync.AutoTemplates; @@ -7,6 +9,8 @@ public class AutoTemplateComposer : IComposer { public void Compose(IUmbracoBuilder builder) { - builder.AdduSyncAutoTemplates(); + // only load when the backoffice is enabled. + if (builder.Services.Any(s => s.ServiceType == typeof(IBackOfficeEnabledMarker))) + builder.AdduSyncAutoTemplates(); } } diff --git a/uSync.BackOffice/Extensions/uSyncActionExtensions.cs b/uSync.BackOffice/Extensions/uSyncActionExtensions.cs index 923eafb1..e9cf8146 100644 --- a/uSync.BackOffice/Extensions/uSyncActionExtensions.cs +++ b/uSync.BackOffice/Extensions/uSyncActionExtensions.cs @@ -137,7 +137,9 @@ public static void UpdateActions(this List actions, Guid k public static bool RequiresSave(this SyncAttempt attempt) => attempt.Success && attempt.Change > Core.ChangeType.NoChange && !attempt.Saved && attempt.Item != null; - + /// + /// return the uSyncAction as an ActionView (used in the controllers) + /// public static uSyncActionView AsActionView(this uSyncAction action) { var msg = string.IsNullOrWhiteSpace(action.Message) is false diff --git a/uSync.BackOffice/HealthChecks/SyncFolderIntegrityChecks.cs b/uSync.BackOffice/HealthChecks/SyncFolderIntegrityChecks.cs index 926db7bd..866e292b 100644 --- a/uSync.BackOffice/HealthChecks/SyncFolderIntegrityChecks.cs +++ b/uSync.BackOffice/HealthChecks/SyncFolderIntegrityChecks.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading.Tasks; using System.Xml.Linq; @@ -20,8 +21,10 @@ namespace uSync.BackOffice.HealthChecks; Group = "uSync")] public class SyncFolderIntegrityChecks : HealthCheck { - private readonly ISyncConfigService _configService; - private readonly ISyncFileService _fileService; + private readonly ISyncConfigService? _configService; + private readonly ISyncFileService? _fileService; + + public SyncFolderIntegrityChecks() { } /// /// Constructor @@ -41,6 +44,9 @@ public override HealthCheckStatus ExecuteAction(HealthCheckAction action) /// public override Task> GetStatusAsync() { + if (_configService is null || _fileService is null) + return Task.FromResult(Enumerable.Empty()); + var items = new List { CheckuSyncFolder(), @@ -52,6 +58,9 @@ public override Task> GetStatusAsync() private HealthCheckStatus CheckuSyncFolder() { + if (_configService is null || _fileService is null) + return new HealthCheckStatus("Unable to check uSync folder integrity"); + var root = _fileService.GetAbsPath(_configService.GetWorkingFolder()); if (_fileService.DirectoryExists(root) is false) @@ -85,6 +94,8 @@ private HealthCheckStatus CheckuSyncFolder() private List CheckFolder(string folder) { + if (_fileService is null) return []; + var _keys = new Dictionary(); var clashes = new List(); @@ -128,6 +139,9 @@ private List CheckFolder(string folder) private HealthCheckStatus CheckConfigFolderValidity() { + if (_configService is null || _fileService is null) + return new HealthCheckStatus("Unable to check uSync folder integrity"); + var root = _fileService.GetAbsPath(_configService.GetWorkingFolder()); if (_fileService.DirectoryExists(root) is false) diff --git a/uSync.BackOffice/Services/ISyncVersionFileService.cs b/uSync.BackOffice/Services/ISyncVersionFileService.cs index b3355932..90152666 100644 --- a/uSync.BackOffice/Services/ISyncVersionFileService.cs +++ b/uSync.BackOffice/Services/ISyncVersionFileService.cs @@ -2,8 +2,20 @@ namespace uSync.BackOffice.Services; +/// +/// Controls the version file we write to disk on syncs (used to warn if sync is old) +/// public interface ISyncVersionFileService { + /// + /// get the Sync file version information for a folder. + /// Task GetSyncFileInfo(string folder); + + /// + /// write the version information to disk. + /// + /// + /// Task WriteVersionFileAsync(string folder); } \ No newline at end of file diff --git a/uSync.BackOffice/Services/SyncVersionFileService.cs b/uSync.BackOffice/Services/SyncVersionFileService.cs index af146b8e..fee5c640 100644 --- a/uSync.BackOffice/Services/SyncVersionFileService.cs +++ b/uSync.BackOffice/Services/SyncVersionFileService.cs @@ -119,9 +119,23 @@ private bool HmacValuesMatch(XElement node) } } +/// +/// results of a check of the version file +/// public class SyncFileVersionCheckResult { + /// + /// the sync on disk is current to the current format we are writing. + /// public bool IsCurrent { get; set; } + + /// + /// the version we are writing to disk + /// public string? FormatVersion { get; set; } + + /// + /// the hmac value for the folders matches. (reserved) + /// public bool HmacMatch { get; set; } } diff --git a/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs b/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs index 0acd656b..b734ebab 100644 --- a/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs +++ b/uSync.BackOffice/SyncHandlers/SyncHandlerRoot.cs @@ -1005,10 +1005,9 @@ protected virtual async Task> Export_DoExportAsync(TObject await syncFileService.SaveXElementAsync(attempt.Item, filename); } - if (config.CreateClean && await HasChildrenAsync(item)) - { + if (config.CreateClean) await CreateCleanFileAsync(GetItemKey(item), filename); - } + } else { diff --git a/uSync.BackOffice/uSyncBackOffice.cs b/uSync.BackOffice/uSyncBackOffice.cs index 2ac79b1f..8f9f519e 100644 --- a/uSync.BackOffice/uSyncBackOffice.cs +++ b/uSync.BackOffice/uSyncBackOffice.cs @@ -7,6 +7,9 @@ namespace uSync.BackOffice; /// public class uSync { + /// + /// assembly version for uSync + /// public static Version Version => typeof(uSync).Assembly.GetName().Version ?? new Version(15, 0, 0); /// diff --git a/uSync.BackOffice/uSyncBackOfficeComposer.cs b/uSync.BackOffice/uSyncBackOfficeComposer.cs index f661170d..71512ef9 100644 --- a/uSync.BackOffice/uSyncBackOfficeComposer.cs +++ b/uSync.BackOffice/uSyncBackOfficeComposer.cs @@ -1,7 +1,13 @@  +using Microsoft.Extensions.Logging; + +using System.Linq; + using Umbraco.Cms.Core.Composing; using Umbraco.Cms.Core.DependencyInjection; +using uSync.Core.Extensions; + namespace uSync.BackOffice; /// @@ -12,10 +18,12 @@ public class uSyncBackOfficeComposer : IComposer /// public void Compose(IUmbracoBuilder builder) { - // the composers add uSync, but the extension methods - // will only add the values if uSync hasn't already - // been added, so you can for example add uSync to your - // startup.cs file. and then the composers don't fire - builder.AdduSync(); + if (builder.IsUmbracoBackOfficeEnabled() is true) { + // the composers add uSync, but the extension methods + // will only add the values if uSync hasn't already + // been added, so you can for example add uSync to your + // startup.cs file. and then the composers don't fire + builder.AdduSync(); + } } } diff --git a/uSync.Backoffice.Management.Api/ApiComposer.cs b/uSync.Backoffice.Management.Api/ApiComposer.cs index dccf297a..bfce92e7 100644 --- a/uSync.Backoffice.Management.Api/ApiComposer.cs +++ b/uSync.Backoffice.Management.Api/ApiComposer.cs @@ -7,6 +7,7 @@ using uSync.Backoffice.Management.Api.Configuration; using uSync.Backoffice.Management.Api.Services; using uSync.BackOffice; +using uSync.Core.Extensions; namespace uSync.Backoffice.Management.Api; @@ -15,10 +16,10 @@ public class ApiComposer : IComposer { public void Compose(IUmbracoBuilder builder) { - // builder.Services.AddSingleton(); + if (builder.IsUmbracoBackOfficeEnabled() is false) + return; builder.AddSyncOpenApi(); - builder.Services.AddSingleton(); builder.Services.AddSingleton(); } diff --git a/uSync.Backoffice.Management.Client/uSyncManifestReader.cs b/uSync.Backoffice.Management.Client/uSyncManifestReader.cs index 2a664bb6..b72b385c 100644 --- a/uSync.Backoffice.Management.Client/uSyncManifestReader.cs +++ b/uSync.Backoffice.Management.Client/uSyncManifestReader.cs @@ -10,6 +10,7 @@ using uSync.BackOffice.Configuration; using uSync.BackOffice.Extensions; +using uSync.Core.Extensions; namespace uSync.Backoffice.Management.Client; @@ -18,8 +19,12 @@ public class uSyncManifestComposer : IComposer { public void Compose(IUmbracoBuilder builder) { - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); + if (builder.IsUmbracoBackOfficeEnabled()) + { + // only load this when the backoffice is enabled. + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + } } } diff --git a/uSync.Core/Extensions/SyncBuilderExtensions.cs b/uSync.Core/Extensions/SyncBuilderExtensions.cs new file mode 100644 index 00000000..4ac0d055 --- /dev/null +++ b/uSync.Core/Extensions/SyncBuilderExtensions.cs @@ -0,0 +1,9 @@ +using Umbraco.Cms.Core.DependencyInjection; + +namespace uSync.Core.Extensions; + +public static class SyncBuilderExtensions +{ + public static bool IsUmbracoBackOfficeEnabled(this IUmbracoBuilder builder) + => builder.Services.Any(s => s.ServiceType == typeof(IBackOfficeEnabledMarker)); +} diff --git a/uSync.Core/Mapping/Mappers/ImagePathMapper.cs b/uSync.Core/Mapping/Mappers/ImagePathMapper.cs index 807fd9c7..a8730d28 100644 --- a/uSync.Core/Mapping/Mappers/ImagePathMapper.cs +++ b/uSync.Core/Mapping/Mappers/ImagePathMapper.cs @@ -2,8 +2,6 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using System.Text.RegularExpressions; - using Umbraco.Cms.Core; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Media; @@ -11,7 +9,6 @@ using Umbraco.Cms.Core.Services; using Umbraco.Extensions; -using uSync.Core.Dependency; using uSync.Core.Extensions; using uSync.Core.Serialization; @@ -28,49 +25,33 @@ namespace uSync.Core.Mapping; /// becomes /// {"src":"/media/2cud1lzo/15656993711_ccd199b83e_k.jpg","crops":null} /// -public class ImagePathMapper : SyncValueMapperBase, ISyncMapper +public class ImagePathMapper : ImagePathMapperBase, ISyncMapper { - private const string _genericMediaPath = "/media"; - - private readonly string _siteRoot; - private string? _mediaFolder; - private readonly ILogger _logger; - private readonly IConfiguration _configuration; private readonly IImageUrlGenerator _imageUrlGenerator; public ImagePathMapper( - IConfiguration configuration, - IOptionsMonitor _globalOptions, IEntityService entityService, ILogger logger, - IImageUrlGenerator imageUrlGenerator) : base(entityService) + IConfiguration configuration, + IOptionsMonitor globalOptions, + IImageUrlGenerator imageUrlGenerator) : base(entityService, logger, configuration, globalOptions) { - _logger = logger; - _configuration = configuration; - - // todo: site root might need us to include extra NuGet. - _siteRoot = ""; - - _mediaFolder = GetMediaFolderSetting(_globalOptions.CurrentValue.UmbracoMediaPath.TrimStart('~')); - _globalOptions.OnChange(x => _mediaFolder = GetMediaFolderSetting(x.UmbracoMediaPath.TrimStart('~'))); - - if (logger.IsEnabled(LogLevel.Debug)) - logger.LogDebug("Media Folders: [{media}]", _mediaFolder ?? "(Blank)"); - _imageUrlGenerator = imageUrlGenerator; } public override string Name => "ImageCropper Mapper"; public override string[] Editors => [ - Constants.PropertyEditors.Aliases.ImageCropper, - Constants.PropertyEditors.Aliases.UploadField + Constants.PropertyEditors.Aliases.ImageCropper ]; public override Task GetExportValueAsync(object value, string editorAlias) { return uSyncTaskHelper.FromResultOf(() => { + if (_logger.IsEnabled(LogLevel.Debug)) + _logger.LogDebug("Getting export value for ImageCropper with value {Value}", value); + var stringValue = value?.ToString(); if (string.IsNullOrWhiteSpace(stringValue)) return stringValue; @@ -107,76 +88,6 @@ public ImagePathMapper( }); } - private string StripSitePath(string filePath) - { - var path = filePath; - if (_siteRoot.Length > 0 && !string.IsNullOrWhiteSpace(filePath) && filePath.InvariantStartsWith(_siteRoot)) - path = filePath.Substring(_siteRoot.Length); - - return ReplacePath(path, _mediaFolder, _genericMediaPath); - } - - private string PrePendSitePath(string filePath) - { - var path = filePath; - if (_siteRoot.Length > 0 && !string.IsNullOrEmpty(filePath)) - path = $"{_siteRoot}{filePath}"; - - return ReplacePath(path, _genericMediaPath, _mediaFolder); - } - - - /// - /// makes a specific media path generic. - /// - /// - /// sometimes paths may be defined by umbraco settings, (especially blob settings) - /// that mean they are not stored as /media - /// - /// for the sake of generic importing we want the folder stored to be /media. - /// so we re-write the setting on import and export - /// - /// assumes you have a app setting in the web.config - /// - /// /someFolder - /// - /// - /// - private static string ReplacePath(string filePath, string? currentPath, string? targetPath) - { - if (!string.IsNullOrWhiteSpace(targetPath) - && !string.IsNullOrWhiteSpace(currentPath) - && !currentPath.Equals(targetPath)) - { - return Regex.Replace(filePath, $"^{currentPath}", targetPath, RegexOptions.IgnoreCase); - } - - return filePath; - } - - /// - /// Get the media rewrite folder - /// - /// - /// looks in appSettings for uSync:mediaFolder - /// - /// - /// - /// or in uSync8.config for media setting - /// - /// - /// - /// /someFolder - /// - /// - /// - private string GetMediaFolderSetting(string umbracoMediaPath) - { - var folder = this._configuration.GetValue("uSync:MediaFolder", string.Empty); - if (!string.IsNullOrEmpty(folder)) return folder; - - return umbracoMediaPath; - } public override Task GetImportValueAsync(string value, string editorAlias, SyncSerializerOptions options) { @@ -202,49 +113,4 @@ private string GetMediaFolderSetting(string umbracoMediaPath) return json.SerializeJsonNode(true); }); } - - /// - /// Get the actual media file as a dependency. - /// - public override Task> GetDependenciesAsync(object value, string editorAlias, DependencyFlags flags) - { - return uSyncTaskHelper.FromResultOf>(() => - { - - var stringValue = value?.ToString(); - if (string.IsNullOrWhiteSpace(stringValue)) - return []; - - var stringPath = GetImagePath(stringValue).TrimStart('/').ToLower(); - - if (!string.IsNullOrWhiteSpace(stringPath)) - { - return [new uSyncDependency() - { - Name = $"File: {Path.GetFileName(stringPath)}", - Udi = Udi.Create(Constants.UdiEntityType.MediaFile, stringPath), - Flags = flags, - Order = DependencyOrders.OrderFromEntityType(Constants.UdiEntityType.MediaFile), - Level = 0 - }]; - } - - return []; - }); - } - - private string GetImagePath(string stringValue) - { - if (stringValue.TryParseToJsonObject(out var json) is false || json is null) - return StripSitePath(stringValue); - - - if (json.TryGetPropertyValue("src", out var srcNode) is true) - { - var source = srcNode?.GetValue() ?? string.Empty; - if (string.IsNullOrWhiteSpace(source) is false) return source; - } - - return string.Empty; - } } diff --git a/uSync.Core/Mapping/Mappers/ImagePathMapperBase.cs b/uSync.Core/Mapping/Mappers/ImagePathMapperBase.cs new file mode 100644 index 00000000..b60b5579 --- /dev/null +++ b/uSync.Core/Mapping/Mappers/ImagePathMapperBase.cs @@ -0,0 +1,163 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +using System.Text.RegularExpressions; + +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Services; +using Umbraco.Extensions; + +using uSync.Core.Dependency; +using uSync.Core.Extensions; + +namespace uSync.Core.Mapping; + +public abstract class ImagePathMapperBase : SyncValueMapperBase +{ + private readonly IConfiguration _configuration; + protected readonly ILogger _logger; + + private const string _genericMediaPath = "/media"; + private readonly string _siteRoot; + private string? _mediaFolder; + + public ImagePathMapperBase( + IEntityService entityService, + ILogger logger, + IConfiguration configuration, + IOptionsMonitor globalOptions + ) : base(entityService) + { + _configuration = configuration; + _logger = logger; + + // todo: site root might need us to include extra NuGet. + _siteRoot = ""; + + _mediaFolder = GetMediaFolderSetting(globalOptions.CurrentValue.UmbracoMediaPath.TrimStart('~')); + globalOptions.OnChange(x => _mediaFolder = GetMediaFolderSetting(x.UmbracoMediaPath.TrimStart('~'))); + + if (logger.IsEnabled(LogLevel.Debug)) + logger.LogDebug("Media Folders: [{media}]", _mediaFolder ?? "(Blank)"); + + } + + + protected string StripSitePath(string filePath) + { + var path = filePath; + if (_siteRoot.Length > 0 && !string.IsNullOrWhiteSpace(filePath) && filePath.InvariantStartsWith(_siteRoot)) + path = filePath.Substring(_siteRoot.Length); + + return ReplacePath(path, _mediaFolder, _genericMediaPath); + } + + protected string PrePendSitePath(string filePath) + { + var path = filePath; + if (_siteRoot.Length > 0 && !string.IsNullOrEmpty(filePath)) + path = $"{_siteRoot}{filePath}"; + + return ReplacePath(path, _genericMediaPath, _mediaFolder); + } + + + /// + /// makes a specific media path generic. + /// + /// + /// sometimes paths may be defined by umbraco settings, (especially blob settings) + /// that mean they are not stored as /media + /// + /// for the sake of generic importing we want the folder stored to be /media. + /// so we re-write the setting on import and export + /// + /// assumes you have a app setting in the web.config + /// + /// /someFolder + /// + /// + /// + private static string ReplacePath(string filePath, string? currentPath, string? targetPath) + { + if (!string.IsNullOrWhiteSpace(targetPath) + && !string.IsNullOrWhiteSpace(currentPath) + && !currentPath.Equals(targetPath)) + { + return Regex.Replace(filePath, $"^{currentPath}", targetPath, RegexOptions.IgnoreCase); + } + + return filePath; + } + + /// + /// Get the media rewrite folder + /// + /// + /// looks in appSettings for uSync:mediaFolder + /// + /// + /// + /// or in uSync8.config for media setting + /// + /// + /// + /// /someFolder + /// + /// + /// + private string GetMediaFolderSetting(string umbracoMediaPath) + { + var folder = this._configuration.GetValue("uSync:MediaFolder", string.Empty); + if (!string.IsNullOrEmpty(folder)) return folder; + + return umbracoMediaPath; + } + + /// + /// Get the actual media file as a dependency. + /// + public override Task> GetDependenciesAsync(object value, string editorAlias, DependencyFlags flags) + { + return uSyncTaskHelper.FromResultOf>(() => + { + + var stringValue = value?.ToString(); + if (string.IsNullOrWhiteSpace(stringValue)) + return []; + + var stringPath = GetImagePath(stringValue).TrimStart('/').ToLower(); + + if (!string.IsNullOrWhiteSpace(stringPath)) + { + return [new uSyncDependency() + { + Name = $"File: {Path.GetFileName(stringPath)}", + Udi = Udi.Create(Constants.UdiEntityType.MediaFile, stringPath), + Flags = flags, + Order = DependencyOrders.OrderFromEntityType(Constants.UdiEntityType.MediaFile), + Level = 0 + }]; + } + + return []; + }); + } + + private string GetImagePath(string stringValue) + { + if (stringValue.TryParseToJsonObject(out var json) is false || json is null) + return StripSitePath(stringValue); + + + if (json.TryGetPropertyValue("src", out var srcNode) is true) + { + var source = srcNode?.GetValue() ?? string.Empty; + if (string.IsNullOrWhiteSpace(source) is false) return source; + } + + return string.Empty; + } +} diff --git a/uSync.Core/Mapping/Mappers/ImageUploadMapper.cs b/uSync.Core/Mapping/Mappers/ImageUploadMapper.cs new file mode 100644 index 00000000..bd47dbf4 --- /dev/null +++ b/uSync.Core/Mapping/Mappers/ImageUploadMapper.cs @@ -0,0 +1,51 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Services; + +using uSync.Core.Extensions; +using uSync.Core.Serialization; + +namespace uSync.Core.Mapping; + +/// +/// image uploads don't store any of the json, stuff, so they are similar to image croppers, +/// but a bit simpler. +/// +public class ImageUploadMapper : ImagePathMapperBase, ISyncMapper +{ + public ImageUploadMapper( + IEntityService entityService, + ILogger logger, + IConfiguration configuration, + IOptionsMonitor globalOptions) : base(entityService, logger, configuration, globalOptions) + { } + + public override string Name => "Image Upload Mapper"; + public override string[] Editors => [Constants.PropertyEditors.Aliases.UploadField]; + public override Task GetExportValueAsync(object value, string editorAlias) + { + return uSyncTaskHelper.FromResultOf(() => + { + if (_logger.IsEnabled(LogLevel.Debug)) + _logger.LogDebug("Getting export value for ImageUpload with value {Value}", value); + + var stringValue = value?.ToString(); + if (string.IsNullOrWhiteSpace(stringValue)) return stringValue; + return StripSitePath(stringValue); + }); + } + + public override Task GetImportValueAsync(string value, string editorAlias, SyncSerializerOptions options) + { + return uSyncTaskHelper.FromResultOf(() => + { + var stringValue = value?.ToString(); + if (string.IsNullOrWhiteSpace(stringValue)) return stringValue; + return PrePendSitePath(stringValue); + }); + } +} diff --git a/uSync.Core/Mapping/SyncBlockMapperBase.cs b/uSync.Core/Mapping/SyncBlockMapperBase.cs index 70e8b344..500009cd 100644 --- a/uSync.Core/Mapping/SyncBlockMapperBase.cs +++ b/uSync.Core/Mapping/SyncBlockMapperBase.cs @@ -62,17 +62,11 @@ public SyncBlockMapperBase( _logger.LogDebug("Importing block value for {PropertyEditorAlias} {valueType}", propertyType.PropertyEditorAlias, value?.GetType().Name ?? "blank"); var importString = SyncBlockMapperBase.GetStringValue(value) ?? string.Empty; - var result = await _mapperCollection.Value.GetImportValueAsync(importString, propertyType, options); - // When the original value was a non-string JSON type (array, object, number, etc.), - // convert string results back to JsonNode to preserve the correct JSON type - // and prevent double-encoding when the block value is re-serialized. - if (result is string stringResult && value.IsNonStringJsonValue()) - { - return stringResult.ConvertToJsonNode() ?? result; - } - - return result; + // revert this back to the old way - we don't expand the json we get back because umbraco is very + // sensitve to what the exact format of the blocks is, and if we expand them, then calls during render + // can return null. + return await _mapperCollection.Value.GetImportValueAsync(importString, propertyType, options); } private async Task GetExportProperty(object? value, IPropertyType? propertyType, SyncSerializerOptions options) diff --git a/uSync.History/uSyncHistoryComposer.cs b/uSync.History/uSyncHistoryComposer.cs index f5323f28..61f33789 100644 --- a/uSync.History/uSyncHistoryComposer.cs +++ b/uSync.History/uSyncHistoryComposer.cs @@ -12,6 +12,7 @@ using uSync.BackOffice; using uSync.BackOffice.Extensions; +using uSync.Core.Extensions; using uSync.History.Service; namespace uSync.History @@ -20,6 +21,10 @@ public class uSyncHistoryComposer : IComposer { public void Compose(IUmbracoBuilder builder) { + // don't load if the backoffice is not loaded as part of the project. + if (builder.IsUmbracoBackOfficeEnabled() is false) + return; + builder.Services.AddSingleton(); builder.AddNotificationAsyncHandler();