diff --git a/Nikcio.UHeadless.sln b/Nikcio.UHeadless.sln
index a5e52625..3317a3ae 100644
--- a/Nikcio.UHeadless.sln
+++ b/Nikcio.UHeadless.sln
@@ -21,7 +21,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nikcio.UHeadless.Integratio
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{35E640D8-E023-4EAE-8F6A-DA111530CFB7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "code-examples", "examples\code-examples\code-examples.csproj", "{3A9D1882-B230-49DD-B0F3-0CE1134CE6D7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "code-examples", "examples\code-examples\code-examples.csproj", "{3A9D1882-B230-49DD-B0F3-0CE1134CE6D7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "starter-example", "examples\starter-example\starter-example.csproj", "{3E7F0679-EBDD-4158-8AA5-CFDC7CDC4FF2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -53,6 +55,10 @@ Global
{3A9D1882-B230-49DD-B0F3-0CE1134CE6D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3A9D1882-B230-49DD-B0F3-0CE1134CE6D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3A9D1882-B230-49DD-B0F3-0CE1134CE6D7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E7F0679-EBDD-4158-8AA5-CFDC7CDC4FF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E7F0679-EBDD-4158-8AA5-CFDC7CDC4FF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E7F0679-EBDD-4158-8AA5-CFDC7CDC4FF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E7F0679-EBDD-4158-8AA5-CFDC7CDC4FF2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -62,6 +68,7 @@ Global
{AB38DFEA-A643-44A0-BFC1-B38B163C62C6} = {9E422C4D-CDA0-486D-8201-1C48E5DF758C}
{87F86EB5-6EE0-4E7A-9D1D-4732E050F772} = {9E422C4D-CDA0-486D-8201-1C48E5DF758C}
{3A9D1882-B230-49DD-B0F3-0CE1134CE6D7} = {35E640D8-E023-4EAE-8F6A-DA111530CFB7}
+ {3E7F0679-EBDD-4158-8AA5-CFDC7CDC4FF2} = {35E640D8-E023-4EAE-8F6A-DA111530CFB7}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {35FA3052-75A6-4E60-8C6B-1882EE08D1CD}
diff --git a/README.md b/README.md
index 7a684eed..03c61d52 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ The Nikcio.UHeadless package is compatible with the following Umbraco versions:
|----------------------|-----------------------|
| Umbraco 10 | v3.x.x |
| Umbraco 12 | v4.x.x |
-| Umbraco 13 | v4.2.x+ |
+| Umbraco 13 | v4.2.x+ & v5.x.x |
For more information, please refer to the [Versioning](#versioning) section.
@@ -36,76 +36,81 @@ You can also find the package on [NuGet](https://www.nuget.org/packages/Nikcio.U
To integrate the package into your project, follow these steps:
-1. Open your `Startup.cs` file.
-2. Add the following using statement:
+1. Open your `Program.cs` file.
+2. Add the following using statements:
- ```csharp
- using Nikcio.UHeadless.Extensions;
- ```
+ ```csharp
+ using Nikcio.UHeadless;
+ using Nikcio.UHeadless.Defaults.ContentItems;
+ ```
-3. In the `ConfigureServices` method, add the following code:
+3. On the `UmbracoBuilder`, add the following code:
- ```csharp
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddUmbraco(_env, _config)
- /* Code omitted for clarity */
- .AddUHeadless()
- /* Code omitted for clarity */
- }
- ```
+ ```csharp
+ builder.CreateUmbracoBuilder()
+ // Default Umbraco configuration
+ .AddUHeadless(options =>
+ {
+ options.DisableAuthorization = true; // Change this later when adding authentication - See documentation
-4. In the `Configure` method, add the following code:
+ options.AddDefaults();
- ```csharp
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
- {
- /* Code omitted for clarity */
+ options.AddQuery();
+ options.AddQuery();
+ })
+ .Build();
+ ```
- app.UseUHeadlessGraphQLEndpoint();
+4. Then after the `app.BootUmbracoAsync()` method, add the following code:
- app.UseUmbraco()
- /* etc... */
- }
- ```
+ ```csharp
+ await app.BootUmbracoAsync();
-With these configurations in place, your content will be available at `/graphql`. To get started, try adding some content to the root and run the following query:
+ app.UseAuthentication();
+ app.UseAuthorization();
-```graphql
-{
- contentAtRoot {
- nodes {
- id,
- name
- }
- }
-}
-```
+ GraphQLEndpointConventionBuilder graphQLEndpointBuilder = app.MapUHeadless();
-## Documentation
+ // Only enable the GraphQL IDE in development
+ if (!builder.Environment.IsDevelopment())
+ {
+ graphQLEndpointBuilder.WithOptions(new GraphQLServerOptions()
+ {
+ Tool =
+ {
+ Enable = false,
+ }
+ });
+ }
-For detailed documentation and usage instructions, please refer to the [Nikcio.UHeadless Documentation](https://nikcio.github.io/Nikcio.UHeadless).
+ app.UseUmbraco()
+ // Default Umbraco configuration
+ ```
-## Extending Packages
+With these configurations in place, your content will be available at `/graphql`.
-Nikcio.UHeadless offers various packages for extending its functionality. The following table lists the available packages and their current status:
+To get started, try querying your content using their GUIDs or routes. For example with the query below:
-| Package Name | Status |
-| --------------------------------- | ------------ |
-| Nikcio.UHeadless.Content | Included* |
-| Nikcio.UHeadless.Media | Included* |
-| Nikcio.UHeadless.ContentTypes | Included* |
-| Nikcio.UHeadless.Members | Available |
-| Nikcio.UHeadless.DataTypes | Not started |
-| Nikcio.UHeadless.Dictionary | Not started |
-| Nikcio.UHeadless.MediaTypes | Not started |
-| Nikcio.UHeadless.MemberTypes | Not started |
+__Tip: GUIDs can be found in the info tab when viewing content in the backoffice__
-\***Included** indicates that the package is included in the Nikcio.UHeadless NuGet package.
+```graphql
+query {
+ contentByGuid(id: "dcf18a51-6919-4cf8-89d1-36b94ce4d963") {
+ id
+ key
+ name
+ statusCode
+ templateId
+ updateDate
+ url(urlMode: ABSOLUTE)
+ urlSegment
+ }
+}
+```
-\*\***Preview** indicates that the package is available in a preview version.
+## Documentation
-Please note that if a Nikcio.UHeadless.\* package is not listed above, it either means that the package is not ready for use or it is a core/base package used in the packages mentioned above.
+For detailed documentation and usage instructions, please refer to the [Nikcio.UHeadless Documentation](https://nikcio.github.io/Nikcio.UHeadless).
## Versioning
@@ -127,7 +132,7 @@ vX.Y.Z
| Umbraco 10 | v2.x.x & v3.x.x | Only reported issues for v3.x.x |
| Umbraco 11 | v3.x.x & v4.x.x | No development |
| Umbraco 12 | v4.x.x | Only reported issues for v4.x.x |
-| Umbraco 13 | v4.2.x+ | Active branch |
+| Umbraco 13 | v4.2.x+ & v5.x.x | Active branch (v5.x.x) |
## Contributing
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 6833f832..d8c87ddd 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -19,23 +19,22 @@ export default defineConfig({
label: 'Welcome',
items: [
{ label: 'Overview', link: '/overview/' },
- { label: 'Version 4', link: '/v4/start/' },
+ { label: 'Version 5', link: '/v5/start/' },
],
},
{
label: 'Fundamentals',
items: [
- { label: 'Getting started', link: 'v4/fundamentals/getting-started/' },
- { label: 'Security', link: 'v4/fundamentals/security/' },
- { label: 'Extend UHeadless', link: 'v4/fundamentals/extend-uheadless/' },
+ { label: 'Getting started', link: 'v5/fundamentals/getting-started/' },
+ { label: 'Security', link: 'v5/fundamentals/security/' },
{
label: 'Querying',
collapsed: true,
items: [
- { label: 'Content', link: 'v4/fundamentals/querying/content/' },
- { label: 'Media', link: 'v4/fundamentals/querying/media/' },
- { label: 'Members', link: 'v4/fundamentals/querying/members/' },
- { label: 'Properties', link: 'v4/fundamentals/querying/properties/' }
+ { label: 'Content', link: 'v5/fundamentals/querying/content/' },
+ { label: 'Media', link: 'v5/fundamentals/querying/media/' },
+ { label: 'Members', link: 'v5/fundamentals/querying/members/' },
+ { label: 'Properties', link: 'v5/fundamentals/querying/properties/' }
]
},
]
@@ -43,18 +42,18 @@ export default defineConfig({
{
label: 'Extending',
items: [
- { label: 'Content', link: 'v4/extending/content/' },
- { label: 'Media', link: 'v4/extending/media/' },
- { label: 'Member', link: 'v4/extending/member/' },
+ { label: 'Content', link: 'v5/extending/content/' },
+ { label: 'Media', link: 'v5/extending/media/' },
+ { label: 'Member', link: 'v5/extending/member/' },
{
label: 'Properties',
collapsed: true,
items: [
- { label: 'Overview', link: 'v4/extending/properties/overview/' },
- { label: 'Rich text', link: 'v4/extending/properties/rich-text/' },
- { label: 'Media picker', link: 'v4/extending/properties/media-picker/' },
- { label: 'Block list', link: 'v4/extending/properties/block-list/' },
- { label: 'Custom editor', link: 'v4/extending/properties/custom-editor/' },
+ { label: 'Overview', link: 'v5/extending/properties/overview/' },
+ { label: 'Rich text', link: 'v5/extending/properties/rich-text/' },
+ { label: 'Media picker', link: 'v5/extending/properties/media-picker/' },
+ { label: 'Block list', link: 'v5/extending/properties/block-list/' },
+ { label: 'Custom editor', link: 'v5/extending/properties/custom-editor/' },
]
},
]
@@ -62,51 +61,106 @@ export default defineConfig({
{
label: 'Reference',
items: [
- { label: 'Options', link: 'v4/reference/options/' },
- { label: 'Endpoint options', link: 'v4/reference/endpoint-options/' },
- { label: 'Paging options', link: 'v4/reference/paging-options/' },
- {
- label: 'Content',
- collapsed: true,
- items: [
- { label: 'Content Reference', link: 'v4/reference/content/overview/' },
- { label: 'Content Bases', link: 'v4/reference/content/bases/' },
- { label: 'Content Basics', link: 'v4/reference/content/basics/' }
- ]
- },
- {
- label: 'Media',
- collapsed: true,
- items: [
- { label: 'Media Reference', link: 'v4/reference/media/overview/' },
- { label: 'Media Bases', link: 'v4/reference/media/bases/' },
- { label: 'Media Basics', link: 'v4/reference/media/basics/' }
- ]
- },
- {
- label: 'Members',
- collapsed: true,
- items: [
- { label: 'Members Reference', link: 'v4/reference/members/overview/' },
- { label: 'Members Bases', link: 'v4/reference/members/bases/' },
- { label: 'Members Basics', link: 'v4/reference/members/basics/' }
- ]
- },
- {
- label: 'Properties',
- collapsed: true,
- items: [
- { label: 'Properties Reference', link: 'v4/reference/properties/overview/' },
- { label: 'Properties Bases', link: 'v4/reference/properties/bases/' },
- { label: 'Properties Basics', link: 'v4/reference/properties/basics/' }
- ]
- },
+ { label: 'Options', link: 'v5/reference/options/' },
+ { label: 'Endpoint options', link: 'v5/reference/endpoint-options/' },
+ { label: 'Content', link: 'v5/reference/content/' },
+ { label: 'Media', link: 'v5/reference/media/' },
+ { label: 'Member', link: 'v5/reference/member/' },
+ { label: 'Member', link: 'v5/reference/properties/' },
]
},
{
label: 'Older versions',
collapsed: true,
items: [
+ {
+ label: 'Version 4',
+ collapsed: true,
+ items: [
+ { label: 'Overview', link: '/v4/start/' },
+ {
+ label: 'Fundamentals',
+ items: [
+ { label: 'Getting started', link: 'v4/fundamentals/getting-started/' },
+ { label: 'Security', link: 'v4/fundamentals/security/' },
+ { label: 'Extend UHeadless', link: 'v4/fundamentals/extend-uheadless/' },
+ {
+ label: 'Querying',
+ collapsed: true,
+ items: [
+ { label: 'Content', link: 'v4/fundamentals/querying/content/' },
+ { label: 'Media', link: 'v4/fundamentals/querying/media/' },
+ { label: 'Members', link: 'v4/fundamentals/querying/members/' },
+ { label: 'Properties', link: 'v4/fundamentals/querying/properties/' }
+ ]
+ },
+ ]
+ },
+ {
+ label: 'Extending',
+ items: [
+ { label: 'Content', link: 'v4/extending/content/' },
+ { label: 'Media', link: 'v4/extending/media/' },
+ { label: 'Member', link: 'v4/extending/member/' },
+ {
+ label: 'Properties',
+ collapsed: true,
+ items: [
+ { label: 'Overview', link: 'v4/extending/properties/overview/' },
+ { label: 'Rich text', link: 'v4/extending/properties/rich-text/' },
+ { label: 'Media picker', link: 'v4/extending/properties/media-picker/' },
+ { label: 'Block list', link: 'v4/extending/properties/block-list/' },
+ { label: 'Custom editor', link: 'v4/extending/properties/custom-editor/' },
+ ]
+ },
+ ]
+ },
+ {
+ label: 'Reference',
+ items: [
+ { label: 'Options', link: 'v4/reference/options/' },
+ { label: 'Endpoint options', link: 'v4/reference/endpoint-options/' },
+ { label: 'Paging options', link: 'v4/reference/paging-options/' },
+ {
+ label: 'Content',
+ collapsed: true,
+ items: [
+ { label: 'Content Reference', link: 'v4/reference/content/overview/' },
+ { label: 'Content Bases', link: 'v4/reference/content/bases/' },
+ { label: 'Content Basics', link: 'v4/reference/content/basics/' }
+ ]
+ },
+ {
+ label: 'Media',
+ collapsed: true,
+ items: [
+ { label: 'Media Reference', link: 'v4/reference/media/overview/' },
+ { label: 'Media Bases', link: 'v4/reference/media/bases/' },
+ { label: 'Media Basics', link: 'v4/reference/media/basics/' }
+ ]
+ },
+ {
+ label: 'Members',
+ collapsed: true,
+ items: [
+ { label: 'Members Reference', link: 'v4/reference/members/overview/' },
+ { label: 'Members Bases', link: 'v4/reference/members/bases/' },
+ { label: 'Members Basics', link: 'v4/reference/members/basics/' }
+ ]
+ },
+ {
+ label: 'Properties',
+ collapsed: true,
+ items: [
+ { label: 'Properties Reference', link: 'v4/reference/properties/overview/' },
+ { label: 'Properties Bases', link: 'v4/reference/properties/bases/' },
+ { label: 'Properties Basics', link: 'v4/reference/properties/basics/' }
+ ]
+ },
+ ]
+ }
+ ]
+ },
{
label: 'Version 3',
collapsed: true,
diff --git a/docs/package.json b/docs/package.json
index 4840f459..6cc52281 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -10,8 +10,8 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/starlight": "^0.21.4",
- "astro": "^4.5.16",
+ "@astrojs/starlight": "^0.24.0",
+ "astro": "^4.10.1",
"sharp": "^0.33.3"
}
}
\ No newline at end of file
diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml
index 6f3afe20..1d8de1cc 100644
--- a/docs/pnpm-lock.yaml
+++ b/docs/pnpm-lock.yaml
@@ -6,11 +6,11 @@ settings:
dependencies:
'@astrojs/starlight':
- specifier: ^0.21.4
- version: 0.21.4(astro@4.5.16)
+ specifier: ^0.24.0
+ version: 0.24.0(astro@4.10.1)
astro:
- specifier: ^4.5.16
- version: 4.5.16
+ specifier: ^4.10.1
+ version: 4.10.1
sharp:
specifier: ^0.33.3
version: 0.33.3
@@ -21,43 +21,22 @@ packages:
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
dependencies:
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
dev: false
- /@astrojs/compiler@2.7.1:
- resolution: {integrity: sha512-/POejAYuj8WEw7ZI0J8JBvevjfp9jQ9Wmu/Bg52RiNwGXkMV7JnYpsenVfHvvf1G7R5sXHGKlTcxlQWhoUTiGQ==}
+ /@astrojs/compiler@2.8.0:
+ resolution: {integrity: sha512-yrpD1WRGqsJwANaDIdtHo+YVjvIOFAjC83lu5qENIgrafwZcJgSXDuwVMXOgok4tFzpeKLsFQ6c3FoUdloLWBQ==}
dev: false
/@astrojs/internal-helpers@0.4.0:
resolution: {integrity: sha512-6B13lz5n6BrbTqCTwhXjJXuR1sqiX/H6rTxzlXx+lN1NnV4jgnq/KJldCQaUWJzPL5SiWahQyinxAbxQtwgPHA==}
dev: false
- /@astrojs/markdown-remark@4.2.1:
- resolution: {integrity: sha512-2RQBIwrq+2qPYtp99bH+eL5hfbK0BoxXla85lHsRpIX/IsGqFrPX6pXI2cbWPihBwGbKCdxS6uZNX2QerZWwpQ==}
- dependencies:
- '@astrojs/prism': 3.0.0
- github-slugger: 2.0.0
- import-meta-resolve: 4.0.0
- mdast-util-definitions: 6.0.0
- rehype-raw: 7.0.0
- rehype-stringify: 10.0.0
- remark-gfm: 4.0.0
- remark-parse: 11.0.0
- remark-rehype: 11.1.0
- remark-smartypants: 2.0.0
- shikiji: 0.9.19
- unified: 11.0.4
- unist-util-visit: 5.0.0
- vfile: 6.0.1
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /@astrojs/markdown-remark@5.0.0:
- resolution: {integrity: sha512-QBXbxXZamVRoqCNN2gjDXa7qYPUkJZq7KYFfg3DX7rze3QL6xiz4N+Wg202dNPRaIkQa16BV6D8+EHibQFubRg==}
+ /@astrojs/markdown-remark@5.1.0:
+ resolution: {integrity: sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==}
dependencies:
- '@astrojs/prism': 3.0.0
+ '@astrojs/prism': 3.1.0
github-slugger: 2.0.0
hast-util-from-html: 2.0.1
hast-util-to-text: 4.0.0
@@ -69,7 +48,7 @@ packages:
remark-parse: 11.0.0
remark-rehype: 11.1.0
remark-smartypants: 2.0.0
- shiki: 1.2.4
+ shiki: 1.6.3
unified: 11.0.4
unist-util-remove-position: 5.0.0
unist-util-visit: 5.0.0
@@ -79,25 +58,25 @@ packages:
- supports-color
dev: false
- /@astrojs/mdx@2.1.1(astro@4.5.16):
- resolution: {integrity: sha512-AgGFdE7HOGmoFooGvMSatkA9FiSKwyVW7ImHot/bXJ6uAbFfu6iG2ht18Cf1pT22Hda/6iSCGWusFvBv0/EnKQ==}
- engines: {node: '>=18.14.1'}
+ /@astrojs/mdx@3.1.0(astro@4.10.1):
+ resolution: {integrity: sha512-yuGDaOcCAfYgLQvUAlJDezYGK4twHlzW1Kvpyg3inxtDJuAsHdyVyYLWl0Wo5nwkyrbZktdrjnoW5scqzoAqAg==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
peerDependencies:
- astro: ^4.0.0
+ astro: ^4.8.0
dependencies:
- '@astrojs/markdown-remark': 4.2.1
+ '@astrojs/markdown-remark': 5.1.0
'@mdx-js/mdx': 3.0.1
acorn: 8.11.3
- astro: 4.5.16
- es-module-lexer: 1.4.1
+ astro: 4.10.1
+ es-module-lexer: 1.5.3
estree-util-visit: 2.0.0
github-slugger: 2.0.0
gray-matter: 4.0.3
- hast-util-to-html: 9.0.0
+ hast-util-to-html: 9.0.1
kleur: 4.1.5
rehype-raw: 7.0.0
remark-gfm: 4.0.0
- remark-smartypants: 2.0.0
+ remark-smartypants: 3.0.1
source-map: 0.7.4
unist-util-visit: 5.0.0
vfile: 6.0.1
@@ -105,9 +84,9 @@ packages:
- supports-color
dev: false
- /@astrojs/prism@3.0.0:
- resolution: {integrity: sha512-g61lZupWq1bYbcBnYZqdjndShr/J3l/oFobBKPA3+qMat146zce3nz2kdO4giGbhYDt4gYdhmoBz0vZJ4sIurQ==}
- engines: {node: '>=18.14.1'}
+ /@astrojs/prism@3.1.0:
+ resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
dependencies:
prismjs: 1.29.0
dev: false
@@ -119,18 +98,18 @@ packages:
zod: 3.22.4
dev: false
- /@astrojs/starlight@0.21.4(astro@4.5.16):
- resolution: {integrity: sha512-n9K9WMYN9HtRsZ6u06yLXKMaLMo+a6ifDoBkP24S6EFOsgFUa4P9/t+xliDnNFTf3KGtm9YTdSUA3oI/2wq1eQ==}
+ /@astrojs/starlight@0.24.0(astro@4.10.1):
+ resolution: {integrity: sha512-YUBf7TgDUMRcyoZ8S8hlnPuEvgqFuB5F7tQUwPK5GwkTC1E+gMW8zx9J/RgJAXNjQSi19s73nuF19zw/QSy5tw==}
peerDependencies:
- astro: ^4.2.7
+ astro: ^4.8.6
dependencies:
- '@astrojs/mdx': 2.1.1(astro@4.5.16)
+ '@astrojs/mdx': 3.1.0(astro@4.10.1)
'@astrojs/sitemap': 3.0.5
'@pagefind/default-ui': 1.0.4
'@types/hast': 3.0.4
'@types/mdast': 4.0.3
- astro: 4.5.16
- astro-expressive-code: 0.33.5(astro@4.5.16)
+ astro: 4.10.1
+ astro-expressive-code: 0.35.3(astro@4.10.1)
bcp-47: 2.1.0
hast-util-from-html: 2.0.1
hast-util-select: 6.0.2
@@ -140,6 +119,7 @@ packages:
mdast-util-to-markdown: 2.1.0
pagefind: 1.0.4
rehype: 13.0.1
+ rehype-format: 5.0.0
remark-directive: 3.0.0
unified: 11.0.4
unist-util-visit: 5.0.0
@@ -148,11 +128,11 @@ packages:
- supports-color
dev: false
- /@astrojs/telemetry@3.0.4:
- resolution: {integrity: sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==}
- engines: {node: '>=18.14.1'}
+ /@astrojs/telemetry@3.1.0:
+ resolution: {integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
dependencies:
- ci-info: 3.8.0
+ ci-info: 4.0.0
debug: 4.3.4
dlv: 1.1.3
dset: 3.1.3
@@ -163,41 +143,33 @@ packages:
- supports-color
dev: false
- /@babel/code-frame@7.23.5:
- resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/highlight': 7.23.4
- chalk: 2.4.2
- dev: false
-
- /@babel/code-frame@7.24.2:
- resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==}
+ /@babel/code-frame@7.24.7:
+ resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/highlight': 7.24.2
+ '@babel/highlight': 7.24.7
picocolors: 1.0.0
dev: false
- /@babel/compat-data@7.23.5:
- resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
+ /@babel/compat-data@7.24.7:
+ resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==}
engines: {node: '>=6.9.0'}
dev: false
- /@babel/core@7.24.4:
- resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==}
+ /@babel/core@7.24.7:
+ resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
- '@babel/code-frame': 7.24.2
- '@babel/generator': 7.24.4
- '@babel/helper-compilation-targets': 7.23.6
- '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4)
- '@babel/helpers': 7.24.4
- '@babel/parser': 7.24.4
- '@babel/template': 7.24.0
- '@babel/traverse': 7.24.1
- '@babel/types': 7.24.0
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.24.7
+ '@babel/helper-compilation-targets': 7.24.7
+ '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7)
+ '@babel/helpers': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/template': 7.24.7
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@@ -207,264 +179,210 @@ packages:
- supports-color
dev: false
- /@babel/generator@7.23.6:
- resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
+ /@babel/generator@7.24.7:
+ resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.9
- '@jridgewell/gen-mapping': 0.3.3
- '@jridgewell/trace-mapping': 0.3.18
- jsesc: 2.5.2
- dev: false
-
- /@babel/generator@7.24.4:
- resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.7
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
dev: false
- /@babel/helper-annotate-as-pure@7.22.5:
- resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+ /@babel/helper-annotate-as-pure@7.24.7:
+ resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.9
+ '@babel/types': 7.24.7
dev: false
- /@babel/helper-compilation-targets@7.23.6:
- resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
+ /@babel/helper-compilation-targets@7.24.7:
+ resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/compat-data': 7.23.5
- '@babel/helper-validator-option': 7.23.5
+ '@babel/compat-data': 7.24.7
+ '@babel/helper-validator-option': 7.24.7
browserslist: 4.23.0
lru-cache: 5.1.1
semver: 6.3.1
dev: false
- /@babel/helper-environment-visitor@7.22.20:
- resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+ /@babel/helper-environment-visitor@7.24.7:
+ resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==}
engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.24.7
dev: false
- /@babel/helper-function-name@7.23.0:
- resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+ /@babel/helper-function-name@7.24.7:
+ resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/template': 7.23.9
- '@babel/types': 7.23.9
+ '@babel/template': 7.24.7
+ '@babel/types': 7.24.7
dev: false
- /@babel/helper-hoist-variables@7.22.5:
- resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+ /@babel/helper-hoist-variables@7.24.7:
+ resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.9
+ '@babel/types': 7.24.7
dev: false
- /@babel/helper-module-imports@7.22.15:
- resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
+ /@babel/helper-module-imports@7.24.7:
+ resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.9
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
dev: false
- /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4):
- resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+ /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7):
+ resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.24.4
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.22.15
- '@babel/helper-simple-access': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/core': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-module-imports': 7.24.7
+ '@babel/helper-simple-access': 7.24.7
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/helper-validator-identifier': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
dev: false
- /@babel/helper-plugin-utils@7.22.5:
- resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+ /@babel/helper-plugin-utils@7.24.7:
+ resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==}
engines: {node: '>=6.9.0'}
dev: false
- /@babel/helper-simple-access@7.22.5:
- resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+ /@babel/helper-simple-access@7.24.7:
+ resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.24.0
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
dev: false
- /@babel/helper-split-export-declaration@7.22.6:
- resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+ /@babel/helper-split-export-declaration@7.24.7:
+ resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.9
- dev: false
-
- /@babel/helper-string-parser@7.23.4:
- resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
- engines: {node: '>=6.9.0'}
+ '@babel/types': 7.24.7
dev: false
- /@babel/helper-validator-identifier@7.22.20:
- resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+ /@babel/helper-string-parser@7.24.7:
+ resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==}
engines: {node: '>=6.9.0'}
dev: false
- /@babel/helper-validator-option@7.23.5:
- resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+ /@babel/helper-validator-identifier@7.24.7:
+ resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
engines: {node: '>=6.9.0'}
dev: false
- /@babel/helpers@7.24.4:
- resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==}
+ /@babel/helper-validator-option@7.24.7:
+ resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==}
engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/template': 7.24.0
- '@babel/traverse': 7.24.1
- '@babel/types': 7.24.0
- transitivePeerDependencies:
- - supports-color
dev: false
- /@babel/highlight@7.23.4:
- resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
+ /@babel/helpers@7.24.7:
+ resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.22.20
- chalk: 2.4.2
- js-tokens: 4.0.0
+ '@babel/template': 7.24.7
+ '@babel/types': 7.24.7
dev: false
- /@babel/highlight@7.24.2:
- resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==}
+ /@babel/highlight@7.24.7:
+ resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-validator-identifier': 7.24.7
chalk: 2.4.2
js-tokens: 4.0.0
picocolors: 1.0.0
dev: false
- /@babel/parser@7.23.9:
- resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==}
+ /@babel/parser@7.24.7:
+ resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.23.9
+ '@babel/types': 7.24.7
dev: false
- /@babel/parser@7.24.4:
- resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==}
- engines: {node: '>=6.0.0'}
- hasBin: true
- dependencies:
- '@babel/types': 7.24.0
- dev: false
-
- /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.24.4):
- resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
+ /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7):
+ resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.24.4
- '@babel/helper-plugin-utils': 7.22.5
+ '@babel/core': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.7
dev: false
- /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.24.4):
- resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==}
+ /@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7):
+ resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.24.4
- '@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-module-imports': 7.22.15
- '@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.24.4)
- '@babel/types': 7.23.9
- dev: false
-
- /@babel/template@7.23.9:
- resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.23.5
- '@babel/parser': 7.23.9
- '@babel/types': 7.23.9
- dev: false
-
- /@babel/template@7.24.0:
- resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/core': 7.24.7
+ '@babel/helper-annotate-as-pure': 7.24.7
+ '@babel/helper-module-imports': 7.24.7
+ '@babel/helper-plugin-utils': 7.24.7
+ '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7)
+ '@babel/types': 7.24.7
+ transitivePeerDependencies:
+ - supports-color
dev: false
- /@babel/traverse@7.23.9:
- resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==}
+ /@babel/template@7.24.7:
+ resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.23.5
- '@babel/generator': 7.23.6
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.23.9
- '@babel/types': 7.23.9
- debug: 4.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
+ '@babel/code-frame': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
dev: false
- /@babel/traverse@7.24.1:
- resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==}
+ /@babel/traverse@7.24.7:
+ resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.24.2
- '@babel/generator': 7.24.4
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.24.4
- '@babel/types': 7.24.0
+ '@babel/code-frame': 7.24.7
+ '@babel/generator': 7.24.7
+ '@babel/helper-environment-visitor': 7.24.7
+ '@babel/helper-function-name': 7.24.7
+ '@babel/helper-hoist-variables': 7.24.7
+ '@babel/helper-split-export-declaration': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: false
- /@babel/types@7.23.9:
- resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==}
+ /@babel/types@7.24.7:
+ resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-string-parser': 7.24.7
+ '@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
dev: false
- /@babel/types@7.24.0:
- resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
- to-fast-properties: 2.0.0
- dev: false
-
- /@ctrl/tinycolor@3.6.1:
- resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
- engines: {node: '>=10'}
+ /@ctrl/tinycolor@4.1.0:
+ resolution: {integrity: sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==}
+ engines: {node: '>=14'}
dev: false
/@emnapi/runtime@1.1.1:
@@ -475,15 +393,6 @@ packages:
dev: false
optional: true
- /@esbuild/aix-ppc64@0.19.12:
- resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
- requiresBuild: true
- dev: false
- optional: true
-
/@esbuild/aix-ppc64@0.20.2:
resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
engines: {node: '>=12'}
@@ -493,11 +402,11 @@ packages:
dev: false
optional: true
- /@esbuild/android-arm64@0.19.12:
- resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ /@esbuild/aix-ppc64@0.21.4:
+ resolution: {integrity: sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
+ cpu: [ppc64]
+ os: [aix]
requiresBuild: true
dev: false
optional: true
@@ -511,10 +420,10 @@ packages:
dev: false
optional: true
- /@esbuild/android-arm@0.19.12:
- resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ /@esbuild/android-arm64@0.21.4:
+ resolution: {integrity: sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA==}
engines: {node: '>=12'}
- cpu: [arm]
+ cpu: [arm64]
os: [android]
requiresBuild: true
dev: false
@@ -529,10 +438,10 @@ packages:
dev: false
optional: true
- /@esbuild/android-x64@0.19.12:
- resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
+ /@esbuild/android-arm@0.21.4:
+ resolution: {integrity: sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [arm]
os: [android]
requiresBuild: true
dev: false
@@ -547,11 +456,11 @@ packages:
dev: false
optional: true
- /@esbuild/darwin-arm64@0.19.12:
- resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ /@esbuild/android-x64@0.21.4:
+ resolution: {integrity: sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
+ cpu: [x64]
+ os: [android]
requiresBuild: true
dev: false
optional: true
@@ -565,10 +474,10 @@ packages:
dev: false
optional: true
- /@esbuild/darwin-x64@0.19.12:
- resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
+ /@esbuild/darwin-arm64@0.21.4:
+ resolution: {integrity: sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
@@ -583,11 +492,11 @@ packages:
dev: false
optional: true
- /@esbuild/freebsd-arm64@0.19.12:
- resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ /@esbuild/darwin-x64@0.21.4:
+ resolution: {integrity: sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
+ cpu: [x64]
+ os: [darwin]
requiresBuild: true
dev: false
optional: true
@@ -601,10 +510,10 @@ packages:
dev: false
optional: true
- /@esbuild/freebsd-x64@0.19.12:
- resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
+ /@esbuild/freebsd-arm64@0.21.4:
+ resolution: {integrity: sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: false
@@ -619,11 +528,11 @@ packages:
dev: false
optional: true
- /@esbuild/linux-arm64@0.19.12:
- resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
+ /@esbuild/freebsd-x64@0.21.4:
+ resolution: {integrity: sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
+ cpu: [x64]
+ os: [freebsd]
requiresBuild: true
dev: false
optional: true
@@ -637,10 +546,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-arm@0.19.12:
- resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
+ /@esbuild/linux-arm64@0.21.4:
+ resolution: {integrity: sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ==}
engines: {node: '>=12'}
- cpu: [arm]
+ cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
@@ -655,10 +564,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-ia32@0.19.12:
- resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ /@esbuild/linux-arm@0.21.4:
+ resolution: {integrity: sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g==}
engines: {node: '>=12'}
- cpu: [ia32]
+ cpu: [arm]
os: [linux]
requiresBuild: true
dev: false
@@ -673,10 +582,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-loong64@0.19.12:
- resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ /@esbuild/linux-ia32@0.21.4:
+ resolution: {integrity: sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g==}
engines: {node: '>=12'}
- cpu: [loong64]
+ cpu: [ia32]
os: [linux]
requiresBuild: true
dev: false
@@ -691,10 +600,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-mips64el@0.19.12:
- resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
+ /@esbuild/linux-loong64@0.21.4:
+ resolution: {integrity: sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ==}
engines: {node: '>=12'}
- cpu: [mips64el]
+ cpu: [loong64]
os: [linux]
requiresBuild: true
dev: false
@@ -709,10 +618,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-ppc64@0.19.12:
- resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ /@esbuild/linux-mips64el@0.21.4:
+ resolution: {integrity: sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA==}
engines: {node: '>=12'}
- cpu: [ppc64]
+ cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: false
@@ -727,10 +636,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-riscv64@0.19.12:
- resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
+ /@esbuild/linux-ppc64@0.21.4:
+ resolution: {integrity: sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg==}
engines: {node: '>=12'}
- cpu: [riscv64]
+ cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: false
@@ -745,10 +654,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-s390x@0.19.12:
- resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ /@esbuild/linux-riscv64@0.21.4:
+ resolution: {integrity: sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w==}
engines: {node: '>=12'}
- cpu: [s390x]
+ cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: false
@@ -763,10 +672,10 @@ packages:
dev: false
optional: true
- /@esbuild/linux-x64@0.19.12:
- resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ /@esbuild/linux-s390x@0.21.4:
+ resolution: {integrity: sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [s390x]
os: [linux]
requiresBuild: true
dev: false
@@ -781,11 +690,11 @@ packages:
dev: false
optional: true
- /@esbuild/netbsd-x64@0.19.12:
- resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
+ /@esbuild/linux-x64@0.21.4:
+ resolution: {integrity: sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg==}
engines: {node: '>=12'}
cpu: [x64]
- os: [netbsd]
+ os: [linux]
requiresBuild: true
dev: false
optional: true
@@ -799,11 +708,11 @@ packages:
dev: false
optional: true
- /@esbuild/openbsd-x64@0.19.12:
- resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
+ /@esbuild/netbsd-x64@0.21.4:
+ resolution: {integrity: sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA==}
engines: {node: '>=12'}
cpu: [x64]
- os: [openbsd]
+ os: [netbsd]
requiresBuild: true
dev: false
optional: true
@@ -817,11 +726,11 @@ packages:
dev: false
optional: true
- /@esbuild/sunos-x64@0.19.12:
- resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ /@esbuild/openbsd-x64@0.21.4:
+ resolution: {integrity: sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg==}
engines: {node: '>=12'}
cpu: [x64]
- os: [sunos]
+ os: [openbsd]
requiresBuild: true
dev: false
optional: true
@@ -835,11 +744,11 @@ packages:
dev: false
optional: true
- /@esbuild/win32-arm64@0.19.12:
- resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ /@esbuild/sunos-x64@0.21.4:
+ resolution: {integrity: sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
+ cpu: [x64]
+ os: [sunos]
requiresBuild: true
dev: false
optional: true
@@ -853,10 +762,10 @@ packages:
dev: false
optional: true
- /@esbuild/win32-ia32@0.19.12:
- resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
+ /@esbuild/win32-arm64@0.21.4:
+ resolution: {integrity: sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg==}
engines: {node: '>=12'}
- cpu: [ia32]
+ cpu: [arm64]
os: [win32]
requiresBuild: true
dev: false
@@ -871,10 +780,10 @@ packages:
dev: false
optional: true
- /@esbuild/win32-x64@0.19.12:
- resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
+ /@esbuild/win32-ia32@0.21.4:
+ resolution: {integrity: sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [ia32]
os: [win32]
requiresBuild: true
dev: false
@@ -889,36 +798,46 @@ packages:
dev: false
optional: true
- /@expressive-code/core@0.33.5:
- resolution: {integrity: sha512-KL0EkKAvd7SSIQL3ZIP19xqe4xNjBaQYNvcJC6RmoBUnQpvxaJNFwRxCBEF/X0ftJEMaSG7WTrabZ9c/zFeqmA==}
+ /@esbuild/win32-x64@0.21.4:
+ resolution: {integrity: sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@expressive-code/core@0.35.3:
+ resolution: {integrity: sha512-SYamcarAjufYhbuK/kfvJSvAXLsfnM7DKc78R7Dq4B73R5bKQK2m5zR0l57tXr4yp2C5Z8lu5xZncdwWxcmPdg==}
dependencies:
- '@ctrl/tinycolor': 3.6.1
- hast-util-to-html: 8.0.4
- hastscript: 7.2.0
- postcss: 8.4.35
- postcss-nested: 6.0.1(postcss@8.4.35)
+ '@ctrl/tinycolor': 4.1.0
+ hast-util-select: 6.0.2
+ hast-util-to-html: 9.0.1
+ hast-util-to-text: 4.0.2
+ hastscript: 9.0.0
+ postcss: 8.4.38
+ postcss-nested: 6.0.1(postcss@8.4.38)
+ unist-util-visit: 5.0.0
+ unist-util-visit-parents: 6.0.1
dev: false
- /@expressive-code/plugin-frames@0.33.5:
- resolution: {integrity: sha512-lFt/gbnZscBSxHovg4XiWohp5nrxk4McS6RGABdj6+0gJcX8/YrFTM23GKBIkaDePxdDidVY0jQYGYDL/RrQHw==}
+ /@expressive-code/plugin-frames@0.35.3:
+ resolution: {integrity: sha512-QYytMq6IsaHgTofQ5b6d+CnbxkqLdikSF2hC+IL/ZZwPYHYZoUlmjIwmJZhY4/hHqJGELrtZsyVdlt06RntgmA==}
dependencies:
- '@expressive-code/core': 0.33.5
- hastscript: 7.2.0
+ '@expressive-code/core': 0.35.3
dev: false
- /@expressive-code/plugin-shiki@0.33.5:
- resolution: {integrity: sha512-LWgttQTUrIPE1X+Lya1qFWiX47tH2AS2hkbj/cZoWkdiSjn6zUvtTypK/2Xn6Rgn6z6ClzpgHvkXRqFn7nAB4A==}
+ /@expressive-code/plugin-shiki@0.35.3:
+ resolution: {integrity: sha512-aFQBPepv0zhVXqJFAvfQ4vXYv/meJKiqmEEKSxdjAfwXllIV49PDlnGEXmbGYjR4hUQQjbfDgzAbrbfePc3YVQ==}
dependencies:
- '@expressive-code/core': 0.33.5
+ '@expressive-code/core': 0.35.3
shiki: 1.2.4
dev: false
- /@expressive-code/plugin-text-markers@0.33.5:
- resolution: {integrity: sha512-JxSHL1MGrJAPNaUMjFXex3K+9NJDbfew9H6PmX8LQ+fm9VNQdtBYTAz/x7nqOk7bkTrtAZK5RfDqUfb8U5M+2A==}
+ /@expressive-code/plugin-text-markers@0.35.3:
+ resolution: {integrity: sha512-gDdnQrfDRXw5Y+PKHJDkpAUdf2pthYOthGcgy3JB8GOTQ3EL1h+755Ct/bGc4MR6jn+dgnQP47uHMWQaccvN6Q==}
dependencies:
- '@expressive-code/core': 0.33.5
- hastscript: 7.2.0
- unist-util-visit-parents: 5.1.3
+ '@expressive-code/core': 0.35.3
dev: false
/@img/sharp-darwin-arm64@0.33.3:
@@ -1109,15 +1028,6 @@ packages:
dev: false
optional: true
- /@jridgewell/gen-mapping@0.3.3:
- resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
- engines: {node: '>=6.0.0'}
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.18
- dev: false
-
/@jridgewell/gen-mapping@0.3.5:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -1132,31 +1042,15 @@ packages:
engines: {node: '>=6.0.0'}
dev: false
- /@jridgewell/set-array@1.1.2:
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
- engines: {node: '>=6.0.0'}
- dev: false
-
/@jridgewell/set-array@1.2.1:
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
dev: false
- /@jridgewell/sourcemap-codec@1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- dev: false
-
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
dev: false
- /@jridgewell/trace-mapping@0.3.18:
- resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: false
-
/@jridgewell/trace-mapping@0.3.25:
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
dependencies:
@@ -1383,6 +1277,10 @@ packages:
resolution: {integrity: sha512-ClaUWpt8oTzjcF0MM1P81AeWyzc1sNSJlAjMG80CbwqbFqXSNz+NpQVUC0icobt3sZn43Sn27M4pHD/Jmp3zHw==}
dev: false
+ /@shikijs/core@1.6.3:
+ resolution: {integrity: sha512-QnJKHFUW95GnlJLJGP6QLx4M69HM0KlXk+R2Y8lr/x4nAx1Yb/lsuxq4XwybuUjTxbJk+BT0g/kvn0bcsjGGHg==}
+ dev: false
+
/@types/acorn@4.0.6:
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
dependencies:
@@ -1392,8 +1290,8 @@ packages:
/@types/babel__core@7.20.5:
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
dependencies:
- '@babel/parser': 7.23.9
- '@babel/types': 7.23.9
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
'@types/babel__generator': 7.6.4
'@types/babel__template': 7.4.1
'@types/babel__traverse': 7.20.1
@@ -1402,20 +1300,24 @@ packages:
/@types/babel__generator@7.6.4:
resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
dependencies:
- '@babel/types': 7.23.9
+ '@babel/types': 7.24.7
dev: false
/@types/babel__template@7.4.1:
resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
dependencies:
- '@babel/parser': 7.23.9
- '@babel/types': 7.23.9
+ '@babel/parser': 7.24.7
+ '@babel/types': 7.24.7
dev: false
/@types/babel__traverse@7.20.1:
resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==}
dependencies:
- '@babel/types': 7.23.9
+ '@babel/types': 7.24.7
+ dev: false
+
+ /@types/cookie@0.6.0:
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
dev: false
/@types/debug@4.1.8:
@@ -1434,12 +1336,6 @@ packages:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
dev: false
- /@types/hast@2.3.5:
- resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==}
- dependencies:
- '@types/unist': 2.0.7
- dev: false
-
/@types/hast@3.0.4:
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
dependencies:
@@ -1466,12 +1362,14 @@ packages:
'@types/unist': 2.0.7
dev: false
- /@types/node@17.0.45:
- resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
+ /@types/nlcst@2.0.3:
+ resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
+ dependencies:
+ '@types/unist': 3.0.2
dev: false
- /@types/parse5@6.0.3:
- resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
+ /@types/node@17.0.45:
+ resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
dev: false
/@types/sax@1.2.4:
@@ -1571,85 +1469,85 @@ packages:
hasBin: true
dev: false
- /astro-expressive-code@0.33.5(astro@4.5.16):
- resolution: {integrity: sha512-9JAyllueMUN8JTl/h/yTdbKinNmfalEWcV11s3lSf/UJQbAZfWJuy+IlGcArZDI/CmD21GXhFHLqYthpdY33ug==}
+ /astro-expressive-code@0.35.3(astro@4.10.1):
+ resolution: {integrity: sha512-f1L1m3J3EzZHDEox6TXmuKo5fTSbaNxE/HU0S0UQmvlCowtOKnU/LOsoDwsbQSYGKz+fdLRPsCjFMiKqEoyfcw==}
peerDependencies:
astro: ^4.0.0-beta || ^3.3.0
dependencies:
- astro: 4.5.16
- hast-util-to-html: 8.0.4
- remark-expressive-code: 0.33.5
+ astro: 4.10.1
+ rehype-expressive-code: 0.35.3
dev: false
- /astro@4.5.16:
- resolution: {integrity: sha512-1nOVsMq2OJiXnG6gO0Y77vTAboGN9nLQSy/8SGazq4h6x+alzbsMbQbArBgvaLzOSUXD0m91XLs3D8bOSuavrQ==}
- engines: {node: '>=18.14.1', npm: '>=6.14.0'}
+ /astro@4.10.1:
+ resolution: {integrity: sha512-7bbnUX1CW+12suz0Do8ef1CihqVjDyUW/H/0piNHZyBE3W/VFt5GP5ZxlPzzJLoGtaXif0aXJ4iPurEem2LpdA==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
hasBin: true
dependencies:
- '@astrojs/compiler': 2.7.1
+ '@astrojs/compiler': 2.8.0
'@astrojs/internal-helpers': 0.4.0
- '@astrojs/markdown-remark': 5.0.0
- '@astrojs/telemetry': 3.0.4
- '@babel/core': 7.24.4
- '@babel/generator': 7.23.6
- '@babel/parser': 7.23.9
- '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.24.4)
- '@babel/traverse': 7.23.9
- '@babel/types': 7.23.9
+ '@astrojs/markdown-remark': 5.1.0
+ '@astrojs/telemetry': 3.1.0
+ '@babel/core': 7.24.7
+ '@babel/generator': 7.24.7
+ '@babel/parser': 7.24.7
+ '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7)
+ '@babel/traverse': 7.24.7
+ '@babel/types': 7.24.7
'@types/babel__core': 7.20.5
+ '@types/cookie': 0.6.0
acorn: 8.11.3
aria-query: 5.3.0
axobject-query: 4.0.0
boxen: 7.1.1
- chokidar: 3.5.3
+ chokidar: 3.6.0
ci-info: 4.0.0
- clsx: 2.1.0
+ clsx: 2.1.1
common-ancestor-path: 1.0.1
cookie: 0.6.0
cssesc: 3.0.0
debug: 4.3.4
deterministic-object-hash: 2.0.2
- devalue: 4.3.2
- diff: 5.1.0
+ devalue: 5.0.0
+ diff: 5.2.0
dlv: 1.1.3
dset: 3.1.3
- es-module-lexer: 1.4.1
- esbuild: 0.19.12
+ es-module-lexer: 1.5.3
+ esbuild: 0.21.4
estree-walker: 3.0.3
execa: 8.0.1
fast-glob: 3.3.2
- flattie: 1.1.0
+ flattie: 1.1.1
github-slugger: 2.0.0
gray-matter: 4.0.3
html-escaper: 3.0.3
http-cache-semantics: 4.1.1
js-yaml: 4.1.0
kleur: 4.1.5
- magic-string: 0.30.7
- mime: 3.0.0
- ora: 7.0.1
+ magic-string: 0.30.10
+ mrmime: 2.0.0
+ ora: 8.0.1
p-limit: 5.0.0
p-queue: 8.0.1
- path-to-regexp: 6.2.1
- preferred-pm: 3.1.2
+ path-to-regexp: 6.2.2
+ preferred-pm: 3.1.3
prompts: 2.4.2
rehype: 13.0.1
resolve: 1.22.8
- semver: 7.6.0
- shiki: 1.2.4
+ semver: 7.6.2
+ shiki: 1.6.3
string-width: 7.1.0
strip-ansi: 7.1.0
- tsconfck: 3.0.2
+ tsconfck: 3.1.0
unist-util-visit: 5.0.0
vfile: 6.0.1
- vite: 5.2.8
- vitefu: 0.2.5(vite@5.2.8)
- which-pm: 2.1.1
+ vite: 5.2.13
+ vitefu: 0.2.5(vite@5.2.13)
+ which-pm: 2.2.0
yargs-parser: 21.1.1
- zod: 3.22.4
- zod-to-json-schema: 3.22.5(zod@3.22.4)
+ zod: 3.23.8
+ zod-to-json-schema: 3.23.0(zod@3.23.8)
optionalDependencies:
- sharp: 0.32.6
+ sharp: 0.33.3
transitivePeerDependencies:
- '@types/node'
- less
@@ -1668,55 +1566,14 @@ packages:
dequal: 2.0.3
dev: false
- /b4a@1.6.6:
- resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==}
- requiresBuild: true
- dev: false
- optional: true
-
/bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
dev: false
- /bare-events@2.2.0:
- resolution: {integrity: sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==}
- requiresBuild: true
- dev: false
- optional: true
-
- /bare-fs@2.1.5:
- resolution: {integrity: sha512-5t0nlecX+N2uJqdxe9d18A98cp2u9BETelbjKpiVgQqzzmVNFYWEAjQHqS+2Khgto1vcwhik9cXucaj5ve2WWA==}
- requiresBuild: true
- dependencies:
- bare-events: 2.2.0
- bare-os: 2.1.3
- bare-path: 2.1.0
- streamx: 2.15.8
- dev: false
- optional: true
-
- /bare-os@2.1.3:
- resolution: {integrity: sha512-YMKOQzoMouGCrYgJ0rassKvmbTz+TYDOKKmu4JkfNXS/qKn+If1ODCMEXnmknQXfnB1PS8bR+uHu6xBgwAQXew==}
- requiresBuild: true
- dev: false
- optional: true
-
- /bare-path@2.1.0:
- resolution: {integrity: sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==}
- requiresBuild: true
- dependencies:
- bare-os: 2.1.3
- dev: false
- optional: true
-
/base-64@1.0.0:
resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
dev: false
- /base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: false
-
/bcp-47-match@2.0.3:
resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==}
dev: false
@@ -1734,24 +1591,6 @@ packages:
engines: {node: '>=8'}
dev: false
- /bl@4.1.0:
- resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
- requiresBuild: true
- dependencies:
- buffer: 5.7.1
- inherits: 2.0.4
- readable-stream: 3.6.2
- dev: false
- optional: true
-
- /bl@5.1.0:
- resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
- dependencies:
- buffer: 6.0.3
- inherits: 2.0.4
- readable-stream: 3.6.2
- dev: false
-
/boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
dev: false
@@ -1788,22 +1627,6 @@ packages:
update-browserslist-db: 1.0.13(browserslist@4.23.0)
dev: false
- /buffer@5.7.1:
- resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
- requiresBuild: true
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: false
- optional: true
-
- /buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: false
-
/camelcase@7.0.1:
resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
engines: {node: '>=14.16'}
@@ -1847,8 +1670,8 @@ packages:
resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
dev: false
- /chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ /chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
dependencies:
anymatch: 3.1.3
@@ -1862,17 +1685,6 @@ packages:
fsevents: 2.3.3
dev: false
- /chownr@1.1.4:
- resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
- requiresBuild: true
- dev: false
- optional: true
-
- /ci-info@3.8.0:
- resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
- engines: {node: '>=8'}
- dev: false
-
/ci-info@4.0.0:
resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==}
engines: {node: '>=8'}
@@ -1890,13 +1702,13 @@ packages:
restore-cursor: 4.0.0
dev: false
- /cli-spinners@2.9.0:
- resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==}
+ /cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
dev: false
- /clsx@2.1.0:
- resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==}
+ /clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
dev: false
@@ -1998,34 +1810,11 @@ packages:
character-entities: 2.0.2
dev: false
- /decompress-response@6.0.0:
- resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
- engines: {node: '>=10'}
- requiresBuild: true
- dependencies:
- mimic-response: 3.1.0
- dev: false
- optional: true
-
- /deep-extend@0.6.0:
- resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
- engines: {node: '>=4.0.0'}
- requiresBuild: true
- dev: false
- optional: true
-
/dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
dev: false
- /detect-libc@2.0.2:
- resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
- engines: {node: '>=8'}
- requiresBuild: true
- dev: false
- optional: true
-
/detect-libc@2.0.3:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
engines: {node: '>=8'}
@@ -2038,8 +1827,8 @@ packages:
base-64: 1.0.0
dev: false
- /devalue@4.3.2:
- resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
+ /devalue@5.0.0:
+ resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==}
dev: false
/devlop@1.1.0:
@@ -2048,8 +1837,8 @@ packages:
dequal: 2.0.3
dev: false
- /diff@5.1.0:
- resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
+ /diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
dev: false
@@ -2087,52 +1876,13 @@ packages:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
dev: false
- /end-of-stream@1.4.4:
- resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
- requiresBuild: true
- dependencies:
- once: 1.4.0
- dev: false
- optional: true
-
/entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
dev: false
- /es-module-lexer@1.4.1:
- resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==}
- dev: false
-
- /esbuild@0.19.12:
- resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.19.12
- '@esbuild/android-arm': 0.19.12
- '@esbuild/android-arm64': 0.19.12
- '@esbuild/android-x64': 0.19.12
- '@esbuild/darwin-arm64': 0.19.12
- '@esbuild/darwin-x64': 0.19.12
- '@esbuild/freebsd-arm64': 0.19.12
- '@esbuild/freebsd-x64': 0.19.12
- '@esbuild/linux-arm': 0.19.12
- '@esbuild/linux-arm64': 0.19.12
- '@esbuild/linux-ia32': 0.19.12
- '@esbuild/linux-loong64': 0.19.12
- '@esbuild/linux-mips64el': 0.19.12
- '@esbuild/linux-ppc64': 0.19.12
- '@esbuild/linux-riscv64': 0.19.12
- '@esbuild/linux-s390x': 0.19.12
- '@esbuild/linux-x64': 0.19.12
- '@esbuild/netbsd-x64': 0.19.12
- '@esbuild/openbsd-x64': 0.19.12
- '@esbuild/sunos-x64': 0.19.12
- '@esbuild/win32-arm64': 0.19.12
- '@esbuild/win32-ia32': 0.19.12
- '@esbuild/win32-x64': 0.19.12
+ /es-module-lexer@1.5.3:
+ resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==}
dev: false
/esbuild@0.20.2:
@@ -2166,6 +1916,37 @@ packages:
'@esbuild/win32-x64': 0.20.2
dev: false
+ /esbuild@0.21.4:
+ resolution: {integrity: sha512-sFMcNNrj+Q0ZDolrp5pDhH0nRPN9hLIM3fRPwgbLYJeSHHgnXSnbV3xYgSVuOeLWH9c73VwmEverVzupIv5xuA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.4
+ '@esbuild/android-arm': 0.21.4
+ '@esbuild/android-arm64': 0.21.4
+ '@esbuild/android-x64': 0.21.4
+ '@esbuild/darwin-arm64': 0.21.4
+ '@esbuild/darwin-x64': 0.21.4
+ '@esbuild/freebsd-arm64': 0.21.4
+ '@esbuild/freebsd-x64': 0.21.4
+ '@esbuild/linux-arm': 0.21.4
+ '@esbuild/linux-arm64': 0.21.4
+ '@esbuild/linux-ia32': 0.21.4
+ '@esbuild/linux-loong64': 0.21.4
+ '@esbuild/linux-mips64el': 0.21.4
+ '@esbuild/linux-ppc64': 0.21.4
+ '@esbuild/linux-riscv64': 0.21.4
+ '@esbuild/linux-s390x': 0.21.4
+ '@esbuild/linux-x64': 0.21.4
+ '@esbuild/netbsd-x64': 0.21.4
+ '@esbuild/openbsd-x64': 0.21.4
+ '@esbuild/sunos-x64': 0.21.4
+ '@esbuild/win32-arm64': 0.21.4
+ '@esbuild/win32-ia32': 0.21.4
+ '@esbuild/win32-x64': 0.21.4
+ dev: false
+
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
@@ -2246,20 +2027,13 @@ packages:
strip-final-newline: 3.0.0
dev: false
- /expand-template@2.0.3:
- resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
- engines: {node: '>=6'}
- requiresBuild: true
- dev: false
- optional: true
-
- /expressive-code@0.33.5:
- resolution: {integrity: sha512-UPg2jSvZEfXPiCa4MKtMoMQ5Hwiv7In5/LSCa/ukhjzZqPO48iVsCcEBgXWEUmEAQ02P0z00/xFfBmVnUKH+Zw==}
+ /expressive-code@0.35.3:
+ resolution: {integrity: sha512-XjWWUCxS4uQjPoRM98R7SNWWIYlFEaOeHm1piWv+c7coHCekuWno81thsc3g/UJ+DajNtOEsIQIAAcsBQZ8LMg==}
dependencies:
- '@expressive-code/core': 0.33.5
- '@expressive-code/plugin-frames': 0.33.5
- '@expressive-code/plugin-shiki': 0.33.5
- '@expressive-code/plugin-text-markers': 0.33.5
+ '@expressive-code/core': 0.35.3
+ '@expressive-code/plugin-frames': 0.35.3
+ '@expressive-code/plugin-shiki': 0.35.3
+ '@expressive-code/plugin-text-markers': 0.35.3
dev: false
/extend-shallow@2.0.1:
@@ -2273,12 +2047,6 @@ packages:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
dev: false
- /fast-fifo@1.3.2:
- resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
- requiresBuild: true
- dev: false
- optional: true
-
/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
@@ -2326,17 +2094,11 @@ packages:
pkg-dir: 4.2.0
dev: false
- /flattie@1.1.0:
- resolution: {integrity: sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw==}
+ /flattie@1.1.1:
+ resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==}
engines: {node: '>=8'}
dev: false
- /fs-constants@1.0.0:
- resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
- requiresBuild: true
- dev: false
- optional: true
-
/fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -2364,12 +2126,6 @@ packages:
engines: {node: '>=16'}
dev: false
- /github-from-package@0.0.0:
- resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
- requiresBuild: true
- dev: false
- optional: true
-
/github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
dev: false
@@ -2412,6 +2168,13 @@ packages:
function-bind: 1.1.2
dev: false
+ /hast-util-embedded@3.0.0:
+ resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==}
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-is-element: 3.0.0
+ dev: false
+
/hast-util-from-html@2.0.1:
resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==}
dependencies:
@@ -2423,18 +2186,6 @@ packages:
vfile-message: 4.0.2
dev: false
- /hast-util-from-parse5@7.1.2:
- resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==}
- dependencies:
- '@types/hast': 2.3.5
- '@types/unist': 2.0.7
- hastscript: 7.2.0
- property-information: 6.2.0
- vfile: 5.3.7
- vfile-location: 4.1.0
- web-namespaces: 2.0.1
- dev: false
-
/hast-util-from-parse5@8.0.1:
resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
dependencies:
@@ -2454,16 +2205,16 @@ packages:
'@types/hast': 3.0.4
dev: false
- /hast-util-is-element@3.0.0:
- resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+ /hast-util-is-body-ok-link@3.0.0:
+ resolution: {integrity: sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w==}
dependencies:
'@types/hast': 3.0.4
dev: false
- /hast-util-parse-selector@3.1.1:
- resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
+ /hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
dependencies:
- '@types/hast': 2.3.5
+ '@types/hast': 3.0.4
dev: false
/hast-util-parse-selector@4.0.0:
@@ -2472,22 +2223,16 @@ packages:
'@types/hast': 3.0.4
dev: false
- /hast-util-raw@7.2.3:
- resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==}
- dependencies:
- '@types/hast': 2.3.5
- '@types/parse5': 6.0.3
- hast-util-from-parse5: 7.1.2
- hast-util-to-parse5: 7.1.0
- html-void-elements: 2.0.1
- parse5: 6.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
- vfile: 5.3.7
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: false
-
+ /hast-util-phrasing@3.0.1:
+ resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==}
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-embedded: 3.0.0
+ hast-util-has-property: 3.0.0
+ hast-util-is-body-ok-link: 3.0.0
+ hast-util-is-element: 3.0.0
+ dev: false
+
/hast-util-raw@9.0.2:
resolution: {integrity: sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==}
dependencies:
@@ -2550,24 +2295,25 @@ packages:
- supports-color
dev: false
- /hast-util-to-html@8.0.4:
- resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==}
+ /hast-util-to-html@9.0.0:
+ resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==}
dependencies:
- '@types/hast': 2.3.5
- '@types/unist': 2.0.7
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
ccount: 2.0.1
comma-separated-tokens: 2.0.3
- hast-util-raw: 7.2.3
- hast-util-whitespace: 2.0.1
- html-void-elements: 2.0.1
+ hast-util-raw: 9.0.2
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.1.0
property-information: 6.2.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.3
zwitch: 2.0.4
dev: false
- /hast-util-to-html@9.0.0:
- resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==}
+ /hast-util-to-html@9.0.1:
+ resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==}
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.2
@@ -2605,17 +2351,6 @@ packages:
- supports-color
dev: false
- /hast-util-to-parse5@7.1.0:
- resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==}
- dependencies:
- '@types/hast': 2.3.5
- comma-separated-tokens: 2.0.3
- property-information: 6.2.0
- space-separated-tokens: 2.0.2
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: false
-
/hast-util-to-parse5@8.0.0:
resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
dependencies:
@@ -2643,8 +2378,13 @@ packages:
unist-util-find-after: 5.0.0
dev: false
- /hast-util-whitespace@2.0.1:
- resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+ /hast-util-to-text@4.0.2:
+ resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
+ hast-util-is-element: 3.0.0
+ unist-util-find-after: 5.0.0
dev: false
/hast-util-whitespace@3.0.0:
@@ -2653,18 +2393,18 @@ packages:
'@types/hast': 3.0.4
dev: false
- /hastscript@7.2.0:
- resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
+ /hastscript@8.0.0:
+ resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
dependencies:
- '@types/hast': 2.3.5
+ '@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
- hast-util-parse-selector: 3.1.1
+ hast-util-parse-selector: 4.0.0
property-information: 6.2.0
space-separated-tokens: 2.0.2
dev: false
- /hastscript@8.0.0:
- resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
+ /hastscript@9.0.0:
+ resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==}
dependencies:
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
@@ -2677,14 +2417,14 @@ packages:
resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
dev: false
- /html-void-elements@2.0.1:
- resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
- dev: false
-
/html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
dev: false
+ /html-whitespace-sensitive-tag-names@3.0.0:
+ resolution: {integrity: sha512-KlClZ3/Qy5UgvpvVvDomGhnQhNWH5INE8GwvSIQ9CWt1K0zbbXrl7eN5bWaafOZgtmO3jMPwUqmrmEwinhPq1w==}
+ dev: false
+
/http-cache-semantics@4.1.1:
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
dev: false
@@ -2694,24 +2434,10 @@ packages:
engines: {node: '>=16.17.0'}
dev: false
- /ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: false
-
/import-meta-resolve@4.0.0:
resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
dev: false
- /inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- dev: false
-
- /ini@1.3.8:
- resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
- requiresBuild: true
- dev: false
- optional: true
-
/inline-style-parser@0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
dev: false
@@ -2829,6 +2555,11 @@ packages:
engines: {node: '>=12'}
dev: false
+ /is-unicode-supported@2.0.0:
+ resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==}
+ engines: {node: '>=18'}
+ dev: false
+
/is-wsl@3.1.0:
resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
engines: {node: '>=16'}
@@ -2910,9 +2641,9 @@ packages:
p-locate: 5.0.0
dev: false
- /log-symbols@5.1.0:
- resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
- engines: {node: '>=12'}
+ /log-symbols@6.0.0:
+ resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
+ engines: {node: '>=18'}
dependencies:
chalk: 5.3.0
is-unicode-supported: 1.3.0
@@ -2935,9 +2666,8 @@ packages:
yallist: 4.0.0
dev: false
- /magic-string@0.30.7:
- resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==}
- engines: {node: '>=12'}
+ /magic-string@0.30.10:
+ resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
dev: false
@@ -3532,12 +3262,6 @@ packages:
picomatch: 2.3.1
dev: false
- /mime@3.0.0:
- resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
- engines: {node: '>=10.0.0'}
- hasBin: true
- dev: false
-
/mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@@ -3548,24 +3272,10 @@ packages:
engines: {node: '>=12'}
dev: false
- /mimic-response@3.1.0:
- resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ /mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
engines: {node: '>=10'}
- requiresBuild: true
- dev: false
- optional: true
-
- /minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- requiresBuild: true
- dev: false
- optional: true
-
- /mkdirp-classic@0.5.3:
- resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
- requiresBuild: true
dev: false
- optional: true
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -3577,32 +3287,17 @@ packages:
hasBin: true
dev: false
- /napi-build-utils@1.0.2:
- resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
- requiresBuild: true
- dev: false
- optional: true
-
/nlcst-to-string@3.1.1:
resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==}
dependencies:
'@types/nlcst': 1.0.1
dev: false
- /node-abi@3.54.0:
- resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==}
- engines: {node: '>=10'}
- requiresBuild: true
+ /nlcst-to-string@4.0.0:
+ resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
dependencies:
- semver: 7.6.0
- dev: false
- optional: true
-
- /node-addon-api@6.1.0:
- resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
- requiresBuild: true
+ '@types/nlcst': 2.0.3
dev: false
- optional: true
/node-releases@2.0.14:
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
@@ -3630,14 +3325,6 @@ packages:
boolbase: 1.0.0
dev: false
- /once@1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- requiresBuild: true
- dependencies:
- wrappy: 1.0.2
- dev: false
- optional: true
-
/onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
@@ -3652,18 +3339,18 @@ packages:
mimic-fn: 4.0.0
dev: false
- /ora@7.0.1:
- resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==}
- engines: {node: '>=16'}
+ /ora@8.0.1:
+ resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==}
+ engines: {node: '>=18'}
dependencies:
chalk: 5.3.0
cli-cursor: 4.0.0
- cli-spinners: 2.9.0
+ cli-spinners: 2.9.2
is-interactive: 2.0.0
- is-unicode-supported: 1.3.0
- log-symbols: 5.1.0
- stdin-discarder: 0.1.0
- string-width: 6.1.0
+ is-unicode-supported: 2.0.0
+ log-symbols: 6.0.0
+ stdin-discarder: 0.2.2
+ string-width: 7.1.0
strip-ansi: 7.1.0
dev: false
@@ -3752,8 +3439,15 @@ packages:
unist-util-visit-children: 2.0.2
dev: false
- /parse5@6.0.1:
- resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
+ /parse-latin@7.0.0:
+ resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ '@types/unist': 3.0.2
+ nlcst-to-string: 4.0.0
+ unist-util-modify-children: 4.0.0
+ unist-util-visit-children: 3.0.0
+ vfile: 6.0.1
dev: false
/parse5@7.1.2:
@@ -3781,8 +3475,8 @@ packages:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: false
- /path-to-regexp@6.2.1:
- resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
+ /path-to-regexp@6.2.2:
+ resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==}
dev: false
/periscopic@3.1.0:
@@ -3814,13 +3508,13 @@ packages:
find-up: 4.1.0
dev: false
- /postcss-nested@6.0.1(postcss@8.4.35):
+ /postcss-nested@6.0.1(postcss@8.4.38):
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.38
postcss-selector-parser: 6.0.15
dev: false
@@ -3832,15 +3526,6 @@ packages:
util-deprecate: 1.0.2
dev: false
- /postcss@8.4.35:
- resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.7
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: false
-
/postcss@8.4.38:
resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14}
@@ -3850,29 +3535,8 @@ packages:
source-map-js: 1.2.0
dev: false
- /prebuild-install@7.1.1:
- resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
- engines: {node: '>=10'}
- hasBin: true
- requiresBuild: true
- dependencies:
- detect-libc: 2.0.2
- expand-template: 2.0.3
- github-from-package: 0.0.0
- minimist: 1.2.8
- mkdirp-classic: 0.5.3
- napi-build-utils: 1.0.2
- node-abi: 3.54.0
- pump: 3.0.0
- rc: 1.2.8
- simple-get: 4.0.1
- tar-fs: 2.1.1
- tunnel-agent: 0.6.0
- dev: false
- optional: true
-
- /preferred-pm@3.1.2:
- resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==}
+ /preferred-pm@3.1.3:
+ resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==}
engines: {node: '>=10'}
dependencies:
find-up: 5.0.0
@@ -3898,51 +3562,44 @@ packages:
resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
dev: false
- /pump@3.0.0:
- resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
- requiresBuild: true
- dependencies:
- end-of-stream: 1.4.4
- once: 1.4.0
- dev: false
- optional: true
-
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: false
- /queue-tick@1.0.1:
- resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
- requiresBuild: true
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
dev: false
- optional: true
- /rc@1.2.8:
- resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
- hasBin: true
- requiresBuild: true
+ /rehype-expressive-code@0.35.3:
+ resolution: {integrity: sha512-kj43Rg+WzYUs8RRr6XyBr60pnrIZEgbmn9yJoV6qka1UDpcx7r8icn6Q2uSAgaLtlEUy+HCPgQJraOZrA53LOQ==}
dependencies:
- deep-extend: 0.6.0
- ini: 1.3.8
- minimist: 1.2.8
- strip-json-comments: 2.0.1
+ expressive-code: 0.35.3
dev: false
- optional: true
- /readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
+ /rehype-format@5.0.0:
+ resolution: {integrity: sha512-kM4II8krCHmUhxrlvzFSptvaWh280Fr7UGNJU5DCMuvmAwGCNmGfi9CvFAQK6JDjsNoRMWQStglK3zKJH685Wg==}
dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
+ '@types/hast': 3.0.4
+ hast-util-embedded: 3.0.0
+ hast-util-is-element: 3.0.0
+ hast-util-phrasing: 3.0.1
+ hast-util-whitespace: 3.0.0
+ html-whitespace-sensitive-tag-names: 3.0.0
+ rehype-minify-whitespace: 6.0.0
+ unist-util-visit-parents: 6.0.1
dev: false
- /readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
+ /rehype-minify-whitespace@6.0.0:
+ resolution: {integrity: sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA==}
dependencies:
- picomatch: 2.3.1
+ '@types/hast': 3.0.4
+ hast-util-embedded: 3.0.0
+ hast-util-is-element: 3.0.0
+ hast-util-whitespace: 3.0.0
+ unist-util-is: 6.0.0
dev: false
/rehype-parse@9.0.0:
@@ -3989,14 +3646,6 @@ packages:
- supports-color
dev: false
- /remark-expressive-code@0.33.5:
- resolution: {integrity: sha512-E4CZq3AuUXLu6or0AaDKkgsHYqmnm4ZL8/+1/8YgwtKcogHwTMRJfQtxkZpth90QQoNUpsapvm5x5n3Np2OC9w==}
- dependencies:
- expressive-code: 0.33.5
- hast-util-to-html: 8.0.4
- unist-util-visit: 4.1.2
- dev: false
-
/remark-gfm@4.0.0:
resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
dependencies:
@@ -4049,6 +3698,16 @@ packages:
unist-util-visit: 4.1.2
dev: false
+ /remark-smartypants@3.0.1:
+ resolution: {integrity: sha512-qyshfCl2eLO0i0558e79ZJsfojC5wjnYLByjt0FmjJQN6aYwcRxpoj784LZJSoWCdnA2ubh5rLNGb8Uur/wDng==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ retext: 9.0.0
+ retext-smartypants: 6.1.0
+ unified: 11.0.4
+ unist-util-visit: 5.0.0
+ dev: false
+
/remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
dependencies:
@@ -4083,6 +3742,14 @@ packages:
unified: 10.1.2
dev: false
+ /retext-latin@4.0.0:
+ resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ parse-latin: 7.0.0
+ unified: 11.0.4
+ dev: false
+
/retext-smartypants@5.2.0:
resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==}
dependencies:
@@ -4092,6 +3759,14 @@ packages:
unist-util-visit: 4.1.2
dev: false
+ /retext-smartypants@6.1.0:
+ resolution: {integrity: sha512-LDPXg95346bqFZnDMHo0S7Rq5p64+B+N8Vz733+wPMDtwb9rCOs9LIdIEhrUOU+TAywX9St+ocQWJt8wrzivcQ==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-visit: 5.0.0
+ dev: false
+
/retext-stringify@3.1.0:
resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==}
dependencies:
@@ -4100,6 +3775,14 @@ packages:
unified: 10.1.2
dev: false
+ /retext-stringify@4.0.0:
+ resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unified: 11.0.4
+ dev: false
+
/retext@8.1.0:
resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==}
dependencies:
@@ -4109,6 +3792,15 @@ packages:
unified: 10.1.2
dev: false
+ /retext@9.0.0:
+ resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ retext-latin: 4.0.0
+ retext-stringify: 4.0.0
+ unified: 11.0.4
+ dev: false
+
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -4145,10 +3837,6 @@ packages:
queue-microtask: 1.2.3
dev: false
- /safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- dev: false
-
/sax@1.2.4:
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
dev: false
@@ -4174,21 +3862,11 @@ packages:
lru-cache: 6.0.0
dev: false
- /sharp@0.32.6:
- resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==}
- engines: {node: '>=14.15.0'}
- requiresBuild: true
- dependencies:
- color: 4.2.3
- detect-libc: 2.0.2
- node-addon-api: 6.1.0
- prebuild-install: 7.1.1
- semver: 7.6.0
- simple-get: 4.0.1
- tar-fs: 3.0.5
- tunnel-agent: 0.6.0
+ /semver@7.6.2:
+ resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
+ engines: {node: '>=10'}
+ hasBin: true
dev: false
- optional: true
/sharp@0.33.3:
resolution: {integrity: sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==}
@@ -4238,14 +3916,10 @@ packages:
'@shikijs/core': 1.2.4
dev: false
- /shikiji-core@0.9.19:
- resolution: {integrity: sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==}
- dev: false
-
- /shikiji@0.9.19:
- resolution: {integrity: sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==}
+ /shiki@1.6.3:
+ resolution: {integrity: sha512-lE1/YGlzFY0hQSyEfsZj18xGrTWxyhFQkaiILALqTBZPbJeYFWpbUhlmTGPOupYB/qC+H6sV4UznJzcEh3WMHQ==}
dependencies:
- shikiji-core: 0.9.19
+ '@shikijs/core': 1.6.3
dev: false
/signal-exit@3.0.7:
@@ -4257,22 +3931,6 @@ packages:
engines: {node: '>=14'}
dev: false
- /simple-concat@1.0.1:
- resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
- requiresBuild: true
- dev: false
- optional: true
-
- /simple-get@4.0.1:
- resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
- requiresBuild: true
- dependencies:
- decompress-response: 6.0.0
- once: 1.4.0
- simple-concat: 1.0.1
- dev: false
- optional: true
-
/simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
requiresBuild: true
@@ -4295,11 +3953,6 @@ packages:
sax: 1.2.4
dev: false
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
- engines: {node: '>=0.10.0'}
- dev: false
-
/source-map-js@1.2.0:
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'}
@@ -4318,23 +3971,10 @@ packages:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
dev: false
- /stdin-discarder@0.1.0:
- resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- bl: 5.1.0
- dev: false
-
- /streamx@2.15.8:
- resolution: {integrity: sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==}
- requiresBuild: true
- dependencies:
- fast-fifo: 1.3.2
- queue-tick: 1.0.1
- optionalDependencies:
- bare-events: 2.2.0
+ /stdin-discarder@0.2.2:
+ resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
+ engines: {node: '>=18'}
dev: false
- optional: true
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@@ -4354,15 +3994,6 @@ packages:
strip-ansi: 7.1.0
dev: false
- /string-width@6.1.0:
- resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==}
- engines: {node: '>=16'}
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 10.3.0
- strip-ansi: 7.1.0
- dev: false
-
/string-width@7.1.0:
resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==}
engines: {node: '>=18'}
@@ -4372,12 +4003,6 @@ packages:
strip-ansi: 7.1.0
dev: false
- /string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
- dependencies:
- safe-buffer: 5.2.1
- dev: false
-
/stringify-entities@4.0.3:
resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
dependencies:
@@ -4414,13 +4039,6 @@ packages:
engines: {node: '>=12'}
dev: false
- /strip-json-comments@2.0.1:
- resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
- engines: {node: '>=0.10.0'}
- requiresBuild: true
- dev: false
- optional: true
-
/style-to-object@0.4.1:
resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==}
dependencies:
@@ -4445,52 +4063,6 @@ packages:
engines: {node: '>= 0.4'}
dev: false
- /tar-fs@2.1.1:
- resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
- requiresBuild: true
- dependencies:
- chownr: 1.1.4
- mkdirp-classic: 0.5.3
- pump: 3.0.0
- tar-stream: 2.2.0
- dev: false
- optional: true
-
- /tar-fs@3.0.5:
- resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==}
- requiresBuild: true
- dependencies:
- pump: 3.0.0
- tar-stream: 3.1.7
- optionalDependencies:
- bare-fs: 2.1.5
- bare-path: 2.1.0
- dev: false
- optional: true
-
- /tar-stream@2.2.0:
- resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
- engines: {node: '>=6'}
- requiresBuild: true
- dependencies:
- bl: 4.1.0
- end-of-stream: 1.4.4
- fs-constants: 1.0.0
- inherits: 2.0.4
- readable-stream: 3.6.2
- dev: false
- optional: true
-
- /tar-stream@3.1.7:
- resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
- requiresBuild: true
- dependencies:
- b4a: 1.6.6
- fast-fifo: 1.3.2
- streamx: 2.15.8
- dev: false
- optional: true
-
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@@ -4511,8 +4083,8 @@ packages:
resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
dev: false
- /tsconfck@3.0.2:
- resolution: {integrity: sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q==}
+ /tsconfck@3.1.0:
+ resolution: {integrity: sha512-CMjc5zMnyAjcS9sPLytrbFmj89st2g+JYtY/c02ug4Q+CZaAtCgbyviI0n1YvjZE/pzoc6FbNsINS13DOL1B9w==}
engines: {node: ^18 || >=20}
hasBin: true
peerDependencies:
@@ -4528,14 +4100,6 @@ packages:
dev: false
optional: true
- /tunnel-agent@0.6.0:
- resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
- requiresBuild: true
- dependencies:
- safe-buffer: 5.2.1
- dev: false
- optional: true
-
/type-fest@2.19.0:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
@@ -4595,16 +4159,17 @@ packages:
array-iterate: 2.0.1
dev: false
- /unist-util-position-from-estree@2.0.0:
- resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+ /unist-util-modify-children@4.0.0:
+ resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==}
dependencies:
'@types/unist': 3.0.2
+ array-iterate: 2.0.1
dev: false
- /unist-util-position@4.0.4:
- resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+ /unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
dependencies:
- '@types/unist': 2.0.7
+ '@types/unist': 3.0.2
dev: false
/unist-util-position@5.0.0:
@@ -4638,6 +4203,12 @@ packages:
'@types/unist': 2.0.7
dev: false
+ /unist-util-visit-children@3.0.0:
+ resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
/unist-util-visit-parents@5.1.3:
resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
dependencies:
@@ -4683,13 +4254,6 @@ packages:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: false
- /vfile-location@4.1.0:
- resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==}
- dependencies:
- '@types/unist': 2.0.7
- vfile: 5.3.7
- dev: false
-
/vfile-location@5.0.2:
resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
dependencies:
@@ -4728,8 +4292,8 @@ packages:
vfile-message: 4.0.2
dev: false
- /vite@5.2.8:
- resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==}
+ /vite@5.2.13:
+ resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -4763,7 +4327,7 @@ packages:
fsevents: 2.3.3
dev: false
- /vitefu@0.2.5(vite@5.2.8):
+ /vitefu@0.2.5(vite@5.2.13):
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
@@ -4771,7 +4335,7 @@ packages:
vite:
optional: true
dependencies:
- vite: 5.2.8
+ vite: 5.2.13
dev: false
/web-namespaces@2.0.1:
@@ -4791,8 +4355,8 @@ packages:
path-exists: 4.0.0
dev: false
- /which-pm@2.1.1:
- resolution: {integrity: sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ==}
+ /which-pm@2.2.0:
+ resolution: {integrity: sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==}
engines: {node: '>=8.15'}
dependencies:
load-yaml-file: 0.2.0
@@ -4823,12 +4387,6 @@ packages:
strip-ansi: 7.1.0
dev: false
- /wrappy@1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- requiresBuild: true
- dev: false
- optional: true
-
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
dev: false
@@ -4852,18 +4410,22 @@ packages:
engines: {node: '>=12.20'}
dev: false
- /zod-to-json-schema@3.22.5(zod@3.22.4):
- resolution: {integrity: sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==}
+ /zod-to-json-schema@3.23.0(zod@3.23.8):
+ resolution: {integrity: sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag==}
peerDependencies:
- zod: ^3.22.4
+ zod: ^3.23.3
dependencies:
- zod: 3.22.4
+ zod: 3.23.8
dev: false
/zod@3.22.4:
resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
dev: false
+ /zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+ dev: false
+
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
dev: false
diff --git a/docs/src/assets/v5/create-token-example-image.png b/docs/src/assets/v5/create-token-example-image.png
new file mode 100644
index 00000000..328eb8dd
Binary files /dev/null and b/docs/src/assets/v5/create-token-example-image.png differ
diff --git a/docs/src/assets/v5/use-token-example-image.png b/docs/src/assets/v5/use-token-example-image.png
new file mode 100644
index 00000000..ebd5751b
Binary files /dev/null and b/docs/src/assets/v5/use-token-example-image.png differ
diff --git a/docs/src/content/docs/overview.md b/docs/src/content/docs/overview.md
index 5498ccae..9365dfd6 100644
--- a/docs/src/content/docs/overview.md
+++ b/docs/src/content/docs/overview.md
@@ -9,6 +9,7 @@ Welcome to the documentation for Nikcio.UHeadless! Here you will find resources
- [Version 2.0.0+](../v2/start/): Documentation for version 2.0.0 and above.
- [Version 3.0.0+](../v3/start/): Documentation for version 3.0.0 and above.
- [Version 4.0.0+](../v4/start/): Documentation for version 4.0.0 and above.
+- [Version 5.0.0+](../v5/start/): Documentation for version 5.0.0 and above.
Choose the appropriate version and explore the documentation tailored to your needs.
diff --git a/docs/src/content/docs/v5/extending/content.md b/docs/src/content/docs/v5/extending/content.md
new file mode 100644
index 00000000..3085da7c
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/content.md
@@ -0,0 +1,291 @@
+---
+title: Extending Content Data Structures in Nikcio.UHeadless
+description: Learn how to extend the content model in Nikcio.UHeadless.
+---
+
+Nikcio.UHeadless provides flexibility to extend and replace content data structures to accommodate your specific needs. This documentation outlines some examples of how you can extend the content data structures.
+
+## Example custom content model extending the existing content model:
+
+1. Create your content model by inheriting from `Nikcio.UHeadless.Defaults.ContentItems.ContentItem`:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+
+///
+/// This example demonstrates how to create a custom content item with custom properties and methods.
+///
+///
+/// The can be used to resolve services from the DI container like you normally would with dependency injection.
+/// It's important to contain any logic to the specific property or method within the property or method itself if possiable.
+/// As GraphQL will only call the properties or methods that are requestedm and may not call all of them.
+///
+[GraphQLName("CustomContentItemExampleContentItem")]
+public class ContentItem : Nikcio.UHeadless.Defaults.ContentItems.ContentItem
+{
+ public ContentItem(CreateCommand command) : base(command)
+ {
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+```
+
+When making your model you can use properties and methods to expose data. When using methods you can add parameters to the method to make it more dynamic. You can also use the `IResolverContext` to resolve services from the DI container. Every parameter except the `IResolverContext` will be a part of the GraphQL schema and will be a paramter you pass to the query.
+
+2. Extend the query where you want the model to be present. In this example, we extend the `ContentByIdQuery` query:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.ContentItems;
+using Nikcio.UHeadless.Defaults.ContentItems;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class CustomContentItemExampleQuery : ContentByIdQuery
+{
+ [GraphQLName("CustomContentItemExampleQuery")]
+ public override ContentItem? ContentById(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The id to fetch.")] int id,
+ [GraphQLDescription("The context of the request.")] QueryContext? inContext = null)
+ {
+ return base.ContentById(resolverContext, id, inContext);
+ }
+
+ protected override ContentItem? CreateContentItem(IPublishedContent? publishedContent, IContentItemRepository contentItemRepository, IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(contentItemRepository);
+
+ return contentItemRepository.GetContentItem(new Nikcio.UHeadless.Defaults.ContentItems.ContentItem.CreateCommand()
+ {
+ PublishedContent = publishedContent,
+ ResolverContext = resolverContext,
+ StatusCode = publishedContent == null ? StatusCodes.Status404NotFound : StatusCodes.Status200OK,
+ Redirect = null
+ });
+ }
+}
+
+```
+
+If you don't already have the `ContentByIdQuery` you don't need to override the `ContentById` method as you don't need to alter the `GraphQLName` which is the name of the query in the schema. This defaults to the query names you would normally use when using the query. (In this example `contentById`)
+
+3. Register the query in Nikcio.UHeadless:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+4. Open `/graphql` and observe your new model for the `CustomContentItemExampleQuery` query.
+
+## Example extended the content model with public access settings:
+
+1. Create your access rule model:
+
+```csharp
+using HotChocolate;
+
+[GraphQLDescription("Represents an access rule for the restrict public access settings.")]
+public class AccessRuleModel
+{
+ public AccessRuleModel(string? ruleType, string? ruleValue)
+ {
+ RuleType = ruleType ?? string.Empty;
+ RuleValue = ruleValue ?? string.Empty;
+ }
+
+ [GraphQLDescription("Gets the type of protection to grant access to the content item.")]
+ public string RuleType { get; set; }
+
+ [GraphQLDescription("Gets the name of who has access to the content item.")]
+ public string RuleValue { get; set; }
+}
+
+```
+
+2. Create your Permissions model:
+
+```csharp
+using HotChocolate;
+
+[GraphQLDescription("Represents a restrict public access settings of a content item.")]
+public class PermissionsModel
+{
+ public PermissionsModel()
+ {
+ AccessRules = [];
+ }
+
+ [GraphQLDescription("Gets the url to the login page.")]
+ public string? UrlLogin { get; set; }
+
+ [GraphQLDescription("Gets the url to the error page.")]
+ public string? UrlNoAccess { get; set; }
+
+ [GraphQLDescription("Gets the access rules for the restrict public access settings.")]
+ public List AccessRules { get; set; }
+}
+```
+
+3. Create your content model:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.ContentItems;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Models.PublishedContent;
+using Umbraco.Cms.Core.PublishedCache;
+using Umbraco.Cms.Core.Routing;
+using Umbraco.Cms.Core.Services;
+
+///
+/// This example demonstrates how to create a custom content item that includes the public access settings from Umbraco.
+/// with this information you can block access to content based on the user using the site.
+///
+///
+/// This example uses the default class from UHeadless
+/// but could also be implemented using the class.
+///
+[GraphQLName("PublishAccessExampleContentItem")]
+public class ContentItem : Nikcio.UHeadless.Defaults.ContentItems.ContentItem
+{
+ public ContentItem(CreateCommand command) : base(command)
+ {
+ }
+
+ [GraphQLDescription("Gets the restrict public access settings of the content item.")]
+ public PermissionsModel? Permissions(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ ILogger logger = resolverContext.Service>();
+ IContentService contentService = resolverContext.Service();
+ IPublicAccessService publicAccessService = resolverContext.Service();
+ IContentItemRepository contentItemRepository = resolverContext.Service>();
+
+ if (PublishedContent == null)
+ {
+ logger.LogWarning("Content is null");
+ return null;
+ }
+
+ IContent? content = contentService.GetById(PublishedContent.Id);
+
+ if (content == null)
+ {
+ logger.LogWarning("Content from content service is null. Id: {ContentId}", PublishedContent.Id);
+ return null;
+ }
+
+ PublicAccessEntry? entry = publicAccessService.GetEntryForContent(content);
+
+ if (entry == null)
+ {
+ logger.LogWarning("Public access entry is null. ContentId: {ContentId}", PublishedContent.Id);
+ return null;
+ }
+
+ IPublishedContentCache? contentCache = contentItemRepository.GetCache();
+
+ if (contentCache == null)
+ {
+ throw new InvalidOperationException("The content cache is not available");
+ }
+
+ IPublishedContent? loginContent = contentCache.GetById(entry.LoginNodeId);
+ IPublishedContent? noAccessContent = contentCache.GetById(entry.NoAccessNodeId);
+
+ var permissions = new PermissionsModel
+ {
+ UrlLogin = loginContent?.Url(resolverContext.Service(), resolverContext.Culture(), UrlMode.Absolute),
+ UrlNoAccess = noAccessContent?.Url(resolverContext.Service(), resolverContext.Culture(), UrlMode.Absolute)
+ };
+
+ foreach (PublicAccessRule rule in entry.Rules)
+ {
+ permissions.AccessRules.Add(new AccessRuleModel(rule.RuleType, rule.RuleValue));
+ }
+
+ return permissions;
+ }
+}
+```
+
+4. Extend the query where you want the model to be present. In this example, we extend the `ContentByIdQuery` query:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.ContentItems;
+using Nikcio.UHeadless.Defaults.ContentItems;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class PublishAccessExampleQuery : ContentByIdQuery
+{
+ [GraphQLName("publishAccessExampleQuery")]
+ public override ContentItem? ContentById(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The id to fetch.")] int id,
+ [GraphQLDescription("The context of the request.")] QueryContext? inContext = null)
+ {
+ return base.ContentById(resolverContext, id, inContext);
+ }
+
+ protected override ContentItem? CreateContentItem(IPublishedContent? publishedContent, IContentItemRepository contentItemRepository, IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(contentItemRepository);
+
+ return contentItemRepository.GetContentItem(new Nikcio.UHeadless.Defaults.ContentItems.ContentItem.CreateCommand()
+ {
+ PublishedContent = publishedContent,
+ ResolverContext = resolverContext,
+ StatusCode = publishedContent == null ? StatusCodes.Status404NotFound : StatusCodes.Status200OK,
+ Redirect = null
+ });
+ }
+}
+
+```
+
+3. Register the query in Nikcio.UHeadless:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+4. Open `/graphql` and observe your new model for the `publishAccessExampleQuery` query.
diff --git a/docs/src/content/docs/v5/extending/media.md b/docs/src/content/docs/v5/extending/media.md
new file mode 100644
index 00000000..604dc668
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/media.md
@@ -0,0 +1,102 @@
+---
+title: Extending Media Data Structures in Nikcio.UHeadless
+description: Learn how to extend the media model in Nikcio.UHeadless.
+---
+
+Nikcio.UHeadless provides flexibility to extend and replace media data structures to accommodate your specific needs. This documentation outlines three examples of how you can extend the media data structures.
+
+## Example custom media model extending the existing media model:
+
+1. Create your own media model by inheriting from `Nikcio.UHeadless.Defaults.MediaItems.MediaItem`:
+
+```csharp
+using HotChocolate.Resolvers;
+using HotChocolate;
+
+///
+/// This example demonstrates how to create a custom media item with custom properties and methods.
+///
+///
+/// The can be used to resolve services from the DI container like you normally would with dependency injection.
+/// It's important to contain any logic to the specific property or method within the property or method itself if possiable.
+/// As GraphQL will only call the properties or methods that are requestedm and may not call all of them.
+///
+[GraphQLName("CustomMediaItemExampleMediaItem")]
+public class MediaItem : Nikcio.UHeadless.Defaults.MediaItems.MediaItem
+{
+ public MediaItem(CreateCommand command) : base(command)
+ {
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+```
+
+When making your model you can use properties and methods to expose data. When using methods you can add parameters to the method to make it more dynamic. You can also use the `IResolverContext` to resolve services from the DI container. Every parameter except the `IResolverContext` will be a part of the GraphQL schema and will be a paramter you pass to the query.
+
+2. Extend the query where you want the model to be present. In this example, we extend the `MediaByIdQuery` query:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.MediaItems;
+using Nikcio.UHeadless.MediaItems;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class CustomMediaItemExampleQuery : MediaByIdQuery
+{
+ [GraphQLName("CustomMediaItemExampleQuery")]
+ public override MediaItem? MediaById(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The id to fetch.")] int id)
+ {
+ return base.MediaById(resolverContext, id);
+ }
+
+ protected override MediaItem? CreateMediaItem(IPublishedContent? media, IMediaItemRepository mediaItemRepository, IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(mediaItemRepository);
+
+ return mediaItemRepository.GetMediaItem(new Nikcio.UHeadless.Media.MediaItemBase.CreateCommand()
+ {
+ PublishedContent = media,
+ ResolverContext = resolverContext,
+ });
+ }
+}
+```
+
+If you don't already have the `MediaByIdQuery` you don't need to override the `MediaById` method as you don't need to alter the `GraphQLName` which is the name of the query in the schema. This defaults to the query names you would normally use when using the query. (In this example `MediaById`)
+
+3. Register the query in Nikcio.UHeadless:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+4. Open `/graphql` and observe your new model for the `CustomMediaItemExampleQuery` query.
diff --git a/docs/src/content/docs/v5/extending/member.md b/docs/src/content/docs/v5/extending/member.md
new file mode 100644
index 00000000..049ac5d6
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/member.md
@@ -0,0 +1,103 @@
+---
+title: Extending Member Data Structures in Nikcio.UHeadless
+description: Learn how to extend the member model in Nikcio.UHeadless.
+---
+
+Nikcio.UHeadless provides flexibility to extend and replace member data structures to accommodate your specific needs. This documentation outlines three examples of how you can extend the member data structures.
+
+## Example custom member model extending the existing member model:
+
+1. Create your own member model by inheriting from `Nikcio.UHeadless.Defaults.Members.MemberItem`:
+
+```csharp
+using HotChocolate.Resolvers;
+using HotChocolate;
+
+///
+/// This example demonstrates how to create a custom member item with custom properties and methods.
+///
+///
+/// The can be used to resolve services from the DI container like you normally would with dependency injection.
+/// It's important to contain any logic to the specific property or method within the property or method itself if possiable.
+/// As GraphQL will only call the properties or methods that are requestedm and may not call all of them.
+///
+[GraphQLName("CustomMemberItemExampleMemberItem")]
+public class MemberItem : Nikcio.UHeadless.Defaults.Members.MemberItem
+{
+ public MemberItem(CreateCommand command) : base(command)
+ {
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+```
+
+When making your model you can use properties and methods to expose data. When using methods you can add parameters to the method to make it more dynamic. You can also use the `IResolverContext` to resolve services from the DI container. Every parameter except the `IResolverContext` will be a part of the GraphQL schema and will be a paramter you pass to the query.
+
+2. Extend the query where you want the model to be present. In this example, we extend the `MemberByIdQuery` query:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.Members;
+using Nikcio.UHeadless.MemberItems;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class CustomMemberItemExampleQuery : MemberByIdQuery
+{
+ [GraphQLName("CustomMemberItemExampleQuery")]
+ public override MemberItem? MemberById(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The id to fetch.")] int id)
+ {
+ return base.MemberById(resolverContext, id);
+ }
+
+ protected override MemberItem? CreateMemberItem(IPublishedContent? member, IMemberItemRepository memberItemRepository, IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(memberItemRepository);
+
+ return memberItemRepository.GetMemberItem(new Nikcio.UHeadless.Members.MemberItemBase.CreateCommand()
+ {
+ PublishedContent = member,
+ ResolverContext = resolverContext,
+ });
+ }
+}
+
+```
+
+If you don't already have the `MemberByIdQuery` you don't need to override the `MemberById` method as you don't need to alter the `GraphQLName` which is the name of the query in the schema. This defaults to the query names you would normally use when using the query. (In this example `MemberById`)
+
+3. Register the query in Nikcio.UHeadless:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+4. Open `/graphql` and observe your new model for the `CustomMemberItemExampleQuery` query.
diff --git a/docs/src/content/docs/v5/extending/properties/block-list.md b/docs/src/content/docs/v5/extending/properties/block-list.md
new file mode 100644
index 00000000..0a6eee1f
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/properties/block-list.md
@@ -0,0 +1,109 @@
+---
+title: Extending the Block list model in Nikcio.UHeadless
+description: Learn how to extend the block list model in Nikcio.UHeadless.
+---
+
+Nikcio.UHeadless provides flexibility to extend and replace the block list model to accommodate your specific needs.
+
+## Example
+
+1. Create your block list model:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+
+namespace Code.Examples.Headless.CustomBlockListExample;
+
+[GraphQLName("CustomBlockList")]
+public class BlockList : Nikcio.UHeadless.Defaults.Properties.BlockList
+{
+ public BlockList(CreateCommand command) : base(command)
+ {
+ }
+
+ protected override BlockListItem CreateBlock(Umbraco.Cms.Core.Models.Blocks.BlockListItem blockListItem, IResolverContext resolverContext)
+ {
+ return new BlockListItem(blockListItem, resolverContext);
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+
+public class BlockListItem : Nikcio.UHeadless.Defaults.Properties.BlockListItem
+{
+ public BlockListItem(Umbraco.Cms.Core.Models.Blocks.BlockListItem blockListItem, IResolverContext resolverContext) : base(blockListItem, resolverContext)
+ {
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+
+```
+
+2. Register the model in the UHeadless options:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddEditorMapping(Constants.PropertyEditors.Aliases.BlockList);
+})
+```
+
+There are two methods available to register the model in the UHeadless options:
+
+| Method Name | Description |
+|-------------------|--------------------------------------------------------------------------------|
+| AddAliasMapping | Adds a mapping of a type to a content type alias and property type alias. |
+| AddEditorMapping | Adds a mapping of a type to an editor alias. |
+
+
+## Resolver context extensions
+
+The `IResolverContext` contains the following extensions that can be used to get information about the current query:
+
+| Extension Name | Description |
+|----------------------|----------------------------------------------------------------------------------------------------------------------------------|
+| IncludePreview() | Gets whether to include preview content in the query. |
+| Culture() | Gets the culture of the query. |
+| Segment() | Gets the segment of the query. |
+| Fallback() | Gets the fallback of the query to be used for property values. |
+| PublishedContent() |Gets the published content from the scoped data. This can be different depending on where in the query resolution the code runs. |
diff --git a/docs/src/content/docs/v5/extending/properties/custom-editor.md b/docs/src/content/docs/v5/extending/properties/custom-editor.md
new file mode 100644
index 00000000..4df99144
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/properties/custom-editor.md
@@ -0,0 +1,58 @@
+---
+title: Adding your custom editor model in Nikcio.UHeadless
+description: Learn how to add your custom editor model in Nikcio.UHeadless.
+---
+
+Nikcio.UHeadless provides flexibility to add your models for custom property editors.
+
+## Example
+
+1. Create your custom editor model:
+
+```csharp
+using HotChocolate.Resolvers;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Common.Properties;
+
+public class CustomEditor : PropertyValue
+{
+ public CustomEditor(CreateCommand command) : base(command)
+ {
+ ArgumentNullException.ThrowIfNull(command);
+
+ IResolverContext resolverContext = command.ResolverContext;
+ Value = PublishedProperty.Value(PublishedValueFallback, resolverContext.Culture(), resolverContext.Segment(), resolverContext.Fallback());
+ }
+
+ public string? Value { get; }
+}
+```
+
+2. Register the model in the UHeadless options:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddEditorMapping("customEditorAlias");
+})
+```
+
+There are two methods available to register the model in the UHeadless options:
+
+| Method Name | Description |
+|-------------------|--------------------------------------------------------------------------------|
+| AddAliasMapping | Adds a mapping of a type to a content type alias and property type alias. |
+| AddEditorMapping | Adds a mapping of a type to an editor alias. |
+
+
+## Resolver context extensions
+
+The `IResolverContext` contains the following extensions that can be used to get information about the current query:
+
+| Extension Name | Description |
+|----------------------|----------------------------------------------------------------------------------------------------------------------------------|
+| IncludePreview() | Gets whether to include preview content in the query. |
+| Culture() | Gets the culture of the query. |
+| Segment() | Gets the segment of the query. |
+| Fallback() | Gets the fallback of the query to be used for property values. |
+| PublishedContent() |Gets the published content from the scoped data. This can be different depending on where in the query resolution the code runs. |
diff --git a/docs/src/content/docs/v5/extending/properties/media-picker.md b/docs/src/content/docs/v5/extending/properties/media-picker.md
new file mode 100644
index 00000000..97a8af84
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/properties/media-picker.md
@@ -0,0 +1,105 @@
+---
+title: Extending the Media Picker model in Nikcio.UHeadless
+description: Learn how to extend the media picker model in Nikcio.UHeadless.
+---
+
+Nikcio.UHeadless provides flexibility to extend and replace the media picker model to accommodate your specific needs.
+
+## Example 1
+
+1. Create your own media picker model:
+
+```csharp
+using HotChocolate.Resolvers;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+namespace Code.Examples.Headless.CustomMediaPickerExample;
+
+public class MediaPicker : Nikcio.UHeadless.Defaults.Properties.MediaPicker
+{
+ public MediaPicker(CreateCommand command) : base(command)
+ {
+ }
+
+ protected override MediaPickerItem CreateMediaPickerItem(IPublishedContent publishedContent, IResolverContext resolverContext)
+ {
+ return new MediaPickerItem(publishedContent, resolverContext);
+ }
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+
+public class MediaPickerItem : Nikcio.UHeadless.Defaults.Properties.MediaPickerItem
+{
+ public MediaPickerItem(IPublishedContent publishedContent, IResolverContext resolverContext) : base(publishedContent, resolverContext)
+ {
+ }
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+```
+
+2. Register the model in the UHeadless options:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddEditorMapping(Constants.PropertyEditors.Aliases.MediaPicker);
+})
+```
+
+There are two methods available to register the model in the UHeadless options:
+
+| Method Name | Description |
+|-------------------|--------------------------------------------------------------------------------|
+| AddAliasMapping | Adds a mapping of a type to a content type alias and property type alias. |
+| AddEditorMapping | Adds a mapping of a type to an editor alias. |
+
+
+## Resolver context extensions
+
+The `IResolverContext` contains the following extensions that can be used to get information about the current query:
+
+| Extension Name | Description |
+|----------------------|----------------------------------------------------------------------------------------------------------------------------------|
+| IncludePreview() | Gets whether to include preview content in the query. |
+| Culture() | Gets the culture of the query. |
+| Segment() | Gets the segment of the query. |
+| Fallback() | Gets the fallback of the query to be used for property values. |
+| PublishedContent() |Gets the published content from the scoped data. This can be different depending on where in the query resolution the code runs. |
diff --git a/docs/src/content/docs/v5/extending/properties/overview.md b/docs/src/content/docs/v5/extending/properties/overview.md
new file mode 100644
index 00000000..c6b96a76
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/properties/overview.md
@@ -0,0 +1,49 @@
+---
+title: Nikcio.UHeadless Extension Documentation
+description: Get an overview of the Nikcio.UHeadless extension documentation.
+---
+
+Welcome to the Nikcio.UHeadless Extension Documentation! Here, you'll find resources to help you extend and customize various features of Nikcio.UHeadless. Please select the topic you want to explore:
+
+- [Block List](./block-list): Learn how to extend and replace the block list property with your custom implementation.
+- [Custom Editor](./custom-editor): Discover how to create and integrate your custom editor for property values.
+- [Media Picker](./media-picker): Find out how to extend and customize the media picker data.
+- [Rich Text](./rich-text): Learn how to extend and replace the rich text editor with your custom implementation.
+
+## Dependency Injection
+
+Dependency injection is supported via the `IResolverContext` which is available on the command in the contructor of the property model. This allows you to resolve services and other dependencies needed for your custom implementation.
+
+You can also inject the `IResolverContext` into methods on the property model to resolve services and other dependencies needed for your custom implementation.
+
+### Examples
+
+```csharp
+public CustomEditor(CreateCommand command) : base(command)
+{
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+}
+```
+
+```csharp
+public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+{
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+}
+```
+
+## Resolver context extensions
+
+The `IResolverContext` contains the following extensions that can be used to get information about the current query:
+
+| Extension Name | Description |
+|----------------------|----------------------------------------------------------------------------------------------------------------------------------|
+| IncludePreview() | Gets whether to include preview content in the query. |
+| Culture() | Gets the culture of the query. |
+| Segment() | Gets the segment of the query. |
+| Fallback() | Gets the fallback of the query to be used for property values. |
+| PublishedContent() |Gets the published content from the scoped data. This can be different depending on where in the query resolution the code runs. |
diff --git a/docs/src/content/docs/v5/extending/properties/rich-text.md b/docs/src/content/docs/v5/extending/properties/rich-text.md
new file mode 100644
index 00000000..a8a38cc2
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/properties/rich-text.md
@@ -0,0 +1,74 @@
+---
+title: Extending the Rich text model in Nikcio.UHeadless
+description: Learn how to extend the rich text model in Nikcio.UHeadless.
+---
+
+Nikcio.UHeadless provides flexibility to extend and replace the rich text model to accommodate your specific needs.
+
+## Example
+
+1. Create your rich text model:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+
+namespace Code.Examples.Headless.CustomRichTextExample;
+
+[GraphQLName("CustomRichText")]
+public class RichText : Nikcio.UHeadless.Defaults.Properties.RichText
+{
+ public RichText(CreateCommand command) : base(command)
+ {
+ }
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+```
+
+2. Register the model in the UHeadless options:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddEditorMapping(Constants.PropertyEditors.Aliases.TinyMce);
+})
+```
+
+There are two methods available to register the model in the UHeadless options:
+
+| Method Name | Description |
+|-------------------|--------------------------------------------------------------------------------|
+| AddAliasMapping | Adds a mapping of a type to a content type alias and property type alias. |
+| AddEditorMapping | Adds a mapping of a type to an editor alias. |
+
+
+## Resolver context extensions
+
+The `IResolverContext` contains the following extensions that can be used to get information about the current query:
+
+| Extension Name | Description |
+|----------------------|----------------------------------------------------------------------------------------------------------------------------------|
+| IncludePreview() | Gets whether to include preview content in the query. |
+| Culture() | Gets the culture of the query. |
+| Segment() | Gets the segment of the query. |
+| Fallback() | Gets the fallback of the query to be used for property values. |
+| PublishedContent() |Gets the published content from the scoped data. This can be different depending on where in the query resolution the code runs. |
diff --git a/docs/src/content/docs/v5/extending/skybrud-redirects.md b/docs/src/content/docs/v5/extending/skybrud-redirects.md
new file mode 100644
index 00000000..13dd612f
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/skybrud-redirects.md
@@ -0,0 +1,112 @@
+---
+title: Integrating Skybrud.Umbraco.Redirects in Nikcio.UHeadless
+description: Learn how to integrate Skybrud.Umbraco.Redirects in Nikcio.UHeadless.
+---
+
+The Nikcio.UHeadless package provides a way to integrate the Skybrud.Umbraco.Redirects package in your Umbraco Headless project. This allows you to query for content like you would usually do but with the added benefit of getting redirect information from SKybrud.Umbraco.Redirects.
+
+## Example
+
+:::note
+This example is based on `Skybrud.Umbraco.Redirects` version `13.0.4`
+:::
+
+### Step 1: Install the Skybrud.Umbraco.Redirects package
+
+First, you need to install the `Skybrud.Umbraco.Redirects` package. You can do this by running the following command in the Package Manager Console:
+
+```bash
+Install-Package Skybrud.Umbraco.Redirects
+```
+
+### Step 2: Create a query class
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.ContentItems;
+using Nikcio.UHeadless.Defaults.ContentItems;
+using Skybrud.Umbraco.Redirects.Models;
+using Skybrud.Umbraco.Redirects.Services;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class SkybrudRedirectsExampleQuery : ContentByRouteQuery
+{
+ [GraphQLName("skybrudRedirectsExampleQuery")]
+ public override Task ContentByRouteAsync(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The route to fetch. Example '/da/frontpage/'.")] string route,
+ [GraphQLDescription("The base url for the request. Example: 'https://localhost:4000'. Default is the current domain")] string baseUrl = "",
+ [GraphQLDescription("The context of the request.")] QueryContext? inContext = null)
+ {
+ return base.ContentByRouteAsync(resolverContext, route, baseUrl, inContext);
+ }
+
+ protected override async Task CreateContentItemFromRouteAsync(IResolverContext resolverContext, string route, string baseUrl)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+ ArgumentNullException.ThrowIfNull(baseUrl);
+
+ IRedirectsService redirectService = resolverContext.Service();
+
+ var uri = new Uri($"{baseUrl.TrimEnd('/')}{route}");
+ IRedirect? redirect = redirectService.GetRedirectByUri(uri);
+
+ if (redirect != null)
+ {
+ IContentItemRepository contentItemRepository = resolverContext.Service>();
+
+ string redirectUrl = redirect.Destination.FullUrl;
+
+ if (redirect.ForwardQueryString)
+ {
+ redirectUrl = redirectUrl.TrimEnd('/') + uri.Query;
+ }
+
+ return contentItemRepository.GetContentItem(new ContentItem.CreateCommand()
+ {
+ PublishedContent = null,
+ ResolverContext = resolverContext,
+ Redirect = new()
+ {
+ IsPermanent = redirect.IsPermanent,
+ RedirectUrl = redirectUrl,
+ },
+ StatusCode = redirect.IsPermanent ? StatusCodes.Status301MovedPermanently : StatusCodes.Status307TemporaryRedirect,
+ });
+ }
+
+ return await base.CreateContentItemFromRouteAsync(resolverContext, route, baseUrl).ConfigureAwait(false);
+ }
+}
+```
+
+This query class extends the `ContentByRouteQuery` query and overrides the `CreateContentItemFromRouteAsync` method. This method is called when a content item is fetched by route. In this method, we get the `IRedirectsService` from the `IResolverContext` and fetch the redirect for the route. If a redirect is found, we create a new `ContentItem` with the redirect information.
+
+### Step 3: Add the query to the UHeadless configuration
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+### Step 4: Query the content
+
+Now you can query the content by route and get the redirect information:
+
+```graphql
+query {
+ skybrudRedirectsExampleQuery(baseUrl: "", route: "/") {
+ redirect {
+ isPermanent
+ redirectUrl
+ }
+ }
+}
+```
+
+This will return the redirect information if a redirect is found for the route. If no redirect is found, the content item will be fetched as usual.
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/extending/url-tracker.md b/docs/src/content/docs/v5/extending/url-tracker.md
new file mode 100644
index 00000000..b61c80b8
--- /dev/null
+++ b/docs/src/content/docs/v5/extending/url-tracker.md
@@ -0,0 +1,288 @@
+---
+title: Integrating UrlTracker in Nikcio.UHeadless
+description: Learn how to integrate UrlTracker in Nikcio.UHeadless.
+---
+
+The Nikcio.UHeadless package provides a way to integrate the UrlTracker package into your UHeadless project. This allows you to use the UrlTracker package for redirects in your UHeadless project.
+
+## Example
+
+:::note
+This example is based on `UrlTracker` version `13.2.0-alpha0003`
+:::
+
+### Step 1: Install the UrlTracker package
+
+First, you need to install the `UrlTracker` package. You can do this by running the following command in the Package Manager Console:
+
+```bash
+Install-Package UrlTracker
+```
+
+### Step 2: Create a query class
+
+```csharp
+using System.Text.RegularExpressions;
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Microsoft.Extensions.Options;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.ContentItems;
+using Nikcio.UHeadless.Defaults.ContentItems;
+using Umbraco.Cms.Core.Configuration.Models;
+using Umbraco.Cms.Core.Models.PublishedContent;
+using Umbraco.Cms.Core.Routing;
+using UrlTracker.Core;
+using UrlTracker.Core.Intercepting.Models;
+using UrlTracker.Core.Models;
+using UrlTracker.Web.Processing;
+
+namespace Code.Examples.Headless.UrlTrackerExample;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class UrlTrackerExampleQuery : ContentByRouteQuery
+{
+ [GraphQLName("urlTrackerExampleQuery")]
+ public override Task ContentByRouteAsync(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The route to fetch. Example '/da/frontpage/'.")] string route,
+ [GraphQLDescription("The base url for the request. Example: 'https://localhost:4000'. Default is the current domain")] string baseUrl = "",
+ [GraphQLDescription("The context of the request.")] QueryContext? inContext = null)
+ {
+ return base.ContentByRouteAsync(resolverContext, route, baseUrl, inContext);
+ }
+
+ protected override async Task CreateContentItemFromRouteAsync(IResolverContext resolverContext, string route, string baseUrl)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+ ArgumentNullException.ThrowIfNull(baseUrl);
+
+ IRequestInterceptFilterCollection requestInterceptFilters = resolverContext.Service();
+
+ var requestedUrl = Url.Parse($"{baseUrl.TrimEnd('/')}{route}");
+
+ if (!await requestInterceptFilters.EvaluateCandidateAsync(requestedUrl).ConfigureAwait(false))
+ {
+ return await base.CreateContentItemFromRouteAsync(resolverContext, route, baseUrl).ConfigureAwait(false);
+ }
+
+ IInterceptService interceptService = resolverContext.Service();
+
+ IIntercept intercept = await interceptService.GetAsync(requestedUrl).ConfigureAwait(false);
+
+ if (intercept.Info is not Redirect redirect)
+ {
+ return await base.CreateContentItemFromRouteAsync(resolverContext, route, baseUrl).ConfigureAwait(false);
+ }
+
+ IContentItemRepository contentItemRepository = resolverContext.Service>();
+
+ string? redirectUrl = redirect.Target switch
+ {
+
+ UrlTargetStrategy target => GetUrl(resolverContext, redirect, target, requestedUrl),
+ ContentPageTargetStrategy target => GetUrl(resolverContext, redirect, target, requestedUrl),
+ _ => throw new NotImplementedException(),
+ };
+
+ return contentItemRepository.GetContentItem(new ContentItem.CreateCommand()
+ {
+ PublishedContent = null,
+ ResolverContext = resolverContext,
+ Redirect = new()
+ {
+ IsPermanent = redirect.Permanent,
+ RedirectUrl = redirectUrl,
+ },
+ StatusCode = redirectUrl == null ? StatusCodes.Status410Gone : GetStatusCode(redirect),
+ });
+ }
+
+ private static int GetStatusCode(Redirect redirect)
+ {
+ return redirect.Permanent ? StatusCodes.Status301MovedPermanently : StatusCodes.Status307TemporaryRedirect;
+ }
+
+ private static string? GetUrl(IResolverContext resolverContext, Redirect redirect, UrlTargetStrategy target, Url requestedUrl)
+ {
+ string urlString = target.Url;
+
+ if (redirect.Source is RegexSourceStrategy regexsource)
+ {
+ urlString = Regex.Replace((requestedUrl.Path + requestedUrl.Query).TrimStart('/'), regexsource.Value, urlString, RegexOptions.None, TimeSpan.FromMilliseconds(100));
+ }
+
+ var url = Url.Parse(urlString);
+
+ if (redirect.RetainQuery)
+ {
+ url.Query = requestedUrl.Query;
+ }
+
+ if (url.AvailableUrlTypes.Contains(UrlTracker.Core.Models.UrlType.Absolute))
+ {
+ RequestHandlerSettings requestHandlerSettingsValue = resolverContext.Service>().Value;
+ return url.ToString(UrlTracker.Core.Models.UrlType.Absolute, requestHandlerSettingsValue.AddTrailingSlash);
+ }
+ else
+ {
+ return url.ToString();
+ }
+ }
+
+ private static string? GetUrl(IResolverContext resolverContext, Redirect redirect, ContentPageTargetStrategy target, Url requestedUrl)
+ {
+ if (target.Content is null)
+ {
+ return null;
+ }
+
+ IPublishedUrlProvider publishedUrlProvider = resolverContext.Service();
+ var url = Url.Parse(target.Content.Url(publishedUrlProvider, target.Culture.DefaultIfNullOrWhiteSpace(null), UrlMode.Absolute));
+
+ if (redirect.RetainQuery)
+ {
+ url.Query = requestedUrl.Query;
+ }
+
+ if (url.AvailableUrlTypes.Contains(UrlTracker.Core.Models.UrlType.Absolute))
+ {
+ RequestHandlerSettings requestHandlerSettingsValue = resolverContext.Service>().Value;
+ return url.ToString(UrlTracker.Core.Models.UrlType.Absolute, requestHandlerSettingsValue.AddTrailingSlash);
+ }
+ else
+ {
+ return url.ToString();
+ }
+ }
+}
+```
+
+This query class extends the `ContentByRouteQuery` query and overrides the `CreateContentItemFromRouteAsync` method. This method is called when a content item is fetched by route. In this method, we get the `IInterceptService` from the `IResolverContext` and fetch the redirect for the route. If a redirect is found, we create a new `ContentItem` with the redirect information.
+
+### Step 3: Register the query class
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+### Step 4: Query the content
+
+Now you can query the content by route and get the redirect information:
+
+```graphql
+query {
+ urlTrackerExampleQuery(baseUrl: "", route: "/") {
+ redirect {
+ isPermanent
+ redirectUrl
+ }
+ }
+}
+```
+
+## Track error status codes
+
+The UrlTracker package also allows you to track error status codes to get recommendations about missing redirects. You can create a mutation to track these error status codes from your frontend like this:
+
+```csharp
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.Authorization;
+using UrlTracker.Middleware.Background;
+
+namespace Code.Examples.Headless.UrlTrackerExample;
+
+[ExtendObjectType(typeof(HotChocolateMutationObject))]
+public class TrackErrorStatusCodeMutation : IGraphQLMutation
+{
+ public const string PolicyName = "TrackErrorStatusCode";
+
+ public const string ClaimValue = "track.error.statuscode.mutation";
+
+ [GraphQLIgnore]
+ public virtual void ApplyConfiguration(UHeadlessOptions options)
+ {
+ ArgumentNullException.ThrowIfNull(options);
+
+ options.UmbracoBuilder.Services.AddAuthorizationBuilder().AddPolicy(PolicyName, policy =>
+ {
+ if (options.DisableAuthorization)
+ {
+ policy.AddRequirements(new AlwaysAllowAuthoriaztionRequirement());
+ return;
+ }
+
+ policy.AddAuthenticationSchemes(DefaultAuthenticationSchemes.UHeadless);
+
+ policy.RequireAuthenticatedUser();
+
+ policy.RequireClaim(DefaultClaims.UHeadlessScope, ClaimValue);
+ });
+ }
+
+ public async Task TrackErrorStatusCodeAsync(
+ IResolverContext resolverContext,
+ [GraphQLDescription("Status code of the client error.")] int statusCode,
+ [GraphQLDescription("The URL that generated the client error.")] string url,
+ [GraphQLDescription("The time and date at which the client error was generated")] DateTime timestamp,
+ [GraphQLDescription("The URL from which the current URL is requested")] string? referrer)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ ILogger logger = resolverContext.Service>();
+ switch (statusCode)
+ {
+ case StatusCodes.Status404NotFound:
+ IClientErrorProcessorQueue clientErrorProcessorQueue = resolverContext.Service();
+ await clientErrorProcessorQueue.WriteAsync(new ClientErrorProcessorItem(url, timestamp, referrer)).ConfigureAwait(false);
+ break;
+ case StatusCodes.Status500InternalServerError:
+ logger.LogError("Internal server error occurred at {Timestamp} for URL {Url} with referrer {Referrer}", timestamp, url, referrer);
+ break;
+ default:
+ logger.LogWarning("Client error occurred at {Timestamp} for URL {Url} with referrer {Referrer} and status code {StatusCode}", timestamp, url, referrer, statusCode);
+ break;
+ }
+
+ return new TrackErrorStatusCodeResponse
+ {
+ Success = true
+ };
+ }
+}
+
+public sealed class TrackErrorStatusCodeResponse
+{
+ public required bool Success { get; init; }
+}
+```
+
+This mutation class allows you to track error status codes from your frontend. You can use this mutation to track client errors like `404` and `500` errors. You can also track the time and date at which the client error was generated and the URL from which the current URL is requested.
+
+### Register the mutation class
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddMutation();
+})
+```
+
+### Query the mutation
+
+Now you can query the mutation to track the error status codes:
+
+```graphql
+mutation {
+ trackErrorStatusCode(statusCode: 404, url: "https://my-website.com/page-not-found", timestamp: "2022-01-01T00:00:00Z", referrer: "https://my-website.com") {
+ success
+ }
+}
+```
diff --git a/docs/src/content/docs/v5/fundamentals/getting-started.md b/docs/src/content/docs/v5/fundamentals/getting-started.md
new file mode 100644
index 00000000..7e5aba4c
--- /dev/null
+++ b/docs/src/content/docs/v5/fundamentals/getting-started.md
@@ -0,0 +1,146 @@
+---
+title: Getting Started with Nikcio.UHeadless
+description: Learn how to get started with Nikcio.UHeadless.
+---
+
+This guide will walk you through the process of integrating Nikcio.UHeadless into your Umbraco solution. By following these steps, you'll be able to create a headless GraphQL interface for your Umbraco CMS.
+
+## Installation
+
+To get started, follow the steps below:
+
+### Step 1: Install the package
+
+Install the Nikcio.UHeadless package using the following command:
+
+```shell
+dotnet add Nikcio.UHeadless
+```
+
+### Step 2: Add the extensions to the `Program.cs` file
+
+In your `Program.cs` file, add the necessary extensions by following the code snippet below:
+
+Namespaces:
+
+```csharp
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.ContentItems;
+```
+
+On the `UmbracoBuilder`, add the following code:
+
+```csharp
+builder.CreateUmbracoBuilder()
+ // Default Umbraco configuration
+ .AddUHeadless(options =>
+ {
+ options.DisableAuthorization = true; // Change this later when adding authentication - See documentation
+
+ options.AddDefaults();
+
+ options.AddQuery();
+ options.AddQuery();
+ })
+ .Build();
+```
+
+Then after the `app.BootUmbracoAsync()` method, add the following code:
+
+```csharp
+await app.BootUmbracoAsync();
+
+app.UseAuthentication();
+app.UseAuthorization();
+
+GraphQLEndpointConventionBuilder graphQLEndpointBuilder = app.MapUHeadless();
+
+// Only enable the GraphQL IDE in development
+if (!builder.Environment.IsDevelopment())
+{
+ graphQLEndpointBuilder.WithOptions(new GraphQLServerOptions()
+ {
+ Tool =
+ {
+ Enable = false,
+ }
+ });
+}
+
+app.UseUmbraco()
+ // Default Umbraco configuration
+```
+
+The `.AddUHeadless()` method adds the services needed for Nikcio.UHeadless to run, while `app.MapUHeadless()` adds the endpoint from where you interact with the GraphQL interface. These extensions provide a range of options that can be customized. To learn more about available options, refer to the [UHeadless options](../reference/options) and [UHeadless endpoint options](../reference/endpoint-options) documentation.
+
+### Step 3: Find the GraphQL endpoint
+
+By default, the GraphQL endpoint can be accessed at `/graphql` in your application.
+
+### Step 4: Make your first query
+
+To get started, try querying your content using their GUIDs or routes. For example with the query below:
+
+__Tip: GUIDs can be found in the info tab when viewing content in the backoffice__
+
+```graphql
+query {
+ contentByGuid(id: "dcf18a51-6919-4cf8-89d1-36b94ce4d963") {
+ id
+ key
+ name
+ statusCode
+ templateId
+ updateDate
+ url(urlMode: ABSOLUTE)
+ urlSegment
+ }
+}
+```
+
+This query fetches a content item with the given GUID.
+
+Congratulations! You have successfully integrated Nikcio.UHeadless into your Umbraco solution.
+
+## Adding a more queries
+
+To add a more queries to Nikcio.UHeadless, you can include the following code in your `Program.cs` file:
+
+```csharp
+.AddUHeadless(options =>
+{
+ // Existing configuration
+
+ options.AddQuery();
+})
+```
+
+This example demonstrates how to add the `ContentByIdQuery` query to Nikcio.UHeadless. By including this code, you will enable the ability to query a content item by the numeric ID instead of the GUID:
+
+```graphql
+query {
+ contentById(id: 1050) {
+ id
+ key
+ name
+ statusCode
+ templateId
+ updateDate
+ url(urlMode: ABSOLUTE)
+ urlSegment
+ }
+}
+```
+
+To explore the available queries and how to use them, refer to the following documentation:
+
+- [Learn how to query properties](../querying/properties)
+- [Querying Content](../querying/content)
+- [Querying Media](../querying/media)
+- [Querying Members](../querying/members)
+
+## Next steps
+
+- [Security Considerations](../security)
+
+If you have any questions or need further assistance, don't hesitate to reach out to us. Happy coding with Nikcio.UHeadless
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/fundamentals/querying/content.md b/docs/src/content/docs/v5/fundamentals/querying/content.md
new file mode 100644
index 00000000..5e8db349
--- /dev/null
+++ b/docs/src/content/docs/v5/fundamentals/querying/content.md
@@ -0,0 +1,38 @@
+---
+title: Content Queries
+description: Learn how to query content in Nikcio.UHeadless.
+---
+
+The Nikcio.UHeadless package provides various content queries that allow you to retrieve content items in different ways from Umbraco CMS.
+
+## Queries
+
+You can add any query to the UHeadless options as seen here:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+The following content queries are available:
+
+| Query class Name | Description | Needed claim values |
+|------------------------------|---------------------------------------------|-----------------------------------------------------|
+| ContentAtRootQuery | Gets all the content items at root level. | content.at.root.query or global.content.read |
+| ContentByContentTypeQuery | Gets all the content items by content type. | content.by.contentType.query or global.content.read |
+| ContentByGuidQuery | Gets a content item by Guid. | content.by.guid.query or global.content.read |
+| ContentByIdQuery | Gets a content item by id. | content.by.id.query or global.content.read |
+| ContentByRouteQuery | Gets a content item by a route. | content.by.route.query or global.content.read |
+| ContentByTagQuery | Gets content items by tag. | content.by.tag.query or global.content.read |
+
+You can explore these queries and their parameters in the UI provided at `/graphql` when you have added them to the UHeadless options as seen above.
+
+The claim values are needed when having authorization enabled. You can read more about authorization and how to create tokens in the [Security Considerations](../security) section.
+
+A special case for claim values are for the member picker editor. To access the data of the member picker you will need one of the following claim values: `property.values.member.picker` or `global.member.read`.
+
+## Next steps
+
+- [Building your property query](./properties)
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/fundamentals/querying/media.md b/docs/src/content/docs/v5/fundamentals/querying/media.md
new file mode 100644
index 00000000..a1f8e9a8
--- /dev/null
+++ b/docs/src/content/docs/v5/fundamentals/querying/media.md
@@ -0,0 +1,36 @@
+---
+title: Media Queries
+description: Learn how to query media in Nikcio.UHeadless.
+---
+
+The Nikcio.UHeadless package provides various media queries that allow you to retrieve media items in different ways from Umbraco CMS.
+
+## Queries
+
+You can add any query to the UHeadless options as seen here:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+The following content queries are available:
+
+| Query class Name | Description | Needed claim values |
+|------------------------------|---------------------------------------------|-----------------------------------------------------|
+| MediaAtRootQuery | Gets all the media items at root level. | media.at.root.query or global.media.read |
+| MediaByContentTypeQuery | Gets all the media items by content type. | media.by.contentType.query or global.media.read |
+| MediaByGuidQuery | Gets a Media item by Guid. | media.by.guid.query or global.media.read |
+| MediaByIdQuery | Gets a Media item by id. | media.by.id.query or global.media.read |
+
+You can explore these queries and their parameters in the UI provided at `/graphql` when you have added them to the UHeadless options as seen above.
+
+The claim values are needed when having authorization enabled. You can read more about authorization and how to create tokens in the [Security Considerations](../security) section.
+
+A special case for claim values are for the member picker editor. To access the data of the member picker you will need one of the following claim values: `property.values.member.picker` or `global.member.read`.
+
+## Next steps
+
+- [Building your property query](./properties)
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/fundamentals/querying/members.md b/docs/src/content/docs/v5/fundamentals/querying/members.md
new file mode 100644
index 00000000..58c12b5b
--- /dev/null
+++ b/docs/src/content/docs/v5/fundamentals/querying/members.md
@@ -0,0 +1,41 @@
+---
+title: Member Queries
+description: Learn how to query members in Nikcio.UHeadless.
+---
+
+The Nikcio.UHeadless package provides various member queries that allow you to retrieve member data from Umbraco CMS.
+The Nikcio.UHeadless package provides various media queries that allow you to retrieve media items in different ways from Umbraco CMS.
+
+## Queries
+
+You can add any query to the UHeadless options as seen here:
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+The following content queries are available:
+
+| Query class Name | Description | Needed claim values |
+|-------------------------------|---------------------------------------------|-------------------------------------------------------------|
+| FindMembersByDisplayNameQuery | Finds members by display name. | find.members.by.display.name.query or global.member.read |
+| FindMembersByEmailQuery | Finds members by email. | find.members.by.email.query or global.member.read |
+| FindMembersByRoleQuery | Finds members by role. | find.members.by.role.query or global.member.read |
+| FindMembersByUsernameQuery | Finds members by username. | find.members.by.username.query or global.member.read |
+| MemberByEmailQuery | Gets a member by email. | member.by.email.query or global.member.read |
+| MemberByGuidQuery | Gets a member by Guid. | member.by.guid.query or global.member.read |
+| MemberByIdQuery | Gets a member by id. | member.by.id.query or global.member.read |
+| MemberByUsernameQuery | Gets a member by username. | member.by.username.query or global.member.read |
+
+You can explore these queries and their parameters in the UI provided at `/graphql` when you have added them to the UHeadless options as seen above.
+
+The claim values are needed when having authorization enabled. You can read more about authorization and how to create tokens in the [Security Considerations](../security) section.
+
+A special case for claim values are for the member picker editor. To access the data of the member picker you will need one of the following claim values: `property.values.member.picker` or `global.member.read`.
+
+## Next steps
+
+- [Building your property query](./properties)
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/fundamentals/querying/properties.md b/docs/src/content/docs/v5/fundamentals/querying/properties.md
new file mode 100644
index 00000000..483faa8d
--- /dev/null
+++ b/docs/src/content/docs/v5/fundamentals/querying/properties.md
@@ -0,0 +1,74 @@
+---
+title: Building Your Property Query
+description: Learn how to build your property query in Nikcio.UHeadless.
+---
+
+In GraphQL, queries are used to request specific data from a server. When building a property query in GraphQL, you can use fragments to organize and reuse common selections of fields. Fragments allow you to define a set of fields that can be included in multiple queries, reducing duplication and making queries more modular.
+
+## Quering properties
+
+To query properties you use a list of property aliases that you want to fetch. This is possible on content, media and member models. To query properties you use the content, content compositions, media or member types created in Umbraco. Example:
+
+```graphql
+query {
+ contentByRoute(baseUrl: "", route: "/") {
+ properties {
+ ... on IArticle {
+ title {
+ value
+ }
+ articleDate {
+ value
+ }
+ author {
+ items {
+ name
+ }
+ }
+ }
+ __typename
+ }
+ }
+}
+```
+
+This works by the properties getting the type of content your fetching and then fetching the properties based on that type. In this example we have created a content type called `Article` in Umbraco and if the content item we find with our query matches the `Article` type we fetch the properties `title`, `articleDate` and `author`.
+
+The `__typename` field is used to get the type of the content item we fetch. This can help you figure out what properties are available on the content item you fetch. In this example if the `__typename` field returns `Article` we know that the properties `title`, `articleDate` and `author` are available on the content item.
+
+This is because all types of content, media and member types which have properties have a matching type and interface in the GraphQL schema.
+
+For this example we will see the following in the GraphQL schema:
+
+```graphql
+type Article implements IArticleControls & IContentControls & IHeaderControls & IMainImageControls & ISEOControls & IVisibilityControls & IArticle {
+
+# ... the fields of the type ...
+
+}
+```
+
+Here we can see that the `Article` type implements the `IArticle` interface. This means that we can fetch the properties of the `IArticle` interface on the `Article` type. This is why we can fetch the properties `title`, `articleDate` and `author` on the `Article` type.
+
+Other than is we can see multiple other interfaces that the `Article` type implements. This means that we can fetch the properties of those interfaces on the `Article` type as well. This is useful when you have compositions in Umbraco that you want to fetch properties from.
+
+For example we can see that the `IArticleControls` interface has the following properties:
+
+```graphql
+type ArticleControls implements IArticleControls {
+ """
+ Enter the date for the article
+ """
+ articleDate: DateTimePicker
+
+ author: ContentPicker
+
+ categories: ContentPicker
+}
+```
+
+This means that we can use a fragment selection on the `IArticleControls` interface to fetch the properties `articleDate`, `author` and `categories` on the any type that has this compostion in Umbraco.
+
+:::note
+When fetching properties you need to use the interfaces (They are prefixed with `I` on the type name) instead of the concrete types as the concrete types don't always return the expected values due to the matching rules in GraphQL.
+:::
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/fundamentals/security.md b/docs/src/content/docs/v5/fundamentals/security.md
new file mode 100644
index 00000000..047cfc2c
--- /dev/null
+++ b/docs/src/content/docs/v5/fundamentals/security.md
@@ -0,0 +1,313 @@
+---
+title: Security Considerations
+description: Learn about what areas to consider when securing your Nikcio.UHeadless application.
+---
+
+When using Nikcio.UHeadless, it is important to consider security measures to protect your GraphQL data and ensure that access to sensitive information is properly controlled. This section highlights some key security considerations and provides guidance on implementing security measures.
+
+## Using Authentication and Authorization in Nikcio.UHeadless
+
+To enable authentication and authorization in Nikcio.UHeadless follow the code example below:
+
+### Step 1: Configure the Services in the `Program.cs` file
+
+In the `AddUHeadless` options add the following code snippet:
+
+:::note
+The `.AddAuth()` call must be the first thing in the options
+:::
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddAuth(new()
+ {
+ ApiKey = builder.Configuration.GetValue("UHeadless:ApiKey") ?? throw new InvalidOperationException("No value for UHeadless:ApiKey was found"),
+ Secret = builder.Configuration.GetValue("UHeadless:Secret") ?? throw new InvalidOperationException("No value for UHeadless:Secret was found"),
+ });
+
+ // Other configuration
+})
+```
+
+The `ApiKey` can be any value over 32 characters long. This value is used in the `X-UHeadless-Api-Key` header when creating tokens used for quering the GraphQL endpoint.
+
+The `Secret` can be any value over 64 characters long. This value is used as the signing key when creating the JWT tokens used for quering the GraphQL endpoint.
+
+:::note
+You can provide the `ApiKey` and `Secret` from anywhere this example shows loading them from the `appsettings.json` file.
+:::
+
+Also make sure to add the following code snippet to the request pipeline after the `app.BootUmbracoAsync()` method:
+
+```csharp
+app.UseAuthentication();
+app.UseAuthorization();
+```
+
+### Step 2: Create a token for queries to the GraphQL endpoint
+
+Once the configuration above have been added all the default queries in the package will automatically be protected and require a token to be queried. To create a token run the application, go to `/graphql` and run the following query:
+
+```graphql
+mutation {
+ createToken(claims: [
+ {
+ name: "headless-scope",
+ value: "global.content.read"
+ }
+ ]) {
+ expires
+ header
+ prefix
+ token
+ }
+}
+```
+
+Make sure to include the `X-UHeadless-Api-Key` header with the value of the `ApiKey` you provided in the configuration. This will create a token that can query all content queries.
+
+![Create token example image](../../../../assets/v5/create-token-example-image.png)
+
+### Step 3: Use the token to query the GraphQL endpoint
+
+The `createToken` mutation will return a token in the following format:
+
+```json
+{
+ "data": {
+ "createToken": {
+ "expires": 1717883090,
+ "header": "X-UHeadless-Token",
+ "prefix": "Bearer ",
+ "token": ""
+ }
+ }
+}
+```
+
+To query a query use the token provided along with the prefix in the header `X-UHeadless-Token` like so:
+
+```graphql
+query {
+ contentByRoute(baseUrl: "", route: "/") {
+ id
+ key
+ name
+ statusCode
+ templateId
+ updateDate
+ url(urlMode: ABSOLUTE)
+ urlSegment
+ }
+}
+```
+
+```text
+X-UHeadless-Token: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJoZWFkbGVzcy1zY29wZSI6Imdsb2JhbC5jb250ZW50LnJlYWQiLCJleHAiOjE3MTc3OTIyMTYsImlzcyI6Ik5pa2Npby5VSGVhZGxlc3MiLCJhdWQiOiJOaWtjaW8uVUhlYWRsZXNzIn0.Iwis2EPUjk4uY9_ZyDLYg3NRs2lTh8S-7KEaVCQTFv6nKywMmZRiPMN4Fe2uanq44WqmzWeHRqOWhp5tCGHfKA
+```
+
+![Use token example image](../../../../assets/v5/use-token-example-image.png)
+
+Now you have successfully added authentication and authorization to your Nikcio.UHeadless application.
+
+## Different claims for different queries
+
+To create a token with different claims for different queries you can use the `createToken` mutation like so:
+
+```graphql
+mutation {
+ createToken(claims: [
+ {
+ name: "headless-scope",
+ value: ["global.content.read", "global.media.read"]
+ }
+ ]) {
+ expires
+ header
+ prefix
+ token
+ }
+}
+```
+
+or
+
+```graphql
+mutation {
+ createToken(claims: [
+ {
+ name: "headless-scope",
+ value: "global.content.read"
+ },
+ {
+ name: "headless-scope",
+ value: "global.media.read"
+ }
+ ]) {
+ expires
+ header
+ prefix
+ token
+ }
+}
+```
+
+There exists a few different claims in the default queries for UHeadless. What claims are required for each query can be found in the documentation for the query.
+
+See [content queries](../querying/content), [media queries](../querying/media) or [member queries](../querying/members) for more information.
+
+A special case for claim values are for the member picker editor. To access the data of the member picker you will need one of the following claim values: `property.values.member.picker` or `global.member.read`.
+
+## Adding security to your own queries
+
+If you have created your own queries you can add security to them by adding the policy configuration in the `ApplyConfiguration` method and adding the `[Authorize]` attribute from `HotChocolate.Authorization` to the query method like so:
+
+:::caution
+It's important to use the `[Authorize]` from `HotChocolate.Authorization` and not the one from `Microsoft.AspNetCore.Authorization` as the one from `HotChocolate.Authorization` is the one that works with HotChocolate and adding the other one will have no effect.
+:::
+
+```csharp
+using HotChocolate.Authorization;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.Authorization;
+
+public class MyCustomQuery : IGraphQLQuery
+{
+ public const string PolicyName = "MyCustomQuery";
+
+ public const string ClaimValue = "my.custom.query";
+
+ [GraphQLIgnore]
+ public virtual void ApplyConfiguration(UHeadlessOptions options)
+ {
+ ArgumentNullException.ThrowIfNull(options);
+
+ options.UmbracoBuilder.Services.AddAuthorizationBuilder().AddPolicy(PolicyName, policy =>
+ {
+ policy.AddAuthenticationSchemes(DefaultAuthenticationSchemes.UHeadless);
+
+ policy.RequireAuthenticatedUser();
+
+ policy.RequireClaim(DefaultClaims.UHeadlessScope, ClaimValue);
+ });
+ }
+
+ [Authorize(Policy = PolicyName)]
+ [GraphQLDescription("My custom query.")]
+ public virtual List MyQuery()
+ {
+ return ["Hello", "World"];
+ }
+}
+```
+
+## Utillty queries
+
+There is one utility query that can be used to find all default claims are used by the queries you have added to your application. This query is called `utility_GetClaimGroups` and can be used like so:
+
+:::note
+The `utility_GetClaimGroups` query is publicly accessible and should only be used for development purposes.
+:::
+
+```csharp
+.AddUHeadless(options =>
+{
+ options.AddQuery();
+})
+```
+
+Query:
+
+```graphql
+query {
+ utility_GetClaimGroups {
+ groupName
+ claimValues {
+ name
+ values
+ }
+ }
+}
+```
+
+Response example:
+
+```json
+{
+ "data": {
+ "utility_GetClaimGroups": [
+ {
+ "groupName": "Members",
+ "claimValues": [
+ {
+ "name": "headless-scope",
+ "values": [
+ "property.values.member.picker",
+ "global.member.read",
+ "find.members.by.display.name.query",
+ "find.members.by.email.query",
+ "find.members.by.role.query",
+ "find.members.by.username.query",
+ "member.by.email.query",
+ "member.by.guid.query",
+ "member.by.id.query",
+ "member.by.username.query"
+ ]
+ }
+ ]
+ },
+ {
+ "groupName": "Content",
+ "claimValues": [
+ {
+ "name": "headless-scope",
+ "values": [
+ "content.by.route.query",
+ "global.content.read",
+ "content.by.contentType.query",
+ "content.at.root.query",
+ "content.by.id.query",
+ "content.by.guid.query",
+ "content.by.tag.query"
+ ]
+ }
+ ]
+ },
+ {
+ "groupName": "Media",
+ "claimValues": [
+ {
+ "name": "headless-scope",
+ "values": [
+ "media.by.contentType.query",
+ "global.media.read",
+ "media.at.root.query",
+ "media.by.id.query",
+ "media.by.guid.query"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+}
+```
+
+## HotChocolate Documentation
+
+Nikcio.UHeadless leverages the [HotChocolate](https://chillicream.com/docs/hotchocolate) NuGet package, which is a powerful GraphQL server implementation for .NET. HotChocolate provides documentation on various security topics, including how to add authentication and authorization to your GraphQL queries and data.
+
+For detailed insights into how the implementation works with HotChocolate, refer to the official HotChocolate documentation on security at:
+
+[HotChocolate Security Documentation](https://chillicream.com/docs/hotchocolate/v13/security)
+
+This documentation covers different authentication and authorization mechanisms supported by HotChocolate and provides guidelines on securing your GraphQL API effectively.
+
+## Additional or Alternative Security Measures
+
+In addition to leveraging built-in security features and following best practices for authentication and authorization, you can implement additional security measures to protect your Nikcio.UHeadless GraphQL data. Here are some suggestions:
+
+One suggestion is to use a reverse proxy or similar technology to route all traffic to and from the `/graphql` endpoint internally. By configuring the reverse proxy to allow access only from trusted sources, you can ensure that your GraphQL data remains inaccessible to the public.
+
+Another suggestion is to only route GraphQL traffic server side to your FE application as this will prevent leaking access tokens to the client.
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/reference/content.md b/docs/src/content/docs/v5/reference/content.md
new file mode 100644
index 00000000..a618a44d
--- /dev/null
+++ b/docs/src/content/docs/v5/reference/content.md
@@ -0,0 +1,11 @@
+---
+title: Content bases reference
+description: Overview of content bases in Nikcio.UHeadless.
+---
+
+In Nikcio.UHeadless, content bases provide a way to create custom models that can be used in place of existing models. These bases allow you to define your own content data structure or extend the existing data structure.
+
+| Class Name | Description |
+|-------------------|--------------------------------------------------------------------------------|
+| ContentItemBase | The lowest level for a content item. Contains no public properties |
+| ContentItem | The default model used for queries. This includes the most common properties |
diff --git a/docs/src/content/docs/v5/reference/endpoint-options.md b/docs/src/content/docs/v5/reference/endpoint-options.md
new file mode 100644
index 00000000..db37942c
--- /dev/null
+++ b/docs/src/content/docs/v5/reference/endpoint-options.md
@@ -0,0 +1,38 @@
+---
+title: Endpoint Options
+description: Overview of the endpoint options in Nikcio.UHeadless.
+---
+
+The UHeadless endpoint can be customized using the builder returned from the `.MapUHeadless()` method. The builder provides a number of options to configure the endpoint.
+
+## Disabling the GraphQL IDE in production
+
+```csharp
+GraphQLEndpointConventionBuilder graphQLEndpointBuilder = app.MapUHeadless();
+
+// Only enable the GraphQL IDE in development
+if (!builder.Environment.IsDevelopment())
+{
+ graphQLEndpointBuilder.WithOptions(new GraphQLServerOptions()
+ {
+ Tool =
+ {
+ Enable = false,
+ }
+ });
+}
+```
+
+## GraphQLServerOptions Properties
+
+| Property | Description |
+|-----------------------------------------|----------------------------------------------------------------------------------------------------|
+| Tool | The options for configuring the GraphQL tool (e.g., Banana Cake Pop). |
+| Sockets | The options for configuring GraphQL sockets. |
+| AllowedGetOperations | Specifies which GraphQL options are allowed on GET requests. |
+| EnableGetRequests | Specifies whether GraphQL HTTP GET requests are allowed. |
+| EnforceGetRequestsPreflightHeader | Specifies whether to enforce the preflight header for GraphQL HTTP GET requests. |
+| EnableMultipartRequests | Specifies whether GraphQL HTTP multipart requests are allowed. |
+| EnforceMultipartRequestsPreflightHeader | Specifies whether to enforce the preflight header for GraphQL HTTP multipart requests. |
+| EnableSchemaRequests | Specifies whether the GraphQL schema SDL can be downloaded. |
+| EnableBatching | Specifies whether request batching is enabled. |
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/reference/media.md b/docs/src/content/docs/v5/reference/media.md
new file mode 100644
index 00000000..c47edd7f
--- /dev/null
+++ b/docs/src/content/docs/v5/reference/media.md
@@ -0,0 +1,11 @@
+---
+title: Media Bases reference
+description: Overview of media bases in Nikcio.UHeadless.
+---
+
+In Nikcio.UHeadless, media bases provide a way to create custom models that can be used in place of existing models. These bases allow you to define your own media data structure or extend the existing data structure.
+
+| Class Name | Description |
+|-------------------|--------------------------------------------------------------------------------|
+| MediaItemBase | The lowest level for a media item. Contains no public properties |
+| MediaItem | The default model used for queries. This includes the most common properties |
diff --git a/docs/src/content/docs/v5/reference/member.md b/docs/src/content/docs/v5/reference/member.md
new file mode 100644
index 00000000..6286ae72
--- /dev/null
+++ b/docs/src/content/docs/v5/reference/member.md
@@ -0,0 +1,11 @@
+---
+title: Member Bases reference
+description: Overview of member bases in Nikcio.UHeadless.
+---
+
+In Nikcio.UHeadless, member bases provide a way to create custom models that can be used in place of existing models. These bases allow you to define your own member data structure or extend the existing data structure.
+
+| Class Name | Description |
+|-------------------|--------------------------------------------------------------------------------|
+| MemberBase | The lowest level for a member item. Contains no public properties |
+| MemberItem | The default model used for queries. This includes the most common properties |
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/reference/options.md b/docs/src/content/docs/v5/reference/options.md
new file mode 100644
index 00000000..c3da497f
--- /dev/null
+++ b/docs/src/content/docs/v5/reference/options.md
@@ -0,0 +1,27 @@
+---
+title: UHeadless Options
+description: Overview of the options in Nikcio.UHeadless.
+---
+
+The `UHeadlessOptions` class provides configuration options for the UHeadless package. These options can be used to customize various aspects of UHeadless behavior.
+
+## UHeadlessOptions Properties
+
+| Property | Description |
+|---------------------------|-----------------------------------------------------------------------------------------|
+| PropertyMap | Used to register custom models to specific property values. |
+| DisableAuthorization | Disables authorization for the GraphQL server. |
+| RequestExecutorBuilder | Used to customize the GraphQL server. |
+
+## Extensions
+
+| Property | Description |
+|------------------------|--------------------------------------------------------------------------------------------|
+| AddDefaults | Adds default property mappings and services to be used for the default queries. |
+| AddAuth | Adds the authentication services to the UHeadless package. |
+| AddQuery | Adds a query to the GraphQL schema |
+| AddMutation | Adds a mutation to the GraphQL schema |
+| AddEditorMapping | Adds a mapping of a type to a editor alias. |
+| AddAliasMapping | Adds a mapping of a type to a content type alias combined with a property type alias. |
+| RemoveAliasMapping | Removes a alias mapping |
+| RemoveEditorMapping | Removes a editor mapping |
\ No newline at end of file
diff --git a/docs/src/content/docs/v5/reference/properties.md b/docs/src/content/docs/v5/reference/properties.md
new file mode 100644
index 00000000..1943607e
--- /dev/null
+++ b/docs/src/content/docs/v5/reference/properties.md
@@ -0,0 +1,22 @@
+---
+title: Property models reference
+description: Overview of property models in Nikcio.UHeadless.
+---
+
+In Nikcio.UHeadless, property models can be extended and customized adding additional properties and functionality. The default property models provide a solid foundation for building custom property models. By extending these models, you can tailor them to your specific application requirements.
+
+| Class Name | Description |
+|------------------------------------------------|---------------------------------------------------------------------------------------------------|
+| PropertyValue | A base for property values. This is the lowest level of any property value. |
+| BlockGrid | Represents a block grid property value |
+| BlockList | Represents a block list model |
+| ContentPicker | Represents a content picker value |
+| DateTimePicker | Represents a date time property value |
+| DefaultProperty | A catch all property value that simply returns the value of the property. This is all that is needed for simple properties that doesn't need any special handling or formatting. |
+| Label | Gets the value of the property |
+| MediaPicker | Represents a media picker item |
+| MemberPicker | Represents a member picker |
+| MultiUrlPicker | Represents a multi url picker |
+| NestedContent | Represents nested content |
+| RichText | Represents a rich text editor |
+| UnsupportedProperty | Represents an unsupported property value |
diff --git a/docs/src/content/docs/v5/start.md b/docs/src/content/docs/v5/start.md
new file mode 100644
index 00000000..957511ad
--- /dev/null
+++ b/docs/src/content/docs/v5/start.md
@@ -0,0 +1,67 @@
+---
+title: Nikcio.UHeadless Documentation - Version 5.0.0+
+description: Welcome to version 5 of the Nikcio.UHeadless documentation! This documentation aims to provide you with comprehensive resources to help you get started and make the most out of the Nikcio.UHeadless package.
+---
+
+Welcome to the documentation for Nikcio.UHeadless version 5.0.0! This documentation aims to provide you with comprehensive resources to help you get started and make the most out of the Nikcio.UHeadless package. Whether you're new to the package or looking to extend its functionality, we've got you covered.
+
+## Fundamentals
+
+In this section, you will find essential information about Nikcio.UHeadless and its core concepts. It covers topics such as extending Nikcio.UHeadless and important security considerations.
+
+### Getting Started
+- [Getting started](../fundamentals/getting-started): Find step-by-step instructions on how to install Nikcio.UHeadless and get started with querying content, media, and members.
+ - [Querying content](../fundamentals/querying/content): Explore the query options for content.
+ - [Querying media](../fundamentals/querying/media): Explore the query options for media.
+ - [Querying members](../fundamentals/querying/members): Explore the query options for members.
+ - [Querying properties](../fundamentals/querying/content): Discover how to query properties on content, media and members.
+- [Security Considerations](../fundamentals/security): Explore important security considerations when using Nikcio.UHeadless.
+
+## Extending Nikcio.UHeadless
+
+This section focuses on extending Nikcio.UHeadless to tailor it to your project's needs. It covers different areas where you can extend Nikcio.UHeadless, including content, media, members, integrations, and properties.
+
+### Content
+
+- [Extending Content](../extending/content): Learn how to extend the existing content model and how build your own in Nikcio.UHeadless.
+
+### Media
+
+- [Extending Media](../extending/media): Discover how to extend the existing media model and how build your own in Nikcio.UHeadless.
+
+### Members
+
+- [Extending Members](../extending/member): Learn how to extend the existing member model and how build your own in Nikcio.UHeadless.
+
+### Integrations
+
+- [Skybrud Redirects](../extending/skybrud-redirects): Explore how to integrate Nikcio.UHeadless with [Skybrud Redirects](https://marketplace.umbraco.com/package/skybrud.umbraco.redirects) for enhanced functionality.
+- [Url Tracker](../extending/url-tracker): Learn how to integrate Nikcio.UHeadless with [Url Tracker](https://marketplace.umbraco.com/package/urltracker) for enhanced functionality.
+
+### Properties
+
+- [Overview of Properties](../extending/properties/overview): Get an overview of the different property types and their usage in Nikcio.UHeadless.
+- [Block List](../extending/properties/block-list): Discover how to extend the block list property model in Nikcio.UHeadless.
+- [Custom Editor](../extending/properties/custom-editor): Learn how to use custom property editors in Nikcio.UHeadless.
+- [Media Picker](../extending/properties/media-picker): Explore how to extend the media picker property model in Nikcio.UHeadless.
+- [Rich Text](../extending/properties/rich-text): Learn how to extend the rich text property model in Nikcio.UHeadless.
+
+## Reference
+
+In the reference section, you will find detailed information about various aspects of Nikcio.UHeadless, including options, content, media, members, and properties.
+
+- [Options](../reference/options): Learn about the options available for configuring Nikcio.UHeadless.
+- [Endpoint Options](../reference/endpoint-options): Explore the available options for configuring the Nikcio.UHeadless endpoint.
+
+- [Content Reference](../reference/content): Find reference documentation for working with content in Nikcio.UHeadless.
+- [Media Reference](../reference/media): Find reference documentation for working with media in Nikcio.UHeadless.
+- [Members Reference](../reference/members): Find reference documentation for working with members in Nikcio.UHeadless.
+- [Properties Reference](../reference/properties): Find reference documentation for working with properties in Nikcio.UHeadless.
+
+We hope this documentation helps you make the most out of Nikcio.UHeadless. If you have any questions or need further assistance, don't hesitate to reach out to us.
+
+**Enjoy building a headless GraphQL interface with Nikcio.UHeadless!**
+
+---
+
+For those interested in supporting the development of Nikcio.UHeadless, consider becoming a sponsor on [GitHub Sponsors](https://github.com/sponsors/nikcio/). Your sponsorship helps us continue to improve and maintain this package. Thank you for your support!
\ No newline at end of file
diff --git a/examples/code-examples/Headless/CustomBlockListExample/BlockList.cs b/examples/code-examples/Headless/CustomBlockListExample/BlockList.cs
new file mode 100644
index 00000000..9ed69f45
--- /dev/null
+++ b/examples/code-examples/Headless/CustomBlockListExample/BlockList.cs
@@ -0,0 +1,66 @@
+using HotChocolate;
+using HotChocolate.Resolvers;
+
+namespace Code.Examples.Headless.CustomBlockListExample;
+
+[GraphQLName("CustomBlockList")]
+public class BlockList : Nikcio.UHeadless.Defaults.Properties.BlockList
+{
+ public BlockList(CreateCommand command) : base(command)
+ {
+ }
+
+ protected override BlockListItem CreateBlock(Umbraco.Cms.Core.Models.Blocks.BlockListItem blockListItem, IResolverContext resolverContext)
+ {
+ return new BlockListItem(blockListItem, resolverContext);
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+
+public class BlockListItem : Nikcio.UHeadless.Defaults.Properties.BlockListItem
+{
+ public BlockListItem(Umbraco.Cms.Core.Models.Blocks.BlockListItem blockListItem, IResolverContext resolverContext) : base(blockListItem, resolverContext)
+ {
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
diff --git a/examples/code-examples/Headless/CustomEditorExample/CustomEditor.cs b/examples/code-examples/Headless/CustomEditorExample/CustomEditor.cs
new file mode 100644
index 00000000..928d10a2
--- /dev/null
+++ b/examples/code-examples/Headless/CustomEditorExample/CustomEditor.cs
@@ -0,0 +1,18 @@
+using HotChocolate.Resolvers;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Common.Properties;
+
+namespace Code.Examples.Headless.CustomEditorExample;
+
+public class CustomEditor : PropertyValue
+{
+ public CustomEditor(CreateCommand command) : base(command)
+ {
+ ArgumentNullException.ThrowIfNull(command);
+
+ IResolverContext resolverContext = command.ResolverContext;
+ Value = PublishedProperty.Value(PublishedValueFallback, resolverContext.Culture(), resolverContext.Segment(), resolverContext.Fallback());
+ }
+
+ public string? Value { get; }
+}
diff --git a/examples/code-examples/Headless/CustomMediaItemExample/CustomMediaItemExampleQuery.cs b/examples/code-examples/Headless/CustomMediaItemExample/CustomMediaItemExampleQuery.cs
new file mode 100644
index 00000000..2f37b224
--- /dev/null
+++ b/examples/code-examples/Headless/CustomMediaItemExample/CustomMediaItemExampleQuery.cs
@@ -0,0 +1,32 @@
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.MediaItems;
+using Nikcio.UHeadless.MediaItems;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+namespace Code.Examples.Headless.CustomMediaItemExample;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class CustomMediaItemExampleQuery : MediaByIdQuery
+{
+ [GraphQLName("CustomMediaItemExampleQuery")]
+ public override MediaItem? MediaById(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The id to fetch.")] int id)
+ {
+ return base.MediaById(resolverContext, id);
+ }
+
+ protected override MediaItem? CreateMediaItem(IPublishedContent? media, IMediaItemRepository mediaItemRepository, IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(mediaItemRepository);
+
+ return mediaItemRepository.GetMediaItem(new Nikcio.UHeadless.Media.MediaItemBase.CreateCommand()
+ {
+ PublishedContent = media,
+ ResolverContext = resolverContext,
+ });
+ }
+}
diff --git a/examples/code-examples/Headless/CustomMediaItemExample/MediaItem.cs b/examples/code-examples/Headless/CustomMediaItemExample/MediaItem.cs
new file mode 100644
index 00000000..a033c910
--- /dev/null
+++ b/examples/code-examples/Headless/CustomMediaItemExample/MediaItem.cs
@@ -0,0 +1,41 @@
+using HotChocolate.Resolvers;
+using HotChocolate;
+
+namespace Code.Examples.Headless.CustomMediaItemExample;
+
+///
+/// This example demonstrates how to create a custom media item with custom properties and methods.
+///
+///
+/// The can be used to resolve services from the DI container like you normally would with dependency injection.
+/// It's important to contain any logic to the specific property or method within the property or method itself if possiable.
+/// As GraphQL will only call the properties or methods that are requestedm and may not call all of them.
+///
+[GraphQLName("CustomMediaItemExampleMediaItem")]
+public class MediaItem : Nikcio.UHeadless.Defaults.MediaItems.MediaItem
+{
+ public MediaItem(CreateCommand command) : base(command)
+ {
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
diff --git a/examples/code-examples/Headless/CustomMediaPickerExample/MediaPicker.cs b/examples/code-examples/Headless/CustomMediaPickerExample/MediaPicker.cs
new file mode 100644
index 00000000..80374301
--- /dev/null
+++ b/examples/code-examples/Headless/CustomMediaPickerExample/MediaPicker.cs
@@ -0,0 +1,63 @@
+using HotChocolate.Resolvers;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+namespace Code.Examples.Headless.CustomMediaPickerExample;
+
+public class MediaPicker : Nikcio.UHeadless.Defaults.Properties.MediaPicker
+{
+ public MediaPicker(CreateCommand command) : base(command)
+ {
+ }
+
+ protected override MediaPickerItem CreateMediaPickerItem(IPublishedContent publishedContent, IResolverContext resolverContext)
+ {
+ return new MediaPickerItem(publishedContent, resolverContext);
+ }
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
+
+public class MediaPickerItem : Nikcio.UHeadless.Defaults.Properties.MediaPickerItem
+{
+ public MediaPickerItem(IPublishedContent publishedContent, IResolverContext resolverContext) : base(publishedContent, resolverContext)
+ {
+ }
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
diff --git a/examples/code-examples/Headless/CustomMemberItemExample/CustomMemberItemExampleQuery.cs b/examples/code-examples/Headless/CustomMemberItemExample/CustomMemberItemExampleQuery.cs
new file mode 100644
index 00000000..ea87d53d
--- /dev/null
+++ b/examples/code-examples/Headless/CustomMemberItemExample/CustomMemberItemExampleQuery.cs
@@ -0,0 +1,32 @@
+using HotChocolate;
+using HotChocolate.Resolvers;
+using HotChocolate.Types;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.Members;
+using Nikcio.UHeadless.MemberItems;
+using Umbraco.Cms.Core.Models.PublishedContent;
+
+namespace Code.Examples.Headless.CustomMemberItemExample;
+
+[ExtendObjectType(typeof(HotChocolateQueryObject))]
+public class CustomMemberItemExampleQuery : MemberByIdQuery
+{
+ [GraphQLName("CustomMemberItemExampleQuery")]
+ public override MemberItem? MemberById(
+ IResolverContext resolverContext,
+ [GraphQLDescription("The id to fetch.")] int id)
+ {
+ return base.MemberById(resolverContext, id);
+ }
+
+ protected override MemberItem? CreateMemberItem(IPublishedContent? member, IMemberItemRepository memberItemRepository, IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(memberItemRepository);
+
+ return memberItemRepository.GetMemberItem(new Nikcio.UHeadless.Members.MemberItemBase.CreateCommand()
+ {
+ PublishedContent = member,
+ ResolverContext = resolverContext,
+ });
+ }
+}
diff --git a/examples/code-examples/Headless/CustomMemberItemExample/MemberItem.cs b/examples/code-examples/Headless/CustomMemberItemExample/MemberItem.cs
new file mode 100644
index 00000000..5a5d7d49
--- /dev/null
+++ b/examples/code-examples/Headless/CustomMemberItemExample/MemberItem.cs
@@ -0,0 +1,41 @@
+using HotChocolate.Resolvers;
+using HotChocolate;
+
+namespace Code.Examples.Headless.CustomMemberItemExample;
+
+///
+/// This example demonstrates how to create a custom member item with custom properties and methods.
+///
+///
+/// The can be used to resolve services from the DI container like you normally would with dependency injection.
+/// It's important to contain any logic to the specific property or method within the property or method itself if possiable.
+/// As GraphQL will only call the properties or methods that are requestedm and may not call all of them.
+///
+[GraphQLName("CustomMemberItemExampleMemberItem")]
+public class MemberItem : Nikcio.UHeadless.Defaults.Members.MemberItem
+{
+ public MemberItem(CreateCommand command) : base(command)
+ {
+ }
+
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
diff --git a/examples/code-examples/Headless/CustomRichTextExample/RichText.cs b/examples/code-examples/Headless/CustomRichTextExample/RichText.cs
new file mode 100644
index 00000000..ea848917
--- /dev/null
+++ b/examples/code-examples/Headless/CustomRichTextExample/RichText.cs
@@ -0,0 +1,32 @@
+using HotChocolate;
+using HotChocolate.Resolvers;
+
+namespace Code.Examples.Headless.CustomRichTextExample;
+
+[GraphQLName("CustomRichText")]
+public class RichText : Nikcio.UHeadless.Defaults.Properties.RichText
+{
+ public RichText(CreateCommand command) : base(command)
+ {
+ }
+ public string? CustomProperty => "Custom value";
+
+ public string? CustomMethod()
+ {
+ return "Custom method";
+ }
+
+ public string? CustomMethodWithParameter(string? parameter)
+ {
+ return $"Custom method with parameter: {parameter}";
+ }
+
+ public string? CustomMethodWithResolverContext(IResolverContext resolverContext)
+ {
+ ArgumentNullException.ThrowIfNull(resolverContext);
+
+ IHttpContextAccessor httpContextAccessor = resolverContext.Service();
+
+ return $"Custom method with resolver context so you can resolve the services needed: {httpContextAccessor.HttpContext?.Request.Path}";
+ }
+}
diff --git a/examples/code-examples/Headless/PublicAccessExample/ContentItem.cs b/examples/code-examples/Headless/PublicAccessExample/ContentItem.cs
index 84a61ecf..4c15a27b 100644
--- a/examples/code-examples/Headless/PublicAccessExample/ContentItem.cs
+++ b/examples/code-examples/Headless/PublicAccessExample/ContentItem.cs
@@ -1,13 +1,12 @@
using HotChocolate;
-using Umbraco.Cms.Core.Models.PublishedContent;
-using Umbraco.Cms.Core.Models;
-using Umbraco.Cms.Core.Services;
-using Umbraco.Cms.Core.Web;
using HotChocolate.Resolvers;
+using Nikcio.UHeadless;
using Nikcio.UHeadless.ContentItems;
+using Umbraco.Cms.Core.Models;
+using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Routing;
-using Nikcio.UHeadless;
+using Umbraco.Cms.Core.Services;
namespace Code.Examples.Headless.PublicAccessExample;
diff --git a/examples/code-examples/Program.cs b/examples/code-examples/Program.cs
index d0ac5a34..d7a60799 100644
--- a/examples/code-examples/Program.cs
+++ b/examples/code-examples/Program.cs
@@ -1,4 +1,9 @@
+using Code.Examples.Headless.CustomBlockListExample;
using Code.Examples.Headless.CustomContentItemExample;
+using Code.Examples.Headless.CustomMediaItemExample;
+using Code.Examples.Headless.CustomMediaPickerExample;
+using Code.Examples.Headless.CustomMemberItemExample;
+using Code.Examples.Headless.CustomRichTextExample;
using Code.Examples.Headless.PublicAccessExample;
using Code.Examples.Headless.SkybrudRedirectsExample;
using Code.Examples.Headless.UrlTrackerExample;
@@ -6,6 +11,7 @@
using Nikcio.UHeadless.Defaults.ContentItems;
using Nikcio.UHeadless.Defaults.MediaItems;
using Nikcio.UHeadless.Defaults.Members;
+using Umbraco.Cms.Core;
namespace Code.Examples;
@@ -35,6 +41,12 @@ public static async Task Main(string[] args)
options.AddQuery();
options.AddMutation();
options.AddQuery();
+ options.AddQuery();
+ options.AddQuery();
+
+ options.AddEditorMapping(Constants.PropertyEditors.Aliases.BlockList);
+ options.AddEditorMapping(Constants.PropertyEditors.Aliases.MediaPicker);
+ options.AddEditorMapping(Constants.PropertyEditors.Aliases.TinyMce);
// Default queries
options
diff --git a/examples/code-examples/Properties/launchSettings.json b/examples/code-examples/Properties/launchSettings.json
index b58ecf87..0595898b 100644
--- a/examples/code-examples/Properties/launchSettings.json
+++ b/examples/code-examples/Properties/launchSettings.json
@@ -5,10 +5,11 @@
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
+ "launchUrl": "umbraco",
"applicationUrl": "https://localhost:44371;http://localhost:11129",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
- }
+ }
}
}
}
diff --git a/examples/code-examples/appsettings.json b/examples/code-examples/appsettings.json
index 91948f8c..da9e743c 100644
--- a/examples/code-examples/appsettings.json
+++ b/examples/code-examples/appsettings.json
@@ -26,7 +26,6 @@
"Global": {
"Id": "d173c8c2-e412-4a6a-960f-5feeed9a4189",
"SanitizeTinyMce": true,
- "MainDomLock": "SqlMainDomLock",
"UseHttps": true,
"InstallMissingDatabase": true
},
diff --git a/examples/code-examples/umbraco/Data/code-examples.sqlite b/examples/code-examples/umbraco/Data/code-examples.sqlite
index 7bb9084d..6310e0ad 100644
Binary files a/examples/code-examples/umbraco/Data/code-examples.sqlite and b/examples/code-examples/umbraco/Data/code-examples.sqlite differ
diff --git a/examples/starter-example/.gitignore b/examples/starter-example/.gitignore
new file mode 100644
index 00000000..8bcfaae1
--- /dev/null
+++ b/examples/starter-example/.gitignore
@@ -0,0 +1,479 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# Tye
+.tye/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
+
+##
+## Visual studio for Mac
+##
+
+
+# globs
+Makefile.in
+*.userprefs
+*.usertasks
+config.make
+config.status
+aclocal.m4
+install-sh
+autom4te.cache/
+*.tar.gz
+tarballs/
+test-results/
+
+# Mac bundle stuff
+*.dmg
+*.app
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
+# Windows thumbnail cache files
+Thumbs.db
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+##
+## Visual Studio Code
+##
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+##
+## Umbraco CMS
+##
+
+# JSON schema files for appsettings.json
+appsettings-schema.json
+appsettings-schema.*.json
+
+# Packages created from the backoffice (package.xml/package.zip)
+/umbraco/Data/CreatedPackages/
+
+# Temp folder containing Examine indexes, NuCache, MediaCache, etc.
+/umbraco/Data/TEMP/
+
+# SQLite database files
+/umbraco/Data/*.sqlite.db
+/umbraco/Data/*.sqlite.db-shm
+/umbraco/Data/*.sqlite.db-wal
+
+# Log files
+/umbraco/Logs/
+
+# Media files
+/wwwroot/media/
diff --git a/examples/starter-example/Program.cs b/examples/starter-example/Program.cs
new file mode 100644
index 00000000..509c677c
--- /dev/null
+++ b/examples/starter-example/Program.cs
@@ -0,0 +1,68 @@
+using HotChocolate.AspNetCore;
+using HotChocolate.AspNetCore.Extensions;
+using Nikcio.UHeadless;
+using Nikcio.UHeadless.Defaults.ContentItems;
+
+/*
+ * This setup showcases a minimal setup for UHeadless in an Umbraco application.
+ *
+ * In this example we have:
+ * - Enabled authentication using configuration values for the API key and secret.
+ * - Disabled the GraphQL IDE in production.
+ * - Added a single query for fetching content by route.
+ * - Removed Umbraco's services and endpoints for rendering a website as this will only be used as a headless setup.
+ * - .AddWebsite() is needed for the install screen to load if you're not using UnattendedInstall.
+ */
+
+WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
+
+builder.CreateUmbracoBuilder()
+ .AddBackOffice()
+ .AddComposers()
+ .AddUHeadless(options =>
+ {
+ options.AddAuth(new()
+ {
+ ApiKey = builder.Configuration.GetValue("UHeadless:ApiKey") ?? throw new InvalidOperationException("No value for UHeadless:ApiKey was found"),
+ Secret = builder.Configuration.GetValue("UHeadless:Secret") ?? throw new InvalidOperationException("No value for UHeadless:Secret was found"),
+ });
+
+ options.AddDefaults();
+
+ options.AddQuery();
+ })
+ .Build();
+
+WebApplication app = builder.Build();
+
+await app.BootUmbracoAsync().ConfigureAwait(false);
+
+app.UseAuthentication();
+app.UseAuthorization();
+
+GraphQLEndpointConventionBuilder graphQLEndpointBuilder = app.MapUHeadless();
+
+// Only enable the GraphQL IDE in development
+if (!builder.Environment.IsDevelopment())
+{
+ graphQLEndpointBuilder.WithOptions(new GraphQLServerOptions()
+ {
+ Tool =
+ {
+ Enable = false,
+ }
+ });
+}
+
+app.UseUmbraco()
+ .WithMiddleware(u =>
+ {
+ u.UseBackOffice();
+ })
+ .WithEndpoints(u =>
+ {
+ u.UseInstallerEndpoints();
+ u.UseBackOfficeEndpoints();
+ });
+
+await app.RunAsync().ConfigureAwait(false);
diff --git a/examples/starter-example/Properties/launchSettings.json b/examples/starter-example/Properties/launchSettings.json
new file mode 100644
index 00000000..f88824ba
--- /dev/null
+++ b/examples/starter-example/Properties/launchSettings.json
@@ -0,0 +1,15 @@
+{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "profiles": {
+ "Umbraco.Web.UI": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "umbraco",
+ "applicationUrl": "https://localhost:44368;http://localhost:23585",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/examples/starter-example/appsettings.json b/examples/starter-example/appsettings.json
new file mode 100644
index 00000000..5d6e193e
--- /dev/null
+++ b/examples/starter-example/appsettings.json
@@ -0,0 +1,61 @@
+{
+ "$schema": "appsettings-schema.json",
+ "UHeadless": {
+ "ApiKey": "qLV$6eo5*2OBX9yGGz*BiQVnGlr778nDmy!GX60A@JwL1Ql&AFQRkru!#zW9XVTqF2zzc1O7Q4XIcwuMZDUDNrsfdy3gw5Ey7P@",
+ "Secret": "Q8PaVKvX4V%v&bD4DF%9VEc3Q%t7wIvS5#G8aZl8wlc!M2V@vo@AK6zH%cmDMTDBmx@SyxvsolYcqi^MND0l7DIKI@8XN*@^GFR"
+ },
+ "Serilog": {
+ "MinimumLevel": {
+ "Default": "Information"
+ },
+ "WriteTo": [
+ {
+ "Name": "Async",
+ "Args": {
+ "configure": [
+ {
+ "Name": "Console"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "ConnectionStrings": {
+ "umbracoDbDSN": "Data Source=|DataDirectory|/Umbraco.sqlite.db;Cache=Shared;Foreign Keys=True;Pooling=True",
+ "umbracoDbDSN_ProviderName": "Microsoft.Data.Sqlite"
+ },
+ "Umbraco": {
+ "CMS": {
+ "Global": {
+ "Id": "b68dba0e-21a3-486f-8d03-9cd56f6cbd4c",
+ "SanitizeTinyMce": true,
+ "UseHttps": true,
+ "InstallMissingDatabase": true
+ },
+ "Unattended": {},
+ "Content": {
+ "AllowEditInvariantFromNonDefault": true,
+ "ContentVersionCleanupPolicy": {
+ "EnableCleanup": true
+ }
+ },
+ "RuntimeMinification": {
+ "UseInMemoryCache": true,
+ "CacheBuster": "Timestamp"
+ },
+ "ModelsBuilder": {
+ "ModelsMode": "Nothing"
+ },
+ "Hosting": {
+ "Debug": true
+ }
+ }
+ },
+ "UrlTracker": {
+ "Pipeline": {
+ "Enable": true,
+ "EnableClientErrorTracking": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/examples/starter-example/packages.lock.json b/examples/starter-example/packages.lock.json
new file mode 100644
index 00000000..233a809b
--- /dev/null
+++ b/examples/starter-example/packages.lock.json
@@ -0,0 +1,3326 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net8.0": {
+ "Microsoft.ICU.ICU4C.Runtime": {
+ "type": "Direct",
+ "requested": "[72.1.0.3, )",
+ "resolved": "72.1.0.3",
+ "contentHash": "Z42uzvs0TN9Y02xgHtRgPcumLRnvK3MHVHZ0Pr3OrnvyZYhBwqDgdYBOvoELcTsayUgwqrPLb+C5Fqqk66zlUg==",
+ "dependencies": {
+ "Microsoft.ICU.ICU4C.Runtime.linux-arm64": "72.1.0.3",
+ "Microsoft.ICU.ICU4C.Runtime.linux-x64": "72.1.0.3",
+ "Microsoft.ICU.ICU4C.Runtime.win-arm64": "72.1.0.3",
+ "Microsoft.ICU.ICU4C.Runtime.win-x64": "72.1.0.3",
+ "Microsoft.ICU.ICU4C.Runtime.win-x86": "72.1.0.3"
+ }
+ },
+ "Microsoft.VisualStudio.Threading.Analyzers": {
+ "type": "Direct",
+ "requested": "[17.10.48, )",
+ "resolved": "17.10.48",
+ "contentHash": "xwvwT91oqFjLgQykUp6y/JPYxz8LchbfJKrLVatfczWddXKng8DAo8RiiIodt+pRdsVXP9Ud02GtJoY7ifdXPQ=="
+ },
+ "Umbraco.Cms": {
+ "type": "Direct",
+ "requested": "[13.3.2, )",
+ "resolved": "13.3.2",
+ "contentHash": "sioCUKRzdrVcKouhL9hiPDnDakGNomNEfyl/e9j+Cp7gcjy7JEHrBpM4BlYohXg/zFQTaCt8f9hbvgUxSEYODA==",
+ "dependencies": {
+ "Umbraco.Cms.Imaging.ImageSharp": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Persistence.EFCore.SqlServer": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Persistence.EFCore.Sqlite": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Persistence.SqlServer": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Persistence.Sqlite": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Targets": "[13.3.2, 14.0.0)"
+ }
+ },
+ "UrlTracker": {
+ "type": "Direct",
+ "requested": "[13.2.0-alpha0004, )",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "jlkrkCsxGVQ2TGKh4+99WkOZdxwEzc6m+QLa8+r5OI7Jva1QG2RevEuMj7ojzwNuGcVwQbmmJADqLe8PKGHcRA==",
+ "dependencies": {
+ "Umbraco.Cms.Core": "13.0.0",
+ "UrlTracker.Backoffice.Notifications": "13.2.0-alpha0004",
+ "UrlTracker.Backoffice.UI": "13.2.0-alpha0004",
+ "UrlTracker.Core": "13.2.0-alpha0004",
+ "UrlTracker.Core.Caching.Memory": "13.2.0-alpha0004",
+ "UrlTracker.Middleware": "13.2.0-alpha0004",
+ "UrlTracker.Web": "13.2.0-alpha0004"
+ }
+ },
+ "uSync": {
+ "type": "Direct",
+ "requested": "[13.2.3, )",
+ "resolved": "13.2.3",
+ "contentHash": "Tzj/a5WKOeohtJrKNu6b79Nc8q7VYbSiHTJn5yRbiOalJtj7n4hLVOm1TqTqb4xNBhVbS7u1Yar/RJPDIVKoMA==",
+ "dependencies": {
+ "uSync.BackOffice": "13.2.3",
+ "uSync.BackOffice.Assets": "13.2.3",
+ "uSync.History": "13.2.3"
+ }
+ },
+ "Asp.Versioning.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "yujGpbGBCViHvYiBJD0S5XFgOI+f5bGvi8tnfMJV6EC0b8SAqBn1YC+yCnJjQo3D2XP9TmSuKIJ7ofVy58GcuQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Asp.Versioning.Http": {
+ "type": "Transitive",
+ "resolved": "7.1.0",
+ "contentHash": "Q1gPDssnFLeS3Avw/JABPzis4pjrG372RpFnB/9zp61hSuSf+Y+1O9twicNHDsmeWMkb/oNQo3vHgLr16jTdNw==",
+ "dependencies": {
+ "Asp.Versioning.Abstractions": "7.0.0"
+ }
+ },
+ "Asp.Versioning.Mvc": {
+ "type": "Transitive",
+ "resolved": "7.1.1",
+ "contentHash": "hnTDqNwUlawVTDtHu8EhWvEGe6U5K83NJ3Aqf2Tz2mWq5qndzvcGKPGyfv2LTHfSK5h/Qv/ru+ssr/u5GSzjFQ==",
+ "dependencies": {
+ "Asp.Versioning.Http": "7.1.0"
+ }
+ },
+ "Asp.Versioning.Mvc.ApiExplorer": {
+ "type": "Transitive",
+ "resolved": "7.1.0",
+ "contentHash": "SEqEAeOXH4bP5g5IzdRarmNCrUxbk4pu10zxu57hgnHop7mXikwoDshE1cI4ZcxN7soKLGw2qOgLjJTIim5fiw==",
+ "dependencies": {
+ "Asp.Versioning.Mvc": "7.1.0"
+ }
+ },
+ "Azure.Core": {
+ "type": "Transitive",
+ "resolved": "1.36.0",
+ "contentHash": "vwqFZdHS4dzPlI7FFRkPx9ctA+aGGeRev3gnzG8lntWvKMmBhAmulABi1O9CEvS3/jzYt7yA+0pqVdxkpAd7dQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "1.1.1",
+ "System.Diagnostics.DiagnosticSource": "6.0.1",
+ "System.Memory.Data": "1.0.2",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Text.Encodings.Web": "4.7.2",
+ "System.Text.Json": "4.7.2",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Azure.Identity": {
+ "type": "Transitive",
+ "resolved": "1.10.4",
+ "contentHash": "hSvisZy9sld0Gik1X94od3+rRXCx+AKgi+iLH6fFdlnRZRePn7RtrqUGSsORiH2h8H2sc4NLTrnuUte1WL+QuQ==",
+ "dependencies": {
+ "Azure.Core": "1.36.0",
+ "Microsoft.Identity.Client": "4.56.0",
+ "Microsoft.Identity.Client.Extensions.Msal": "4.56.0",
+ "System.Memory": "4.5.4",
+ "System.Security.Cryptography.ProtectedData": "4.7.0",
+ "System.Text.Json": "4.7.2",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "BananaCakePop.Middleware": {
+ "type": "Transitive",
+ "resolved": "16.0.1",
+ "contentHash": "i/LDG7Lw2ln1WM7GaMyNDWHExtN15/O/xgcX8lhBK6FZFPBnlq6FJW4GuS3vs0UpLB1TvX2tcOenMlXjcMZq0g==",
+ "dependencies": {
+ "Yarp.ReverseProxy": "2.1.0"
+ }
+ },
+ "BouncyCastle.Cryptography": {
+ "type": "Transitive",
+ "resolved": "2.2.1",
+ "contentHash": "A6Zr52zVqJKt18ZBsTnX0qhG0kwIQftVAjLmszmkiR/trSp8H+xj1gUOzk7XHwaKgyREMSV1v9XaKrBUeIOdvQ=="
+ },
+ "CsvHelper": {
+ "type": "Transitive",
+ "resolved": "30.0.1",
+ "contentHash": "rcZtgbWR+As4G3Vpgx0AMNmShGuQLFjkHAPIIflzrfkJCx8/AOd4m96ZRmiU1Wi39qS5UVjV0P8qdgqOo5Cwyg=="
+ },
+ "Dazinator.Extensions.FileProviders": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "Jb10uIvdGdaaOmEGUXeO1ssjp6YuvOuR87B5gLxGORFbroV1j7PDaVfEIgni7vV8KRcyAY5KvuMxgx6ADIEXNw==",
+ "dependencies": {
+ "DotNet.Glob": "3.1.0",
+ "Microsoft.AspNetCore.Hosting.Abstractions": "1.0.2",
+ "Microsoft.AspNetCore.Http.Abstractions": "1.0.2",
+ "Microsoft.Extensions.FileProviders.Abstractions": "1.0.1",
+ "NETStandard.Library": "1.6.1"
+ }
+ },
+ "DotNet.Glob": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "i6x0hDsFWg6Ke2isaNAcHQ9ChxBvTJu2cSmBY+Jtjiv2W4q6y9QlA3JKYuZqJ573TAZmpAn65Qf3sRpjvZ1gmw=="
+ },
+ "Examine": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "WL6VfLVO6It7kvwWANUux9LerwNr+xjxHHenNbxlOZE0dMcBKs0C3EYHEk6DHmDk0EtAPRcXT23NKlcJ7ZskWw==",
+ "dependencies": {
+ "Examine.Core": "3.2.0",
+ "Examine.Lucene": "3.2.0",
+ "Microsoft.AspNetCore.DataProtection": "5.0.5",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0"
+ }
+ },
+ "Examine.Core": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "2f8pnvZf8COTyBcO3c3z8XR/sc6HqtE45922dwTEe7dCM1H5eoItUHpQ38SM3zX9sXKA2hHUJowggxyoYrPS0g==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0"
+ }
+ },
+ "Examine.Lucene": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "Rm9WVnGlOBOyvkmjWB9+BhTJPNjHwA34Pk/Q6LMYDQujn6kFpBLK//5gEVqPGvU33du0oPTK1BN5rjuqJJq/JQ==",
+ "dependencies": {
+ "Examine.Core": "3.2.0",
+ "Lucene.Net.QueryParser": "4.8.0-beta00016",
+ "Lucene.Net.Replicator": "4.8.0-beta00016",
+ "System.Threading": "4.3.0",
+ "System.Threading.AccessControl": "4.7.0"
+ }
+ },
+ "GreenDonut": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "tFwKox2+x2YVX6E7L9UP1NDS9bgDHIgDAtxlJAwLj9aNp1aOH1eN3CeDbLO6WcLesAD+EiZDdxxK4ygsc77gKA==",
+ "dependencies": {
+ "Microsoft.Extensions.ObjectPool": "8.0.0",
+ "System.Diagnostics.DiagnosticSource": "8.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.0"
+ }
+ },
+ "HotChocolate": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "HO46UcZrch0h8Tof1SWaDXASr3v6CPGis8S+O7t1XYOl6hV7JA3yXpC8FXwjGr4HUuGK2/Qy0UH1ONpE7oZczg==",
+ "dependencies": {
+ "HotChocolate.Authorization": "13.9.5",
+ "HotChocolate.Execution": "13.9.5",
+ "HotChocolate.Fetching": "13.9.5",
+ "HotChocolate.Types": "13.9.5",
+ "HotChocolate.Types.CursorPagination": "13.9.5",
+ "HotChocolate.Types.Mutations": "13.9.5",
+ "HotChocolate.Types.OffsetPagination": "13.9.5",
+ "HotChocolate.Validation": "13.9.5"
+ }
+ },
+ "HotChocolate.Abstractions": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "gK/Yly17RmeyePQTs2hmKHfQOKpA9G1qBQVgpl8HipgqZ9MDg7tv2fUeo+UCwJU0i+50xfWccm2Ln/IsQ1ndMQ==",
+ "dependencies": {
+ "HotChocolate.Language": "13.9.5",
+ "System.Collections.Immutable": "8.0.0"
+ }
+ },
+ "HotChocolate.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "0F/tIfqKCLVNuGOfYIAYz3KrkOElnd4VPa0s+xCjA+2JmnCcem/fpdnmGulm43X2JjIIXgUrcKMQyoGFvl5IqQ==",
+ "dependencies": {
+ "BananaCakePop.Middleware": "16.0.1",
+ "HotChocolate": "13.9.5",
+ "HotChocolate.Subscriptions.InMemory": "13.9.5",
+ "HotChocolate.Transport.Sockets": "13.9.5",
+ "HotChocolate.Types.Scalars.Upload": "13.9.5",
+ "HotChocolate.Utilities.DependencyInjection": "13.9.5"
+ }
+ },
+ "HotChocolate.AspNetCore.Authorization": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "r7PxnWBIXUqUSLPuKLKvUCf0yS2vT9tnk5uFkg6qtSHA88POOTankPLEVG87Neop0VYpYVG+EqbmMZDuc6AYcw==",
+ "dependencies": {
+ "HotChocolate": "13.9.5"
+ }
+ },
+ "HotChocolate.Authorization": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "sJobtxZjEmOupYmEq7DLx0B1B0JC95019zEatchp5ETtmtUTs+XbnX1TFy39EEMKwDkPP7Drm6otan6ohnTn6A==",
+ "dependencies": {
+ "HotChocolate.Execution": "13.9.5"
+ }
+ },
+ "HotChocolate.Execution": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "O9QZnb2iKFqnhV4eKfPF8VrbD70l2iBg89+66hhlSxe/kse//cgcytSioZ3ztBQG7kqq0C3G8cmPVqhANQJGJg==",
+ "dependencies": {
+ "HotChocolate.Abstractions": "13.9.5",
+ "HotChocolate.Execution.Abstractions": "13.9.5",
+ "HotChocolate.Fetching": "13.9.5",
+ "HotChocolate.Types": "13.9.5",
+ "HotChocolate.Utilities.DependencyInjection": "13.9.5",
+ "HotChocolate.Validation": "13.9.5",
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "System.Threading.Channels": "8.0.0"
+ }
+ },
+ "HotChocolate.Execution.Abstractions": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "KV9VLUwSQtfpDLn7Np1zhvfhHiTZRh0LodGEYpGfIxtQ3+ULytEQSOUbyleceWSc3GeI0lRTXVoSJSuuMFzKUQ==",
+ "dependencies": {
+ "HotChocolate.Abstractions": "13.9.5",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "HotChocolate.Fetching": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "kU6gpDO8L6waWAgdKtrH/oIJA8ajRMeZr2DHqPttZPowPAx96mCXABm6NdDEZ7sp6tNE9G9GApEFxwzMts11Bw==",
+ "dependencies": {
+ "GreenDonut": "13.9.5",
+ "HotChocolate.Types": "13.9.5"
+ }
+ },
+ "HotChocolate.Language": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "ba5HALzRe1nDXXNOnSM2VK0yZ+6bp41nGmOx/Orgf7niRfShPNvS+1+rTio1FH2mdmMFRzfmZl1pj44eSkqiyg==",
+ "dependencies": {
+ "HotChocolate.Language.SyntaxTree": "13.9.5",
+ "HotChocolate.Language.Utf8": "13.9.5",
+ "HotChocolate.Language.Visitors": "13.9.5",
+ "HotChocolate.Language.Web": "13.9.5"
+ }
+ },
+ "HotChocolate.Language.SyntaxTree": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "XgVqC0d5cmUz6mlPkLmmiZHjIFcLtmUwzC9TG4qIfaKx/8ARpAqL06vCIQ9Rnt52qLmpTCpueT5wkah/fXekTQ==",
+ "dependencies": {
+ "Microsoft.Extensions.ObjectPool": "8.0.0"
+ }
+ },
+ "HotChocolate.Language.Utf8": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "j/5kSSqR3vEVwMuJvOxzT03wxkrBHyOw5aEnI1sojf5kKBV2ld0//YPw4JS6GIlsYE8FTMX6YLidXUPv+AF6eA==",
+ "dependencies": {
+ "HotChocolate.Language.SyntaxTree": "13.9.5"
+ }
+ },
+ "HotChocolate.Language.Visitors": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "33IldmlQgRS6JDymfQ2TPnQ0FTxCo/CGFATpo42CO+dYELWt42oM4Jj9rajy80ZTscrf8zFo8pr8BnpHUIWKRw==",
+ "dependencies": {
+ "HotChocolate.Language.SyntaxTree": "13.9.5"
+ }
+ },
+ "HotChocolate.Language.Web": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "buF+sUWK01A5j4Iv/HrUJYbGre1/jfi3zt0Al8Tvn4EqgsDtKJjFAGf/0ZhgqRl8En+iPZ9Ek/VfN48JarJLlQ==",
+ "dependencies": {
+ "HotChocolate.Language.Utf8": "13.9.5"
+ }
+ },
+ "HotChocolate.Subscriptions": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "6+0/uhd50k6XntGSuGMKIkigTPC+bnidyI/KPT+4y/u3Pp05OtvLMHQ68xsMKsf6oB2eBXI9MvaTNkntiw4LLQ==",
+ "dependencies": {
+ "HotChocolate.Abstractions": "13.9.5",
+ "HotChocolate.Execution.Abstractions": "13.9.5"
+ }
+ },
+ "HotChocolate.Subscriptions.InMemory": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "nGNAJzBbz+eLLI9Q+WodMSRQUUun+t81S59mAqSMaz9IwYPoxhwe7IEcHpgl6sJFj48q9bai4ImdIrK77OLiLQ==",
+ "dependencies": {
+ "HotChocolate.Execution.Abstractions": "13.9.5",
+ "HotChocolate.Subscriptions": "13.9.5",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "HotChocolate.Transport.Sockets": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "yvKD5Z8vu6DBSsbbZmEljYVteFCEcIhy0FWd9qJ/clMrexkQLJE8FXwBvm1ldmdT77/7ZI41XLGZg/xg2SllmA==",
+ "dependencies": {
+ "System.IO.Pipelines": "8.0.0"
+ }
+ },
+ "HotChocolate.Types": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "gtC39bauWqSFObrSxJurQG8ubhn1nOHxsfPKVlBH65BzcGwRPSmLj7MGZ2T+8hUt9y4dN8REseJB+TVKHctHUQ==",
+ "dependencies": {
+ "HotChocolate.Abstractions": "13.9.5",
+ "HotChocolate.Types.Shared": "13.9.5",
+ "HotChocolate.Utilities": "13.9.5",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.ObjectPool": "8.0.0",
+ "System.ComponentModel.Annotations": "5.0.0",
+ "System.Text.Json": "8.0.0"
+ }
+ },
+ "HotChocolate.Types.CursorPagination": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "Ll8rR+8B1Y9HVG8F+kAXoPVmOmyEhGGouihlz9M1K63VIKWStB5HpzNglgeFYy5G41udBKYMFIlakrDrXBeDDA==",
+ "dependencies": {
+ "HotChocolate.Execution": "13.9.5",
+ "HotChocolate.Types": "13.9.5"
+ }
+ },
+ "HotChocolate.Types.Mutations": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "9R7CK9akollOaYndRPSsCsaINW6qCbDhZ0cKFeXtMI2vCJS+Lz3BStbIdm0W3XNFJGu4jqrPii3AZxQDAkHxJQ==",
+ "dependencies": {
+ "HotChocolate.Execution": "13.9.5",
+ "HotChocolate.Types": "13.9.5"
+ }
+ },
+ "HotChocolate.Types.OffsetPagination": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "A+qYXOT3qip9n44gfxT/RBmZSnOzP+PVpDk4mJXY8ud4xEvYDblsQL7lPlSV2y32LCeKMe9h5Y3eeSZ8J0w5pA==",
+ "dependencies": {
+ "HotChocolate.Execution": "13.9.5",
+ "HotChocolate.Types": "13.9.5"
+ }
+ },
+ "HotChocolate.Types.Scalars.Upload": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "svch625U4/6aJ4odOPu0t2lZwL1ctk64CNiQC5lbXxogtLOXT6NwdWoOmoyGjVthUpqLOpPoYR5uewAf6Lgvqg==",
+ "dependencies": {
+ "HotChocolate.Types": "13.9.5"
+ }
+ },
+ "HotChocolate.Types.Shared": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "JHYGQuDilEYdDg1s5I8wA4t2qgY6IPyN+8m25lpBPeI/Yoq4n7SQuszE63lssDJj+U8qfkOtjwTnSi4kLN6s+w==",
+ "dependencies": {
+ "HotChocolate.Language.SyntaxTree": "13.9.5"
+ }
+ },
+ "HotChocolate.Utilities": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "u6gNCVLaaA6oeYP1ifygPaoZGs7iHBGKbQF2eQuzKnZd5DmLqe/9ZB2SzIhabcOZ541l61jAaedQMolOMQfLAw=="
+ },
+ "HotChocolate.Utilities.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "EbZLEGxEs164nnRk4Pw82xMumr845p0f7csnbeqVsXquSbcdaopBMz+SKQjBFmIHqhyR9guQgOPEkNAhR4lhzw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0"
+ }
+ },
+ "HotChocolate.Validation": {
+ "type": "Transitive",
+ "resolved": "13.9.5",
+ "contentHash": "JUUSJhw75zM8sRt643gP+rM7g9QdJk6QnM3sScrAQ7ye0nByHMSUto/Z/KSquwBDkC5sGB8trLUcPZOG+Qv+HA==",
+ "dependencies": {
+ "HotChocolate.Types": "13.9.5",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "HtmlAgilityPack": {
+ "type": "Transitive",
+ "resolved": "1.11.57",
+ "contentHash": "zDxnHcAvi+qhZG602eKaPJKmzm0T8npKVML0RMwjrRBabpmTRtu2OVpfNkMUfYMgQ+5EllOkSeGxu0uFVV2zFw=="
+ },
+ "J2N": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "M5bwDajAARZiyqupU+rHQJnsVLxNBOHJ8vKYHd8LcLIb1FgLfzzcJvc31Qo5Xz/GEHFjDF9ScjKL/ks/zRTXuA=="
+ },
+ "K4os.Compression.LZ4": {
+ "type": "Transitive",
+ "resolved": "1.3.6",
+ "contentHash": "RxGhoJBjZCgGeZgDqOP4Krs1cR9PHInbz6d2N19Dic0Y6ZACzVKbR3uSpqfEZf4RiUbHk9aiog2eS22nQPTc2A=="
+ },
+ "Lucene.Net": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "DCtUbE/NIrisNI7hRwU+UKS3Cr6S2vH1XB9wvEHHI3anu5OUpX1Fkr/PDC7oFCaol/QCvzVLbLZVizAT1aTLpA==",
+ "dependencies": {
+ "J2N": "2.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "2.0.0"
+ }
+ },
+ "Lucene.Net.Analysis.Common": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "7pjEAIliWdih6E3I0hCE8hKcKKRx1LLzeQBslF1fhvzE1Sal4NyHd8RFJHV1Z+yHlBw4gCyyVIDZADiIoyqwxg==",
+ "dependencies": {
+ "Lucene.Net": "4.8.0-beta00016"
+ }
+ },
+ "Lucene.Net.Facet": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "O1MrRfhb9BMfRQHooyEFrkgNwYbTEbK/AkKhz26sy+xO+zAldJ8YKS/IsydHsE+frklIAWT0jyv0c3Dh9qBXSA==",
+ "dependencies": {
+ "Lucene.Net.Join": "4.8.0-beta00016",
+ "Lucene.Net.Queries": "4.8.0-beta00016"
+ }
+ },
+ "Lucene.Net.Grouping": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "y7QSEYfSnz7gEJS30xHsf8P0oMIreGGO08qC+UzKre29IAoUXdLLE2+vUfByGkcPuoGMIpZVBP51P6O647grBg==",
+ "dependencies": {
+ "Lucene.Net": "4.8.0-beta00016",
+ "Lucene.Net.Queries": "4.8.0-beta00016"
+ }
+ },
+ "Lucene.Net.Join": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "trUiWhV3QPgW4TNPrEP29AsTXE29ACR5+Vz22xjbPtFTwyXMozl95NELVG5aUVMTqdwyMhJ9Lj82QeoHDnN0jw==",
+ "dependencies": {
+ "Lucene.Net.Grouping": "4.8.0-beta00016"
+ }
+ },
+ "Lucene.Net.Queries": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "XBzdMDlan68V2ZlhAlP8Fd+Xx2Le8ec7cEN1kFF45Sipa3Q8L/tilJfwS9VHvMTvGkwPM/yj62eGbfGBgIMR8Q==",
+ "dependencies": {
+ "Lucene.Net": "4.8.0-beta00016"
+ }
+ },
+ "Lucene.Net.QueryParser": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "5dVvjXmzPaK8GD/eblJopTJMQmO6c6fvVPfBIOw46+jyZR+yESkUnWF1LtLoLXZQNrl4Dx8LKdes5G1QAM7eGA==",
+ "dependencies": {
+ "Lucene.Net.Analysis.Common": "4.8.0-beta00016",
+ "Lucene.Net.Queries": "4.8.0-beta00016",
+ "Lucene.Net.Sandbox": "4.8.0-beta00016"
+ }
+ },
+ "Lucene.Net.Replicator": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "BP007m7TtHfOFNGoipn1Y3kgHir0yvDfyCW9g7P6PQIo7nNkyyHuEK9slVEkPhLq+21Q2EnnHl7jMGeh0aK2eA==",
+ "dependencies": {
+ "J2N": "2.0.0",
+ "Lucene.Net": "4.8.0-beta00016",
+ "Lucene.Net.Facet": "4.8.0-beta00016",
+ "Newtonsoft.Json": "10.0.1"
+ }
+ },
+ "Lucene.Net.Sandbox": {
+ "type": "Transitive",
+ "resolved": "4.8.0-beta00016",
+ "contentHash": "wMsRZtbNx0wvX3mtNjpOwQmKx3Ij4UGHWIYHbvnzMWlPUTgtOpYSj02REL4hOxI71WBZylpGB5EWfQ2eEld63g==",
+ "dependencies": {
+ "Lucene.Net": "4.8.0-beta00016"
+ }
+ },
+ "MailKit": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "jVmB3Nr0JpqhyMiXOGWMin+QvRKpucGpSFBCav9dG6jEJPdBV+yp1RHVpKzxZPfT+0adaBuZlMFdbIciZo1EWA==",
+ "dependencies": {
+ "MimeKit": "4.3.0"
+ }
+ },
+ "Markdown": {
+ "type": "Transitive",
+ "resolved": "2.2.1",
+ "contentHash": "A6veXuFP1n50RbmFNtTgfHxnHmwMsgFLSCgS1xWbg5L8n5N6HFEksTlXocZ0LsmGW4leBzeLJd+BY7+g83zFJA==",
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Text.RegularExpressions": "4.1.0"
+ }
+ },
+ "MessagePack": {
+ "type": "Transitive",
+ "resolved": "2.5.140",
+ "contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==",
+ "dependencies": {
+ "MessagePack.Annotations": "2.5.140",
+ "Microsoft.NET.StringTools": "17.6.3",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "MessagePack.Annotations": {
+ "type": "Transitive",
+ "resolved": "2.5.140",
+ "contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ=="
+ },
+ "Microsoft.AspNetCore.Authentication.JwtBearer": {
+ "type": "Transitive",
+ "resolved": "8.0.6",
+ "contentHash": "devoUZd8YqikCheBVYpIyvp9psM2Y2ZhOvq1zL2YSjIoq3FUQH8LpLkGak+8oAi/5DGqX8KWyLpZJSUXtOAVCw==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.1.2"
+ }
+ },
+ "Microsoft.AspNetCore.Authorization": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "vVx5fiR2ysWoZq1PcVkBdzw9g+E2gIPS26IvJslxnLapwXs4SXp+y5BbP4RSApOlQLTUeGL3TaG4y1Vt8V4eDA==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Metadata": "8.0.5",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.1",
+ "Microsoft.Extensions.Options": "8.0.2"
+ }
+ },
+ "Microsoft.AspNetCore.Components": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "0F6zs+qfVWGcvBSfEp+Oug54wjOuAZ3oDk3AnI3A4oQ5hvhgTbH3HqXe9xuqdZmYA94ap5JCwanVJfh+TZN0/A==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Authorization": "8.0.5",
+ "Microsoft.AspNetCore.Components.Analyzers": "8.0.5"
+ }
+ },
+ "Microsoft.AspNetCore.Components.Analyzers": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "TlOBZK94K9VuveWBGTfKUkh86QrAnh2aeJzGFYA4hvFvYB4sAWKhgu4iHEy9LQozHh5EgPckY65w3TbXeTP7Uw=="
+ },
+ "Microsoft.AspNetCore.Components.Forms": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "yRtm0OxhqoVxYko6ew4FVHDSG3krBqnLX59mBy/OBzKCxt9ias++SIaHvpTLsDHR9MeYzq7EzkNnyLjZJQbdsA==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Components": "8.0.5"
+ }
+ },
+ "Microsoft.AspNetCore.Components.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "KaB8kgNfv/iYW1vdirVHFsfjsuGaAmODCRWf2lzO1Eyvc20Glx17wVpFOjH1FSAa23t6A2VM8y8ktk3n/vqNmQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Components": "8.0.5",
+ "Microsoft.AspNetCore.Components.Forms": "8.0.5",
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0",
+ "Microsoft.JSInterop": "8.0.5",
+ "System.IO.Pipelines": "8.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.Cryptography.Internal": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "ryzsiEKr1qJ8f/CARxK8/zTX41aGUpoYOrZuKpsWiK6LwnuynxSFrzBDF04bT7xHF/i0EOeqkIRvfIohI/EsTg=="
+ },
+ "Microsoft.AspNetCore.Cryptography.KeyDerivation": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "soX8sz1IUCEpsx3UEZUhdZ0RIi890qr6l1LEbFWMcbzSs0MhYM/WK+W889dkEBycVMh/fUzodMBbFVSp9tM0AQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Cryptography.Internal": "8.0.1"
+ }
+ },
+ "Microsoft.AspNetCore.DataProtection": {
+ "type": "Transitive",
+ "resolved": "5.0.5",
+ "contentHash": "fYCIRLS3Q7eokBwzlcaKQnCBLDFXqjnyJO9lqOX0/V9zvy/JiOfvwKSkm6v5QJuNpXZywb/DnAq5Pdb3woc3MQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Cryptography.Internal": "5.0.5",
+ "Microsoft.AspNetCore.DataProtection.Abstractions": "5.0.5",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "Microsoft.Win32.Registry": "5.0.0",
+ "System.Security.Cryptography.Xml": "5.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.DataProtection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.5",
+ "contentHash": "k1DgnNSBG0lf9P+QDnU+FFeLI4b4hhw4iT+iw29XkcRaCGpcPwq7mLJUtz2Yqq/FRyEwlcteTJmdWEoJb0Fxag=="
+ },
+ "Microsoft.AspNetCore.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "CSVd9h1TdWDT2lt62C4FcgaF285J4O3MaOqTVvc7xP+3bFiwXcdp6qEd+u1CQrdJ+xJuslR+tvDW7vWQ/OH5Qw==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Hosting.Server.Abstractions": "1.0.2",
+ "Microsoft.AspNetCore.Http.Abstractions": "1.0.2",
+ "Microsoft.Extensions.Configuration.Abstractions": "1.0.2",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.2",
+ "Microsoft.Extensions.FileProviders.Abstractions": "1.0.1",
+ "Microsoft.Extensions.Logging.Abstractions": "1.0.2"
+ }
+ },
+ "Microsoft.AspNetCore.Hosting.Server.Abstractions": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "6ZtFh0huTlrUl72u9Vic0icCVIQiEx7ULFDx3P7BpOI97wjb0GAXf8B4m9uSpSGf0vqLEKFlkPbvXF0MXXEzhw==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Features": "1.0.2",
+ "Microsoft.Extensions.Configuration.Abstractions": "1.0.2"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Abstractions": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "peJqc7BgYwhTzOIfFHX3/esV6iOXf17Afekh6mCYuUD3aWyaBwQuWYaKLR+RnjBEWaSzpCDgfCMMp5Y3LUXsiA==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Features": "1.0.2",
+ "System.Globalization.Extensions": "4.0.1",
+ "System.Linq.Expressions": "4.1.1",
+ "System.Reflection.TypeExtensions": "4.1.0",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Text.Encodings.Web": "4.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Features": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "6sVnhFwtsjEVL09FsYpAttQ3Og6Jxg1dQFLF9XQUThi1myq64imjhj1swd92TXMLCp5wmt8szDixZXXdx64qhg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "5.0.0",
+ "System.IO.Pipelines": "5.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.JsonPatch": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "Zq13zrOOnDs6PZRlu3sXVEZ1QGbJj7Fw48UtC/ZYIWZ18T8Jkjo7OodzYXSaJgDAXAtDoakvo83N8Mjx7EI9Gg==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.7.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Microsoft.AspNetCore.Metadata": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "+gChhwbmBER5Olyf7Uk4oMWYPKNcWmzm+WIf3HHDhKCmrMXQ18PMF3Z7RtPC7nYghTD6GCiP04dNWB+yORlWqw=="
+ },
+ "Microsoft.AspNetCore.Mvc.NewtonsoftJson": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "YWNvdHGCHGWKILgEzUDe6soozYnknlSB3IY092zxjdgLoaCPRte2lnbRRS7Nt0lEFbsFjN/Eo2fCI5yusPK0iQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.JsonPatch": "8.0.1",
+ "Newtonsoft.Json": "13.0.3",
+ "Newtonsoft.Json.Bson": "1.0.2"
+ }
+ },
+ "Microsoft.AspNetCore.Mvc.Razor.Extensions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "M0h+ChPgydX2xY17agiphnAVa/Qh05RAP8eeuqGGhQKT10claRBlLNO6d2/oSV8zy0RLHzwLnNZm5xuC/gckGA==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Razor.Language": "6.0.0",
+ "Microsoft.CodeAnalysis.Razor": "6.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "4Gy4Vz4koUBroyu1J57XIQ8zT6oOzggjn/mWc3YTpB/rnaR27Y+msTM8+/ecZ/V26KARrFq2HFylmKFQQtiD+A==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.0",
+ "Microsoft.CodeAnalysis.Razor": "6.0.0",
+ "Microsoft.Extensions.DependencyModel": "8.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.Razor.Language": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yCtBr1GSGzJrrp1NJUb4ltwFYMKHw/tJLnIDvg9g/FnkGIEzmE19tbCQqXARIJv5kdtBgsoVIdGLL+zmjxvM/A=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "1.1.1",
+ "contentHash": "yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w=="
+ },
+ "Microsoft.CodeAnalysis.Analyzers": {
+ "type": "Transitive",
+ "resolved": "3.3.4",
+ "contentHash": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g=="
+ },
+ "Microsoft.CodeAnalysis.Common": {
+ "type": "Transitive",
+ "resolved": "4.8.0",
+ "contentHash": "/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Analyzers": "3.3.4",
+ "System.Collections.Immutable": "7.0.0",
+ "System.Reflection.Metadata": "7.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.8.0",
+ "contentHash": "+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "[4.8.0]"
+ }
+ },
+ "Microsoft.CodeAnalysis.Razor": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "uqdzuQXxD7XrJCbIbbwpI/LOv0PBJ9VIR0gdvANTHOfK5pjTaCir+XcwvYvBZ5BIzd0KGzyiamzlEWw1cK1q0w==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Razor.Language": "6.0.0",
+ "Microsoft.CodeAnalysis.CSharp": "4.0.0",
+ "Microsoft.CodeAnalysis.Common": "4.0.0"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.SqlClient": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "MW5E9HFvCaV069o8b6YpuRDPBux8s96qDnOJ+4N9QNUCs7c5W3KxwQ+ftpAjbMUlImL+c9WR+l+f5hzjkqhu2g==",
+ "dependencies": {
+ "Azure.Identity": "1.7.0",
+ "Microsoft.Data.SqlClient.SNI.runtime": "5.1.0",
+ "Microsoft.Identity.Client": "4.47.2",
+ "Microsoft.IdentityModel.JsonWebTokens": "6.24.0",
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.24.0",
+ "Microsoft.SqlServer.Server": "1.0.0",
+ "System.Configuration.ConfigurationManager": "6.0.1",
+ "System.Diagnostics.DiagnosticSource": "6.0.0",
+ "System.Runtime.Caching": "6.0.0",
+ "System.Security.Cryptography.Cng": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0",
+ "System.Text.Encoding.CodePages": "6.0.0",
+ "System.Text.Encodings.Web": "6.0.0"
+ }
+ },
+ "Microsoft.Data.SqlClient.SNI.runtime": {
+ "type": "Transitive",
+ "resolved": "5.1.0",
+ "contentHash": "jVsElisM5sfBzaaV9kdq2NXZLwIbytetnsOIlJ0cQGgQP4zFNBmkfHBnpwtmKrtBJBEV9+9PVQPVrcCVhDgcIg=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "+7uDWNYZmLrVq9eABAKwy1phGbpoFVohKCUoh/nGg9WiBwi856EkAJYFiQhTJWoXxzpInkLFj/6KACoSB7ODYg==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "8.0.1",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "s8C8xbwMb79EqzTaIhwiBrYtbv6ATnUW19pJed4fKVgN5K4VPQ7JUGqBLztknvD6EJIMKrfRnINGTjnZghrDGw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.6"
+ }
+ },
+ "Microsoft.EntityFrameworkCore": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "hPagYIuWPpZF6AwOR7mlKv+GLEk8wrbsIVr8qYHqSWN2zDghOYTu2Qxi6CtrJP3V9UgzZ6sjQVM/jnrodpz10Q==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "8.0.1",
+ "Microsoft.EntityFrameworkCore.Analyzers": "8.0.1",
+ "Microsoft.Extensions.Caching.Memory": "8.0.0",
+ "Microsoft.Extensions.Logging": "8.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "KBj2meUDWmMDRYpxyebyYQMf7+aGyTWvKD9UTuFKPP/NQGVsJUqbCCM+p/LCxSppcm2dQt+z73e/yBFlq/2jmA=="
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "8HgodfPiUEMu5rlkcGa9CJdEpF5VeaeWhHAdKuKstgr6GBFc91xCJo/haOVzM8jKPS167PrlC8ChYdtzFVpp4A=="
+ },
+ "Microsoft.EntityFrameworkCore.Relational": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "uL1tO14kbsi0EqtfvElGJ68irUlu2DbkTMKz4+8WvVc1TV2GwVgfwQWv7uwDqsB5+JK9alfP3tZjHkWiSpk3oA==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "8.0.1",
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Sqlite": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "9OF1gaBzZy/eYwogfNCXkkA0t6jy/Wcno6o9dzT27P1yZ3bdKSR45OqOLsa2+lN+QLJaiv8pJSIWymugfdLQyA==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Sqlite.Core": "8.0.1",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.6"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "kmNSZbVxbRFn1tRySkzRJFa2lNE1olgGyCB1FzcReua6jMkyRxr6v9rTv/idNVkSGHSnHitlu4DvZ//y1YFzjA==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "8.0.1",
+ "Microsoft.EntityFrameworkCore.Relational": "8.0.1",
+ "Microsoft.Extensions.DependencyModel": "8.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.SqlServer": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "H//G5S3KEpf2BmIsGjy3Qkigfgx/Pvv8SwP1FV7tykCUBg1VTC9k87F8IdrOUQb/w1nBIvUcmE05xbnqSWcpQw==",
+ "dependencies": {
+ "Microsoft.Data.SqlClient": "5.1.1",
+ "Microsoft.EntityFrameworkCore.Relational": "8.0.1"
+ }
+ },
+ "Microsoft.Extensions.ApiDescription.Server": {
+ "type": "Transitive",
+ "resolved": "6.0.5",
+ "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw=="
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "7pqivmrZDzo1ADPkRwjy+8jtRKWRCPag9qPI+p7sgu7Q4QreWhcvbiWXsbhP+yY8XSiDvZpu2/LWdBv7PnmOpQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "McP+Lz/EKwvtCv48z0YImw+L1gi1gy5rHhNaNIY2CrjloV+XY8gydT8DjMR6zWeL13AFK+DioVpppwAuO1Gi1w==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "8.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "C2wqUoh9OmRL1akaCcKSTmRU8z0kckfImG7zLNI8uyi47Lp+zd5LWAD17waPQEqCz3ioWOCrFUo+JJuoeZLOBw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "8.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
+ "System.Text.Json": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "fGLiCRLMYd00JYpClraLjJTNKLmMJPnqxMaiRzEBIIvevlzxz33mXy39Lkd48hu1G+N21S7QpaO5ZzKsI6FRuA=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "NSmDw3K0ozNDgShSIpsZcbFIzBX4w28nDag+TfaQujkXGazBm+lid5onlWoCBy4VsLxqnnKjEBbGSJVWJMf43g==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "8.0.0",
+ "System.Text.Json": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Diagnostics": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "3PZp/YSkIXrF7QK7PfC1bkyRYwqOHpWFad8Qx+4wkuumAeXo1NHaxpS9LboNA9OvNSAu+QOVlXbMyoY+pHSqcw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "8.0.0",
+ "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Diagnostics.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JHYCQG7HmugNYUhOl368g+NMxYE/N/AiclCYRNlgCY9eVyiBkOHMwK4x60RYMxv9EL3+rmj1mqHvdCiPpC+D4Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0",
+ "System.Diagnostics.DiagnosticSource": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Composite": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "0IoXXfkgKpYJB1t2lC0jPXAxuaywRNc9y2Mq96ZZNKBthL38vusa2UK73+Bm6Kq/9a5xNHJS6NhsSN+i5TEtkA==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Embedded": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "kZzZXb13F0XtH5YDb4JmwyKtMfmhwIRplFLYct7uRbZYzQbfVGtWgjN2Nv2k/NpODRyaYPXFl03JuD70KWcHjQ==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ=="
+ },
+ "Microsoft.Extensions.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "AG7HWwVRdCHlaA++1oKDxLsXIBxmDpMPb3VoyOoAghEWnkUvEAdYQUwnV4jJbAaa/nMYNiEh5ByoLauZBEiovg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cWz4caHwvx0emoYe7NkHPxII/KkTI8R/LC9qdqJqnKv2poTJ4e2qqPGQqvRoQ5kaSA4FU5IV3qFAuLuOhoqULQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Diagnostics": "8.0.0",
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Http.Polly": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "UbZJib/wukyGVTvX7ZLS988su5XLrDoHDBSXp00Jxre0ONB1XW7e1zTk7vQbJq1PzmD5x7CBqdZQlH2OWte+Uw==",
+ "dependencies": {
+ "Microsoft.Extensions.Http": "8.0.0",
+ "Polly": "7.2.4",
+ "Polly.Extensions.Http": "3.0.0"
+ }
+ },
+ "Microsoft.Extensions.Identity.Core": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "/8GGtoIIoaeqk3PLV++ClqmVvHvzimhiSiWEdM9kdaNVkfR0JSDjx2AQHZcuekqiSPyNprFcSAg81uGWtdqP3w==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Cryptography.KeyDerivation": "8.0.1",
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.1"
+ }
+ },
+ "Microsoft.Extensions.Identity.Stores": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "yFfKr8NSb178uc8hA2k1Pqr8QB+dUCTbhesO4ooskPKor0ulCWvv7v9kmdCEqloIlxlO+8fuGnzSSvfRx80aeA==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Identity.Core": "8.0.1",
+ "Microsoft.Extensions.Logging": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "RIFgaqoaINxkM2KTOw72dmilDmTrYA0ns2KW4lDz4gZ2+o6IQ894CzmdL3StM2oh7QQq44nCWiqKqc4qUI9Jmg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.1"
+ }
+ },
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "4pm+XgxSukskwjzDDfSjG4KNUIOdFF2VaqZZDtTzoyQMOVSnlV6ZM8a9aVu5dg9LVZTB//utzSc8fOi0b0Mb2Q=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.2",
+ "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options.ConfigurationExtensions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options.DataAnnotations": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "z6p6q/N/hiU19A9tK7pjhXHpiYArO4oIICipxUviBEIOiDIoKRO7k6qItvw7alKcLtfHZOWmspuSKpvIvH0N8w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.ICU.ICU4C.Runtime.linux-arm64": {
+ "type": "Transitive",
+ "resolved": "72.1.0.3",
+ "contentHash": "u/2cPX6JBgSgTOeDjkb2A672LsL3zQo60ViYUTqHOrxuFOIx0ag6bFu2WgN4zRZ71K6L0fubnrlS1HpN+k5kyA=="
+ },
+ "Microsoft.ICU.ICU4C.Runtime.linux-x64": {
+ "type": "Transitive",
+ "resolved": "72.1.0.3",
+ "contentHash": "q1iHc4EGCBYbpb+gfMZGn6L/WuBei/la52pRbxlVy4ed7FdB9UmvUXhoRzv6OsYa6E4VlTlj6EKgYvrwPkVGKQ=="
+ },
+ "Microsoft.ICU.ICU4C.Runtime.win-arm64": {
+ "type": "Transitive",
+ "resolved": "72.1.0.3",
+ "contentHash": "/h8OPK1fqrI9t8hKNmpnSy7MYssGB1CtoXANsduFqf0Sc+OOtfoCIvRp2Mt9Fk80CmtU/53TldGvt1oCH7KpEA=="
+ },
+ "Microsoft.ICU.ICU4C.Runtime.win-x64": {
+ "type": "Transitive",
+ "resolved": "72.1.0.3",
+ "contentHash": "7j6NsmvKuVxgoFsoy0Ty7I09V/tvrQBZN+ddfHtz/OWNRaEIy7PsAguGoyD4AcQZh/KkfT9RQlHoQJ4xVQPr6g=="
+ },
+ "Microsoft.ICU.ICU4C.Runtime.win-x86": {
+ "type": "Transitive",
+ "resolved": "72.1.0.3",
+ "contentHash": "xTHoHJKtgHDsYkQ/RU3o4U36ktjQqnR+ML00HDDK2SWr+9nMekxnXvtLZ2I4cqF8s51frxqTRgx1jDVtIzCf3w=="
+ },
+ "Microsoft.Identity.Client": {
+ "type": "Transitive",
+ "resolved": "4.56.0",
+ "contentHash": "rr4zbidvHy9r4NvOAs5hdd964Ao2A0pAeFBJKR95u1CJAVzbd1p6tPTXUZ+5ld0cfThiVSGvz6UHwY6JjraTpA==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Abstractions": "6.22.0"
+ }
+ },
+ "Microsoft.Identity.Client.Extensions.Msal": {
+ "type": "Transitive",
+ "resolved": "4.56.0",
+ "contentHash": "H12YAzEGK55vZ+QpxUzozhW8ZZtgPDuWvgA0JbdIR9UhMUplj29JhIgE2imuH8W2Nw9D8JKygR1uxRFtpSNcrg==",
+ "dependencies": {
+ "Microsoft.Identity.Client": "4.56.0",
+ "System.IO.FileSystem.AccessControl": "5.0.0",
+ "System.Security.Cryptography.ProtectedData": "4.5.0"
+ }
+ },
+ "Microsoft.IdentityModel.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.1.2",
+ "contentHash": "33eTIA2uO/L9utJjZWbKsMSVsQf7F8vtd6q5mQX7ZJzNvCpci5fleD6AeANGlbbb7WX7XKxq9+Dkb5e3GNDrmQ=="
+ },
+ "Microsoft.IdentityModel.JsonWebTokens": {
+ "type": "Transitive",
+ "resolved": "7.1.2",
+ "contentHash": "cloLGeZolXbCJhJBc5OC05uhrdhdPL6MWHuVUnkkUvPDeK7HkwThBaLZ1XjBQVk9YhxXE2OvHXnKi0PLleXxDg==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Tokens": "7.1.2"
+ }
+ },
+ "Microsoft.IdentityModel.Logging": {
+ "type": "Transitive",
+ "resolved": "7.1.2",
+ "contentHash": "YCxBt2EeJP8fcXk9desChkWI+0vFqFLvBwrz5hBMsoh0KJE6BC66DnzkdzkJNqMltLromc52dkdT206jJ38cTw==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Abstractions": "7.1.2"
+ }
+ },
+ "Microsoft.IdentityModel.Protocols": {
+ "type": "Transitive",
+ "resolved": "7.1.2",
+ "contentHash": "SydLwMRFx6EHPWJ+N6+MVaoArN1Htt92b935O3RUWPY1yUF63zEjvd3lBu79eWdZUwedP8TN2I5V9T3nackvIQ==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Logging": "7.1.2",
+ "Microsoft.IdentityModel.Tokens": "7.1.2"
+ }
+ },
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect": {
+ "type": "Transitive",
+ "resolved": "7.1.2",
+ "contentHash": "6lHQoLXhnMQ42mGrfDkzbIOR3rzKM1W1tgTeMPLgLCqwwGw0d96xFi/UiX/fYsu7d6cD5MJiL3+4HuI8VU+sVQ==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Protocols": "7.1.2",
+ "System.IdentityModel.Tokens.Jwt": "7.1.2"
+ }
+ },
+ "Microsoft.IdentityModel.Tokens": {
+ "type": "Transitive",
+ "resolved": "7.1.2",
+ "contentHash": "oICJMqr3aNEDZOwnH5SK49bR6Z4aX0zEAnOLuhloumOSuqnNq+GWBdQyrgILnlcT5xj09xKCP/7Y7gJYB+ls/g==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Logging": "7.1.2"
+ }
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "2.3.2",
+ "contentHash": "Oh1qXXFdJFcHozvb4H6XYLf2W0meZFuG0A+TfapFPj9z5fd4vxiARGEhAaLj/6XWQaMYIv4SH/9Q6H78Hw0E2Q=="
+ },
+ "Microsoft.JSInterop": {
+ "type": "Transitive",
+ "resolved": "8.0.5",
+ "contentHash": "FzBXOrFd7KAVm+Ot1Gxgu1LdFjxWmn0VGEXXH+LII5nd59oHADrN2yMJGS6gJlDtz4ZcAJ+DWGJLBAFhsLOfRQ=="
+ },
+ "Microsoft.NET.StringTools": {
+ "type": "Transitive",
+ "resolved": "17.6.3",
+ "contentHash": "N0ZIanl1QCgvUumEL1laasU0a7sOE5ZwLZVTn0pAePnfhq8P7SvTjF8Axq+CnavuQkmdQpGNXQ1efZtu5kDFbA=="
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ=="
+ },
+ "Microsoft.NETCore.Targets": {
+ "type": "Transitive",
+ "resolved": "1.1.3",
+ "contentHash": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ=="
+ },
+ "Microsoft.OpenApi": {
+ "type": "Transitive",
+ "resolved": "1.2.3",
+ "contentHash": "Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw=="
+ },
+ "Microsoft.SqlServer.Server": {
+ "type": "Transitive",
+ "resolved": "1.0.0",
+ "contentHash": "N4KeF3cpcm1PUHym1RmakkzfkEv3GRMyofVv40uXsQhCQeglr2OHNcUk2WOG51AKpGO8ynGpo9M/kFXSzghwug=="
+ },
+ "Microsoft.Win32.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "Microsoft.Win32.Registry": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
+ "dependencies": {
+ "System.Security.AccessControl": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "MimeKit": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "39KDXuERDy5VmHIn7NnCWvIVp/Ar4qnxZWg9m06DfRqDbW1B6zFv9o3Tdoa4CCu71tE/0SRqRCN5Z+bbffw6uw==",
+ "dependencies": {
+ "BouncyCastle.Cryptography": "2.2.1",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Security.Cryptography.Pkcs": "7.0.3",
+ "System.Text.Encoding.CodePages": "7.0.0"
+ }
+ },
+ "MiniProfiler.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "4.3.8",
+ "contentHash": "dohMvXpjKDPv/edl7gwKhq80JBqRLLRSwVJB9bo0UYqsgEox7BZyYS/4vBty+UsZ59pYYYhMUpUKHVWLLj/PBw==",
+ "dependencies": {
+ "MiniProfiler.Shared": "4.3.8"
+ }
+ },
+ "MiniProfiler.AspNetCore.Mvc": {
+ "type": "Transitive",
+ "resolved": "4.3.8",
+ "contentHash": "aJ6Kkw2zMy36cKDWTjQYo/pJ6bhPBRA8z4NO8REe+xDhv8+fk58P526Bi52gnvsDp4jIVk5AQ8nQDgPUS/K+7A==",
+ "dependencies": {
+ "MiniProfiler.AspNetCore": "4.3.8"
+ }
+ },
+ "MiniProfiler.Shared": {
+ "type": "Transitive",
+ "resolved": "4.3.8",
+ "contentHash": "SfXNX90fmDm373YAla0z06plTCj6YbByQJOm6G8/9kE6Hf4UALJxySyiMB9O4KYeTc6Ha1EFQDs6jLhio+bBFA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0",
+ "Newtonsoft.Json": "13.0.1",
+ "System.ComponentModel.Primitives": "4.3.0",
+ "System.Data.Common": "4.3.0",
+ "System.Diagnostics.DiagnosticSource": "4.4.1",
+ "System.Diagnostics.StackTrace": "4.3.0",
+ "System.Dynamic.Runtime": "4.3.0",
+ "System.Reflection.Emit.Lightweight": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Serialization.Primitives": "4.3.0",
+ "System.Threading.Tasks.Parallel": "4.3.0"
+ }
+ },
+ "NCrontab": {
+ "type": "Transitive",
+ "resolved": "3.3.3",
+ "contentHash": "2yzZXZLI0YpxrNgWnW/4xoo7ErLgWJIwTljRVEJ3hyjc7Kw9eGdjbFZGP1AhBuTUEZQ443PgZifG1yox6Qo1/A=="
+ },
+ "NETStandard.Library": {
+ "type": "Transitive",
+ "resolved": "1.6.1",
+ "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.Win32.Primitives": "4.3.0",
+ "System.AppContext": "4.3.0",
+ "System.Collections": "4.3.0",
+ "System.Collections.Concurrent": "4.3.0",
+ "System.Console": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tools": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Globalization.Calendars": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.Compression": "4.3.0",
+ "System.IO.Compression.ZipFile": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.Linq.Expressions": "4.3.0",
+ "System.Net.Http": "4.3.0",
+ "System.Net.Primitives": "4.3.0",
+ "System.Net.Sockets": "4.3.0",
+ "System.ObjectModel": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Security.Cryptography.X509Certificates": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Text.Encoding.Extensions": "4.3.0",
+ "System.Text.RegularExpressions": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "System.Threading.Timer": "4.3.0",
+ "System.Xml.ReaderWriter": "4.3.0",
+ "System.Xml.XDocument": "4.3.0"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Newtonsoft.Json.Bson": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "QYFyxhaABwmq3p/21VrZNYvCg3DaEoN/wUuw5nmfAf0X3HLjgupwhkEWdgfb9nvGAUIv3osmZoD3kKl4jxEmYQ==",
+ "dependencies": {
+ "Newtonsoft.Json": "12.0.1"
+ }
+ },
+ "NPoco": {
+ "type": "Transitive",
+ "resolved": "5.7.1",
+ "contentHash": "6qjyBqqc0TSK/xHjXA6tSZhABSDQqXGrTOIdUIVazPsmN0OyTaBTEtwV2wTV0NyfkzcRPhLyO6bIW89ZFNvlWg==",
+ "dependencies": {
+ "System.Linq.Async": "5.0.0",
+ "System.Reflection.Emit.Lightweight": "4.7.0"
+ }
+ },
+ "NPoco.SqlServer": {
+ "type": "Transitive",
+ "resolved": "5.7.1",
+ "contentHash": "39esICE6E8oMQF3E2PgimW7EpjNyuRJgPZDzzYFPjtBoSw8TUfAVRNkSiQ9LND812Yf7vCX9DCIOi/roOtrxHA==",
+ "dependencies": {
+ "Microsoft.Data.SqlClient": "3.0.0",
+ "NPoco": "5.7.1",
+ "Polly": "7.2.3"
+ }
+ },
+ "NUglify": {
+ "type": "Transitive",
+ "resolved": "1.20.2",
+ "contentHash": "vz/SjCdpxr0Jp09VzMeezid7rwbXimik2QO1dzxzDcN3bXGJloDGDVh0zoD6DA23y6yrRzxv1ZKJ3kKzV3rqyA=="
+ },
+ "OpenIddict": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "j7jd8qJbHiZjVrVmHmp/ZfrVuxjcuwMTNhI5r404/KR4z8QtI78cUOaEwCGJUNHQU9/YJ836/bKXs9S9GFY6gw==",
+ "dependencies": {
+ "OpenIddict.Abstractions": "4.10.1",
+ "OpenIddict.Client": "4.10.1",
+ "OpenIddict.Client.SystemIntegration": "4.10.1",
+ "OpenIddict.Client.SystemNetHttp": "4.10.1",
+ "OpenIddict.Client.WebIntegration": "4.10.1",
+ "OpenIddict.Core": "4.10.1",
+ "OpenIddict.Server": "4.10.1",
+ "OpenIddict.Validation": "4.10.1",
+ "OpenIddict.Validation.ServerIntegration": "4.10.1",
+ "OpenIddict.Validation.SystemNetHttp": "4.10.1"
+ }
+ },
+ "OpenIddict.Abstractions": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "r2oCgsk8hG82TmT5g7yTzGLrmZGTwn6/zISMXqqpM9rjQUH0/FZ7NgwJy0f1j+HZSyBNj3jjYQIjx6a7qYBYqA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0",
+ "Microsoft.IdentityModel.Tokens": "7.0.0"
+ }
+ },
+ "OpenIddict.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "Fcfi+8qFeALV3eZ9P5sZa5xmIsqdfyHOmhq0r1qbVw0nC7cOj/+grKKiRpFRqgYEuMeFoq3V45K1BgzkoKUw1A==",
+ "dependencies": {
+ "OpenIddict": "4.10.1",
+ "OpenIddict.Client.AspNetCore": "4.10.1",
+ "OpenIddict.Client.DataProtection": "4.10.1",
+ "OpenIddict.Server.AspNetCore": "4.10.1",
+ "OpenIddict.Server.DataProtection": "4.10.1",
+ "OpenIddict.Validation.AspNetCore": "4.10.1",
+ "OpenIddict.Validation.DataProtection": "4.10.1"
+ }
+ },
+ "OpenIddict.Client": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "bPIySBhDi9A8GmH+eOkjfeNvJRe9MXWXVZoKeX0dGRdb5v9D54wSDWNgq0koqkG29rZFElUDbxcV1KNMRQ2nEQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.IdentityModel.JsonWebTokens": "7.0.0",
+ "Microsoft.IdentityModel.Protocols": "7.0.0",
+ "OpenIddict.Abstractions": "4.10.1"
+ }
+ },
+ "OpenIddict.Client.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "+JcTh5d15a3ZYX5+39KUHrKJ6uLkKpDiSApA+g204z3Mm1SZNCcR/VIwWm/oNRkIHuLeX7qkQXz/rutru+JKVQ==",
+ "dependencies": {
+ "OpenIddict.Client": "4.10.1"
+ }
+ },
+ "OpenIddict.Client.DataProtection": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "pjx1cTcOoCIqkuX2ciy81EY90quR8INtDneGjqOefvMYEUSZVIpEcSaf+qVlS78T815SxkIR3aBDzKfrxkcLMQ==",
+ "dependencies": {
+ "OpenIddict.Client": "4.10.1"
+ }
+ },
+ "OpenIddict.Client.SystemIntegration": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "QDDJ2omYvHNYIC2b4jRGAQ55JSFm7I+uvrYFq7KHUDXXxcRzC8sXRxswWZcAXrfmSlrW4GtpcPB7C2bIiymyng==",
+ "dependencies": {
+ "Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
+ "OpenIddict.Client": "4.10.1"
+ }
+ },
+ "OpenIddict.Client.SystemNetHttp": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "KWxeqXucLiUuUxPkouQUstbsrNf9nN/s5cbr76cQKm15qmKQtr9sOSS8PodCd/Mz5pFQ/n3/z0glx6BMsC348A==",
+ "dependencies": {
+ "Microsoft.Extensions.Http.Polly": "8.0.0",
+ "OpenIddict.Client": "4.10.1"
+ }
+ },
+ "OpenIddict.Client.WebIntegration": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "/orH7xk6N/AmOHdaK+x3Dsc+DZ/pPgnxrYYSOYkLfOnpZzq9K+B8Z+RM/RZO9BGVFKz12KOoA9g0geDHuH/Dlw==",
+ "dependencies": {
+ "OpenIddict.Client": "4.10.1",
+ "OpenIddict.Client.SystemNetHttp": "4.10.1"
+ }
+ },
+ "OpenIddict.Core": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "/us1vkDDpwX3aWrW1tEuKaJeMSQvfhT4mFgrZiaXIjG3xG3e+ye5oOaTtitNwwXZpe0BSkRsWhNXQzASoc1S3w==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Memory": "8.0.0",
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0",
+ "OpenIddict.Abstractions": "4.10.1"
+ }
+ },
+ "OpenIddict.EntityFrameworkCore": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "NaxMQtic8SCjboTqAYNJtF/5bnzjyYpssxw7cG0JnIth3gcsSP+IWQ71MgOkzKEyw/0l/QNgUmbvws0O9COl3Q==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Relational": "8.0.0",
+ "OpenIddict.Core": "4.10.1",
+ "OpenIddict.EntityFrameworkCore.Models": "4.10.1"
+ }
+ },
+ "OpenIddict.EntityFrameworkCore.Models": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "yTui1pRlrx9BEPO48EgpcGibZDQ/8O93kKge41rpVZ0IdpQyg6CTohQhcj2AZf5K8rJ5MRckp659ImZvHc3vqQ=="
+ },
+ "OpenIddict.Server": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "uNkmRF2u5deEkmdS6gV+qz6VJ4lPskAEndbzhq2slka9VtRjysZxVS2Dt6MoNCDVFjl8bEz1wCaZHyGsPmO2tg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.IdentityModel.JsonWebTokens": "7.0.0",
+ "OpenIddict.Abstractions": "4.10.1"
+ }
+ },
+ "OpenIddict.Server.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "PmJPcexIaX4hPwIypbOIQvZhqF27TX5gF8+8ZwgxSXWh4P0gi1mQhq2Q7i0PIoYP4N+S/YwR8Y8W9XZ6B6891A==",
+ "dependencies": {
+ "OpenIddict.Server": "4.10.1"
+ }
+ },
+ "OpenIddict.Server.DataProtection": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "HwUdJMujMoflYSfVbkAYvlFzAWHgPr7V0hnFHLsbErFtyFBidh0klVzisTot+CW0DZD6PfM6n493NEqwb78hzQ==",
+ "dependencies": {
+ "OpenIddict.Server": "4.10.1"
+ }
+ },
+ "OpenIddict.Validation": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "T5IaWSjjdy1Wwwi4fxrnHZJoaLq9uF+/wPd8YsI4Pw5JXGuxXLOpSTdFq6VH2hnhhC0ZjWwWmZh3pUaaM+j5eg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.IdentityModel.JsonWebTokens": "7.0.0",
+ "Microsoft.IdentityModel.Protocols": "7.0.0",
+ "OpenIddict.Abstractions": "4.10.1"
+ }
+ },
+ "OpenIddict.Validation.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "uiWPz7kr2lOvShG/UN3iwBoPBalA42U8zQPTY5lPZ4sqo9vwZjvfMTECNMxZnEczX2aqvGA50IhcRGwhAlrQ+g==",
+ "dependencies": {
+ "OpenIddict.Validation": "4.10.1"
+ }
+ },
+ "OpenIddict.Validation.DataProtection": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "AKXA1RXxz2ipJKhATJR7Ds1gOn2P9V4PbGhYzleNL2kfs5f+/bxTP3ASrjE92MmxLF8T/ltrQWWFRwAVAzD5cg==",
+ "dependencies": {
+ "OpenIddict.Validation": "4.10.1"
+ }
+ },
+ "OpenIddict.Validation.ServerIntegration": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "op+y9gx9ZrBi1gnfuCLp5V/Cv9J/MemZq1qjJ/3Umu9jDW3L6XeO0dT2w0EU6+v8ZlMleJDbVIfhVvKvak0Q9g==",
+ "dependencies": {
+ "OpenIddict.Server": "4.10.1",
+ "OpenIddict.Validation": "4.10.1"
+ }
+ },
+ "OpenIddict.Validation.SystemNetHttp": {
+ "type": "Transitive",
+ "resolved": "4.10.1",
+ "contentHash": "xuLJK1Bdvx/3ER7fKShi8SHz2yKqdmWFyk4/2kDZ3xfN+FRtthSsvBRKOPOkPnb/Tbtfy/GD7UXKz0DBgXOLag==",
+ "dependencies": {
+ "Microsoft.Extensions.Http.Polly": "8.0.0",
+ "OpenIddict.Validation": "4.10.1"
+ }
+ },
+ "Polly": {
+ "type": "Transitive",
+ "resolved": "7.2.4",
+ "contentHash": "bw00Ck5sh6ekduDE3mnCo1ohzuad946uslCDEENu3091+6UKnBuKLo4e+yaNcCzXxOZCXWY2gV4a35+K1d4LDA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "7VSGO0URRKoMEAq0Sc9cRz8mb6zbyx/BZDEWhgPdzzpmFhkam3fJ1DAGWFXBI4nGlma+uPKpfuMQP5LXRnOH5g=="
+ },
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "0oAaTAm6e2oVH+/Zttt0cuhGaePQYKII1dY8iaqP7CvOpVKgLybKRFvQjXR2LtxXOXTVPNv14j0ot8uV+HrUmw=="
+ },
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "G24ibsCNi5Kbz0oXWynBoRgtGvsw5ZSVEWjv13/KiCAM8C6wz9zzcCniMeQFIkJ2tasjo2kXlvlBZhplL51kGg=="
+ },
+ "runtime.native.System": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "runtime.native.System.IO.Compression": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "runtime.native.System.Net.Http": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "runtime.native.System.Security.Cryptography.Apple": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
+ "dependencies": {
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
+ }
+ },
+ "runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "QR1OwtwehHxSeQvZKXe+iSd+d3XZNkEcuWMFYa2i0aG1l+lR739HPicKMlTbJst3spmeekDVBUS7SeS26s4U/g==",
+ "dependencies": {
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+ }
+ },
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "I+GNKGg2xCHueRd1m9PzeEW7WLbNNLznmTuEi8/vZX71HudUbx1UTwlGkiwMri7JLl8hGaIAWnA/GONhu+LOyQ=="
+ },
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "1Z3TAq1ytS1IBRtPXJvEUZdVsfWfeNEhBkbiOCGEl9wwAfsjP2lz3ZFDx5tq8p60/EqbS0HItG5piHuB71RjoA=="
+ },
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ=="
+ },
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "6mU/cVmmHtQiDXhnzUImxIcDL48GbTk+TsptXyJA+MIOG9LRjPoAQC/qBFB7X+UNyK86bmvGwC8t+M66wsYC8w=="
+ },
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "vjwG0GGcTW/PPg6KVud8F9GLWYuAV1rrw1BKAqY0oh4jcUqg15oYF1+qkGR2x2ZHM4DQnWKQ7cJgYbfncz/lYg=="
+ },
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "7KMFpTkHC/zoExs+PwP8jDCWcrK9H6L7soowT80CUx3e+nxP/AFnq0AQAW5W76z2WYbLAYCRyPfwYFG6zkvQRw=="
+ },
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "xrlmRCnKZJLHxyyLIqkZjNXqgxnKdZxfItrPkjI+6pkRo5lHX8YvSZlWrSI5AVwLMi4HbNWP7064hcAWeZKp5w=="
+ },
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.2",
+ "contentHash": "leXiwfiIkW7Gmn7cgnNcdtNAU70SjmKW3jxGj1iKHOvdn0zRWsgv/l2OJUO5zdGdiv2VRFnAsxxhDgMzofPdWg=="
+ },
+ "Scrutor": {
+ "type": "Transitive",
+ "resolved": "4.2.2",
+ "contentHash": "t5VIYA7WJXoJJo7s4DoHakMGwTu+MeEnZumMOhTCH7kz9xWha24G7dJNxWrHPlu0ZdZAS4jDZCxxAnyaBh7uYw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
+ "Microsoft.Extensions.DependencyModel": "6.0.0"
+ }
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "3.1.1",
+ "contentHash": "P6G4/4Kt9bT635bhuwdXlJ2SCqqn2nhh4gqFqQueCOr9bK/e7W9ll/IoX1Ter948cV2Z/5+5v8pAfJYUISY03A=="
+ },
+ "Serilog.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "8.0.1",
+ "contentHash": "B/X+wAfS7yWLVOTD83B+Ip9yl4MkhioaXj90JSoWi1Ayi8XHepEnsBdrkojg08eodCnmOKmShFUN2GgEc6c0CQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Serilog": "3.1.1",
+ "Serilog.Extensions.Hosting": "8.0.0",
+ "Serilog.Extensions.Logging": "8.0.0",
+ "Serilog.Formatting.Compact": "2.0.0",
+ "Serilog.Settings.Configuration": "8.0.0",
+ "Serilog.Sinks.Console": "5.0.0",
+ "Serilog.Sinks.Debug": "2.0.0",
+ "Serilog.Sinks.File": "5.0.0"
+ }
+ },
+ "Serilog.Enrichers.Process": {
+ "type": "Transitive",
+ "resolved": "2.0.2",
+ "contentHash": "T9EjKKLsL6qC/3eOLUAKEPBLEqPDmt5BLXaQdPMaxJzuex+MeXA8DuAiPboUaftp3kbnCN4ZgZpDvs+Fa7OHuw==",
+ "dependencies": {
+ "Serilog": "2.3.0"
+ }
+ },
+ "Serilog.Enrichers.Thread": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "85lWsGRJpRxvKT6j/H67no55SUBsBIvp556TKuBTGhjtoPeq+L7j/sDWbgAtvT0p7u7/phJyX6j35PQ4Vtqw0g==",
+ "dependencies": {
+ "Serilog": "2.3.0"
+ }
+ },
+ "Serilog.Expressions": {
+ "type": "Transitive",
+ "resolved": "4.0.0",
+ "contentHash": "dsC8GtalMDXMzywA60fHeBvqAjQ1EM75zSrdA7j7TxJfmrfss6BOxzgoT5thqjY+icLNbovUsC5KTYRlXzCpXg==",
+ "dependencies": {
+ "Serilog": "3.1.0"
+ }
+ },
+ "Serilog.Extensions.Hosting": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "db0OcbWeSCvYQkHWu6n0v40N4kKaTAXNjlM3BKvcbwvNzYphQFcBR+36eQ/7hMMwOkJvAyLC2a9/jNdUL5NjtQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Serilog": "3.1.1",
+ "Serilog.Extensions.Logging": "8.0.0"
+ }
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Serilog": "3.1.1"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "ob6z3ikzFM3D1xalhFuBIK1IOWf+XrQq+H4KeH4VqBcPpNcmUgZlRQ2h3Q7wvthpdZBBoY86qZOI2LCXNaLlNA==",
+ "dependencies": {
+ "Serilog": "3.1.0"
+ }
+ },
+ "Serilog.Formatting.Compact.Reader": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "A4tBQ36969szfQMwnxaikNKxQs7lcGLPPcv45ghr3RrJK9hko71t8TNSdMSAWU25ZK6JSmH/RU14GwSo4v5E4Q==",
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.3",
+ "Serilog": "3.1.0"
+ }
+ },
+ "Serilog.Settings.Configuration": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "nR0iL5HwKj5v6ULo3/zpP8NMcq9E2pxYA6XKTSWCbugVs4YqPyvaqaKOY+OMpPivKp7zMEpax2UKHnDodbRB0Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Binder": "8.0.0",
+ "Microsoft.Extensions.DependencyModel": "8.0.0",
+ "Serilog": "3.1.1"
+ }
+ },
+ "Serilog.Sinks.Async": {
+ "type": "Transitive",
+ "resolved": "1.5.0",
+ "contentHash": "csHYIqAwI4Gy9oAhXYRwxGrQEAtBg3Ep7WaCzsnA1cZuBZjVAU0n7hWaJhItjO7hbLHh/9gRVxALCUB4Dv+gZw==",
+ "dependencies": {
+ "Serilog": "2.9.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "IZ6bn79k+3SRXOBpwSOClUHikSkp2toGPCZ0teUkscv4dpDg9E2R2xVsNkLmwddE4OpNVO3N0xiYsAH556vN8Q==",
+ "dependencies": {
+ "Serilog": "3.1.0"
+ }
+ },
+ "Serilog.Sinks.Debug": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "Y6g3OBJ4JzTyyw16fDqtFcQ41qQAydnEvEqmXjhwhgjsnG/FaJ8GUqF5ldsC/bVkK8KYmqrPhDO+tm4dF6xx4A==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.Map": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "JbPBAeD5hxUQw8TZg3FlOnqVsSu1269nvqFm5DQ7hc+AmsB+hItl+zMSDphMbPJXjL8KdpMRSWNkGi7zTKRmCA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "SixLabors.ImageSharp": {
+ "type": "Transitive",
+ "resolved": "3.1.3",
+ "contentHash": "wybtaqZQ1ZRZ4ZeU+9h+PaSeV14nyiGKIy7qRbDfSHzHq4ybqyOcjoifeaYbiKLO1u+PVxLBuy7MF/DMmwwbfg=="
+ },
+ "SixLabors.ImageSharp.Web": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "LoN28idQwfphN6zygY3X1gK9Mwuy6y7Bs5N03sCwfZqUHJRmayc2HRTZLPO+sctvGvC1U4q+xgOwgFMwH2vGVw==",
+ "dependencies": {
+ "Microsoft.IO.RecyclableMemoryStream": "2.3.2",
+ "SixLabors.ImageSharp": "3.1.0"
+ }
+ },
+ "Smidge": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "AnRsxwg4Av7jxa0MkQMbLqdIrWbVZRVQ0KfnO4Mh19Old7lay179QvBnaOPFxAEWnIl4jHiZW8izesJp6TknVw==",
+ "dependencies": {
+ "Smidge.Core": "4.3.0"
+ }
+ },
+ "Smidge.Core": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "B6m6uGpJrOKaJ68eE9clAzZUcURszTNHfoYa4razb3KUJtRXB5fmZvts8+0ffT0/tO09Vu2O/KFfiSZMp6X8Jw==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Features": "5.0.0",
+ "Microsoft.Extensions.Configuration": "5.0.0",
+ "Microsoft.Extensions.Configuration.Json": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Composite": "5.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0"
+ }
+ },
+ "Smidge.InMemory": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "fKyR6ICS0YoQLX0D4dIIYTwQEM1IZb8ChYhqLGpVyJ7GiOAawsXt4ZcVnH0XT+ggan2+JzQlLiXGcCdXnb16Xg==",
+ "dependencies": {
+ "Dazinator.Extensions.FileProviders": "2.0.0",
+ "Smidge.Core": "4.3.0",
+ "System.Text.Encodings.Web": "5.0.1"
+ }
+ },
+ "Smidge.Nuglify": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "kx5Ulh+o5zLI0Al0POs0nYPldUArErmrAxxccrrxl77MWWrDM3KS5IRWuKDtC42/sZKSzapmJIOwJ8r/1foMCg==",
+ "dependencies": {
+ "Nuglify": "1.20.2",
+ "Smidge": "4.3.0"
+ }
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.6",
+ "contentHash": "BmAf6XWt4TqtowmiWe4/5rRot6GerAeklmOPfviOvwLoF5WwgxcJHAxZtySuyW9r9w+HLILnm8VfJFLCUJYW8A==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.6",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.6"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.6",
+ "contentHash": "wO6v9GeMx9CUngAet8hbO7xdm+M42p1XeJq47ogyRoYSvNSp0NGLI+MgC0bhrMk9C17MTVFlLiN6ylyExLCc5w==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.6",
+ "contentHash": "2ObJJLkIUIxRpOUlZNGuD4rICpBnrBR5anjyfUFQep4hMOIeqW+XGQYzrNmHSVz5xSWZ3klSbh7sFR6UyDj68Q=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.6",
+ "contentHash": "PQ2Oq3yepLY4P7ll145P3xtx2bX8xF4PzaKPRpw9jZlKvfe4LE/saAV82inND9usn1XRpmxXk7Lal3MTI+6CNg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.6"
+ }
+ },
+ "Swashbuckle.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "FK05XokgjgwlCI6wCT+D4/abtQkL1X1/B9Oas6uIwHFmYrIO9WUD5aLC9IzMs9GnHfUXOtXZ2S43gN1mhs5+aA==",
+ "dependencies": {
+ "Microsoft.Extensions.ApiDescription.Server": "6.0.5",
+ "Swashbuckle.AspNetCore.Swagger": "6.5.0",
+ "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0",
+ "Swashbuckle.AspNetCore.SwaggerUI": "6.5.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.Swagger": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "XWmCmqyFmoItXKFsQSwQbEAsjDKcxlNf1l+/Ki42hcb6LjKL8m5Db69OTvz5vLonMSRntYO1XLqz0OP+n3vKnA==",
+ "dependencies": {
+ "Microsoft.OpenApi": "1.2.3"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerGen": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "Y/qW8Qdg9OEs7V013tt+94OdPxbRdbhcEbw4NiwGvf4YBcfhL/y7qp/Mjv/cENsQ2L3NqJ2AOu94weBy/h4KvA==",
+ "dependencies": {
+ "Swashbuckle.AspNetCore.Swagger": "6.5.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerUI": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "OvbvxX+wL8skxTBttcBsVxdh73Fag4xwqEU2edh4JMn7Ws/xJHnY/JB1e9RoCb6XpDxUF3hD9A0Z1lEUx40Pfw=="
+ },
+ "System.AppContext": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
+ "dependencies": {
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
+ "dependencies": {
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Collections": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Collections.Concurrent": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg=="
+ },
+ "System.ComponentModel": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==",
+ "dependencies": {
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.ComponentModel.Annotations": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg=="
+ },
+ "System.ComponentModel.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==",
+ "dependencies": {
+ "System.ComponentModel": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Configuration.ConfigurationManager": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "8.0.0",
+ "System.Security.Cryptography.ProtectedData": "8.0.0"
+ }
+ },
+ "System.Console": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Text.Encoding": "4.3.0"
+ }
+ },
+ "System.Data.Common": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "lm6E3T5u7BOuEH0u18JpbJHxBfOJPuCyl4Kg1RH10ktYLp5uEEE1xKrHW56/We4SnZpGAuCc9N0MJpSDhTHZGQ==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Text.RegularExpressions": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Diagnostics.Debug": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ=="
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "fdYxcRjQqTTacKId/2IECojlDSFvp7LP5N78+0z/xH7v/Tuw5ZAxu23Y6PTCRinqyu2ePx+Gn1098NC6jM6d+A=="
+ },
+ "System.Diagnostics.StackTrace": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "BiHg0vgtd35/DM9jvtaC1eKRpWZxr0gcQd643ABG7GnvSlf5pOkY2uyd42mMOJoOmKvnpNj0F4tuoS1pacTwYw==",
+ "dependencies": {
+ "System.IO.FileSystem": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Metadata": "1.4.1",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Diagnostics.Tools": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Diagnostics.Tracing": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Dynamic.Runtime": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.Linq.Expressions": "4.3.0",
+ "System.ObjectModel": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Emit": "4.3.0",
+ "System.Reflection.Emit.ILGeneration": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Reflection.TypeExtensions": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Formats.Asn1": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "AJukBuLoe3QeAF+mfaRKQb2dgyrvt340iMBHYv+VdBzCUM06IxGlvl0o/uPOS7lHnXPN6u8fFRHSHudx5aTi8w=="
+ },
+ "System.Globalization": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Globalization.Calendars": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Globalization": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Globalization.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Globalization": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0"
+ }
+ },
+ "System.IdentityModel.Tokens.Jwt": {
+ "type": "Transitive",
+ "resolved": "7.1.2",
+ "contentHash": "Thhbe1peAmtSBFaV/ohtykXiZSOkx59Da44hvtWfIMFofDA3M3LaVyjstACf2rKGn4dEDR2cUpRAZ0Xs/zB+7Q==",
+ "dependencies": {
+ "Microsoft.IdentityModel.JsonWebTokens": "7.1.2",
+ "Microsoft.IdentityModel.Tokens": "7.1.2"
+ }
+ },
+ "System.IO": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.IO.Compression": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Buffers": "4.3.0",
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "runtime.native.System": "4.3.0",
+ "runtime.native.System.IO.Compression": "4.3.0"
+ }
+ },
+ "System.IO.Compression.ZipFile": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==",
+ "dependencies": {
+ "System.Buffers": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.Compression": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Text.Encoding": "4.3.0"
+ }
+ },
+ "System.IO.FileSystem": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.IO.FileSystem.AccessControl": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==",
+ "dependencies": {
+ "System.Security.AccessControl": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "System.IO.FileSystem.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
+ "dependencies": {
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.IO.Hashing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "sDnWM0N3AMCa86LrKTWeF3BZLD2sgWyYUc7HL6z4+xyDZNQRwzmxbo4qP2rX2MqC+Sy1/gOSRDah5ltxY5jPxw=="
+ },
+ "System.IO.Pipelines": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA=="
+ },
+ "System.Linq": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0"
+ }
+ },
+ "System.Linq.Async": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw=="
+ },
+ "System.Linq.Expressions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.ObjectModel": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Emit": "4.3.0",
+ "System.Reflection.Emit.ILGeneration": "4.3.0",
+ "System.Reflection.Emit.Lightweight": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Reflection.TypeExtensions": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
+ },
+ "System.Memory.Data": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "4.7.2",
+ "System.Text.Json": "4.6.0"
+ }
+ },
+ "System.Net.Http": {
+ "type": "Transitive",
+ "resolved": "4.3.4",
+ "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.1",
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.DiagnosticSource": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Globalization.Extensions": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.Net.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.OpenSsl": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Security.Cryptography.X509Certificates": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "runtime.native.System": "4.3.0",
+ "runtime.native.System.Net.Http": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2"
+ }
+ },
+ "System.Net.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Handles": "4.3.0"
+ }
+ },
+ "System.Net.Sockets": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Net.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Reflection": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Emit": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
+ "dependencies": {
+ "System.IO": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Emit.ILGeneration": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Emit.ILGeneration": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
+ "dependencies": {
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Emit.Lightweight": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA=="
+ },
+ "System.Reflection.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "MclTG61lsD9sYdpNz9xsKBzjsmsfCtcMZYXz/IUr2zlhaTaABonlr1ESeompTgM+Xk+IwtGYU7/voh3YWB/fWw==",
+ "dependencies": {
+ "System.Collections.Immutable": "7.0.0"
+ }
+ },
+ "System.Reflection.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.TypeExtensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
+ "dependencies": {
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Resources.ResourceManager": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Globalization": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Runtime": {
+ "type": "Transitive",
+ "resolved": "4.3.1",
+ "contentHash": "abhfv1dTK6NXOmu4bgHIONxHyEqFjW8HwXPmpY9gmll+ix9UNo4XDcmzJn6oLooftxNssVHdJC1pGT9jkSynQg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.1",
+ "Microsoft.NETCore.Targets": "1.1.3"
+ }
+ },
+ "System.Runtime.Caching": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "4TmlmvGp4kzZomm7J2HJn6IIx0UUrQyhBDyb5O1XiunZlQImXW+B8b7W/sTPcXhSf9rp5NR5aDtQllwbB5elOQ==",
+ "dependencies": {
+ "System.Configuration.ConfigurationManager": "8.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Runtime.Handles": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Runtime.InteropServices": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Handles": "4.3.0"
+ }
+ },
+ "System.Runtime.InteropServices.RuntimeInformation": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
+ "dependencies": {
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Threading": "4.3.0",
+ "runtime.native.System": "4.3.0"
+ }
+ },
+ "System.Runtime.Numerics": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
+ "dependencies": {
+ "System.Globalization": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0"
+ }
+ },
+ "System.Runtime.Serialization.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==",
+ "dependencies": {
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Security.AccessControl": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "System.Security.Cryptography.Algorithms": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Collections": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "runtime.native.System.Security.Cryptography.Apple": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Cng": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==",
+ "dependencies": {
+ "System.Formats.Asn1": "5.0.0"
+ }
+ },
+ "System.Security.Cryptography.Csp": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Collections": "4.3.0",
+ "System.Collections.Concurrent": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.OpenSsl": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Pkcs": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "ULmp3xoOwNYjOYp4JZ2NK/6NdTgiN1GQXzVVN1njQ7LOZ0d0B9vyMnhyqbIi9Qw4JXj1JgCsitkTShboHRx7Eg==",
+ "dependencies": {
+ "System.Formats.Asn1": "8.0.0"
+ }
+ },
+ "System.Security.Cryptography.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
+ "dependencies": {
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.ProtectedData": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg=="
+ },
+ "System.Security.Cryptography.X509Certificates": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Globalization.Calendars": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.Handles": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Runtime.Numerics": "4.3.0",
+ "System.Security.Cryptography.Algorithms": "4.3.0",
+ "System.Security.Cryptography.Cng": "4.3.0",
+ "System.Security.Cryptography.Csp": "4.3.0",
+ "System.Security.Cryptography.Encoding": "4.3.0",
+ "System.Security.Cryptography.OpenSsl": "4.3.0",
+ "System.Security.Cryptography.Primitives": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "runtime.native.System": "4.3.0",
+ "runtime.native.System.Net.Http": "4.3.0",
+ "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Xml": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "HQSFbakswZ1OXFz2Bt3AJlC6ENDqWeVpgqhf213xqQUMDifzydOHIKVb1RV4prayobvR3ETIScMaQdDF2hwGZA==",
+ "dependencies": {
+ "System.Security.Cryptography.Pkcs": "8.0.0"
+ }
+ },
+ "System.Security.Principal.Windows": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
+ },
+ "System.Text.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Text.Encoding.CodePages": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "LSyCblMpvOe0N3E+8e0skHcrIhgV2huaNcjUUEa8hRtgEAm36aGkRoC8Jxlb6Ra6GSfF29ftduPNywin8XolzQ=="
+ },
+ "System.Text.Encoding.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0",
+ "System.Text.Encoding": "4.3.0"
+ }
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "8.0.0"
+ }
+ },
+ "System.Text.RegularExpressions": {
+ "type": "Transitive",
+ "resolved": "4.3.1",
+ "contentHash": "N0kNRrWe4+nXOWlpLT4LAY5brb8caNFlUuIRpraCVMDLYutKkol1aV079rQjLuSxKMJT2SpBQsYX9xbcTMmzwg==",
+ "dependencies": {
+ "System.Runtime": "4.3.1"
+ }
+ },
+ "System.Threading": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
+ "dependencies": {
+ "System.Runtime": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Threading.AccessControl": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "/fmzEf1UYrdCzfOIHVJ2cx3v9DHLLLMkUrodpzJGW17N+K+SSmBD8OA/BGmtfN1Ae0Ex3rBjQVufnIi5zKefuQ==",
+ "dependencies": {
+ "System.Security.AccessControl": "4.7.0",
+ "System.Security.Principal.Windows": "4.7.0"
+ }
+ },
+ "System.Threading.Channels": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "CMaFr7v+57RW7uZfZkPExsPB6ljwzhjACWW1gfU35Y56rk72B/Wu+sTqxVmGSk4SFUlPc3cjeKND0zktziyjBA=="
+ },
+ "System.Threading.Tasks": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
+ },
+ "System.Threading.Tasks.Parallel": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "cbjBNZHf/vQCfcdhzx7knsiygoCKgxL8mZOeocXZn5gWhCdzHIq6bYNKWX0LAJCWYP7bds4yBK8p06YkP0oa0g==",
+ "dependencies": {
+ "System.Collections.Concurrent": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tracing": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.Threading.Timer": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Xml.ReaderWriter": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.IO.FileSystem": "4.3.0",
+ "System.IO.FileSystem.Primitives": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Text.Encoding.Extensions": "4.3.0",
+ "System.Text.RegularExpressions": "4.3.0",
+ "System.Threading.Tasks": "4.3.0",
+ "System.Threading.Tasks.Extensions": "4.3.0"
+ }
+ },
+ "System.Xml.XDocument": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Diagnostics.Tools": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading": "4.3.0",
+ "System.Xml.ReaderWriter": "4.3.0"
+ }
+ },
+ "UAParser": {
+ "type": "Transitive",
+ "resolved": "3.1.47",
+ "contentHash": "I68Jl/Vs5RQZdz9BbmYtnXgujg0jVd61LhKbyNZOCm9lBxZFGxLbiQo6yFj21VYi7DzPvEvrVOmeC6v41AoLfw=="
+ },
+ "Umbraco.Cms.Api.Common": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "UfXEnioHBmFM/iTKRpws/ykkMLaqzHdduJKJN+i2xXL2spWYLiLUmAWmjmcejDjlIv99SEOjfaq8hK9ATUUx8w==",
+ "dependencies": {
+ "OpenIddict.Abstractions": "4.10.1",
+ "OpenIddict.AspNetCore": "4.10.1",
+ "Swashbuckle.AspNetCore": "6.5.0",
+ "Umbraco.Cms.Core": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Web.Common": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Api.Delivery": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "rfEAE5dM6JvMH5sssd67eq+URllY/rGk9pwW/nox+6vMjfsfZGCQet6ybBmOEHUz7gRir1kzJorrO01PHjRdqw==",
+ "dependencies": {
+ "Umbraco.Cms.Api.Common": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Web.Common": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Core": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "xlP7ES0bvR0DlRviW4LPW2+lUoBHZzsa3i7I+4wm7VSjE8pZ3c0Mih7d4YAUFduUN3riTNliNMiGtNnrx3bN0g==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.FileProviders.Embedded": "8.0.1",
+ "Microsoft.Extensions.FileProviders.Physical": "8.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Identity.Core": "8.0.1",
+ "Microsoft.Extensions.Logging": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.1",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0",
+ "Microsoft.Extensions.Options.DataAnnotations": "8.0.0",
+ "System.Runtime.Caching": "8.0.0"
+ }
+ },
+ "Umbraco.Cms.Examine.Lucene": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "nnsjuN6FITnO3HWr3DrugoHNDr3NHrvSXh+idoNmCcEpG3I+1Vn2Qll6DPd4VUq1XJvov8YRiVm9Mf/bfXZZDg==",
+ "dependencies": {
+ "Examine": "3.2.0",
+ "System.Security.Cryptography.Xml": "8.0.0",
+ "Umbraco.Cms.Infrastructure": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Imaging.ImageSharp": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "Vvdg2GfxZad68Cmk47msJIlS00MmFANtbWMhxCIYFF/gQ5BfxTcvrY5owxHkeGAH+qHAGQlBV0eo7Pfb0zadqw==",
+ "dependencies": {
+ "SixLabors.ImageSharp": "3.1.3",
+ "SixLabors.ImageSharp.Web": "3.1.0",
+ "Umbraco.Cms.Web.Common": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Infrastructure": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "bedfXSzLkq8nZGBKrnT3gLN0U8LSE3tKccLR4cKyDfmOXdPQdZf8ppIXB8mZ/LkrOs6IrSuTpBLSVrPYxhVSNg==",
+ "dependencies": {
+ "Examine.Core": "3.2.0",
+ "HtmlAgilityPack": "1.11.57",
+ "MailKit": "4.3.0",
+ "Markdown": "2.2.1",
+ "Microsoft.CodeAnalysis.CSharp": "4.8.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Configuration.Json": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Http": "8.0.0",
+ "Microsoft.Extensions.Identity.Stores": "8.0.1",
+ "MiniProfiler.Shared": "4.3.8",
+ "NPoco": "5.7.1",
+ "Newtonsoft.Json": "13.0.3",
+ "OpenIddict.Abstractions": "4.10.1",
+ "Serilog": "3.1.1",
+ "Serilog.Enrichers.Process": "2.0.2",
+ "Serilog.Enrichers.Thread": "3.1.0",
+ "Serilog.Expressions": "4.0.0",
+ "Serilog.Extensions.Hosting": "8.0.0",
+ "Serilog.Formatting.Compact": "2.0.0",
+ "Serilog.Formatting.Compact.Reader": "3.0.0",
+ "Serilog.Settings.Configuration": "8.0.0",
+ "Serilog.Sinks.Async": "1.5.0",
+ "Serilog.Sinks.File": "5.0.0",
+ "Serilog.Sinks.Map": "1.0.2",
+ "Umbraco.Cms.Core": "[13.3.2, 14.0.0)",
+ "ncrontab": "3.3.3"
+ }
+ },
+ "Umbraco.Cms.Persistence.EFCore": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "hQpvVCCe5nDO+1BqUIF14PRbPnNg967P+MT8Ct+G8Kc7WobdmbbPi4ZImi91WpzQRAd4Xm46P4YGkf0lgBUthQ==",
+ "dependencies": {
+ "Azure.Identity": "1.10.4",
+ "Microsoft.EntityFrameworkCore.SqlServer": "8.0.1",
+ "Microsoft.EntityFrameworkCore.Sqlite": "8.0.1",
+ "OpenIddict.EntityFrameworkCore": "4.10.1",
+ "Umbraco.Cms.Core": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Infrastructure": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Persistence.EFCore.Sqlite": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "oVxcDF9Kna2ha+i9JY7Nisg6YDpun5kAr/6TB/YddN/cPZWC5SuM0IS0IgzoHLo0sky3isgLWQVewANlf1eX6g==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Sqlite": "8.0.1",
+ "Umbraco.Cms.Persistence.EFCore": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Persistence.EFCore.SqlServer": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "kf7n2mYanotzuk2dusI0hZN6O9AdArQzqX7j0N596UadADXKJ+dhNVrw7tybE25BIOOV4P6S3z5PZkaxzCaUkg==",
+ "dependencies": {
+ "Azure.Identity": "1.10.4",
+ "Microsoft.EntityFrameworkCore.SqlServer": "8.0.1",
+ "Umbraco.Cms.Persistence.EFCore": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Persistence.Sqlite": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "LASMPgPJUxWTWsglZ+Iq+0jqIqjuY2BT+jxqd411qNApaeJiHPVkHg/SVDzUx3JlQkT+wW80Q0Jinjopyr0SeQ==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite": "8.0.1",
+ "Umbraco.Cms.Infrastructure": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Persistence.SqlServer": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "/DX1S2eHbJJcnU3y+j1k7Gf2aVLDQNvmdZhD8zIzD6wJUtf3ByuVFVaZcsPh38+K+sP5QYpbeEH6zt2hkgqQUg==",
+ "dependencies": {
+ "Azure.Identity": "1.10.4",
+ "NPoco.SqlServer": "5.7.1",
+ "Umbraco.Cms.Infrastructure": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.PublishedCache.NuCache": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "lAD0kY1B+9ybaKlEgLWmepwxxfxRsilqdKgSbwQMRCapNKpDqpJeInGZ4e1clc6F21A0gXnAJNafB3IpEOSFIg==",
+ "dependencies": {
+ "K4os.Compression.LZ4": "1.3.6",
+ "MessagePack": "2.5.140",
+ "Newtonsoft.Json": "13.0.3",
+ "Umbraco.CSharpTest.Net.Collections": "15.0.0",
+ "Umbraco.Cms.Infrastructure": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.StaticAssets": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "Z5bv5eS8EcYAvSuFRDkEierW+EeMVcWDVRJnC14UxYBolV4UUtlWZ4DCN1w75KGY+Mg++dIQktZRujESH/57VQ==",
+ "dependencies": {
+ "Umbraco.Cms.Web.BackOffice": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.Web.Website": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Targets": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "i+iBKz3L0K+t1e/+5raBbJOZ+gBYv53W3Cb2yI0tkJvMmvBOsU+wN86CMiaheLslQBPNqGQZ2jpDmDkdS5Fq/Q==",
+ "dependencies": {
+ "Umbraco.Cms.Api.Delivery": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.StaticAssets": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Web.BackOffice": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "LOcR2E2iaISVVjAtP33EFSOcWTBrzm+Yfkd52VuURuIsorMA9YlL55Ek+lpWJYzzACHLAzy4oje6aUFlT8qxVA==",
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.3",
+ "Serilog.AspNetCore": "8.0.1",
+ "Umbraco.Cms.Web.Common": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Web.Common": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "YYO/ItzOYS1CDKmhObFcBI94PE0gxyUCVdx5j554UzLYpGEvmcIvgaN2HyLaqYBg4NFPYQxI/jCb0WCVnHYs7g==",
+ "dependencies": {
+ "Asp.Versioning.Mvc": "7.1.1",
+ "Asp.Versioning.Mvc.ApiExplorer": "7.1.0",
+ "Dazinator.Extensions.FileProviders": "2.0.0",
+ "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "8.0.1",
+ "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "8.0.1",
+ "MiniProfiler.AspNetCore.Mvc": "4.3.8",
+ "Serilog.AspNetCore": "8.0.1",
+ "Smidge.InMemory": "4.3.0",
+ "Smidge.Nuglify": "4.3.0",
+ "System.Net.Http": "4.3.4",
+ "System.Text.RegularExpressions": "4.3.1",
+ "Umbraco.Cms.Examine.Lucene": "[13.3.2, 14.0.0)",
+ "Umbraco.Cms.PublishedCache.NuCache": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.Cms.Web.Website": {
+ "type": "Transitive",
+ "resolved": "13.3.2",
+ "contentHash": "VPwj82pZz+sEHCYag/LO9eqZvSCV+ESK1l3nrf97ITpBl8svvKQvfVFpZh37Gs4rT8OTmLgg2+jB6h43tngziA==",
+ "dependencies": {
+ "Umbraco.Cms.Web.Common": "[13.3.2, 14.0.0)"
+ }
+ },
+ "Umbraco.CSharpTest.Net.Collections": {
+ "type": "Transitive",
+ "resolved": "15.0.0",
+ "contentHash": "YSDIkxq44VMy2N3jBTwJBJ/ZjGyuyb0GRyfQAUIma07dCHIbjXgKXjZaAxVa6ik3XTqgcyATvwYJL0EBtAClwA=="
+ },
+ "UrlTracker.Backoffice.Notifications": {
+ "type": "Transitive",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "tkpcRiKlYdxDgU5Oeg8a6RlO0/HgBfgwEj7PeKsjpiOJle0YeKb89/BoDA3MXURNn7dA6TLoiMG8p0pYAIK2oQ==",
+ "dependencies": {
+ "Umbraco.Cms.Infrastructure": "13.0.0",
+ "UrlTracker.Core": "13.2.0-alpha0004"
+ }
+ },
+ "UrlTracker.Backoffice.UI": {
+ "type": "Transitive",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "FCku7D96ELhXv1aCsL3Y3J2aFwwAAuJCg82K0vXi8uNs5ep4cqPdOQ+coVdXo5/ec9MAnf5oetrD949qE8xJRA==",
+ "dependencies": {
+ "CsvHelper": "30.0.1",
+ "Microsoft.AspNetCore.Components.Web": "8.0.5",
+ "Umbraco.Cms.Core": "13.0.0",
+ "Umbraco.Cms.Web.BackOffice": "13.0.0",
+ "UrlTracker.Core": "13.2.0-alpha0004",
+ "UrlTracker.Modules": "13.2.0-alpha0004"
+ }
+ },
+ "UrlTracker.Core": {
+ "type": "Transitive",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "mY1kN04rWAWMYdRaQ8M4vAJZJ4BJLkf7DSeWpXDPs80twIug7h9pxvwUQvFc5C7RehcKZeGr8iM4edDoeAw5Yw==",
+ "dependencies": {
+ "Umbraco.Cms.Infrastructure": "13.0.0",
+ "UrlTracker.Modules": "13.2.0-alpha0004"
+ }
+ },
+ "UrlTracker.Core.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "CPd8JnbsaHTMJEaUHkA2c+gxmqaxtqXRDKsJ1vqD40aqUwVP3tdVFoXz+p+bAr0xjaDiE18J5vtrojNav8lwjQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Memory": "8.0.0",
+ "Scrutor": "4.2.2",
+ "Umbraco.Cms.Core": "13.0.0",
+ "UrlTracker.Core": "13.2.0-alpha0004"
+ }
+ },
+ "UrlTracker.Middleware": {
+ "type": "Transitive",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "WZ4cl+K5BUzfY4jMmSsRle82OM3h+aqzNX64Dx3lYQgpuS2ajF1mAbK4ZTblWvAV9zPCvLeGVmoAZ/qo3uUryw==",
+ "dependencies": {
+ "Umbraco.Cms.Core": "13.0.0",
+ "Umbraco.Cms.Web.Common": "13.0.0",
+ "UrlTracker.Core": "13.2.0-alpha0004",
+ "UrlTracker.Modules": "13.2.0-alpha0004",
+ "UrlTracker.Web": "13.2.0-alpha0004"
+ }
+ },
+ "UrlTracker.Modules": {
+ "type": "Transitive",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "jDu84EWt13nQcqVq/Cm2cKOX04766cvbuqeRp34f0hvVOcitTbHDvhEt6NS6joc0B0Q+NoYPYbDd3CYzIVr/VA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.1",
+ "Microsoft.Extensions.Options": "8.0.2"
+ }
+ },
+ "UrlTracker.Web": {
+ "type": "Transitive",
+ "resolved": "13.2.0-alpha0004",
+ "contentHash": "3WnU6VSzljSE+RimE8zSmYGKEqkKoFvkMDAEHMTDpbtptpV4o9VCQ9Q80Np16c/z6dOmgeC/f7CfOONxb3H9wQ==",
+ "dependencies": {
+ "UAParser": "3.1.47",
+ "Umbraco.Cms.Web.BackOffice": "13.0.0",
+ "Umbraco.Cms.Web.Website": "13.0.0",
+ "UrlTracker.Core": "13.2.0-alpha0004"
+ }
+ },
+ "uSync.BackOffice": {
+ "type": "Transitive",
+ "resolved": "13.2.3",
+ "contentHash": "nLBXalpz1ARGCMeotQggpuozdeFiWFMYT4kZSjy9fwAwuBxkor0GyOqYZU2Xy/nZa+PkvrSQOSpPf160E+p4AA==",
+ "dependencies": {
+ "uSync.Community.Contrib": "13.2.3",
+ "uSync.Core": "13.2.3"
+ }
+ },
+ "uSync.BackOffice.Assets": {
+ "type": "Transitive",
+ "resolved": "13.2.3",
+ "contentHash": "BWuAWd/567HiIkXL+vx7ABujdhSdmhfhy7ymEOQ2MOt6k1h4cQwZVFZXpcBRo4is3oNbCsaCQjKPk9OnnzGVfg==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Components.Web": "8.0.0",
+ "uSync.BackOffice": "13.2.3",
+ "uSync.BackOffice.Targets": "13.2.3"
+ }
+ },
+ "uSync.BackOffice.Targets": {
+ "type": "Transitive",
+ "resolved": "13.2.3",
+ "contentHash": "e4dYXnj3aRfo/G6dmivCuthWEcleau+jnNdz9y2hJL1bFf+9F3/H+Njsf/qkcRZnBC16MnUITzPFy4w654n4vg=="
+ },
+ "uSync.Community.Contrib": {
+ "type": "Transitive",
+ "resolved": "13.2.3",
+ "contentHash": "nZGLUINP2qOeFygRi6Tf7TRW9cjsEcjWrbmo7nA9VsKs6Br7RngemFggbQmauBYZak0TnYTGVZhqgnCHn1Ioxw==",
+ "dependencies": {
+ "uSync.Core": "13.2.3"
+ }
+ },
+ "uSync.Core": {
+ "type": "Transitive",
+ "resolved": "13.2.3",
+ "contentHash": "zOUXxHvWp4OU4jggBbdNJzfk2WwClQ16GrwRFnwdz18gALmkwiKVJibNaE5rQeEf3PYzapQf/8vapEGVKCIuwA==",
+ "dependencies": {
+ "Umbraco.Cms.Web.BackOffice": "13.0.0",
+ "Umbraco.Cms.Web.Website": "13.0.0"
+ }
+ },
+ "uSync.History": {
+ "type": "Transitive",
+ "resolved": "13.2.3",
+ "contentHash": "LRTb1IDeS0Hd4+73z0mBDi+suLVDIIOc+p6LftYAI7knBpLPwFj38bTjsb2QRhUhPk/F93ii47PfNdGIVlqUyw==",
+ "dependencies": {
+ "uSync.BackOffice": "13.2.3"
+ }
+ },
+ "Yarp.ReverseProxy": {
+ "type": "Transitive",
+ "resolved": "2.1.0",
+ "contentHash": "VgRuCBxmh5ND4VuFhvIN3AAeoxFhYkS2hNINk6AVCrOVTlpk7OwdrTXi8NHACfqfhDL+/oYCZrF9RxN+yiYnEg==",
+ "dependencies": {
+ "System.IO.Hashing": "7.0.0"
+ }
+ },
+ "nikcio.uheadless": {
+ "type": "Project",
+ "dependencies": {
+ "HotChocolate.AspNetCore": "[13.9.5, )",
+ "HotChocolate.AspNetCore.Authorization": "[13.9.5, )",
+ "Microsoft.AspNetCore.Authentication.JwtBearer": "[8.0.6, )",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "[8.0.1, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[8.0.1, )",
+ "Umbraco.Cms.Web.Common": "[13.0.0, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/examples/starter-example/starter-example.csproj b/examples/starter-example/starter-example.csproj
new file mode 100644
index 00000000..8c95b28b
--- /dev/null
+++ b/examples/starter-example/starter-example.csproj
@@ -0,0 +1,33 @@
+
+
+ net8.0
+ enable
+ enable
+ starter_example
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+ false
+ false
+
+
+
diff --git a/examples/starter-example/uSync/v9/Content/about.config b/examples/starter-example/uSync/v9/Content/about.config
new file mode 100644
index 00000000..dd73568b
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/about.config
@@ -0,0 +1,119 @@
+
+
+
+ Home
+ /Home/About
+ false
+ content
+ 2021-10-09T23:24:16
+
+ 1
+
+
+ content
+
+
+
+ The Clean Starter Kit for Umbraco uses the Start Bootstrap Theme Clean Blog which is built using Bootstrap 5. It has been implemented in Umbraco as a Starter Kit by Paul Seal who has the blog codeshare.co.uk and works for the Umbraco Gold Partner ClerksWell.
\nThe idea of this starter kit is to provide you with a clean and simple website. It is ideally aimed at people who are new to Umbraco so they can install the starter kit, get used to Umbraco and then build upon the kit with their own requirements.
"
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/51df637ca0854224a60d3163fb59091a",
+ "image": [
+ {
+ "key": "6041d253-db55-43e0-ad07-5e35f1bca9ea",
+ "mediaKey": "8ac2c7bc-0acb-488e-a4e6-24d9ea5bdff7",
+ "crops": [],
+ "focalPoint": {
+ "left": 0.5,
+ "top": 0.5
+ }
+ }
+ ],
+ "caption": "Umbraco, the friendly CMS"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/222d1acd8d1d4bd5af79d9c1fe0ded44",
+ "content": "With this starter kit you should be able to quickly and easily set up a new website and share your content with others. The aim is for you to start using Umbraco and fall in love with it like I did, as a user or as a developer, you will find out how enjoyable it is to use.
"
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/38c5ec597c9948d59582509d8c4094a6",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/5934cccecf674ab98bb4da3f413ee79c",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/7b469d55024b4655b45d02f4b3d39f74",
+ "hide": "0"
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/authors.config b/examples/starter-example/uSync/v9/Content/authors.config
new file mode 100644
index 00000000..2b65809b
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/authors.config
@@ -0,0 +1,52 @@
+
+
+
+ Home
+ /Home/Authors
+ false
+ authorList
+ 2023-08-15T22:58:50
+
+ 7
+
+
+ AuthorList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/blog.config b/examples/starter-example/uSync/v9/Content/blog.config
new file mode 100644
index 00000000..cdebd621
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/blog.config
@@ -0,0 +1,85 @@
+
+
+
+ Home
+ /Home/Blog
+ false
+ articleList
+ 2021-10-09T23:24:16
+
+ 2
+
+
+ articleList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/categories.config b/examples/starter-example/uSync/v9/Content/categories.config
new file mode 100644
index 00000000..29db22e7
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/categories.config
@@ -0,0 +1,26 @@
+
+
+
+ Home
+ /Home/Categories
+ false
+ categoryList
+ 2023-08-29T23:55:25
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/community.config b/examples/starter-example/uSync/v9/Content/community.config
new file mode 100644
index 00000000..c4ac765c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/community.config
@@ -0,0 +1,130 @@
+
+
+
+ Blog
+ /Home/Blog/Community
+ false
+ article
+ 2021-10-09T23:24:16
+
+ 0
+
+
+ article
+
+
+
+
+
+
+
+
+
+
+
+
+ There is a large community around umbraco, it is one of the main attractions when choosing it as your Content Management System of choice.",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/39f6ec40323a4c50a7c1041385206a2c",
+ "image": [
+ {
+ "key": "d64c94dd-d663-47fe-b1d4-58532d3b6fc6",
+ "mediaKey": "dd3840b3-8621-451b-9ee9-01f6ad175ec7"
+ }
+ ],
+ "caption": "Umbraco community enjoying another great talk"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/b34201b6030c4f12a8bd85ff290caf1b",
+ "content": {
+ "markup": "Not everyone is aware of all of the places where you can connect to the Umbraco community, so this post will list out different places you can communicate with the Umbraco community.
\n\nOur is the official Umbraco forum. If you have a problem, you should search there first to see if it has been solved already. Then if it hasn't you should ask your question on there. You will get friendly responses from a community of people who want to help you succeed, not see you fail.
\nThere is also a community section on Our Umbraco where you can find out way more about the Umbraco Community.
\n\nThere is a growing community of people on the Discord Server now. This is also a great place for you to ask for help with Umbraco too.
\nIf you like to use discord, you can chat with other Umbraco members in real time. This is good for getting quick answers to questions or good for asking for people's opinions on things. There are many different channels to be a part of, so it is worth checking it out.
\n\nIf you prefer to use Facebook, then this group might be of interest to you. It is called Umbraco Web Developers, but anyone can join, you don't have to be a developer, but it helps to be working with Umbraco.
\n\nTwitter is a great place to see the latest developments in the Umbraco community. You will see people reporting issues with Umbraco, asking questions about how to do things and arranging meetups. To tune into the chat on twitter you can search for Umbraco or filter by the #Umbraco hashtag.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/701214a0d3134f2194a4f8d14f34a747",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/1189d70d4eb74dbdaae6932132f44fbe",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/9d341e7fa5d944d4aa1fa7658883436a",
+ "hide": "0"
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/community_fa0pue2k.config b/examples/starter-example/uSync/v9/Content/community_fa0pue2k.config
new file mode 100644
index 00000000..4752a2e5
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/community_fa0pue2k.config
@@ -0,0 +1,16 @@
+
+
+
+ Categories
+ /Home/Categories/Community
+ false
+ category
+ 2023-08-29T23:55:51
+
+ 0
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/conferences.config b/examples/starter-example/uSync/v9/Content/conferences.config
new file mode 100644
index 00000000..d6891414
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/conferences.config
@@ -0,0 +1,165 @@
+
+
+
+ Blog
+ /Home/Blog/Conferences
+ false
+ article
+ 2021-10-09T23:24:16
+
+ 3
+
+
+ article
+
+
+
+
+
+
+
+
+
+
+
+
+ There are many Umbraco conferences held around the world.\nThe main one is codegarden which is held in Odense, Denmark, about a 10 minute walk away from the Umbraco HQ.
\nIn 2019 approximately 750 people attended, making it the biggest codegarden ever.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/82fe82ac3eb6455596b706231b15148a",
+ "image": [
+ {
+ "key": "af873978-e8d2-4244-ba1c-e1d282d822f4",
+ "mediaKey": "0521b485-98b6-409d-ad35-8745f3e4287c"
+ }
+ ],
+ "caption": "750 people attended Codegarden 2019"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/0214ee5ca1344e7eade7092f0016c8f7",
+ "content": {
+ "markup": "Here is a list of Umbraco related conferences from around the world:
\n\nBristol, England - March
\nThe Umbraco Spark innovation conference is a must for all Umbraco developers that want to find out what's going on with Umbraco. Focusing on innovation and forward thinking, we cover topics such as Umbraco Headless, .Net Core, Machine Learning / AI, personalisation, mobile apps, content as a service, and digital assistants.
\n\nOdense, Denmark - June
\nCodegarden is the biggest Umbraco conference in the world. It's 3 days packed with inspiring talks about tech, business, UX and, of course, Umbraco. 3 days where you will deepen your Umbraco knowledge, get inspired, get to meet the global open source Umbraco community and simply have a fabulous time.
\nIf you’re working with Umbraco or if Umbraco is part of your business - this is the place to be!
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "f43c8349-0801-44b8-9113-9f7c62cd44fe",
+ "udi": "umb://element/eb6d7236c2254a8cbe78fbeead9e4731",
+ "videoUrl": "https://www.youtube.com/watch?v=CQJIl2xoDhc",
+ "caption": "Codegarden 2022 | Official Aftermovie"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/8570194b0e1c476d90028a05d647d309",
+ "content": {
+ "markup": "\nUtrecht, Netherlands - October
\nDUUGFest is run by the Dutch Umbraco User Group
\n\nPeak District, England - September
\nCODECABIN is the premier, invite-only weekend away for Umbraco developers, providing time to code, learn and network in a completely relaxed and open environment away from the hustle and bustle of every day life.
\n\nLondon, England - November
\nThe world's biggest community organised Umbraco event. Get ready for a jam packed event featuring incredible talks on development, front end, design & UX, wellbeing, and business, deep-dive workshops hosted by community experts, and of course our legendary hackathon.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/de0ef55d823645dca8c4c53bd24c1a35",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/81b5707465014c60b4dd442cebc37909",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/8c526fec932b4ff3b11e8b6fd1531197",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "eef34ceb-ddf6-4894-b1ac-f96c8c05d3d2",
+ "udi": "umb://element/d45c3cb35f8345659c78e6e634c65716",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/a83ef7fa6b3e44ce8d0aa35a6c216411",
+ "hide": "0"
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/conferences_dpraan01.config b/examples/starter-example/uSync/v9/Content/conferences_dpraan01.config
new file mode 100644
index 00000000..55492aa1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/conferences_dpraan01.config
@@ -0,0 +1,16 @@
+
+
+
+ Categories
+ /Home/Categories/Conferences
+ false
+ category
+ 2023-08-30T00:38:29
+
+ 1
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/contact.config b/examples/starter-example/uSync/v9/Content/contact.config
new file mode 100644
index 00000000..cbe9be11
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/contact.config
@@ -0,0 +1,65 @@
+
+
+
+ Home
+ /Home/Contact
+ false
+ contact
+ 2021-10-09T23:24:16
+
+ 3
+
+
+ contact
+
+
+
+ Error
+Sorry there was a problem with submitting the form. Please try again.
]]>
+
+
+
+
+
+
+
+
+ Want to get in touch? Fill out the form below to send me a message and I will get back to you as soon as possible!]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Thank you
+Thanks for your email. We will be in touch soon.
]]>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/error.config b/examples/starter-example/uSync/v9/Content/error.config
new file mode 100644
index 00000000..c0642de9
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/error.config
@@ -0,0 +1,83 @@
+
+
+
+ Home
+ /Home/Error
+ false
+ error
+ 2021-10-09T23:24:16
+
+ 4
+
+
+ error
+
+
+
+ Sorry, we couldn't find the page you were looking for.\nWhy not go back to the home page and start again?
"
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/0657abc2a856452b89a30fb4fffc65c6",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": "",
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/features.config b/examples/starter-example/uSync/v9/Content/features.config
new file mode 100644
index 00000000..3abc6fb8
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/features.config
@@ -0,0 +1,276 @@
+
+
+
+ Home
+ /Home/Features
+ false
+ content
+ 2023-08-06T06:01:20
+
+ 0
+
+
+ content
+
+
+
+ Rich Text Row\nThere is a simple rich text row for writing your usual formatted content in a WYSIWIG style with the usual settings including but not limited to:
\nBold
\nItalic
\nLeft align
\nRight align
\n\n\n- Ordered List
\n
"
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/aabf1c82a7074b23a905c6c41d7e8db0",
+ "image": [
+ {
+ "key": "b971579f-5dd9-46f4-ad32-1d4ea6f04127",
+ "mediaKey": "bbf2800f-1cc5-4ea9-8d2e-b33ff1d5efbe"
+ }
+ ],
+ "caption": "Image Row Example"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/f44e6a28c00e4d6bab107902d5785289",
+ "content": "Image Row
\nYou can use the image row to render a full width image.
"
+ },
+ {
+ "contentTypeKey": "f43c8349-0801-44b8-9113-9f7c62cd44fe",
+ "udi": "umb://element/580568eda49a42128607366cc83bafc0",
+ "videoUrl": "https://www.youtube.com/watch?v=Dn2tI1--LOs",
+ "caption": "What's next in C# - Mads Torgersen @ Umbraco Codegarden 2022"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/0a384113fbcf4205b15cda6a6bfd6b8c",
+ "content": "Video Row
\nThis lets you embed a YouTube video by just entering the normal URL of the video, and it just renders the preview image of it at first. Then when you click on it, it loads it in as the iframe, which is better for the end user as it doesn't download all of the YouTube assets until it is needed.
"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/d5c55fef1cf44fa2a67502f193dcbf0c",
+ "content": "Code Snippet Row
\nThere is a code snippet row to enable you to easily share code snippets in your website.
"
+ },
+ {
+ "contentTypeKey": "f37c2c28-c8ab-48cd-ac07-b13e38bd900f",
+ "udi": "umb://element/2bb90c718d9a4e569458ab5bde2d0f58",
+ "code": "@inherits UmbracoViewPage\r\n@using Umbraco.Cms.Core.Models.Blocks\r\n\r\n@{\r\n var row = Model.Content as CodeSnippetRow;\r\n var settings = Model.Settings as CodeSnippetRowSettings;\r\n if (settings?.Hide ?? false) { return; }\r\n\r\n SmidgeHelper.RequiresJs(\"~/clean-assets/js/highlight.default.min.css\");\r\n SmidgeHelper.RequiresJs(\"~/clean-assets/js/highlight.min.js\");\r\n}\r\n\r\n",
+ "title": "Code from the codeSnippetRow.cshtml file"
+ },
+ {
+ "contentTypeKey": "1c43fe2d-4a9a-4336-923f-9d0214950d48",
+ "udi": "umb://element/2d0b8422de3847d192438026ef503919",
+ "images": [
+ {
+ "key": "b8bcec6b-33bc-4a93-9819-d67f25190457",
+ "mediaKey": "3c6c415c-35a0-4629-891e-683506250c31"
+ },
+ {
+ "key": "d0435454-53ef-4013-b48e-2cefdfb467ff",
+ "mediaKey": "5598b628-b390-4532-8bb5-dab06089e9d7"
+ },
+ {
+ "key": "ef2c3ab6-60ae-4d8d-a489-29e27d285691",
+ "mediaKey": "bbf2800f-1cc5-4ea9-8d2e-b33ff1d5efbe"
+ },
+ {
+ "key": "971c3fbc-859b-4af4-97fa-035405aa377b",
+ "mediaKey": "48239f24-1450-49da-9964-934f512dde48"
+ },
+ {
+ "key": "b2fd4dd3-4cd5-4b1f-9b31-052bfff2deb0",
+ "mediaKey": "167ee715-53ff-4a8b-ab50-7d630c8448fa"
+ },
+ {
+ "key": "c3518f71-9713-4a60-ae04-a806e1c2e38d",
+ "mediaKey": "b5279cc9-c438-4b14-a57a-72f97f5527f7"
+ }
+ ]
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/5dbf69fbf38a4e3f91637b153185a731",
+ "content": "Image Carousel Row
\nYou can add a simple image carousel to a page by using the Image Carousel Row. In this row you have a multi image picker and you just choose the images you want to display.
"
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/25575a797c7f4376a8ffdf3258a5d90f",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/70eaaac704594630b07daba532e5b570",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/e56e12baf10c436aa2b2e18619f520f8",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": [
+ "5"
+ ],
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ },
+ {
+ "contentTypeKey": "eef34ceb-ddf6-4894-b1ac-f96c8c05d3d2",
+ "udi": "umb://element/32870124dd0941b99a214cb70d726c8c",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/ce23467908804d8b832a98320287616e",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": [
+ "5"
+ ],
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/a4432aa0ee134cbebfd3110e99749a2a",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": [
+ "5"
+ ],
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ },
+ {
+ "contentTypeKey": "93638715-f76c-4a11-86b1-6a9d66504901",
+ "udi": "umb://element/25a7844466764628ab13c10cd4efcfa1",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": "",
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ },
+ {
+ "contentTypeKey": "378fde96-51b6-4506-93e3-ec3038e636bb",
+ "udi": "umb://element/4ce89d32479649a4b2d63814c0247d8f",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingRight": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "marginTop": "",
+ "marginRight": "",
+ "marginBottom": "",
+ "marginLeft": ""
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/08acf63461c54248b39d62ffc41662d7",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": [
+ "5"
+ ],
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/home.config b/examples/starter-example/uSync/v9/Content/home.config
new file mode 100644
index 00000000..1318c97e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/home.config
@@ -0,0 +1,269 @@
+
+
+
+
+ /Home
+ false
+ home
+ 2021-10-09T23:24:15
+
+ 0
+
+
+ home
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/join-the-umbraco-community-on-mastodon.config b/examples/starter-example/uSync/v9/Content/join-the-umbraco-community-on-mastodon.config
new file mode 100644
index 00000000..3f0fc05b
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/join-the-umbraco-community-on-mastodon.config
@@ -0,0 +1,98 @@
+
+
+
+ Blog
+ /Home/Blog/JoinTheUmbracoCommunityOnMastodon
+ false
+ article
+ 2023-12-14T14:48:32
+
+ 6
+
+
+ article
+
+
+
+
+
+
+
+
+
+
+
+
+ Recently it has been talked about that the Umbraco Community seems to have been spread out across different social media platforms since the takeover of Twitter. So the sense of community has been watered down.\nIn an effort to boost that community spirit and to gather in one place in a platform \"similar\" to twitter, there has been a push to join the Umbraco Mastodon server.
\nIt's great to see lots of Umbraco related posts in your feed without ads or \"recommended\" posts.
\nJoe Glombek from Bump Digital wrote an excellent blog post all about what Mastodon is and how to join the Umbraco Mastodon server.
\nSo have a read of that post to find out more.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/4f7ff1a902f74dfa8d452e5ce1b4b628",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": "",
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/meetups.config b/examples/starter-example/uSync/v9/Content/meetups.config
new file mode 100644
index 00000000..07c92da9
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/meetups.config
@@ -0,0 +1,130 @@
+
+
+
+ Blog
+ /Home/Blog/Meetups
+ false
+ article
+ 2021-10-09T23:24:16
+
+ 2
+
+
+ article
+
+
+
+
+
+
+
+
+
+
+
+
+ Until I had gone to my first meetup, I didn't realise how comforting and safe it would feel to be around like minded people. When I started going to meetups, I realised that there were other people out there who liked the same things I do, and I could have decent conversations with them face to face. With that in mind I would encourage to you attend a meetup if you can.",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/642a364fbaa748628a8b1532aecd9441",
+ "image": [
+ {
+ "key": "a36f917f-8cd3-4bc1-a105-b7f8c7052a8d",
+ "mediaKey": "167ee715-53ff-4a8b-ab50-7d630c8448fa"
+ }
+ ],
+ "caption": "We love to hear great talks at meetups"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/62706cbebb1247f381a79ebedc4e3ee3",
+ "content": {
+ "markup": "Here are some popular Umbraco meetups, some of them are virtual meetups.
\n\nEDINBUUG is a chance to chat about all things Umbraco - whether you are someone who uses Umbraco for their website, you're a developer who builds Umbraco websites or maybe you are a project manager who works with clients who have Umbraco websites - come along. Everyone is welcome.
\n\nThe purpose is to get together, discuss and learn a little about Umbraco having some fun while doing so. Whether there are two of us or 22, the event will go forward, so come along and take part!
\n\nThe London Umbraco Meetup Group is a monthly meetup for Umbraco devotees and newbies to come along, learn and share their knowledge and to also gently spread the umbraco love to all.
\nWe aim to meet each month, where you can have a chat and a beer with other fellow Umbracians.
\nWe also try and mix it up by having talks by both Umbraco and non-Umbraco
\n\nTo get Umbraco in the picture in the Netherlands: that's what we aim for with the Dutch Umbraco User Group (DUUG)! It's a platform for and by professionals working with the most applied .net CMS in Europe. DUUG will inspire, inform, convince and reinforce.
\n\nUmbraco Leeds is a monthly meetup group for anyone involved or interested in Umbraco. Whether you're a developer, content editor, project owner or just curious to hear about what it's all about - come along to one of our meetups and you'll be sure of a warm and friendly welcome.
\n\nThis is the group for passionate Umbraco developers and users in the Sydney area to meetup every couple of months. Sometimes it may be at the Glenmore on The Rocks or it could be a presentation based on Umbraco hosted by a local agency.
\n\nThe Belgian Umbraco Meet Up is an open space to come learn and meet umbraco people and agencies in the Belgian area, we however welcome umbracians from all parts of the globe and you are welcome to attend.
\n\nWe are a networking group for everyone who loves Umbraco!
\nMeetups are organized in Odense, Aarhus, Copenhagen and where there are enthusiasts who want to arrange something. There will be presentations, hands-on sessions, display of the delicious things you've made in Umbraco or something else.
\n\nThe Glasgow Umbraco Users' Group (GLUUG) is a networking group for anyone interested in Umbraco. We have regular social meetups where people can come and chat to friendly and like-minded Umbraco folk. We also have more formal presentation-based meetups where experts in the community share their knowledge and usually kick-start some lively debates!
\nSo come along and chat to some friendly folk over a beer and some pizza at our next meetup :)
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/34cea66b0f324c1abf1189a6e954447f",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/41d73d2c5cad47cb98f57ecac90089d3",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/ea9a5807ded545d8981d74d5976fa6fb",
+ "hide": "0"
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/meetups_fthd5e2w.config b/examples/starter-example/uSync/v9/Content/meetups_fthd5e2w.config
new file mode 100644
index 00000000..942a9b1f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/meetups_fthd5e2w.config
@@ -0,0 +1,16 @@
+
+
+
+ Categories
+ /Home/Categories/Meetups
+ false
+ category
+ 2023-08-29T23:56:00
+
+ 2
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/paul-seal.config b/examples/starter-example/uSync/v9/Content/paul-seal.config
new file mode 100644
index 00000000..3f4adeb1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/paul-seal.config
@@ -0,0 +1,85 @@
+
+
+
+ Authors
+ /Home/Authors/PaulSeal
+ false
+ author
+ 2023-08-15T23:21:15
+
+ 0
+
+
+ Author
+
+
+
+ Paul Seal is an Umbraco Tech Lead and multiple times Umbraco MVP who works for the Umbraco Gold Partners ClerksWell.\nWhen he's not creating packages such as the Clean Starter Kit, which you are looking at right now, Paul likes to contribute to Open Source by submitting pull requests to different projects such as the Umbraco Source code, uSync Migrations and Contentment.
\nPaul likes to write articles with code snippets to help people out when they are struggling to achieve something, usually for Umbraco.
"
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/7cdd3e4316c84a9f8e5157bc9c8d8a05",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": [
+ "5"
+ ],
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/podcasts-and-videos.config b/examples/starter-example/uSync/v9/Content/podcasts-and-videos.config
new file mode 100644
index 00000000..9a0ea1cb
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/podcasts-and-videos.config
@@ -0,0 +1,237 @@
+
+
+
+ Blog
+ /Home/Blog/PodcastsAndVideos
+ false
+ article
+ 2023-07-30T07:31:23
+
+ 4
+
+
+ article
+
+
+
+
+
+
+
+
+
+
+
+
+ A great way to stay in touch with what is happening in the Umbraco community is by listening to podcasts and watching umbraCoffee.",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "f43c8349-0801-44b8-9113-9f7c62cd44fe",
+ "udi": "umb://element/c12b4913352d4371b984c69d777b9527",
+ "videoUrl": "https://www.youtube.com/watch?v=8X_Hzm29tV8",
+ "caption": "An episode of umbraCoffee from July 2023"
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/29e835ad92cc4b32b24694f9bb0cb5b6",
+ "image": [
+ {
+ "key": "369ed25b-f0d5-4915-96cb-858df2521c38",
+ "mediaKey": "7d96bc75-fea8-4f66-aaf5-50f45748cab4"
+ }
+ ],
+ "caption": "Candid Contributions Podcast"
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/856dee0481a942b18eede133fa816d44",
+ "image": [
+ {
+ "key": "23930894-c1b4-4ae2-9801-95505acd1054",
+ "mediaKey": "c334997e-f9a7-498b-83af-f4888a97d5bc"
+ }
+ ],
+ "caption": "Package Manifest Podcast"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/8353fb5a92ad486a9d40fb3aa0e22b2d",
+ "content": {
+ "markup": "\numbraCoffee is a weekly YouTube show where each Friday at 11:30am UK / 12:30pm CET, the hosts - Marcin and Callum - together with their guests drive you through the weekly news and all things Umbraco related. So grab a cuppa, join them LIVE and enjoy!
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/60ef3378da7c4ba09a70436dfeabdbb5",
+ "content": {
+ "markup": "\nCandid Contributions is the home of the aptly named podcast where four experienced developers: Carole Logan, Emma Burstow, Laura Weatherhead and Lotte Pitcher talk all things open source - from code contributions to conference attendance; they aim to cover all aspects of life as an active member of an open-source community.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/4639f709abb6460eb892d7676d93a194",
+ "content": {
+ "markup": "\nPackage Manifest is a podcast all about Umbraco packages and the people who create them. It is hosted by Matt Brailsford, Kevin Jump and Lee Kelleher.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/afd72029194841fc883a6b40832c6a6a",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "eef34ceb-ddf6-4894-b1ac-f96c8c05d3d2",
+ "udi": "umb://element/35bbb6a604b34e448c67a4047e356f38",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/5e063ac7363e466cad465236f484902f",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": [
+ "5"
+ ],
+ "paddingRight": [
+ "5"
+ ],
+ "marginTop": "",
+ "marginBottom": "",
+ "marginLeft": [
+ "5"
+ ],
+ "marginRight": [
+ "5"
+ ]
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/f4fbbedbf310405f9e7e94f90ae55f0a",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": [
+ "5"
+ ],
+ "paddingRight": [
+ "5"
+ ],
+ "marginTop": "",
+ "marginBottom": "",
+ "marginLeft": [
+ "5"
+ ],
+ "marginRight": [
+ "5"
+ ]
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/847d7bd4904e4034b8c0797ff13cad71",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/e2c6c27f99c846d5ac18a57dd5b47676",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/acb1482423be413abe97f758e910cc5f",
+ "hide": "0"
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/podcasts.config b/examples/starter-example/uSync/v9/Content/podcasts.config
new file mode 100644
index 00000000..7468366e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/podcasts.config
@@ -0,0 +1,16 @@
+
+
+
+ Categories
+ /Home/Categories/Podcasts
+ false
+ category
+ 2023-08-30T00:05:28
+
+ 3
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/popular-blogs.config b/examples/starter-example/uSync/v9/Content/popular-blogs.config
new file mode 100644
index 00000000..0328b767
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/popular-blogs.config
@@ -0,0 +1,130 @@
+
+
+
+ Blog
+ /Home/Blog/PopularBlogs
+ false
+ article
+ 2021-10-09T23:24:16
+
+ 1
+
+
+ article
+
+
+
+
+
+
+
+
+
+
+
+
+ There are many blogs and magazines from Umbraco community members writing about Umbraco\nHere are some popular ones:
\n\nSkrift isn't just \"another blog on the internet\". They are an online magazine with an ISSN (International Standard Serial Number), which means that as one of their authors, you are officially printed in a publication. Which means you will have great recognition in your field and it may help you land your next contract, client, raise or job.
\nSo have a read of the articles and consider writing for them too.
\n\nThe 24 Days In Umbraco Christmas Calendar. It started in December 2012, where they asked a bunch of Umbraco people if they had a favourite feature, a story or something else that they'd be willing to write a short article about. The 24 days team now post a new one on the site everyday through December.
\nYou can also write for 24 days, so have a read through the articles and contact the organisers if you would like to write for them.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "e0df4794-063a-4450-8f4f-c615a5d902e2",
+ "udi": "umb://element/67a12f8ca471436aa8c5cbf3207722bd",
+ "image": [
+ {
+ "key": "8e560bf8-be43-4b80-b7ca-5a6ed81dc502",
+ "mediaKey": "b5279cc9-c438-4b14-a57a-72f97f5527f7"
+ }
+ ],
+ "caption": "Skrift authors at Codegarden"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/1734736f35b341478fcde05c8712150d",
+ "content": {
+ "markup": "\nCodeshare is a blog by me, Paul Seal, where i like to share tips about Umbraco and other web related topics. There are tools on there too such as a strong password generator.
\n\nJon D Jones is a great source of knowledge about Umbraco and other CMSs. He writes very detailed tutorials to go with his videos.
\n\nOwain's Umbraco Community thoughts, coding tutorials, what he is learning, general blogs about his experience with Umbraco and any other things that come to mind.
\n\nCorné Hoskam is a very talented Umbraco Developer and speaker. He likes to share his knowledge and experience in his personal blog.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/e49cb89faa3447b2af94288d08550333",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "fed88ec5-c150-42af-b444-1f9ac5a100ba",
+ "udi": "umb://element/8dd61d38a06947128c1f076d4dc72ece",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/213f04a886f9496bbbaf1bb354c8fa04",
+ "hide": "0"
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/resources.config b/examples/starter-example/uSync/v9/Content/resources.config
new file mode 100644
index 00000000..51df152e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/resources.config
@@ -0,0 +1,16 @@
+
+
+
+ Categories
+ /Home/Categories/Resources
+ false
+ category
+ 2023-08-30T00:39:17
+
+ 4
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/search.config b/examples/starter-example/uSync/v9/Content/search.config
new file mode 100644
index 00000000..6d642956
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/search.config
@@ -0,0 +1,44 @@
+
+
+
+ Home
+ /Home/Search
+ false
+ search
+ 2021-10-09T23:24:16
+
+ 6
+
+
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/umbraco.config b/examples/starter-example/uSync/v9/Content/umbraco.config
new file mode 100644
index 00000000..71ff3a17
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/umbraco.config
@@ -0,0 +1,16 @@
+
+
+
+ Categories
+ /Home/Categories/Umbraco
+ false
+ category
+ 2023-08-29T23:55:44
+
+ 5
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/videos.config b/examples/starter-example/uSync/v9/Content/videos.config
new file mode 100644
index 00000000..45b7d9ea
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/videos.config
@@ -0,0 +1,16 @@
+
+
+
+ Categories
+ /Home/Categories/Videos
+ false
+ category
+ 2023-08-29T23:56:18
+
+ 6
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/xmlsitemap.config b/examples/starter-example/uSync/v9/Content/xmlsitemap.config
new file mode 100644
index 00000000..c6f5973c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/xmlsitemap.config
@@ -0,0 +1,26 @@
+
+
+
+ Home
+ /Home/XMLSitemap
+ false
+ xMLSitemap
+ 2021-10-09T23:24:16
+
+ 5
+
+
+ xMLSitemap
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Content/youtube-tutorials.config b/examples/starter-example/uSync/v9/Content/youtube-tutorials.config
new file mode 100644
index 00000000..03990216
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Content/youtube-tutorials.config
@@ -0,0 +1,203 @@
+
+
+
+ Blog
+ /Home/Blog/YouTubeTutorials
+ false
+ article
+ 2023-08-04T06:53:45
+
+ 5
+
+
+ article
+
+
+
+
+
+
+
+
+
+
+
+
+ There are lots of free videos on YouTube for you to be able to learn more about Umbraco.",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/8b4af4c316364111bc8c3f71e1dee4ae",
+ "content": {
+ "markup": "\nUmbraco Learning Base is the official channel for the Happy Documentation and TV team at Umbraco HQ. On this channel, you can find videos and tutorials on how to get started working with the world's friendliest CMS Umbraco.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "f43c8349-0801-44b8-9113-9f7c62cd44fe",
+ "udi": "umb://element/8f3328aad96045a3ad14880e3f3d0305",
+ "videoUrl": "https://www.youtube.com/watch?v=Yu29dE-0OoI",
+ "caption": "Getting Started with Umbraco"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/5da04a93caec4ed8b0870bdc31860bed",
+ "content": {
+ "markup": "\nThere are several playlists of videos in this channel for you to learn how to build a website with Umbraco. Paul takes you step by step through the process and shows you the errors and mistakes along the way so you can see how to fix them yourself.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "f43c8349-0801-44b8-9113-9f7c62cd44fe",
+ "udi": "umb://element/5e64e45431ac4662afc2b078b397b2d8",
+ "videoUrl": "https://www.youtube.com/watch?v=qEZtjxDEK8g",
+ "caption": "How to build a website with Umbraco 10 - Part 1 - Installation"
+ },
+ {
+ "contentTypeKey": "dd183f78-7d69-4eda-9b4c-a25970583a28",
+ "udi": "umb://element/7a2d81a99df6456f9c992a72459292a8",
+ "content": {
+ "markup": "\nJon creates a new YouTube tutorial video every week, with a detailed blog post to follow along with too. He usually creates videos about Umbraco and other Content Management Systems.
",
+ "blocks": {
+ "contentData": [],
+ "settingsData": []
+ }
+ }
+ },
+ {
+ "contentTypeKey": "f43c8349-0801-44b8-9113-9f7c62cd44fe",
+ "udi": "umb://element/192a6c7f4b934571803b16db796e5c33",
+ "videoUrl": "https://www.youtube.com/watch?v=arki6eMudG8",
+ "caption": "Build a NextJs headless website with Umbraco and Content Delivery API"
+ }
+ ],
+ "settingsData": [
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/f3aa62d81bd742788579047706724049",
+ "hide": "0",
+ "paddingTop": "",
+ "paddingBottom": "",
+ "paddingLeft": "",
+ "paddingRight": "",
+ "marginTop": "",
+ "marginBottom": "",
+ "marginLeft": "",
+ "marginRight": ""
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/aace85dd9b5843ddb79f2f0897db1277",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "eef34ceb-ddf6-4894-b1ac-f96c8c05d3d2",
+ "udi": "umb://element/a56d7b5404f3493f882c66c28712b3a4",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/15377292a7d24bc4bc560dd3a59ca2b1",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "eef34ceb-ddf6-4894-b1ac-f96c8c05d3d2",
+ "udi": "umb://element/b0f2759d661b424c8b9e46795c500478",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "da15dc43-43f6-45f6-bda8-1fd17a49d25c",
+ "udi": "umb://element/9a5129d4204644aaa37d37361ffc9540",
+ "hide": "0"
+ },
+ {
+ "contentTypeKey": "eef34ceb-ddf6-4894-b1ac-f96c8c05d3d2",
+ "udi": "umb://element/b9367f44c258449fb2fecd7eddea4f19",
+ "hide": "0"
+ }
+ ]
+}]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/article.config b/examples/starter-example/uSync/v9/ContentTypes/article.config
new file mode 100644
index 00000000..e1fbc926
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/article.config
@@ -0,0 +1,35 @@
+
+
+
+ Article
+ icon-article color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ articleControls
+ contentControls
+ headerControls
+ listPageSettings
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ article
+
+ article
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/articlecontrols.config b/examples/starter-example/uSync/v9/ContentTypes/articlecontrols.config
new file mode 100644
index 00000000..dc33c38e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/articlecontrols.config
@@ -0,0 +1,82 @@
+
+
+
+ Article Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ 5ec7043f-1670-4917-bc0e-8c2f08b3a6e4
+ Article Date
+ articleDate
+ e4d66c0f-b935-4200-81f0-025f7256b89a
+ Umbraco.DateTime
+ true
+
+
+ 20
+ Content
+ Nothing
+
+
+ false
+
+
+ 4e300c2a-054e-44f8-8c13-7914b4ffc165
+ Author
+ author
+ bd37253b-2f05-40e0-8d38-6041c9456230
+ Umbraco.MultiNodeTreePicker
+ true
+
+
+ 25
+ Content
+ Nothing
+
+
+ false
+
+
+ 63d11e41-4fbc-474a-ae4b-0c5b0217653c
+ Categories
+ categories
+ 9a426393-b2c8-4403-a85f-00b7a51ebe69
+ Umbraco.MultiNodeTreePicker
+ false
+
+
+ 30
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 2c962016-43e4-47ee-a890-87bd908f2a72
+ Content
+ content
+ Tab
+ 10
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/articlelist.config b/examples/starter-example/uSync/v9/ContentTypes/articlelist.config
new file mode 100644
index 00000000..b84d96c3
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/articlelist.config
@@ -0,0 +1,36 @@
+
+
+
+ Article List
+ icon-thumbnail-list color-blue
+ folder.png
+
+ False
+ True
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ contentControls
+ headerControls
+ listPageSettings
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ articleList
+
+ articleList
+
+
+
+ article
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/author.config b/examples/starter-example/uSync/v9/ContentTypes/author.config
new file mode 100644
index 00000000..77c222c9
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/author.config
@@ -0,0 +1,33 @@
+
+
+
+ Author
+ icon-umb-users color-light-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ contentControls
+ headerControls
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ Author
+
+ Author
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/authorlist.config b/examples/starter-example/uSync/v9/ContentTypes/authorlist.config
new file mode 100644
index 00000000..4f555691
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/authorlist.config
@@ -0,0 +1,35 @@
+
+
+
+ Author List
+ icon-users color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ contentControls
+ headerControls
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ AuthorList
+
+ AuthorList
+
+
+
+ author
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/category.config b/examples/starter-example/uSync/v9/ContentTypes/category.config
new file mode 100644
index 00000000..b58f5927
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/category.config
@@ -0,0 +1,25 @@
+
+
+
+ Category
+ icon-tag color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/categorylist.config b/examples/starter-example/uSync/v9/ContentTypes/categorylist.config
new file mode 100644
index 00000000..0903b7f4
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/categorylist.config
@@ -0,0 +1,29 @@
+
+
+
+ Category List
+ icon-tags color-blue
+ folder.png
+
+ False
+ True
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ visibilityControls
+
+
+
+
+
+ category
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/codesnippetrow.config b/examples/starter-example/uSync/v9/ContentTypes/codesnippetrow.config
new file mode 100644
index 00000000..b7aa5e8c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/codesnippetrow.config
@@ -0,0 +1,66 @@
+
+
+
+ Code Snippet Row
+ icon-code color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Content+Models
+
+
+
+
+
+
+
+ d7546066-4194-4576-b75d-11b8dab1e860
+ Code
+ code
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 1
+ Content
+ Nothing
+
+
+ false
+
+
+ 2c592a4f-6066-4c7c-b560-9a2c602dbcbf
+ Title
+ title
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 0
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 98438e4b-df34-4d4a-b97e-2e3144a10ebb
+ Content
+ content
+ Tab
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/codesnippetrowsettings.config b/examples/starter-example/uSync/v9/ContentTypes/codesnippetrowsettings.config
new file mode 100644
index 00000000..041b0c11
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/codesnippetrowsettings.config
@@ -0,0 +1,28 @@
+
+
+
+ Code Snippet Row Settings
+ icon-settings color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Setting+Models
+
+ hideProperty
+ spacingProperties
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/contact.config b/examples/starter-example/uSync/v9/ContentTypes/contact.config
new file mode 100644
index 00000000..2997b53e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/contact.config
@@ -0,0 +1,33 @@
+
+
+
+ Contact
+ icon-message color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ contactFormControls
+ headerControls
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ contact
+
+ contact
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/contactformcontrols.config b/examples/starter-example/uSync/v9/ContentTypes/contactformcontrols.config
new file mode 100644
index 00000000..c20e6792
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/contactformcontrols.config
@@ -0,0 +1,89 @@
+
+
+
+ Contact Form Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ 067fc52b-d92c-451b-8a48-cc1e5565a046
+ Error Message
+ errorMessage
+ ca90c950-0aff-4e72-b976-a30b1ac57dad
+ Umbraco.TinyMCE
+ true
+
+
+ 10
+ Result Messages
+ Nothing
+
+
+ false
+
+
+ 4a254e56-06f5-459b-9214-264621a97abe
+ Instruction Message
+ instructionMessage
+ ca90c950-0aff-4e72-b976-a30b1ac57dad
+ Umbraco.TinyMCE
+ false
+
+
+ 20
+ Content
+ Nothing
+
+
+ false
+
+
+ 3e771f3c-d2bf-4dc4-8c31-e757eb0103d9
+ Success Message
+ successMessage
+ ca90c950-0aff-4e72-b976-a30b1ac57dad
+ Umbraco.TinyMCE
+ true
+
+
+ 5
+ Result Messages
+ Nothing
+
+
+ false
+
+
+
+
+ 30532545-b8f7-449b-a600-17592a613461
+ Result Messages
+ resultMessages
+ Tab
+ 20
+
+
+ b4a09c0d-7517-461f-a7f1-2e0233577288
+ Content
+ content
+ Tab
+ 10
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/content.config b/examples/starter-example/uSync/v9/ContentTypes/content.config
new file mode 100644
index 00000000..67354abd
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/content.config
@@ -0,0 +1,33 @@
+
+
+
+ Content
+ icon-document color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ contentControls
+ headerControls
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ content
+
+ content
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/contentcontrols.config b/examples/starter-example/uSync/v9/ContentTypes/contentcontrols.config
new file mode 100644
index 00000000..c5eb04ee
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/contentcontrols.config
@@ -0,0 +1,50 @@
+
+
+
+ Content Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ cd0a3534-e0f4-457c-8297-c88fc01db607
+ Content Rows
+ contentRows
+ b5922818-d8d8-43df-88ed-4582a24c0fa6
+ Umbraco.BlockList
+ false
+
+
+ 16
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ f7e5767b-2760-4a51-bce1-ef9bb4f3f649
+ Content
+ content
+ Tab
+ 10
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/error.config b/examples/starter-example/uSync/v9/ContentTypes/error.config
new file mode 100644
index 00000000..a1738fc6
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/error.config
@@ -0,0 +1,33 @@
+
+
+
+ Error
+ icon-application-error color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ contentControls
+ headerControls
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ error
+
+ error
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/footercontrols.config b/examples/starter-example/uSync/v9/ContentTypes/footercontrols.config
new file mode 100644
index 00000000..04696d01
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/footercontrols.config
@@ -0,0 +1,50 @@
+
+
+
+ Footer Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ 38e63c07-6381-45c0-ac6b-29da86775e85
+ Social Icon Links
+ socialIconLinks
+ f8d7b987-745c-471f-8f34-a47f00838f06
+ Umbraco.BlockList
+ false
+
+
+ 5
+ Footer
+ Nothing
+
+
+ false
+
+
+
+
+ 19d6db90-3303-45cf-850c-c7d030452843
+ Footer
+ footer
+ Tab
+ 20
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/headercontrols.config b/examples/starter-example/uSync/v9/ContentTypes/headercontrols.config
new file mode 100644
index 00000000..7e134d82
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/headercontrols.config
@@ -0,0 +1,66 @@
+
+
+
+ Header Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ 27e86550-e272-46b5-978e-2cc2f7e31118
+ Subtitle
+ subtitle
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 10
+ Content
+ Nothing
+
+
+ false
+
+
+ 4d694810-d4a8-42aa-b11c-4e265f09be59
+ Title
+ title
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 5
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 05bde0a5-384e-4a60-9350-5f51e063fd69
+ Content
+ content
+ Tab
+ 10
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/hideproperty.config b/examples/starter-example/uSync/v9/ContentTypes/hideproperty.config
new file mode 100644
index 00000000..b836e964
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/hideproperty.config
@@ -0,0 +1,50 @@
+
+
+
+ Hide Property
+ icon-defrag color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Compositions/Content+Blocks/Setting+Models
+
+
+
+
+
+
+
+ 4823f638-6872-4010-b4a2-85134a7011bf
+ Hide
+ hide
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 10
+ Settings
+ Nothing
+
+
+ false
+
+
+
+
+ 9d91cc45-9418-4a55-8c49-5dcac48bfd95
+ Settings
+ settings
+ Tab
+ 100
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/home.config b/examples/starter-example/uSync/v9/ContentTypes/home.config
new file mode 100644
index 00000000..5ccc4639
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/home.config
@@ -0,0 +1,42 @@
+
+
+
+ Home
+ icon-home color-blue
+ folder.png
+
+ True
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ contentControls
+ footerControls
+ headerControls
+ mainImageControls
+ sEOControls
+
+ home
+
+ home
+
+
+
+ content
+ contact
+ articleList
+ search
+ error
+ xMLSitemap
+ authorList
+ categoryList
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/iconlinkrow.config b/examples/starter-example/uSync/v9/ContentTypes/iconlinkrow.config
new file mode 100644
index 00000000..2fc47331
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/iconlinkrow.config
@@ -0,0 +1,66 @@
+
+
+
+ Icon Link Row
+ icon-link color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Content+Models
+
+
+
+
+
+
+
+ 97f0c9df-4f4c-4782-b4a4-2ca5917aaf68
+ Icon
+ icon
+ 7b21df8f-973a-4e2d-8ee1-a77924d9e211
+ Umbraco.MediaPicker3
+ true
+
+
+ 10
+ Content
+ Nothing
+ You must choose an icon
+
+ false
+
+
+ aad73ce1-4ede-49e2-8eef-7ab705f6bdb3
+ Link
+ link
+ 2d350d21-51dd-4c36-8eee-18170985ce91
+ Umbraco.MultiUrlPicker
+ true
+
+
+ 20
+ Content
+ Nothing
+ You must add a link
+
+ false
+
+
+
+
+ ad2888ca-4474-4efa-aea3-56e4c8c580bb
+ Content
+ content
+ Tab
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/iconlinkrowsettings.config b/examples/starter-example/uSync/v9/ContentTypes/iconlinkrowsettings.config
new file mode 100644
index 00000000..e4f8d9ec
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/iconlinkrowsettings.config
@@ -0,0 +1,27 @@
+
+
+
+ Icon Link Row Settings
+ icon-settings color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Setting+Models
+
+ hideProperty
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/imagecarouselrow.config b/examples/starter-example/uSync/v9/ContentTypes/imagecarouselrow.config
new file mode 100644
index 00000000..b70ebc75
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/imagecarouselrow.config
@@ -0,0 +1,50 @@
+
+
+
+ Image Carousel Row
+ icon-pictures-alt color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Content+Models
+
+
+
+
+
+
+
+ 3d9ba030-db57-4cb0-9530-c08753a70e4b
+ Images
+ images
+ 0e63d883-b62b-4799-88c3-157f82e83ecc
+ Umbraco.MediaPicker3
+ false
+
+
+ 1
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ e3aeb359-a8bf-48d8-b650-bae5e40840ea
+ Content
+ content
+ Tab
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/imagecarouselrowsettings.config b/examples/starter-example/uSync/v9/ContentTypes/imagecarouselrowsettings.config
new file mode 100644
index 00000000..03a12dfc
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/imagecarouselrowsettings.config
@@ -0,0 +1,28 @@
+
+
+
+ Image Carousel Row Settings
+ icon-settings color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Setting+Models
+
+ hideProperty
+ spacingProperties
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/imagerow.config b/examples/starter-example/uSync/v9/ContentTypes/imagerow.config
new file mode 100644
index 00000000..451aa954
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/imagerow.config
@@ -0,0 +1,66 @@
+
+
+
+ Image Row
+ icon-picture color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Content+Models
+
+
+
+
+
+
+
+ ff44ccd9-2516-4b1e-be06-c7238743c59e
+ Caption
+ caption
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 20
+ Content
+ Nothing
+
+
+ false
+
+
+ a7f48594-814e-452a-92e4-57d1b8a6c4a8
+ Image
+ image
+ ad9f0cf2-bda2-45d5-9ea1-a63cfc873fd3
+ Umbraco.MediaPicker3
+ false
+
+
+ 10
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ e2af1253-9ef7-4516-93e9-ff7cae743585
+ Content
+ content
+ Tab
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/imagerowsettings.config b/examples/starter-example/uSync/v9/ContentTypes/imagerowsettings.config
new file mode 100644
index 00000000..5ee468e1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/imagerowsettings.config
@@ -0,0 +1,28 @@
+
+
+
+ Image Row Settings
+ icon-settings color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Setting+Models
+
+ hideProperty
+ spacingProperties
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/latestarticlesrow.config b/examples/starter-example/uSync/v9/ContentTypes/latestarticlesrow.config
new file mode 100644
index 00000000..e43ee596
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/latestarticlesrow.config
@@ -0,0 +1,82 @@
+
+
+
+ Latest Articles Row
+ icon-bulleted-list color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Content+Models
+
+
+
+
+
+
+
+ 7ca21705-0c07-4822-8cf2-5126d98b9125
+ Article List
+ articleList
+ fd1e0da5-5606-4862-b679-5d0cf3a52a59
+ Umbraco.ContentPicker
+ true
+
+
+ 5
+ Content
+ Nothing
+ You need to choose an article list page
+
+ false
+
+
+ a1e08734-bb71-4a2e-a8e4-47d9cdc283c7
+ Page Size
+ pageSize
+ 2e6d3631-066e-44b8-aec4-96f09099b2b5
+ Umbraco.Integer
+ true
+
+
+ 10
+ Content
+ Nothing
+ You need to enter the page size
+
+ false
+
+
+ 6962d14c-37cc-43b4-98eb-996282650985
+ Show Pagination
+ showPagination
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 15
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 2873a2c5-19c2-476e-bd46-e4f29d632ecc
+ Content
+ content
+ Tab
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/latestarticlesrowsettings.config b/examples/starter-example/uSync/v9/ContentTypes/latestarticlesrowsettings.config
new file mode 100644
index 00000000..c81a0cf1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/latestarticlesrowsettings.config
@@ -0,0 +1,28 @@
+
+
+
+ Latest Articles Row Settings
+ icon-settings color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Setting+Models
+
+ hideProperty
+ spacingProperties
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/listpagesettings.config b/examples/starter-example/uSync/v9/ContentTypes/listpagesettings.config
new file mode 100644
index 00000000..2e3380cc
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/listpagesettings.config
@@ -0,0 +1,33 @@
+
+
+
+ List Page Settings
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+
+ 415d52cb-1d79-432e-add3-8160242b48bf
+ Visibility
+ visibility
+ Tab
+ 30
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/mainimagecontrols.config b/examples/starter-example/uSync/v9/ContentTypes/mainimagecontrols.config
new file mode 100644
index 00000000..acdd1565
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/mainimagecontrols.config
@@ -0,0 +1,50 @@
+
+
+
+ Main Image Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ cace72cf-401b-4eac-bd94-c5c3f99004bf
+ Main Image
+ mainImage
+ ad9f0cf2-bda2-45d5-9ea1-a63cfc873fd3
+ Umbraco.MediaPicker3
+ false
+
+
+ 15
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 3a1981e3-734d-4de0-a12f-37da9b368309
+ Content
+ content
+ Tab
+ 10
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/richtextrow.config b/examples/starter-example/uSync/v9/ContentTypes/richtextrow.config
new file mode 100644
index 00000000..2f6a0a6d
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/richtextrow.config
@@ -0,0 +1,50 @@
+
+
+
+ Rich Text Row
+ icon-notepad-alt color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Content+Models
+
+
+
+
+
+
+
+ be78bf17-4040-4fe2-b8cd-5d894b6d41fc
+ Content
+ content
+ ca90c950-0aff-4e72-b976-a30b1ac57dad
+ Umbraco.TinyMCE
+ false
+
+
+ 10
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ fc9ee4b9-108e-4510-8330-f56837b9ad12
+ Content
+ content
+ Tab
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/richtextrowsettings.config b/examples/starter-example/uSync/v9/ContentTypes/richtextrowsettings.config
new file mode 100644
index 00000000..41782b75
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/richtextrowsettings.config
@@ -0,0 +1,28 @@
+
+
+
+ Rich Text Row Settings
+ icon-settings color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Setting+Models
+
+ hideProperty
+ spacingProperties
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/search.config b/examples/starter-example/uSync/v9/ContentTypes/search.config
new file mode 100644
index 00000000..b3394ec8
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/search.config
@@ -0,0 +1,32 @@
+
+
+
+ Search
+ icon-search color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ headerControls
+ mainImageControls
+ sEOControls
+ visibilityControls
+
+ search
+
+ search
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/seocontrols.config b/examples/starter-example/uSync/v9/ContentTypes/seocontrols.config
new file mode 100644
index 00000000..164a0608
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/seocontrols.config
@@ -0,0 +1,82 @@
+
+
+
+ SEO Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ 85878342-59e5-4827-8447-edc34a11e87e
+ Meta Description
+ metaDescription
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 10
+ SEO
+ Nothing
+
+
+ false
+
+
+ 465b40d7-a107-454d-b0de-c74d7fea3bd1
+ Meta Keywords
+ metaKeywords
+ b6b73142-b9c1-4bf8-a16d-e1c23320b549
+ Umbraco.Tags
+ false
+
+
+ 15
+ SEO
+ Nothing
+
+
+ false
+
+
+ c901ac53-4a1d-4a05-8d06-c3188e5f0668
+ Meta Name
+ metaName
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 5
+ SEO
+ Nothing
+
+
+ false
+
+
+
+
+ 18ae646a-c4d9-49ac-b5ea-6ffcbb45d94f
+ SEO
+ seO
+ Tab
+ 25
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/spacingproperties.config b/examples/starter-example/uSync/v9/ContentTypes/spacingproperties.config
new file mode 100644
index 00000000..9e143222
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/spacingproperties.config
@@ -0,0 +1,162 @@
+
+
+
+ Spacing Properties
+ icon-defrag color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Compositions/Content+Blocks/Setting+Models
+
+
+
+
+
+
+
+ 0bc039b9-e31a-4bcc-b37e-5fb769bf697e
+ Margin Bottom
+ marginBottom
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 30
+ Padding
+ Nothing
+
+
+ false
+
+
+ dea3ad02-585a-4b7c-a3ca-d2b6dc6a3df5
+ Margin Left
+ marginLeft
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 35
+ Padding
+ Nothing
+
+
+ false
+
+
+ 98cc6dc6-caf8-4e87-af30-f8bfa3feb34d
+ Margin Right
+ marginRight
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 40
+ Padding
+ Nothing
+
+
+ false
+
+
+ 1f5604f9-d578-4982-b7c8-17a0ece4e859
+ Margin Top
+ marginTop
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 25
+ Padding
+ Nothing
+
+
+ false
+
+
+ 74f3c3e7-9dff-4720-b7e7-70e3e83f97a8
+ Padding Bottom
+ paddingBottom
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 10
+ Padding
+ Nothing
+
+
+ false
+
+
+ 7dfc3037-0b43-4f42-aad5-355d0ee7342f
+ Padding Left
+ paddingLeft
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 15
+ Padding
+ Nothing
+
+
+ false
+
+
+ 36211947-57e7-4488-9fe6-1e93ef0679fb
+ Padding Right
+ paddingRight
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 20
+ Padding
+ Nothing
+
+
+ false
+
+
+ df09eca0-41f1-4a9c-b5bf-8e81ea99ed45
+ Padding Top
+ paddingTop
+ a7590e7a-cad6-42e1-8ae9-106c717206fd
+ Umbraco.DropDown.Flexible
+ false
+
+
+ 5
+ Padding
+ Nothing
+
+
+ false
+
+
+
+
+ c809c885-c474-4a40-a273-57800fb7a374
+ Padding
+ padding
+ Tab
+ 120
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/videorow.config b/examples/starter-example/uSync/v9/ContentTypes/videorow.config
new file mode 100644
index 00000000..9fd0b56c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/videorow.config
@@ -0,0 +1,66 @@
+
+
+
+ Video Row
+ icon-video color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Content+Models
+
+
+
+
+
+
+
+ ebaacaf6-d137-4575-9c8a-c7454922477b
+ Caption
+ caption
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 20
+ Content
+ Nothing
+
+
+ false
+
+
+ db26c4d6-d620-42db-811f-3ec6fd2a9cd0
+ Video Url
+ videoUrl
+ 0cc0eba1-9960-42c9-bf9b-60e150b429ae
+ Umbraco.TextBox
+ false
+
+
+ 10
+ Content
+ Nothing
+
+
+ false
+
+
+
+
+ 6afb8a94-ba48-4c15-9d76-08ffe48e0950
+ Content
+ content
+ Tab
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/videorowsettings.config b/examples/starter-example/uSync/v9/ContentTypes/videorowsettings.config
new file mode 100644
index 00000000..c4ada8e7
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/videorowsettings.config
@@ -0,0 +1,28 @@
+
+
+
+ Video Row Settings
+ icon-settings color-indigo
+ folder.png
+
+ False
+ False
+ Nothing
+ true
+
+ False
+
+
+
+ Elements/Setting+Models
+
+ hideProperty
+ spacingProperties
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/visibilitycontrols.config b/examples/starter-example/uSync/v9/ContentTypes/visibilitycontrols.config
new file mode 100644
index 00000000..08f827a5
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/visibilitycontrols.config
@@ -0,0 +1,82 @@
+
+
+
+ Visibility Controls
+ icon-settings color-pink
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Compositions
+
+
+
+
+
+
+
+ 35ae0d0c-361d-4a53-835c-72b7e59a166e
+ Hide From Top Navigation
+ hideFromTopNavigation
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 5
+ Visibility
+ Nothing
+
+
+ false
+
+
+ 09404570-096b-428b-90cb-6ac55bc47fd2
+ Hide From XML Sitemap
+ hideFromXMLSitemap
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 15
+ Visibility
+ Nothing
+
+
+ false
+
+
+ 08b7cc39-05d0-4b97-896d-68c74c912dea
+ Hide From Search
+ umbracoNaviHide
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 10
+ Visibility
+ Nothing
+
+
+ false
+
+
+
+
+ 047f36ae-a8ca-43c0-a386-372bfa7144bd
+ Visibility
+ visibility
+ Tab
+ 30
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/ContentTypes/xmlsitemap.config b/examples/starter-example/uSync/v9/ContentTypes/xmlsitemap.config
new file mode 100644
index 00000000..6ed6c32e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/ContentTypes/xmlsitemap.config
@@ -0,0 +1,29 @@
+
+
+
+ XML Sitemap
+ icon-sitemap color-blue
+ folder.png
+
+ False
+ False
+ Nothing
+ false
+
+ False
+
+
+
+ Pages
+
+ visibilityControls
+
+ xMLSitemap
+
+ xMLSitemap
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/ApprovedColor.config b/examples/starter-example/uSync/v9/DataTypes/ApprovedColor.config
new file mode 100644
index 00000000..821eec11
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/ApprovedColor.config
@@ -0,0 +1,12 @@
+
+
+
+ Approved Color
+ Umbraco.ColorPicker
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/BlockListIconList.config b/examples/starter-example/uSync/v9/DataTypes/BlockListIconList.config
new file mode 100644
index 00000000..6c0b591a
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/BlockListIconList.config
@@ -0,0 +1,32 @@
+
+
+
+ [BlockList] Icon List
+ Umbraco.BlockList
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/BlockListMainContent.config b/examples/starter-example/uSync/v9/DataTypes/BlockListMainContent.config
new file mode 100644
index 00000000..cf715d53
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/BlockListMainContent.config
@@ -0,0 +1,92 @@
+
+
+
+ [BlockList] Main Content
+ Umbraco.BlockList
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/CheckboxList.config b/examples/starter-example/uSync/v9/DataTypes/CheckboxList.config
new file mode 100644
index 00000000..354bf208
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/CheckboxList.config
@@ -0,0 +1,11 @@
+
+
+
+ Checkbox list
+ Umbraco.CheckBoxList
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/ContentPicker.config b/examples/starter-example/uSync/v9/DataTypes/ContentPicker.config
new file mode 100644
index 00000000..50c6f646
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/ContentPicker.config
@@ -0,0 +1,13 @@
+
+
+
+ Content Picker
+ Umbraco.ContentPicker
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/DatePicker.config b/examples/starter-example/uSync/v9/DataTypes/DatePicker.config
new file mode 100644
index 00000000..3f9c5c20
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/DatePicker.config
@@ -0,0 +1,12 @@
+
+
+
+ Date Picker
+ Umbraco.DateTime
+ Date
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/DatePickerWithTime.config b/examples/starter-example/uSync/v9/DataTypes/DatePickerWithTime.config
new file mode 100644
index 00000000..2c289d17
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/DatePickerWithTime.config
@@ -0,0 +1,12 @@
+
+
+
+ Date Picker with time
+ Umbraco.DateTime
+ Date
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/Dropdown.config b/examples/starter-example/uSync/v9/DataTypes/Dropdown.config
new file mode 100644
index 00000000..673eb7a1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/Dropdown.config
@@ -0,0 +1,12 @@
+
+
+
+ Dropdown
+ Umbraco.DropDown.Flexible
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/DropdownMultiple.config b/examples/starter-example/uSync/v9/DataTypes/DropdownMultiple.config
new file mode 100644
index 00000000..e8a79984
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/DropdownMultiple.config
@@ -0,0 +1,12 @@
+
+
+
+ Dropdown multiple
+ Umbraco.DropDown.Flexible
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/DropdownSpacing.config b/examples/starter-example/uSync/v9/DataTypes/DropdownSpacing.config
new file mode 100644
index 00000000..21a83e0e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/DropdownSpacing.config
@@ -0,0 +1,41 @@
+
+
+
+ [Dropdown] Spacing
+ Umbraco.DropDown.Flexible
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/ImageCropper.config b/examples/starter-example/uSync/v9/DataTypes/ImageCropper.config
new file mode 100644
index 00000000..ccd91622
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/ImageCropper.config
@@ -0,0 +1,11 @@
+
+
+
+ Image Cropper
+ Umbraco.ImageCropper
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/ImageMediaPicker.config b/examples/starter-example/uSync/v9/DataTypes/ImageMediaPicker.config
new file mode 100644
index 00000000..e0b3db71
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/ImageMediaPicker.config
@@ -0,0 +1,20 @@
+
+
+
+ Image Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/LabelBigint.config b/examples/starter-example/uSync/v9/DataTypes/LabelBigint.config
new file mode 100644
index 00000000..909f50dc
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/LabelBigint.config
@@ -0,0 +1,11 @@
+
+
+
+ Label (bigint)
+ Umbraco.Label
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/LabelDatetime.config b/examples/starter-example/uSync/v9/DataTypes/LabelDatetime.config
new file mode 100644
index 00000000..7163ac97
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/LabelDatetime.config
@@ -0,0 +1,11 @@
+
+
+
+ Label (datetime)
+ Umbraco.Label
+ Date
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/LabelDecimal.config b/examples/starter-example/uSync/v9/DataTypes/LabelDecimal.config
new file mode 100644
index 00000000..045b4f55
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/LabelDecimal.config
@@ -0,0 +1,11 @@
+
+
+
+ Label (decimal)
+ Umbraco.Label
+ Decimal
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/LabelInteger.config b/examples/starter-example/uSync/v9/DataTypes/LabelInteger.config
new file mode 100644
index 00000000..19ea1dca
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/LabelInteger.config
@@ -0,0 +1,11 @@
+
+
+
+ Label (integer)
+ Umbraco.Label
+ Integer
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/LabelString.config b/examples/starter-example/uSync/v9/DataTypes/LabelString.config
new file mode 100644
index 00000000..af5067c9
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/LabelString.config
@@ -0,0 +1,11 @@
+
+
+
+ Label (string)
+ Umbraco.Label
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/LabelTime.config b/examples/starter-example/uSync/v9/DataTypes/LabelTime.config
new file mode 100644
index 00000000..df2170a3
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/LabelTime.config
@@ -0,0 +1,11 @@
+
+
+
+ Label (time)
+ Umbraco.Label
+ Date
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/ListViewContent.config b/examples/starter-example/uSync/v9/DataTypes/ListViewContent.config
new file mode 100644
index 00000000..821f787f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/ListViewContent.config
@@ -0,0 +1,54 @@
+
+
+
+ List View - Content
+ Umbraco.ListView
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/ListViewMedia.config b/examples/starter-example/uSync/v9/DataTypes/ListViewMedia.config
new file mode 100644
index 00000000..4fcba133
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/ListViewMedia.config
@@ -0,0 +1,54 @@
+
+
+
+ List View - Media
+ Umbraco.ListView
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/ListViewMembers.config b/examples/starter-example/uSync/v9/DataTypes/ListViewMembers.config
new file mode 100644
index 00000000..f23eb033
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/ListViewMembers.config
@@ -0,0 +1,60 @@
+
+
+
+ List View - Members
+ Umbraco.ListView
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MNTPAuthors.config b/examples/starter-example/uSync/v9/DataTypes/MNTPAuthors.config
new file mode 100644
index 00000000..44ec0d49
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MNTPAuthors.config
@@ -0,0 +1,32 @@
+
+
+
+ [MNTP] Authors
+ Umbraco.MultiNodeTreePicker
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MNTPCategories.config b/examples/starter-example/uSync/v9/DataTypes/MNTPCategories.config
new file mode 100644
index 00000000..e6195ccc
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MNTPCategories.config
@@ -0,0 +1,32 @@
+
+
+
+ [MNTP] Categories
+ Umbraco.MultiNodeTreePicker
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MediaPicker.config b/examples/starter-example/uSync/v9/DataTypes/MediaPicker.config
new file mode 100644
index 00000000..721575ac
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MediaPicker.config
@@ -0,0 +1,20 @@
+
+
+
+ Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MediaPickerLegacy.config b/examples/starter-example/uSync/v9/DataTypes/MediaPickerLegacy.config
new file mode 100644
index 00000000..d97a3035
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MediaPickerLegacy.config
@@ -0,0 +1,15 @@
+
+
+
+ Media Picker (legacy)
+ Umbraco.MediaPicker
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MediaPickerSVGImage.config b/examples/starter-example/uSync/v9/DataTypes/MediaPickerSVGImage.config
new file mode 100644
index 00000000..eb6adc0f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MediaPickerSVGImage.config
@@ -0,0 +1,20 @@
+
+
+
+ [MediaPicker] SVG Image
+ Umbraco.MediaPicker3
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MemberPicker.config b/examples/starter-example/uSync/v9/DataTypes/MemberPicker.config
new file mode 100644
index 00000000..260c1854
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MemberPicker.config
@@ -0,0 +1,9 @@
+
+
+
+ Member Picker
+ Umbraco.MemberPicker
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MultiURLPicker.config b/examples/starter-example/uSync/v9/DataTypes/MultiURLPicker.config
new file mode 100644
index 00000000..e00831f7
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MultiURLPicker.config
@@ -0,0 +1,15 @@
+
+
+
+ Multi URL Picker
+ Umbraco.MultiUrlPicker
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MultiUrlPickerSingleUrlPicker.config b/examples/starter-example/uSync/v9/DataTypes/MultiUrlPickerSingleUrlPicker.config
new file mode 100644
index 00000000..839e4d96
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MultiUrlPickerSingleUrlPicker.config
@@ -0,0 +1,15 @@
+
+
+
+ [MultiUrlPicker] Single Url Picker
+ Umbraco.MultiUrlPicker
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MultipleImageMediaPicker.config b/examples/starter-example/uSync/v9/DataTypes/MultipleImageMediaPicker.config
new file mode 100644
index 00000000..407c8afd
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MultipleImageMediaPicker.config
@@ -0,0 +1,20 @@
+
+
+
+ Multiple Image Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MultipleMediaPicker.config b/examples/starter-example/uSync/v9/DataTypes/MultipleMediaPicker.config
new file mode 100644
index 00000000..2a066f05
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MultipleMediaPicker.config
@@ -0,0 +1,20 @@
+
+
+
+ Multiple Media Picker
+ Umbraco.MediaPicker3
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/MultipleMediaPickerLegacy.config b/examples/starter-example/uSync/v9/DataTypes/MultipleMediaPickerLegacy.config
new file mode 100644
index 00000000..5b3573e8
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/MultipleMediaPickerLegacy.config
@@ -0,0 +1,15 @@
+
+
+
+ Multiple Media Picker (legacy)
+ Umbraco.MediaPicker
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/Numeric.config b/examples/starter-example/uSync/v9/DataTypes/Numeric.config
new file mode 100644
index 00000000..cd6d29bf
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/Numeric.config
@@ -0,0 +1,9 @@
+
+
+
+ Numeric
+ Umbraco.Integer
+ Integer
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/Radiobox.config b/examples/starter-example/uSync/v9/DataTypes/Radiobox.config
new file mode 100644
index 00000000..a166cb7c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/Radiobox.config
@@ -0,0 +1,11 @@
+
+
+
+ Radiobox
+ Umbraco.RadioButtonList
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/RichtextEditor.config b/examples/starter-example/uSync/v9/DataTypes/RichtextEditor.config
new file mode 100644
index 00000000..e4f8dd07
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/RichtextEditor.config
@@ -0,0 +1,40 @@
+
+
+
+ Richtext editor
+ Umbraco.TinyMCE
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/SingleUrlPicker.config b/examples/starter-example/uSync/v9/DataTypes/SingleUrlPicker.config
new file mode 100644
index 00000000..4dfc82d1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/SingleUrlPicker.config
@@ -0,0 +1,15 @@
+
+
+
+ Single Url Picker
+ Umbraco.MultiUrlPicker
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/SliderSpacing.config b/examples/starter-example/uSync/v9/DataTypes/SliderSpacing.config
new file mode 100644
index 00000000..2d9f0c69
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/SliderSpacing.config
@@ -0,0 +1,16 @@
+
+
+
+ [Slider] Spacing
+ Umbraco.Slider
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/Tags.config b/examples/starter-example/uSync/v9/DataTypes/Tags.config
new file mode 100644
index 00000000..ee5eb68a
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/Tags.config
@@ -0,0 +1,13 @@
+
+
+
+ Tags
+ Umbraco.Tags
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/Textarea.config b/examples/starter-example/uSync/v9/DataTypes/Textarea.config
new file mode 100644
index 00000000..a495b9e3
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/Textarea.config
@@ -0,0 +1,12 @@
+
+
+
+ Textarea
+ Umbraco.TextArea
+ Ntext
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/Textstring.config b/examples/starter-example/uSync/v9/DataTypes/Textstring.config
new file mode 100644
index 00000000..dc90bf0a
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/Textstring.config
@@ -0,0 +1,11 @@
+
+
+
+ Textstring
+ Umbraco.TextBox
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/Truefalse.config b/examples/starter-example/uSync/v9/DataTypes/Truefalse.config
new file mode 100644
index 00000000..a08bf8f5
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/Truefalse.config
@@ -0,0 +1,14 @@
+
+
+
+ True/false
+ Umbraco.TrueFalse
+ Integer
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/UploadArticle.config b/examples/starter-example/uSync/v9/DataTypes/UploadArticle.config
new file mode 100644
index 00000000..1d76dc88
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/UploadArticle.config
@@ -0,0 +1,24 @@
+
+
+
+ Upload Article
+ Umbraco.UploadField
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/UploadAudio.config b/examples/starter-example/uSync/v9/DataTypes/UploadAudio.config
new file mode 100644
index 00000000..66b66cad
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/UploadAudio.config
@@ -0,0 +1,28 @@
+
+
+
+ Upload Audio
+ Umbraco.UploadField
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/UploadFile.config b/examples/starter-example/uSync/v9/DataTypes/UploadFile.config
new file mode 100644
index 00000000..bdd8d013
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/UploadFile.config
@@ -0,0 +1,11 @@
+
+
+
+ Upload File
+ Umbraco.UploadField
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/UploadVectorGraphics.config b/examples/starter-example/uSync/v9/DataTypes/UploadVectorGraphics.config
new file mode 100644
index 00000000..6088f331
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/UploadVectorGraphics.config
@@ -0,0 +1,16 @@
+
+
+
+ Upload Vector Graphics
+ Umbraco.UploadField
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/DataTypes/UploadVideo.config b/examples/starter-example/uSync/v9/DataTypes/UploadVideo.config
new file mode 100644
index 00000000..fb8f0180
--- /dev/null
+++ b/examples/starter-example/uSync/v9/DataTypes/UploadVideo.config
@@ -0,0 +1,24 @@
+
+
+
+ Upload Video
+ Umbraco.UploadField
+ Nvarchar
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/article.by.config b/examples/starter-example/uSync/v9/Dictionary/article.by.config
new file mode 100644
index 00000000..6a2c773a
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/article.by.config
@@ -0,0 +1,7 @@
+
+
+
+
+ by
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/article.on.config b/examples/starter-example/uSync/v9/Dictionary/article.on.config
new file mode 100644
index 00000000..1776ccb6
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/article.on.config
@@ -0,0 +1,7 @@
+
+
+
+
+ on
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/article.posted.config b/examples/starter-example/uSync/v9/Dictionary/article.posted.config
new file mode 100644
index 00000000..6065e983
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/article.posted.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Posted
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/articlelist.viewall.config b/examples/starter-example/uSync/v9/Dictionary/articlelist.viewall.config
new file mode 100644
index 00000000..2ff76243
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/articlelist.viewall.config
@@ -0,0 +1,7 @@
+
+
+
+
+ View all posts
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/author.readmore.config b/examples/starter-example/uSync/v9/Dictionary/author.readmore.config
new file mode 100644
index 00000000..10f631e8
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/author.readmore.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Read More
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/contactform.email.config b/examples/starter-example/uSync/v9/Dictionary/contactform.email.config
new file mode 100644
index 00000000..d7da474f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/contactform.email.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Email Address
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/contactform.message.config b/examples/starter-example/uSync/v9/Dictionary/contactform.message.config
new file mode 100644
index 00000000..5c4bb2af
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/contactform.message.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Message
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/contactform.name.config b/examples/starter-example/uSync/v9/Dictionary/contactform.name.config
new file mode 100644
index 00000000..1d8be26d
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/contactform.name.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Name
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/contactform.send.config b/examples/starter-example/uSync/v9/Dictionary/contactform.send.config
new file mode 100644
index 00000000..06a2050e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/contactform.send.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Send
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/footer.copyrightstatement.config b/examples/starter-example/uSync/v9/Dictionary/footer.copyrightstatement.config
new file mode 100644
index 00000000..0704ac5f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/footer.copyrightstatement.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Clean Starter Kit
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/footer.copyrighttitle.config b/examples/starter-example/uSync/v9/Dictionary/footer.copyrighttitle.config
new file mode 100644
index 00000000..f616535e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/footer.copyrighttitle.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Copyright
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/navigation.menutitle.config b/examples/starter-example/uSync/v9/Dictionary/navigation.menutitle.config
new file mode 100644
index 00000000..64b13407
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/navigation.menutitle.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Menu
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/navigation.sitename.config b/examples/starter-example/uSync/v9/Dictionary/navigation.sitename.config
new file mode 100644
index 00000000..99e944e4
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/navigation.sitename.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Clean Starter Kit
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/paging.next.config b/examples/starter-example/uSync/v9/Dictionary/paging.next.config
new file mode 100644
index 00000000..f3ba7634
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/paging.next.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Next
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/paging.of.config b/examples/starter-example/uSync/v9/Dictionary/paging.of.config
new file mode 100644
index 00000000..80d9504c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/paging.of.config
@@ -0,0 +1,7 @@
+
+
+
+
+ of
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/paging.page.config b/examples/starter-example/uSync/v9/Dictionary/paging.page.config
new file mode 100644
index 00000000..82e0a1f0
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/paging.page.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Page
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/paging.previous.config b/examples/starter-example/uSync/v9/Dictionary/paging.previous.config
new file mode 100644
index 00000000..fc5ec21c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/paging.previous.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Prev
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/search.placeholder.config b/examples/starter-example/uSync/v9/Dictionary/search.placeholder.config
new file mode 100644
index 00000000..cca4809f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/search.placeholder.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Search...
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/search.results.config b/examples/starter-example/uSync/v9/Dictionary/search.results.config
new file mode 100644
index 00000000..d305fcbc
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/search.results.config
@@ -0,0 +1,7 @@
+
+
+
+
+ <p>We found <strong>{0}</strong> results when searching for <strong>{1}</strong></p>
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Dictionary/search.searchbutton.config b/examples/starter-example/uSync/v9/Dictionary/search.searchbutton.config
new file mode 100644
index 00000000..9425eab4
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Dictionary/search.searchbutton.config
@@ -0,0 +1,7 @@
+
+
+
+
+ Search
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Languages/en-us.config b/examples/starter-example/uSync/v9/Languages/en-us.config
new file mode 100644
index 00000000..6f1a74db
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Languages/en-us.config
@@ -0,0 +1,7 @@
+
+
+ English (United States)
+ en-US
+ false
+ true
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/24-days-people-at-codegarden.config b/examples/starter-example/uSync/v9/Media/24-days-people-at-codegarden.config
new file mode 100644
index 00000000..63209ee1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/24-days-people-at-codegarden.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/daysPeopleAtCodegarden
+ false
+ Image
+ 2021-10-09T23:24:25
+
+ 13
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/authors.config b/examples/starter-example/uSync/v9/Media/authors.config
new file mode 100644
index 00000000..952aefb4
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/authors.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/Authors
+ false
+ Image
+ 2023-08-15T22:58:38
+
+ 19
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/authors_xvnd3kvj.config b/examples/starter-example/uSync/v9/Media/authors_xvnd3kvj.config
new file mode 100644
index 00000000..ebb2fdd5
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/authors_xvnd3kvj.config
@@ -0,0 +1,13 @@
+
+
+
+
+ /Authors
+ false
+ Folder
+ 2023-08-15T23:20:29
+
+ 2
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/bluetooth-white-keyboard.config b/examples/starter-example/uSync/v9/Media/bluetooth-white-keyboard.config
new file mode 100644
index 00000000..c011b87a
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/bluetooth-white-keyboard.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/BluetoothWhiteKeyboard
+ false
+ Image
+ 2021-10-09T23:24:20
+
+ 1
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/candid-contributions.config b/examples/starter-example/uSync/v9/Media/candid-contributions.config
new file mode 100644
index 00000000..36ee1c9f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/candid-contributions.config
@@ -0,0 +1,23 @@
+
+
+
+ Sample Images
+ /SampleImages/CandidContributions
+ false
+ Image
+ 2023-08-04T06:31:07
+
+ 16
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/cc-paypal.config b/examples/starter-example/uSync/v9/Media/cc-paypal.config
new file mode 100644
index 00000000..33355749
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/cc-paypal.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/CcPaypal
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T11:01:40
+
+ 6
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/chairs-lamps.config b/examples/starter-example/uSync/v9/Media/chairs-lamps.config
new file mode 100644
index 00000000..fd27baaa
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/chairs-lamps.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/ChairsLamps
+ false
+ Image
+ 2021-10-09T23:24:19
+
+ 0
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/codegarden-keynote.config b/examples/starter-example/uSync/v9/Media/codegarden-keynote.config
new file mode 100644
index 00000000..a6aa9553
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/codegarden-keynote.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/CodegardenKeynote
+ false
+ Image
+ 2021-10-09T23:24:23
+
+ 8
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/community-front-row.config b/examples/starter-example/uSync/v9/Media/community-front-row.config
new file mode 100644
index 00000000..ae975e16
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/community-front-row.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/CommunityFrontRow
+ false
+ Image
+ 2021-10-09T23:24:21
+
+ 4
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/desktop-notebook-glasses.config b/examples/starter-example/uSync/v9/Media/desktop-notebook-glasses.config
new file mode 100644
index 00000000..9aa4e3df
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/desktop-notebook-glasses.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/DesktopNotebookGlasses
+ false
+ Image
+ 2021-10-09T23:24:25
+
+ 14
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/diary.config b/examples/starter-example/uSync/v9/Media/diary.config
new file mode 100644
index 00000000..97f51c61
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/diary.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/Diary
+ false
+ Image
+ 2023-08-15T22:58:39
+
+ 20
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/discord.config b/examples/starter-example/uSync/v9/Media/discord.config
new file mode 100644
index 00000000..6263d9de
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/discord.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/Discord
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T11:01:31
+
+ 0
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/first-timers-at-codegarden.config b/examples/starter-example/uSync/v9/Media/first-timers-at-codegarden.config
new file mode 100644
index 00000000..a82ea6dc
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/first-timers-at-codegarden.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/FirstTimersAtCodegarden
+ false
+ Image
+ 2021-10-09T23:24:24
+
+ 12
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/friendly-chair.config b/examples/starter-example/uSync/v9/Media/friendly-chair.config
new file mode 100644
index 00000000..0ace1746
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/friendly-chair.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/FriendlyChair
+ false
+ Image
+ 2021-10-09T23:24:23
+
+ 9
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/front-row-audience-smiles.config b/examples/starter-example/uSync/v9/Media/front-row-audience-smiles.config
new file mode 100644
index 00000000..0ce467ce
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/front-row-audience-smiles.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/FrontRowAudienceSmiles
+ false
+ Image
+ 2021-10-09T23:24:24
+
+ 11
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/github-alt.config b/examples/starter-example/uSync/v9/Media/github-alt.config
new file mode 100644
index 00000000..469509df
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/github-alt.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/GithubAlt
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T11:00:56
+
+ 1
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/github.config b/examples/starter-example/uSync/v9/Media/github.config
new file mode 100644
index 00000000..67f2afc8
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/github.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/Github
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T11:00:55
+
+ 2
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/mastodon.config b/examples/starter-example/uSync/v9/Media/mastodon.config
new file mode 100644
index 00000000..a2fd184f
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/mastodon.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/Mastodon
+ false
+ Image
+ 2023-12-14T14:48:08
+
+ 21
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/mastodon_jcaplvty.config b/examples/starter-example/uSync/v9/Media/mastodon_jcaplvty.config
new file mode 100644
index 00000000..1cbba4aa
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/mastodon_jcaplvty.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/Mastodon
+ false
+ umbracoMediaVectorGraphics
+ 2023-12-14T15:08:35
+
+ 10
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/meetup-organizers-at-codegarden.config b/examples/starter-example/uSync/v9/Media/meetup-organizers-at-codegarden.config
new file mode 100644
index 00000000..936a2f58
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/meetup-organizers-at-codegarden.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/MeetupOrganizersAtCodegarden
+ false
+ Image
+ 2021-10-09T23:24:22
+
+ 6
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/package-manifest.config b/examples/starter-example/uSync/v9/Media/package-manifest.config
new file mode 100644
index 00000000..1bee1b38
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/package-manifest.config
@@ -0,0 +1,23 @@
+
+
+
+ Sample Images
+ /SampleImages/PackageManifest
+ false
+ Image
+ 2023-08-04T06:32:59
+
+ 17
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/paypal.config b/examples/starter-example/uSync/v9/Media/paypal.config
new file mode 100644
index 00000000..54abeffa
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/paypal.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/Paypal
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T11:00:18
+
+ 7
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/phone-pen-binder.config b/examples/starter-example/uSync/v9/Media/phone-pen-binder.config
new file mode 100644
index 00000000..e3f5af35
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/phone-pen-binder.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/PhonePenBinder
+ false
+ Image
+ 2021-10-09T23:24:20
+
+ 2
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/podcast-headphones-coffee.config b/examples/starter-example/uSync/v9/Media/podcast-headphones-coffee.config
new file mode 100644
index 00000000..6276a445
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/podcast-headphones-coffee.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/PodcastHeadphonesCoffee
+ false
+ Image
+ 2023-08-04T06:18:30
+
+ 15
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/profile-pic-2023.config b/examples/starter-example/uSync/v9/Media/profile-pic-2023.config
new file mode 100644
index 00000000..cf206f9a
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/profile-pic-2023.config
@@ -0,0 +1,26 @@
+
+
+
+ Authors
+ /Authors/ProfilePic2023
+ false
+ Image
+ 2023-08-15T23:20:39
+
+ 0
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/sample-images.config b/examples/starter-example/uSync/v9/Media/sample-images.config
new file mode 100644
index 00000000..910cbfa1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/sample-images.config
@@ -0,0 +1,13 @@
+
+
+
+
+ /SampleImages
+ false
+ Folder
+ 2021-10-09T23:24:19
+
+ 0
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/say-cheese.config b/examples/starter-example/uSync/v9/Media/say-cheese.config
new file mode 100644
index 00000000..dda6cc8c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/say-cheese.config
@@ -0,0 +1,27 @@
+
+
+
+ Sample Images
+ /SampleImages/SayCheese
+ false
+ Image
+ 2021-10-09T23:24:24
+
+ 10
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/share-nodes.config b/examples/starter-example/uSync/v9/Media/share-nodes.config
new file mode 100644
index 00000000..78f8c0c3
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/share-nodes.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/ShareNodes
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T11:11:04
+
+ 8
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/skrift-at-codegarden.config b/examples/starter-example/uSync/v9/Media/skrift-at-codegarden.config
new file mode 100644
index 00000000..eed09abd
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/skrift-at-codegarden.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/SkriftAtCodegarden
+ false
+ Image
+ 2021-10-09T23:24:21
+
+ 5
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/social-icons.config b/examples/starter-example/uSync/v9/Media/social-icons.config
new file mode 100644
index 00000000..993fdfe1
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/social-icons.config
@@ -0,0 +1,13 @@
+
+
+
+
+ /SocialIcons
+ false
+ Folder
+ 2023-07-29T11:02:30
+
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/square-github.config b/examples/starter-example/uSync/v9/Media/square-github.config
new file mode 100644
index 00000000..d3987a05
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/square-github.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/SquareGithub
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T10:59:51
+
+ 3
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/square-twitter.config b/examples/starter-example/uSync/v9/Media/square-twitter.config
new file mode 100644
index 00000000..370354a6
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/square-twitter.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/SquareTwitter
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T10:59:30
+
+ 4
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/triangle-table-chairs.config b/examples/starter-example/uSync/v9/Media/triangle-table-chairs.config
new file mode 100644
index 00000000..e498e975
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/triangle-table-chairs.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/TriangleTableChairs
+ false
+ Image
+ 2021-10-09T23:24:21
+
+ 3
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/tutorials.config b/examples/starter-example/uSync/v9/Media/tutorials.config
new file mode 100644
index 00000000..aa0b698e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/tutorials.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/Tutorials
+ false
+ Image
+ 2023-08-04T06:50:20
+
+ 18
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/twitter.config b/examples/starter-example/uSync/v9/Media/twitter.config
new file mode 100644
index 00000000..b7d6713c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/twitter.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/Twitter
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T10:59:17
+
+ 5
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/umbraco.config b/examples/starter-example/uSync/v9/Media/umbraco.config
new file mode 100644
index 00000000..d6f96a3c
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/umbraco.config
@@ -0,0 +1,17 @@
+
+
+
+ Social Icons
+ /SocialIcons/Umbraco
+ false
+ umbracoMediaVectorGraphics
+ 2023-07-29T10:59:19
+
+ 9
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/Media/umbracoffee-codegarden.config b/examples/starter-example/uSync/v9/Media/umbracoffee-codegarden.config
new file mode 100644
index 00000000..b02e563e
--- /dev/null
+++ b/examples/starter-example/uSync/v9/Media/umbracoffee-codegarden.config
@@ -0,0 +1,22 @@
+
+
+
+ Sample Images
+ /SampleImages/UmbracoffeeCodegarden
+ false
+ Image
+ 2021-10-09T23:24:22
+
+ 7
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MediaTypes/file.config b/examples/starter-example/uSync/v9/MediaTypes/file.config
new file mode 100644
index 00000000..425dce36
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MediaTypes/file.config
@@ -0,0 +1,71 @@
+
+
+
+ File
+ icon-document
+ icon-document
+
+ True
+ False
+ Nothing
+ false
+
+
+
+
+ 0000001a-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ File
+
+
+ false
+
+
+ 00000019-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ File
+
+
+ false
+
+
+ 00000018-0000-0000-0000-000000000000
+ File
+ umbracoFile
+ 84c6b441-31df-4ffe-b67e-67d5bc3ae65a
+ Umbraco.UploadField
+ true
+
+
+ 0
+ File
+
+
+ false
+
+
+
+
+
+ 50899f9c-023a-4466-b623-aba9049885fe
+ File
+ file
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MediaTypes/folder.config b/examples/starter-example/uSync/v9/MediaTypes/folder.config
new file mode 100644
index 00000000..85653210
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MediaTypes/folder.config
@@ -0,0 +1,25 @@
+
+
+
+ Folder
+ icon-folder
+ icon-folder
+
+ True
+ False
+ Nothing
+ false
+
+
+
+
+ Folder
+ Image
+ File
+ umbracoMediaVideo
+ umbracoMediaAudio
+ umbracoMediaArticle
+ umbracoMediaVectorGraphics
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MediaTypes/image.config b/examples/starter-example/uSync/v9/MediaTypes/image.config
new file mode 100644
index 00000000..d59e9125
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MediaTypes/image.config
@@ -0,0 +1,116 @@
+
+
+
+ Image
+ icon-picture
+ icon-picture
+
+ True
+ False
+ Nothing
+ false
+
+
+
+
+ ff8e58ce-16f1-411a-94e3-03e0e0f23dcc
+ Alt Text
+ altText
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 5
+ Image
+
+
+ false
+
+
+ 00000009-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 3
+ Image
+
+
+ false
+
+
+ 0000000a-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 4
+ Image
+
+
+ false
+
+
+ 00000006-0000-0000-0000-000000000000
+ Image
+ umbracoFile
+ 1df9f033-e6d4-451f-b8d2-e0cbc50a836f
+ Umbraco.ImageCropper
+ true
+
+
+ 0
+ Image
+
+
+ false
+
+
+ 00000008-0000-0000-0000-000000000000
+ Height
+ umbracoHeight
+ 8e7f995c-bd81-4627-9932-c40e568ec788
+ Umbraco.Label
+ false
+
+
+ 2
+ Image
+
+
+ false
+
+
+ 00000007-0000-0000-0000-000000000000
+ Width
+ umbracoWidth
+ 8e7f995c-bd81-4627-9932-c40e568ec788
+ Umbraco.Label
+ false
+
+
+ 1
+ Image
+
+
+ false
+
+
+
+
+
+ 79ed4d07-254a-42cf-8fa9-ebe1c116a596
+ Image
+ image
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MediaTypes/umbracomediaarticle.config b/examples/starter-example/uSync/v9/MediaTypes/umbracomediaarticle.config
new file mode 100644
index 00000000..11f2f7af
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MediaTypes/umbracomediaarticle.config
@@ -0,0 +1,71 @@
+
+
+
+ Article
+ icon-article
+ icon-article
+
+ True
+ False
+ Nothing
+ false
+
+
+
+
+ 00000030-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Article
+
+
+ false
+
+
+ 0000002f-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Article
+
+
+ false
+
+
+ 0000002e-0000-0000-0000-000000000000
+ Article
+ umbracoFile
+ bc1e266c-dac4-4164-bf08-8a1ec6a7143d
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Article
+
+
+ false
+
+
+
+
+
+ 9af3bd65-f687-4453-9518-5f180d1898ec
+ Article
+ article
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MediaTypes/umbracomediaaudio.config b/examples/starter-example/uSync/v9/MediaTypes/umbracomediaaudio.config
new file mode 100644
index 00000000..3b241c31
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MediaTypes/umbracomediaaudio.config
@@ -0,0 +1,71 @@
+
+
+
+ Audio
+ icon-sound-waves
+ icon-sound-waves
+
+ True
+ False
+ Nothing
+ false
+
+
+
+
+ 0000002d-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Audio
+
+
+ false
+
+
+ 0000002c-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Audio
+
+
+ false
+
+
+ 0000002b-0000-0000-0000-000000000000
+ Audio
+ umbracoFile
+ 8f430dd6-4e96-447e-9dc0-cb552c8cd1f3
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Audio
+
+
+ false
+
+
+
+
+
+ 335fb495-0a87-4e82-b902-30eb367b767c
+ Audio
+ audio
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MediaTypes/umbracomediavectorgraphics.config b/examples/starter-example/uSync/v9/MediaTypes/umbracomediavectorgraphics.config
new file mode 100644
index 00000000..3ebd344b
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MediaTypes/umbracomediavectorgraphics.config
@@ -0,0 +1,71 @@
+
+
+
+ Vector Graphics (SVG)
+ icon-picture
+ icon-picture
+
+ True
+ False
+ Nothing
+ false
+
+
+
+
+ 00000033-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Vector Graphics
+
+
+ false
+
+
+ 00000032-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Vector Graphics
+
+
+ false
+
+
+ 00000031-0000-0000-0000-000000000000
+ Vector Graphics
+ umbracoFile
+ 215cb418-2153-4429-9aef-8c0f0041191b
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Vector Graphics
+
+
+ false
+
+
+
+
+
+ f199b4d7-9e84-439f-8531-f87d9af37711
+ Vector Graphics
+ vectorGraphics
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MediaTypes/umbracomediavideo.config b/examples/starter-example/uSync/v9/MediaTypes/umbracomediavideo.config
new file mode 100644
index 00000000..0dd0ffca
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MediaTypes/umbracomediavideo.config
@@ -0,0 +1,71 @@
+
+
+
+ Video
+ icon-video
+ icon-video
+
+ True
+ False
+ Nothing
+ false
+
+
+
+
+ 0000002a-0000-0000-0000-000000000000
+ Size
+ umbracoBytes
+ 930861bf-e262-4ead-a704-f99453565708
+ Umbraco.Label
+ false
+
+
+ 2
+ Video
+
+
+ false
+
+
+ 00000029-0000-0000-0000-000000000000
+ Type
+ umbracoExtension
+ f0bc4bfb-b499-40d6-ba86-058885a5178c
+ Umbraco.Label
+ false
+
+
+ 1
+ Video
+
+
+ false
+
+
+ 00000028-0000-0000-0000-000000000000
+ Video
+ umbracoFile
+ 70575fe7-9812-4396-bbe1-c81a76db71b5
+ Umbraco.UploadField
+ true
+
+
+ 0
+ Video
+
+
+ false
+
+
+
+
+
+ 2f0a61b6-cf92-4ff4-b437-751ab35eb254
+ Video
+ video
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/MemberTypes/member.config b/examples/starter-example/uSync/v9/MemberTypes/member.config
new file mode 100644
index 00000000..d3cb3329
--- /dev/null
+++ b/examples/starter-example/uSync/v9/MemberTypes/member.config
@@ -0,0 +1,152 @@
+
+
+
+ Member
+ icon-user
+ icon-user
+
+ False
+ False
+ Nothing
+ false
+
+
+
+
+ e79dccfb-0000-0000-0000-000000000000
+ Is Approved
+ umbracoMemberApproved
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 2
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+ 2a280588-0000-0000-0000-000000000000
+ Comments
+ umbracoMemberComments
+ c6bac0dd-4ab9-45b1-8e30-e4b619ee5da3
+ Umbraco.TextArea
+ false
+
+
+ 0
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+ 0f2ea539-0000-0000-0000-000000000000
+ Failed Password Attempts
+ umbracoMemberFailedPasswordAttempts
+ 8e7f995c-bd81-4627-9932-c40e568ec788
+ Umbraco.Label
+ false
+
+
+ 1
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+ 3a7bc3c6-0000-0000-0000-000000000000
+ Last Lockout Date
+ umbracoMemberLastLockoutDate
+ 0e9794eb-f9b5-4f20-a788-93acd233a7e4
+ Umbraco.Label
+ false
+
+
+ 4
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+ b5e309ba-0000-0000-0000-000000000000
+ Last Login Date
+ umbracoMemberLastLogin
+ 0e9794eb-f9b5-4f20-a788-93acd233a7e4
+ Umbraco.Label
+ false
+
+
+ 5
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+ ded56d3f-0000-0000-0000-000000000000
+ Last Password Change Date
+ umbracoMemberLastPasswordChangeDate
+ 0e9794eb-f9b5-4f20-a788-93acd233a7e4
+ Umbraco.Label
+ false
+
+
+ 6
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+ c36093d2-0000-0000-0000-000000000000
+ Is Locked Out
+ umbracoMemberLockedOut
+ 92897bc6-a5f3-4ffe-ae27-f2e7e33dda49
+ Umbraco.TrueFalse
+ false
+
+
+ 3
+ Membership
+ false
+ false
+ false
+
+
+ false
+
+
+
+
+
+ 0756729d-d665-46e3-b84a-37aceaa614f8
+ Membership
+ membership
+ Group
+ 1
+
+
+
\ No newline at end of file
diff --git a/examples/starter-example/uSync/v9/usync.config b/examples/starter-example/uSync/v9/usync.config
new file mode 100644
index 00000000..14fc189d
--- /dev/null
+++ b/examples/starter-example/uSync/v9/usync.config
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/examples/starter-example/umbraco/Data/starter-examples.sqlite b/examples/starter-example/umbraco/Data/starter-examples.sqlite
new file mode 100644
index 00000000..9a472209
Binary files /dev/null and b/examples/starter-example/umbraco/Data/starter-examples.sqlite differ
diff --git a/examples/starter-example/wwwroot/favicon.ico b/examples/starter-example/wwwroot/favicon.ico
new file mode 100644
index 00000000..c0749ddf
Binary files /dev/null and b/examples/starter-example/wwwroot/favicon.ico differ
diff --git a/src/Nikcio.UHeadless.IntegrationTests.TestProject/Nikcio.UHeadless.IntegrationTests.TestProject.csproj b/src/Nikcio.UHeadless.IntegrationTests.TestProject/Nikcio.UHeadless.IntegrationTests.TestProject.csproj
index aded6e9e..8c592cc2 100644
--- a/src/Nikcio.UHeadless.IntegrationTests.TestProject/Nikcio.UHeadless.IntegrationTests.TestProject.csproj
+++ b/src/Nikcio.UHeadless.IntegrationTests.TestProject/Nikcio.UHeadless.IntegrationTests.TestProject.csproj
@@ -47,8 +47,4 @@
-
-
-
-
diff --git a/src/Nikcio.UHeadless.IntegrationTests.TestProject/Properties/launchSettings.json b/src/Nikcio.UHeadless.IntegrationTests.TestProject/Properties/launchSettings.json
index b6754479..1bf22b82 100644
--- a/src/Nikcio.UHeadless.IntegrationTests.TestProject/Properties/launchSettings.json
+++ b/src/Nikcio.UHeadless.IntegrationTests.TestProject/Properties/launchSettings.json
@@ -1,22 +1,15 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
- "iisSettings": {
- "windowsAuthentication": false,
- "anonymousAuthentication": true,
- "iisExpress": {
- "applicationUrl": "http://localhost:51493",
- "sslPort": 44321
- }
- },
"profiles": {
"Umbraco.Web.UI": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
+ "launchUrl": "umbraco",
"applicationUrl": "https://localhost:44321;http://localhost:51493",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
- }
+ }
}
}
}
diff --git a/src/Nikcio.UHeadless.IntegrationTests.TestProject/appsettings.json b/src/Nikcio.UHeadless.IntegrationTests.TestProject/appsettings.json
index 483a7516..2b4284a3 100644
--- a/src/Nikcio.UHeadless.IntegrationTests.TestProject/appsettings.json
+++ b/src/Nikcio.UHeadless.IntegrationTests.TestProject/appsettings.json
@@ -26,7 +26,6 @@
"Global": {
"Id": "73924f79-1a6c-4830-84c3-623e78abb019",
"SanitizeTinyMce": true,
- "MainDomLock": "SqlMainDomLock",
"UseHttps": true,
"InstallMissingDatabase": true
},
diff --git a/src/Nikcio.UHeadless.IntegrationTests.TestProject/umbraco/Data/Default-Tests.sqlite b/src/Nikcio.UHeadless.IntegrationTests.TestProject/umbraco/Data/Default-Tests.sqlite
index 0db3046c..7c8467b9 100644
Binary files a/src/Nikcio.UHeadless.IntegrationTests.TestProject/umbraco/Data/Default-Tests.sqlite and b/src/Nikcio.UHeadless.IntegrationTests.TestProject/umbraco/Data/Default-Tests.sqlite differ
diff --git a/src/Nikcio.UHeadless.IntegrationTests/Nikcio.UHeadless.IntegrationTests.csproj b/src/Nikcio.UHeadless.IntegrationTests/Nikcio.UHeadless.IntegrationTests.csproj
index ad737666..7db514c8 100644
--- a/src/Nikcio.UHeadless.IntegrationTests/Nikcio.UHeadless.IntegrationTests.csproj
+++ b/src/Nikcio.UHeadless.IntegrationTests/Nikcio.UHeadless.IntegrationTests.csproj
@@ -9,15 +9,6 @@
true
-
-
-
-
-
-
-
-
-
diff --git a/src/Nikcio.UHeadless/Defaults/Authorization/Bootstrap.cs b/src/Nikcio.UHeadless/Defaults/Authorization/Bootstrap.cs
index 68575ee7..c5c80b18 100644
--- a/src/Nikcio.UHeadless/Defaults/Authorization/Bootstrap.cs
+++ b/src/Nikcio.UHeadless/Defaults/Authorization/Bootstrap.cs
@@ -1,4 +1,5 @@
using System.Text;
+using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Primitives;
@@ -32,8 +33,7 @@ public static UHeadlessOptions AddAuthInternal(this UHeadlessOptions options)
}
else
{
- // We only want to authenticate via the header
- context.Token = "Invalid";
+ context.NoResult();
}
return Task.CompletedTask;
diff --git a/src/Nikcio.UHeadless/TypeModules/UmbracoStartedHandler.cs b/src/Nikcio.UHeadless/TypeModules/UmbracoStartedHandler.cs
new file mode 100644
index 00000000..a8b229f9
--- /dev/null
+++ b/src/Nikcio.UHeadless/TypeModules/UmbracoStartedHandler.cs
@@ -0,0 +1,27 @@
+using Umbraco.Cms.Core.Events;
+using Umbraco.Cms.Core.Notifications;
+
+namespace Nikcio.UHeadless.TypeModules;
+
+///
+/// Triggers GraphQL schema rebuild when Umbraco started
+///
+internal class UmbracoStartedHandler : INotificationAsyncHandler
+{
+ private readonly UmbracoTypeModule _contentTypeModule;
+
+ public UmbracoStartedHandler(UmbracoTypeModule contentTypeModule)
+ {
+ _contentTypeModule = contentTypeModule;
+ }
+
+ public Task HandleAsync(UmbracoApplicationStartedNotification notification, CancellationToken cancellationToken)
+ {
+ if (!_contentTypeModule.IsInitialized)
+ {
+ _contentTypeModule.OnTypesChanged(EventArgs.Empty);
+ }
+
+ return Task.CompletedTask;
+ }
+}
diff --git a/src/Nikcio.UHeadless/TypeModules/UmbracoTypeModule.cs b/src/Nikcio.UHeadless/TypeModules/UmbracoTypeModule.cs
index 3936f7c9..35619519 100644
--- a/src/Nikcio.UHeadless/TypeModules/UmbracoTypeModule.cs
+++ b/src/Nikcio.UHeadless/TypeModules/UmbracoTypeModule.cs
@@ -6,6 +6,7 @@
using Nikcio.UHeadless.Common.Properties;
using Nikcio.UHeadless.Properties;
using Nikcio.UHeadless.Reflection;
+using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.Blocks;
using Umbraco.Cms.Core.Models.PublishedContent;
@@ -29,20 +30,29 @@ internal class UmbracoTypeModule : ITypeModule
private readonly IMemberTypeService _memberTypeService;
+ private readonly IRuntimeState _runtimeState;
+
///
public event EventHandler? TypesChanged;
+ ///
+ /// Indicates if the module is initialized with types from Umbraco
+ ///
+ internal bool IsInitialized { get; private set; }
+
///
public UmbracoTypeModule(
IPropertyMap propertyMap,
IContentTypeService contentTypeService,
IMediaTypeService mediaTypeService,
- IMemberTypeService memberTypeService)
+ IMemberTypeService memberTypeService,
+ IRuntimeState runtimeState)
{
_propertyMap = propertyMap;
_contentTypeService = contentTypeService;
_mediaTypeService = mediaTypeService;
_memberTypeService = memberTypeService;
+ _runtimeState = runtimeState;
}
///
@@ -51,6 +61,13 @@ public UmbracoTypeModule(
///
private List GetContentTypes()
{
+ if (_runtimeState.Level != RuntimeLevel.Run)
+ {
+ return [];
+ }
+
+ IsInitialized = true;
+
return _contentTypeService.GetAll()
.Cast()
.Concat(_mediaTypeService.GetAll())
@@ -131,20 +148,29 @@ private void GenerateTypes(out List types, out List contentTypes = GetContentTypes();
+ List allContentTypes = GetContentTypes();
+ List interfacedContentTypes = [];
+
+ var interfaceTypeNames = new HashSet(StringComparer.Ordinal);
- foreach (IContentTypeComposition? contentType in contentTypes)
+ foreach (IContentTypeComposition? contentType in allContentTypes)
{
- InterfaceTypeDefinition interfaceTypeDefinition = CreateInterfaceTypeDefinition(contentType);
+ InterfaceTypeDefinition? interfaceTypeDefinition = CreateInterfaceTypeDefinition(contentType);
- if (interfaceTypeDefinition.Fields.Count == 0)
+ if (interfaceTypeDefinition == null)
{
continue;
}
types.Add(InterfaceType.CreateUnsafe(interfaceTypeDefinition));
- ObjectTypeDefinition objectTypeDefinition = CreateObjectTypeDefinition(contentType);
+ interfaceTypeNames.Add(interfaceTypeDefinition.Name);
+ interfacedContentTypes.Add(contentType);
+ }
+
+ foreach (IContentTypeComposition contentType in interfacedContentTypes)
+ {
+ ObjectTypeDefinition objectTypeDefinition = CreateObjectTypeDefinition(contentType, interfaceTypeNames);
if (objectTypeDefinition.Fields.Count == 0)
{
@@ -213,7 +239,7 @@ private static void AddEmptyPropertyType(List objectTypes)
objectTypes.Add(ObjectType.CreateUnsafe(emptyNamedProperty));
}
- private InterfaceTypeDefinition CreateInterfaceTypeDefinition(IContentTypeComposition contentType)
+ private InterfaceTypeDefinition? CreateInterfaceTypeDefinition(IContentTypeComposition contentType)
{
var interfaceTypeDefinition = new InterfaceTypeDefinition(GetInterfaceTypeName(contentType.Alias), contentType.Description);
@@ -231,10 +257,15 @@ private InterfaceTypeDefinition CreateInterfaceTypeDefinition(IContentTypeCompos
interfaceTypeDefinition.Fields.Add(new InterfaceFieldDefinition(property.Alias, property.Description, TypeReference.Parse(propertyType.Name)));
}
+ if (interfaceTypeDefinition.Fields.Count == 0)
+ {
+ return null;
+ }
+
return interfaceTypeDefinition;
}
- private ObjectTypeDefinition CreateObjectTypeDefinition(IContentTypeComposition contentType)
+ private ObjectTypeDefinition CreateObjectTypeDefinition(IContentTypeComposition contentType, HashSet interfaceTypeNames)
{
var typeDefinition = new ObjectTypeDefinition(GetObjectTypeName(contentType.Alias), contentType.Description);
@@ -254,7 +285,12 @@ private ObjectTypeDefinition CreateObjectTypeDefinition(IContentTypeComposition
foreach (string composite in contentType.CompositionAliases())
{
- typeDefinition.Interfaces.Add(TypeReference.Parse(GetInterfaceTypeName(composite)));
+ string interfaceTypeName = GetInterfaceTypeName(composite);
+ if (interfaceTypeNames.Contains(interfaceTypeName))
+ {
+ typeDefinition.Interfaces.Add(TypeReference.Parse(interfaceTypeName));
+ }
+
}
typeDefinition.Interfaces.Add(TypeReference.Parse(GetInterfaceTypeName(typeDefinition.Name)));
diff --git a/src/Nikcio.UHeadless/UHeadlessExtensions.cs b/src/Nikcio.UHeadless/UHeadlessExtensions.cs
index fcde117f..245cb07b 100644
--- a/src/Nikcio.UHeadless/UHeadlessExtensions.cs
+++ b/src/Nikcio.UHeadless/UHeadlessExtensions.cs
@@ -65,6 +65,8 @@ public static IUmbracoBuilder AddUHeadless(this IUmbracoBuilder builder, Action<
builder.Services.AddScoped();
builder.Services.AddSingleton();
+ builder.AddNotificationAsyncHandler();
+
builder.Services.AddSingleton(options.PropertyMap);
builder.Services.AddSingleton();