@jfdevelops/react-layout 0.22.0 → 0.23.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.
- package/dist/create-config/create-resource-links.cjs +42 -22
- package/dist/create-config/create-resource-links.cjs.map +1 -1
- package/dist/create-config/create-resource-links.d.cts +25 -2
- package/dist/create-config/create-resource-links.d.cts.map +1 -1
- package/dist/create-config/create-resource-links.d.mts +25 -2
- package/dist/create-config/create-resource-links.d.mts.map +1 -1
- package/dist/create-config/create-resource-links.mjs +43 -22
- package/dist/create-config/create-resource-links.mjs.map +1 -1
- package/dist/create-config/define-layout.cjs +29 -9
- package/dist/create-config/define-layout.cjs.map +1 -1
- package/dist/create-config/define-layout.d.cts +13 -1
- package/dist/create-config/define-layout.d.cts.map +1 -1
- package/dist/create-config/define-layout.d.mts +13 -1
- package/dist/create-config/define-layout.d.mts.map +1 -1
- package/dist/create-config/define-layout.mjs +30 -10
- 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 +2 -2
- package/dist/create-config/index.d.mts +2 -2
- 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/missing-resource-provider.cjs +12 -0
- package/dist/errors/missing-resource-provider.cjs.map +1 -0
- package/dist/errors/missing-resource-provider.d.cts +91 -0
- package/dist/errors/missing-resource-provider.d.cts.map +1 -0
- package/dist/errors/missing-resource-provider.d.mts +91 -0
- package/dist/errors/missing-resource-provider.d.mts.map +1 -0
- package/dist/errors/missing-resource-provider.mjs +12 -0
- package/dist/errors/missing-resource-provider.mjs.map +1 -0
- 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 +6 -3
- package/dist/index.d.cts +6 -3
- package/dist/index.d.mts +6 -3
- package/dist/index.mjs +6 -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
package/dist/index.d.mts
CHANGED
|
@@ -6,15 +6,18 @@ import { CreateGetComponentForPath, GetComponentForPath, ResolvedPathValue } fro
|
|
|
6
6
|
import { ForPaths, ForPathsRenderContext, RenderedPathComponent, RenderedPathComponentHOF, TargetPathBuilder } from "./create-config/for-paths/builder.mjs";
|
|
7
7
|
import { IsSubResourceKey } from "./create-config/is-sub-resource-key.mjs";
|
|
8
8
|
import { ComponentTypes, CreatedResourceConfig } from "./create-config/get-component.mjs";
|
|
9
|
-
import {
|
|
9
|
+
import { CreateResourceMap, CreateResourceMapFn } from "./create-config/create-resource-links.mjs";
|
|
10
|
+
import { CreateResourceLayoutWithLayoutOptions, DefineResourceLayoutWithLayoutFn, DefineResourcesFn, DefinedResourceLayoutWithShell, LayoutRenderResourcesAccessor, LayoutResourcesAccessor, ResourceLayoutProvider, ResourceLayoutProviderProps, ResourceLayoutShellComponent, ResourceLayoutShellProps, ResourceSelection, ShellLayoutDefinition, ShellRenderContext, defineResourceLayout } from "./create-config/define-layout.mjs";
|
|
10
11
|
import { ResourceLayoutShellPublisher } from "./create-config/shell-context.mjs";
|
|
11
|
-
import {
|
|
12
|
+
import { ReactLayoutError } from "./errors/react-layout-error.mjs";
|
|
12
13
|
import { InvalidConfigContext, InvalidConfigError } from "./errors/invalid-config.mjs";
|
|
13
14
|
import { InvalidPathContext, InvalidPathError } from "./errors/invalid-path.mjs";
|
|
14
15
|
import { InvalidResourceContext, InvalidResourceError } from "./errors/invalid-resource.mjs";
|
|
15
16
|
import { InvalidSubResourceContext, InvalidSubResourceError } from "./errors/invalid-sub-resource.mjs";
|
|
16
17
|
import { InvalidComponentContext, InvalidComponentError } from "./errors/invalid-component.mjs";
|
|
17
18
|
import { MissingPathVariableContext, MissingPathVariableError } from "./errors/missing-path-variable.mjs";
|
|
19
|
+
import { MissingResourceProviderError } from "./errors/missing-resource-provider.mjs";
|
|
20
|
+
import { LayoutConfigurationError, LayoutConfigurationErrorContext } from "./errors/layout-configuration-error.mjs";
|
|
18
21
|
import { AnyComposableComponent, ComposableComponent, ComposableComponentCallable, ComposableComponents, ComposableNameContext, ComposablePresetComponent, ComposablePresetComponentCallProps, ComposablePresetMeta, ComposablePresetProps, ComposableResourceLayout, CreateLayoutComposable, DefinedComposableComponentRecord, LayoutComposablePresetProvider, LayoutComposablesFactory, MakeComposable, MakeComposableOptions, MergePresetProps, PresetPropsFromComposable, RequiredPresetLayoutProps, RequiredPresetRenderProps, ResolveLayoutComposables, collectComposablePresetEntries, createComposableComponent, createLayoutComposableFactory, defineComposableComponent, makeComposable, resolveComposablePresetProps, resolveLayoutComposables } from "@jfdevelops/react-layout-composables";
|
|
19
22
|
import { AnyBuiltPropDefinition, ExtractDefinitionValue, PropError, PropErrorOptions, ResolveLayoutProps, ResolveLayoutPropsAsDefined, ResolveProps, ResolvedBuiltPropShape, createPrimitivePropBuilder, createProp, isPropDefinitionShape, resolvePropDefinitionValues, validateProps } from "@jfdevelops/react-layout-validator";
|
|
20
|
-
export { type AnyBuiltPropDefinition, type AnyComposableComponent, type BaseComponent, type ComponentTypes, type ComposableComponent, type ComposableComponentCallable, type ComposableComponents, type ComposableNameContext, type ComposablePresetComponent, type ComposablePresetComponentCallProps, type ComposablePresetMeta, type ComposablePresetProps, type ComposableResourceLayout, type CreateGetComponentForPath, type CreateLayoutComposable, type
|
|
23
|
+
export { type AnyBuiltPropDefinition, type AnyComposableComponent, type BaseComponent, type ComponentTypes, type ComposableComponent, type ComposableComponentCallable, type ComposableComponents, type ComposableNameContext, type ComposablePresetComponent, type ComposablePresetComponentCallProps, type ComposablePresetMeta, type ComposablePresetProps, type ComposableResourceLayout, type CreateGetComponentForPath, type CreateLayoutComposable, type CreateResourceLayoutWithLayoutOptions, type CreateResourceMap, type CreateResourceMapFn, type CreatedResourceConfig, type DefineResourceLayoutWithLayoutFn, type DefineResourcesFn, type DefinedComposableComponentRecord, type DefinedResourceLayoutWithShell, type ExtractDefinitionValue, type ForPaths, type ForPathsRenderContext, type GetComponentForPath, type InPropsDefinition, type InPropsFunction, type InPropsObject, type InPropsOptions, type IncludedPropBehavior, type IncludedProps, type InferredInProps, type InvalidComponentContext, InvalidComponentError, type InvalidConfigContext, InvalidConfigError, type InvalidPathContext, InvalidPathError, type InvalidResourceContext, InvalidResourceError, type InvalidSubResourceContext, InvalidSubResourceError, type IsSubResourceKey, LayoutComposablePresetProvider, type LayoutComposablesFactory, LayoutConfigurationError, type LayoutConfigurationErrorContext, type LayoutRenderProps, type LayoutRenderResourcesAccessor, type LayoutResourceKey, type LayoutResourcesAccessor, type MakeComposable, type MakeComposableOptions, type MergeIntersection, type MergePresetProps, type MergedLayoutInProps, type MissingPathVariableContext, MissingPathVariableError, MissingResourceProviderError, type NormalizeResource, type NormalizeResources, type ParameterizedResourcePath, type PathVariables, type PresetPropsFromComposable, PropError, type PropErrorOptions, type PropsContextRender, type PropsRenderDefinition, ReactLayoutError, type RenderedPathComponent, type RenderedPathComponentHOF, type RequiredPresetLayoutProps, type RequiredPresetRenderProps, type ResolveLayoutComposables, type ResolveLayoutProps, type ResolveLayoutPropsAsDefined, type ResolveProps, type ResolvedBuiltPropShape, type ResolvedIncludedComponentProps, type ResolvedIncludedConfigProps, type ResolvedIncludedProps, type ResolvedIncludedPropsAsDefined, type ResolvedPathValue, type ResourceDefinition, type ResourceDefinitionValue, type ResourceEnum, type ResourceLayoutComponentProps, type ResourceLayoutProvider, type ResourceLayoutProviderProps, type ResourceLayoutShellComponent, type ResourceLayoutShellProps, type ResourceLayoutShellPublisher, type ResourceSelection, type ResourceTree, type ShellLayoutDefinition, type ShellRenderContext, type Show, type TargetPathBuilder, type UnionToIntersection, collectComposablePresetEntries, createComposableComponent, createLayoutComposableFactory, createPrimitivePropBuilder, createProp, defineComposableComponent, defineResourceLayout, isPropDefinitionShape, makeComposable, normalizeResource, normalizeResources, pick, resolveComposablePresetProps, resolveLayoutComposables, resolvePropDefinitionValues, toResourceEnum, validateProps };
|
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { pick } from "./utils.mjs";
|
|
3
|
-
import { ReactLayoutError, createReactLayoutError } from "./errors/react-layout-error.mjs";
|
|
1
|
+
import { ReactLayoutError } from "./errors/react-layout-error.mjs";
|
|
4
2
|
import { InvalidConfigError } from "./errors/invalid-config.mjs";
|
|
5
3
|
import { InvalidPathError } from "./errors/invalid-path.mjs";
|
|
6
4
|
import { InvalidResourceError } from "./errors/invalid-resource.mjs";
|
|
7
5
|
import { InvalidSubResourceError } from "./errors/invalid-sub-resource.mjs";
|
|
8
6
|
import { InvalidComponentError } from "./errors/invalid-component.mjs";
|
|
9
7
|
import { MissingPathVariableError } from "./errors/missing-path-variable.mjs";
|
|
8
|
+
import { MissingResourceProviderError } from "./errors/missing-resource-provider.mjs";
|
|
9
|
+
import { LayoutConfigurationError } from "./errors/layout-configuration-error.mjs";
|
|
10
|
+
import { normalizeResource, normalizeResources, toResourceEnum } from "./resource.mjs";
|
|
11
|
+
import { pick } from "./utils.mjs";
|
|
10
12
|
import { defineResourceLayout } from "./create-config/define-layout.mjs";
|
|
11
13
|
import { LayoutComposablePresetProvider, collectComposablePresetEntries, createComposableComponent, createLayoutComposableFactory, defineComposableComponent, makeComposable, resolveComposablePresetProps, resolveLayoutComposables } from "@jfdevelops/react-layout-composables";
|
|
12
14
|
import { PropError, createPrimitivePropBuilder, createProp, isPropDefinitionShape, resolvePropDefinitionValues, validateProps } from "@jfdevelops/react-layout-validator";
|
|
13
15
|
|
|
14
|
-
export { InvalidComponentError, InvalidConfigError, InvalidPathError, InvalidResourceError, InvalidSubResourceError, LayoutComposablePresetProvider, MissingPathVariableError, PropError, ReactLayoutError, collectComposablePresetEntries, createComposableComponent, createLayoutComposableFactory, createPrimitivePropBuilder, createProp,
|
|
16
|
+
export { InvalidComponentError, InvalidConfigError, InvalidPathError, InvalidResourceError, InvalidSubResourceError, LayoutComposablePresetProvider, LayoutConfigurationError, MissingPathVariableError, MissingResourceProviderError, PropError, ReactLayoutError, collectComposablePresetEntries, createComposableComponent, createLayoutComposableFactory, createPrimitivePropBuilder, createProp, defineComposableComponent, defineResourceLayout, isPropDefinitionShape, makeComposable, normalizeResource, normalizeResources, pick, resolveComposablePresetProps, resolveLayoutComposables, resolvePropDefinitionValues, toResourceEnum, validateProps };
|
|
@@ -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.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","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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"}
|
|
@@ -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.
|
|
3
|
+
"version": "0.23.0",
|
|
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
|
},
|