@jfdevelops/react-layout 0.17.4 → 0.18.0

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.
Files changed (163) hide show
  1. package/dist/create-config/component-keys.cjs +44 -0
  2. package/dist/create-config/component-keys.cjs.map +1 -0
  3. package/dist/create-config/component-keys.mjs +39 -0
  4. package/dist/create-config/component-keys.mjs.map +1 -0
  5. package/dist/create-config/define-layout.cjs +42 -5
  6. package/dist/create-config/define-layout.cjs.map +1 -1
  7. package/dist/create-config/define-layout.d.cts +12 -10
  8. package/dist/create-config/define-layout.d.cts.map +1 -1
  9. package/dist/create-config/define-layout.d.mts +12 -10
  10. package/dist/create-config/define-layout.d.mts.map +1 -1
  11. package/dist/create-config/define-layout.mjs +43 -6
  12. package/dist/create-config/define-layout.mjs.map +1 -1
  13. package/dist/create-config/for-paths/builder.cjs +192 -0
  14. package/dist/create-config/for-paths/builder.cjs.map +1 -0
  15. package/dist/create-config/for-paths/builder.d.cts +77 -0
  16. package/dist/create-config/for-paths/builder.d.cts.map +1 -0
  17. package/dist/create-config/for-paths/builder.d.mts +77 -0
  18. package/dist/create-config/for-paths/builder.d.mts.map +1 -0
  19. package/dist/create-config/for-paths/builder.mjs +192 -0
  20. package/dist/create-config/for-paths/builder.mjs.map +1 -0
  21. package/dist/create-config/for-paths/get-component-for-path.cjs +55 -0
  22. package/dist/create-config/for-paths/get-component-for-path.cjs.map +1 -0
  23. package/dist/create-config/for-paths/get-component-for-path.d.cts +55 -0
  24. package/dist/create-config/for-paths/get-component-for-path.d.cts.map +1 -0
  25. package/dist/create-config/for-paths/get-component-for-path.d.mts +55 -0
  26. package/dist/create-config/for-paths/get-component-for-path.d.mts.map +1 -0
  27. package/dist/create-config/for-paths/get-component-for-path.mjs +55 -0
  28. package/dist/create-config/for-paths/get-component-for-path.mjs.map +1 -0
  29. package/dist/create-config/for-paths/index.d.cts +2 -0
  30. package/dist/create-config/for-paths/index.d.mts +2 -0
  31. package/dist/create-config/for-resource.cjs.map +1 -1
  32. package/dist/create-config/for-resource.d.cts +19 -19
  33. package/dist/create-config/for-resource.d.cts.map +1 -1
  34. package/dist/create-config/for-resource.d.mts +19 -19
  35. package/dist/create-config/for-resource.d.mts.map +1 -1
  36. package/dist/create-config/for-resource.mjs.map +1 -1
  37. package/dist/create-config/for-resources/scoped-layout.d.cts +14 -14
  38. package/dist/create-config/for-resources/scoped-layout.d.cts.map +1 -1
  39. package/dist/create-config/for-resources/scoped-layout.d.mts +14 -14
  40. package/dist/create-config/for-resources/scoped-layout.d.mts.map +1 -1
  41. package/dist/create-config/get-component.cjs +60 -11
  42. package/dist/create-config/get-component.cjs.map +1 -1
  43. package/dist/create-config/get-component.d.cts +75 -6
  44. package/dist/create-config/get-component.d.cts.map +1 -1
  45. package/dist/create-config/get-component.d.mts +75 -6
  46. package/dist/create-config/get-component.d.mts.map +1 -1
  47. package/dist/create-config/get-component.mjs +61 -11
  48. package/dist/create-config/get-component.mjs.map +1 -1
  49. package/dist/create-config/index.d.cts +6 -1
  50. package/dist/create-config/index.d.mts +6 -1
  51. package/dist/create-config/is-sub-resource-key.cjs +15 -0
  52. package/dist/create-config/is-sub-resource-key.cjs.map +1 -0
  53. package/dist/create-config/is-sub-resource-key.d.cts +30 -0
  54. package/dist/create-config/is-sub-resource-key.d.cts.map +1 -0
  55. package/dist/create-config/is-sub-resource-key.d.mts +30 -0
  56. package/dist/create-config/is-sub-resource-key.d.mts.map +1 -0
  57. package/dist/create-config/is-sub-resource-key.mjs +15 -0
  58. package/dist/create-config/is-sub-resource-key.mjs.map +1 -0
  59. package/dist/create-config/paths/generate.cjs +77 -0
  60. package/dist/create-config/paths/generate.cjs.map +1 -0
  61. package/dist/create-config/paths/generate.mjs +77 -0
  62. package/dist/create-config/paths/generate.mjs.map +1 -0
  63. package/dist/create-config/paths/index.d.cts +2 -0
  64. package/dist/create-config/paths/index.d.mts +2 -0
  65. package/dist/create-config/paths/introspect.cjs +123 -0
  66. package/dist/create-config/paths/introspect.cjs.map +1 -0
  67. package/dist/create-config/paths/introspect.mjs +118 -0
  68. package/dist/create-config/paths/introspect.mjs.map +1 -0
  69. package/dist/create-config/paths/resolve.cjs +130 -0
  70. package/dist/create-config/paths/resolve.cjs.map +1 -0
  71. package/dist/create-config/paths/resolve.mjs +129 -0
  72. package/dist/create-config/paths/resolve.mjs.map +1 -0
  73. package/dist/create-config/paths/types.d.cts +104 -0
  74. package/dist/create-config/paths/types.d.cts.map +1 -0
  75. package/dist/create-config/paths/types.d.mts +104 -0
  76. package/dist/create-config/paths/types.d.mts.map +1 -0
  77. package/dist/create-config/paths/variables.cjs +32 -0
  78. package/dist/create-config/paths/variables.cjs.map +1 -0
  79. package/dist/create-config/paths/variables.d.cts +32 -0
  80. package/dist/create-config/paths/variables.d.cts.map +1 -0
  81. package/dist/create-config/paths/variables.d.mts +32 -0
  82. package/dist/create-config/paths/variables.d.mts.map +1 -0
  83. package/dist/create-config/paths/variables.mjs +29 -0
  84. package/dist/create-config/paths/variables.mjs.map +1 -0
  85. package/dist/create-config/types.d.cts +28 -8
  86. package/dist/create-config/types.d.cts.map +1 -1
  87. package/dist/create-config/types.d.mts +28 -8
  88. package/dist/create-config/types.d.mts.map +1 -1
  89. package/dist/errors/invalid-component.cjs +21 -0
  90. package/dist/errors/invalid-component.cjs.map +1 -0
  91. package/dist/errors/invalid-component.d.cts +18 -0
  92. package/dist/errors/invalid-component.d.cts.map +1 -0
  93. package/dist/errors/invalid-component.d.mts +18 -0
  94. package/dist/errors/invalid-component.d.mts.map +1 -0
  95. package/dist/errors/invalid-component.mjs +21 -0
  96. package/dist/errors/invalid-component.mjs.map +1 -0
  97. package/dist/errors/invalid-config.cjs +13 -0
  98. package/dist/errors/invalid-config.cjs.map +1 -0
  99. package/dist/errors/invalid-config.d.cts +15 -0
  100. package/dist/errors/invalid-config.d.cts.map +1 -0
  101. package/dist/errors/invalid-config.d.mts +15 -0
  102. package/dist/errors/invalid-config.d.mts.map +1 -0
  103. package/dist/errors/invalid-config.mjs +13 -0
  104. package/dist/errors/invalid-config.mjs.map +1 -0
  105. package/dist/errors/invalid-path.cjs +18 -0
  106. package/dist/errors/invalid-path.cjs.map +1 -0
  107. package/dist/errors/invalid-path.d.cts +16 -0
  108. package/dist/errors/invalid-path.d.cts.map +1 -0
  109. package/dist/errors/invalid-path.d.mts +16 -0
  110. package/dist/errors/invalid-path.d.mts.map +1 -0
  111. package/dist/errors/invalid-path.mjs +18 -0
  112. package/dist/errors/invalid-path.mjs.map +1 -0
  113. package/dist/errors/invalid-resource.cjs +18 -0
  114. package/dist/errors/invalid-resource.cjs.map +1 -0
  115. package/dist/errors/invalid-resource.d.cts +16 -0
  116. package/dist/errors/invalid-resource.d.cts.map +1 -0
  117. package/dist/errors/invalid-resource.d.mts +16 -0
  118. package/dist/errors/invalid-resource.d.mts.map +1 -0
  119. package/dist/errors/invalid-resource.mjs +18 -0
  120. package/dist/errors/invalid-resource.mjs.map +1 -0
  121. package/dist/errors/invalid-sub-resource.cjs +18 -0
  122. package/dist/errors/invalid-sub-resource.cjs.map +1 -0
  123. package/dist/errors/invalid-sub-resource.d.cts +17 -0
  124. package/dist/errors/invalid-sub-resource.d.cts.map +1 -0
  125. package/dist/errors/invalid-sub-resource.d.mts +17 -0
  126. package/dist/errors/invalid-sub-resource.d.mts.map +1 -0
  127. package/dist/errors/invalid-sub-resource.mjs +18 -0
  128. package/dist/errors/invalid-sub-resource.mjs.map +1 -0
  129. package/dist/errors/missing-path-variable.cjs +18 -0
  130. package/dist/errors/missing-path-variable.cjs.map +1 -0
  131. package/dist/errors/missing-path-variable.d.cts +16 -0
  132. package/dist/errors/missing-path-variable.d.cts.map +1 -0
  133. package/dist/errors/missing-path-variable.d.mts +16 -0
  134. package/dist/errors/missing-path-variable.d.mts.map +1 -0
  135. package/dist/errors/missing-path-variable.mjs +18 -0
  136. package/dist/errors/missing-path-variable.mjs.map +1 -0
  137. package/dist/errors/react-layout-error.cjs +56 -0
  138. package/dist/errors/react-layout-error.cjs.map +1 -0
  139. package/dist/errors/react-layout-error.d.cts +46 -0
  140. package/dist/errors/react-layout-error.d.cts.map +1 -0
  141. package/dist/errors/react-layout-error.d.mts +46 -0
  142. package/dist/errors/react-layout-error.d.mts.map +1 -0
  143. package/dist/errors/react-layout-error.mjs +54 -0
  144. package/dist/errors/react-layout-error.mjs.map +1 -0
  145. package/dist/index.cjs +15 -0
  146. package/dist/index.d.cts +14 -2
  147. package/dist/index.d.mts +14 -2
  148. package/dist/index.mjs +8 -1
  149. package/dist/props.d.cts +14 -4
  150. package/dist/props.d.cts.map +1 -1
  151. package/dist/props.d.mts +14 -4
  152. package/dist/props.d.mts.map +1 -1
  153. package/dist/resource.cjs.map +1 -1
  154. package/dist/resource.d.cts +2 -2
  155. package/dist/resource.d.cts.map +1 -1
  156. package/dist/resource.d.mts +2 -2
  157. package/dist/resource.d.mts.map +1 -1
  158. package/dist/resource.mjs.map +1 -1
  159. package/dist/utils.d.cts +2 -1
  160. package/dist/utils.d.cts.map +1 -1
  161. package/dist/utils.d.mts +2 -1
  162. package/dist/utils.d.mts.map +1 -1
  163. package/package.json +1 -1
@@ -0,0 +1,104 @@
1
+ import { Show } from "../../utils.cjs";
2
+ import { LayoutResourceKey, ResourceDefinition, ResourceDefinitionForKey, SubResourceDefinitionsFor, SubResourceParamForResource } from "../../resource.cjs";
3
+ import { BaseResourceConfigComponents, ResourceConfigComponentKey, SharedResourceConfigOptions } from "../types.cjs";
4
+ import { ComponentPathVariable, ExtractPathVariables, PathHead, PathTail, ResourcePathVariable, SubResourcePathVariable } from "./variables.cjs";
5
+ import { JSX } from "react";
6
+
7
+ //#region src/create-config/paths/types.d.ts
8
+ /** Recursion cap for path types. Must stay aligned with `MAX_PATH_DEPTH` in `./generate`. */
9
+ type MaxPathDepth = 6;
10
+ type ComponentSlotKey = keyof BaseResourceConfigComponents;
11
+ type SharedBranchKey = keyof SharedResourceConfigOptions;
12
+ /** A component slot segment: a fixed slot key, or the `$component` variable. */
13
+ type ComponentSegment = ComponentSlotKey | ComponentPathVariable;
14
+ /**
15
+ * Path tail selecting a component on the current node: a slot, a shared branch, or a
16
+ * slot inside a shared branch (`detail.errorComponent`, `new.$component`, …).
17
+ */
18
+ type ComponentTailPath = ComponentSegment | SharedBranchKey | `${SharedBranchKey}.${ComponentSegment}`;
19
+ type NestedSubResourceDefinitions<Def extends ResourceDefinition> = Def extends {
20
+ subResources: infer Nested extends ReadonlyArray<ResourceDefinition>;
21
+ } ? Nested : readonly [];
22
+ type SubResourceTailPaths<SubDefs extends ReadonlyArray<ResourceDefinition>, DepthAcc extends readonly unknown[]> = LayoutResourceKey<SubDefs> extends infer Key extends string ? Key extends LayoutResourceKey<SubDefs> ? Key | `${Key}.${ParameterizedEntryPath<NestedSubResourceDefinitions<ResourceDefinitionForKey<SubDefs, Key>>, readonly [...DepthAcc, unknown]>}` : never : never;
23
+ /**
24
+ * Every path tail valid below one config node: component slots, declared sub-resource
25
+ * slugs, or a single `$subResource` variable. One `$subResource` segment stands for the
26
+ * whole remaining sub-resource chain, since its value may be `{ value, subResource }`.
27
+ */
28
+ type ParameterizedEntryPath<SubDefs extends ReadonlyArray<ResourceDefinition>, DepthAcc extends readonly unknown[] = readonly []> = ComponentTailPath | ([SubDefs] extends [readonly []] ? never : DepthAcc['length'] extends MaxPathDepth ? never : SubResourceTailPaths<SubDefs, DepthAcc> | SubResourcePathVariable | `${SubResourcePathVariable}.${ComponentTailPath}`);
29
+ type ParameterizedEntryPathForResource<Resources extends ReadonlyArray<ResourceDefinition>, Resource extends LayoutResourceKey<Resources>> = ParameterizedEntryPath<SubResourceDefinitionsFor<Resources, Resource>>;
30
+ type AnyParameterizedEntryPath<Resources extends ReadonlyArray<ResourceDefinition>> = LayoutResourceKey<Resources> extends infer Resource ? Resource extends LayoutResourceKey<Resources> ? ParameterizedEntryPathForResource<Resources, Resource> : never : never;
31
+ /**
32
+ * Paths accepted by `forPaths` and `createGetComponent`. Segments whose value depends on
33
+ * the config collapse into variables (`$resource`, `$subResource`, `$component`), and the
34
+ * fixed slots stay literal, so `'$resource.detail.$component'` leaves `resource` and
35
+ * `component` to the call site.
36
+ */
37
+ type ParameterizedResourcePath<Resources extends ReadonlyArray<ResourceDefinition>> = LayoutResourceKey<Resources> | ResourcePathVariable | (LayoutResourceKey<Resources> extends infer Resource ? Resource extends LayoutResourceKey<Resources> ? `${Resource}.${ParameterizedEntryPathForResource<Resources, Resource>}` : never : never) | `${ResourcePathVariable}.${AnyParameterizedEntryPath<Resources>}`;
38
+ type ConfigNodeOf<Node> = NonNullable<Node>;
39
+ /**
40
+ * Element slots configured on a node (`component`, `errorComponent`, …). `detail` and
41
+ * `new` are path segments, not `$component` values.
42
+ */
43
+ type ComponentKeysAtNode<Node> = ConfigNodeOf<Node> extends JSX.Element ? never : Extract<keyof ConfigNodeOf<Node>, ComponentSlotKey>;
44
+ /** Sub-resource keys configured on a node: every key that is not a component slot. */
45
+ type SubResourceKeysAtNode<Node> = ConfigNodeOf<Node> extends JSX.Element ? never : Exclude<keyof ConfigNodeOf<Node>, ResourceConfigComponentKey>;
46
+ type IndexNode<Node, Key> = Key extends keyof ConfigNodeOf<Node> ? NonNullable<ConfigNodeOf<Node>[Key]> : never;
47
+ type ComponentKeysAtNodes<Node> = Node extends unknown ? ComponentKeysAtNode<Node> : never;
48
+ /** Sub-resource keys on a node and on every node below it, matching nested params. */
49
+ type SubResourceKeysBelowNode<Node, DepthAcc extends readonly unknown[] = readonly []> = DepthAcc['length'] extends MaxPathDepth ? never : SubResourceKeysAtNode<Node> extends infer Key ? Key extends SubResourceKeysAtNode<Node> ? Key | SubResourceKeysBelowNode<IndexNode<Node, Key>, readonly [...DepthAcc, unknown]> : never : never;
50
+ /** Every node reachable below `Node`, used when a `$subResource` value is not yet known. */
51
+ type AnySubResourceNode<Node, DepthAcc extends readonly unknown[] = readonly []> = DepthAcc['length'] extends MaxPathDepth ? never : SubResourceKeysAtNode<Node> extends infer Key ? Key extends SubResourceKeysAtNode<Node> ? IndexNode<Node, Key> | AnySubResourceNode<IndexNode<Node, Key>, readonly [...DepthAcc, unknown]> : never : never;
52
+ type ResolveConfigNodeSegment<Node, Segment extends string> = Node extends unknown ? Segment extends SubResourcePathVariable ? AnySubResourceNode<Node> : Segment extends ComponentPathVariable ? IndexNode<Node, ComponentKeysAtNode<Node>> : IndexNode<Node, Segment> : never;
53
+ /**
54
+ * Walks `Path` on a config node. Open variables resolve to every value they could take,
55
+ * so `never` means the path cannot exist on that node.
56
+ */
57
+ type ResolveConfigNode<Node, Path extends string> = [Node] extends [never] ? never : Path extends '' ? Node : Path extends `${infer Head}.${infer Rest}` ? ResolveConfigNode<ResolveConfigNodeSegment<Node, Head>, Rest> : ResolveConfigNodeSegment<Node, Path>;
58
+ /** Resource keys present in a created config, falling back to every declared resource. */
59
+ type ConfigResourceKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config> = [Extract<LayoutResourceKey<Resources>, keyof Config>] extends [never] ? LayoutResourceKey<Resources> : Extract<LayoutResourceKey<Resources>, keyof Config>;
60
+ type ResourceNode<Config, Resource> = Resource extends keyof Config ? NonNullable<Config[Resource]> : never;
61
+ /**
62
+ * Resources a path can target: for `$resource` paths, only those whose config satisfies
63
+ * the path's fixed segments, so `'$resource.detail.$component'` excludes resources
64
+ * without a `detail`.
65
+ */
66
+ type PathResourceCandidates<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathHead<Path> extends ResourcePathVariable ? ConfigResourceKeys<Resources, Config> extends infer Resource ? Resource extends ConfigResourceKeys<Resources, Config> ? [ResolveConfigNode<ResourceNode<Config, Resource>, PathTail<Path>>] extends [never] ? never : Resource : never : never : Extract<PathHead<Path>, ConfigResourceKeys<Resources, Config>>;
67
+ type StripTrailingComponentVariable<Path extends string> = Path extends ComponentPathVariable ? '' : Path extends `${infer Head}.${ComponentPathVariable}` ? Head : Path;
68
+ /** Component slot keys configured on the node a path resolves to. */
69
+ type PathComponentKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathResourceCandidates<Resources, Config, Path> extends infer Resource ? Resource extends PathResourceCandidates<Resources, Config, Path> ? ComponentKeysAtNodes<ResolveConfigNode<ResourceNode<Config, Resource>, StripTrailingComponentVariable<PathTail<Path>>>> : never : never;
70
+ /** Sub-resource keys valid for the `$subResource` segment of a path. */
71
+ type PathSubResourceKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathResourceCandidates<Resources, Config, Path> extends infer Resource ? Resource extends PathResourceCandidates<Resources, Config, Path> ? SubResourceKeysBelowNode<ResourceNode<Config, Resource>> : never : never;
72
+ /** Sub-resource keys configured for one resource, at any depth. */
73
+ type ResourceSubResourceKeys<Config, Resource> = SubResourceKeysBelowNode<ResourceNode<Config, Resource>>;
74
+ /** Every sub-resource key configured anywhere in a config map. */
75
+ type ConfigSubResourceKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config> = ConfigResourceKeys<Resources, Config> extends infer Resource ? Resource extends ConfigResourceKeys<Resources, Config> ? ResourceSubResourceKeys<Config, Resource> : never : never;
76
+ type ComponentKeysForPath<Config, Resource, Tail extends string> = ComponentKeysAtNodes<ResolveConfigNode<ResourceNode<Config, Resource>, StripTrailingComponentVariable<Tail>>> extends infer Keys ? [Keys] extends [never] ? ComponentSlotKey : Keys : ComponentSlotKey;
77
+ /** Params a path requires for one target resource. */
78
+ type PathVariablesForResource<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string, Resource extends LayoutResourceKey<Resources>> = Show<('resource' extends ExtractPathVariables<Path> ? {
79
+ resource: Resource;
80
+ } : {}) & ('subResource' extends ExtractPathVariables<Path> ? {
81
+ subResource: SubResourceParamForResource<Resources, Resource>;
82
+ } : {}) & ('component' extends ExtractPathVariables<Path> ? {
83
+ component: ComponentKeysForPath<Config, Resource, PathTail<Path>>;
84
+ } : {})>;
85
+ /**
86
+ * Params a path requires, as one object per resource the path can target. A path with no
87
+ * variables resolves to `{}`.
88
+ */
89
+ type PathVariables<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathResourceCandidates<Resources, Config, Path> extends infer Resource ? Resource extends LayoutResourceKey<Resources> ? PathVariablesForResource<Resources, Config, Path, Resource> : never : never;
90
+ type VariableValue<Variables, Name extends string> = Name extends keyof Variables ? Variables[Name] : never;
91
+ type ResolveSubResourceParamNode<Node, Param, DepthAcc extends readonly unknown[] = readonly []> = DepthAcc['length'] extends MaxPathDepth ? never : Param extends string ? IndexNode<Node, Param> : Param extends {
92
+ value: infer Value extends string;
93
+ subResource: infer Nested;
94
+ } ? ResolveSubResourceParamNode<IndexNode<Node, Value>, Nested, readonly [...DepthAcc, unknown]> : never;
95
+ type ResolveNodeSegmentWithVariables<Node, Segment extends string, Variables> = Node extends unknown ? Segment extends SubResourcePathVariable ? ResolveSubResourceParamNode<Node, VariableValue<Variables, 'subResource'>> : Segment extends ComponentPathVariable ? IndexNode<Node, Extract<VariableValue<Variables, 'component'>, string>> : IndexNode<Node, Segment> : never;
96
+ type ResolveNodeWithVariables<Node, Path extends string, Variables> = [Node] extends [never] ? never : Path extends '' ? Node : Path extends `${infer Head}.${infer Rest}` ? ResolveNodeWithVariables<ResolveNodeSegmentWithVariables<Node, Head, Variables>, Rest, Variables> : ResolveNodeSegmentWithVariables<Node, Path, Variables>;
97
+ /**
98
+ * Config value a path resolves to once its variables are supplied. Object nodes come back
99
+ * with a `getComponent` helper attached at runtime; component slots resolve to the element.
100
+ */
101
+ type ResolveParameterizedPathValue<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string, Variables> = Variables extends unknown ? ResolveNodeWithVariables<PathHead<Path> extends ResourcePathVariable ? ResourceNode<Config, Extract<VariableValue<Variables, 'resource'>, LayoutResourceKey<Resources>>> : ResourceNode<Config, PathHead<Path>>, PathTail<Path>, Variables> : never;
102
+ //#endregion
103
+ export { ConfigResourceKeys, ConfigSubResourceKeys, ParameterizedEntryPath, ParameterizedResourcePath, PathComponentKeys, PathResourceCandidates, PathSubResourceKeys, PathVariables, PathVariablesForResource, ResolveConfigNode, ResolveParameterizedPathValue, ResourceSubResourceKeys };
104
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/create-config/paths/types.ts"],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { Show } from "../../utils.mjs";
2
+ import { LayoutResourceKey, ResourceDefinition, ResourceDefinitionForKey, SubResourceDefinitionsFor, SubResourceParamForResource } from "../../resource.mjs";
3
+ import { BaseResourceConfigComponents, ResourceConfigComponentKey, SharedResourceConfigOptions } from "../types.mjs";
4
+ import { ComponentPathVariable, ExtractPathVariables, PathHead, PathTail, ResourcePathVariable, SubResourcePathVariable } from "./variables.mjs";
5
+ import { JSX } from "react";
6
+
7
+ //#region src/create-config/paths/types.d.ts
8
+ /** Recursion cap for path types. Must stay aligned with `MAX_PATH_DEPTH` in `./generate`. */
9
+ type MaxPathDepth = 6;
10
+ type ComponentSlotKey = keyof BaseResourceConfigComponents;
11
+ type SharedBranchKey = keyof SharedResourceConfigOptions;
12
+ /** A component slot segment: a fixed slot key, or the `$component` variable. */
13
+ type ComponentSegment = ComponentSlotKey | ComponentPathVariable;
14
+ /**
15
+ * Path tail selecting a component on the current node: a slot, a shared branch, or a
16
+ * slot inside a shared branch (`detail.errorComponent`, `new.$component`, …).
17
+ */
18
+ type ComponentTailPath = ComponentSegment | SharedBranchKey | `${SharedBranchKey}.${ComponentSegment}`;
19
+ type NestedSubResourceDefinitions<Def extends ResourceDefinition> = Def extends {
20
+ subResources: infer Nested extends ReadonlyArray<ResourceDefinition>;
21
+ } ? Nested : readonly [];
22
+ type SubResourceTailPaths<SubDefs extends ReadonlyArray<ResourceDefinition>, DepthAcc extends readonly unknown[]> = LayoutResourceKey<SubDefs> extends infer Key extends string ? Key extends LayoutResourceKey<SubDefs> ? Key | `${Key}.${ParameterizedEntryPath<NestedSubResourceDefinitions<ResourceDefinitionForKey<SubDefs, Key>>, readonly [...DepthAcc, unknown]>}` : never : never;
23
+ /**
24
+ * Every path tail valid below one config node: component slots, declared sub-resource
25
+ * slugs, or a single `$subResource` variable. One `$subResource` segment stands for the
26
+ * whole remaining sub-resource chain, since its value may be `{ value, subResource }`.
27
+ */
28
+ type ParameterizedEntryPath<SubDefs extends ReadonlyArray<ResourceDefinition>, DepthAcc extends readonly unknown[] = readonly []> = ComponentTailPath | ([SubDefs] extends [readonly []] ? never : DepthAcc['length'] extends MaxPathDepth ? never : SubResourceTailPaths<SubDefs, DepthAcc> | SubResourcePathVariable | `${SubResourcePathVariable}.${ComponentTailPath}`);
29
+ type ParameterizedEntryPathForResource<Resources extends ReadonlyArray<ResourceDefinition>, Resource extends LayoutResourceKey<Resources>> = ParameterizedEntryPath<SubResourceDefinitionsFor<Resources, Resource>>;
30
+ type AnyParameterizedEntryPath<Resources extends ReadonlyArray<ResourceDefinition>> = LayoutResourceKey<Resources> extends infer Resource ? Resource extends LayoutResourceKey<Resources> ? ParameterizedEntryPathForResource<Resources, Resource> : never : never;
31
+ /**
32
+ * Paths accepted by `forPaths` and `createGetComponent`. Segments whose value depends on
33
+ * the config collapse into variables (`$resource`, `$subResource`, `$component`), and the
34
+ * fixed slots stay literal, so `'$resource.detail.$component'` leaves `resource` and
35
+ * `component` to the call site.
36
+ */
37
+ type ParameterizedResourcePath<Resources extends ReadonlyArray<ResourceDefinition>> = LayoutResourceKey<Resources> | ResourcePathVariable | (LayoutResourceKey<Resources> extends infer Resource ? Resource extends LayoutResourceKey<Resources> ? `${Resource}.${ParameterizedEntryPathForResource<Resources, Resource>}` : never : never) | `${ResourcePathVariable}.${AnyParameterizedEntryPath<Resources>}`;
38
+ type ConfigNodeOf<Node> = NonNullable<Node>;
39
+ /**
40
+ * Element slots configured on a node (`component`, `errorComponent`, …). `detail` and
41
+ * `new` are path segments, not `$component` values.
42
+ */
43
+ type ComponentKeysAtNode<Node> = ConfigNodeOf<Node> extends JSX.Element ? never : Extract<keyof ConfigNodeOf<Node>, ComponentSlotKey>;
44
+ /** Sub-resource keys configured on a node: every key that is not a component slot. */
45
+ type SubResourceKeysAtNode<Node> = ConfigNodeOf<Node> extends JSX.Element ? never : Exclude<keyof ConfigNodeOf<Node>, ResourceConfigComponentKey>;
46
+ type IndexNode<Node, Key> = Key extends keyof ConfigNodeOf<Node> ? NonNullable<ConfigNodeOf<Node>[Key]> : never;
47
+ type ComponentKeysAtNodes<Node> = Node extends unknown ? ComponentKeysAtNode<Node> : never;
48
+ /** Sub-resource keys on a node and on every node below it, matching nested params. */
49
+ type SubResourceKeysBelowNode<Node, DepthAcc extends readonly unknown[] = readonly []> = DepthAcc['length'] extends MaxPathDepth ? never : SubResourceKeysAtNode<Node> extends infer Key ? Key extends SubResourceKeysAtNode<Node> ? Key | SubResourceKeysBelowNode<IndexNode<Node, Key>, readonly [...DepthAcc, unknown]> : never : never;
50
+ /** Every node reachable below `Node`, used when a `$subResource` value is not yet known. */
51
+ type AnySubResourceNode<Node, DepthAcc extends readonly unknown[] = readonly []> = DepthAcc['length'] extends MaxPathDepth ? never : SubResourceKeysAtNode<Node> extends infer Key ? Key extends SubResourceKeysAtNode<Node> ? IndexNode<Node, Key> | AnySubResourceNode<IndexNode<Node, Key>, readonly [...DepthAcc, unknown]> : never : never;
52
+ type ResolveConfigNodeSegment<Node, Segment extends string> = Node extends unknown ? Segment extends SubResourcePathVariable ? AnySubResourceNode<Node> : Segment extends ComponentPathVariable ? IndexNode<Node, ComponentKeysAtNode<Node>> : IndexNode<Node, Segment> : never;
53
+ /**
54
+ * Walks `Path` on a config node. Open variables resolve to every value they could take,
55
+ * so `never` means the path cannot exist on that node.
56
+ */
57
+ type ResolveConfigNode<Node, Path extends string> = [Node] extends [never] ? never : Path extends '' ? Node : Path extends `${infer Head}.${infer Rest}` ? ResolveConfigNode<ResolveConfigNodeSegment<Node, Head>, Rest> : ResolveConfigNodeSegment<Node, Path>;
58
+ /** Resource keys present in a created config, falling back to every declared resource. */
59
+ type ConfigResourceKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config> = [Extract<LayoutResourceKey<Resources>, keyof Config>] extends [never] ? LayoutResourceKey<Resources> : Extract<LayoutResourceKey<Resources>, keyof Config>;
60
+ type ResourceNode<Config, Resource> = Resource extends keyof Config ? NonNullable<Config[Resource]> : never;
61
+ /**
62
+ * Resources a path can target: for `$resource` paths, only those whose config satisfies
63
+ * the path's fixed segments, so `'$resource.detail.$component'` excludes resources
64
+ * without a `detail`.
65
+ */
66
+ type PathResourceCandidates<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathHead<Path> extends ResourcePathVariable ? ConfigResourceKeys<Resources, Config> extends infer Resource ? Resource extends ConfigResourceKeys<Resources, Config> ? [ResolveConfigNode<ResourceNode<Config, Resource>, PathTail<Path>>] extends [never] ? never : Resource : never : never : Extract<PathHead<Path>, ConfigResourceKeys<Resources, Config>>;
67
+ type StripTrailingComponentVariable<Path extends string> = Path extends ComponentPathVariable ? '' : Path extends `${infer Head}.${ComponentPathVariable}` ? Head : Path;
68
+ /** Component slot keys configured on the node a path resolves to. */
69
+ type PathComponentKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathResourceCandidates<Resources, Config, Path> extends infer Resource ? Resource extends PathResourceCandidates<Resources, Config, Path> ? ComponentKeysAtNodes<ResolveConfigNode<ResourceNode<Config, Resource>, StripTrailingComponentVariable<PathTail<Path>>>> : never : never;
70
+ /** Sub-resource keys valid for the `$subResource` segment of a path. */
71
+ type PathSubResourceKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathResourceCandidates<Resources, Config, Path> extends infer Resource ? Resource extends PathResourceCandidates<Resources, Config, Path> ? SubResourceKeysBelowNode<ResourceNode<Config, Resource>> : never : never;
72
+ /** Sub-resource keys configured for one resource, at any depth. */
73
+ type ResourceSubResourceKeys<Config, Resource> = SubResourceKeysBelowNode<ResourceNode<Config, Resource>>;
74
+ /** Every sub-resource key configured anywhere in a config map. */
75
+ type ConfigSubResourceKeys<Resources extends ReadonlyArray<ResourceDefinition>, Config> = ConfigResourceKeys<Resources, Config> extends infer Resource ? Resource extends ConfigResourceKeys<Resources, Config> ? ResourceSubResourceKeys<Config, Resource> : never : never;
76
+ type ComponentKeysForPath<Config, Resource, Tail extends string> = ComponentKeysAtNodes<ResolveConfigNode<ResourceNode<Config, Resource>, StripTrailingComponentVariable<Tail>>> extends infer Keys ? [Keys] extends [never] ? ComponentSlotKey : Keys : ComponentSlotKey;
77
+ /** Params a path requires for one target resource. */
78
+ type PathVariablesForResource<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string, Resource extends LayoutResourceKey<Resources>> = Show<('resource' extends ExtractPathVariables<Path> ? {
79
+ resource: Resource;
80
+ } : {}) & ('subResource' extends ExtractPathVariables<Path> ? {
81
+ subResource: SubResourceParamForResource<Resources, Resource>;
82
+ } : {}) & ('component' extends ExtractPathVariables<Path> ? {
83
+ component: ComponentKeysForPath<Config, Resource, PathTail<Path>>;
84
+ } : {})>;
85
+ /**
86
+ * Params a path requires, as one object per resource the path can target. A path with no
87
+ * variables resolves to `{}`.
88
+ */
89
+ type PathVariables<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string> = PathResourceCandidates<Resources, Config, Path> extends infer Resource ? Resource extends LayoutResourceKey<Resources> ? PathVariablesForResource<Resources, Config, Path, Resource> : never : never;
90
+ type VariableValue<Variables, Name extends string> = Name extends keyof Variables ? Variables[Name] : never;
91
+ type ResolveSubResourceParamNode<Node, Param, DepthAcc extends readonly unknown[] = readonly []> = DepthAcc['length'] extends MaxPathDepth ? never : Param extends string ? IndexNode<Node, Param> : Param extends {
92
+ value: infer Value extends string;
93
+ subResource: infer Nested;
94
+ } ? ResolveSubResourceParamNode<IndexNode<Node, Value>, Nested, readonly [...DepthAcc, unknown]> : never;
95
+ type ResolveNodeSegmentWithVariables<Node, Segment extends string, Variables> = Node extends unknown ? Segment extends SubResourcePathVariable ? ResolveSubResourceParamNode<Node, VariableValue<Variables, 'subResource'>> : Segment extends ComponentPathVariable ? IndexNode<Node, Extract<VariableValue<Variables, 'component'>, string>> : IndexNode<Node, Segment> : never;
96
+ type ResolveNodeWithVariables<Node, Path extends string, Variables> = [Node] extends [never] ? never : Path extends '' ? Node : Path extends `${infer Head}.${infer Rest}` ? ResolveNodeWithVariables<ResolveNodeSegmentWithVariables<Node, Head, Variables>, Rest, Variables> : ResolveNodeSegmentWithVariables<Node, Path, Variables>;
97
+ /**
98
+ * Config value a path resolves to once its variables are supplied. Object nodes come back
99
+ * with a `getComponent` helper attached at runtime; component slots resolve to the element.
100
+ */
101
+ type ResolveParameterizedPathValue<Resources extends ReadonlyArray<ResourceDefinition>, Config, Path extends string, Variables> = Variables extends unknown ? ResolveNodeWithVariables<PathHead<Path> extends ResourcePathVariable ? ResourceNode<Config, Extract<VariableValue<Variables, 'resource'>, LayoutResourceKey<Resources>>> : ResourceNode<Config, PathHead<Path>>, PathTail<Path>, Variables> : never;
102
+ //#endregion
103
+ export { ConfigResourceKeys, ConfigSubResourceKeys, ParameterizedEntryPath, ParameterizedResourcePath, PathComponentKeys, PathResourceCandidates, PathSubResourceKeys, PathVariables, PathVariablesForResource, ResolveConfigNode, ResolveParameterizedPathValue, ResourceSubResourceKeys };
104
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/create-config/paths/types.ts"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+
2
+ //#region src/create-config/paths/variables.ts
3
+ /**
4
+ * Prefix marking a path segment as a caller-supplied variable. `'$resource.detail.$component'`
5
+ * leaves `resource` and `component` open, while `detail` is fixed.
6
+ */
7
+ const PATH_VARIABLE_IDENTIFIER = "$";
8
+ function createPathVariable(name) {
9
+ return `${"$"}${name}`;
10
+ }
11
+ function isPathVariableSegment(segment) {
12
+ return segment.startsWith("$");
13
+ }
14
+ /** Variable name for a segment, or `undefined` when the segment is a fixed key. */
15
+ function readPathVariableName(segment) {
16
+ return isPathVariableSegment(segment) ? segment.slice(1) : void 0;
17
+ }
18
+ /** Variable names declared by `path`, in order of appearance and without duplicates. */
19
+ function extractPathVariables(path) {
20
+ const names = /* @__PURE__ */ new Set();
21
+ for (const segment of path.split(".")) {
22
+ const name = readPathVariableName(segment);
23
+ if (name !== void 0 && name.length > 0) names.add(name);
24
+ }
25
+ return [...names];
26
+ }
27
+
28
+ //#endregion
29
+ exports.createPathVariable = createPathVariable;
30
+ exports.extractPathVariables = extractPathVariables;
31
+ exports.readPathVariableName = readPathVariableName;
32
+ //# sourceMappingURL=variables.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.cjs","names":[],"sources":["../../../src/create-config/paths/variables.ts"],"sourcesContent":["/**\n * Prefix marking a path segment as a caller-supplied variable. `'$resource.detail.$component'`\n * leaves `resource` and `component` open, while `detail` is fixed.\n */\nexport const PATH_VARIABLE_IDENTIFIER = '$';\n\nexport type PathVariableIdentifier = typeof PATH_VARIABLE_IDENTIFIER;\n\n/** A single variable path segment, e.g. `PathVariable<'resource'>` is `'$resource'`. */\nexport type PathVariable<Name extends string> =\n `${PathVariableIdentifier}${Name}`;\n\nexport type ResourcePathVariable = PathVariable<'resource'>;\nexport type SubResourcePathVariable = PathVariable<'subResource'>;\nexport type ComponentPathVariable = PathVariable<'component'>;\n\n/** Variable names a path may leave open. */\nexport type PathVariableName = 'resource' | 'subResource' | 'component';\n\nexport type RemovePathVariableIdentifier<Segment extends string> =\n Segment extends PathVariable<infer Name> ? Name : Segment;\n\ntype ExtractSegmentVariable<Segment extends string> =\n Segment extends PathVariable<infer Name> ? Name : never;\n\n/**\n * Variable names declared by a dot-separated path.\n *\n * @example\n * ```ts\n * ExtractPathVariables<'$resource.detail.$component'>\n * // ^? 'resource' | 'component'\n * ```\n */\nexport type ExtractPathVariables<Path extends string> =\n Path extends `${infer Segment}.${infer Rest}`\n ? ExtractSegmentVariable<Segment> | ExtractPathVariables<Rest>\n : ExtractSegmentVariable<Path>;\n\n/** Whether `Path` leaves any variable open. */\nexport type PathHasVariables<Path extends string> = [\n ExtractPathVariables<Path>,\n] extends [never]\n ? false\n : true;\n\n/** First segment of a dot-separated path. */\nexport type PathHead<Path extends string> =\n Path extends `${infer Head}.${string}` ? Head : Path;\n\n/** Everything after the first segment of a dot-separated path (`''` when there is nothing left). */\nexport type PathTail<Path extends string> =\n Path extends `${string}.${infer Rest}` ? Rest : '';\n\nexport function createPathVariable<Name extends string>(\n name: Name,\n): PathVariable<Name> {\n return `${PATH_VARIABLE_IDENTIFIER}${name}`;\n}\n\nexport function isPathVariableSegment(segment: string): boolean {\n return segment.startsWith(PATH_VARIABLE_IDENTIFIER);\n}\n\n/** Variable name for a segment, or `undefined` when the segment is a fixed key. */\nexport function readPathVariableName(segment: string): string | undefined {\n return isPathVariableSegment(segment)\n ? segment.slice(PATH_VARIABLE_IDENTIFIER.length)\n : undefined;\n}\n\n/** Variable names declared by `path`, in order of appearance and without duplicates. */\nexport function extractPathVariables(path: string): string[] {\n const names = new Set<string>();\n\n for (const segment of path.split('.')) {\n const name = readPathVariableName(segment);\n\n if (name !== undefined && name.length > 0) {\n names.add(name);\n }\n }\n\n return [...names];\n}\n\nexport function pathHasVariables(path: string): boolean {\n return extractPathVariables(path).length > 0;\n}\n"],"mappings":";;;;;;AAIA,MAAa,2BAA2B;AAkDxC,SAAgB,mBACd,MACoB;CACpB,OAAO,SAA8B;AACvC;AAEA,SAAgB,sBAAsB,SAA0B;CAC9D,OAAO,QAAQ,cAAmC;AACpD;;AAGA,SAAgB,qBAAqB,SAAqC;CACxE,OAAO,sBAAsB,OAAO,IAChC,QAAQ,MAAM,CAA+B,IAC7C;AACN;;AAGA,SAAgB,qBAAqB,MAAwB;CAC3D,MAAM,wBAAQ,IAAI,IAAY;CAE9B,KAAK,MAAM,WAAW,KAAK,MAAM,GAAG,GAAG;EACrC,MAAM,OAAO,qBAAqB,OAAO;EAEzC,IAAI,SAAS,UAAa,KAAK,SAAS,GACtC,MAAM,IAAI,IAAI;CAElB;CAEA,OAAO,CAAC,GAAG,KAAK;AAClB"}
@@ -0,0 +1,32 @@
1
+ //#region src/create-config/paths/variables.d.ts
2
+ /**
3
+ * Prefix marking a path segment as a caller-supplied variable. `'$resource.detail.$component'`
4
+ * leaves `resource` and `component` open, while `detail` is fixed.
5
+ */
6
+ declare const PATH_VARIABLE_IDENTIFIER = "$";
7
+ type PathVariableIdentifier = typeof PATH_VARIABLE_IDENTIFIER;
8
+ /** A single variable path segment, e.g. `PathVariable<'resource'>` is `'$resource'`. */
9
+ type PathVariable<Name extends string> = `${PathVariableIdentifier}${Name}`;
10
+ type ResourcePathVariable = PathVariable<'resource'>;
11
+ type SubResourcePathVariable = PathVariable<'subResource'>;
12
+ type ComponentPathVariable = PathVariable<'component'>;
13
+ type ExtractSegmentVariable<Segment extends string> = Segment extends PathVariable<infer Name> ? Name : never;
14
+ /**
15
+ * Variable names declared by a dot-separated path.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * ExtractPathVariables<'$resource.detail.$component'>
20
+ * // ^? 'resource' | 'component'
21
+ * ```
22
+ */
23
+ type ExtractPathVariables<Path extends string> = Path extends `${infer Segment}.${infer Rest}` ? ExtractSegmentVariable<Segment> | ExtractPathVariables<Rest> : ExtractSegmentVariable<Path>;
24
+ /** Whether `Path` leaves any variable open. */
25
+ type PathHasVariables<Path extends string> = [ExtractPathVariables<Path>] extends [never] ? false : true;
26
+ /** First segment of a dot-separated path. */
27
+ type PathHead<Path extends string> = Path extends `${infer Head}.${string}` ? Head : Path;
28
+ /** Everything after the first segment of a dot-separated path (`''` when there is nothing left). */
29
+ type PathTail<Path extends string> = Path extends `${string}.${infer Rest}` ? Rest : '';
30
+ //#endregion
31
+ export { ComponentPathVariable, ExtractPathVariables, PATH_VARIABLE_IDENTIFIER, PathHasVariables, PathHead, PathTail, PathVariable, PathVariableIdentifier, ResourcePathVariable, SubResourcePathVariable };
32
+ //# sourceMappingURL=variables.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.d.cts","names":[],"sources":["../../../src/create-config/paths/variables.ts"],"mappings":";;AAIA;;;cAAa,wBAAA;AAAA,KAED,sBAAA,UAAgC,wBAAwB;AAApE;AAAA,KAGY,YAAA,2BACP,sBAAA,GAAyB,IAAI;AAAA,KAEtB,oBAAA,GAAuB,YAAY;AAAA,KACnC,uBAAA,GAA0B,YAAY;AAAA,KACtC,qBAAA,GAAwB,YAAY;AAAA,KAQ3C,sBAAA,2BACH,OAAA,SAAgB,YAAY,eAAe,IAAA;;;;;AAbX;AAElC;;;;KAsBY,oBAAA,wBACV,IAAA,4CACI,sBAAA,CAAuB,OAAA,IAAW,oBAAA,CAAqB,IAAA,IACvD,sBAAA,CAAuB,IAAA;AAxB7B;AAAA,KA2BY,gBAAA,yBACV,oBAAoB,CAAC,IAAA;AA5B2B;AAAA,KAkCtC,QAAA,wBACV,IAAA,qCAAyC,IAAA,GAAO,IAAI;;KAG1C,QAAA,wBACV,IAAI,qCAAqC,IAAA"}
@@ -0,0 +1,32 @@
1
+ //#region src/create-config/paths/variables.d.ts
2
+ /**
3
+ * Prefix marking a path segment as a caller-supplied variable. `'$resource.detail.$component'`
4
+ * leaves `resource` and `component` open, while `detail` is fixed.
5
+ */
6
+ declare const PATH_VARIABLE_IDENTIFIER = "$";
7
+ type PathVariableIdentifier = typeof PATH_VARIABLE_IDENTIFIER;
8
+ /** A single variable path segment, e.g. `PathVariable<'resource'>` is `'$resource'`. */
9
+ type PathVariable<Name extends string> = `${PathVariableIdentifier}${Name}`;
10
+ type ResourcePathVariable = PathVariable<'resource'>;
11
+ type SubResourcePathVariable = PathVariable<'subResource'>;
12
+ type ComponentPathVariable = PathVariable<'component'>;
13
+ type ExtractSegmentVariable<Segment extends string> = Segment extends PathVariable<infer Name> ? Name : never;
14
+ /**
15
+ * Variable names declared by a dot-separated path.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * ExtractPathVariables<'$resource.detail.$component'>
20
+ * // ^? 'resource' | 'component'
21
+ * ```
22
+ */
23
+ type ExtractPathVariables<Path extends string> = Path extends `${infer Segment}.${infer Rest}` ? ExtractSegmentVariable<Segment> | ExtractPathVariables<Rest> : ExtractSegmentVariable<Path>;
24
+ /** Whether `Path` leaves any variable open. */
25
+ type PathHasVariables<Path extends string> = [ExtractPathVariables<Path>] extends [never] ? false : true;
26
+ /** First segment of a dot-separated path. */
27
+ type PathHead<Path extends string> = Path extends `${infer Head}.${string}` ? Head : Path;
28
+ /** Everything after the first segment of a dot-separated path (`''` when there is nothing left). */
29
+ type PathTail<Path extends string> = Path extends `${string}.${infer Rest}` ? Rest : '';
30
+ //#endregion
31
+ export { ComponentPathVariable, ExtractPathVariables, PATH_VARIABLE_IDENTIFIER, PathHasVariables, PathHead, PathTail, PathVariable, PathVariableIdentifier, ResourcePathVariable, SubResourcePathVariable };
32
+ //# sourceMappingURL=variables.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.d.mts","names":[],"sources":["../../../src/create-config/paths/variables.ts"],"mappings":";;AAIA;;;cAAa,wBAAA;AAAA,KAED,sBAAA,UAAgC,wBAAwB;AAApE;AAAA,KAGY,YAAA,2BACP,sBAAA,GAAyB,IAAI;AAAA,KAEtB,oBAAA,GAAuB,YAAY;AAAA,KACnC,uBAAA,GAA0B,YAAY;AAAA,KACtC,qBAAA,GAAwB,YAAY;AAAA,KAQ3C,sBAAA,2BACH,OAAA,SAAgB,YAAY,eAAe,IAAA;;;;;AAbX;AAElC;;;;KAsBY,oBAAA,wBACV,IAAA,4CACI,sBAAA,CAAuB,OAAA,IAAW,oBAAA,CAAqB,IAAA,IACvD,sBAAA,CAAuB,IAAA;AAxB7B;AAAA,KA2BY,gBAAA,yBACV,oBAAoB,CAAC,IAAA;AA5B2B;AAAA,KAkCtC,QAAA,wBACV,IAAA,qCAAyC,IAAA,GAAO,IAAI;;KAG1C,QAAA,wBACV,IAAI,qCAAqC,IAAA"}
@@ -0,0 +1,29 @@
1
+ //#region src/create-config/paths/variables.ts
2
+ /**
3
+ * Prefix marking a path segment as a caller-supplied variable. `'$resource.detail.$component'`
4
+ * leaves `resource` and `component` open, while `detail` is fixed.
5
+ */
6
+ const PATH_VARIABLE_IDENTIFIER = "$";
7
+ function createPathVariable(name) {
8
+ return `${"$"}${name}`;
9
+ }
10
+ function isPathVariableSegment(segment) {
11
+ return segment.startsWith("$");
12
+ }
13
+ /** Variable name for a segment, or `undefined` when the segment is a fixed key. */
14
+ function readPathVariableName(segment) {
15
+ return isPathVariableSegment(segment) ? segment.slice(1) : void 0;
16
+ }
17
+ /** Variable names declared by `path`, in order of appearance and without duplicates. */
18
+ function extractPathVariables(path) {
19
+ const names = /* @__PURE__ */ new Set();
20
+ for (const segment of path.split(".")) {
21
+ const name = readPathVariableName(segment);
22
+ if (name !== void 0 && name.length > 0) names.add(name);
23
+ }
24
+ return [...names];
25
+ }
26
+
27
+ //#endregion
28
+ export { createPathVariable, extractPathVariables, readPathVariableName };
29
+ //# sourceMappingURL=variables.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.mjs","names":[],"sources":["../../../src/create-config/paths/variables.ts"],"sourcesContent":["/**\n * Prefix marking a path segment as a caller-supplied variable. `'$resource.detail.$component'`\n * leaves `resource` and `component` open, while `detail` is fixed.\n */\nexport const PATH_VARIABLE_IDENTIFIER = '$';\n\nexport type PathVariableIdentifier = typeof PATH_VARIABLE_IDENTIFIER;\n\n/** A single variable path segment, e.g. `PathVariable<'resource'>` is `'$resource'`. */\nexport type PathVariable<Name extends string> =\n `${PathVariableIdentifier}${Name}`;\n\nexport type ResourcePathVariable = PathVariable<'resource'>;\nexport type SubResourcePathVariable = PathVariable<'subResource'>;\nexport type ComponentPathVariable = PathVariable<'component'>;\n\n/** Variable names a path may leave open. */\nexport type PathVariableName = 'resource' | 'subResource' | 'component';\n\nexport type RemovePathVariableIdentifier<Segment extends string> =\n Segment extends PathVariable<infer Name> ? Name : Segment;\n\ntype ExtractSegmentVariable<Segment extends string> =\n Segment extends PathVariable<infer Name> ? Name : never;\n\n/**\n * Variable names declared by a dot-separated path.\n *\n * @example\n * ```ts\n * ExtractPathVariables<'$resource.detail.$component'>\n * // ^? 'resource' | 'component'\n * ```\n */\nexport type ExtractPathVariables<Path extends string> =\n Path extends `${infer Segment}.${infer Rest}`\n ? ExtractSegmentVariable<Segment> | ExtractPathVariables<Rest>\n : ExtractSegmentVariable<Path>;\n\n/** Whether `Path` leaves any variable open. */\nexport type PathHasVariables<Path extends string> = [\n ExtractPathVariables<Path>,\n] extends [never]\n ? false\n : true;\n\n/** First segment of a dot-separated path. */\nexport type PathHead<Path extends string> =\n Path extends `${infer Head}.${string}` ? Head : Path;\n\n/** Everything after the first segment of a dot-separated path (`''` when there is nothing left). */\nexport type PathTail<Path extends string> =\n Path extends `${string}.${infer Rest}` ? Rest : '';\n\nexport function createPathVariable<Name extends string>(\n name: Name,\n): PathVariable<Name> {\n return `${PATH_VARIABLE_IDENTIFIER}${name}`;\n}\n\nexport function isPathVariableSegment(segment: string): boolean {\n return segment.startsWith(PATH_VARIABLE_IDENTIFIER);\n}\n\n/** Variable name for a segment, or `undefined` when the segment is a fixed key. */\nexport function readPathVariableName(segment: string): string | undefined {\n return isPathVariableSegment(segment)\n ? segment.slice(PATH_VARIABLE_IDENTIFIER.length)\n : undefined;\n}\n\n/** Variable names declared by `path`, in order of appearance and without duplicates. */\nexport function extractPathVariables(path: string): string[] {\n const names = new Set<string>();\n\n for (const segment of path.split('.')) {\n const name = readPathVariableName(segment);\n\n if (name !== undefined && name.length > 0) {\n names.add(name);\n }\n }\n\n return [...names];\n}\n\nexport function pathHasVariables(path: string): boolean {\n return extractPathVariables(path).length > 0;\n}\n"],"mappings":";;;;;AAIA,MAAa,2BAA2B;AAkDxC,SAAgB,mBACd,MACoB;CACpB,OAAO,SAA8B;AACvC;AAEA,SAAgB,sBAAsB,SAA0B;CAC9D,OAAO,QAAQ,cAAmC;AACpD;;AAGA,SAAgB,qBAAqB,SAAqC;CACxE,OAAO,sBAAsB,OAAO,IAChC,QAAQ,MAAM,CAA+B,IAC7C;AACN;;AAGA,SAAgB,qBAAqB,MAAwB;CAC3D,MAAM,wBAAQ,IAAI,IAAY;CAE9B,KAAK,MAAM,WAAW,KAAK,MAAM,GAAG,GAAG;EACrC,MAAM,OAAO,qBAAqB,OAAO;EAEzC,IAAI,SAAS,UAAa,KAAK,SAAS,GACtC,MAAM,IAAI,IAAI;CAElB;CAEA,OAAO,CAAC,GAAG,KAAK;AAClB"}
@@ -20,15 +20,35 @@ type SharedResourceConfigOptions = {
20
20
  };
21
21
  type ResourceConfigComponents = BaseResourceConfigComponents & SharedResourceConfigOptions;
22
22
  type ResourceConfigComponentKey = keyof ResourceConfigComponents;
23
- /** Config entry for one sub-resource node (recurses when the layout tree has children). */
23
+ /**
24
+ * Config keys that cannot be used as nested sub-resource slugs. They already
25
+ * name component slots (`component`, `errorComponent`, …) or shared branches
26
+ * (`detail`, `new`). Top-level resource names may still use these strings.
27
+ */
28
+ type ReservedResourceSlug = ResourceConfigComponentKey;
29
+ type ReservedResourceSlugMessage<Slug extends string> = `The resource slug "${Slug}" is reserved for config keys`;
30
+ type UnreservedResourceSlug<Slug extends string> = string extends Slug ? Slug : Slug extends ReservedResourceSlug ? ReservedResourceSlugMessage<Slug> : Slug;
31
+ type AssertUnreservedSubResourceDefinition<Resource> = Resource extends string ? UnreservedResourceSlug<Resource> : Resource extends {
32
+ value: infer Value extends string;
33
+ subResources: infer Subs;
34
+ } ? Omit<Resource, 'value' | 'subResources'> & {
35
+ value: UnreservedResourceSlug<Value>;
36
+ subResources: Subs extends ReadonlyArray<unknown> ? { [Index in keyof Subs]: AssertUnreservedSubResourceDefinition<Subs[Index]> } : Subs;
37
+ } : Resource;
38
+ type AssertUnreservedResourceDefinition<Resource> = Resource extends string ? Resource : Resource extends {
39
+ subResources: infer Subs;
40
+ } ? Omit<Resource, 'subResources'> & {
41
+ subResources: Subs extends ReadonlyArray<unknown> ? { [Index in keyof Subs]: AssertUnreservedSubResourceDefinition<Subs[Index]> } : Subs;
42
+ } : Resource;
43
+ type AssertUnreservedResources<Resources extends ReadonlyArray<unknown>> = { [Index in keyof Resources]: AssertUnreservedResourceDefinition<Resources[Index]> };
44
+ /**
45
+ * Config entry for one sub-resource node. Nested sub-resources are keyed directly by
46
+ * their layout slug (there is no `subResources` wrapper in the config).
47
+ */
24
48
  type SubResourceConfigComponentsFor<Resources extends ReadonlyArray<ResourceDefinition>, SubDef extends ResourceDefinition> = ResourceConfigComponents & (SubDef extends {
25
49
  subResources: infer Nested extends ReadonlyArray<ResourceDefinition>;
26
- } ? {
27
- subResources?: { [K in LayoutResourceKey<Nested>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<Nested, K>> };
28
- } : {});
29
- type SubResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>, Resource extends LayoutResourceKey<Resources>> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []] ? {} : {
30
- subResources?: { [K in LayoutResourceKey<SubResourceDefinitionsFor<Resources, Resource>>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<SubResourceDefinitionsFor<Resources, Resource>, K>> };
31
- };
50
+ } ? { [K in LayoutResourceKey<Nested>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<Nested, K>> } : {});
51
+ type SubResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>, Resource extends LayoutResourceKey<Resources>> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []] ? {} : { [K in LayoutResourceKey<SubResourceDefinitionsFor<Resources, Resource>>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<SubResourceDefinitionsFor<Resources, Resource>, K>> };
32
52
  type ResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>> = { [resource in LayoutResourceKey<Resources>]: ResourceConfigComponents & SubResourceConfig<Resources, resource> };
33
53
  /**
34
54
  * Parameter type for {@link CreateResourceConfigFn}. Intersects the inferred `Config`
@@ -38,5 +58,5 @@ type ResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>> = { [re
38
58
  type ResourceConfigInput<Resources extends ReadonlyArray<ResourceDefinition>, Config extends Partial<ResourceConfig<Resources>>> = Partial<ResourceConfig<Resources>> & Config;
39
59
  type ResourceConfigMap<Resources extends ReadonlyArray<ResourceDefinition>> = Partial<ResourceConfig<Resources>>;
40
60
  //#endregion
41
- export { BaseResourceConfigComponents, ResourceConfig, ResourceConfigComponentKey, ResourceConfigComponents, ResourceConfigInput, ResourceConfigMap, SharedResourceConfigOptions, SubResourceConfig, SubResourceConfigComponentsFor };
61
+ export { AssertUnreservedResources, BaseResourceConfigComponents, ResourceConfig, ResourceConfigComponentKey, ResourceConfigComponents, ResourceConfigInput, ResourceConfigMap, SharedResourceConfigOptions, SubResourceConfig, SubResourceConfigComponentsFor };
42
62
  //# sourceMappingURL=types.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/create-config/types.ts"],"mappings":";;;;KAQY,4BAAA;EACV,SAAA,EAAW,GAAA,CAAI,OAAA;EACf,cAAA,GAAiB,GAAA,CAAI,OAAA;EACrB,gBAAA,GAAmB,GAAA,CAAI,OAAA;EACvB,iBAAA,GAAoB,GAAA,CAAI,OAAA;AAAA;AAAA,KASd,2BAAA;EATqB;;;EAa/B,GAAA,GAAM,4BAAA;EAhBS;;;EAoBf,MAAA,GAAS,4BAA4B;AAAA;AAAA,KAG3B,wBAAA,GAA2B,4BAAA,GACrC,2BAA2B;AAAA,KAEjB,0BAAA,SAAmC,wBAAwB;;KAG3D,8BAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,kBAAA,IACb,wBAAA,IACD,MAAA;EACC,YAAA,uBAAmC,aAAA,CAAc,kBAAA;AAAA;EAG7C,YAAA,WACQ,iBAAA,CAAkB,MAAA,KAAW,8BAAA,CACjC,SAAA,EACA,wBAAA,CAAyB,MAAA,EAAQ,CAAA;AAAA;AAAA,KAMjC,iBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,MAChC,yBAAA,CAA0B,SAAA,EAAW,QAAA;EAGpC,YAAA,WACQ,iBAAA,CACJ,yBAAA,CAA0B,SAAA,EAAW,QAAA,MAClC,8BAAA,CACH,SAAA,EACA,wBAAA,CACE,yBAAA,CAA0B,SAAA,EAAW,QAAA,GACrC,CAAA;AAAA;AAAA,KAMA,cAAA,mBACQ,aAAA,CAAc,kBAAA,oBAEnB,iBAAA,CAAkB,SAAA,IAAa,wBAAA,GAC1C,iBAAA,CAAkB,SAAA,EAAW,QAAA;;;;AA7CJ;AAE7B;KAmDY,mBAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,OAAA,CAAQ,cAAA,CAAe,SAAA,MACpC,OAAA,CAAQ,cAAA,CAAe,SAAA,KAAc,MAAA;AAAA,KAE7B,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,OAAA,CAAQ,cAAA,CAAe,SAAA"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/create-config/types.ts"],"mappings":";;;;KAQY,4BAAA;EACV,SAAA,EAAW,GAAA,CAAI,OAAA;EACf,cAAA,GAAiB,GAAA,CAAI,OAAA;EACrB,gBAAA,GAAmB,GAAA,CAAI,OAAA;EACvB,iBAAA,GAAoB,GAAA,CAAI,OAAA;AAAA;AAAA,KASd,2BAAA;EATqB;;;EAa/B,GAAA,GAAM,4BAAA;EAhBS;;;EAoBf,MAAA,GAAS,4BAA4B;AAAA;AAAA,KAG3B,wBAAA,GAA2B,4BAAA,GACrC,2BAA2B;AAAA,KAEjB,0BAAA,SAAmC,wBAAwB;;;;;AAvBtC;KA8B5B,oBAAA,GAAuB,0BAA0B;AAAA,KAEjD,2BAAA,8CACmB,IAAI;AAAA,KAEvB,sBAAA,uCAA6D,IAAA,GAC9D,IAAA,GACA,IAAA,SAAa,oBAAA,GACX,2BAAA,CAA4B,IAAA,IAC5B,IAAA;AAAA,KAED,qCAAA,aAAkD,QAAA,kBACnD,sBAAA,CAAuB,QAAA,IACvB,QAAA;EACI,KAAA;EACA,YAAA;AAAA,IAEF,IAAA,CAAK,QAAA;EACH,KAAA,EAAO,sBAAA,CAAuB,KAAA;EAC9B,YAAA,EAAc,IAAA,SAAa,aAAA,8BAEL,IAAA,GAAO,qCAAA,CACrB,IAAA,CAAK,KAAA,OAGT,IAAA;AAAA,IAEN,QAAA;AAAA,KAED,kCAAA,aAA+C,QAAA,kBAChD,QAAA,GACA,QAAA;EACI,YAAA;AAAA,IAEF,IAAA,CAAK,QAAA;EACH,YAAA,EAAc,IAAA,SAAa,aAAA,8BAEL,IAAA,GAAO,qCAAA,CACrB,IAAA,CAAK,KAAA,OAGT,IAAA;AAAA,IAEN,QAAA;AAAA,KAEM,yBAAA,mBACQ,aAAA,+BAEF,SAAA,GAAY,kCAAA,CAC1B,SAAA,CAAU,KAAA;;;AAjDwC;AAAA;KAyD1C,8BAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,kBAAA,IACb,wBAAA,IACD,MAAA;EACC,YAAA,uBAAmC,aAAA,CAAc,kBAAA;AAAA,YAGvC,iBAAA,CAAkB,MAAA,KAAW,8BAAA,CACjC,SAAA,EACA,wBAAA,CAAyB,MAAA,EAAQ,CAAA;AAAA,KAK/B,iBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,MAChC,yBAAA,CAA0B,SAAA,EAAW,QAAA,wCAG9B,iBAAA,CACJ,yBAAA,CAA0B,SAAA,EAAW,QAAA,MAClC,8BAAA,CACH,SAAA,EACA,wBAAA,CACE,yBAAA,CAA0B,SAAA,EAAW,QAAA,GACrC,CAAA;AAAA,KAKE,cAAA,mBACQ,aAAA,CAAc,kBAAA,oBAEnB,iBAAA,CAAkB,SAAA,IAAa,wBAAA,GAC1C,iBAAA,CAAkB,SAAA,EAAW,QAAA;;;;;;KAQrB,mBAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,OAAA,CAAQ,cAAA,CAAe,SAAA,MACpC,OAAA,CAAQ,cAAA,CAAe,SAAA,KAAc,MAAA;AAAA,KAE7B,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,OAAA,CAAQ,cAAA,CAAe,SAAA"}
@@ -20,15 +20,35 @@ type SharedResourceConfigOptions = {
20
20
  };
21
21
  type ResourceConfigComponents = BaseResourceConfigComponents & SharedResourceConfigOptions;
22
22
  type ResourceConfigComponentKey = keyof ResourceConfigComponents;
23
- /** Config entry for one sub-resource node (recurses when the layout tree has children). */
23
+ /**
24
+ * Config keys that cannot be used as nested sub-resource slugs. They already
25
+ * name component slots (`component`, `errorComponent`, …) or shared branches
26
+ * (`detail`, `new`). Top-level resource names may still use these strings.
27
+ */
28
+ type ReservedResourceSlug = ResourceConfigComponentKey;
29
+ type ReservedResourceSlugMessage<Slug extends string> = `The resource slug "${Slug}" is reserved for config keys`;
30
+ type UnreservedResourceSlug<Slug extends string> = string extends Slug ? Slug : Slug extends ReservedResourceSlug ? ReservedResourceSlugMessage<Slug> : Slug;
31
+ type AssertUnreservedSubResourceDefinition<Resource> = Resource extends string ? UnreservedResourceSlug<Resource> : Resource extends {
32
+ value: infer Value extends string;
33
+ subResources: infer Subs;
34
+ } ? Omit<Resource, 'value' | 'subResources'> & {
35
+ value: UnreservedResourceSlug<Value>;
36
+ subResources: Subs extends ReadonlyArray<unknown> ? { [Index in keyof Subs]: AssertUnreservedSubResourceDefinition<Subs[Index]> } : Subs;
37
+ } : Resource;
38
+ type AssertUnreservedResourceDefinition<Resource> = Resource extends string ? Resource : Resource extends {
39
+ subResources: infer Subs;
40
+ } ? Omit<Resource, 'subResources'> & {
41
+ subResources: Subs extends ReadonlyArray<unknown> ? { [Index in keyof Subs]: AssertUnreservedSubResourceDefinition<Subs[Index]> } : Subs;
42
+ } : Resource;
43
+ type AssertUnreservedResources<Resources extends ReadonlyArray<unknown>> = { [Index in keyof Resources]: AssertUnreservedResourceDefinition<Resources[Index]> };
44
+ /**
45
+ * Config entry for one sub-resource node. Nested sub-resources are keyed directly by
46
+ * their layout slug (there is no `subResources` wrapper in the config).
47
+ */
24
48
  type SubResourceConfigComponentsFor<Resources extends ReadonlyArray<ResourceDefinition>, SubDef extends ResourceDefinition> = ResourceConfigComponents & (SubDef extends {
25
49
  subResources: infer Nested extends ReadonlyArray<ResourceDefinition>;
26
- } ? {
27
- subResources?: { [K in LayoutResourceKey<Nested>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<Nested, K>> };
28
- } : {});
29
- type SubResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>, Resource extends LayoutResourceKey<Resources>> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []] ? {} : {
30
- subResources?: { [K in LayoutResourceKey<SubResourceDefinitionsFor<Resources, Resource>>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<SubResourceDefinitionsFor<Resources, Resource>, K>> };
31
- };
50
+ } ? { [K in LayoutResourceKey<Nested>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<Nested, K>> } : {});
51
+ type SubResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>, Resource extends LayoutResourceKey<Resources>> = [SubResourceDefinitionsFor<Resources, Resource>] extends [readonly []] ? {} : { [K in LayoutResourceKey<SubResourceDefinitionsFor<Resources, Resource>>]?: SubResourceConfigComponentsFor<Resources, ResourceDefinitionForKey<SubResourceDefinitionsFor<Resources, Resource>, K>> };
32
52
  type ResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>> = { [resource in LayoutResourceKey<Resources>]: ResourceConfigComponents & SubResourceConfig<Resources, resource> };
33
53
  /**
34
54
  * Parameter type for {@link CreateResourceConfigFn}. Intersects the inferred `Config`
@@ -38,5 +58,5 @@ type ResourceConfig<Resources extends ReadonlyArray<ResourceDefinition>> = { [re
38
58
  type ResourceConfigInput<Resources extends ReadonlyArray<ResourceDefinition>, Config extends Partial<ResourceConfig<Resources>>> = Partial<ResourceConfig<Resources>> & Config;
39
59
  type ResourceConfigMap<Resources extends ReadonlyArray<ResourceDefinition>> = Partial<ResourceConfig<Resources>>;
40
60
  //#endregion
41
- export { BaseResourceConfigComponents, ResourceConfig, ResourceConfigComponentKey, ResourceConfigComponents, ResourceConfigInput, ResourceConfigMap, SharedResourceConfigOptions, SubResourceConfig, SubResourceConfigComponentsFor };
61
+ export { AssertUnreservedResources, BaseResourceConfigComponents, ResourceConfig, ResourceConfigComponentKey, ResourceConfigComponents, ResourceConfigInput, ResourceConfigMap, SharedResourceConfigOptions, SubResourceConfig, SubResourceConfigComponentsFor };
42
62
  //# sourceMappingURL=types.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/create-config/types.ts"],"mappings":";;;;KAQY,4BAAA;EACV,SAAA,EAAW,GAAA,CAAI,OAAA;EACf,cAAA,GAAiB,GAAA,CAAI,OAAA;EACrB,gBAAA,GAAmB,GAAA,CAAI,OAAA;EACvB,iBAAA,GAAoB,GAAA,CAAI,OAAA;AAAA;AAAA,KASd,2BAAA;EATqB;;;EAa/B,GAAA,GAAM,4BAAA;EAhBS;;;EAoBf,MAAA,GAAS,4BAA4B;AAAA;AAAA,KAG3B,wBAAA,GAA2B,4BAAA,GACrC,2BAA2B;AAAA,KAEjB,0BAAA,SAAmC,wBAAwB;;KAG3D,8BAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,kBAAA,IACb,wBAAA,IACD,MAAA;EACC,YAAA,uBAAmC,aAAA,CAAc,kBAAA;AAAA;EAG7C,YAAA,WACQ,iBAAA,CAAkB,MAAA,KAAW,8BAAA,CACjC,SAAA,EACA,wBAAA,CAAyB,MAAA,EAAQ,CAAA;AAAA;AAAA,KAMjC,iBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,MAChC,yBAAA,CAA0B,SAAA,EAAW,QAAA;EAGpC,YAAA,WACQ,iBAAA,CACJ,yBAAA,CAA0B,SAAA,EAAW,QAAA,MAClC,8BAAA,CACH,SAAA,EACA,wBAAA,CACE,yBAAA,CAA0B,SAAA,EAAW,QAAA,GACrC,CAAA;AAAA;AAAA,KAMA,cAAA,mBACQ,aAAA,CAAc,kBAAA,oBAEnB,iBAAA,CAAkB,SAAA,IAAa,wBAAA,GAC1C,iBAAA,CAAkB,SAAA,EAAW,QAAA;;;;AA7CJ;AAE7B;KAmDY,mBAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,OAAA,CAAQ,cAAA,CAAe,SAAA,MACpC,OAAA,CAAQ,cAAA,CAAe,SAAA,KAAc,MAAA;AAAA,KAE7B,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,OAAA,CAAQ,cAAA,CAAe,SAAA"}
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/create-config/types.ts"],"mappings":";;;;KAQY,4BAAA;EACV,SAAA,EAAW,GAAA,CAAI,OAAA;EACf,cAAA,GAAiB,GAAA,CAAI,OAAA;EACrB,gBAAA,GAAmB,GAAA,CAAI,OAAA;EACvB,iBAAA,GAAoB,GAAA,CAAI,OAAA;AAAA;AAAA,KASd,2BAAA;EATqB;;;EAa/B,GAAA,GAAM,4BAAA;EAhBS;;;EAoBf,MAAA,GAAS,4BAA4B;AAAA;AAAA,KAG3B,wBAAA,GAA2B,4BAAA,GACrC,2BAA2B;AAAA,KAEjB,0BAAA,SAAmC,wBAAwB;;;;;AAvBtC;KA8B5B,oBAAA,GAAuB,0BAA0B;AAAA,KAEjD,2BAAA,8CACmB,IAAI;AAAA,KAEvB,sBAAA,uCAA6D,IAAA,GAC9D,IAAA,GACA,IAAA,SAAa,oBAAA,GACX,2BAAA,CAA4B,IAAA,IAC5B,IAAA;AAAA,KAED,qCAAA,aAAkD,QAAA,kBACnD,sBAAA,CAAuB,QAAA,IACvB,QAAA;EACI,KAAA;EACA,YAAA;AAAA,IAEF,IAAA,CAAK,QAAA;EACH,KAAA,EAAO,sBAAA,CAAuB,KAAA;EAC9B,YAAA,EAAc,IAAA,SAAa,aAAA,8BAEL,IAAA,GAAO,qCAAA,CACrB,IAAA,CAAK,KAAA,OAGT,IAAA;AAAA,IAEN,QAAA;AAAA,KAED,kCAAA,aAA+C,QAAA,kBAChD,QAAA,GACA,QAAA;EACI,YAAA;AAAA,IAEF,IAAA,CAAK,QAAA;EACH,YAAA,EAAc,IAAA,SAAa,aAAA,8BAEL,IAAA,GAAO,qCAAA,CACrB,IAAA,CAAK,KAAA,OAGT,IAAA;AAAA,IAEN,QAAA;AAAA,KAEM,yBAAA,mBACQ,aAAA,+BAEF,SAAA,GAAY,kCAAA,CAC1B,SAAA,CAAU,KAAA;;;AAjDwC;AAAA;KAyD1C,8BAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,kBAAA,IACb,wBAAA,IACD,MAAA;EACC,YAAA,uBAAmC,aAAA,CAAc,kBAAA;AAAA,YAGvC,iBAAA,CAAkB,MAAA,KAAW,8BAAA,CACjC,SAAA,EACA,wBAAA,CAAyB,MAAA,EAAQ,CAAA;AAAA,KAK/B,iBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,MAChC,yBAAA,CAA0B,SAAA,EAAW,QAAA,wCAG9B,iBAAA,CACJ,yBAAA,CAA0B,SAAA,EAAW,QAAA,MAClC,8BAAA,CACH,SAAA,EACA,wBAAA,CACE,yBAAA,CAA0B,SAAA,EAAW,QAAA,GACrC,CAAA;AAAA,KAKE,cAAA,mBACQ,aAAA,CAAc,kBAAA,oBAEnB,iBAAA,CAAkB,SAAA,IAAa,wBAAA,GAC1C,iBAAA,CAAkB,SAAA,EAAW,QAAA;;;;;;KAQrB,mBAAA,mBACQ,aAAA,CAAc,kBAAA,kBACjB,OAAA,CAAQ,cAAA,CAAe,SAAA,MACpC,OAAA,CAAQ,cAAA,CAAe,SAAA,KAAc,MAAA;AAAA,KAE7B,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,OAAA,CAAQ,cAAA,CAAe,SAAA"}
@@ -0,0 +1,21 @@
1
+ const require_react_layout_error = require('./react-layout-error.cjs');
2
+
3
+ //#region src/errors/invalid-component.ts
4
+ const scope = "component";
5
+ /** Thrown when a requested component slot cannot be resolved. */
6
+ var InvalidComponentError = class extends require_react_layout_error.createReactLayoutError({
7
+ code: "invalidComponent",
8
+ scope
9
+ })((scope, { component, path, resource, validComponents, reason }) => {
10
+ const quotedComponent = JSON.stringify(component) ?? `"${String(component)}"`;
11
+ const locationParts = [path ? `path "${path}"` : void 0, resource ? `resource "${resource}"` : void 0].filter((part) => part !== void 0);
12
+ const locationMessage = locationParts.length > 0 ? ` for ${locationParts.join(" and ")}` : "";
13
+ return `[${scope}]: ${reason ?? `Component slot ${quotedComponent}${locationMessage} is not configured.`}${validComponents && validComponents.length > 0 ? ` Available component slots are ${new Intl.ListFormat("en", {
14
+ style: "long",
15
+ type: "disjunction"
16
+ }).format(validComponents)}.` : ""}`;
17
+ }) {};
18
+
19
+ //#endregion
20
+ exports.InvalidComponentError = InvalidComponentError;
21
+ //# sourceMappingURL=invalid-component.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalid-component.cjs","names":["createReactLayoutError"],"sources":["../../src/errors/invalid-component.ts"],"sourcesContent":["import {\n createReactLayoutError,\n type ReactLayoutErrorContext,\n} from './react-layout-error';\n\nconst scope = 'component' as const;\n\n/** Context describing an invalid or unconfigured component slot. */\nexport interface InvalidComponentContext\n extends ReactLayoutErrorContext<typeof scope> {\n component: unknown;\n path?: string;\n resource?: string;\n validComponents?: readonly string[];\n reason?: string;\n}\n\n/** Thrown when a requested component slot cannot be resolved. */\nexport class InvalidComponentError extends createReactLayoutError(\n { code: 'invalidComponent', scope },\n)(\n (\n scope,\n {\n component,\n path,\n resource,\n validComponents,\n reason,\n }: InvalidComponentContext,\n ) => {\n const quotedComponent =\n JSON.stringify(component) ?? `\"${String(component)}\"`;\n const locationParts = [\n path ? `path \"${path}\"` : undefined,\n resource ? `resource \"${resource}\"` : undefined,\n ].filter((part): part is string => part !== undefined);\n const locationMessage =\n locationParts.length > 0 ? ` for ${locationParts.join(' and ')}` : '';\n const body =\n reason ??\n `Component slot ${quotedComponent}${locationMessage} is not configured.`;\n const validComponentsMessage =\n validComponents && validComponents.length > 0\n ? ` Available component slots are ${new Intl.ListFormat('en', {\n style: 'long',\n type: 'disjunction',\n }).format(validComponents)}.`\n : '';\n\n return `[${scope}]: ${body}${validComponentsMessage}`;\n },\n) {}\n"],"mappings":";;;AAKA,MAAM,QAAQ;;AAad,IAAa,wBAAb,cAA2CA,kDACzC;CAAE,MAAM;CAAoB;AAAM,CACpC,GAEI,OACA,EACE,WACA,MACA,UACA,iBACA,aAEC;CACH,MAAM,kBACJ,KAAK,UAAU,SAAS,KAAK,IAAI,OAAO,SAAS,EAAE;CACrD,MAAM,gBAAgB,CACpB,OAAO,SAAS,KAAK,KAAK,QAC1B,WAAW,aAAa,SAAS,KAAK,MACxC,EAAE,QAAQ,SAAyB,SAAS,MAAS;CACrD,MAAM,kBACJ,cAAc,SAAS,IAAI,QAAQ,cAAc,KAAK,OAAO,MAAM;CAYrE,OAAO,IAAI,MAAM,KAVf,UACA,kBAAkB,kBAAkB,gBAAgB,uBAEpD,mBAAmB,gBAAgB,SAAS,IACxC,kCAAkC,IAAI,KAAK,WAAW,MAAM;EAC1D,OAAO;EACP,MAAM;CACR,CAAC,EAAE,OAAO,eAAe,EAAE,KAC3B;AAGR,CACF,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { CreatedReactLayoutError, ReactLayoutErrorContext } from "./react-layout-error.cjs";
2
+
3
+ //#region src/errors/invalid-component.d.ts
4
+ declare const scope: "component";
5
+ /** Context describing an invalid or unconfigured component slot. */
6
+ interface InvalidComponentContext extends ReactLayoutErrorContext<typeof scope> {
7
+ component: unknown;
8
+ path?: string;
9
+ resource?: string;
10
+ validComponents?: readonly string[];
11
+ reason?: string;
12
+ }
13
+ declare const InvalidComponentError_base: CreatedReactLayoutError<"invalidComponent", "component", InvalidComponentContext>;
14
+ /** Thrown when a requested component slot cannot be resolved. */
15
+ declare class InvalidComponentError extends InvalidComponentError_base {}
16
+ //#endregion
17
+ export { InvalidComponentContext, InvalidComponentError };
18
+ //# sourceMappingURL=invalid-component.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalid-component.d.cts","names":[],"sources":["../../src/errors/invalid-component.ts"],"mappings":";;;cAKM,KAAA;;UAGW,uBAAA,SACP,uBAAuB,QAAQ,KAAA;EACvC,SAAA;EACA,IAAA;EACA,QAAA;EACA,eAAA;EACA,MAAA;AAAA;AAAA,cACD,0BAAA;;cAGY,qBAAA,SAA8B,0BAkC1C"}