@jfdevelops/react-layout 0.3.0 → 0.4.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/define-layout.cjs +23 -18
- package/dist/create-config/define-layout.cjs.map +1 -1
- package/dist/create-config/define-layout.d.cts +25 -24
- package/dist/create-config/define-layout.d.cts.map +1 -1
- package/dist/create-config/define-layout.d.mts +25 -24
- package/dist/create-config/define-layout.d.mts.map +1 -1
- package/dist/create-config/define-layout.mjs +17 -12
- package/dist/create-config/define-layout.mjs.map +1 -1
- package/dist/index.cjs +81 -9
- package/dist/index.d.cts +4 -6
- package/dist/index.d.mts +4 -6
- package/dist/index.mjs +4 -5
- package/dist/props.d.cts +6 -6
- package/dist/props.d.cts.map +1 -1
- package/dist/props.d.mts +6 -6
- package/dist/props.d.mts.map +1 -1
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +1 -1
- package/dist/resource.d.cts.map +1 -1
- package/dist/resource.d.mts +1 -1
- package/dist/resource.d.mts.map +1 -1
- package/dist/resource.mjs.map +1 -1
- package/dist/utils.cjs +0 -12
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +1 -12
- package/dist/utils.mjs.map +1 -1
- package/package.json +5 -1
- package/dist/composable.cjs +0 -72
- package/dist/composable.cjs.map +0 -1
- package/dist/composable.d.cts +0 -44
- package/dist/composable.d.cts.map +0 -1
- package/dist/composable.d.mts +0 -44
- package/dist/composable.d.mts.map +0 -1
- package/dist/composable.mjs +0 -70
- package/dist/composable.mjs.map +0 -1
- package/dist/utils/capitalize.d.cts +0 -7
- package/dist/utils/capitalize.d.cts.map +0 -1
- package/dist/utils/capitalize.d.mts +0 -7
- package/dist/utils/capitalize.d.mts.map +0 -1
- package/dist/validators/base.cjs +0 -41
- package/dist/validators/base.cjs.map +0 -1
- package/dist/validators/base.d.cts +0 -18
- package/dist/validators/base.d.cts.map +0 -1
- package/dist/validators/base.d.mts +0 -18
- package/dist/validators/base.d.mts.map +0 -1
- package/dist/validators/base.mjs +0 -39
- package/dist/validators/base.mjs.map +0 -1
- package/dist/validators/builders.cjs +0 -137
- package/dist/validators/builders.cjs.map +0 -1
- package/dist/validators/builders.d.cts +0 -156
- package/dist/validators/builders.d.cts.map +0 -1
- package/dist/validators/builders.d.mts +0 -156
- package/dist/validators/builders.d.mts.map +0 -1
- package/dist/validators/builders.mjs +0 -136
- package/dist/validators/builders.mjs.map +0 -1
- package/dist/validators/component.cjs +0 -73
- package/dist/validators/component.cjs.map +0 -1
- package/dist/validators/component.d.cts +0 -28
- package/dist/validators/component.d.cts.map +0 -1
- package/dist/validators/component.d.mts +0 -28
- package/dist/validators/component.d.mts.map +0 -1
- package/dist/validators/component.mjs +0 -71
- package/dist/validators/component.mjs.map +0 -1
- package/dist/validators/enum.cjs +0 -27
- package/dist/validators/enum.cjs.map +0 -1
- package/dist/validators/enum.d.cts +0 -14
- package/dist/validators/enum.d.cts.map +0 -1
- package/dist/validators/enum.d.mts +0 -14
- package/dist/validators/enum.d.mts.map +0 -1
- package/dist/validators/enum.mjs +0 -27
- package/dist/validators/enum.mjs.map +0 -1
- package/dist/validators/index.d.cts +0 -10
- package/dist/validators/index.d.mts +0 -10
- package/dist/validators/literal.cjs +0 -25
- package/dist/validators/literal.cjs.map +0 -1
- package/dist/validators/literal.d.cts +0 -14
- package/dist/validators/literal.d.cts.map +0 -1
- package/dist/validators/literal.d.mts +0 -14
- package/dist/validators/literal.d.mts.map +0 -1
- package/dist/validators/literal.mjs +0 -25
- package/dist/validators/literal.mjs.map +0 -1
- package/dist/validators/object.cjs +0 -53
- package/dist/validators/object.cjs.map +0 -1
- package/dist/validators/object.d.cts +0 -14
- package/dist/validators/object.d.cts.map +0 -1
- package/dist/validators/object.d.mts +0 -14
- package/dist/validators/object.d.mts.map +0 -1
- package/dist/validators/object.mjs +0 -53
- package/dist/validators/object.mjs.map +0 -1
- package/dist/validators/primitive.cjs +0 -80
- package/dist/validators/primitive.cjs.map +0 -1
- package/dist/validators/primitive.d.cts +0 -33
- package/dist/validators/primitive.d.cts.map +0 -1
- package/dist/validators/primitive.d.mts +0 -33
- package/dist/validators/primitive.d.mts.map +0 -1
- package/dist/validators/primitive.mjs +0 -78
- package/dist/validators/primitive.mjs.map +0 -1
- package/dist/validators/types.d.cts +0 -71
- package/dist/validators/types.d.cts.map +0 -1
- package/dist/validators/types.d.mts +0 -71
- package/dist/validators/types.d.mts.map +0 -1
- package/dist/validators/union.cjs +0 -27
- package/dist/validators/union.cjs.map +0 -1
- package/dist/validators/union.d.cts +0 -14
- package/dist/validators/union.d.cts.map +0 -1
- package/dist/validators/union.d.mts +0 -14
- package/dist/validators/union.d.mts.map +0 -1
- package/dist/validators/union.mjs +0 -27
- package/dist/validators/union.mjs.map +0 -1
- package/dist/validators/validate-props.cjs +0 -22
- package/dist/validators/validate-props.cjs.map +0 -1
- package/dist/validators/validate-props.d.cts +0 -7
- package/dist/validators/validate-props.d.cts.map +0 -1
- package/dist/validators/validate-props.d.mts +0 -7
- package/dist/validators/validate-props.d.mts.map +0 -1
- package/dist/validators/validate-props.mjs +0 -21
- package/dist/validators/validate-props.mjs.map +0 -1
package/dist/composable.cjs
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
const require_utils = require('./utils.cjs');
|
|
2
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
3
|
-
|
|
4
|
-
//#region src/composable.tsx
|
|
5
|
-
function resolveComponent(component, props) {
|
|
6
|
-
if (Object.keys(props).length > 0) return typeof component === "function" ? component(props) : component;
|
|
7
|
-
return component;
|
|
8
|
-
}
|
|
9
|
-
function reactNodeFromSingleFieldOutProps(resolved) {
|
|
10
|
-
if (resolved === null || typeof resolved !== "object") return null;
|
|
11
|
-
const values = Object.values(resolved);
|
|
12
|
-
if (values.length !== 1) return null;
|
|
13
|
-
return values[0];
|
|
14
|
-
}
|
|
15
|
-
function resolveComposableComponentName(name, ctx) {
|
|
16
|
-
return typeof name === "function" ? name(ctx) : name;
|
|
17
|
-
}
|
|
18
|
-
function createLayoutComposableFactory(ctx) {
|
|
19
|
-
const create = (options) => createComposableComponent({
|
|
20
|
-
...options,
|
|
21
|
-
name: resolveComposableComponentName(options.name, ctx)
|
|
22
|
-
});
|
|
23
|
-
return create;
|
|
24
|
-
}
|
|
25
|
-
function resolveLayoutComposables(factory, ctx) {
|
|
26
|
-
return factory(createLayoutComposableFactory(ctx));
|
|
27
|
-
}
|
|
28
|
-
function createComposableComponent(options) {
|
|
29
|
-
const { name, inProps = {}, outProps, wrapWith } = options;
|
|
30
|
-
function Composable({ children, ...props }) {
|
|
31
|
-
const inPropsKeys = Object.keys(inProps);
|
|
32
|
-
const mergedInProps = { ...inProps };
|
|
33
|
-
const propsRecord = props;
|
|
34
|
-
for (const key of inPropsKeys) if (key in propsRecord) mergedInProps[key] = propsRecord[key];
|
|
35
|
-
const wrapperProps = { ...propsRecord };
|
|
36
|
-
for (const key of inPropsKeys) delete wrapperProps[key];
|
|
37
|
-
const mergedResolved = require_utils.resolvePropDefinitionValues(mergedInProps);
|
|
38
|
-
const resolvedProps = outProps ? outProps(mergedResolved) : {};
|
|
39
|
-
const resolvedChildren = children == null ? reactNodeFromSingleFieldOutProps(resolvedProps) : resolveComponent(children, resolvedProps);
|
|
40
|
-
if (wrapWith) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(wrapWith, {
|
|
41
|
-
...wrapperProps,
|
|
42
|
-
children: resolvedChildren
|
|
43
|
-
});
|
|
44
|
-
return resolvedChildren;
|
|
45
|
-
}
|
|
46
|
-
Composable.displayName = name;
|
|
47
|
-
return Object.assign(Composable, { props: void 0 });
|
|
48
|
-
}
|
|
49
|
-
function makeComposable() {
|
|
50
|
-
return function(options) {
|
|
51
|
-
const { components, name: layoutName } = options;
|
|
52
|
-
if (!components || typeof components !== "object") throw new Error("components must be an object");
|
|
53
|
-
if (Object.keys(components).length === 0) throw new Error("components must have at least one component");
|
|
54
|
-
if (!("Layout" in components)) throw new Error("The Layout composable is required");
|
|
55
|
-
const create = (overrideOptions) => {
|
|
56
|
-
const resolvedName = overrideOptions?.name ?? layoutName;
|
|
57
|
-
const { Layout, ...rest } = components;
|
|
58
|
-
return Object.assign(Layout, {
|
|
59
|
-
displayName: resolvedName,
|
|
60
|
-
props: void 0,
|
|
61
|
-
...rest
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
return create;
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
//#endregion
|
|
69
|
-
exports.createComposableComponent = createComposableComponent;
|
|
70
|
-
exports.makeComposable = makeComposable;
|
|
71
|
-
exports.resolveLayoutComposables = resolveLayoutComposables;
|
|
72
|
-
//# sourceMappingURL=composable.cjs.map
|
package/dist/composable.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composable.cjs","names":["resolvePropDefinitionValues","Comp"],"sources":["../src/composable.tsx"],"sourcesContent":["import { ComponentType, ReactNode } from 'react';\nimport { AnyBuiltPropDefinition, ResolveProps } from './validators';\nimport { InPropsObject } from './props';\nimport { BaseComponent, resolvePropDefinitionValues, Show } from './utils';\nimport { CapitalizeFn } from './utils/capitalize';\n\nexport type ComposableNameContext<\n Resource extends string,\n LayoutName extends string = string,\n> = {\n resource: Resource;\n name: LayoutName;\n capitalize: CapitalizeFn;\n};\n\ntype ComposableComponentName<\n Name extends string,\n Resource extends string,\n LayoutName extends string = string,\n> = Name | ((ctx: ComposableNameContext<Resource, LayoutName>) => Name);\n\ntype CreateComposableComponentOptions<\n Name extends string,\n Wrapper,\n Resource extends string,\n LayoutName extends string = string,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = {\n name: ComposableComponentName<Name, Resource, LayoutName>;\n inProps?: InProps;\n outProps?: (props: Show<ResolveProps<InProps>>) => OutProps;\n wrapWith?: Wrapper;\n};\n\ntype ResolvedCreateComposableComponentOptions<\n Name extends string,\n Wrapper,\n Resource extends string,\n LayoutName extends string = string,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = Omit<\n CreateComposableComponentOptions<\n Name,\n Wrapper,\n Resource,\n LayoutName,\n InProps,\n OutProps\n >,\n 'name'\n> & {\n name: Name;\n};\n\nexport type CreateLayoutComposable<\n Resources extends string,\n LayoutName extends string = string,\n> = <\n const Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n>(\n options: CreateComposableComponentOptions<\n Name,\n Wrapper,\n Resources,\n LayoutName,\n InProps,\n OutProps\n >,\n) => ComposableComponent<Name, Wrapper, InProps, OutProps>;\n\nexport type LayoutComposablesFactory<\n Resources extends string,\n LayoutName extends string = string,\n> = (\n create: CreateLayoutComposable<Resources, LayoutName>,\n) => ComposableComponents;\n\nexport type ResolveLayoutComposables<\n Factory extends LayoutComposablesFactory<string> | undefined,\n> = Factory extends LayoutComposablesFactory<string> ? ReturnType<Factory> : {};\ntype ComposableComponentWrapperProps<Wrapper> =\n Wrapper extends ComponentType<infer Props> ? Omit<Props, 'children'> : {};\ntype ComposableComponentProps<\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = ComposableComponentWrapperProps<Wrapper> &\n (keyof InProps extends never ? {} : ResolveProps<InProps>) & {\n children?: [keyof InProps] extends [never]\n ? ReactNode\n : ((props: OutProps) => JSX.Element) | ReactNode;\n };\nexport type ComposableComponent<\n Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = BaseComponent<Name, ResolveProps<InProps>> & {\n (props: ComposableComponentProps<Wrapper, InProps, OutProps>): ReactNode;\n};\nexport type ComposableResourceLayout<\n Composables extends ComposableComponents,\n Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = Composables & ComposableComponent<Name, Wrapper, InProps, OutProps>;\n\nexport type AnyComposableComponent = ComposableComponent<string, any, {}, {}>;\nexport type ComposableComponents = Record<string, AnyComposableComponent>;\nexport type ResolvedComposableComponents<\n Components extends ComposableComponents,\n> = [keyof Components] extends [never]\n ? never\n : Components extends { Layout: infer _ }\n ? Components\n : 'The Layout composable is required';\n\nfunction resolveComponent<Props>(\n component: ((props: Props) => JSX.Element | ReactNode) | ReactNode,\n props: Props,\n) {\n const hasProps = Object.keys(props as object).length > 0;\n\n if (hasProps) {\n return typeof component === 'function' ? component(props) : component;\n }\n\n return component as ReactNode;\n}\n\nfunction reactNodeFromSingleFieldOutProps(resolved: unknown): ReactNode {\n if (resolved === null || typeof resolved !== 'object') {\n return null;\n }\n const values = Object.values(resolved);\n if (values.length !== 1) {\n return null;\n }\n return values[0] as ReactNode;\n}\n\nfunction resolveComposableComponentName<\n Name extends string,\n Resource extends string,\n LayoutName extends string,\n>(\n name: ComposableComponentName<Name, Resource, LayoutName>,\n ctx: ComposableNameContext<Resource, LayoutName>,\n): Name {\n return typeof name === 'function' ? name(ctx) : name;\n}\n\nexport function createLayoutComposableFactory<\n Resources extends string,\n LayoutName extends string,\n>(ctx: ComposableNameContext<Resources, LayoutName>) {\n const create: CreateLayoutComposable<Resources, LayoutName> = <\n const Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n >(\n options: CreateComposableComponentOptions<\n Name,\n Wrapper,\n Resources,\n LayoutName,\n InProps,\n OutProps\n >,\n ) =>\n createComposableComponent({\n ...options,\n name: resolveComposableComponentName(options.name, ctx),\n } as ResolvedCreateComposableComponentOptions<\n Name,\n Wrapper,\n Resources,\n LayoutName,\n InProps,\n OutProps\n >);\n\n return create;\n}\n\nexport function resolveLayoutComposables<\n Resources extends string,\n LayoutName extends string,\n Composables extends ComposableComponents,\n>(\n factory: (\n create: CreateLayoutComposable<Resources, LayoutName>,\n ) => Composables,\n ctx: ComposableNameContext<Resources, LayoutName>,\n): Composables {\n return factory(createLayoutComposableFactory(ctx));\n}\n\nexport function createComposableComponent<\n const Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n>(\n options: ResolvedCreateComposableComponentOptions<\n Name,\n Wrapper,\n string,\n string,\n InProps,\n OutProps\n >,\n) {\n const { name, inProps = {} as InProps, outProps, wrapWith } = options;\n\n function Composable({\n children,\n ...props\n }: ComposableComponentProps<Wrapper, InProps, OutProps>) {\n const inPropsKeys = Object.keys(inProps as object) as (keyof InProps &\n string)[];\n const mergedInProps = { ...inProps };\n const propsRecord = props as Record<string, unknown>;\n for (const key of inPropsKeys) {\n if (key in propsRecord) {\n (mergedInProps as Record<string, unknown>)[key] = propsRecord[key];\n }\n }\n\n const wrapperProps = {\n ...propsRecord,\n } as ComposableComponentWrapperProps<Wrapper>;\n for (const key of inPropsKeys) {\n delete (wrapperProps as Record<string, unknown>)[key];\n }\n\n const mergedResolved = resolvePropDefinitionValues(\n mergedInProps as Record<string, unknown>,\n ) as Show<ResolveProps<InProps>>;\n\n const resolvedProps = outProps\n ? outProps(mergedResolved)\n : ({} as OutProps);\n const resolvedChildren =\n children == null\n ? reactNodeFromSingleFieldOutProps(resolvedProps)\n : resolveComponent(children, resolvedProps);\n\n if (wrapWith) {\n const Comp = wrapWith as ComponentType<\n ComposableComponentWrapperProps<Wrapper>\n >;\n\n return <Comp {...wrapperProps}>{resolvedChildren}</Comp>;\n }\n\n return resolvedChildren;\n }\n\n Composable.displayName = name;\n\n return Object.assign(Composable, {\n props: undefined as unknown as ResolveProps<InProps>,\n }) as unknown as ComposableComponent<Name, Wrapper, InProps, OutProps>;\n}\n\nexport type MakeComposableOptions<\n Composables extends ComposableComponents,\n Name extends string,\n> = { components: Composables | undefined; name: Name };\nexport type MakeComposable<\n Composables extends ComposableComponents,\n Name extends string,\n> = <OverrideName extends string = Name>(\n options?: Partial<\n Pick<MakeComposableOptions<Composables, OverrideName>, 'name'>\n >,\n) => ComposableResourceLayout<Composables, Name, any, any, any>;\n\nexport function makeComposable<Props>() {\n return function <\n Composables extends ComposableComponents,\n Name extends string,\n >(options: MakeComposableOptions<Composables, Name>) {\n const { components, name: layoutName } = options;\n\n if (!components || typeof components !== 'object') {\n throw new Error('components must be an object');\n }\n\n const componentNames = Object.keys(components);\n\n if (componentNames.length === 0) {\n throw new Error('components must have at least one component');\n }\n\n if (!('Layout' in components)) {\n throw new Error('The Layout composable is required');\n }\n\n const create: MakeComposable<Composables, Name> = (overrideOptions) => {\n const resolvedName = overrideOptions?.name ?? layoutName;\n const { Layout, ...rest } = components;\n\n return Object.assign(Layout, {\n displayName: resolvedName,\n props: undefined as unknown as Props,\n ...rest,\n }) as unknown as ComposableResourceLayout<\n Composables,\n Name,\n any,\n any,\n any\n >;\n };\n\n return create;\n };\n}\n"],"mappings":";;;;AA2HA,SAAS,iBACP,WACA,OACA;CAGA,IAFiB,OAAO,KAAK,KAAe,EAAE,SAAS,GAGrD,OAAO,OAAO,cAAc,aAAa,UAAU,KAAK,IAAI;CAG9D,OAAO;AACT;AAEA,SAAS,iCAAiC,UAA8B;CACtE,IAAI,aAAa,QAAQ,OAAO,aAAa,UAC3C,OAAO;CAET,MAAM,SAAS,OAAO,OAAO,QAAQ;CACrC,IAAI,OAAO,WAAW,GACpB,OAAO;CAET,OAAO,OAAO;AAChB;AAEA,SAAS,+BAKP,MACA,KACM;CACN,OAAO,OAAO,SAAS,aAAa,KAAK,GAAG,IAAI;AAClD;AAEA,SAAgB,8BAGd,KAAmD;CACnD,MAAM,UAMJ,YASA,0BAA0B;EACxB,GAAG;EACH,MAAM,+BAA+B,QAAQ,MAAM,GAAG;CACxD,CAOC;CAEH,OAAO;AACT;AAEA,SAAgB,yBAKd,SAGA,KACa;CACb,OAAO,QAAQ,8BAA8B,GAAG,CAAC;AACnD;AAEA,SAAgB,0BAMd,SAQA;CACA,MAAM,EAAE,MAAM,UAAU,CAAC,GAAc,UAAU,aAAa;CAE9D,SAAS,WAAW,EAClB,UACA,GAAG,SACoD;EACvD,MAAM,cAAc,OAAO,KAAK,OAAiB;EAEjD,MAAM,gBAAgB,EAAE,GAAG,QAAQ;EACnC,MAAM,cAAc;EACpB,KAAK,MAAM,OAAO,aAChB,IAAI,OAAO,aACT,AAAC,cAA0C,OAAO,YAAY;EAIlE,MAAM,eAAe,EACnB,GAAG,YACL;EACA,KAAK,MAAM,OAAO,aAChB,OAAQ,aAAyC;EAGnD,MAAM,iBAAiBA,0CACrB,aACF;EAEA,MAAM,gBAAgB,WAClB,SAAS,cAAc,IACtB,CAAC;EACN,MAAM,mBACJ,YAAY,OACR,iCAAiC,aAAa,IAC9C,iBAAiB,UAAU,aAAa;EAE9C,IAAI,UAKF,OAAO,2CAACC,UAAD;GAAM,GAAI;aAAe;EAAuB;EAGzD,OAAO;CACT;CAEA,WAAW,cAAc;CAEzB,OAAO,OAAO,OAAO,YAAY,EAC/B,OAAO,OACT,CAAC;AACH;AAeA,SAAgB,iBAAwB;CACtC,OAAO,SAGL,SAAmD;EACnD,MAAM,EAAE,YAAY,MAAM,eAAe;EAEzC,IAAI,CAAC,cAAc,OAAO,eAAe,UACvC,MAAM,IAAI,MAAM,8BAA8B;EAKhD,IAFuB,OAAO,KAAK,UAElB,EAAE,WAAW,GAC5B,MAAM,IAAI,MAAM,6CAA6C;EAG/D,IAAI,EAAE,YAAY,aAChB,MAAM,IAAI,MAAM,mCAAmC;EAGrD,MAAM,UAA6C,oBAAoB;GACrE,MAAM,eAAe,iBAAiB,QAAQ;GAC9C,MAAM,EAAE,QAAQ,GAAG,SAAS;GAE5B,OAAO,OAAO,OAAO,QAAQ;IAC3B,aAAa;IACb,OAAO;IACP,GAAG;GACL,CAAC;EAOH;EAEA,OAAO;CACT;AACF"}
|
package/dist/composable.d.cts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ResolveProps } from "./validators/types.cjs";
|
|
2
|
-
import { BaseComponent, Show } from "./utils.cjs";
|
|
3
|
-
import { InPropsObject } from "./props.cjs";
|
|
4
|
-
import { CapitalizeFn } from "./utils/capitalize.cjs";
|
|
5
|
-
import { ComponentType, ReactNode } from "react";
|
|
6
|
-
|
|
7
|
-
//#region src/composable.d.ts
|
|
8
|
-
type ComposableNameContext<Resource extends string, LayoutName extends string = string> = {
|
|
9
|
-
resource: Resource;
|
|
10
|
-
name: LayoutName;
|
|
11
|
-
capitalize: CapitalizeFn;
|
|
12
|
-
};
|
|
13
|
-
type ComposableComponentName<Name extends string, Resource extends string, LayoutName extends string = string> = Name | ((ctx: ComposableNameContext<Resource, LayoutName>) => Name);
|
|
14
|
-
type CreateComposableComponentOptions<Name extends string, Wrapper, Resource extends string, LayoutName extends string = string, InProps extends InPropsObject = {}, OutProps = {}> = {
|
|
15
|
-
name: ComposableComponentName<Name, Resource, LayoutName>;
|
|
16
|
-
inProps?: InProps;
|
|
17
|
-
outProps?: (props: Show<ResolveProps<InProps>>) => OutProps;
|
|
18
|
-
wrapWith?: Wrapper;
|
|
19
|
-
};
|
|
20
|
-
type ResolvedCreateComposableComponentOptions<Name extends string, Wrapper, Resource extends string, LayoutName extends string = string, InProps extends InPropsObject = {}, OutProps = {}> = Omit<CreateComposableComponentOptions<Name, Wrapper, Resource, LayoutName, InProps, OutProps>, 'name'> & {
|
|
21
|
-
name: Name;
|
|
22
|
-
};
|
|
23
|
-
type CreateLayoutComposable<Resources extends string, LayoutName extends string = string> = <const Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}>(options: CreateComposableComponentOptions<Name, Wrapper, Resources, LayoutName, InProps, OutProps>) => ComposableComponent<Name, Wrapper, InProps, OutProps>;
|
|
24
|
-
type LayoutComposablesFactory<Resources extends string, LayoutName extends string = string> = (create: CreateLayoutComposable<Resources, LayoutName>) => ComposableComponents;
|
|
25
|
-
type ComposableComponentWrapperProps<Wrapper> = Wrapper extends ComponentType<infer Props> ? Omit<Props, 'children'> : {};
|
|
26
|
-
type ComposableComponentProps<Wrapper, InProps extends InPropsObject = {}, OutProps = {}> = ComposableComponentWrapperProps<Wrapper> & (keyof InProps extends never ? {} : ResolveProps<InProps>) & {
|
|
27
|
-
children?: [keyof InProps] extends [never] ? ReactNode : ((props: OutProps) => JSX.Element) | ReactNode;
|
|
28
|
-
};
|
|
29
|
-
type ComposableComponent<Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}> = BaseComponent<Name, ResolveProps<InProps>> & {
|
|
30
|
-
(props: ComposableComponentProps<Wrapper, InProps, OutProps>): ReactNode;
|
|
31
|
-
};
|
|
32
|
-
type ComposableResourceLayout<Composables extends ComposableComponents, Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}> = Composables & ComposableComponent<Name, Wrapper, InProps, OutProps>;
|
|
33
|
-
type AnyComposableComponent = ComposableComponent<string, any, {}, {}>;
|
|
34
|
-
type ComposableComponents = Record<string, AnyComposableComponent>;
|
|
35
|
-
declare function createComposableComponent<const Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}>(options: ResolvedCreateComposableComponentOptions<Name, Wrapper, string, string, InProps, OutProps>): ComposableComponent<Name, Wrapper, InProps, OutProps>;
|
|
36
|
-
type MakeComposableOptions<Composables extends ComposableComponents, Name extends string> = {
|
|
37
|
-
components: Composables | undefined;
|
|
38
|
-
name: Name;
|
|
39
|
-
};
|
|
40
|
-
type MakeComposable<Composables extends ComposableComponents, Name extends string> = <OverrideName extends string = Name>(options?: Partial<Pick<MakeComposableOptions<Composables, OverrideName>, 'name'>>) => ComposableResourceLayout<Composables, Name, any, any, any>;
|
|
41
|
-
declare function makeComposable<Props>(): <Composables extends ComposableComponents, Name extends string>(options: MakeComposableOptions<Composables, Name>) => MakeComposable<Composables, Name>;
|
|
42
|
-
//#endregion
|
|
43
|
-
export { ComposableComponent, ComposableComponents, ComposableNameContext, ComposableResourceLayout, CreateLayoutComposable, LayoutComposablesFactory, MakeComposable, MakeComposableOptions, createComposableComponent, makeComposable };
|
|
44
|
-
//# sourceMappingURL=composable.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composable.d.cts","names":[],"sources":["../src/composable.tsx"],"mappings":";;;;;;;KAMY,qBAAA;EAIV,QAAA,EAAU,QAAA;EACV,IAAA,EAAM,UAAA;EACN,UAAA,EAAY,YAAA;AAAA;AAAA,KAGT,uBAAA,qFAID,IAAA,KAAS,GAAA,EAAK,qBAAA,CAAsB,QAAA,EAAU,UAAA,MAAgB,IAAA;AAAA,KAE7D,gCAAA,4GAKa,aAAA;EAGhB,IAAA,EAAM,uBAAA,CAAwB,IAAA,EAAM,QAAA,EAAU,UAAA;EAC9C,OAAA,GAAU,OAAA;EACV,QAAA,IAAY,KAAA,EAAO,IAAA,CAAK,YAAA,CAAa,OAAA,OAAc,QAAA;EACnD,QAAA,GAAW,OAAA;AAAA;AAAA,KAGR,wCAAA,4GAKa,aAAA,wBAEd,IAAA,CACF,gCAAA,CACE,IAAA,EACA,OAAA,EACA,QAAA,EACA,UAAA,EACA,OAAA,EACA,QAAA;EAIF,IAAA,EAAM,IAAA;AAAA;AAAA,KAGI,sBAAA,sHAMM,aAAA,sBAGhB,OAAA,EAAS,gCAAA,CACP,IAAA,EACA,OAAA,EACA,SAAA,EACA,UAAA,EACA,OAAA,EACA,QAAA,MAEC,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,QAAA;AAAA,KAErC,wBAAA,kEAIV,MAAA,EAAQ,sBAAA,CAAuB,SAAA,EAAW,UAAA,MACvC,oBAAA;AAAA,KAKA,+BAAA,YACH,OAAA,SAAgB,aAAA,gBAA6B,IAAA,CAAK,KAAA;AAAA,KAC/C,wBAAA,0BAEa,aAAA,wBAEd,+BAAA,CAAgC,OAAA,WAC3B,OAAA,sBAA6B,YAAA,CAAa,OAAA;EAC/C,QAAA,UAAkB,OAAA,oBACd,SAAA,KACE,KAAA,EAAO,QAAA,KAAa,GAAA,CAAI,OAAA,IAAW,SAAA;AAAA;AAAA,KAEjC,mBAAA,+CAGM,aAAA,wBAEd,aAAA,CAAc,IAAA,EAAM,YAAA,CAAa,OAAA;EAAA,CAClC,KAAA,EAAO,wBAAA,CAAyB,OAAA,EAAS,OAAA,EAAS,QAAA,IAAY,SAAA;AAAA;AAAA,KAErD,wBAAA,qBACU,oBAAA,gDAGJ,aAAA,wBAEd,WAAA,GAAc,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,QAAA;AAAA,KAElD,sBAAA,GAAyB,mBAAmB;AAAA,KAC5C,oBAAA,GAAuB,MAAM,SAAS,sBAAA;AAAA,iBA2FlC,yBAAA,qDAGE,aAAA,sBAGhB,OAAA,EAAS,wCAAA,CACP,IAAA,EACA,OAAA,kBAGA,OAAA,EACA,QAAA,IAqDe,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,QAAA;AAAA,KAGnD,qBAAA,qBACU,oBAAA;EAEhB,UAAA,EAAY,WAAA;EAAyB,IAAA,EAAM,IAAA;AAAA;AAAA,KACrC,cAAA,qBACU,oBAAA,wDAEa,IAAA,EACjC,OAAA,GAAU,OAAA,CACR,IAAA,CAAK,qBAAA,CAAsB,WAAA,EAAa,YAAA,gBAEvC,wBAAA,CAAyB,WAAA,EAAa,IAAA;AAAA,iBAE3B,cAAA,gCAEQ,oBAAA,uBAEpB,OAAA,EAAS,qBAAA,CAAsB,WAAA,EAAa,IAAA,MAAK,cAAA,CAAA,WAAA,EAAA,IAAA"}
|
package/dist/composable.d.mts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ResolveProps } from "./validators/types.mjs";
|
|
2
|
-
import { BaseComponent, Show } from "./utils.mjs";
|
|
3
|
-
import { InPropsObject } from "./props.mjs";
|
|
4
|
-
import { CapitalizeFn } from "./utils/capitalize.mjs";
|
|
5
|
-
import { ComponentType, ReactNode } from "react";
|
|
6
|
-
|
|
7
|
-
//#region src/composable.d.ts
|
|
8
|
-
type ComposableNameContext<Resource extends string, LayoutName extends string = string> = {
|
|
9
|
-
resource: Resource;
|
|
10
|
-
name: LayoutName;
|
|
11
|
-
capitalize: CapitalizeFn;
|
|
12
|
-
};
|
|
13
|
-
type ComposableComponentName<Name extends string, Resource extends string, LayoutName extends string = string> = Name | ((ctx: ComposableNameContext<Resource, LayoutName>) => Name);
|
|
14
|
-
type CreateComposableComponentOptions<Name extends string, Wrapper, Resource extends string, LayoutName extends string = string, InProps extends InPropsObject = {}, OutProps = {}> = {
|
|
15
|
-
name: ComposableComponentName<Name, Resource, LayoutName>;
|
|
16
|
-
inProps?: InProps;
|
|
17
|
-
outProps?: (props: Show<ResolveProps<InProps>>) => OutProps;
|
|
18
|
-
wrapWith?: Wrapper;
|
|
19
|
-
};
|
|
20
|
-
type ResolvedCreateComposableComponentOptions<Name extends string, Wrapper, Resource extends string, LayoutName extends string = string, InProps extends InPropsObject = {}, OutProps = {}> = Omit<CreateComposableComponentOptions<Name, Wrapper, Resource, LayoutName, InProps, OutProps>, 'name'> & {
|
|
21
|
-
name: Name;
|
|
22
|
-
};
|
|
23
|
-
type CreateLayoutComposable<Resources extends string, LayoutName extends string = string> = <const Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}>(options: CreateComposableComponentOptions<Name, Wrapper, Resources, LayoutName, InProps, OutProps>) => ComposableComponent<Name, Wrapper, InProps, OutProps>;
|
|
24
|
-
type LayoutComposablesFactory<Resources extends string, LayoutName extends string = string> = (create: CreateLayoutComposable<Resources, LayoutName>) => ComposableComponents;
|
|
25
|
-
type ComposableComponentWrapperProps<Wrapper> = Wrapper extends ComponentType<infer Props> ? Omit<Props, 'children'> : {};
|
|
26
|
-
type ComposableComponentProps<Wrapper, InProps extends InPropsObject = {}, OutProps = {}> = ComposableComponentWrapperProps<Wrapper> & (keyof InProps extends never ? {} : ResolveProps<InProps>) & {
|
|
27
|
-
children?: [keyof InProps] extends [never] ? ReactNode : ((props: OutProps) => JSX.Element) | ReactNode;
|
|
28
|
-
};
|
|
29
|
-
type ComposableComponent<Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}> = BaseComponent<Name, ResolveProps<InProps>> & {
|
|
30
|
-
(props: ComposableComponentProps<Wrapper, InProps, OutProps>): ReactNode;
|
|
31
|
-
};
|
|
32
|
-
type ComposableResourceLayout<Composables extends ComposableComponents, Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}> = Composables & ComposableComponent<Name, Wrapper, InProps, OutProps>;
|
|
33
|
-
type AnyComposableComponent = ComposableComponent<string, any, {}, {}>;
|
|
34
|
-
type ComposableComponents = Record<string, AnyComposableComponent>;
|
|
35
|
-
declare function createComposableComponent<const Name extends string, Wrapper, InProps extends InPropsObject = {}, OutProps = {}>(options: ResolvedCreateComposableComponentOptions<Name, Wrapper, string, string, InProps, OutProps>): ComposableComponent<Name, Wrapper, InProps, OutProps>;
|
|
36
|
-
type MakeComposableOptions<Composables extends ComposableComponents, Name extends string> = {
|
|
37
|
-
components: Composables | undefined;
|
|
38
|
-
name: Name;
|
|
39
|
-
};
|
|
40
|
-
type MakeComposable<Composables extends ComposableComponents, Name extends string> = <OverrideName extends string = Name>(options?: Partial<Pick<MakeComposableOptions<Composables, OverrideName>, 'name'>>) => ComposableResourceLayout<Composables, Name, any, any, any>;
|
|
41
|
-
declare function makeComposable<Props>(): <Composables extends ComposableComponents, Name extends string>(options: MakeComposableOptions<Composables, Name>) => MakeComposable<Composables, Name>;
|
|
42
|
-
//#endregion
|
|
43
|
-
export { ComposableComponent, ComposableComponents, ComposableNameContext, ComposableResourceLayout, CreateLayoutComposable, LayoutComposablesFactory, MakeComposable, MakeComposableOptions, createComposableComponent, makeComposable };
|
|
44
|
-
//# sourceMappingURL=composable.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composable.d.mts","names":[],"sources":["../src/composable.tsx"],"mappings":";;;;;;;KAMY,qBAAA;EAIV,QAAA,EAAU,QAAA;EACV,IAAA,EAAM,UAAA;EACN,UAAA,EAAY,YAAA;AAAA;AAAA,KAGT,uBAAA,qFAID,IAAA,KAAS,GAAA,EAAK,qBAAA,CAAsB,QAAA,EAAU,UAAA,MAAgB,IAAA;AAAA,KAE7D,gCAAA,4GAKa,aAAA;EAGhB,IAAA,EAAM,uBAAA,CAAwB,IAAA,EAAM,QAAA,EAAU,UAAA;EAC9C,OAAA,GAAU,OAAA;EACV,QAAA,IAAY,KAAA,EAAO,IAAA,CAAK,YAAA,CAAa,OAAA,OAAc,QAAA;EACnD,QAAA,GAAW,OAAA;AAAA;AAAA,KAGR,wCAAA,4GAKa,aAAA,wBAEd,IAAA,CACF,gCAAA,CACE,IAAA,EACA,OAAA,EACA,QAAA,EACA,UAAA,EACA,OAAA,EACA,QAAA;EAIF,IAAA,EAAM,IAAA;AAAA;AAAA,KAGI,sBAAA,sHAMM,aAAA,sBAGhB,OAAA,EAAS,gCAAA,CACP,IAAA,EACA,OAAA,EACA,SAAA,EACA,UAAA,EACA,OAAA,EACA,QAAA,MAEC,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,QAAA;AAAA,KAErC,wBAAA,kEAIV,MAAA,EAAQ,sBAAA,CAAuB,SAAA,EAAW,UAAA,MACvC,oBAAA;AAAA,KAKA,+BAAA,YACH,OAAA,SAAgB,aAAA,gBAA6B,IAAA,CAAK,KAAA;AAAA,KAC/C,wBAAA,0BAEa,aAAA,wBAEd,+BAAA,CAAgC,OAAA,WAC3B,OAAA,sBAA6B,YAAA,CAAa,OAAA;EAC/C,QAAA,UAAkB,OAAA,oBACd,SAAA,KACE,KAAA,EAAO,QAAA,KAAa,GAAA,CAAI,OAAA,IAAW,SAAA;AAAA;AAAA,KAEjC,mBAAA,+CAGM,aAAA,wBAEd,aAAA,CAAc,IAAA,EAAM,YAAA,CAAa,OAAA;EAAA,CAClC,KAAA,EAAO,wBAAA,CAAyB,OAAA,EAAS,OAAA,EAAS,QAAA,IAAY,SAAA;AAAA;AAAA,KAErD,wBAAA,qBACU,oBAAA,gDAGJ,aAAA,wBAEd,WAAA,GAAc,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,QAAA;AAAA,KAElD,sBAAA,GAAyB,mBAAmB;AAAA,KAC5C,oBAAA,GAAuB,MAAM,SAAS,sBAAA;AAAA,iBA2FlC,yBAAA,qDAGE,aAAA,sBAGhB,OAAA,EAAS,wCAAA,CACP,IAAA,EACA,OAAA,kBAGA,OAAA,EACA,QAAA,IAqDe,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,QAAA;AAAA,KAGnD,qBAAA,qBACU,oBAAA;EAEhB,UAAA,EAAY,WAAA;EAAyB,IAAA,EAAM,IAAA;AAAA;AAAA,KACrC,cAAA,qBACU,oBAAA,wDAEa,IAAA,EACjC,OAAA,GAAU,OAAA,CACR,IAAA,CAAK,qBAAA,CAAsB,WAAA,EAAa,YAAA,gBAEvC,wBAAA,CAAyB,WAAA,EAAa,IAAA;AAAA,iBAE3B,cAAA,gCAEQ,oBAAA,uBAEpB,OAAA,EAAS,qBAAA,CAAsB,WAAA,EAAa,IAAA,MAAK,cAAA,CAAA,WAAA,EAAA,IAAA"}
|
package/dist/composable.mjs
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { resolvePropDefinitionValues } from "./utils.mjs";
|
|
2
|
-
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
|
|
4
|
-
//#region src/composable.tsx
|
|
5
|
-
function resolveComponent(component, props) {
|
|
6
|
-
if (Object.keys(props).length > 0) return typeof component === "function" ? component(props) : component;
|
|
7
|
-
return component;
|
|
8
|
-
}
|
|
9
|
-
function reactNodeFromSingleFieldOutProps(resolved) {
|
|
10
|
-
if (resolved === null || typeof resolved !== "object") return null;
|
|
11
|
-
const values = Object.values(resolved);
|
|
12
|
-
if (values.length !== 1) return null;
|
|
13
|
-
return values[0];
|
|
14
|
-
}
|
|
15
|
-
function resolveComposableComponentName(name, ctx) {
|
|
16
|
-
return typeof name === "function" ? name(ctx) : name;
|
|
17
|
-
}
|
|
18
|
-
function createLayoutComposableFactory(ctx) {
|
|
19
|
-
const create = (options) => createComposableComponent({
|
|
20
|
-
...options,
|
|
21
|
-
name: resolveComposableComponentName(options.name, ctx)
|
|
22
|
-
});
|
|
23
|
-
return create;
|
|
24
|
-
}
|
|
25
|
-
function resolveLayoutComposables(factory, ctx) {
|
|
26
|
-
return factory(createLayoutComposableFactory(ctx));
|
|
27
|
-
}
|
|
28
|
-
function createComposableComponent(options) {
|
|
29
|
-
const { name, inProps = {}, outProps, wrapWith } = options;
|
|
30
|
-
function Composable({ children, ...props }) {
|
|
31
|
-
const inPropsKeys = Object.keys(inProps);
|
|
32
|
-
const mergedInProps = { ...inProps };
|
|
33
|
-
const propsRecord = props;
|
|
34
|
-
for (const key of inPropsKeys) if (key in propsRecord) mergedInProps[key] = propsRecord[key];
|
|
35
|
-
const wrapperProps = { ...propsRecord };
|
|
36
|
-
for (const key of inPropsKeys) delete wrapperProps[key];
|
|
37
|
-
const mergedResolved = resolvePropDefinitionValues(mergedInProps);
|
|
38
|
-
const resolvedProps = outProps ? outProps(mergedResolved) : {};
|
|
39
|
-
const resolvedChildren = children == null ? reactNodeFromSingleFieldOutProps(resolvedProps) : resolveComponent(children, resolvedProps);
|
|
40
|
-
if (wrapWith) return /* @__PURE__ */ jsx(wrapWith, {
|
|
41
|
-
...wrapperProps,
|
|
42
|
-
children: resolvedChildren
|
|
43
|
-
});
|
|
44
|
-
return resolvedChildren;
|
|
45
|
-
}
|
|
46
|
-
Composable.displayName = name;
|
|
47
|
-
return Object.assign(Composable, { props: void 0 });
|
|
48
|
-
}
|
|
49
|
-
function makeComposable() {
|
|
50
|
-
return function(options) {
|
|
51
|
-
const { components, name: layoutName } = options;
|
|
52
|
-
if (!components || typeof components !== "object") throw new Error("components must be an object");
|
|
53
|
-
if (Object.keys(components).length === 0) throw new Error("components must have at least one component");
|
|
54
|
-
if (!("Layout" in components)) throw new Error("The Layout composable is required");
|
|
55
|
-
const create = (overrideOptions) => {
|
|
56
|
-
const resolvedName = overrideOptions?.name ?? layoutName;
|
|
57
|
-
const { Layout, ...rest } = components;
|
|
58
|
-
return Object.assign(Layout, {
|
|
59
|
-
displayName: resolvedName,
|
|
60
|
-
props: void 0,
|
|
61
|
-
...rest
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
return create;
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
//#endregion
|
|
69
|
-
export { createComposableComponent, makeComposable, resolveLayoutComposables };
|
|
70
|
-
//# sourceMappingURL=composable.mjs.map
|
package/dist/composable.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"composable.mjs","names":["Comp"],"sources":["../src/composable.tsx"],"sourcesContent":["import { ComponentType, ReactNode } from 'react';\nimport { AnyBuiltPropDefinition, ResolveProps } from './validators';\nimport { InPropsObject } from './props';\nimport { BaseComponent, resolvePropDefinitionValues, Show } from './utils';\nimport { CapitalizeFn } from './utils/capitalize';\n\nexport type ComposableNameContext<\n Resource extends string,\n LayoutName extends string = string,\n> = {\n resource: Resource;\n name: LayoutName;\n capitalize: CapitalizeFn;\n};\n\ntype ComposableComponentName<\n Name extends string,\n Resource extends string,\n LayoutName extends string = string,\n> = Name | ((ctx: ComposableNameContext<Resource, LayoutName>) => Name);\n\ntype CreateComposableComponentOptions<\n Name extends string,\n Wrapper,\n Resource extends string,\n LayoutName extends string = string,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = {\n name: ComposableComponentName<Name, Resource, LayoutName>;\n inProps?: InProps;\n outProps?: (props: Show<ResolveProps<InProps>>) => OutProps;\n wrapWith?: Wrapper;\n};\n\ntype ResolvedCreateComposableComponentOptions<\n Name extends string,\n Wrapper,\n Resource extends string,\n LayoutName extends string = string,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = Omit<\n CreateComposableComponentOptions<\n Name,\n Wrapper,\n Resource,\n LayoutName,\n InProps,\n OutProps\n >,\n 'name'\n> & {\n name: Name;\n};\n\nexport type CreateLayoutComposable<\n Resources extends string,\n LayoutName extends string = string,\n> = <\n const Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n>(\n options: CreateComposableComponentOptions<\n Name,\n Wrapper,\n Resources,\n LayoutName,\n InProps,\n OutProps\n >,\n) => ComposableComponent<Name, Wrapper, InProps, OutProps>;\n\nexport type LayoutComposablesFactory<\n Resources extends string,\n LayoutName extends string = string,\n> = (\n create: CreateLayoutComposable<Resources, LayoutName>,\n) => ComposableComponents;\n\nexport type ResolveLayoutComposables<\n Factory extends LayoutComposablesFactory<string> | undefined,\n> = Factory extends LayoutComposablesFactory<string> ? ReturnType<Factory> : {};\ntype ComposableComponentWrapperProps<Wrapper> =\n Wrapper extends ComponentType<infer Props> ? Omit<Props, 'children'> : {};\ntype ComposableComponentProps<\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = ComposableComponentWrapperProps<Wrapper> &\n (keyof InProps extends never ? {} : ResolveProps<InProps>) & {\n children?: [keyof InProps] extends [never]\n ? ReactNode\n : ((props: OutProps) => JSX.Element) | ReactNode;\n };\nexport type ComposableComponent<\n Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = BaseComponent<Name, ResolveProps<InProps>> & {\n (props: ComposableComponentProps<Wrapper, InProps, OutProps>): ReactNode;\n};\nexport type ComposableResourceLayout<\n Composables extends ComposableComponents,\n Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n> = Composables & ComposableComponent<Name, Wrapper, InProps, OutProps>;\n\nexport type AnyComposableComponent = ComposableComponent<string, any, {}, {}>;\nexport type ComposableComponents = Record<string, AnyComposableComponent>;\nexport type ResolvedComposableComponents<\n Components extends ComposableComponents,\n> = [keyof Components] extends [never]\n ? never\n : Components extends { Layout: infer _ }\n ? Components\n : 'The Layout composable is required';\n\nfunction resolveComponent<Props>(\n component: ((props: Props) => JSX.Element | ReactNode) | ReactNode,\n props: Props,\n) {\n const hasProps = Object.keys(props as object).length > 0;\n\n if (hasProps) {\n return typeof component === 'function' ? component(props) : component;\n }\n\n return component as ReactNode;\n}\n\nfunction reactNodeFromSingleFieldOutProps(resolved: unknown): ReactNode {\n if (resolved === null || typeof resolved !== 'object') {\n return null;\n }\n const values = Object.values(resolved);\n if (values.length !== 1) {\n return null;\n }\n return values[0] as ReactNode;\n}\n\nfunction resolveComposableComponentName<\n Name extends string,\n Resource extends string,\n LayoutName extends string,\n>(\n name: ComposableComponentName<Name, Resource, LayoutName>,\n ctx: ComposableNameContext<Resource, LayoutName>,\n): Name {\n return typeof name === 'function' ? name(ctx) : name;\n}\n\nexport function createLayoutComposableFactory<\n Resources extends string,\n LayoutName extends string,\n>(ctx: ComposableNameContext<Resources, LayoutName>) {\n const create: CreateLayoutComposable<Resources, LayoutName> = <\n const Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n >(\n options: CreateComposableComponentOptions<\n Name,\n Wrapper,\n Resources,\n LayoutName,\n InProps,\n OutProps\n >,\n ) =>\n createComposableComponent({\n ...options,\n name: resolveComposableComponentName(options.name, ctx),\n } as ResolvedCreateComposableComponentOptions<\n Name,\n Wrapper,\n Resources,\n LayoutName,\n InProps,\n OutProps\n >);\n\n return create;\n}\n\nexport function resolveLayoutComposables<\n Resources extends string,\n LayoutName extends string,\n Composables extends ComposableComponents,\n>(\n factory: (\n create: CreateLayoutComposable<Resources, LayoutName>,\n ) => Composables,\n ctx: ComposableNameContext<Resources, LayoutName>,\n): Composables {\n return factory(createLayoutComposableFactory(ctx));\n}\n\nexport function createComposableComponent<\n const Name extends string,\n Wrapper,\n InProps extends InPropsObject = {},\n OutProps = {},\n>(\n options: ResolvedCreateComposableComponentOptions<\n Name,\n Wrapper,\n string,\n string,\n InProps,\n OutProps\n >,\n) {\n const { name, inProps = {} as InProps, outProps, wrapWith } = options;\n\n function Composable({\n children,\n ...props\n }: ComposableComponentProps<Wrapper, InProps, OutProps>) {\n const inPropsKeys = Object.keys(inProps as object) as (keyof InProps &\n string)[];\n const mergedInProps = { ...inProps };\n const propsRecord = props as Record<string, unknown>;\n for (const key of inPropsKeys) {\n if (key in propsRecord) {\n (mergedInProps as Record<string, unknown>)[key] = propsRecord[key];\n }\n }\n\n const wrapperProps = {\n ...propsRecord,\n } as ComposableComponentWrapperProps<Wrapper>;\n for (const key of inPropsKeys) {\n delete (wrapperProps as Record<string, unknown>)[key];\n }\n\n const mergedResolved = resolvePropDefinitionValues(\n mergedInProps as Record<string, unknown>,\n ) as Show<ResolveProps<InProps>>;\n\n const resolvedProps = outProps\n ? outProps(mergedResolved)\n : ({} as OutProps);\n const resolvedChildren =\n children == null\n ? reactNodeFromSingleFieldOutProps(resolvedProps)\n : resolveComponent(children, resolvedProps);\n\n if (wrapWith) {\n const Comp = wrapWith as ComponentType<\n ComposableComponentWrapperProps<Wrapper>\n >;\n\n return <Comp {...wrapperProps}>{resolvedChildren}</Comp>;\n }\n\n return resolvedChildren;\n }\n\n Composable.displayName = name;\n\n return Object.assign(Composable, {\n props: undefined as unknown as ResolveProps<InProps>,\n }) as unknown as ComposableComponent<Name, Wrapper, InProps, OutProps>;\n}\n\nexport type MakeComposableOptions<\n Composables extends ComposableComponents,\n Name extends string,\n> = { components: Composables | undefined; name: Name };\nexport type MakeComposable<\n Composables extends ComposableComponents,\n Name extends string,\n> = <OverrideName extends string = Name>(\n options?: Partial<\n Pick<MakeComposableOptions<Composables, OverrideName>, 'name'>\n >,\n) => ComposableResourceLayout<Composables, Name, any, any, any>;\n\nexport function makeComposable<Props>() {\n return function <\n Composables extends ComposableComponents,\n Name extends string,\n >(options: MakeComposableOptions<Composables, Name>) {\n const { components, name: layoutName } = options;\n\n if (!components || typeof components !== 'object') {\n throw new Error('components must be an object');\n }\n\n const componentNames = Object.keys(components);\n\n if (componentNames.length === 0) {\n throw new Error('components must have at least one component');\n }\n\n if (!('Layout' in components)) {\n throw new Error('The Layout composable is required');\n }\n\n const create: MakeComposable<Composables, Name> = (overrideOptions) => {\n const resolvedName = overrideOptions?.name ?? layoutName;\n const { Layout, ...rest } = components;\n\n return Object.assign(Layout, {\n displayName: resolvedName,\n props: undefined as unknown as Props,\n ...rest,\n }) as unknown as ComposableResourceLayout<\n Composables,\n Name,\n any,\n any,\n any\n >;\n };\n\n return create;\n };\n}\n"],"mappings":";;;;AA2HA,SAAS,iBACP,WACA,OACA;CAGA,IAFiB,OAAO,KAAK,KAAe,EAAE,SAAS,GAGrD,OAAO,OAAO,cAAc,aAAa,UAAU,KAAK,IAAI;CAG9D,OAAO;AACT;AAEA,SAAS,iCAAiC,UAA8B;CACtE,IAAI,aAAa,QAAQ,OAAO,aAAa,UAC3C,OAAO;CAET,MAAM,SAAS,OAAO,OAAO,QAAQ;CACrC,IAAI,OAAO,WAAW,GACpB,OAAO;CAET,OAAO,OAAO;AAChB;AAEA,SAAS,+BAKP,MACA,KACM;CACN,OAAO,OAAO,SAAS,aAAa,KAAK,GAAG,IAAI;AAClD;AAEA,SAAgB,8BAGd,KAAmD;CACnD,MAAM,UAMJ,YASA,0BAA0B;EACxB,GAAG;EACH,MAAM,+BAA+B,QAAQ,MAAM,GAAG;CACxD,CAOC;CAEH,OAAO;AACT;AAEA,SAAgB,yBAKd,SAGA,KACa;CACb,OAAO,QAAQ,8BAA8B,GAAG,CAAC;AACnD;AAEA,SAAgB,0BAMd,SAQA;CACA,MAAM,EAAE,MAAM,UAAU,CAAC,GAAc,UAAU,aAAa;CAE9D,SAAS,WAAW,EAClB,UACA,GAAG,SACoD;EACvD,MAAM,cAAc,OAAO,KAAK,OAAiB;EAEjD,MAAM,gBAAgB,EAAE,GAAG,QAAQ;EACnC,MAAM,cAAc;EACpB,KAAK,MAAM,OAAO,aAChB,IAAI,OAAO,aACT,AAAC,cAA0C,OAAO,YAAY;EAIlE,MAAM,eAAe,EACnB,GAAG,YACL;EACA,KAAK,MAAM,OAAO,aAChB,OAAQ,aAAyC;EAGnD,MAAM,iBAAiB,4BACrB,aACF;EAEA,MAAM,gBAAgB,WAClB,SAAS,cAAc,IACtB,CAAC;EACN,MAAM,mBACJ,YAAY,OACR,iCAAiC,aAAa,IAC9C,iBAAiB,UAAU,aAAa;EAE9C,IAAI,UAKF,OAAO,oBAACA,UAAD;GAAM,GAAI;aAAe;EAAuB;EAGzD,OAAO;CACT;CAEA,WAAW,cAAc;CAEzB,OAAO,OAAO,OAAO,YAAY,EAC/B,OAAO,OACT,CAAC;AACH;AAeA,SAAgB,iBAAwB;CACtC,OAAO,SAGL,SAAmD;EACnD,MAAM,EAAE,YAAY,MAAM,eAAe;EAEzC,IAAI,CAAC,cAAc,OAAO,eAAe,UACvC,MAAM,IAAI,MAAM,8BAA8B;EAKhD,IAFuB,OAAO,KAAK,UAElB,EAAE,WAAW,GAC5B,MAAM,IAAI,MAAM,6CAA6C;EAG/D,IAAI,EAAE,YAAY,aAChB,MAAM,IAAI,MAAM,mCAAmC;EAGrD,MAAM,UAA6C,oBAAoB;GACrE,MAAM,eAAe,iBAAiB,QAAQ;GAC9C,MAAM,EAAE,QAAQ,GAAG,SAAS;GAE5B,OAAO,OAAO,OAAO,QAAQ;IAC3B,aAAa;IACb,OAAO;IACP,GAAG;GACL,CAAC;EAOH;EAEA,OAAO;CACT;AACF"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
//#region src/utils/capitalize.d.ts
|
|
2
|
-
type CapitalizeFn = typeof capitalize;
|
|
3
|
-
declare function capitalize<T extends string>(str: T): Capitalize<T>;
|
|
4
|
-
declare function capitalize(str: string): string;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { CapitalizeFn };
|
|
7
|
-
//# sourceMappingURL=capitalize.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capitalize.d.cts","names":[],"sources":["../../src/utils/capitalize.ts"],"mappings":";KAAY,YAAA,UAAsB,UAAU;AAAA,iBAE5B,UAAA,mBAA6B,GAAA,EAAK,CAAA,GAAI,UAAA,CAAW,CAAA;AAAA,iBACjD,UAAA,CAAW,GAAW"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
//#region src/utils/capitalize.d.ts
|
|
2
|
-
type CapitalizeFn = typeof capitalize;
|
|
3
|
-
declare function capitalize<T extends string>(str: T): Capitalize<T>;
|
|
4
|
-
declare function capitalize(str: string): string;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { CapitalizeFn };
|
|
7
|
-
//# sourceMappingURL=capitalize.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capitalize.d.mts","names":[],"sources":["../../src/utils/capitalize.ts"],"mappings":";KAAY,YAAA,UAAsB,UAAU;AAAA,iBAE5B,UAAA,mBAA6B,GAAA,EAAK,CAAA,GAAI,UAAA,CAAW,CAAA;AAAA,iBACjD,UAAA,CAAW,GAAW"}
|
package/dist/validators/base.cjs
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/validators/base.ts
|
|
3
|
-
const primitiveTypes = {
|
|
4
|
-
string: "string",
|
|
5
|
-
number: "number",
|
|
6
|
-
boolean: "boolean",
|
|
7
|
-
object: "object",
|
|
8
|
-
array: "array",
|
|
9
|
-
date: "date",
|
|
10
|
-
regex: "regex",
|
|
11
|
-
error: "error",
|
|
12
|
-
symbol: "symbol",
|
|
13
|
-
bigint: "bigint"
|
|
14
|
-
};
|
|
15
|
-
function createInvalidPropValueMessage(type) {
|
|
16
|
-
return `"value" is not of type "${type}".`;
|
|
17
|
-
}
|
|
18
|
-
var InvalidPropValueError = class extends Error {
|
|
19
|
-
constructor(type) {
|
|
20
|
-
super(createInvalidPropValueMessage(type));
|
|
21
|
-
this.name = "InvalidPropValueError";
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
var BaseProp = class {
|
|
25
|
-
type;
|
|
26
|
-
visibility;
|
|
27
|
-
value;
|
|
28
|
-
error;
|
|
29
|
-
constructor(options) {
|
|
30
|
-
const { type, visibility, value } = options;
|
|
31
|
-
this.type = type;
|
|
32
|
-
this.visibility = visibility;
|
|
33
|
-
this.value = value;
|
|
34
|
-
this.error = new InvalidPropValueError(type);
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
//#endregion
|
|
39
|
-
exports.BaseProp = BaseProp;
|
|
40
|
-
exports.primitiveTypes = primitiveTypes;
|
|
41
|
-
//# sourceMappingURL=base.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.cjs","names":[],"sources":["../../src/validators/base.ts"],"sourcesContent":["import type { BasePropOptions, PropType, PropVisibility } from './types';\n\nexport const primitiveTypes = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n object: 'object',\n array: 'array',\n date: 'date',\n regex: 'regex',\n error: 'error',\n symbol: 'symbol',\n bigint: 'bigint',\n};\n\nfunction createInvalidPropValueMessage(type: string) {\n return `\"value\" is not of type \"${type}\".`;\n}\n\nexport class InvalidPropValueError<Type extends string> extends Error {\n constructor(type: Type) {\n super(createInvalidPropValueMessage(type));\n\n this.name = 'InvalidPropValueError';\n }\n}\n\nexport abstract class BaseProp<\n Type extends PropType,\n Visibility extends PropVisibility,\n Value = unknown,\n> {\n readonly type: Type;\n readonly visibility: Visibility;\n readonly value?: Value;\n\n protected error: InvalidPropValueError<Type>;\n\n constructor(options: BasePropOptions<Type, Visibility, Value>) {\n const { type, visibility, value } = options;\n\n this.type = type;\n this.visibility = visibility;\n this.value = value;\n this.error = new InvalidPropValueError(type);\n }\n\n abstract validate(value: unknown): void;\n abstract allows(value: unknown): value is Value;\n}\n"],"mappings":";;AAEA,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,OAAO;CACP,MAAM;CACN,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;AACV;AAEA,SAAS,8BAA8B,MAAc;CACnD,OAAO,2BAA2B,KAAK;AACzC;AAEA,IAAa,wBAAb,cAAgE,MAAM;CACpE,YAAY,MAAY;EACtB,MAAM,8BAA8B,IAAI,CAAC;EAEzC,KAAK,OAAO;CACd;AACF;AAEA,IAAsB,WAAtB,MAIE;CACA,AAAS;CACT,AAAS;CACT,AAAS;CAET,AAAU;CAEV,YAAY,SAAmD;EAC7D,MAAM,EAAE,MAAM,YAAY,UAAU;EAEpC,KAAK,OAAO;EACZ,KAAK,aAAa;EAClB,KAAK,QAAQ;EACb,KAAK,QAAQ,IAAI,sBAAsB,IAAI;CAC7C;AAIF"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { BasePropOptions, PropType, PropVisibility } from "./types.cjs";
|
|
2
|
-
|
|
3
|
-
//#region src/validators/base.d.ts
|
|
4
|
-
declare class InvalidPropValueError<Type extends string> extends Error {
|
|
5
|
-
constructor(type: Type);
|
|
6
|
-
}
|
|
7
|
-
declare abstract class BaseProp<Type extends PropType, Visibility extends PropVisibility, Value = unknown> {
|
|
8
|
-
readonly type: Type;
|
|
9
|
-
readonly visibility: Visibility;
|
|
10
|
-
readonly value?: Value;
|
|
11
|
-
protected error: InvalidPropValueError<Type>;
|
|
12
|
-
constructor(options: BasePropOptions<Type, Visibility, Value>);
|
|
13
|
-
abstract validate(value: unknown): void;
|
|
14
|
-
abstract allows(value: unknown): value is Value;
|
|
15
|
-
}
|
|
16
|
-
//#endregion
|
|
17
|
-
export { BaseProp, InvalidPropValueError };
|
|
18
|
-
//# sourceMappingURL=base.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.cts","names":[],"sources":["../../src/validators/base.ts"],"mappings":";;;cAmBa,qBAAA,8BAAmD,KAAK;cACvD,IAAA,EAAM,IAAA;AAAA;AAAA,uBAOE,QAAA,cACP,QAAA,qBACM,cAAA;EAAA,SAGV,IAAA,EAAM,IAAA;EAAA,SACN,UAAA,EAAY,UAAA;EAAA,SACZ,KAAA,GAAQ,KAAA;EAAA,UAEP,KAAA,EAAO,qBAAA,CAAsB,IAAA;cAE3B,OAAA,EAAS,eAAA,CAAgB,IAAA,EAAM,UAAA,EAAY,KAAA;EAAA,SAS9C,QAAA,CAAS,KAAA;EAAA,SACT,MAAA,CAAO,KAAA,YAAiB,KAAA,IAAS,KAAA;AAAA"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { BasePropOptions, PropType, PropVisibility } from "./types.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/validators/base.d.ts
|
|
4
|
-
declare class InvalidPropValueError<Type extends string> extends Error {
|
|
5
|
-
constructor(type: Type);
|
|
6
|
-
}
|
|
7
|
-
declare abstract class BaseProp<Type extends PropType, Visibility extends PropVisibility, Value = unknown> {
|
|
8
|
-
readonly type: Type;
|
|
9
|
-
readonly visibility: Visibility;
|
|
10
|
-
readonly value?: Value;
|
|
11
|
-
protected error: InvalidPropValueError<Type>;
|
|
12
|
-
constructor(options: BasePropOptions<Type, Visibility, Value>);
|
|
13
|
-
abstract validate(value: unknown): void;
|
|
14
|
-
abstract allows(value: unknown): value is Value;
|
|
15
|
-
}
|
|
16
|
-
//#endregion
|
|
17
|
-
export { BaseProp, InvalidPropValueError };
|
|
18
|
-
//# sourceMappingURL=base.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.mts","names":[],"sources":["../../src/validators/base.ts"],"mappings":";;;cAmBa,qBAAA,8BAAmD,KAAK;cACvD,IAAA,EAAM,IAAA;AAAA;AAAA,uBAOE,QAAA,cACP,QAAA,qBACM,cAAA;EAAA,SAGV,IAAA,EAAM,IAAA;EAAA,SACN,UAAA,EAAY,UAAA;EAAA,SACZ,KAAA,GAAQ,KAAA;EAAA,UAEP,KAAA,EAAO,qBAAA,CAAsB,IAAA;cAE3B,OAAA,EAAS,eAAA,CAAgB,IAAA,EAAM,UAAA,EAAY,KAAA;EAAA,SAS9C,QAAA,CAAS,KAAA;EAAA,SACT,MAAA,CAAO,KAAA,YAAiB,KAAA,IAAS,KAAA;AAAA"}
|
package/dist/validators/base.mjs
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
//#region src/validators/base.ts
|
|
2
|
-
const primitiveTypes = {
|
|
3
|
-
string: "string",
|
|
4
|
-
number: "number",
|
|
5
|
-
boolean: "boolean",
|
|
6
|
-
object: "object",
|
|
7
|
-
array: "array",
|
|
8
|
-
date: "date",
|
|
9
|
-
regex: "regex",
|
|
10
|
-
error: "error",
|
|
11
|
-
symbol: "symbol",
|
|
12
|
-
bigint: "bigint"
|
|
13
|
-
};
|
|
14
|
-
function createInvalidPropValueMessage(type) {
|
|
15
|
-
return `"value" is not of type "${type}".`;
|
|
16
|
-
}
|
|
17
|
-
var InvalidPropValueError = class extends Error {
|
|
18
|
-
constructor(type) {
|
|
19
|
-
super(createInvalidPropValueMessage(type));
|
|
20
|
-
this.name = "InvalidPropValueError";
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
var BaseProp = class {
|
|
24
|
-
type;
|
|
25
|
-
visibility;
|
|
26
|
-
value;
|
|
27
|
-
error;
|
|
28
|
-
constructor(options) {
|
|
29
|
-
const { type, visibility, value } = options;
|
|
30
|
-
this.type = type;
|
|
31
|
-
this.visibility = visibility;
|
|
32
|
-
this.value = value;
|
|
33
|
-
this.error = new InvalidPropValueError(type);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
//#endregion
|
|
38
|
-
export { BaseProp, primitiveTypes };
|
|
39
|
-
//# sourceMappingURL=base.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.mjs","names":[],"sources":["../../src/validators/base.ts"],"sourcesContent":["import type { BasePropOptions, PropType, PropVisibility } from './types';\n\nexport const primitiveTypes = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n object: 'object',\n array: 'array',\n date: 'date',\n regex: 'regex',\n error: 'error',\n symbol: 'symbol',\n bigint: 'bigint',\n};\n\nfunction createInvalidPropValueMessage(type: string) {\n return `\"value\" is not of type \"${type}\".`;\n}\n\nexport class InvalidPropValueError<Type extends string> extends Error {\n constructor(type: Type) {\n super(createInvalidPropValueMessage(type));\n\n this.name = 'InvalidPropValueError';\n }\n}\n\nexport abstract class BaseProp<\n Type extends PropType,\n Visibility extends PropVisibility,\n Value = unknown,\n> {\n readonly type: Type;\n readonly visibility: Visibility;\n readonly value?: Value;\n\n protected error: InvalidPropValueError<Type>;\n\n constructor(options: BasePropOptions<Type, Visibility, Value>) {\n const { type, visibility, value } = options;\n\n this.type = type;\n this.visibility = visibility;\n this.value = value;\n this.error = new InvalidPropValueError(type);\n }\n\n abstract validate(value: unknown): void;\n abstract allows(value: unknown): value is Value;\n}\n"],"mappings":";AAEA,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,OAAO;CACP,MAAM;CACN,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;AACV;AAEA,SAAS,8BAA8B,MAAc;CACnD,OAAO,2BAA2B,KAAK;AACzC;AAEA,IAAa,wBAAb,cAAgE,MAAM;CACpE,YAAY,MAAY;EACtB,MAAM,8BAA8B,IAAI,CAAC;EAEzC,KAAK,OAAO;CACd;AACF;AAEA,IAAsB,WAAtB,MAIE;CACA,AAAS;CACT,AAAS;CACT,AAAS;CAET,AAAU;CAEV,YAAY,SAAmD;EAC7D,MAAM,EAAE,MAAM,YAAY,UAAU;EAEpC,KAAK,OAAO;EACZ,KAAK,aAAa;EAClB,KAAK,QAAQ;EACb,KAAK,QAAQ,IAAI,sBAAsB,IAAI;CAC7C;AAIF"}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
const require_component = require('./component.cjs');
|
|
2
|
-
const require_enum = require('./enum.cjs');
|
|
3
|
-
const require_literal = require('./literal.cjs');
|
|
4
|
-
const require_object = require('./object.cjs');
|
|
5
|
-
const require_primitive = require('./primitive.cjs');
|
|
6
|
-
const require_union = require('./union.cjs');
|
|
7
|
-
|
|
8
|
-
//#region src/validators/builders.ts
|
|
9
|
-
function createConfiguredWrappedProp(prop, config) {
|
|
10
|
-
const validate = ((value) => prop.validate(value));
|
|
11
|
-
return Object.assign(validate, getPropState(prop), {
|
|
12
|
-
_baseProp: prop,
|
|
13
|
-
config
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
function getPropState(prop) {
|
|
17
|
-
const state = {
|
|
18
|
-
type: prop.type,
|
|
19
|
-
visibility: prop.visibility
|
|
20
|
-
};
|
|
21
|
-
if ("value" in prop && prop.value !== void 0) state.value = prop.value;
|
|
22
|
-
if (prop instanceof require_object.ObjectProp || prop instanceof require_component.ComponentPropWithPropertiesProp) state.properties = prop.properties;
|
|
23
|
-
if (prop instanceof require_union.UnionProp) state.members = prop.members;
|
|
24
|
-
if (prop instanceof require_component.RenderChildrenProp) {
|
|
25
|
-
state.renderProps = prop.renderProps;
|
|
26
|
-
state.childrenType = prop.childrenType;
|
|
27
|
-
}
|
|
28
|
-
return state;
|
|
29
|
-
}
|
|
30
|
-
function flattenUnionMembers(prop) {
|
|
31
|
-
return prop instanceof require_union.UnionProp ? [...prop.members] : [prop];
|
|
32
|
-
}
|
|
33
|
-
function wrapProp(prop) {
|
|
34
|
-
const validate = ((value) => prop.validate(value));
|
|
35
|
-
const chainedProps = getPropState(prop);
|
|
36
|
-
for (const methodName of [
|
|
37
|
-
"optional",
|
|
38
|
-
"literal",
|
|
39
|
-
"enum",
|
|
40
|
-
"config"
|
|
41
|
-
]) {
|
|
42
|
-
const method = prop[methodName];
|
|
43
|
-
if (typeof method === "function") {
|
|
44
|
-
if (methodName === "config") {
|
|
45
|
-
chainedProps.config = (config) => createConfiguredWrappedProp(prop, config);
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
chainedProps[methodName] = (...args) => {
|
|
49
|
-
return wrapProp(method.apply(prop, args));
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
chainedProps._baseProp = prop;
|
|
54
|
-
chainedProps.or = (other) => {
|
|
55
|
-
const otherBase = other._baseProp;
|
|
56
|
-
return wrapProp(new require_union.UnionProp([...flattenUnionMembers(prop), ...flattenUnionMembers(otherBase)], prop.visibility));
|
|
57
|
-
};
|
|
58
|
-
return Object.assign(validate, chainedProps);
|
|
59
|
-
}
|
|
60
|
-
function createPrimitiveProp(type, visibility) {
|
|
61
|
-
switch (type) {
|
|
62
|
-
case "string": return new require_primitive.StringProp(visibility);
|
|
63
|
-
case "number": return new require_primitive.NumberProp(visibility);
|
|
64
|
-
case "boolean": return new require_primitive.BooleanProp(visibility);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
function createWrappedProp(type, visibility) {
|
|
68
|
-
return (wrapperFor) => (value) => {
|
|
69
|
-
if (wrapperFor === "literal") return wrapProp(new require_literal.LiteralProp(value, type, visibility));
|
|
70
|
-
if (wrapperFor === "enum") return wrapProp(new require_enum.EnumProp(value, type, visibility));
|
|
71
|
-
throw new Error(`Invalid wrapper for: ${wrapperFor}`);
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
function createPrimitivePropBuilder(type, visibility = "required") {
|
|
75
|
-
const propWrapper = createWrappedProp(type, visibility);
|
|
76
|
-
const builder = (() => wrapProp(createPrimitiveProp(type, visibility)));
|
|
77
|
-
return Object.assign(builder, {
|
|
78
|
-
literal: propWrapper("literal"),
|
|
79
|
-
enum: propWrapper("enum"),
|
|
80
|
-
config: (config) => createConfiguredWrappedProp(createPrimitiveProp(type, visibility), config),
|
|
81
|
-
...visibility === "required" ? { optional: () => createPrimitivePropBuilder(type, "optional") } : {}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
function createObjectProp(properties) {
|
|
85
|
-
return wrapProp(new require_object.ObjectProp(properties, "required"));
|
|
86
|
-
}
|
|
87
|
-
function createComponentPropWithChildrenBuilder(type, visibility, childrenProp) {
|
|
88
|
-
const baseProp = new require_component.ComponentPropWithPropertiesProp(type, { children: childrenProp }, visibility);
|
|
89
|
-
const validate = ((value) => baseProp.validate(value));
|
|
90
|
-
return Object.assign(validate, {
|
|
91
|
-
_baseProp: baseProp,
|
|
92
|
-
type,
|
|
93
|
-
visibility,
|
|
94
|
-
props: (shape) => wrapProp(new require_component.ComponentPropWithPropertiesProp(type, {
|
|
95
|
-
...shape,
|
|
96
|
-
children: childrenProp
|
|
97
|
-
}, visibility)),
|
|
98
|
-
or: (other) => {
|
|
99
|
-
return wrapProp(new require_union.UnionProp([baseProp, ...flattenUnionMembers(other._baseProp)], baseProp.visibility));
|
|
100
|
-
},
|
|
101
|
-
...visibility === "required" ? { optional: () => createComponentPropWithChildrenBuilder(type, "optional", childrenProp) } : {}
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
function buildChildrenProp(childrenType, childrenVisibility, renderProps) {
|
|
105
|
-
if (renderProps !== void 0) return wrapProp(new require_component.RenderChildrenProp(renderProps, childrenType, childrenVisibility));
|
|
106
|
-
return wrapProp(new require_component.ComponentProp(childrenType, childrenVisibility));
|
|
107
|
-
}
|
|
108
|
-
function createComponentPropBuilder(type, visibility = "required") {
|
|
109
|
-
const prop = new require_component.ComponentProp(type, visibility);
|
|
110
|
-
const validate = ((value) => prop.validate(value));
|
|
111
|
-
return Object.assign(validate, {
|
|
112
|
-
type,
|
|
113
|
-
visibility,
|
|
114
|
-
_baseProp: prop,
|
|
115
|
-
props: (shape) => wrapProp(new require_component.ComponentPropWithPropertiesProp(type, shape, visibility)),
|
|
116
|
-
config: (config) => createConfiguredWrappedProp(prop, config),
|
|
117
|
-
withChildren: (options) => {
|
|
118
|
-
return createComponentPropWithChildrenBuilder(type, visibility, buildChildrenProp(options?.type ?? "ReactNode", options?.visibility ?? "optional", options?.props ?? void 0));
|
|
119
|
-
},
|
|
120
|
-
or: (other) => {
|
|
121
|
-
return wrapProp(new require_union.UnionProp([prop, ...flattenUnionMembers(other._baseProp)], prop.visibility));
|
|
122
|
-
},
|
|
123
|
-
...visibility === "required" ? { optional: () => createComponentPropBuilder(type, "optional") } : {}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
const createProp = {
|
|
127
|
-
string: createPrimitivePropBuilder("string"),
|
|
128
|
-
number: createPrimitivePropBuilder("number"),
|
|
129
|
-
boolean: createPrimitivePropBuilder("boolean"),
|
|
130
|
-
object: createObjectProp,
|
|
131
|
-
component: (options) => createComponentPropBuilder(options.type)
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
//#endregion
|
|
135
|
-
exports.createPrimitivePropBuilder = createPrimitivePropBuilder;
|
|
136
|
-
exports.createProp = createProp;
|
|
137
|
-
//# sourceMappingURL=builders.cjs.map
|