@jfdevelops/react-layout 2.2.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 +2 -0
- package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
- package/dist/create-config/create-defined-resource-layout.d.cts +15 -12
- package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -1
- package/dist/create-config/create-defined-resource-layout.d.mts +15 -12
- package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
- package/dist/create-config/create-defined-resource-layout.mjs +2 -0
- 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 +11 -8
- 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 +11 -8
- 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/layout-name.cjs +1 -1
- package/dist/create-config/layout-name.mjs +1 -1
- package/dist/create-config/lazy-resource-layout.cjs +1 -1
- package/dist/create-config/lazy-resource-layout.d.cts +1 -1
- package/dist/create-config/lazy-resource-layout.d.mts +1 -1
- package/dist/create-config/lazy-resource-layout.mjs +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-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 +4 -4
|
@@ -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 };
|
|
@@ -666,7 +668,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
|
|
|
666
668
|
for (const { props: presetPropDefinitions } of (0, _jfdevelops_react_layout_composables.collectComposablePresetEntries)(resolvedComposables)) Object.assign(resolvedInProps, presetPropDefinitions);
|
|
667
669
|
return {
|
|
668
670
|
...resolvedInProps,
|
|
669
|
-
...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 ?? {})
|
|
670
672
|
};
|
|
671
673
|
}
|
|
672
674
|
const { createLayoutForResourceBuilder, forResource } = require_for_resource.createForResource({
|
|
@@ -747,7 +749,7 @@ function createResourceLayoutShellComponent(resources, inProps, shell, shellId)
|
|
|
747
749
|
}) : inProps);
|
|
748
750
|
const includeShellProps = shell.props?.include;
|
|
749
751
|
const includeShellPropKeys = Object.keys(includeShellProps ?? {});
|
|
750
|
-
const shellCustomDefinitions =
|
|
752
|
+
const shellCustomDefinitions = require_custom_props.normalizeCustomProps(shell.props?.custom ?? {});
|
|
751
753
|
function syncShellComposableDisplayNames(stable, resource) {
|
|
752
754
|
if (!shell.composables) return;
|
|
753
755
|
const named = (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(shell.composables, {
|
|
@@ -834,6 +836,7 @@ function createResourceLayoutShellComponent(resources, inProps, shell, shellId)
|
|
|
834
836
|
...validatedCustomProps,
|
|
835
837
|
...renderIncludedProps
|
|
836
838
|
};
|
|
839
|
+
if (typeof shell.props?.custom?.children !== "function") renderProps.children = outlet == null ? outlet : shellChildren;
|
|
837
840
|
const renderContext = {
|
|
838
841
|
composables: resolvedComposables,
|
|
839
842
|
resource,
|