@jfdevelops/react-layout 0.24.3 → 1.0.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-defined-resource-layout.cjs +72 -0
- package/dist/create-config/create-defined-resource-layout.cjs.map +1 -0
- package/dist/create-config/create-defined-resource-layout.d.cts +88 -0
- package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -0
- package/dist/create-config/create-defined-resource-layout.d.mts +88 -0
- package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -0
- package/dist/create-config/create-defined-resource-layout.mjs +72 -0
- package/dist/create-config/create-defined-resource-layout.mjs.map +1 -0
- package/dist/create-config/create-resource-links.cjs.map +1 -1
- package/dist/create-config/create-resource-links.d.cts +1 -1
- package/dist/create-config/create-resource-links.d.cts.map +1 -1
- package/dist/create-config/create-resource-links.d.mts +1 -1
- package/dist/create-config/create-resource-links.d.mts.map +1 -1
- package/dist/create-config/create-resource-links.mjs.map +1 -1
- package/dist/create-config/define-layout.cjs +199 -9
- package/dist/create-config/define-layout.cjs.map +1 -1
- package/dist/create-config/define-layout.d.cts +172 -29
- package/dist/create-config/define-layout.d.cts.map +1 -1
- package/dist/create-config/define-layout.d.mts +172 -29
- package/dist/create-config/define-layout.d.mts.map +1 -1
- package/dist/create-config/define-layout.mjs +202 -13
- package/dist/create-config/define-layout.mjs.map +1 -1
- package/dist/create-config/for-resources/create-for-resources.cjs +7 -0
- package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
- package/dist/create-config/for-resources/create-for-resources.mjs +7 -0
- package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
- package/dist/create-config/get-component.cjs +22 -1
- package/dist/create-config/get-component.cjs.map +1 -1
- package/dist/create-config/get-component.d.cts +25 -3
- package/dist/create-config/get-component.d.cts.map +1 -1
- package/dist/create-config/get-component.d.mts +25 -3
- package/dist/create-config/get-component.d.mts.map +1 -1
- package/dist/create-config/get-component.mjs +22 -1
- package/dist/create-config/get-component.mjs.map +1 -1
- package/dist/create-config/index.d.cts +5 -2
- package/dist/create-config/index.d.mts +5 -2
- package/dist/create-config/lazy-resource-layout.cjs +111 -0
- package/dist/create-config/lazy-resource-layout.cjs.map +1 -0
- package/dist/create-config/lazy-resource-layout.d.cts +51 -0
- package/dist/create-config/lazy-resource-layout.d.cts.map +1 -0
- package/dist/create-config/lazy-resource-layout.d.mts +51 -0
- package/dist/create-config/lazy-resource-layout.d.mts.map +1 -0
- package/dist/create-config/lazy-resource-layout.mjs +111 -0
- package/dist/create-config/lazy-resource-layout.mjs.map +1 -0
- package/dist/create-config/render-state.cjs +62 -0
- package/dist/create-config/render-state.cjs.map +1 -0
- package/dist/create-config/render-state.d.cts +121 -0
- package/dist/create-config/render-state.d.cts.map +1 -0
- package/dist/create-config/render-state.d.mts +121 -0
- package/dist/create-config/render-state.d.mts.map +1 -0
- package/dist/create-config/render-state.mjs +55 -0
- package/dist/create-config/render-state.mjs.map +1 -0
- package/dist/errors/resource-state-error.cjs +29 -0
- package/dist/errors/resource-state-error.cjs.map +1 -0
- package/dist/errors/resource-state-error.d.cts +19 -0
- package/dist/errors/resource-state-error.d.cts.map +1 -0
- package/dist/errors/resource-state-error.d.mts +19 -0
- package/dist/errors/resource-state-error.d.mts.map +1 -0
- package/dist/errors/resource-state-error.mjs +27 -0
- package/dist/errors/resource-state-error.mjs.map +1 -0
- package/dist/index.cjs +6 -0
- package/dist/index.d.cts +9 -5
- package/dist/index.d.mts +9 -5
- package/dist/index.mjs +4 -2
- package/dist/props.d.cts +6 -1
- package/dist/props.d.cts.map +1 -1
- package/dist/props.d.mts +6 -1
- package/dist/props.d.mts.map +1 -1
- package/dist/resource.cjs +17 -0
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +33 -1
- package/dist/resource.d.cts.map +1 -1
- package/dist/resource.d.mts +33 -1
- package/dist/resource.d.mts.map +1 -1
- package/dist/resource.mjs +17 -1
- package/dist/resource.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/create-config/render-state.ts
|
|
3
|
+
const deferredRenderStateSymbol = Symbol("deferredRenderState");
|
|
4
|
+
const lazyRenderStateSymbol = Symbol("lazyRenderState");
|
|
5
|
+
const definedRenderStateSymbol = Symbol.for("@jfdevelops/react-layout/render-state");
|
|
6
|
+
const definedResourceLayoutComponentSymbol = Symbol.for("@jfdevelops/react-layout/resource-layout-component");
|
|
7
|
+
function normalizeDefinition(input) {
|
|
8
|
+
return typeof input === "function" ? {
|
|
9
|
+
render: input,
|
|
10
|
+
state: "default"
|
|
11
|
+
} : input;
|
|
12
|
+
}
|
|
13
|
+
function toFragment(definition) {
|
|
14
|
+
const fragment = { [definition.state ?? "default"]: definition };
|
|
15
|
+
Object.defineProperty(fragment, definedRenderStateSymbol, {
|
|
16
|
+
enumerable: false,
|
|
17
|
+
value: definition
|
|
18
|
+
});
|
|
19
|
+
return fragment;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates a state factory whose `props.include` keys are constrained by the
|
|
23
|
+
* supplied resources and options.
|
|
24
|
+
*/
|
|
25
|
+
function createRenderStateBuilder(_arguments) {
|
|
26
|
+
function createRenderState(input) {
|
|
27
|
+
return toFragment(normalizeDefinition(input));
|
|
28
|
+
}
|
|
29
|
+
createRenderState.defer = (input) => {
|
|
30
|
+
const definition = normalizeDefinition(input);
|
|
31
|
+
return { [definition.state ?? "default"]: { [deferredRenderStateSymbol]: definition } };
|
|
32
|
+
};
|
|
33
|
+
createRenderState.lazy = (load) => ({ [lazyRenderStateSymbol]: load });
|
|
34
|
+
return createRenderState;
|
|
35
|
+
}
|
|
36
|
+
/** Type guard for states created with `createRenderState.defer(...)`. */
|
|
37
|
+
function isDeferredRenderState(value) {
|
|
38
|
+
return typeof value === "object" && value !== null && deferredRenderStateSymbol in value;
|
|
39
|
+
}
|
|
40
|
+
/** Type guard for states created with `createRenderState.lazy(...)`. */
|
|
41
|
+
function isLazyRenderState(value) {
|
|
42
|
+
return typeof value === "object" && value !== null && lazyRenderStateSymbol in value;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Selects the single state definition exported by a lazy module. Throws when
|
|
46
|
+
* the module exports none or more than one, avoiding ambiguous selection.
|
|
47
|
+
*/
|
|
48
|
+
function findDefinedRenderState(module) {
|
|
49
|
+
const definitions = Object.values(module).filter((value) => typeof value === "object" && value !== null && definedRenderStateSymbol in value);
|
|
50
|
+
if (definitions.length !== 1) throw new Error(`A lazy render-state module must export exactly one defined render state; received ${definitions.length}.`);
|
|
51
|
+
return definitions[0][definedRenderStateSymbol];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
//#endregion
|
|
55
|
+
exports.createRenderStateBuilder = createRenderStateBuilder;
|
|
56
|
+
exports.deferredRenderStateSymbol = deferredRenderStateSymbol;
|
|
57
|
+
exports.definedResourceLayoutComponentSymbol = definedResourceLayoutComponentSymbol;
|
|
58
|
+
exports.findDefinedRenderState = findDefinedRenderState;
|
|
59
|
+
exports.isDeferredRenderState = isDeferredRenderState;
|
|
60
|
+
exports.isLazyRenderState = isLazyRenderState;
|
|
61
|
+
exports.lazyRenderStateSymbol = lazyRenderStateSymbol;
|
|
62
|
+
//# sourceMappingURL=render-state.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-state.cjs","names":[],"sources":["../../src/create-config/render-state.ts"],"sourcesContent":["import type { JSX } from 'react';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '../props';\nimport type {\n IncludedProps,\n InPropsDefinition,\n LayoutRenderProps,\n MergedLayoutInProps,\n} from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\n\nexport const deferredRenderStateSymbol: unique symbol = Symbol(\n 'deferredRenderState',\n) as never;\nexport const lazyRenderStateSymbol: unique symbol = Symbol(\n 'lazyRenderState',\n) as never;\nexport const definedRenderStateSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/render-state',\n) as never;\nexport const definedResourceLayoutComponentSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/resource-layout-component',\n) as never;\n\n/** Runtime-compatible render-state shape used when inspecting lazy modules. */\nexport type AnyRenderStateDefinition = {\n composables?: (create: CreateLayoutComposable<any>) => ComposableComponents;\n props?: {\n include?: Record<string, unknown>;\n custom?: InPropsObject;\n };\n render: (props: any, context: any) => JSX.Element;\n state?: string;\n};\n\n/** An inline state whose first render is scheduled through `React.lazy`. */\nexport type DeferredRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [deferredRenderStateSymbol]: Definition;\n};\n\n/** A state definition supplied by a separately imported module. */\nexport type LazyRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [lazyRenderStateSymbol]: () => Promise<Record<string, unknown>>;\n readonly definition?: Definition;\n};\n\n/** Callback shorthand for a render state with no local configuration. */\nexport type RenderStateCallback = (props: any, context: any) => JSX.Element;\n\n/**\n * Defines state-local composable components with a `create` helper narrowed to\n * the resources bound to the surrounding builder.\n */\nexport type RenderStateComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n> = (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n) => Composables;\n\n/**\n * Defines reusable layout-level composables while preserving their inferred\n * names, props, and bound resource union.\n */\nexport type LayoutComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n> = RenderStateComposablesDefinition<Resources, Composables>;\n\ntype BuilderRenderComposables<Composables extends ComposableComponents> = [\n keyof Composables,\n] extends [never]\n ? undefined\n : Composables;\n\n/** Values available as the second argument of a created state's `render`. */\nexport type RenderStateContext<\n Composables extends ComposableComponents,\n> = {\n composables: BuilderRenderComposables<Composables>;\n retry?: () => void;\n};\n\n/**\n * Resolves one state's custom props and explicitly included option/composable\n * props to the values received by its render callback.\n */\nexport type RenderStateProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n >,\n CustomProps extends InPropsObject,\n> = LayoutRenderProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n>;\n\ntype TypedRenderStateDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n State extends string,\n CustomProps extends InPropsObject,\n SharedComposables extends ComposableComponents,\n StateComposables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n >,\n> = {\n composables?: RenderStateComposablesDefinition<Resources, StateComposables>;\n props?: {\n include?: IncludeProps;\n custom?: CustomProps;\n };\n render: (\n props: RenderStateProps<\n Resources,\n Options,\n SharedComposables & StateComposables,\n IncludeProps,\n CustomProps\n >,\n context: RenderStateContext<SharedComposables & StateComposables>,\n ) => JSX.Element;\n state: State;\n};\n\ntype NormalizeRenderStateDefinition<Input> =\n Input extends DeferredRenderState<infer Definition>\n ? Definition\n : Input extends RenderStateCallback\n ? { render: Input; state: 'default' }\n : Input extends AnyRenderStateDefinition\n ? Input\n : never;\n\ntype StateName<Definition> = Definition extends DeferredRenderState<\n infer DeferredDefinition\n>\n ? StateName<DeferredDefinition>\n : Definition extends { state?: infer State extends string }\n ? State\n : 'default';\n\n/**\n * A spreadable state entry keyed by its literal state name. Spreading this into\n * `layout.render` is what creates compound members such as `Users.Loading`.\n */\nexport type RenderStateFragment<Definition> = {\n [State in StateName<NormalizeRenderStateDefinition<Definition>>]: Definition;\n} & {\n readonly [definedRenderStateSymbol]: NormalizeRenderStateDefinition<Definition>;\n};\n\ntype DefinedRenderStateFromModule<Module> = Extract<\n Module[keyof Module],\n { readonly [definedRenderStateSymbol]: AnyRenderStateDefinition }\n>[typeof definedRenderStateSymbol];\n\n/**\n * Creates independently typed render-state fragments.\n *\n * - Calling it directly creates an eager state.\n * - `.defer(...)` schedules an inline definition through `React.lazy`, but\n * does not create a separate JavaScript chunk.\n * - `.lazy(() => import(...))` imports a complete named state definition as a\n * separate chunk.\n */\nexport type CreateRenderState<\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n SharedComposables extends ComposableComponents = {},\n> = {\n <\n const State extends string = 'default',\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n ): RenderStateFragment<\n TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >;\n <\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: Omit<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n 'state'\n >,\n ): RenderStateFragment<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >;\n <const Render extends RenderStateCallback>(\n render: Render,\n ): RenderStateFragment<Render>;\n defer<\n const State extends string = 'default',\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n ): RenderStateFragment<\n DeferredRenderState<\n TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >\n >;\n defer<\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: Omit<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n 'state'\n >,\n ): RenderStateFragment<\n DeferredRenderState<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >\n >;\n defer<const Render extends RenderStateCallback>(\n render: Render,\n ): RenderStateFragment<DeferredRenderState<{ render: Render; state: 'default' }>>;\n lazy<Module extends Record<string, unknown>>(\n load: () => Promise<Module>,\n ): LazyRenderState<DefinedRenderStateFromModule<Module>>;\n};\n\nfunction normalizeDefinition(\n input: AnyRenderStateDefinition | RenderStateCallback,\n): AnyRenderStateDefinition {\n return typeof input === 'function'\n ? { render: input, state: 'default' }\n : input;\n}\n\nfunction toFragment<Definition extends AnyRenderStateDefinition>(\n definition: Definition,\n) {\n const fragment = {\n [definition.state ?? 'default']: definition,\n } as RenderStateFragment<Definition>;\n\n Object.defineProperty(fragment, definedRenderStateSymbol, {\n enumerable: false,\n value: definition,\n });\n\n return fragment;\n}\n\n/** Inputs used internally to bind resource and option types to a state builder. */\nexport type CreateRenderStateBuilderArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n> = {\n /** Shared composables whose components and preset props every state can use. */\n composables?: LayoutComposablesDefinition<Resources, SharedComposables>;\n /** Option props that individual states can expose through `props.include`. */\n options: Options;\n /** Resources used to constrain composable names and resource-specific props. */\n resources: Resources;\n};\n\n/** The state factory produced for a particular resource and option definition. */\nexport type CreateRenderStateBuilderResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n> = CreateRenderState<Resources, Options, SharedComposables>;\n\n/**\n * Creates a state factory whose `props.include` keys are constrained by the\n * supplied resources and options.\n */\nexport function createRenderStateBuilder<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n>(\n _arguments: CreateRenderStateBuilderArguments<\n Resources,\n Options,\n SharedComposables\n >,\n): CreateRenderStateBuilderResult<Resources, Options, SharedComposables> {\n function createRenderState(\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) {\n return toFragment(normalizeDefinition(input));\n }\n\n createRenderState.defer = (\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) => {\n const definition = normalizeDefinition(input);\n\n return {\n [definition.state ?? 'default']: {\n [deferredRenderStateSymbol]: definition,\n },\n };\n };\n createRenderState.lazy = (\n load: () => Promise<Record<string, unknown>>,\n ) => ({\n [lazyRenderStateSymbol]: load,\n });\n\n return createRenderState as CreateRenderStateBuilderResult<\n Resources,\n Options,\n SharedComposables\n >;\n}\n\n/** Type guard for states created with `createRenderState.defer(...)`. */\nexport function isDeferredRenderState(\n value: unknown,\n): value is DeferredRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' &&\n value !== null &&\n deferredRenderStateSymbol in value\n );\n}\n\n/** Type guard for states created with `createRenderState.lazy(...)`. */\nexport function isLazyRenderState(\n value: unknown,\n): value is LazyRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' && value !== null && lazyRenderStateSymbol in value\n );\n}\n\n/**\n * Selects the single state definition exported by a lazy module. Throws when\n * the module exports none or more than one, avoiding ambiguous selection.\n */\nexport function findDefinedRenderState(\n module: Record<string, unknown>,\n): AnyRenderStateDefinition {\n const definitions = Object.values(module).filter(\n (value) =>\n typeof value === 'object' && value !== null && definedRenderStateSymbol in value,\n ) as Array<Record<typeof definedRenderStateSymbol, AnyRenderStateDefinition>>;\n\n if (definitions.length !== 1) {\n throw new Error(\n `A lazy render-state module must export exactly one defined render state; received ${definitions.length}.`,\n );\n }\n\n return definitions[0][definedRenderStateSymbol];\n}\n\n/** Identity helper that contextually types a reusable composables callback. */\nexport type DefineLayoutComposables<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = <const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n) => LayoutComposablesDefinition<Resources, Composables>;\n\n/** Public cross-file building blocks returned by a defined layout builder. */\nexport type CreateLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = {\n composables: DefineLayoutComposables<Resources>;\n createRenderState: CreateRenderState<Resources, Options>;\n};\n\n/** Resource and option bindings used to create layout building blocks. */\nexport type CreateLayoutBuildingBlocksArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateRenderStateBuilderArguments<Resources, Options>;\n\n/** Layout helpers produced for the supplied resource and option bindings. */\nexport type CreateLayoutBuildingBlocksResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateLayoutBuildingBlocks<Resources, Options>;\n\n/**\n * Creates the reusable `composables` and `createRenderState` helpers without\n * introducing an identity wrapper around the layout object itself.\n */\nexport function createLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n>(\n arguments_: CreateLayoutBuildingBlocksArguments<Resources, Options>,\n): CreateLayoutBuildingBlocksResult<Resources, Options> {\n function composables<const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n ): LayoutComposablesDefinition<Resources, Composables> {\n return definition;\n }\n\n return {\n composables,\n createRenderState: createRenderStateBuilder(arguments_),\n };\n}\n\n/** Preserves a bound resource tuple for consumers that need to re-export it. */\nexport type BoundResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = Resources;\n"],"mappings":";;AAcA,MAAa,4BAA2C,OACtD,qBACF;AACA,MAAa,wBAAuC,OAClD,iBACF;AACA,MAAa,2BAA0C,OAAO,IAC5D,uCACF;AACA,MAAa,uCAAsD,OAAO,IACxE,oDACF;AAmTA,SAAS,oBACP,OAC0B;CAC1B,OAAO,OAAO,UAAU,aACpB;EAAE,QAAQ;EAAO,OAAO;CAAU,IAClC;AACN;AAEA,SAAS,WACP,YACA;CACA,MAAM,WAAW,GACd,WAAW,SAAS,YAAY,WACnC;CAEA,OAAO,eAAe,UAAU,0BAA0B;EACxD,YAAY;EACZ,OAAO;CACT,CAAC;CAED,OAAO;AACT;;;;;AA2BA,SAAgB,yBAKd,YAKuE;CACvE,SAAS,kBACP,OACA;EACA,OAAO,WAAW,oBAAoB,KAAK,CAAC;CAC9C;CAEA,kBAAkB,SAChB,UACG;EACH,MAAM,aAAa,oBAAoB,KAAK;EAE5C,OAAO,GACJ,WAAW,SAAS,YAAY,GAC9B,4BAA4B,WAC/B,EACF;CACF;CACA,kBAAkB,QAChB,UACI,GACH,wBAAwB,KAC3B;CAEA,OAAO;AAKT;;AAGA,SAAgB,sBACd,OACwD;CACxD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,6BAA6B;AAEjC;;AAGA,SAAgB,kBACd,OACoD;CACpD,OACE,OAAO,UAAU,YAAY,UAAU,QAAQ,yBAAyB;AAE5E;;;;;AAMA,SAAgB,uBACd,QAC0B;CAC1B,MAAM,cAAc,OAAO,OAAO,MAAM,EAAE,QACvC,UACC,OAAO,UAAU,YAAY,UAAU,QAAQ,4BAA4B,KAC/E;CAEA,IAAI,YAAY,WAAW,GACzB,MAAM,IAAI,MACR,qFAAqF,YAAY,OAAO,EAC1G;CAGF,OAAO,YAAY,GAAG;AACxB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { LayoutResourceKey, ResourceDefinition } from "../resource.cjs";
|
|
2
|
+
import { InPropsDefinition, InPropsObject, IncludedProps, LayoutRenderProps, MergedLayoutInProps } from "../props.cjs";
|
|
3
|
+
import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
|
|
4
|
+
import { JSX } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/create-config/render-state.d.ts
|
|
7
|
+
declare const deferredRenderStateSymbol: unique symbol;
|
|
8
|
+
declare const lazyRenderStateSymbol: unique symbol;
|
|
9
|
+
declare const definedRenderStateSymbol: unique symbol;
|
|
10
|
+
declare const definedResourceLayoutComponentSymbol: unique symbol;
|
|
11
|
+
/** Runtime-compatible render-state shape used when inspecting lazy modules. */
|
|
12
|
+
type AnyRenderStateDefinition = {
|
|
13
|
+
composables?: (create: CreateLayoutComposable<any>) => ComposableComponents;
|
|
14
|
+
props?: {
|
|
15
|
+
include?: Record<string, unknown>;
|
|
16
|
+
custom?: InPropsObject;
|
|
17
|
+
};
|
|
18
|
+
render: (props: any, context: any) => JSX.Element;
|
|
19
|
+
state?: string;
|
|
20
|
+
};
|
|
21
|
+
/** An inline state whose first render is scheduled through `React.lazy`. */
|
|
22
|
+
type DeferredRenderState<Definition extends AnyRenderStateDefinition> = {
|
|
23
|
+
readonly [deferredRenderStateSymbol]: Definition;
|
|
24
|
+
};
|
|
25
|
+
/** A state definition supplied by a separately imported module. */
|
|
26
|
+
type LazyRenderState<Definition extends AnyRenderStateDefinition> = {
|
|
27
|
+
readonly [lazyRenderStateSymbol]: () => Promise<Record<string, unknown>>;
|
|
28
|
+
readonly definition?: Definition;
|
|
29
|
+
};
|
|
30
|
+
/** Callback shorthand for a render state with no local configuration. */
|
|
31
|
+
type RenderStateCallback = (props: any, context: any) => JSX.Element;
|
|
32
|
+
/**
|
|
33
|
+
* Defines state-local composable components with a `create` helper narrowed to
|
|
34
|
+
* the resources bound to the surrounding builder.
|
|
35
|
+
*/
|
|
36
|
+
type RenderStateComposablesDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Composables extends ComposableComponents> = (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => Composables;
|
|
37
|
+
/**
|
|
38
|
+
* Defines reusable layout-level composables while preserving their inferred
|
|
39
|
+
* names, props, and bound resource union.
|
|
40
|
+
*/
|
|
41
|
+
type LayoutComposablesDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Composables extends ComposableComponents> = RenderStateComposablesDefinition<Resources, Composables>;
|
|
42
|
+
type BuilderRenderComposables<Composables extends ComposableComponents> = [keyof Composables] extends [never] ? undefined : Composables;
|
|
43
|
+
/** Values available as the second argument of a created state's `render`. */
|
|
44
|
+
type RenderStateContext<Composables extends ComposableComponents> = {
|
|
45
|
+
composables: BuilderRenderComposables<Composables>;
|
|
46
|
+
retry?: () => void;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Resolves one state's custom props and explicitly included option/composable
|
|
50
|
+
* props to the values received by its render callback.
|
|
51
|
+
*/
|
|
52
|
+
type RenderStateProps<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, Composables>>, CustomProps extends InPropsObject> = LayoutRenderProps<Resources, Options, Composables, IncludeProps, CustomProps>;
|
|
53
|
+
type TypedRenderStateDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, State extends string, CustomProps extends InPropsObject, SharedComposables extends ComposableComponents, StateComposables extends ComposableComponents, IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>>> = {
|
|
54
|
+
composables?: RenderStateComposablesDefinition<Resources, StateComposables>;
|
|
55
|
+
props?: {
|
|
56
|
+
include?: IncludeProps;
|
|
57
|
+
custom?: CustomProps;
|
|
58
|
+
};
|
|
59
|
+
render: (props: RenderStateProps<Resources, Options, SharedComposables & StateComposables, IncludeProps, CustomProps>, context: RenderStateContext<SharedComposables & StateComposables>) => JSX.Element;
|
|
60
|
+
state: State;
|
|
61
|
+
};
|
|
62
|
+
type NormalizeRenderStateDefinition<Input> = Input extends DeferredRenderState<infer Definition> ? Definition : Input extends RenderStateCallback ? {
|
|
63
|
+
render: Input;
|
|
64
|
+
state: 'default';
|
|
65
|
+
} : Input extends AnyRenderStateDefinition ? Input : never;
|
|
66
|
+
type StateName<Definition> = Definition extends DeferredRenderState<infer DeferredDefinition> ? StateName<DeferredDefinition> : Definition extends {
|
|
67
|
+
state?: infer State extends string;
|
|
68
|
+
} ? State : 'default';
|
|
69
|
+
/**
|
|
70
|
+
* A spreadable state entry keyed by its literal state name. Spreading this into
|
|
71
|
+
* `layout.render` is what creates compound members such as `Users.Loading`.
|
|
72
|
+
*/
|
|
73
|
+
type RenderStateFragment<Definition> = { [State in StateName<NormalizeRenderStateDefinition<Definition>>]: Definition } & {
|
|
74
|
+
readonly [definedRenderStateSymbol]: NormalizeRenderStateDefinition<Definition>;
|
|
75
|
+
};
|
|
76
|
+
type DefinedRenderStateFromModule<Module> = Extract<Module[keyof Module], {
|
|
77
|
+
readonly [definedRenderStateSymbol]: AnyRenderStateDefinition;
|
|
78
|
+
}>[typeof definedRenderStateSymbol];
|
|
79
|
+
/**
|
|
80
|
+
* Creates independently typed render-state fragments.
|
|
81
|
+
*
|
|
82
|
+
* - Calling it directly creates an eager state.
|
|
83
|
+
* - `.defer(...)` schedules an inline definition through `React.lazy`, but
|
|
84
|
+
* does not create a separate JavaScript chunk.
|
|
85
|
+
* - `.lazy(() => import(...))` imports a complete named state definition as a
|
|
86
|
+
* separate chunk.
|
|
87
|
+
*/
|
|
88
|
+
type CreateRenderState<Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources> = {}, SharedComposables extends ComposableComponents = {}> = {
|
|
89
|
+
<const State extends string = 'default', const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>): RenderStateFragment<TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>>;
|
|
90
|
+
<const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: Omit<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>, 'state'>): RenderStateFragment<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>>;
|
|
91
|
+
<const Render extends RenderStateCallback>(render: Render): RenderStateFragment<Render>;
|
|
92
|
+
defer<const State extends string = 'default', const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>): RenderStateFragment<DeferredRenderState<TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>>>;
|
|
93
|
+
defer<const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: Omit<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>, 'state'>): RenderStateFragment<DeferredRenderState<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>>>;
|
|
94
|
+
defer<const Render extends RenderStateCallback>(render: Render): RenderStateFragment<DeferredRenderState<{
|
|
95
|
+
render: Render;
|
|
96
|
+
state: 'default';
|
|
97
|
+
}>>;
|
|
98
|
+
lazy<Module extends Record<string, unknown>>(load: () => Promise<Module>): LazyRenderState<DefinedRenderStateFromModule<Module>>;
|
|
99
|
+
};
|
|
100
|
+
/** Inputs used internally to bind resource and option types to a state builder. */
|
|
101
|
+
type CreateRenderStateBuilderArguments<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}> = {
|
|
102
|
+
/** Shared composables whose components and preset props every state can use. */composables?: LayoutComposablesDefinition<Resources, SharedComposables>; /** Option props that individual states can expose through `props.include`. */
|
|
103
|
+
options: Options; /** Resources used to constrain composable names and resource-specific props. */
|
|
104
|
+
resources: Resources;
|
|
105
|
+
};
|
|
106
|
+
/** The state factory produced for a particular resource and option definition. */
|
|
107
|
+
type CreateRenderStateBuilderResult<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}> = CreateRenderState<Resources, Options, SharedComposables>;
|
|
108
|
+
/** Identity helper that contextually types a reusable composables callback. */
|
|
109
|
+
type DefineLayoutComposables<Resources extends ReadonlyArray<ResourceDefinition>> = <const Composables extends ComposableComponents>(definition: LayoutComposablesDefinition<Resources, Composables>) => LayoutComposablesDefinition<Resources, Composables>;
|
|
110
|
+
/** Public cross-file building blocks returned by a defined layout builder. */
|
|
111
|
+
type CreateLayoutBuildingBlocks<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>> = {
|
|
112
|
+
composables: DefineLayoutComposables<Resources>;
|
|
113
|
+
createRenderState: CreateRenderState<Resources, Options>;
|
|
114
|
+
};
|
|
115
|
+
/** Resource and option bindings used to create layout building blocks. */
|
|
116
|
+
type CreateLayoutBuildingBlocksArguments<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>> = CreateRenderStateBuilderArguments<Resources, Options>;
|
|
117
|
+
/** Layout helpers produced for the supplied resource and option bindings. */
|
|
118
|
+
type CreateLayoutBuildingBlocksResult<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>> = CreateLayoutBuildingBlocks<Resources, Options>;
|
|
119
|
+
//#endregion
|
|
120
|
+
export { AnyRenderStateDefinition, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateProps, definedResourceLayoutComponentSymbol };
|
|
121
|
+
//# sourceMappingURL=render-state.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-state.d.cts","names":[],"sources":["../../src/create-config/render-state.ts"],"mappings":";;;;;;cAca,yBAAA;AAAA,cAGA,qBAAA;AAAA,cAGA,wBAAA;AAAA,cAGA,oCAAA;;KAKD,wBAAA;EACV,WAAA,IAAe,MAAA,EAAQ,sBAAA,UAAgC,oBAAA;EACvD,KAAA;IACE,OAAA,GAAU,MAAA;IACV,MAAA,GAAS,aAAA;EAAA;EAEX,MAAA,GAAS,KAAA,OAAY,OAAA,UAAiB,GAAA,CAAI,OAAA;EAC1C,KAAA;AAAA;;KAIU,mBAAA,oBAAuC,wBAAA;EAAA,UACvC,yBAAA,GAA4B,UAAA;AAAA;;KAI5B,eAAA,oBAAmC,wBAAA;EAAA,UACnC,qBAAA,SAA8B,OAAA,CAAQ,MAAA;EAAA,SACvC,UAAA,GAAa,UAAA;AAAA;;KAIZ,mBAAA,IAAuB,KAAA,OAAY,OAAA,UAAiB,GAAA,CAAI,OAAO;;;;;KAM/D,gCAAA,mBACQ,aAAA,CAAc,kBAAA,uBACZ,oBAAA,KAEpB,MAAA,EAAQ,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,OAC9C,WAAA;;;;;KAMO,2BAAA,mBACQ,aAAA,CAAc,kBAAA,uBACZ,oBAAA,IAClB,gCAAA,CAAiC,SAAA,EAAW,WAAA;AAAA,KAE3C,wBAAA,qBAA6C,oBAAA,WAC1C,WAAA,gCAGJ,WAAA;;KAGQ,kBAAA,qBACU,oBAAA;EAEpB,WAAA,EAAa,wBAAA,CAAyB,WAAA;EACtC,KAAA;AAAA;;;;;KAOU,gBAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,uBACd,oBAAA,uBACC,aAAA,CACnB,mBAAA,CAAoB,SAAA,EAAW,OAAA,EAAS,WAAA,wBAEtB,aAAA,IAClB,iBAAA,CACF,SAAA,EACA,OAAA,EACA,WAAA,EACA,YAAA,EACA,WAAA;AAAA,KAGG,0BAAA,mBACe,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,6CAEd,aAAA,4BACM,oBAAA,2BACD,oBAAA,uBACJ,aAAA,CACnB,mBAAA,CACE,SAAA,EACA,OAAA,EACA,iBAAA,GAAoB,gBAAA;EAIxB,WAAA,GAAc,gCAAA,CAAiC,SAAA,EAAW,gBAAA;EAC1D,KAAA;IACE,OAAA,GAAU,YAAA;IACV,MAAA,GAAS,WAAA;EAAA;EAEX,MAAA,GACE,KAAA,EAAO,gBAAA,CACL,SAAA,EACA,OAAA,EACA,iBAAA,GAAoB,gBAAA,EACpB,YAAA,EACA,WAAA,GAEF,OAAA,EAAS,kBAAA,CAAmB,iBAAA,GAAoB,gBAAA,MAC7C,GAAA,CAAI,OAAA;EACT,KAAA,EAAO,KAAA;AAAA;AAAA,KAGJ,8BAAA,UACH,KAAA,SAAc,mBAAA,qBACV,UAAA,GACA,KAAA,SAAc,mBAAA;EACV,MAAA,EAAQ,KAAA;EAAO,KAAA;AAAA,IACjB,KAAA,SAAc,wBAAA,GACZ,KAAA;AAAA,KAGL,SAAA,eAAwB,UAAA,SAAmB,mBAAA,6BAG5C,SAAA,CAAU,kBAAA,IACV,UAAA;EAAqB,KAAA;AAAA,IACnB,KAAA;;;;;KAOM,mBAAA,2BACA,SAAA,CAAU,8BAAA,CAA+B,UAAA,KAAe,UAAA;EAAA,UAExD,wBAAA,GAA2B,8BAAA,CAA+B,UAAA;AAAA;AAAA,KAGjE,4BAAA,WAAuC,OAAA,CAC1C,MAAA,OAAa,MAAA;EAAA,UACD,wBAAA,GAA2B,wBAAA;AAAA,UAChC,wBAAA;;;;;AA3HyB;AAIlC;;;;KAkIY,iBAAA,mBACQ,aAAA,CAAc,kBAAA,IAAsB,aAAA,CAAc,kBAAA,mBACpD,iBAAA,CAAkB,SAAA,kCACR,oBAAA;EAAA,mEAIE,aAAA,sCACK,oBAAA,kCACJ,aAAA,CACzB,mBAAA,CACE,SAAA,EACA,OAAA,EACA,iBAAA,GAAoB,gBAAA,SAIxB,UAAA,EAAY,0BAAA,CACV,SAAA,EACA,OAAA,EACA,KAAA,EACA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA,IAED,mBAAA,CACD,0BAAA,CACE,SAAA,EACA,OAAA,EACA,KAAA,EACA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA;EAAA,2BAIwB,aAAA,sCACK,oBAAA,kCACJ,aAAA,CACzB,mBAAA,CACE,SAAA,EACA,OAAA,EACA,iBAAA,GAAoB,gBAAA,SAIxB,UAAA,EAAY,IAAA,CACV,0BAAA,CACE,SAAA,EACA,OAAA,aAEA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA,cAIH,mBAAA,CACD,0BAAA,CACE,SAAA,EACA,OAAA,aAEA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA;EAAA,sBAGkB,mBAAA,EACpB,MAAA,EAAQ,MAAA,GACP,mBAAA,CAAoB,MAAA;EACvB,KAAA,mEAE4B,aAAA,sCACK,oBAAA,kCACJ,aAAA,CACzB,mBAAA,CACE,SAAA,EACA,OAAA,EACA,iBAAA,GAAoB,gBAAA,SAIxB,UAAA,EAAY,0BAAA,CACV,SAAA,EACA,OAAA,EACA,KAAA,EACA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA,IAED,mBAAA,CACD,mBAAA,CACE,0BAAA,CACE,SAAA,EACA,OAAA,EACA,KAAA,EACA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA;EAIN,KAAA,2BAC4B,aAAA,sCACK,oBAAA,kCACJ,aAAA,CACzB,mBAAA,CACE,SAAA,EACA,OAAA,EACA,iBAAA,GAAoB,gBAAA,SAIxB,UAAA,EAAY,IAAA,CACV,0BAAA,CACE,SAAA,EACA,OAAA,aAEA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA,cAIH,mBAAA,CACD,mBAAA,CACE,0BAAA,CACE,SAAA,EACA,OAAA,aAEA,WAAA,EACA,iBAAA,EACA,gBAAA,EACA,YAAA;EAIN,KAAA,sBAA2B,mBAAA,EACzB,MAAA,EAAQ,MAAA,GACP,mBAAA,CAAoB,mBAAA;IAAsB,MAAA,EAAQ,MAAA;IAAQ,KAAA;EAAA;EAC7D,IAAA,gBAAoB,MAAA,mBAClB,IAAA,QAAY,OAAA,CAAQ,MAAA,IACnB,eAAA,CAAgB,4BAAA,CAA6B,MAAA;AAAA;;KA2BtC,iCAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,6BACR,oBAAA;EA3SlB,gFA8SR,WAAA,GAAc,2BAAA,CAA4B,SAAA,EAAW,iBAAA,GA7SvC;EA+Sd,OAAA,EAAS,OAAA,EAnTT;EAqTA,SAAA,EAAW,SAAA;AAAA;;KAID,8BAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,6BACR,oBAAA,SACxB,iBAAA,CAAkB,SAAA,EAAW,OAAA,EAAS,iBAAA;;KAyF9B,uBAAA,mBACQ,aAAA,CAAc,kBAAA,gCACH,oBAAA,EAC7B,UAAA,EAAY,2BAAA,CAA4B,SAAA,EAAW,WAAA,MAChD,2BAAA,CAA4B,SAAA,EAAW,WAAA;;KAGhC,0BAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA;EAElC,WAAA,EAAa,uBAAA,CAAwB,SAAA;EACrC,iBAAA,EAAmB,iBAAA,CAAkB,SAAA,EAAW,OAAA;AAAA;;KAItC,mCAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,KAChC,iCAAA,CAAkC,SAAA,EAAW,OAAA;;KAGrC,gCAAA,mBACQ,aAAA,CAAc,kBAAA,mBAChB,iBAAA,CAAkB,SAAA,KAChC,0BAAA,CAA2B,SAAA,EAAW,OAAA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { LayoutResourceKey, ResourceDefinition } from "../resource.mjs";
|
|
2
|
+
import { InPropsDefinition, InPropsObject, IncludedProps, LayoutRenderProps, MergedLayoutInProps } from "../props.mjs";
|
|
3
|
+
import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
|
|
4
|
+
import { JSX } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/create-config/render-state.d.ts
|
|
7
|
+
declare const deferredRenderStateSymbol: unique symbol;
|
|
8
|
+
declare const lazyRenderStateSymbol: unique symbol;
|
|
9
|
+
declare const definedRenderStateSymbol: unique symbol;
|
|
10
|
+
declare const definedResourceLayoutComponentSymbol: unique symbol;
|
|
11
|
+
/** Runtime-compatible render-state shape used when inspecting lazy modules. */
|
|
12
|
+
type AnyRenderStateDefinition = {
|
|
13
|
+
composables?: (create: CreateLayoutComposable<any>) => ComposableComponents;
|
|
14
|
+
props?: {
|
|
15
|
+
include?: Record<string, unknown>;
|
|
16
|
+
custom?: InPropsObject;
|
|
17
|
+
};
|
|
18
|
+
render: (props: any, context: any) => JSX.Element;
|
|
19
|
+
state?: string;
|
|
20
|
+
};
|
|
21
|
+
/** An inline state whose first render is scheduled through `React.lazy`. */
|
|
22
|
+
type DeferredRenderState<Definition extends AnyRenderStateDefinition> = {
|
|
23
|
+
readonly [deferredRenderStateSymbol]: Definition;
|
|
24
|
+
};
|
|
25
|
+
/** A state definition supplied by a separately imported module. */
|
|
26
|
+
type LazyRenderState<Definition extends AnyRenderStateDefinition> = {
|
|
27
|
+
readonly [lazyRenderStateSymbol]: () => Promise<Record<string, unknown>>;
|
|
28
|
+
readonly definition?: Definition;
|
|
29
|
+
};
|
|
30
|
+
/** Callback shorthand for a render state with no local configuration. */
|
|
31
|
+
type RenderStateCallback = (props: any, context: any) => JSX.Element;
|
|
32
|
+
/**
|
|
33
|
+
* Defines state-local composable components with a `create` helper narrowed to
|
|
34
|
+
* the resources bound to the surrounding builder.
|
|
35
|
+
*/
|
|
36
|
+
type RenderStateComposablesDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Composables extends ComposableComponents> = (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => Composables;
|
|
37
|
+
/**
|
|
38
|
+
* Defines reusable layout-level composables while preserving their inferred
|
|
39
|
+
* names, props, and bound resource union.
|
|
40
|
+
*/
|
|
41
|
+
type LayoutComposablesDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Composables extends ComposableComponents> = RenderStateComposablesDefinition<Resources, Composables>;
|
|
42
|
+
type BuilderRenderComposables<Composables extends ComposableComponents> = [keyof Composables] extends [never] ? undefined : Composables;
|
|
43
|
+
/** Values available as the second argument of a created state's `render`. */
|
|
44
|
+
type RenderStateContext<Composables extends ComposableComponents> = {
|
|
45
|
+
composables: BuilderRenderComposables<Composables>;
|
|
46
|
+
retry?: () => void;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Resolves one state's custom props and explicitly included option/composable
|
|
50
|
+
* props to the values received by its render callback.
|
|
51
|
+
*/
|
|
52
|
+
type RenderStateProps<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, Composables>>, CustomProps extends InPropsObject> = LayoutRenderProps<Resources, Options, Composables, IncludeProps, CustomProps>;
|
|
53
|
+
type TypedRenderStateDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, State extends string, CustomProps extends InPropsObject, SharedComposables extends ComposableComponents, StateComposables extends ComposableComponents, IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>>> = {
|
|
54
|
+
composables?: RenderStateComposablesDefinition<Resources, StateComposables>;
|
|
55
|
+
props?: {
|
|
56
|
+
include?: IncludeProps;
|
|
57
|
+
custom?: CustomProps;
|
|
58
|
+
};
|
|
59
|
+
render: (props: RenderStateProps<Resources, Options, SharedComposables & StateComposables, IncludeProps, CustomProps>, context: RenderStateContext<SharedComposables & StateComposables>) => JSX.Element;
|
|
60
|
+
state: State;
|
|
61
|
+
};
|
|
62
|
+
type NormalizeRenderStateDefinition<Input> = Input extends DeferredRenderState<infer Definition> ? Definition : Input extends RenderStateCallback ? {
|
|
63
|
+
render: Input;
|
|
64
|
+
state: 'default';
|
|
65
|
+
} : Input extends AnyRenderStateDefinition ? Input : never;
|
|
66
|
+
type StateName<Definition> = Definition extends DeferredRenderState<infer DeferredDefinition> ? StateName<DeferredDefinition> : Definition extends {
|
|
67
|
+
state?: infer State extends string;
|
|
68
|
+
} ? State : 'default';
|
|
69
|
+
/**
|
|
70
|
+
* A spreadable state entry keyed by its literal state name. Spreading this into
|
|
71
|
+
* `layout.render` is what creates compound members such as `Users.Loading`.
|
|
72
|
+
*/
|
|
73
|
+
type RenderStateFragment<Definition> = { [State in StateName<NormalizeRenderStateDefinition<Definition>>]: Definition } & {
|
|
74
|
+
readonly [definedRenderStateSymbol]: NormalizeRenderStateDefinition<Definition>;
|
|
75
|
+
};
|
|
76
|
+
type DefinedRenderStateFromModule<Module> = Extract<Module[keyof Module], {
|
|
77
|
+
readonly [definedRenderStateSymbol]: AnyRenderStateDefinition;
|
|
78
|
+
}>[typeof definedRenderStateSymbol];
|
|
79
|
+
/**
|
|
80
|
+
* Creates independently typed render-state fragments.
|
|
81
|
+
*
|
|
82
|
+
* - Calling it directly creates an eager state.
|
|
83
|
+
* - `.defer(...)` schedules an inline definition through `React.lazy`, but
|
|
84
|
+
* does not create a separate JavaScript chunk.
|
|
85
|
+
* - `.lazy(() => import(...))` imports a complete named state definition as a
|
|
86
|
+
* separate chunk.
|
|
87
|
+
*/
|
|
88
|
+
type CreateRenderState<Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources> = {}, SharedComposables extends ComposableComponents = {}> = {
|
|
89
|
+
<const State extends string = 'default', const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>): RenderStateFragment<TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>>;
|
|
90
|
+
<const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: Omit<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>, 'state'>): RenderStateFragment<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>>;
|
|
91
|
+
<const Render extends RenderStateCallback>(render: Render): RenderStateFragment<Render>;
|
|
92
|
+
defer<const State extends string = 'default', const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>): RenderStateFragment<DeferredRenderState<TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>>>;
|
|
93
|
+
defer<const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: Omit<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>, 'state'>): RenderStateFragment<DeferredRenderState<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>>>;
|
|
94
|
+
defer<const Render extends RenderStateCallback>(render: Render): RenderStateFragment<DeferredRenderState<{
|
|
95
|
+
render: Render;
|
|
96
|
+
state: 'default';
|
|
97
|
+
}>>;
|
|
98
|
+
lazy<Module extends Record<string, unknown>>(load: () => Promise<Module>): LazyRenderState<DefinedRenderStateFromModule<Module>>;
|
|
99
|
+
};
|
|
100
|
+
/** Inputs used internally to bind resource and option types to a state builder. */
|
|
101
|
+
type CreateRenderStateBuilderArguments<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}> = {
|
|
102
|
+
/** Shared composables whose components and preset props every state can use. */composables?: LayoutComposablesDefinition<Resources, SharedComposables>; /** Option props that individual states can expose through `props.include`. */
|
|
103
|
+
options: Options; /** Resources used to constrain composable names and resource-specific props. */
|
|
104
|
+
resources: Resources;
|
|
105
|
+
};
|
|
106
|
+
/** The state factory produced for a particular resource and option definition. */
|
|
107
|
+
type CreateRenderStateBuilderResult<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}> = CreateRenderState<Resources, Options, SharedComposables>;
|
|
108
|
+
/** Identity helper that contextually types a reusable composables callback. */
|
|
109
|
+
type DefineLayoutComposables<Resources extends ReadonlyArray<ResourceDefinition>> = <const Composables extends ComposableComponents>(definition: LayoutComposablesDefinition<Resources, Composables>) => LayoutComposablesDefinition<Resources, Composables>;
|
|
110
|
+
/** Public cross-file building blocks returned by a defined layout builder. */
|
|
111
|
+
type CreateLayoutBuildingBlocks<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>> = {
|
|
112
|
+
composables: DefineLayoutComposables<Resources>;
|
|
113
|
+
createRenderState: CreateRenderState<Resources, Options>;
|
|
114
|
+
};
|
|
115
|
+
/** Resource and option bindings used to create layout building blocks. */
|
|
116
|
+
type CreateLayoutBuildingBlocksArguments<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>> = CreateRenderStateBuilderArguments<Resources, Options>;
|
|
117
|
+
/** Layout helpers produced for the supplied resource and option bindings. */
|
|
118
|
+
type CreateLayoutBuildingBlocksResult<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>> = CreateLayoutBuildingBlocks<Resources, Options>;
|
|
119
|
+
//#endregion
|
|
120
|
+
export { AnyRenderStateDefinition, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateProps, definedResourceLayoutComponentSymbol };
|
|
121
|
+
//# sourceMappingURL=render-state.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-state.d.mts","names":[],"sources":["../../src/create-config/render-state.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
//#region src/create-config/render-state.ts
|
|
2
|
+
const deferredRenderStateSymbol = Symbol("deferredRenderState");
|
|
3
|
+
const lazyRenderStateSymbol = Symbol("lazyRenderState");
|
|
4
|
+
const definedRenderStateSymbol = Symbol.for("@jfdevelops/react-layout/render-state");
|
|
5
|
+
const definedResourceLayoutComponentSymbol = Symbol.for("@jfdevelops/react-layout/resource-layout-component");
|
|
6
|
+
function normalizeDefinition(input) {
|
|
7
|
+
return typeof input === "function" ? {
|
|
8
|
+
render: input,
|
|
9
|
+
state: "default"
|
|
10
|
+
} : input;
|
|
11
|
+
}
|
|
12
|
+
function toFragment(definition) {
|
|
13
|
+
const fragment = { [definition.state ?? "default"]: definition };
|
|
14
|
+
Object.defineProperty(fragment, definedRenderStateSymbol, {
|
|
15
|
+
enumerable: false,
|
|
16
|
+
value: definition
|
|
17
|
+
});
|
|
18
|
+
return fragment;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates a state factory whose `props.include` keys are constrained by the
|
|
22
|
+
* supplied resources and options.
|
|
23
|
+
*/
|
|
24
|
+
function createRenderStateBuilder(_arguments) {
|
|
25
|
+
function createRenderState(input) {
|
|
26
|
+
return toFragment(normalizeDefinition(input));
|
|
27
|
+
}
|
|
28
|
+
createRenderState.defer = (input) => {
|
|
29
|
+
const definition = normalizeDefinition(input);
|
|
30
|
+
return { [definition.state ?? "default"]: { [deferredRenderStateSymbol]: definition } };
|
|
31
|
+
};
|
|
32
|
+
createRenderState.lazy = (load) => ({ [lazyRenderStateSymbol]: load });
|
|
33
|
+
return createRenderState;
|
|
34
|
+
}
|
|
35
|
+
/** Type guard for states created with `createRenderState.defer(...)`. */
|
|
36
|
+
function isDeferredRenderState(value) {
|
|
37
|
+
return typeof value === "object" && value !== null && deferredRenderStateSymbol in value;
|
|
38
|
+
}
|
|
39
|
+
/** Type guard for states created with `createRenderState.lazy(...)`. */
|
|
40
|
+
function isLazyRenderState(value) {
|
|
41
|
+
return typeof value === "object" && value !== null && lazyRenderStateSymbol in value;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Selects the single state definition exported by a lazy module. Throws when
|
|
45
|
+
* the module exports none or more than one, avoiding ambiguous selection.
|
|
46
|
+
*/
|
|
47
|
+
function findDefinedRenderState(module) {
|
|
48
|
+
const definitions = Object.values(module).filter((value) => typeof value === "object" && value !== null && definedRenderStateSymbol in value);
|
|
49
|
+
if (definitions.length !== 1) throw new Error(`A lazy render-state module must export exactly one defined render state; received ${definitions.length}.`);
|
|
50
|
+
return definitions[0][definedRenderStateSymbol];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
//#endregion
|
|
54
|
+
export { createRenderStateBuilder, deferredRenderStateSymbol, definedResourceLayoutComponentSymbol, findDefinedRenderState, isDeferredRenderState, isLazyRenderState, lazyRenderStateSymbol };
|
|
55
|
+
//# sourceMappingURL=render-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-state.mjs","names":[],"sources":["../../src/create-config/render-state.ts"],"sourcesContent":["import type { JSX } from 'react';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '../props';\nimport type {\n IncludedProps,\n InPropsDefinition,\n LayoutRenderProps,\n MergedLayoutInProps,\n} from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\n\nexport const deferredRenderStateSymbol: unique symbol = Symbol(\n 'deferredRenderState',\n) as never;\nexport const lazyRenderStateSymbol: unique symbol = Symbol(\n 'lazyRenderState',\n) as never;\nexport const definedRenderStateSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/render-state',\n) as never;\nexport const definedResourceLayoutComponentSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/resource-layout-component',\n) as never;\n\n/** Runtime-compatible render-state shape used when inspecting lazy modules. */\nexport type AnyRenderStateDefinition = {\n composables?: (create: CreateLayoutComposable<any>) => ComposableComponents;\n props?: {\n include?: Record<string, unknown>;\n custom?: InPropsObject;\n };\n render: (props: any, context: any) => JSX.Element;\n state?: string;\n};\n\n/** An inline state whose first render is scheduled through `React.lazy`. */\nexport type DeferredRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [deferredRenderStateSymbol]: Definition;\n};\n\n/** A state definition supplied by a separately imported module. */\nexport type LazyRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [lazyRenderStateSymbol]: () => Promise<Record<string, unknown>>;\n readonly definition?: Definition;\n};\n\n/** Callback shorthand for a render state with no local configuration. */\nexport type RenderStateCallback = (props: any, context: any) => JSX.Element;\n\n/**\n * Defines state-local composable components with a `create` helper narrowed to\n * the resources bound to the surrounding builder.\n */\nexport type RenderStateComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n> = (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n) => Composables;\n\n/**\n * Defines reusable layout-level composables while preserving their inferred\n * names, props, and bound resource union.\n */\nexport type LayoutComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n> = RenderStateComposablesDefinition<Resources, Composables>;\n\ntype BuilderRenderComposables<Composables extends ComposableComponents> = [\n keyof Composables,\n] extends [never]\n ? undefined\n : Composables;\n\n/** Values available as the second argument of a created state's `render`. */\nexport type RenderStateContext<\n Composables extends ComposableComponents,\n> = {\n composables: BuilderRenderComposables<Composables>;\n retry?: () => void;\n};\n\n/**\n * Resolves one state's custom props and explicitly included option/composable\n * props to the values received by its render callback.\n */\nexport type RenderStateProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n >,\n CustomProps extends InPropsObject,\n> = LayoutRenderProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n>;\n\ntype TypedRenderStateDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n State extends string,\n CustomProps extends InPropsObject,\n SharedComposables extends ComposableComponents,\n StateComposables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n >,\n> = {\n composables?: RenderStateComposablesDefinition<Resources, StateComposables>;\n props?: {\n include?: IncludeProps;\n custom?: CustomProps;\n };\n render: (\n props: RenderStateProps<\n Resources,\n Options,\n SharedComposables & StateComposables,\n IncludeProps,\n CustomProps\n >,\n context: RenderStateContext<SharedComposables & StateComposables>,\n ) => JSX.Element;\n state: State;\n};\n\ntype NormalizeRenderStateDefinition<Input> =\n Input extends DeferredRenderState<infer Definition>\n ? Definition\n : Input extends RenderStateCallback\n ? { render: Input; state: 'default' }\n : Input extends AnyRenderStateDefinition\n ? Input\n : never;\n\ntype StateName<Definition> = Definition extends DeferredRenderState<\n infer DeferredDefinition\n>\n ? StateName<DeferredDefinition>\n : Definition extends { state?: infer State extends string }\n ? State\n : 'default';\n\n/**\n * A spreadable state entry keyed by its literal state name. Spreading this into\n * `layout.render` is what creates compound members such as `Users.Loading`.\n */\nexport type RenderStateFragment<Definition> = {\n [State in StateName<NormalizeRenderStateDefinition<Definition>>]: Definition;\n} & {\n readonly [definedRenderStateSymbol]: NormalizeRenderStateDefinition<Definition>;\n};\n\ntype DefinedRenderStateFromModule<Module> = Extract<\n Module[keyof Module],\n { readonly [definedRenderStateSymbol]: AnyRenderStateDefinition }\n>[typeof definedRenderStateSymbol];\n\n/**\n * Creates independently typed render-state fragments.\n *\n * - Calling it directly creates an eager state.\n * - `.defer(...)` schedules an inline definition through `React.lazy`, but\n * does not create a separate JavaScript chunk.\n * - `.lazy(() => import(...))` imports a complete named state definition as a\n * separate chunk.\n */\nexport type CreateRenderState<\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n SharedComposables extends ComposableComponents = {},\n> = {\n <\n const State extends string = 'default',\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n ): RenderStateFragment<\n TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >;\n <\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: Omit<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n 'state'\n >,\n ): RenderStateFragment<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >;\n <const Render extends RenderStateCallback>(\n render: Render,\n ): RenderStateFragment<Render>;\n defer<\n const State extends string = 'default',\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n ): RenderStateFragment<\n DeferredRenderState<\n TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >\n >;\n defer<\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: Omit<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n 'state'\n >,\n ): RenderStateFragment<\n DeferredRenderState<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >\n >\n >;\n defer<const Render extends RenderStateCallback>(\n render: Render,\n ): RenderStateFragment<DeferredRenderState<{ render: Render; state: 'default' }>>;\n lazy<Module extends Record<string, unknown>>(\n load: () => Promise<Module>,\n ): LazyRenderState<DefinedRenderStateFromModule<Module>>;\n};\n\nfunction normalizeDefinition(\n input: AnyRenderStateDefinition | RenderStateCallback,\n): AnyRenderStateDefinition {\n return typeof input === 'function'\n ? { render: input, state: 'default' }\n : input;\n}\n\nfunction toFragment<Definition extends AnyRenderStateDefinition>(\n definition: Definition,\n) {\n const fragment = {\n [definition.state ?? 'default']: definition,\n } as RenderStateFragment<Definition>;\n\n Object.defineProperty(fragment, definedRenderStateSymbol, {\n enumerable: false,\n value: definition,\n });\n\n return fragment;\n}\n\n/** Inputs used internally to bind resource and option types to a state builder. */\nexport type CreateRenderStateBuilderArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n> = {\n /** Shared composables whose components and preset props every state can use. */\n composables?: LayoutComposablesDefinition<Resources, SharedComposables>;\n /** Option props that individual states can expose through `props.include`. */\n options: Options;\n /** Resources used to constrain composable names and resource-specific props. */\n resources: Resources;\n};\n\n/** The state factory produced for a particular resource and option definition. */\nexport type CreateRenderStateBuilderResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n> = CreateRenderState<Resources, Options, SharedComposables>;\n\n/**\n * Creates a state factory whose `props.include` keys are constrained by the\n * supplied resources and options.\n */\nexport function createRenderStateBuilder<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n>(\n _arguments: CreateRenderStateBuilderArguments<\n Resources,\n Options,\n SharedComposables\n >,\n): CreateRenderStateBuilderResult<Resources, Options, SharedComposables> {\n function createRenderState(\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) {\n return toFragment(normalizeDefinition(input));\n }\n\n createRenderState.defer = (\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) => {\n const definition = normalizeDefinition(input);\n\n return {\n [definition.state ?? 'default']: {\n [deferredRenderStateSymbol]: definition,\n },\n };\n };\n createRenderState.lazy = (\n load: () => Promise<Record<string, unknown>>,\n ) => ({\n [lazyRenderStateSymbol]: load,\n });\n\n return createRenderState as CreateRenderStateBuilderResult<\n Resources,\n Options,\n SharedComposables\n >;\n}\n\n/** Type guard for states created with `createRenderState.defer(...)`. */\nexport function isDeferredRenderState(\n value: unknown,\n): value is DeferredRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' &&\n value !== null &&\n deferredRenderStateSymbol in value\n );\n}\n\n/** Type guard for states created with `createRenderState.lazy(...)`. */\nexport function isLazyRenderState(\n value: unknown,\n): value is LazyRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' && value !== null && lazyRenderStateSymbol in value\n );\n}\n\n/**\n * Selects the single state definition exported by a lazy module. Throws when\n * the module exports none or more than one, avoiding ambiguous selection.\n */\nexport function findDefinedRenderState(\n module: Record<string, unknown>,\n): AnyRenderStateDefinition {\n const definitions = Object.values(module).filter(\n (value) =>\n typeof value === 'object' && value !== null && definedRenderStateSymbol in value,\n ) as Array<Record<typeof definedRenderStateSymbol, AnyRenderStateDefinition>>;\n\n if (definitions.length !== 1) {\n throw new Error(\n `A lazy render-state module must export exactly one defined render state; received ${definitions.length}.`,\n );\n }\n\n return definitions[0][definedRenderStateSymbol];\n}\n\n/** Identity helper that contextually types a reusable composables callback. */\nexport type DefineLayoutComposables<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = <const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n) => LayoutComposablesDefinition<Resources, Composables>;\n\n/** Public cross-file building blocks returned by a defined layout builder. */\nexport type CreateLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = {\n composables: DefineLayoutComposables<Resources>;\n createRenderState: CreateRenderState<Resources, Options>;\n};\n\n/** Resource and option bindings used to create layout building blocks. */\nexport type CreateLayoutBuildingBlocksArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateRenderStateBuilderArguments<Resources, Options>;\n\n/** Layout helpers produced for the supplied resource and option bindings. */\nexport type CreateLayoutBuildingBlocksResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateLayoutBuildingBlocks<Resources, Options>;\n\n/**\n * Creates the reusable `composables` and `createRenderState` helpers without\n * introducing an identity wrapper around the layout object itself.\n */\nexport function createLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n>(\n arguments_: CreateLayoutBuildingBlocksArguments<Resources, Options>,\n): CreateLayoutBuildingBlocksResult<Resources, Options> {\n function composables<const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n ): LayoutComposablesDefinition<Resources, Composables> {\n return definition;\n }\n\n return {\n composables,\n createRenderState: createRenderStateBuilder(arguments_),\n };\n}\n\n/** Preserves a bound resource tuple for consumers that need to re-export it. */\nexport type BoundResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = Resources;\n"],"mappings":";AAcA,MAAa,4BAA2C,OACtD,qBACF;AACA,MAAa,wBAAuC,OAClD,iBACF;AACA,MAAa,2BAA0C,OAAO,IAC5D,uCACF;AACA,MAAa,uCAAsD,OAAO,IACxE,oDACF;AAmTA,SAAS,oBACP,OAC0B;CAC1B,OAAO,OAAO,UAAU,aACpB;EAAE,QAAQ;EAAO,OAAO;CAAU,IAClC;AACN;AAEA,SAAS,WACP,YACA;CACA,MAAM,WAAW,GACd,WAAW,SAAS,YAAY,WACnC;CAEA,OAAO,eAAe,UAAU,0BAA0B;EACxD,YAAY;EACZ,OAAO;CACT,CAAC;CAED,OAAO;AACT;;;;;AA2BA,SAAgB,yBAKd,YAKuE;CACvE,SAAS,kBACP,OACA;EACA,OAAO,WAAW,oBAAoB,KAAK,CAAC;CAC9C;CAEA,kBAAkB,SAChB,UACG;EACH,MAAM,aAAa,oBAAoB,KAAK;EAE5C,OAAO,GACJ,WAAW,SAAS,YAAY,GAC9B,4BAA4B,WAC/B,EACF;CACF;CACA,kBAAkB,QAChB,UACI,GACH,wBAAwB,KAC3B;CAEA,OAAO;AAKT;;AAGA,SAAgB,sBACd,OACwD;CACxD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,6BAA6B;AAEjC;;AAGA,SAAgB,kBACd,OACoD;CACpD,OACE,OAAO,UAAU,YAAY,UAAU,QAAQ,yBAAyB;AAE5E;;;;;AAMA,SAAgB,uBACd,QAC0B;CAC1B,MAAM,cAAc,OAAO,OAAO,MAAM,EAAE,QACvC,UACC,OAAO,UAAU,YAAY,UAAU,QAAQ,4BAA4B,KAC/E;CAEA,IAAI,YAAY,WAAW,GACzB,MAAM,IAAI,MACR,qFAAqF,YAAY,OAAO,EAC1G;CAGF,OAAO,YAAY,GAAG;AACxB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/errors/resource-state-error.ts
|
|
3
|
+
/** Identifies a failed dynamic import for a resource layout or render state. */
|
|
4
|
+
var ResourceModuleLoadError = class extends Error {
|
|
5
|
+
resource;
|
|
6
|
+
code = "resourceModuleLoad";
|
|
7
|
+
constructor(resource, cause) {
|
|
8
|
+
super(`Unable to load resource module "${resource}"`, { cause });
|
|
9
|
+
this.resource = resource;
|
|
10
|
+
this.name = "ResourceModuleLoadError";
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
/** Wraps an exception thrown while rendering a named resource state. */
|
|
14
|
+
var ResourceRenderError = class extends Error {
|
|
15
|
+
resource;
|
|
16
|
+
state;
|
|
17
|
+
code = "resourceRender";
|
|
18
|
+
constructor(resource, state, cause) {
|
|
19
|
+
super(`Unable to render resource "${resource}" state "${state}"`, { cause });
|
|
20
|
+
this.resource = resource;
|
|
21
|
+
this.state = state;
|
|
22
|
+
this.name = "ResourceRenderError";
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
exports.ResourceModuleLoadError = ResourceModuleLoadError;
|
|
28
|
+
exports.ResourceRenderError = ResourceRenderError;
|
|
29
|
+
//# sourceMappingURL=resource-state-error.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-state-error.cjs","names":[],"sources":["../../src/errors/resource-state-error.ts"],"sourcesContent":["/** Identifies a failed dynamic import for a resource layout or render state. */\nexport class ResourceModuleLoadError extends Error {\n readonly code = 'resourceModuleLoad';\n\n constructor(\n readonly resource: string,\n cause: unknown,\n ) {\n super(`Unable to load resource module \"${resource}\"`, { cause });\n this.name = 'ResourceModuleLoadError';\n }\n}\n\n/** Wraps an exception thrown while rendering a named resource state. */\nexport class ResourceRenderError extends Error {\n readonly code = 'resourceRender';\n\n constructor(\n readonly resource: string,\n readonly state: string,\n cause: unknown,\n ) {\n super(`Unable to render resource \"${resource}\" state \"${state}\"`, {\n cause,\n });\n this.name = 'ResourceRenderError';\n }\n}\n\n/** Library errors that can trigger a configured resource `Error` state. */\nexport type ResourceStateError =\n | ResourceModuleLoadError\n | ResourceRenderError;\n"],"mappings":";;;AACA,IAAa,0BAAb,cAA6C,MAAM;CAItC;CAHX,AAAS,OAAO;CAEhB,YACE,AAAS,UACT,OACA;EACA,MAAM,mCAAmC,SAAS,IAAI,EAAE,MAAM,CAAC;EAHtD;EAIT,KAAK,OAAO;CACd;AACF;;AAGA,IAAa,sBAAb,cAAyC,MAAM;CAIlC;CACA;CAJX,AAAS,OAAO;CAEhB,YACE,AAAS,UACT,AAAS,OACT,OACA;EACA,MAAM,8BAA8B,SAAS,WAAW,MAAM,IAAI,EAChE,MACF,CAAC;EANQ;EACA;EAMT,KAAK,OAAO;CACd;AACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/errors/resource-state-error.d.ts
|
|
2
|
+
/** Identifies a failed dynamic import for a resource layout or render state. */
|
|
3
|
+
declare class ResourceModuleLoadError extends Error {
|
|
4
|
+
readonly resource: string;
|
|
5
|
+
readonly code = "resourceModuleLoad";
|
|
6
|
+
constructor(resource: string, cause: unknown);
|
|
7
|
+
}
|
|
8
|
+
/** Wraps an exception thrown while rendering a named resource state. */
|
|
9
|
+
declare class ResourceRenderError extends Error {
|
|
10
|
+
readonly resource: string;
|
|
11
|
+
readonly state: string;
|
|
12
|
+
readonly code = "resourceRender";
|
|
13
|
+
constructor(resource: string, state: string, cause: unknown);
|
|
14
|
+
}
|
|
15
|
+
/** Library errors that can trigger a configured resource `Error` state. */
|
|
16
|
+
type ResourceStateError = ResourceModuleLoadError | ResourceRenderError;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { ResourceModuleLoadError, ResourceRenderError, ResourceStateError };
|
|
19
|
+
//# sourceMappingURL=resource-state-error.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-state-error.d.cts","names":[],"sources":["../../src/errors/resource-state-error.ts"],"mappings":";;cACa,uBAAA,SAAgC,KAAK;EAAA,SAIrC,QAAA;EAAA,SAHF,IAAA;cAGE,QAAA,UACT,KAAA;AAAA;;cAQS,mBAAA,SAA4B,KAAK;EAAA,SAIjC,QAAA;EAAA,SACA,KAAA;EAAA,SAJF,IAAA;cAGE,QAAA,UACA,KAAA,UACT,KAAA;AAAA;AANJ;AAAA,KAgBY,kBAAA,GACR,uBAAA,GACA,mBAAmB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/errors/resource-state-error.d.ts
|
|
2
|
+
/** Identifies a failed dynamic import for a resource layout or render state. */
|
|
3
|
+
declare class ResourceModuleLoadError extends Error {
|
|
4
|
+
readonly resource: string;
|
|
5
|
+
readonly code = "resourceModuleLoad";
|
|
6
|
+
constructor(resource: string, cause: unknown);
|
|
7
|
+
}
|
|
8
|
+
/** Wraps an exception thrown while rendering a named resource state. */
|
|
9
|
+
declare class ResourceRenderError extends Error {
|
|
10
|
+
readonly resource: string;
|
|
11
|
+
readonly state: string;
|
|
12
|
+
readonly code = "resourceRender";
|
|
13
|
+
constructor(resource: string, state: string, cause: unknown);
|
|
14
|
+
}
|
|
15
|
+
/** Library errors that can trigger a configured resource `Error` state. */
|
|
16
|
+
type ResourceStateError = ResourceModuleLoadError | ResourceRenderError;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { ResourceModuleLoadError, ResourceRenderError, ResourceStateError };
|
|
19
|
+
//# sourceMappingURL=resource-state-error.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-state-error.d.mts","names":[],"sources":["../../src/errors/resource-state-error.ts"],"mappings":";;cACa,uBAAA,SAAgC,KAAK;EAAA,SAIrC,QAAA;EAAA,SAHF,IAAA;cAGE,QAAA,UACT,KAAA;AAAA;;cAQS,mBAAA,SAA4B,KAAK;EAAA,SAIjC,QAAA;EAAA,SACA,KAAA;EAAA,SAJF,IAAA;cAGE,QAAA,UACA,KAAA,UACT,KAAA;AAAA;AANJ;AAAA,KAgBY,kBAAA,GACR,uBAAA,GACA,mBAAmB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/errors/resource-state-error.ts
|
|
2
|
+
/** Identifies a failed dynamic import for a resource layout or render state. */
|
|
3
|
+
var ResourceModuleLoadError = class extends Error {
|
|
4
|
+
resource;
|
|
5
|
+
code = "resourceModuleLoad";
|
|
6
|
+
constructor(resource, cause) {
|
|
7
|
+
super(`Unable to load resource module "${resource}"`, { cause });
|
|
8
|
+
this.resource = resource;
|
|
9
|
+
this.name = "ResourceModuleLoadError";
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
/** Wraps an exception thrown while rendering a named resource state. */
|
|
13
|
+
var ResourceRenderError = class extends Error {
|
|
14
|
+
resource;
|
|
15
|
+
state;
|
|
16
|
+
code = "resourceRender";
|
|
17
|
+
constructor(resource, state, cause) {
|
|
18
|
+
super(`Unable to render resource "${resource}" state "${state}"`, { cause });
|
|
19
|
+
this.resource = resource;
|
|
20
|
+
this.state = state;
|
|
21
|
+
this.name = "ResourceRenderError";
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { ResourceModuleLoadError, ResourceRenderError };
|
|
27
|
+
//# sourceMappingURL=resource-state-error.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-state-error.mjs","names":[],"sources":["../../src/errors/resource-state-error.ts"],"sourcesContent":["/** Identifies a failed dynamic import for a resource layout or render state. */\nexport class ResourceModuleLoadError extends Error {\n readonly code = 'resourceModuleLoad';\n\n constructor(\n readonly resource: string,\n cause: unknown,\n ) {\n super(`Unable to load resource module \"${resource}\"`, { cause });\n this.name = 'ResourceModuleLoadError';\n }\n}\n\n/** Wraps an exception thrown while rendering a named resource state. */\nexport class ResourceRenderError extends Error {\n readonly code = 'resourceRender';\n\n constructor(\n readonly resource: string,\n readonly state: string,\n cause: unknown,\n ) {\n super(`Unable to render resource \"${resource}\" state \"${state}\"`, {\n cause,\n });\n this.name = 'ResourceRenderError';\n }\n}\n\n/** Library errors that can trigger a configured resource `Error` state. */\nexport type ResourceStateError =\n | ResourceModuleLoadError\n | ResourceRenderError;\n"],"mappings":";;AACA,IAAa,0BAAb,cAA6C,MAAM;CAItC;CAHX,AAAS,OAAO;CAEhB,YACE,AAAS,UACT,OACA;EACA,MAAM,mCAAmC,SAAS,IAAI,EAAE,MAAM,CAAC;EAHtD;EAIT,KAAK,OAAO;CACd;AACF;;AAGA,IAAa,sBAAb,cAAyC,MAAM;CAIlC;CACA;CAJX,AAAS,OAAO;CAEhB,YACE,AAAS,UACT,AAAS,OACT,OACA;EACA,MAAM,8BAA8B,SAAS,WAAW,MAAM,IAAI,EAChE,MACF,CAAC;EANQ;EACA;EAMT,KAAK,OAAO;CACd;AACF"}
|