@jfdevelops/react-layout 2.1.0 → 2.3.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 +6 -3
- package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
- package/dist/create-config/create-defined-resource-layout.d.cts +16 -13
- package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -1
- package/dist/create-config/create-defined-resource-layout.d.mts +16 -13
- package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
- package/dist/create-config/create-defined-resource-layout.mjs +6 -3
- package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
- package/dist/create-config/create-resource-links.cjs.map +1 -1
- package/dist/create-config/create-resource-links.d.cts +3 -1
- package/dist/create-config/create-resource-links.d.cts.map +1 -1
- package/dist/create-config/create-resource-links.d.mts +3 -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/create-reusable.cjs +49 -0
- package/dist/create-config/create-reusable.cjs.map +1 -0
- package/dist/create-config/create-reusable.d.cts +41 -0
- package/dist/create-config/create-reusable.d.cts.map +1 -0
- package/dist/create-config/create-reusable.d.mts +41 -0
- package/dist/create-config/create-reusable.d.mts.map +1 -0
- package/dist/create-config/create-reusable.mjs +49 -0
- package/dist/create-config/create-reusable.mjs.map +1 -0
- package/dist/create-config/define-layout.cjs +19 -12
- package/dist/create-config/define-layout.cjs.map +1 -1
- package/dist/create-config/define-layout.d.cts +43 -42
- package/dist/create-config/define-layout.d.cts.map +1 -1
- package/dist/create-config/define-layout.d.mts +43 -42
- package/dist/create-config/define-layout.d.mts.map +1 -1
- package/dist/create-config/define-layout.mjs +22 -15
- package/dist/create-config/define-layout.mjs.map +1 -1
- package/dist/create-config/for-paths/builder.cjs +1 -0
- package/dist/create-config/for-paths/builder.cjs.map +1 -1
- package/dist/create-config/for-paths/builder.d.cts +5 -3
- package/dist/create-config/for-paths/builder.d.cts.map +1 -1
- package/dist/create-config/for-paths/builder.d.mts +5 -3
- package/dist/create-config/for-paths/builder.d.mts.map +1 -1
- package/dist/create-config/for-paths/builder.mjs +1 -0
- package/dist/create-config/for-paths/builder.mjs.map +1 -1
- package/dist/create-config/for-resource.cjs.map +1 -1
- package/dist/create-config/for-resource.d.cts +7 -6
- package/dist/create-config/for-resource.d.cts.map +1 -1
- package/dist/create-config/for-resource.d.mts +7 -6
- package/dist/create-config/for-resource.d.mts.map +1 -1
- package/dist/create-config/for-resource.mjs.map +1 -1
- package/dist/create-config/for-resources/create-component.d.cts +34 -33
- package/dist/create-config/for-resources/create-component.d.cts.map +1 -1
- package/dist/create-config/for-resources/create-component.d.mts +34 -33
- package/dist/create-config/for-resources/create-component.d.mts.map +1 -1
- package/dist/create-config/for-resources/create-for-resources.cjs +7 -6
- package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
- package/dist/create-config/for-resources/create-for-resources.d.cts +2 -1
- package/dist/create-config/for-resources/create-for-resources.d.mts +2 -1
- package/dist/create-config/for-resources/create-for-resources.mjs +7 -6
- package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
- package/dist/create-config/for-resources/scoped-layout.d.cts +5 -4
- package/dist/create-config/for-resources/scoped-layout.d.cts.map +1 -1
- package/dist/create-config/for-resources/scoped-layout.d.mts +5 -4
- package/dist/create-config/for-resources/scoped-layout.d.mts.map +1 -1
- package/dist/create-config/index.d.cts +1 -0
- package/dist/create-config/index.d.mts +1 -0
- package/dist/create-config/inspection.cjs +23 -1
- package/dist/create-config/inspection.cjs.map +1 -1
- package/dist/create-config/inspection.mjs +24 -3
- package/dist/create-config/inspection.mjs.map +1 -1
- package/dist/create-config/layout-name.cjs +1 -1
- package/dist/create-config/layout-name.mjs +1 -1
- package/dist/create-config/lazy-resource-layout.cjs +5 -5
- package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
- package/dist/create-config/lazy-resource-layout.d.cts +2 -2
- package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
- package/dist/create-config/lazy-resource-layout.d.mts +2 -2
- package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
- package/dist/create-config/lazy-resource-layout.mjs +5 -5
- package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
- package/dist/create-config/render-state.cjs +3 -2
- package/dist/create-config/render-state.cjs.map +1 -1
- package/dist/create-config/render-state.d.cts +27 -25
- package/dist/create-config/render-state.d.cts.map +1 -1
- package/dist/create-config/render-state.d.mts +27 -25
- package/dist/create-config/render-state.d.mts.map +1 -1
- package/dist/create-config/render-state.mjs +3 -2
- package/dist/create-config/render-state.mjs.map +1 -1
- package/dist/create-config/state-composable.cjs +1 -1
- package/dist/create-config/state-composable.mjs +1 -1
- package/dist/custom-props.cjs +15 -0
- package/dist/custom-props.cjs.map +1 -0
- package/dist/custom-props.d.cts +17 -0
- package/dist/custom-props.d.cts.map +1 -0
- package/dist/custom-props.d.mts +17 -0
- package/dist/custom-props.d.mts.map +1 -0
- package/dist/custom-props.mjs +15 -0
- package/dist/custom-props.mjs.map +1 -0
- package/dist/errors/react-layout-error.cjs +1 -1
- package/dist/errors/react-layout-error.mjs +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +3 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.mjs +3 -3
- package/dist/lazy/create-lazy-loader.cjs +30 -9
- package/dist/lazy/create-lazy-loader.cjs.map +1 -1
- package/dist/lazy/create-lazy-loader.mjs +31 -10
- package/dist/lazy/create-lazy-loader.mjs.map +1 -1
- package/dist/lazy/create-render-state.cjs.map +1 -1
- package/dist/lazy/create-render-state.d.cts +5 -5
- package/dist/lazy/create-render-state.d.cts.map +1 -1
- package/dist/lazy/create-render-state.d.mts +5 -5
- package/dist/lazy/create-render-state.d.mts.map +1 -1
- package/dist/lazy/create-render-state.mjs.map +1 -1
- package/dist/lazy/lazy-boundary.cjs +1 -1
- package/dist/lazy/lazy-boundary.mjs +1 -1
- package/dist/lazy/types.cjs.map +1 -1
- package/dist/lazy/types.d.cts +5 -4
- package/dist/lazy/types.d.cts.map +1 -1
- package/dist/lazy/types.d.mts +5 -4
- package/dist/lazy/types.d.mts.map +1 -1
- package/dist/lazy/types.mjs.map +1 -1
- package/dist/props.cjs.map +1 -1
- package/dist/props.d.cts +4 -3
- package/dist/props.d.cts.map +1 -1
- package/dist/props.d.mts +4 -3
- package/dist/props.d.mts.map +1 -1
- package/dist/props.mjs.map +1 -1
- package/dist/resource.d.cts +1 -1
- package/dist/resource.d.mts +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ResourceDefinition, ResourceEnum } from "../resource.cjs";
|
|
2
|
+
import { InPropsDefinition, InPropsObject, InferredInProps } from "../props.cjs";
|
|
3
|
+
import { AnyBuiltPropDefinition, ExtractDefinitionValue, ResolvedBuiltPropShape } from "@jfdevelops/react-layout-validator";
|
|
4
|
+
|
|
5
|
+
//#region src/create-config/create-reusable.d.ts
|
|
6
|
+
/** Object definitions can be selected recursively; other definitions are leaves. */
|
|
7
|
+
type ReusableOptionSelection<Props extends InPropsObject> = { [Key in keyof Props]?: Props[Key] extends {
|
|
8
|
+
type: 'object';
|
|
9
|
+
properties: infer Shape extends InPropsObject;
|
|
10
|
+
} ? true | ReusableOptionSelection<Shape> : true };
|
|
11
|
+
type OptionDefinitions<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = InferredInProps<Resources, Options> extends infer Props extends InPropsObject ? Props : never;
|
|
12
|
+
/** Only data sources declared by the factory are available for selection. */
|
|
13
|
+
type ReusableInclude<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = {
|
|
14
|
+
resources?: true;
|
|
15
|
+
} & (keyof OptionDefinitions<Resources, Options> extends never ? {} : {
|
|
16
|
+
options?: true | ReusableOptionSelection<OptionDefinitions<Resources, Options>>;
|
|
17
|
+
});
|
|
18
|
+
type SelectedOptionValue<Definition extends AnyBuiltPropDefinition, Selection> = Selection extends true ? ExtractDefinitionValue<Definition> : Definition extends {
|
|
19
|
+
properties: infer Shape extends InPropsObject;
|
|
20
|
+
} ? SelectedOptionProps<Shape, Selection> : never;
|
|
21
|
+
type SelectedOptionProps<Props extends InPropsObject, Selection> = { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'required' ? Key : never]: SelectedOptionValue<Props[Key], Selection[Key]> } & { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'optional' ? Key : never]?: SelectedOptionValue<Props[Key], Selection[Key]> };
|
|
22
|
+
/** Options are flattened one level, so `options: { meta: true }` supplies `meta`. */
|
|
23
|
+
type ReusableProps<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>, Include, Custom extends InPropsObject> = (Include extends {
|
|
24
|
+
resources: true;
|
|
25
|
+
} ? {
|
|
26
|
+
resources: ResourceEnum<Resources>[number][];
|
|
27
|
+
} : {}) & (Include extends {
|
|
28
|
+
options: infer Selection;
|
|
29
|
+
} ? Selection extends true ? ResolvedBuiltPropShape<OptionDefinitions<Resources, Options>> : SelectedOptionProps<OptionDefinitions<Resources, Options>, Selection> : {}) & ResolvedBuiltPropShape<Custom>;
|
|
30
|
+
type ExactSelection<Selection, Allowed> = { [Key in keyof Selection]: Key extends keyof Allowed ? Selection[Key] extends object ? ExactSelection<Selection[Key], Exclude<Allowed[Key], true | undefined>> : Allowed[Key] : never };
|
|
31
|
+
/** Creates a validated ordinary function with the shared configuration's types. */
|
|
32
|
+
type CreateReusable<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = <const Include extends ReusableInclude<Resources, Options> = {}, const Custom extends InPropsObject = {}, Result = unknown>(definition: {
|
|
33
|
+
props?: {
|
|
34
|
+
include?: ReusableInclude<Resources, Options> & Include & ExactSelection<Include, ReusableInclude<Resources, Options>>;
|
|
35
|
+
custom?: Custom;
|
|
36
|
+
};
|
|
37
|
+
fn: (props: ReusableProps<Resources, Options, Include, Custom>) => Result;
|
|
38
|
+
}) => (...args: {} extends ReusableProps<Resources, Options, Include, Custom> ? [props?: ReusableProps<Resources, Options, Include, Custom>] : [props: ReusableProps<Resources, Options, Include, Custom>]) => Result;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { CreateReusable, ReusableInclude, ReusableOptionSelection, ReusableProps };
|
|
41
|
+
//# sourceMappingURL=create-reusable.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-reusable.d.cts","names":[],"sources":["../../src/create-config/create-reusable.ts"],"mappings":";;;;;;KAgBY,uBAAA,eAAsC,aAAA,oBAClC,KAAA,IAAS,KAAA,CAAM,GAAA;EAC3B,IAAA;EACA,UAAA,sBAAgC,aAAA;AAAA,WAEvB,uBAAA,CAAwB,KAAA;AAAA,KAIhC,iBAAA,4BACwB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,KAChC,eAAA,CACF,SAAA,EACA,OAAA,8BAC4B,aAAA,GAC1B,KAAA;;KAIQ,eAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA;EAC9B,SAAA;AAAA,WAA4B,iBAAA,CAChC,SAAA,EACA,OAAA;EAII,OAAA,UAEI,uBAAA,CAAwB,iBAAA,CAAkB,SAAA,EAAW,OAAA;AAAA;AAAA,KAG1D,mBAAA,oBACgB,sBAAA,eAEjB,SAAA,gBACA,sBAAA,CAAuB,UAAA,IACvB,UAAA;EAAqB,UAAA,sBAAgC,aAAA;AAAA,IACrD,mBAAA,CAAoB,KAAA,EAAO,SAAA;AAAA,KAG1B,mBAAA,eAAkC,aAAA,+BACvB,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,WACQ,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA,uBAExC,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,YACS,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA;;KAI7C,aAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,2BAEnB,aAAA,KACZ,OAAA;EAAkB,SAAA;AAAA;EACjB,SAAA,EAAW,YAAA,CAAa,SAAA;AAAA,WAE3B,OAAA;EAAkB,OAAA;AAAA,IACf,SAAA,gBACE,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,EAAW,OAAA,KACpD,mBAAA,CAAoB,iBAAA,CAAkB,SAAA,EAAW,OAAA,GAAU,SAAA,UAEjE,sBAAA,CAAuB,MAAA;AAAA,KAGpB,cAAA,uCACW,SAAA,GAAY,GAAA,eAAkB,OAAA,GACxC,SAAA,CAAU,GAAA,mBACR,cAAA,CAAe,SAAA,CAAU,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,GAAA,wBAC/C,OAAA,CAAQ,GAAA;;KAKJ,cAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,4BAEZ,eAAA,CAAgB,SAAA,EAAW,OAAA,6BAC5B,aAAA,yBAErB,UAAA;EACA,KAAA;IACE,OAAA,GAAU,eAAA,CAAgB,SAAA,EAAW,OAAA,IACnC,OAAA,GACA,cAAA,CAAe,OAAA,EAAS,eAAA,CAAgB,SAAA,EAAW,OAAA;IACrD,MAAA,GAAS,MAAA;EAAA;EAEX,EAAA,GAAK,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MAAY,MAAA;AAAA,UAEhE,IAAA,aAAiB,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,KAC1D,KAAA,GAAQ,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MACnD,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,OACpD,MAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ResourceDefinition, ResourceEnum } from "../resource.mjs";
|
|
2
|
+
import { InPropsDefinition, InPropsObject, InferredInProps } from "../props.mjs";
|
|
3
|
+
import { AnyBuiltPropDefinition, ExtractDefinitionValue, ResolvedBuiltPropShape } from "@jfdevelops/react-layout-validator";
|
|
4
|
+
|
|
5
|
+
//#region src/create-config/create-reusable.d.ts
|
|
6
|
+
/** Object definitions can be selected recursively; other definitions are leaves. */
|
|
7
|
+
type ReusableOptionSelection<Props extends InPropsObject> = { [Key in keyof Props]?: Props[Key] extends {
|
|
8
|
+
type: 'object';
|
|
9
|
+
properties: infer Shape extends InPropsObject;
|
|
10
|
+
} ? true | ReusableOptionSelection<Shape> : true };
|
|
11
|
+
type OptionDefinitions<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = InferredInProps<Resources, Options> extends infer Props extends InPropsObject ? Props : never;
|
|
12
|
+
/** Only data sources declared by the factory are available for selection. */
|
|
13
|
+
type ReusableInclude<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = {
|
|
14
|
+
resources?: true;
|
|
15
|
+
} & (keyof OptionDefinitions<Resources, Options> extends never ? {} : {
|
|
16
|
+
options?: true | ReusableOptionSelection<OptionDefinitions<Resources, Options>>;
|
|
17
|
+
});
|
|
18
|
+
type SelectedOptionValue<Definition extends AnyBuiltPropDefinition, Selection> = Selection extends true ? ExtractDefinitionValue<Definition> : Definition extends {
|
|
19
|
+
properties: infer Shape extends InPropsObject;
|
|
20
|
+
} ? SelectedOptionProps<Shape, Selection> : never;
|
|
21
|
+
type SelectedOptionProps<Props extends InPropsObject, Selection> = { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'required' ? Key : never]: SelectedOptionValue<Props[Key], Selection[Key]> } & { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'optional' ? Key : never]?: SelectedOptionValue<Props[Key], Selection[Key]> };
|
|
22
|
+
/** Options are flattened one level, so `options: { meta: true }` supplies `meta`. */
|
|
23
|
+
type ReusableProps<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>, Include, Custom extends InPropsObject> = (Include extends {
|
|
24
|
+
resources: true;
|
|
25
|
+
} ? {
|
|
26
|
+
resources: ResourceEnum<Resources>[number][];
|
|
27
|
+
} : {}) & (Include extends {
|
|
28
|
+
options: infer Selection;
|
|
29
|
+
} ? Selection extends true ? ResolvedBuiltPropShape<OptionDefinitions<Resources, Options>> : SelectedOptionProps<OptionDefinitions<Resources, Options>, Selection> : {}) & ResolvedBuiltPropShape<Custom>;
|
|
30
|
+
type ExactSelection<Selection, Allowed> = { [Key in keyof Selection]: Key extends keyof Allowed ? Selection[Key] extends object ? ExactSelection<Selection[Key], Exclude<Allowed[Key], true | undefined>> : Allowed[Key] : never };
|
|
31
|
+
/** Creates a validated ordinary function with the shared configuration's types. */
|
|
32
|
+
type CreateReusable<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = <const Include extends ReusableInclude<Resources, Options> = {}, const Custom extends InPropsObject = {}, Result = unknown>(definition: {
|
|
33
|
+
props?: {
|
|
34
|
+
include?: ReusableInclude<Resources, Options> & Include & ExactSelection<Include, ReusableInclude<Resources, Options>>;
|
|
35
|
+
custom?: Custom;
|
|
36
|
+
};
|
|
37
|
+
fn: (props: ReusableProps<Resources, Options, Include, Custom>) => Result;
|
|
38
|
+
}) => (...args: {} extends ReusableProps<Resources, Options, Include, Custom> ? [props?: ReusableProps<Resources, Options, Include, Custom>] : [props: ReusableProps<Resources, Options, Include, Custom>]) => Result;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { CreateReusable, ReusableInclude, ReusableOptionSelection, ReusableProps };
|
|
41
|
+
//# sourceMappingURL=create-reusable.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-reusable.d.mts","names":[],"sources":["../../src/create-config/create-reusable.ts"],"mappings":";;;;;;KAgBY,uBAAA,eAAsC,aAAA,oBAClC,KAAA,IAAS,KAAA,CAAM,GAAA;EAC3B,IAAA;EACA,UAAA,sBAAgC,aAAA;AAAA,WAEvB,uBAAA,CAAwB,KAAA;AAAA,KAIhC,iBAAA,4BACwB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,KAChC,eAAA,CACF,SAAA,EACA,OAAA,8BAC4B,aAAA,GAC1B,KAAA;;KAIQ,eAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA;EAC9B,SAAA;AAAA,WAA4B,iBAAA,CAChC,SAAA,EACA,OAAA;EAII,OAAA,UAEI,uBAAA,CAAwB,iBAAA,CAAkB,SAAA,EAAW,OAAA;AAAA;AAAA,KAG1D,mBAAA,oBACgB,sBAAA,eAEjB,SAAA,gBACA,sBAAA,CAAuB,UAAA,IACvB,UAAA;EAAqB,UAAA,sBAAgC,aAAA;AAAA,IACrD,mBAAA,CAAoB,KAAA,EAAO,SAAA;AAAA,KAG1B,mBAAA,eAAkC,aAAA,+BACvB,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,WACQ,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA,uBAExC,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,YACS,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA;;KAI7C,aAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,2BAEnB,aAAA,KACZ,OAAA;EAAkB,SAAA;AAAA;EACjB,SAAA,EAAW,YAAA,CAAa,SAAA;AAAA,WAE3B,OAAA;EAAkB,OAAA;AAAA,IACf,SAAA,gBACE,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,EAAW,OAAA,KACpD,mBAAA,CAAoB,iBAAA,CAAkB,SAAA,EAAW,OAAA,GAAU,SAAA,UAEjE,sBAAA,CAAuB,MAAA;AAAA,KAGpB,cAAA,uCACW,SAAA,GAAY,GAAA,eAAkB,OAAA,GACxC,SAAA,CAAU,GAAA,mBACR,cAAA,CAAe,SAAA,CAAU,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,GAAA,wBAC/C,OAAA,CAAQ,GAAA;;KAKJ,cAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,4BAEZ,eAAA,CAAgB,SAAA,EAAW,OAAA,6BAC5B,aAAA,yBAErB,UAAA;EACA,KAAA;IACE,OAAA,GAAU,eAAA,CAAgB,SAAA,EAAW,OAAA,IACnC,OAAA,GACA,cAAA,CAAe,OAAA,EAAS,eAAA,CAAgB,SAAA,EAAW,OAAA;IACrD,MAAA,GAAS,MAAA;EAAA;EAEX,EAAA,GAAK,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MAAY,MAAA;AAAA,UAEhE,IAAA,aAAiB,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,KAC1D,KAAA,GAAQ,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MACnD,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,OACpD,MAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { LayoutConfigurationError } from "../errors/layout-configuration-error.mjs";
|
|
2
|
+
import { createProp, validateProps } from "@jfdevelops/react-layout-validator";
|
|
3
|
+
|
|
4
|
+
//#region src/create-config/create-reusable.ts
|
|
5
|
+
function selectOptions(definitions, selection) {
|
|
6
|
+
const selected = {};
|
|
7
|
+
for (const [key, include] of Object.entries(selection)) {
|
|
8
|
+
const definition = definitions[key];
|
|
9
|
+
if (!Object.hasOwn(definitions, key)) throw new LayoutConfigurationError(`Unknown reusable option "${key}".`);
|
|
10
|
+
if (include === true) {
|
|
11
|
+
selected[key] = definition;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (!include || typeof include !== "object" || !("properties" in definition) || !("type" in definition) || definition.type !== "object") throw new LayoutConfigurationError(`Invalid reusable selection for "${key}".`);
|
|
15
|
+
const nested = createProp.object(selectOptions(definition.properties, include));
|
|
16
|
+
selected[key] = definition.visibility === "optional" ? nested.optional() : nested;
|
|
17
|
+
}
|
|
18
|
+
return selected;
|
|
19
|
+
}
|
|
20
|
+
function createReusableBuilder(resources, options) {
|
|
21
|
+
const keys = resources.map((entry) => typeof entry === "string" ? entry : entry.value);
|
|
22
|
+
const resource = createProp.string.enum(keys);
|
|
23
|
+
function createReusable(definition) {
|
|
24
|
+
const include = definition.props?.include ?? {};
|
|
25
|
+
for (const key of Object.keys(include)) if (key !== "resources" && key !== "options") throw new LayoutConfigurationError(`Unknown reusable source "${key}".`);
|
|
26
|
+
const optionDefinitions = typeof options === "function" ? options({
|
|
27
|
+
name: createProp.string.literal("Reusable"),
|
|
28
|
+
resource
|
|
29
|
+
}) : options;
|
|
30
|
+
const definitions = { ...include.options === true ? optionDefinitions : include.options ? selectOptions(optionDefinitions, include.options) : {} };
|
|
31
|
+
if (include.resources) {
|
|
32
|
+
if (Object.hasOwn(definitions, "resources")) throw new LayoutConfigurationError("Reusable prop \"resources\" is selected more than once.");
|
|
33
|
+
definitions.resources = createProp.array(resource);
|
|
34
|
+
}
|
|
35
|
+
for (const [key, custom] of Object.entries(definition.props?.custom ?? {})) {
|
|
36
|
+
if (Object.hasOwn(definitions, key)) throw new LayoutConfigurationError(`Reusable prop "${key}" is selected more than once.`);
|
|
37
|
+
definitions[key] = custom;
|
|
38
|
+
}
|
|
39
|
+
return function reusable(props = {}) {
|
|
40
|
+
validateProps(definitions, props);
|
|
41
|
+
return definition.fn(props);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return createReusable;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { createReusableBuilder };
|
|
49
|
+
//# sourceMappingURL=create-reusable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-reusable.mjs","names":[],"sources":["../../src/create-config/create-reusable.ts"],"sourcesContent":["import {\n createProp,\n validateProps,\n type AnyBuiltPropDefinition,\n type ExtractDefinitionValue,\n type ResolvedBuiltPropShape,\n} from '@jfdevelops/react-layout-validator';\nimport type {\n InferredInProps,\n InPropsDefinition,\n InPropsObject,\n} from '../props';\nimport type { ResourceDefinition, ResourceEnum } from '../resource';\nimport { LayoutConfigurationError } from '../errors';\n\n/** Object definitions can be selected recursively; other definitions are leaves. */\nexport type ReusableOptionSelection<Props extends InPropsObject> = {\n [Key in keyof Props]?: Props[Key] extends {\n type: 'object';\n properties: infer Shape extends InPropsObject;\n }\n ? true | ReusableOptionSelection<Shape>\n : true;\n};\n\ntype OptionDefinitions<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n> = InferredInProps<\n Resources,\n Options\n> extends infer Props extends InPropsObject\n ? Props\n : never;\n\n/** Only data sources declared by the factory are available for selection. */\nexport type ReusableInclude<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n> = { resources?: true } & (keyof OptionDefinitions<\n Resources,\n Options\n> extends never\n ? {}\n : {\n options?:\n | true\n | ReusableOptionSelection<OptionDefinitions<Resources, Options>>;\n });\n\ntype SelectedOptionValue<\n Definition extends AnyBuiltPropDefinition,\n Selection,\n> = Selection extends true\n ? ExtractDefinitionValue<Definition>\n : Definition extends { properties: infer Shape extends InPropsObject }\n ? SelectedOptionProps<Shape, Selection>\n : never;\n\ntype SelectedOptionProps<Props extends InPropsObject, Selection> = {\n [Key in keyof Props &\n keyof Selection as Props[Key]['visibility'] extends 'required'\n ? Key\n : never]: SelectedOptionValue<Props[Key], Selection[Key]>;\n} & {\n [Key in keyof Props &\n keyof Selection as Props[Key]['visibility'] extends 'optional'\n ? Key\n : never]?: SelectedOptionValue<Props[Key], Selection[Key]>;\n};\n\n/** Options are flattened one level, so `options: { meta: true }` supplies `meta`. */\nexport type ReusableProps<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n Include,\n Custom extends InPropsObject,\n> = (Include extends { resources: true }\n ? { resources: ResourceEnum<Resources>[number][] }\n : {}) &\n (Include extends { options: infer Selection }\n ? Selection extends true\n ? ResolvedBuiltPropShape<OptionDefinitions<Resources, Options>>\n : SelectedOptionProps<OptionDefinitions<Resources, Options>, Selection>\n : {}) &\n ResolvedBuiltPropShape<Custom>;\n\n// Generic constraints alone accept extra keys on structurally compatible objects.\ntype ExactSelection<Selection, Allowed> = {\n [Key in keyof Selection]: Key extends keyof Allowed\n ? Selection[Key] extends object\n ? ExactSelection<Selection[Key], Exclude<Allowed[Key], true | undefined>>\n : Allowed[Key]\n : never;\n};\n\n/** Creates a validated ordinary function with the shared configuration's types. */\nexport type CreateReusable<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n> = <\n const Include extends ReusableInclude<Resources, Options> = {},\n const Custom extends InPropsObject = {},\n Result = unknown,\n>(definition: {\n props?: {\n include?: ReusableInclude<Resources, Options> &\n Include &\n ExactSelection<Include, ReusableInclude<Resources, Options>>;\n custom?: Custom;\n };\n fn: (props: ReusableProps<Resources, Options, Include, Custom>) => Result;\n}) => (\n ...args: {} extends ReusableProps<Resources, Options, Include, Custom>\n ? [props?: ReusableProps<Resources, Options, Include, Custom>]\n : [props: ReusableProps<Resources, Options, Include, Custom>]\n) => Result;\n\nfunction selectOptions(\n definitions: InPropsObject,\n selection: Record<string, unknown>,\n) {\n const selected: InPropsObject = {};\n for (const [key, include] of Object.entries(selection)) {\n const definition = definitions[key];\n if (!Object.hasOwn(definitions, key)) {\n throw new LayoutConfigurationError(`Unknown reusable option \"${key}\".`);\n }\n if (include === true) {\n selected[key] = definition;\n continue;\n }\n if (\n !include ||\n typeof include !== 'object' ||\n !('properties' in definition) ||\n !('type' in definition) ||\n definition.type !== 'object'\n ) {\n throw new LayoutConfigurationError(\n `Invalid reusable selection for \"${key}\".`,\n );\n }\n const nested = createProp.object(\n selectOptions(\n definition.properties as InPropsObject,\n include as Record<string, unknown>,\n ),\n );\n selected[key] =\n definition.visibility === 'optional' ? nested.optional() : nested;\n }\n return selected;\n}\n\nexport function createReusableBuilder<\n const Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n>(resources: Resources, options: Options): CreateReusable<Resources, Options>;\nexport function createReusableBuilder(\n resources: readonly ResourceDefinition[],\n options: InPropsObject | ((...args: any[]) => InPropsObject),\n) {\n const keys = resources.map((entry) =>\n typeof entry === 'string' ? entry : entry.value,\n );\n const resource = createProp.string.enum(keys as [string, ...string[]]);\n\n function createReusable(definition: {\n props?: { include?: Record<string, unknown>; custom?: InPropsObject };\n fn: (props: Record<string, unknown>) => unknown;\n }) {\n const include = definition.props?.include ?? {};\n for (const key of Object.keys(include)) {\n if (key !== 'resources' && key !== 'options') {\n throw new LayoutConfigurationError(`Unknown reusable source \"${key}\".`);\n }\n }\n const optionDefinitions =\n typeof options === 'function'\n ? options({ name: createProp.string.literal('Reusable'), resource })\n : options;\n const selected =\n include.options === true\n ? optionDefinitions\n : include.options\n ? selectOptions(\n optionDefinitions,\n include.options as Record<string, unknown>,\n )\n : {};\n const definitions: InPropsObject = { ...selected };\n if (include.resources) {\n if (Object.hasOwn(definitions, 'resources')) {\n throw new LayoutConfigurationError(\n 'Reusable prop \"resources\" is selected more than once.',\n );\n }\n definitions.resources = createProp.array(resource);\n }\n for (const [key, custom] of Object.entries(\n definition.props?.custom ?? {},\n )) {\n if (Object.hasOwn(definitions, key)) {\n throw new LayoutConfigurationError(\n `Reusable prop \"${key}\" is selected more than once.`,\n );\n }\n definitions[key] = custom;\n }\n\n return function reusable(props: Record<string, unknown> = {}) {\n validateProps(definitions, props);\n return definition.fn(props);\n };\n }\n\n return createReusable as unknown;\n}\n"],"mappings":";;;;AAsHA,SAAS,cACP,aACA,WACA;CACA,MAAM,WAA0B,CAAC;CACjC,KAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,GAAG;EACtD,MAAM,aAAa,YAAY;EAC/B,IAAI,CAAC,OAAO,OAAO,aAAa,GAAG,GACjC,MAAM,IAAI,yBAAyB,4BAA4B,IAAI,GAAG;EAExE,IAAI,YAAY,MAAM;GACpB,SAAS,OAAO;GAChB;EACF;EACA,IACE,CAAC,WACD,OAAO,YAAY,YACnB,EAAE,gBAAgB,eAClB,EAAE,UAAU,eACZ,WAAW,SAAS,UAEpB,MAAM,IAAI,yBACR,mCAAmC,IAAI,GACzC;EAEF,MAAM,SAAS,WAAW,OACxB,cACE,WAAW,YACX,OACF,CACF;EACA,SAAS,OACP,WAAW,eAAe,aAAa,OAAO,SAAS,IAAI;CAC/D;CACA,OAAO;AACT;AAMA,SAAgB,sBACd,WACA,SACA;CACA,MAAM,OAAO,UAAU,KAAK,UAC1B,OAAO,UAAU,WAAW,QAAQ,MAAM,KAC5C;CACA,MAAM,WAAW,WAAW,OAAO,KAAK,IAA6B;CAErE,SAAS,eAAe,YAGrB;EACD,MAAM,UAAU,WAAW,OAAO,WAAW,CAAC;EAC9C,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,GACnC,IAAI,QAAQ,eAAe,QAAQ,WACjC,MAAM,IAAI,yBAAyB,4BAA4B,IAAI,GAAG;EAG1E,MAAM,oBACJ,OAAO,YAAY,aACf,QAAQ;GAAE,MAAM,WAAW,OAAO,QAAQ,UAAU;GAAG;EAAS,CAAC,IACjE;EAUN,MAAM,cAA6B,EAAE,GARnC,QAAQ,YAAY,OAChB,oBACA,QAAQ,UACR,cACE,mBACA,QAAQ,OACV,IACA,CAAC,EAC0C;EACjD,IAAI,QAAQ,WAAW;GACrB,IAAI,OAAO,OAAO,aAAa,WAAW,GACxC,MAAM,IAAI,yBACR,yDACF;GAEF,YAAY,YAAY,WAAW,MAAM,QAAQ;EACnD;EACA,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QACjC,WAAW,OAAO,UAAU,CAAC,CAC/B,GAAG;GACD,IAAI,OAAO,OAAO,aAAa,GAAG,GAChC,MAAM,IAAI,yBACR,kBAAkB,IAAI,8BACxB;GAEF,YAAY,OAAO;EACrB;EAEA,OAAO,SAAS,SAAS,QAAiC,CAAC,GAAG;GAC5D,cAAc,aAAa,KAAK;GAChC,OAAO,WAAW,GAAG,KAAK;EAC5B;CACF;CAEA,OAAO;AACT"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_invalid_config = require('../errors/invalid-config.cjs');
|
|
2
|
+
const require_missing_resource_provider = require('../errors/missing-resource-provider.cjs');
|
|
2
3
|
const require_layout_configuration_error = require('../errors/layout-configuration-error.cjs');
|
|
3
4
|
const require_resource_state_error = require('../errors/resource-state-error.cjs');
|
|
4
5
|
const require_lazy_resource_error = require('../errors/lazy-resource-error.cjs');
|
|
6
|
+
const require_custom_props = require('../custom-props.cjs');
|
|
7
|
+
const require_render_state_context = require('./render-state-context.cjs');
|
|
5
8
|
const require_lazy_boundary = require('../lazy/lazy-boundary.cjs');
|
|
6
9
|
const require_fallback_props = require('../lazy/fallback-props.cjs');
|
|
7
10
|
const require_types = require('../lazy/types.cjs');
|
|
8
|
-
const require_invalid_config = require('../errors/invalid-config.cjs');
|
|
9
|
-
const require_missing_resource_provider = require('../errors/missing-resource-provider.cjs');
|
|
10
11
|
const require_capitalize = require('../utils/capitalize.cjs');
|
|
11
12
|
const require_state_composable = require('./state-composable.cjs');
|
|
12
13
|
const require_merge_layout_props = require('./merge-layout-props.cjs');
|
|
@@ -23,10 +24,10 @@ const require_render_state = require('./render-state.cjs');
|
|
|
23
24
|
const require_create_for_resources = require('./for-resources/create-for-resources.cjs');
|
|
24
25
|
const require_shell_context = require('./shell-context.cjs');
|
|
25
26
|
let _jfdevelops_react_layout_composables = require("@jfdevelops/react-layout-composables");
|
|
27
|
+
let _jfdevelops_react_layout_validator = require("@jfdevelops/react-layout-validator");
|
|
26
28
|
let react = require("react");
|
|
27
29
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
28
30
|
let _jfdevelops_react_layout_devtools_core = require("@jfdevelops/react-layout-devtools-core");
|
|
29
|
-
let _jfdevelops_react_layout_validator = require("@jfdevelops/react-layout-validator");
|
|
30
31
|
|
|
31
32
|
//#region src/create-config/define-layout.tsx
|
|
32
33
|
const RenderStateRetryContext = (0, react.createContext)(void 0);
|
|
@@ -131,6 +132,7 @@ function resolveLayoutOptionDefaults(defaults, options) {
|
|
|
131
132
|
function optionalStateChildren(props) {
|
|
132
133
|
if (!props) return props;
|
|
133
134
|
const children = props.custom?.children;
|
|
135
|
+
const stateChildren = children && typeof children !== "string" && children.visibility === "required" && "optional" in children && typeof children.optional === "function" ? children.optional() : children;
|
|
134
136
|
const childrenInclude = props.include?.children;
|
|
135
137
|
return {
|
|
136
138
|
...props,
|
|
@@ -146,7 +148,7 @@ function optionalStateChildren(props) {
|
|
|
146
148
|
},
|
|
147
149
|
custom: props.custom && {
|
|
148
150
|
...props.custom,
|
|
149
|
-
...children ? { children:
|
|
151
|
+
...children ? { children: stateChildren } : {}
|
|
150
152
|
}
|
|
151
153
|
};
|
|
152
154
|
}
|
|
@@ -301,7 +303,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
|
|
|
301
303
|
});
|
|
302
304
|
const render = defaultState.render;
|
|
303
305
|
const layoutProps = require_merge_layout_props.mergeLayoutProps(legacyLayoutProps, defaultState.props);
|
|
304
|
-
const customLayoutProps = layoutProps?.custom;
|
|
306
|
+
const customLayoutProps = require_custom_props.normalizeCustomProps(layoutProps?.custom ?? {});
|
|
305
307
|
const includeLayoutProps = layoutProps?.include;
|
|
306
308
|
const layoutOptionValues = layoutOptionProps;
|
|
307
309
|
const resolvedLayoutProps = { ...customLayoutProps };
|
|
@@ -367,10 +369,14 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
|
|
|
367
369
|
value: state,
|
|
368
370
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CreatedDefaultStateComponent, { ...renderProps })
|
|
369
371
|
});
|
|
370
|
-
return render(renderProps, {
|
|
372
|
+
return require_inspection.markInspectionRoots(render(renderProps, {
|
|
371
373
|
...mergedRenderContext,
|
|
372
374
|
state
|
|
373
|
-
})
|
|
375
|
+
}), [
|
|
376
|
+
activeInspection.layout,
|
|
377
|
+
activeInspection.state,
|
|
378
|
+
...resourceId ? [resourceId] : []
|
|
379
|
+
]);
|
|
374
380
|
}
|
|
375
381
|
function Component(props) {
|
|
376
382
|
const state = (0, react.useContext)(require_render_state_context.ReferencedRenderStateContext) ?? renderStateName;
|
|
@@ -525,10 +531,10 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
|
|
|
525
531
|
...composables?.(create, stateScope.states) ?? {},
|
|
526
532
|
...definition.composables?.(create, stateScope.states)
|
|
527
533
|
}) : void 0;
|
|
528
|
-
const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => definition.render(props, {
|
|
534
|
+
const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => require_inspection.markInspectionRoots(definition.render(props, {
|
|
529
535
|
...context,
|
|
530
536
|
retry
|
|
531
|
-
}) }) : definition.render;
|
|
537
|
+
}), [activeInspection.layout, ...inspectedState ? [inspectedState] : []]) }) : definition.render;
|
|
532
538
|
const StateComponent = defineResourceLayoutImpl({
|
|
533
539
|
resources,
|
|
534
540
|
options: inProps,
|
|
@@ -662,7 +668,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
|
|
|
662
668
|
for (const { props: presetPropDefinitions } of (0, _jfdevelops_react_layout_composables.collectComposablePresetEntries)(resolvedComposables)) Object.assign(resolvedInProps, presetPropDefinitions);
|
|
663
669
|
return {
|
|
664
670
|
...resolvedInProps,
|
|
665
|
-
...require_merge_layout_props.mergeLayoutProps(layout.props, defaultState?.props)?.custom
|
|
671
|
+
...require_custom_props.normalizeCustomProps(require_merge_layout_props.mergeLayoutProps(layout.props, defaultState?.props)?.custom ?? {})
|
|
666
672
|
};
|
|
667
673
|
}
|
|
668
674
|
const { createLayoutForResourceBuilder, forResource } = require_for_resource.createForResource({
|
|
@@ -743,7 +749,7 @@ function createResourceLayoutShellComponent(resources, inProps, shell, shellId)
|
|
|
743
749
|
}) : inProps);
|
|
744
750
|
const includeShellProps = shell.props?.include;
|
|
745
751
|
const includeShellPropKeys = Object.keys(includeShellProps ?? {});
|
|
746
|
-
const shellCustomDefinitions =
|
|
752
|
+
const shellCustomDefinitions = require_custom_props.normalizeCustomProps(shell.props?.custom ?? {});
|
|
747
753
|
function syncShellComposableDisplayNames(stable, resource) {
|
|
748
754
|
if (!shell.composables) return;
|
|
749
755
|
const named = (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(shell.composables, {
|
|
@@ -830,6 +836,7 @@ function createResourceLayoutShellComponent(resources, inProps, shell, shellId)
|
|
|
830
836
|
...validatedCustomProps,
|
|
831
837
|
...renderIncludedProps
|
|
832
838
|
};
|
|
839
|
+
if (typeof shell.props?.custom?.children !== "function") renderProps.children = outlet == null ? outlet : shellChildren;
|
|
833
840
|
const renderContext = {
|
|
834
841
|
composables: resolvedComposables,
|
|
835
842
|
resource,
|