@jfdevelops/react-layout 0.25.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/create-config/create-defined-resource-layout.cjs +42 -37
- package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
- package/dist/create-config/create-defined-resource-layout.d.cts +64 -44
- package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -1
- package/dist/create-config/create-defined-resource-layout.d.mts +64 -44
- package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
- package/dist/create-config/create-defined-resource-layout.mjs +44 -39
- package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
- package/dist/create-config/define-layout.cjs +12 -1
- package/dist/create-config/define-layout.cjs.map +1 -1
- package/dist/create-config/define-layout.d.cts +20 -8
- package/dist/create-config/define-layout.d.cts.map +1 -1
- package/dist/create-config/define-layout.d.mts +20 -8
- package/dist/create-config/define-layout.d.mts.map +1 -1
- package/dist/create-config/define-layout.mjs +13 -3
- package/dist/create-config/define-layout.mjs.map +1 -1
- package/dist/create-config/get-component.cjs +22 -1
- package/dist/create-config/get-component.cjs.map +1 -1
- package/dist/create-config/get-component.d.cts +25 -3
- package/dist/create-config/get-component.d.cts.map +1 -1
- package/dist/create-config/get-component.d.mts +25 -3
- package/dist/create-config/get-component.d.mts.map +1 -1
- package/dist/create-config/get-component.mjs +22 -1
- package/dist/create-config/get-component.mjs.map +1 -1
- package/dist/create-config/index.d.cts +3 -3
- package/dist/create-config/index.d.mts +3 -3
- package/dist/create-config/render-state.cjs +1 -14
- package/dist/create-config/render-state.cjs.map +1 -1
- package/dist/create-config/render-state.d.cts +33 -18
- package/dist/create-config/render-state.d.cts.map +1 -1
- package/dist/create-config/render-state.d.mts +33 -18
- package/dist/create-config/render-state.d.mts.map +1 -1
- package/dist/create-config/render-state.mjs +1 -14
- package/dist/create-config/render-state.mjs.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +5 -5
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +2 -2
- package/dist/resource.cjs +17 -0
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +27 -1
- package/dist/resource.d.cts.map +1 -1
- package/dist/resource.d.mts +27 -1
- package/dist/resource.d.mts.map +1 -1
- package/dist/resource.mjs +17 -1
- package/dist/resource.mjs.map +1 -1
- package/package.json +1 -1
package/dist/resource.d.cts
CHANGED
|
@@ -14,6 +14,24 @@ type ResourceDefinition = string | {
|
|
|
14
14
|
allowAnyString?: boolean;
|
|
15
15
|
}>;
|
|
16
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* A resource definition normalized to an object with a stable `value` key.
|
|
19
|
+
* `subResources` is present only when it existed on the declared resource.
|
|
20
|
+
*/
|
|
21
|
+
type NormalizedResourceDefinition<Resource extends ResourceDefinition = ResourceDefinition> = Resource extends string ? {
|
|
22
|
+
value: Resource;
|
|
23
|
+
} : Resource extends {
|
|
24
|
+
value: infer Value extends string;
|
|
25
|
+
subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;
|
|
26
|
+
} ? {
|
|
27
|
+
value: Value;
|
|
28
|
+
subResources: NormalizedResourceDefinitions<SubResources>;
|
|
29
|
+
} : never;
|
|
30
|
+
/**
|
|
31
|
+
* A tuple of resource definitions with strings converted to `{ value }`
|
|
32
|
+
* objects and nested sub-resources normalized recursively.
|
|
33
|
+
*/
|
|
34
|
+
type NormalizedResourceDefinitions<Resources extends ReadonlyArray<ResourceDefinition>> = { readonly [Index in keyof Resources]: Resources[Index] extends ResourceDefinition ? NormalizedResourceDefinition<Resources[Index]> : never };
|
|
17
35
|
type ResourceTree = Record<string, {
|
|
18
36
|
subResources: ResourceTree;
|
|
19
37
|
}>;
|
|
@@ -31,6 +49,14 @@ type ResourceLayoutComponentProps = {
|
|
|
31
49
|
};
|
|
32
50
|
declare function normalizeResource(resource: ResourceDefinition): ResourceTree;
|
|
33
51
|
declare function normalizeResources<Resources extends ReadonlyArray<ResourceDefinition>>(resources: Resources): NormalizeResources<Resources>;
|
|
52
|
+
/**
|
|
53
|
+
* Normalizes public resource declarations to a consistent object shape while
|
|
54
|
+
* preserving tuple positions and string literals in the returned type.
|
|
55
|
+
*
|
|
56
|
+
* @param resources - Resource definitions in their original declared form.
|
|
57
|
+
* @returns A recursively normalized tuple whose entries always have `value`.
|
|
58
|
+
*/
|
|
59
|
+
declare function normalizeResourceDefinitions<const Resources extends ReadonlyArray<ResourceDefinition>>(resources: Resources): NormalizedResourceDefinitions<Resources>;
|
|
34
60
|
type ResourceDefinitionValue<Resource extends ResourceDefinition> = Resource extends string ? Resource : Resource extends {
|
|
35
61
|
value: infer Value extends string;
|
|
36
62
|
} ? Value : never;
|
|
@@ -69,5 +95,5 @@ type SubResourceParamForResource<Resources extends ReadonlyArray<ResourceDefinit
|
|
|
69
95
|
type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> = NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;
|
|
70
96
|
declare function toResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>>(resources: NormalizeResources<Resources>): ResourceEnum<Resources>;
|
|
71
97
|
//#endregion
|
|
72
|
-
export { LayoutResourceKey, NormalizeResource, NormalizeResources, ResourceDefinition, ResourceDefinitionForKey, ResourceDefinitionValue, ResourceEnum, ResourceLayoutComponentProps, ResourcePath, ResourceTree, SubResourceDefinitionsFor, SubResourceParamForResource, normalizeResource, normalizeResources, toResourceEnum };
|
|
98
|
+
export { LayoutResourceKey, NormalizeResource, NormalizeResources, NormalizedResourceDefinition, NormalizedResourceDefinitions, ResourceDefinition, ResourceDefinitionForKey, ResourceDefinitionValue, ResourceEnum, ResourceLayoutComponentProps, ResourcePath, ResourceTree, SubResourceDefinitionsFor, SubResourceParamForResource, normalizeResource, normalizeResourceDefinitions, normalizeResources, toResourceEnum };
|
|
73
99
|
//# sourceMappingURL=resource.d.cts.map
|
package/dist/resource.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.cts","names":[],"sources":["../src/resource.ts"],"mappings":";;;;;KAKY,kBAAA;EAGN,KAAA;EACA,YAAA,EAAc,aAAa,CACzB,kBAAA;IALsB;;;;;IAWpB,cAAA;EAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"resource.d.cts","names":[],"sources":["../src/resource.ts"],"mappings":"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"}
|
package/dist/resource.d.mts
CHANGED
|
@@ -14,6 +14,24 @@ type ResourceDefinition = string | {
|
|
|
14
14
|
allowAnyString?: boolean;
|
|
15
15
|
}>;
|
|
16
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* A resource definition normalized to an object with a stable `value` key.
|
|
19
|
+
* `subResources` is present only when it existed on the declared resource.
|
|
20
|
+
*/
|
|
21
|
+
type NormalizedResourceDefinition<Resource extends ResourceDefinition = ResourceDefinition> = Resource extends string ? {
|
|
22
|
+
value: Resource;
|
|
23
|
+
} : Resource extends {
|
|
24
|
+
value: infer Value extends string;
|
|
25
|
+
subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;
|
|
26
|
+
} ? {
|
|
27
|
+
value: Value;
|
|
28
|
+
subResources: NormalizedResourceDefinitions<SubResources>;
|
|
29
|
+
} : never;
|
|
30
|
+
/**
|
|
31
|
+
* A tuple of resource definitions with strings converted to `{ value }`
|
|
32
|
+
* objects and nested sub-resources normalized recursively.
|
|
33
|
+
*/
|
|
34
|
+
type NormalizedResourceDefinitions<Resources extends ReadonlyArray<ResourceDefinition>> = { readonly [Index in keyof Resources]: Resources[Index] extends ResourceDefinition ? NormalizedResourceDefinition<Resources[Index]> : never };
|
|
17
35
|
type ResourceTree = Record<string, {
|
|
18
36
|
subResources: ResourceTree;
|
|
19
37
|
}>;
|
|
@@ -31,6 +49,14 @@ type ResourceLayoutComponentProps = {
|
|
|
31
49
|
};
|
|
32
50
|
declare function normalizeResource(resource: ResourceDefinition): ResourceTree;
|
|
33
51
|
declare function normalizeResources<Resources extends ReadonlyArray<ResourceDefinition>>(resources: Resources): NormalizeResources<Resources>;
|
|
52
|
+
/**
|
|
53
|
+
* Normalizes public resource declarations to a consistent object shape while
|
|
54
|
+
* preserving tuple positions and string literals in the returned type.
|
|
55
|
+
*
|
|
56
|
+
* @param resources - Resource definitions in their original declared form.
|
|
57
|
+
* @returns A recursively normalized tuple whose entries always have `value`.
|
|
58
|
+
*/
|
|
59
|
+
declare function normalizeResourceDefinitions<const Resources extends ReadonlyArray<ResourceDefinition>>(resources: Resources): NormalizedResourceDefinitions<Resources>;
|
|
34
60
|
type ResourceDefinitionValue<Resource extends ResourceDefinition> = Resource extends string ? Resource : Resource extends {
|
|
35
61
|
value: infer Value extends string;
|
|
36
62
|
} ? Value : never;
|
|
@@ -69,5 +95,5 @@ type SubResourceParamForResource<Resources extends ReadonlyArray<ResourceDefinit
|
|
|
69
95
|
type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> = NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;
|
|
70
96
|
declare function toResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>>(resources: NormalizeResources<Resources>): ResourceEnum<Resources>;
|
|
71
97
|
//#endregion
|
|
72
|
-
export { LayoutResourceKey, NormalizeResource, NormalizeResources, ResourceDefinition, ResourceDefinitionForKey, ResourceDefinitionValue, ResourceEnum, ResourceLayoutComponentProps, ResourcePath, ResourceTree, SubResourceDefinitionsFor, SubResourceParamForResource, normalizeResource, normalizeResources, toResourceEnum };
|
|
98
|
+
export { LayoutResourceKey, NormalizeResource, NormalizeResources, NormalizedResourceDefinition, NormalizedResourceDefinitions, ResourceDefinition, ResourceDefinitionForKey, ResourceDefinitionValue, ResourceEnum, ResourceLayoutComponentProps, ResourcePath, ResourceTree, SubResourceDefinitionsFor, SubResourceParamForResource, normalizeResource, normalizeResourceDefinitions, normalizeResources, toResourceEnum };
|
|
73
99
|
//# sourceMappingURL=resource.d.mts.map
|
package/dist/resource.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.mts","names":[],"sources":["../src/resource.ts"],"mappings":";;;;;KAKY,kBAAA;EAGN,KAAA;EACA,YAAA,EAAc,aAAa,CACzB,kBAAA;IALsB;;;;;IAWpB,cAAA;EAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"resource.d.mts","names":[],"sources":["../src/resource.ts"],"mappings":"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"}
|
package/dist/resource.mjs
CHANGED
|
@@ -17,6 +17,22 @@ function normalizeResource(resource) {
|
|
|
17
17
|
function normalizeResources(resources) {
|
|
18
18
|
return normalizeResourcesTree(resources);
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Normalizes public resource declarations to a consistent object shape while
|
|
22
|
+
* preserving tuple positions and string literals in the returned type.
|
|
23
|
+
*
|
|
24
|
+
* @param resources - Resource definitions in their original declared form.
|
|
25
|
+
* @returns A recursively normalized tuple whose entries always have `value`.
|
|
26
|
+
*/
|
|
27
|
+
function normalizeResourceDefinitions(resources) {
|
|
28
|
+
return resources.map((resource) => {
|
|
29
|
+
if (typeof resource === "string") return { value: resource };
|
|
30
|
+
return {
|
|
31
|
+
value: resource.value,
|
|
32
|
+
subResources: normalizeResourceDefinitions(resource.subResources)
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
20
36
|
function createIsValidResourceFn(resources) {
|
|
21
37
|
return (value) => {
|
|
22
38
|
return typeof value === "string" && Object.keys(normalizeResources(resources)).includes(value);
|
|
@@ -29,5 +45,5 @@ function toResourceEnum(resources) {
|
|
|
29
45
|
}
|
|
30
46
|
|
|
31
47
|
//#endregion
|
|
32
|
-
export { createIsValidResourceFn, normalizeResource, normalizeResources, toResourceEnum };
|
|
48
|
+
export { createIsValidResourceFn, normalizeResource, normalizeResourceDefinitions, normalizeResources, toResourceEnum };
|
|
33
49
|
//# sourceMappingURL=resource.mjs.map
|
package/dist/resource.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.mjs","names":[],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\nimport { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport { MergeIntersection, UnionToIntersection } from './utils';\nimport { LayoutConfigurationError } from './errors';\n\nexport type ResourceDefinition =\n | string\n | {\n value: string;\n subResources: ReadonlyArray<\n ResourceDefinition & {\n /**\n * Whether to allow any string as a sub resource.\n *\n * @default false\n */\n allowAnyString?: boolean;\n }\n >;\n };\n\nexport type ResourceTree = Record<\n string,\n {\n subResources: ResourceTree;\n }\n>;\n\nexport type NormalizeResource<Resource extends ResourceDefinition> =\n Resource extends string\n ? {\n [Key in Resource]: {\n subResources: {};\n };\n }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? {\n [Key in Value]: {\n subResources: NormalizeResources<SubResources>;\n };\n }\n : never;\n\nexport type NormalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = MergeIntersection<\n UnionToIntersection<NormalizeResource<Resources[number]>>\n>;\nexport type ResourceLayoutComponentProps = {\n children: ReactNode;\n};\n\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\n if (typeof resource === 'string') {\n return {\n [resource]: {\n subResources: {},\n },\n };\n }\n\n const { value, subResources } = resource;\n\n return {\n [value]: {\n subResources: normalizeResourcesTree(subResources),\n },\n };\n}\n\nfunction normalizeResourcesTree(\n resources: ReadonlyArray<ResourceDefinition>,\n): ResourceTree {\n const normalizedResources: ResourceTree = {};\n\n for (const resource of resources) {\n Object.assign(normalizedResources, normalizeResourceTree(resource));\n }\n\n return normalizedResources;\n}\n\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\n return normalizeResourceTree(resource);\n}\n\nexport function normalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizeResources<Resources> {\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\n}\n\nexport function createIsValidResourceFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources) {\n return (value: unknown): value is LayoutResourceKey<Resources> => {\n return (\n typeof value === 'string' &&\n Object.keys(normalizeResources(resources)).includes(value)\n );\n };\n}\n\nexport type ResourceDefinitionValue<Resource extends ResourceDefinition> =\n Resource extends string\n ? Resource\n : Resource extends { value: infer Value extends string }\n ? Value\n : never;\n\ntype NestedResourcePath<\n Definition extends ResourceDefinition,\n Prefix extends string = '',\n> = Definition extends string\n ? Prefix extends ''\n ? Definition\n : `${Prefix}.${Definition}`\n : Definition extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? | (Prefix extends '' ? Value : `${Prefix}.${Value}`)\n | NestedResourcePath<\n SubResources[number],\n Prefix extends '' ? Value : `${Prefix}.${Value}`\n >\n : never;\n\n/** Dot-delimited paths for every resource and nested sub-resource. */\nexport type ResourcePath<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = NestedResourcePath<Resources[number]>;\n\n/**\n * Top-level resource names declared in a `resources` array. Preserves string\n * literal unions for const resource definitions (unlike `keyof` on the\n * normalized resource tree, which tends to widen to `string` in hovers).\n */\nexport type LayoutResourceKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinitionValue<Resources[number]>;\n\nexport type ResourceDefinitionForKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Key extends string,\n> = Extract<Resources[number], Key | { value: Key }>;\n\n/** `subResources` array declared on a layout resource. */\nexport type SubResourceDefinitionsFor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? SubResources\n : readonly [];\n\ntype CanNestSubResourceParam<\n MaxDepth extends number,\n DepthAcc extends readonly unknown[],\n> = [...DepthAcc, unknown]['length'] extends MaxDepth ? false : true;\n\n/**\n * `subResource` route param: a slug at the current depth, or `{ value, subResource }`\n * when that slug has nested `subResources` in the layout tree and `MaxDepth` allows it.\n */\nexport type RecursiveSubResourceParam<\n Resources extends ReadonlyArray<ResourceDefinition>,\n SubDefs extends ReadonlyArray<ResourceDefinition>,\n MaxDepth extends number = 6,\n DepthAcc extends readonly unknown[] = readonly [],\n> =\n LayoutResourceKey<SubDefs> extends infer Key\n ? Key extends LayoutResourceKey<SubDefs>\n ? CanNestSubResourceParam<MaxDepth, DepthAcc> extends true\n ? ResourceDefinitionForKey<SubDefs, Key> extends {\n subResources: infer Nested extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? [LayoutResourceKey<Nested>] extends [never]\n ? Key\n :\n | Key\n | {\n value: Key;\n subResource: RecursiveSubResourceParam<\n Resources,\n Nested,\n MaxDepth,\n readonly [...DepthAcc, unknown]\n >;\n }\n : Key\n : Key\n : never\n : never;\n\n/** Recursive `subResource` values for a layout resource (full tree depth). */\nexport type SubResourceParamForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []]\n ? never\n : RecursiveSubResourceParam<\n Resources,\n SubResourceDefinitionsFor<Resources, Resource>\n >;\n\nexport type GetSubResourceKeys<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? LayoutResourceKey<SubResources>\n : never;\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\nexport function toResourceEnum<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: NormalizeResources<Resources>) {\n const keys = Object.keys(resources);\n\n if (keys.length === 0) {\n throw new LayoutConfigurationError('No resources provided');\n }\n\n return keys as unknown as ResourceEnum<Resources>;\n}\n"],"mappings":";;;AAwDA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;AAEA,SAAgB,wBAEd,WAAsB;CACtB,QAAQ,UAA0D;EAChE,OACE,OAAO,UAAU,YACjB,OAAO,KAAK,mBAAmB,SAAS,CAAC,EAAE,SAAS,KAAK;CAE7D;AACF;AAuHA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,yBAAyB,uBAAuB;CAG5D,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"resource.mjs","names":[],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\nimport { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport { MergeIntersection, UnionToIntersection } from './utils';\nimport { LayoutConfigurationError } from './errors';\n\nexport type ResourceDefinition =\n | string\n | {\n value: string;\n subResources: ReadonlyArray<\n ResourceDefinition & {\n /**\n * Whether to allow any string as a sub resource.\n *\n * @default false\n */\n allowAnyString?: boolean;\n }\n >;\n };\n\n/**\n * A resource definition normalized to an object with a stable `value` key.\n * `subResources` is present only when it existed on the declared resource.\n */\nexport type NormalizedResourceDefinition<\n Resource extends ResourceDefinition = ResourceDefinition,\n> = Resource extends string\n ? { value: Resource }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? {\n value: Value;\n subResources: NormalizedResourceDefinitions<SubResources>;\n }\n : never;\n\n/**\n * A tuple of resource definitions with strings converted to `{ value }`\n * objects and nested sub-resources normalized recursively.\n */\nexport type NormalizedResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = {\n readonly [Index in keyof Resources]: Resources[Index] extends ResourceDefinition\n ? NormalizedResourceDefinition<Resources[Index]>\n : never;\n};\n\nexport type ResourceTree = Record<\n string,\n {\n subResources: ResourceTree;\n }\n>;\n\nexport type NormalizeResource<Resource extends ResourceDefinition> =\n Resource extends string\n ? {\n [Key in Resource]: {\n subResources: {};\n };\n }\n : Resource extends {\n value: infer Value extends string;\n subResources: infer SubResources extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? {\n [Key in Value]: {\n subResources: NormalizeResources<SubResources>;\n };\n }\n : never;\n\nexport type NormalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = MergeIntersection<\n UnionToIntersection<NormalizeResource<Resources[number]>>\n>;\nexport type ResourceLayoutComponentProps = {\n children: ReactNode;\n};\n\nfunction normalizeResourceTree(resource: ResourceDefinition): ResourceTree {\n if (typeof resource === 'string') {\n return {\n [resource]: {\n subResources: {},\n },\n };\n }\n\n const { value, subResources } = resource;\n\n return {\n [value]: {\n subResources: normalizeResourcesTree(subResources),\n },\n };\n}\n\nfunction normalizeResourcesTree(\n resources: ReadonlyArray<ResourceDefinition>,\n): ResourceTree {\n const normalizedResources: ResourceTree = {};\n\n for (const resource of resources) {\n Object.assign(normalizedResources, normalizeResourceTree(resource));\n }\n\n return normalizedResources;\n}\n\nexport function normalizeResource(resource: ResourceDefinition): ResourceTree {\n return normalizeResourceTree(resource);\n}\n\nexport function normalizeResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizeResources<Resources> {\n return normalizeResourcesTree(resources) as NormalizeResources<Resources>;\n}\n\n/**\n * Normalizes public resource declarations to a consistent object shape while\n * preserving tuple positions and string literals in the returned type.\n *\n * @param resources - Resource definitions in their original declared form.\n * @returns A recursively normalized tuple whose entries always have `value`.\n */\nexport function normalizeResourceDefinitions<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): NormalizedResourceDefinitions<Resources> {\n return resources.map((resource) => {\n if (typeof resource === 'string') {\n return { value: resource };\n }\n\n return {\n value: resource.value,\n subResources: normalizeResourceDefinitions(resource.subResources),\n };\n }) as NormalizedResourceDefinitions<Resources>;\n}\n\nexport function createIsValidResourceFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources) {\n return (value: unknown): value is LayoutResourceKey<Resources> => {\n return (\n typeof value === 'string' &&\n Object.keys(normalizeResources(resources)).includes(value)\n );\n };\n}\n\nexport type ResourceDefinitionValue<Resource extends ResourceDefinition> =\n Resource extends string\n ? Resource\n : Resource extends { value: infer Value extends string }\n ? Value\n : never;\n\ntype NestedResourcePath<\n Definition extends ResourceDefinition,\n Prefix extends string = '',\n> = Definition extends string\n ? Prefix extends ''\n ? Definition\n : `${Prefix}.${Definition}`\n : Definition extends {\n value: infer Value extends string;\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? | (Prefix extends '' ? Value : `${Prefix}.${Value}`)\n | NestedResourcePath<\n SubResources[number],\n Prefix extends '' ? Value : `${Prefix}.${Value}`\n >\n : never;\n\n/** Dot-delimited paths for every resource and nested sub-resource. */\nexport type ResourcePath<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = NestedResourcePath<Resources[number]>;\n\n/**\n * Top-level resource names declared in a `resources` array. Preserves string\n * literal unions for const resource definitions (unlike `keyof` on the\n * normalized resource tree, which tends to widen to `string` in hovers).\n */\nexport type LayoutResourceKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = ResourceDefinitionValue<Resources[number]>;\n\nexport type ResourceDefinitionForKey<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Key extends string,\n> = Extract<Resources[number], Key | { value: Key }>;\n\n/** `subResources` array declared on a layout resource. */\nexport type SubResourceDefinitionsFor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? SubResources\n : readonly [];\n\ntype CanNestSubResourceParam<\n MaxDepth extends number,\n DepthAcc extends readonly unknown[],\n> = [...DepthAcc, unknown]['length'] extends MaxDepth ? false : true;\n\n/**\n * `subResource` route param: a slug at the current depth, or `{ value, subResource }`\n * when that slug has nested `subResources` in the layout tree and `MaxDepth` allows it.\n */\nexport type RecursiveSubResourceParam<\n Resources extends ReadonlyArray<ResourceDefinition>,\n SubDefs extends ReadonlyArray<ResourceDefinition>,\n MaxDepth extends number = 6,\n DepthAcc extends readonly unknown[] = readonly [],\n> =\n LayoutResourceKey<SubDefs> extends infer Key\n ? Key extends LayoutResourceKey<SubDefs>\n ? CanNestSubResourceParam<MaxDepth, DepthAcc> extends true\n ? ResourceDefinitionForKey<SubDefs, Key> extends {\n subResources: infer Nested extends\n ReadonlyArray<ResourceDefinition>;\n }\n ? [LayoutResourceKey<Nested>] extends [never]\n ? Key\n :\n | Key\n | {\n value: Key;\n subResource: RecursiveSubResourceParam<\n Resources,\n Nested,\n MaxDepth,\n readonly [...DepthAcc, unknown]\n >;\n }\n : Key\n : Key\n : never\n : never;\n\n/** Recursive `subResource` values for a layout resource (full tree depth). */\nexport type SubResourceParamForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []]\n ? never\n : RecursiveSubResourceParam<\n Resources,\n SubResourceDefinitionsFor<Resources, Resource>\n >;\n\nexport type GetSubResourceKeys<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends LayoutResourceKey<Resources>,\n> =\n ResourceDefinitionForKey<Resources, Resource> extends {\n subResources: infer SubResources extends ReadonlyArray<ResourceDefinition>;\n }\n ? LayoutResourceKey<SubResources>\n : never;\nexport type ResourceEnum<Resources extends ReadonlyArray<ResourceDefinition>> =\n NonEmptyReadonlyArray<LayoutResourceKey<Resources>>;\nexport function toResourceEnum<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: NormalizeResources<Resources>) {\n const keys = Object.keys(resources);\n\n if (keys.length === 0) {\n throw new LayoutConfigurationError('No resources provided');\n }\n\n return keys as unknown as ResourceEnum<Resources>;\n}\n"],"mappings":";;;AAsFA,SAAS,sBAAsB,UAA4C;CACzE,IAAI,OAAO,aAAa,UACtB,OAAO,GACJ,WAAW,EACV,cAAc,CAAC,EACjB,EACF;CAGF,MAAM,EAAE,OAAO,iBAAiB;CAEhC,OAAO,GACJ,QAAQ,EACP,cAAc,uBAAuB,YAAY,EACnD,EACF;AACF;AAEA,SAAS,uBACP,WACc;CACd,MAAM,sBAAoC,CAAC;CAE3C,KAAK,MAAM,YAAY,WACrB,OAAO,OAAO,qBAAqB,sBAAsB,QAAQ,CAAC;CAGpE,OAAO;AACT;AAEA,SAAgB,kBAAkB,UAA4C;CAC5E,OAAO,sBAAsB,QAAQ;AACvC;AAEA,SAAgB,mBAEd,WAAqD;CACrD,OAAO,uBAAuB,SAAS;AACzC;;;;;;;;AASA,SAAgB,6BAEd,WAAgE;CAChE,OAAO,UAAU,KAAK,aAAa;EACjC,IAAI,OAAO,aAAa,UACtB,OAAO,EAAE,OAAO,SAAS;EAG3B,OAAO;GACL,OAAO,SAAS;GAChB,cAAc,6BAA6B,SAAS,YAAY;EAClE;CACF,CAAC;AACH;AAEA,SAAgB,wBAEd,WAAsB;CACtB,QAAQ,UAA0D;EAChE,OACE,OAAO,UAAU,YACjB,OAAO,KAAK,mBAAmB,SAAS,CAAC,EAAE,SAAS,KAAK;CAE7D;AACF;AAuHA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,yBAAyB,uBAAuB;CAG5D,OAAO;AACT"}
|