@jfdevelops/react-layout 0.22.0 → 0.22.2
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-resource-links.cjs +31 -17
- package/dist/create-config/create-resource-links.cjs.map +1 -1
- package/dist/create-config/create-resource-links.d.cts +9 -2
- package/dist/create-config/create-resource-links.d.cts.map +1 -1
- package/dist/create-config/create-resource-links.d.mts +9 -2
- package/dist/create-config/create-resource-links.d.mts.map +1 -1
- package/dist/create-config/create-resource-links.mjs +32 -17
- package/dist/create-config/create-resource-links.mjs.map +1 -1
- package/dist/create-config/define-layout.cjs +3 -2
- package/dist/create-config/define-layout.cjs.map +1 -1
- package/dist/create-config/define-layout.d.cts.map +1 -1
- package/dist/create-config/define-layout.d.mts.map +1 -1
- package/dist/create-config/define-layout.mjs +3 -2
- package/dist/create-config/define-layout.mjs.map +1 -1
- package/dist/create-config/for-paths/builder.cjs +6 -6
- package/dist/create-config/for-paths/builder.cjs.map +1 -1
- package/dist/create-config/for-paths/builder.mjs +6 -6
- package/dist/create-config/for-paths/builder.mjs.map +1 -1
- package/dist/create-config/for-resource.cjs +2 -1
- package/dist/create-config/for-resource.cjs.map +1 -1
- package/dist/create-config/for-resource.d.cts.map +1 -1
- package/dist/create-config/for-resource.d.mts.map +1 -1
- package/dist/create-config/for-resource.mjs +2 -1
- package/dist/create-config/for-resource.mjs.map +1 -1
- package/dist/create-config/for-resources/create-for-resources.cjs +15 -14
- package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
- package/dist/create-config/for-resources/create-for-resources.mjs +15 -14
- package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
- package/dist/create-config/index.d.cts +1 -1
- package/dist/create-config/index.d.mts +1 -1
- package/dist/errors/invalid-component.cjs +15 -7
- package/dist/errors/invalid-component.cjs.map +1 -1
- package/dist/errors/invalid-component.d.cts +106 -10
- package/dist/errors/invalid-component.d.cts.map +1 -1
- package/dist/errors/invalid-component.d.mts +106 -10
- package/dist/errors/invalid-component.d.mts.map +1 -1
- package/dist/errors/invalid-component.mjs +15 -7
- package/dist/errors/invalid-component.mjs.map +1 -1
- package/dist/errors/invalid-config.cjs +8 -3
- package/dist/errors/invalid-config.cjs.map +1 -1
- package/dist/errors/invalid-config.d.cts +96 -6
- package/dist/errors/invalid-config.d.cts.map +1 -1
- package/dist/errors/invalid-config.d.mts +96 -6
- package/dist/errors/invalid-config.d.mts.map +1 -1
- package/dist/errors/invalid-config.mjs +8 -3
- package/dist/errors/invalid-config.mjs.map +1 -1
- package/dist/errors/invalid-path.cjs +11 -5
- package/dist/errors/invalid-path.cjs.map +1 -1
- package/dist/errors/invalid-path.d.cts +100 -8
- package/dist/errors/invalid-path.d.cts.map +1 -1
- package/dist/errors/invalid-path.d.mts +100 -8
- package/dist/errors/invalid-path.d.mts.map +1 -1
- package/dist/errors/invalid-path.mjs +11 -5
- package/dist/errors/invalid-path.mjs.map +1 -1
- package/dist/errors/invalid-resource.cjs +11 -5
- package/dist/errors/invalid-resource.cjs.map +1 -1
- package/dist/errors/invalid-resource.d.cts +100 -8
- package/dist/errors/invalid-resource.d.cts.map +1 -1
- package/dist/errors/invalid-resource.d.mts +100 -8
- package/dist/errors/invalid-resource.d.mts.map +1 -1
- package/dist/errors/invalid-resource.mjs +11 -5
- package/dist/errors/invalid-resource.mjs.map +1 -1
- package/dist/errors/invalid-sub-resource.cjs +12 -5
- package/dist/errors/invalid-sub-resource.cjs.map +1 -1
- package/dist/errors/invalid-sub-resource.d.cts +103 -9
- package/dist/errors/invalid-sub-resource.d.cts.map +1 -1
- package/dist/errors/invalid-sub-resource.d.mts +103 -9
- package/dist/errors/invalid-sub-resource.d.mts.map +1 -1
- package/dist/errors/invalid-sub-resource.mjs +12 -5
- package/dist/errors/invalid-sub-resource.mjs.map +1 -1
- package/dist/errors/layout-configuration-error.cjs +17 -0
- package/dist/errors/layout-configuration-error.cjs.map +1 -0
- package/dist/errors/layout-configuration-error.d.cts +99 -0
- package/dist/errors/layout-configuration-error.d.cts.map +1 -0
- package/dist/errors/layout-configuration-error.d.mts +99 -0
- package/dist/errors/layout-configuration-error.d.mts.map +1 -0
- package/dist/errors/layout-configuration-error.mjs +17 -0
- package/dist/errors/layout-configuration-error.mjs.map +1 -0
- package/dist/errors/missing-path-variable.cjs +12 -5
- package/dist/errors/missing-path-variable.cjs.map +1 -1
- package/dist/errors/missing-path-variable.d.cts +99 -7
- package/dist/errors/missing-path-variable.d.cts.map +1 -1
- package/dist/errors/missing-path-variable.d.mts +99 -7
- package/dist/errors/missing-path-variable.d.mts.map +1 -1
- package/dist/errors/missing-path-variable.mjs +12 -5
- package/dist/errors/missing-path-variable.mjs.map +1 -1
- package/dist/errors/react-layout-error.cjs +38 -43
- package/dist/errors/react-layout-error.cjs.map +1 -1
- package/dist/errors/react-layout-error.d.cts +81 -38
- package/dist/errors/react-layout-error.d.cts.map +1 -1
- package/dist/errors/react-layout-error.d.mts +81 -38
- package/dist/errors/react-layout-error.d.mts.map +1 -1
- package/dist/errors/react-layout-error.mjs +39 -43
- package/dist/errors/react-layout-error.mjs.map +1 -1
- package/dist/index.cjs +4 -3
- package/dist/index.d.cts +4 -2
- package/dist/index.d.mts +4 -2
- package/dist/index.mjs +5 -4
- package/dist/node_modules/.pnpm/@jfdevelops_create-error@0.2.0_patch_hash_afc71b16c3f866f54416d30f467784ddc31736feb04f281a5fc4772ea422f4a9/node_modules/@jfdevelops/create-error/dist/types.d.cts +107 -0
- package/dist/node_modules/.pnpm/@jfdevelops_create-error@0.2.0_patch_hash_afc71b16c3f866f54416d30f467784ddc31736feb04f281a5fc4772ea422f4a9/node_modules/@jfdevelops/create-error/dist/types.d.cts.map +1 -0
- package/dist/node_modules/.pnpm/@jfdevelops_create-error@0.2.0_patch_hash_afc71b16c3f866f54416d30f467784ddc31736feb04f281a5fc4772ea422f4a9/node_modules/@jfdevelops/create-error/dist/types.d.mts +107 -0
- package/dist/node_modules/.pnpm/@jfdevelops_create-error@0.2.0_patch_hash_afc71b16c3f866f54416d30f467784ddc31736feb04f281a5fc4772ea422f4a9/node_modules/@jfdevelops/create-error/dist/types.d.mts.map +1 -0
- package/dist/resource.cjs +2 -1
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts.map +1 -1
- package/dist/resource.d.mts.map +1 -1
- package/dist/resource.mjs +3 -1
- package/dist/resource.mjs.map +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/@jfdevelops+create-error@0.2.0_patch_hash=afc71b16c3f866f54416d30f467784ddc31736feb04f281a5fc4772ea422f4a9/node_modules/@jfdevelops/create-error/dist/types.d.mts
|
|
2
|
+
//#region src/types.d.ts
|
|
3
|
+
declare const typeSlot: unique symbol;
|
|
4
|
+
/** Marks a blueprint value that is resolved by a later builder stage. */
|
|
5
|
+
type TypeSlot<Kind extends string, Payload = never> = {
|
|
6
|
+
readonly [typeSlot]: {
|
|
7
|
+
readonly kind: Kind;
|
|
8
|
+
readonly payload: Payload;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
type DataSlot = TypeSlot<'data'>;
|
|
12
|
+
type ResolveTemplate<Config> = Config extends {
|
|
13
|
+
data: {
|
|
14
|
+
resolve: (...arguments_: infer _Arguments) => infer Resolved;
|
|
15
|
+
};
|
|
16
|
+
} ? Resolved : never;
|
|
17
|
+
type InjectedDefinitionKeys<Template> = { [Key in keyof Template]: Template[Key] extends TypeSlot<'definition', PropertyKey> ? Key : never }[keyof Template];
|
|
18
|
+
type ConstructorInput<Config, Data> = Data extends readonly unknown[] | ((...arguments_: never[]) => unknown) ? Data : Data extends object ? Omit<Data, Extract<InjectedDefinitionKeys<ResolveTemplate<Config>>, keyof Data>> : Data;
|
|
19
|
+
type ReplaceTuple<Values extends readonly unknown[], Definition, Data, Implementation> = { [Index in keyof Values]: ReplaceTemplate<Values[Index], Definition, Data, Implementation> };
|
|
20
|
+
/**
|
|
21
|
+
* Built-in class instances that are never plain objects. Templates are not
|
|
22
|
+
* expanded inside them, and they never receive definition fields.
|
|
23
|
+
*/
|
|
24
|
+
type OpaqueObject = Date | RegExp | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | WeakMap<object, unknown> | WeakSet<object> | PromiseLike<unknown> | ArrayBuffer | ArrayBufferView;
|
|
25
|
+
type ReplaceTemplate<Type, Definition, Data, Implementation> = Type extends TypeSlot<'definition', infer Key> ? Key extends keyof Definition ? Definition[Key] : never : Type extends TypeSlot<'data'> ? Data : Type extends TypeSlot<'implementation'> ? Implementation : Type extends OpaqueObject ? Type : Type extends ((...arguments_: infer Arguments) => infer Result) ? (...arguments_: ReplaceTuple<Arguments, Definition, Data, Implementation>) => ReplaceTemplate<Result, Definition, Data, Implementation> : Type extends readonly unknown[] ? ReplaceTuple<Type, Definition, Data, Implementation> : Type extends object ? { [Key in keyof Type]: ReplaceTemplate<Type[Key], Definition, Data, Implementation> } : Type;
|
|
26
|
+
type PropertiesTemplate<Config> = Config extends {
|
|
27
|
+
properties: (...arguments_: infer _Arguments) => infer Properties;
|
|
28
|
+
} ? Properties : object;
|
|
29
|
+
type DataPropertyTemplate<Config> = Config extends {
|
|
30
|
+
data: {
|
|
31
|
+
property: infer Property extends string;
|
|
32
|
+
};
|
|
33
|
+
} ? { [Key in Property]: DataSlot } : object;
|
|
34
|
+
/**
|
|
35
|
+
* The error shape visible to a blueprint's `toJSON` callback.
|
|
36
|
+
*
|
|
37
|
+
* It contains native `Error` fields, the configured data property, and every
|
|
38
|
+
* member returned by `properties`.
|
|
39
|
+
*/
|
|
40
|
+
type InstanceProperties<Config, Definition, Data, Implementation> = ReplaceTemplate<PropertiesTemplate<Config>, Definition, Data, Implementation> & ReplaceTemplate<DataPropertyTemplate<Config>, Definition, Data, Implementation> & Error & (Config extends {
|
|
41
|
+
toJSON: (...arguments_: infer _Arguments) => infer Json;
|
|
42
|
+
} ? {
|
|
43
|
+
toJSON(): ReplaceTemplate<Json, Definition, Data, Implementation>;
|
|
44
|
+
} : object);
|
|
45
|
+
type MessageTemplate<Config> = Config extends {
|
|
46
|
+
message: (...arguments_: infer _Arguments) => infer Message;
|
|
47
|
+
} ? Message : string;
|
|
48
|
+
type PassedImplementationArgument<Config, Definition, Data> = MessageTemplate<Config> extends TypeSlot<'implementationArgument', infer Argument> ? Argument extends TypeSlot<'data'> ? Data : ReplaceTemplate<Argument, Definition, Data, never> : never;
|
|
49
|
+
type PassedImplementationCallback<Config, Definition, Data> = (argument: PassedImplementationArgument<Config, Definition, Data>) => string;
|
|
50
|
+
/**
|
|
51
|
+
* Input accepted by `invariant`: the constructor input, or a function that
|
|
52
|
+
* returns it. When the constructor input can itself be a function, only the
|
|
53
|
+
* wrapped form is accepted so a callback is never mistaken for a lazy input.
|
|
54
|
+
*/
|
|
55
|
+
type InvariantInput<Input> = ExtendsNever<Extract<Input, (...arguments_: never[]) => unknown>, Input | (() => Input), () => Input>;
|
|
56
|
+
interface ErrorClassStatics {
|
|
57
|
+
/**
|
|
58
|
+
* Throws this error class when `condition` is falsy.
|
|
59
|
+
*
|
|
60
|
+
* A function can be supplied as `input` to avoid constructing error data
|
|
61
|
+
* unless the invariant fails. TypeScript narrows `condition` after a
|
|
62
|
+
* successful call.
|
|
63
|
+
*
|
|
64
|
+
* TypeScript only allows assertion calls through explicitly typed names, so
|
|
65
|
+
* call this on a `class` declaration. For a class stored in a `const`, use
|
|
66
|
+
* the standalone {@link invariant} function instead.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* MissingUserError.invariant(
|
|
71
|
+
* user,
|
|
72
|
+
* () => ({ userId }),
|
|
73
|
+
* { cause },
|
|
74
|
+
* );
|
|
75
|
+
*
|
|
76
|
+
* user.id; // narrowed to the truthy branch
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
invariant<Condition, Input>(this: new (input: Input, options?: ErrorOptions) => Error, condition: Condition, input: InvariantInput<Input>, options?: ErrorOptions): asserts condition;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The instance type shared by every error in one family.
|
|
83
|
+
*
|
|
84
|
+
* Definition-derived fields use the schema's general output type, and the data
|
|
85
|
+
* property is `unknown` because each concrete error types its own data.
|
|
86
|
+
*/
|
|
87
|
+
/**
|
|
88
|
+
* The shared native `Error` base created for one blueprint.
|
|
89
|
+
*
|
|
90
|
+
* Use `factory.Error` for family-wide `instanceof` checks or as a public base
|
|
91
|
+
* type for errors created by the same blueprint.
|
|
92
|
+
*/
|
|
93
|
+
type FamilyErrorClass<Instance extends Error = Error> = (abstract new (...arguments_: never[]) => Instance) & ErrorClassStatics;
|
|
94
|
+
/** An extendable concrete error class produced by a configured factory. */
|
|
95
|
+
interface ConcreteErrorClass<Input, Instance> extends ErrorClassStatics {
|
|
96
|
+
/**
|
|
97
|
+
* Creates an error from family-specific input.
|
|
98
|
+
*
|
|
99
|
+
* Pass native `ErrorOptions` as the second argument to preserve a `cause`.
|
|
100
|
+
*/
|
|
101
|
+
new (input: Input, options?: ErrorOptions): Instance;
|
|
102
|
+
}
|
|
103
|
+
type ImplementedErrorClass<Config, Definition, Input, Data> = ConcreteErrorClass<ConstructorInput<Config, Input>, InstanceProperties<Config, Definition, Data, PassedImplementationCallback<Config, Definition, Data>>>;
|
|
104
|
+
type ExtendsNever<Value, OnTrue, OnFalse> = [Value] extends [never] ? OnTrue : OnFalse;
|
|
105
|
+
//#endregion
|
|
106
|
+
export { FamilyErrorClass, ImplementedErrorClass };
|
|
107
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":["Kind","Payload","typeSlot","kind","payload","Schema","StandardSchemaV1","InferInput","InferOutput","Input","Definition","Record","Exclude","DefinitionOutput","Key","TypeSlot","Argument$1","argument","definition","DefinitionTemplate","data","DataSlot","implementation","ImplementationSlot","input","property","resolve","ResolveContext","context","message","BlueprintContext","properties","toJSON","Error","error","Config","arguments_","_Arguments","Resolved","Template","PropertyKey","Data","Omit","Extract","InjectedDefinitionKeys","ResolveTemplate","Values","Implementation","Index","ReplaceTemplate","Date","RegExp","ReadonlyMap","ReadonlySet","WeakMap","WeakSet","PromiseLike","ArrayBuffer","ArrayBufferView","Type","OpaqueObject","Arguments","Result","ReplaceTuple","Properties","Property","DataPropertyTemplate","PropertiesTemplate","Json","Message","MessageTemplate","Argument","ImplementationArgumentWithDefinition","ImplementationArgument","PassedImplementationArgument","ExtendsNever","invariant","Condition","ErrorOptions","options","this","condition","InvariantInput","InstanceProperties","ConcreteDefinition","Instance","ErrorClassStatics","ConcreteErrorClass","ConstructorInput","PassedImplementationCallback","Value","OnTrue","OnFalse","InferredData","name","implement","DefaultBuilderData","Expand","ImplementationCallback","BuilderData","ImplementOptions","ImplementedErrorClass","BuilderInput","ImplementationBuilder","defineContext","ContextSchema","DefinitionInput","ExactDefinition","ErrorDefinitionBuilder","FamilyErrorClass","FamilyError","is","value"],"sources":["../../../../../../../../../../node_modules/.pnpm/@jfdevelops+create-error@0.2.0_patch_hash=afc71b16c3f866f54416d30f467784ddc31736feb04f281a5fc4772ea422f4a9/node_modules/@jfdevelops/create-error/dist/types.d.mts"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/dist/resource.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const require_layout_configuration_error = require('./errors/layout-configuration-error.cjs');
|
|
1
2
|
|
|
2
3
|
//#region src/resource.ts
|
|
3
4
|
function normalizeResourceTree(resource) {
|
|
@@ -23,7 +24,7 @@ function createIsValidResourceFn(resources) {
|
|
|
23
24
|
}
|
|
24
25
|
function toResourceEnum(resources) {
|
|
25
26
|
const keys = Object.keys(resources);
|
|
26
|
-
if (keys.length === 0) throw new
|
|
27
|
+
if (keys.length === 0) throw new require_layout_configuration_error.LayoutConfigurationError("No resources provided");
|
|
27
28
|
return keys;
|
|
28
29
|
}
|
|
29
30
|
|
package/dist/resource.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.cjs","names":[],"sources":["../src/resource.ts"],"sourcesContent":["import { ReactNode } from 'react';\nimport { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport { MergeIntersection, UnionToIntersection } from './utils';\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\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
|
|
1
|
+
{"version":3,"file":"resource.cjs","names":["LayoutConfigurationError"],"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\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;AAgGA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAIA,4DAAyB,uBAAuB;CAG5D,OAAO;AACT"}
|
package/dist/resource.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.cts","names":[],"sources":["../src/resource.ts"],"mappings":";;;;;
|
|
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,KAKE,YAAA,GAAe,MAAM;EAG7B,YAAA,EAAc,YAAA;AAAA;AAAA,KAIN,iBAAA,kBAAmC,kBAAA,IAC7C,QAAA,4BAEc,QAAA;EACN,YAAA;AAAA,MAGJ,QAAA;EACI,KAAA;EACA,YAAA,6BACE,aAAA,CAAc,kBAAA;AAAA,cAGR,KAAA;EACN,YAAA,EAAc,kBAAA,CAAmB,YAAA;AAAA;AAAA,KAKjC,kBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,iBAAA,CACF,mBAAA,CAAoB,iBAAA,CAAkB,SAAA;AAAA,KAE5B,4BAAA;EACV,QAAA,EAAU,SAAS;AAAA;AAAA,iBAiCL,iBAAA,CAAkB,QAAA,EAAU,kBAAA,GAAqB,YAAY;AAAA,iBAI7D,kBAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,SAAA,GAAY,kBAAA,CAAmB,SAAA;AAAA,KAehC,uBAAA,kBAAyC,kBAAA,IACnD,QAAA,kBACI,QAAA,GACA,QAAA;EAAmB,KAAA;AAAA,IACjB,KAAA;;;;;;KAQI,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,uBAAA,CAAwB,SAAA;AAAA,KAEhB,wBAAA,mBACQ,aAAA,CAAc,kBAAA,yBAE9B,OAAA,CAAQ,SAAA,UAAmB,GAAA;EAAQ,KAAA,EAAO,GAAA;AAAA;;KAGlC,yBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,KAEnC,wBAAA,CAAyB,SAAA,EAAW,QAAA;EAClC,YAAA,6BAAyC,aAAA,CAAc,kBAAA;AAAA,IAErD,YAAA;AAAA,KAGD,uBAAA,qEAGG,QAAA,6BAAqC,QAAQ;;;;;KAMzC,yBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,aAAA,CAAc,kBAAA,qFAI9B,iBAAA,CAAkB,OAAA,sBACd,GAAA,SAAY,iBAAA,CAAkB,OAAA,IAC5B,uBAAA,CAAwB,QAAA,EAAU,QAAA,iBAChC,wBAAA,CAAyB,OAAA,EAAS,GAAA;EAChC,YAAA,uBACE,aAAA,CAAc,kBAAA;AAAA,KAEf,iBAAA,CAAkB,MAAA,qBACjB,GAAA,GAEI,GAAA;EAEE,KAAA,EAAO,GAAA;EACP,WAAA,EAAa,yBAAA,CACX,SAAA,EACA,MAAA,EACA,QAAA,eACa,QAAA;AAAA,IAGvB,GAAA,GACF,GAAA;;KAKE,2BAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,MAChC,yBAAA,CAA0B,SAAA,EAAW,QAAA,mCAEtC,yBAAA,CACE,SAAA,EACA,yBAAA,CAA0B,SAAA,EAAW,QAAA;AAAA,KAY/B,YAAA,mBAA+B,aAAA,CAAc,kBAAA,KACvD,qBAAA,CAAsB,iBAAA,CAAkB,SAAA;AAAA,iBAC1B,cAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,kBAAA,CAAmB,SAAA,IAOJ,YAAA,CAAa,SAAA"}
|
package/dist/resource.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.mts","names":[],"sources":["../src/resource.ts"],"mappings":";;;;;
|
|
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,KAKE,YAAA,GAAe,MAAM;EAG7B,YAAA,EAAc,YAAA;AAAA;AAAA,KAIN,iBAAA,kBAAmC,kBAAA,IAC7C,QAAA,4BAEc,QAAA;EACN,YAAA;AAAA,MAGJ,QAAA;EACI,KAAA;EACA,YAAA,6BACE,aAAA,CAAc,kBAAA;AAAA,cAGR,KAAA;EACN,YAAA,EAAc,kBAAA,CAAmB,YAAA;AAAA;AAAA,KAKjC,kBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,iBAAA,CACF,mBAAA,CAAoB,iBAAA,CAAkB,SAAA;AAAA,KAE5B,4BAAA;EACV,QAAA,EAAU,SAAS;AAAA;AAAA,iBAiCL,iBAAA,CAAkB,QAAA,EAAU,kBAAA,GAAqB,YAAY;AAAA,iBAI7D,kBAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,SAAA,GAAY,kBAAA,CAAmB,SAAA;AAAA,KAehC,uBAAA,kBAAyC,kBAAA,IACnD,QAAA,kBACI,QAAA,GACA,QAAA;EAAmB,KAAA;AAAA,IACjB,KAAA;;;;;;KAQI,iBAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,uBAAA,CAAwB,SAAA;AAAA,KAEhB,wBAAA,mBACQ,aAAA,CAAc,kBAAA,yBAE9B,OAAA,CAAQ,SAAA,UAAmB,GAAA;EAAQ,KAAA,EAAO,GAAA;AAAA;;KAGlC,yBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,KAEnC,wBAAA,CAAyB,SAAA,EAAW,QAAA;EAClC,YAAA,6BAAyC,aAAA,CAAc,kBAAA;AAAA,IAErD,YAAA;AAAA,KAGD,uBAAA,qEAGG,QAAA,6BAAqC,QAAQ;;;;;KAMzC,yBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,aAAA,CAAc,kBAAA,qFAI9B,iBAAA,CAAkB,OAAA,sBACd,GAAA,SAAY,iBAAA,CAAkB,OAAA,IAC5B,uBAAA,CAAwB,QAAA,EAAU,QAAA,iBAChC,wBAAA,CAAyB,OAAA,EAAS,GAAA;EAChC,YAAA,uBACE,aAAA,CAAc,kBAAA;AAAA,KAEf,iBAAA,CAAkB,MAAA,qBACjB,GAAA,GAEI,GAAA;EAEE,KAAA,EAAO,GAAA;EACP,WAAA,EAAa,yBAAA,CACX,SAAA,EACA,MAAA,EACA,QAAA,eACa,QAAA;AAAA,IAGvB,GAAA,GACF,GAAA;;KAKE,2BAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,iBAAA,CAAkB,SAAA,MAChC,yBAAA,CAA0B,SAAA,EAAW,QAAA,mCAEtC,yBAAA,CACE,SAAA,EACA,yBAAA,CAA0B,SAAA,EAAW,QAAA;AAAA,KAY/B,YAAA,mBAA+B,aAAA,CAAc,kBAAA,KACvD,qBAAA,CAAsB,iBAAA,CAAkB,SAAA;AAAA,iBAC1B,cAAA,mBACI,aAAA,CAAc,kBAAA,GAChC,SAAA,EAAW,kBAAA,CAAmB,SAAA,IAOJ,YAAA,CAAa,SAAA"}
|
package/dist/resource.mjs
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { LayoutConfigurationError } from "./errors/layout-configuration-error.mjs";
|
|
2
|
+
|
|
1
3
|
//#region src/resource.ts
|
|
2
4
|
function normalizeResourceTree(resource) {
|
|
3
5
|
if (typeof resource === "string") return { [resource]: { subResources: {} } };
|
|
@@ -22,7 +24,7 @@ function createIsValidResourceFn(resources) {
|
|
|
22
24
|
}
|
|
23
25
|
function toResourceEnum(resources) {
|
|
24
26
|
const keys = Object.keys(resources);
|
|
25
|
-
if (keys.length === 0) throw new
|
|
27
|
+
if (keys.length === 0) throw new LayoutConfigurationError("No resources provided");
|
|
26
28
|
return keys;
|
|
27
29
|
}
|
|
28
30
|
|
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';\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\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
|
|
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\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;AAgGA,SAAgB,eAEd,WAA0C;CAC1C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,yBAAyB,uBAAuB;CAG5D,OAAO;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jfdevelops/react-layout",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.2",
|
|
4
4
|
"description": "A React library for creating layout components.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -27,8 +27,10 @@
|
|
|
27
27
|
"node": "^20.19.0 || >=22.12.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@jfdevelops/
|
|
31
|
-
"
|
|
30
|
+
"@jfdevelops/create-error": "0.2.0",
|
|
31
|
+
"arktype": "2.2.8",
|
|
32
|
+
"@jfdevelops/react-layout-composables": "0.2.7",
|
|
33
|
+
"@jfdevelops/react-layout-validator": "0.2.7"
|
|
32
34
|
},
|
|
33
35
|
"peerDependencies": {
|
|
34
36
|
"react": ">=18",
|
|
@@ -39,20 +41,20 @@
|
|
|
39
41
|
"provenance": true
|
|
40
42
|
},
|
|
41
43
|
"devDependencies": {
|
|
42
|
-
"@vitest/coverage-v8": "4.1.5",
|
|
43
|
-
"@vitest/ui": "4.1.5",
|
|
44
44
|
"@testing-library/jest-dom": "6.9.1",
|
|
45
45
|
"@testing-library/react": "16.3.2",
|
|
46
46
|
"@types/node": "24.10.1",
|
|
47
47
|
"@types/react": "18.3.28",
|
|
48
48
|
"@types/react-dom": "18.3.7",
|
|
49
49
|
"@vitejs/plugin-react": "6.0.1",
|
|
50
|
+
"@vitest/coverage-v8": "4.1.5",
|
|
51
|
+
"@vitest/ui": "4.1.5",
|
|
50
52
|
"jsdom": "29.0.2",
|
|
51
53
|
"react": "18.3.1",
|
|
52
54
|
"react-dom": "18.3.1",
|
|
53
55
|
"tsdown": "0.22.1",
|
|
54
|
-
"unrun": "0.3.0",
|
|
55
56
|
"typescript": "6.0.3",
|
|
57
|
+
"unrun": "0.3.0",
|
|
56
58
|
"vite": "8.0.10",
|
|
57
59
|
"vitest": "4.1.5"
|
|
58
60
|
},
|