@zod-to-form/core 0.2.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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +5 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +6 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/metadata.d.ts +9 -0
  7. package/dist/metadata.d.ts.map +1 -0
  8. package/dist/metadata.js +13 -0
  9. package/dist/metadata.js.map +1 -0
  10. package/dist/processors/array.d.ts +5 -0
  11. package/dist/processors/array.d.ts.map +1 -0
  12. package/dist/processors/array.js +38 -0
  13. package/dist/processors/array.js.map +1 -0
  14. package/dist/processors/boolean.d.ts +4 -0
  15. package/dist/processors/boolean.d.ts.map +1 -0
  16. package/dist/processors/boolean.js +7 -0
  17. package/dist/processors/boolean.js.map +1 -0
  18. package/dist/processors/date.d.ts +4 -0
  19. package/dist/processors/date.d.ts.map +1 -0
  20. package/dist/processors/date.js +4 -0
  21. package/dist/processors/date.js.map +1 -0
  22. package/dist/processors/enum.d.ts +5 -0
  23. package/dist/processors/enum.d.ts.map +1 -0
  24. package/dist/processors/enum.js +36 -0
  25. package/dist/processors/enum.js.map +1 -0
  26. package/dist/processors/fallback.d.ts +4 -0
  27. package/dist/processors/fallback.d.ts.map +1 -0
  28. package/dist/processors/fallback.js +23 -0
  29. package/dist/processors/fallback.js.map +1 -0
  30. package/dist/processors/file.d.ts +4 -0
  31. package/dist/processors/file.d.ts.map +1 -0
  32. package/dist/processors/file.js +4 -0
  33. package/dist/processors/file.js.map +1 -0
  34. package/dist/processors/number.d.ts +4 -0
  35. package/dist/processors/number.d.ts.map +1 -0
  36. package/dist/processors/number.js +40 -0
  37. package/dist/processors/number.js.map +1 -0
  38. package/dist/processors/object.d.ts +5 -0
  39. package/dist/processors/object.d.ts.map +1 -0
  40. package/dist/processors/object.js +46 -0
  41. package/dist/processors/object.js.map +1 -0
  42. package/dist/processors/string.d.ts +5 -0
  43. package/dist/processors/string.d.ts.map +1 -0
  44. package/dist/processors/string.js +45 -0
  45. package/dist/processors/string.js.map +1 -0
  46. package/dist/processors/union.d.ts +4 -0
  47. package/dist/processors/union.d.ts.map +1 -0
  48. package/dist/processors/union.js +94 -0
  49. package/dist/processors/union.js.map +1 -0
  50. package/dist/processors/wrappers.d.ts +9 -0
  51. package/dist/processors/wrappers.d.ts.map +1 -0
  52. package/dist/processors/wrappers.js +81 -0
  53. package/dist/processors/wrappers.js.map +1 -0
  54. package/dist/registry.d.ts +10 -0
  55. package/dist/registry.d.ts.map +1 -0
  56. package/dist/registry.js +49 -0
  57. package/dist/registry.js.map +1 -0
  58. package/dist/types.d.ts +114 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/utils.d.ts +21 -0
  63. package/dist/utils.d.ts.map +1 -0
  64. package/dist/utils.js +47 -0
  65. package/dist/utils.js.map +1 -0
  66. package/dist/walker.d.ts +11 -0
  67. package/dist/walker.d.ts.map +1 -0
  68. package/dist/walker.js +101 -0
  69. package/dist/walker.js.map +1 -0
  70. package/package.json +45 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-present Pradeep Mouli
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,5 @@
1
+ export type { FormField, FormFieldOption, FormFieldConstraints, FormProcessor, FormProcessorContext, FormMeta, ProcessParams, WalkOptions, ZodFormRegistry } from './types.js';
2
+ export { inferLabel, joinPath, createBaseField } from './utils.js';
3
+ export { walkSchema } from './walker.js';
4
+ export { builtinProcessors, createProcessors } from './registry.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,aAAa,EACb,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ // @zod-to-form/core — Public API
2
+ // All exports are named exports only (no default, no `export *`) for full tree-shakeability.
3
+ export { inferLabel, joinPath, createBaseField } from './utils.js';
4
+ export { walkSchema } from './walker.js';
5
+ export { builtinProcessors, createProcessors } from './registry.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,6FAA6F;AAc7F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { FormMeta, ZodFormRegistry } from './types.js';
2
+ export type ResolvedMetadata = FormMeta & {
3
+ title?: string;
4
+ description?: string;
5
+ examples?: unknown[];
6
+ deprecated?: boolean;
7
+ };
8
+ export declare function resolveMetadata(schema: unknown, formRegistry?: ZodFormRegistry): ResolvedMetadata;
9
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAkBjG"}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export function resolveMetadata(schema, formRegistry) {
3
+ const globalMeta = z.globalRegistry.get(schema);
4
+ const formMeta = formRegistry?.get(schema);
5
+ return {
6
+ title: globalMeta?.title,
7
+ description: globalMeta?.description,
8
+ examples: globalMeta?.examples,
9
+ deprecated: globalMeta?.deprecated,
10
+ ...formMeta
11
+ };
12
+ }
13
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,YAA8B,EAAoB;IACjG,MAAM,UAAU,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,MAAe,CAO1C,CAAC;IACd,MAAM,QAAQ,GAAG,YAAY,EAAE,GAAG,CAAC,MAAe,CAAyB,CAAC;IAE5E,OAAO;QACL,KAAK,EAAE,UAAU,EAAE,KAAK;QACxB,WAAW,EAAE,UAAU,EAAE,WAAW;QACpC,QAAQ,EAAE,UAAU,EAAE,QAAQ;QAC9B,UAAU,EAAE,UAAU,EAAE,UAAU;QAClC,GAAG,QAAQ;KACZ,CAAC;AAAA,CACH"}
@@ -0,0 +1,5 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processArray(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
4
+ export declare function processTuple(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
5
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/processors/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUlF,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAsBN;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAeN"}
@@ -0,0 +1,38 @@
1
+ function getDef(schema) {
2
+ return schema['_zod']?.['def'] ?? {};
3
+ }
4
+ function getBag(schema) {
5
+ return schema['_zod']?.['bag'] ?? {};
6
+ }
7
+ export function processArray(schema, ctx, field, params) {
8
+ field.component = 'ArrayField';
9
+ const def = getDef(schema);
10
+ const bag = getBag(schema);
11
+ const minimum = typeof bag['minimum'] === 'number' ? bag['minimum'] : undefined;
12
+ const maximum = typeof bag['maximum'] === 'number' ? bag['maximum'] : undefined;
13
+ if (minimum !== undefined) {
14
+ field.constraints.minLength = minimum;
15
+ }
16
+ if (maximum !== undefined) {
17
+ field.constraints.maxLength = maximum;
18
+ }
19
+ const elementSchema = def['element'];
20
+ if (elementSchema && ctx.processChild) {
21
+ const itemKey = params.parentKey ? `${params.parentKey}.0` : '0';
22
+ field.arrayItem = ctx.processChild(elementSchema, itemKey);
23
+ }
24
+ }
25
+ export function processTuple(schema, ctx, field, params) {
26
+ field.component = 'Fieldset';
27
+ const def = getDef(schema);
28
+ const items = def['items'];
29
+ if (!items || !ctx.processChild) {
30
+ field.children = [];
31
+ return;
32
+ }
33
+ field.children = items.map((itemSchema, index) => {
34
+ const itemKey = params.parentKey ? `${params.parentKey}.${index}` : `${index}`;
35
+ return ctx.processChild(itemSchema, itemKey);
36
+ });
37
+ }
38
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/processors/array.ts"],"names":[],"mappings":"AAGA,SAAS,MAAM,CAAC,MAAe,EAA2B;IACxD,OAAQ,MAAkE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,CACnG;AAED,SAAS,MAAM,CAAC,MAAe,EAA2B;IACxD,OAAQ,MAAkE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,CACnG;AAED,MAAM,UAAU,YAAY,CAC1B,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,MAAqB,EACf;IACN,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;IAE/B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC;IACxC,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAwB,CAAC;IAE5D,IAAI,aAAa,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;AAAA,CACF;AAED,MAAM,UAAU,YAAY,CAC1B,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,MAAqB,EACf;IACN,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;IAE7B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAA0B,CAAC;IAEpD,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAChC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;QAC/E,OAAO,GAAG,CAAC,YAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAAA,CAC/C,CAAC,CAAC;AAAA,CACJ"}
@@ -0,0 +1,4 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processBoolean(schema: ZodType, ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
4
+ //# sourceMappingURL=boolean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/processors/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAMN"}
@@ -0,0 +1,7 @@
1
+ export function processBoolean(schema, ctx, field, _params) {
2
+ const meta = ctx.formRegistry?.get(schema);
3
+ const fieldType = meta?.fieldType?.toLowerCase();
4
+ field.component = fieldType === 'switch' ? 'Switch' : 'Checkbox';
5
+ field.required = true;
6
+ }
7
+ //# sourceMappingURL=boolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/processors/boolean.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAC5B,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,OAAsB,EAChB;IACN,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IAEjD,KAAK,CAAC,SAAS,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IACjE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAAA,CACvB"}
@@ -0,0 +1,4 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processDate(_schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
4
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/processors/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElF,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAEN"}
@@ -0,0 +1,4 @@
1
+ export function processDate(_schema, _ctx, field, _params) {
2
+ field.component = 'DatePicker';
3
+ }
4
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/processors/date.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CACzB,OAAgB,EAChB,IAA0B,EAC1B,KAAgB,EAChB,OAAsB,EAChB;IACN,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;AAAA,CAChC"}
@@ -0,0 +1,5 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processEnum(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
4
+ export declare function processLiteral(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
5
+ //# sourceMappingURL=enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/processors/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAmB,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAyBnG,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CASN;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAQN"}
@@ -0,0 +1,36 @@
1
+ import { inferLabel } from '../utils.js';
2
+ function getDef(schema) {
3
+ return schema['_zod']?.['def'] ?? {};
4
+ }
5
+ function normalizeOptions(values) {
6
+ const options = [];
7
+ const seen = new Set();
8
+ for (const value of values) {
9
+ if (typeof value !== 'string' && typeof value !== 'number') {
10
+ continue;
11
+ }
12
+ const key = `${typeof value}:${String(value)}`;
13
+ if (seen.has(key)) {
14
+ continue;
15
+ }
16
+ seen.add(key);
17
+ options.push({ value, label: inferLabel(String(value)) });
18
+ }
19
+ return options;
20
+ }
21
+ export function processEnum(schema, _ctx, field, _params) {
22
+ const def = getDef(schema);
23
+ const entries = def['entries'];
24
+ const values = def['values'];
25
+ const enumValues = entries ? Object.values(entries) : (values ?? []);
26
+ field.component = 'Select';
27
+ field.options = normalizeOptions(enumValues);
28
+ }
29
+ export function processLiteral(schema, _ctx, field, _params) {
30
+ const def = getDef(schema);
31
+ const literalValuesRaw = def['values'] ?? (def['value'] !== undefined ? [def['value']] : []);
32
+ field.component = 'Select';
33
+ field.readOnly = true;
34
+ field.options = normalizeOptions(literalValuesRaw);
35
+ }
36
+ //# sourceMappingURL=enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/processors/enum.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,SAAS,MAAM,CAAC,MAAe,EAA2B;IACxD,OAAQ,MAAkE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,CACnG;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAqB;IAC9D,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,OAAO,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AAAA,CAChB;AAED,MAAM,UAAU,WAAW,CACzB,MAAe,EACf,IAA0B,EAC1B,KAAgB,EAChB,OAAsB,EAChB;IACN,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAwC,CAAC;IACtE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAA0B,CAAC;IAEtD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAErE,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC3B,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAAA,CAC9C;AAED,MAAM,UAAU,cAAc,CAC5B,MAAe,EACf,IAA0B,EAC1B,KAAgB,EAChB,OAAsB,EAChB;IACN,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,gBAAgB,GACnB,GAAG,CAAC,QAAQ,CAA2B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjG,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC3B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,OAAO,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAAA,CACpD"}
@@ -0,0 +1,4 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processFallback(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
4
+ //# sourceMappingURL=fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/processors/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAWlF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAgBN"}
@@ -0,0 +1,23 @@
1
+ import { createBaseField } from '../utils.js';
2
+ function getDef(schema) {
3
+ return schema['_zod']?.['def'] ?? {};
4
+ }
5
+ function processRecord(field) {
6
+ field.component = 'Input';
7
+ field.arrayItem = createBaseField(`${field.key}.$item`, 'record_entry');
8
+ }
9
+ export function processFallback(schema, _ctx, field, _params) {
10
+ const def = getDef(schema);
11
+ const zodType = typeof def['type'] === 'string' ? def['type'] : field.zodType;
12
+ field.zodType = zodType;
13
+ if (zodType === 'record') {
14
+ processRecord(field);
15
+ return;
16
+ }
17
+ field.component = 'Input';
18
+ field.props = {
19
+ ...field.props,
20
+ type: 'text'
21
+ };
22
+ }
23
+ //# sourceMappingURL=fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../../src/processors/fallback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,SAAS,MAAM,CAAC,MAAe,EAA2B;IACxD,OAAQ,MAAkE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,CACnG;AAED,SAAS,aAAa,CAAC,KAAgB,EAAQ;IAC7C,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,SAAS,GAAG,eAAe,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,EAAE,cAAc,CAAC,CAAC;AAAA,CACzE;AAED,MAAM,UAAU,eAAe,CAC7B,MAAe,EACf,IAA0B,EAC1B,KAAgB,EAChB,OAAsB,EAChB;IACN,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,MAAM,CAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAE1F,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAExB,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,KAAK,GAAG;QACZ,GAAG,KAAK,CAAC,KAAK;QACd,IAAI,EAAE,MAAM;KACb,CAAC;AAAA,CACH"}
@@ -0,0 +1,4 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processFile(_schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
4
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/processors/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElF,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAEN"}
@@ -0,0 +1,4 @@
1
+ export function processFile(_schema, _ctx, field, _params) {
2
+ field.component = 'FileInput';
3
+ }
4
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/processors/file.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CACzB,OAAgB,EAChB,IAA0B,EAC1B,KAAgB,EAChB,OAAsB,EAChB;IACN,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC;AAAA,CAC/B"}
@@ -0,0 +1,4 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processNumber(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
4
+ //# sourceMappingURL=number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/processors/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUlF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAqCN"}
@@ -0,0 +1,40 @@
1
+ function getDef(schema) {
2
+ return schema['_zod']?.['def'] ?? {};
3
+ }
4
+ function getBag(schema) {
5
+ return schema['_zod']?.['bag'] ?? {};
6
+ }
7
+ export function processNumber(schema, _ctx, field, _params) {
8
+ const def = getDef(schema);
9
+ const bag = getBag(schema);
10
+ const minimum = typeof bag['minimum'] === 'number' ? bag['minimum'] : undefined;
11
+ const maximum = typeof bag['maximum'] === 'number' ? bag['maximum'] : undefined;
12
+ const checks = Array.isArray(def['checks']) ? def['checks'] : [];
13
+ const hasIntegerConstraint = checks.some((check) => {
14
+ const value = check;
15
+ const nested = value['_zod']?.['def'] ?? {};
16
+ return (value['kind'] === 'int' ||
17
+ value['check'] === 'int' ||
18
+ nested['check'] === 'number_format' ||
19
+ nested['format'] === 'int' ||
20
+ nested['format'] === 'safeint');
21
+ });
22
+ field.component = 'Input';
23
+ field.props = {
24
+ ...field.props,
25
+ type: 'number'
26
+ };
27
+ if (minimum !== undefined) {
28
+ field.constraints.min = minimum;
29
+ field.props['min'] = minimum;
30
+ }
31
+ if (maximum !== undefined) {
32
+ field.constraints.max = maximum;
33
+ field.props['max'] = maximum;
34
+ }
35
+ if (hasIntegerConstraint) {
36
+ field.constraints.step = 1;
37
+ field.props['step'] = 1;
38
+ }
39
+ }
40
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/processors/number.ts"],"names":[],"mappings":"AAGA,SAAS,MAAM,CAAC,MAAe,EAA2B;IACxD,OAAQ,MAAkE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,CACnG;AAED,SAAS,MAAM,CAAC,MAAe,EAA2B;IACxD,OAAQ,MAAkE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,CACnG;AAED,MAAM,UAAU,aAAa,CAC3B,MAAe,EACf,IAA0B,EAC1B,KAAgB,EAChB,OAAsB,EAChB;IACN,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,KAAgC,CAAC;QAC/C,MAAM,MAAM,GAAI,KAAK,CAAC,MAAM,CAAmD,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/F,OAAO,CACL,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK;YACvB,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK;YACxB,MAAM,CAAC,OAAO,CAAC,KAAK,eAAe;YACnC,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK;YAC1B,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,CAC/B,CAAC;IAAA,CACH,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC;IAC1B,KAAK,CAAC,KAAK,GAAG;QACZ,GAAG,KAAK,CAAC,KAAK;QACd,IAAI,EAAE,QAAQ;KACf,CAAC;IAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IAC/B,CAAC;IACD,IAAI,oBAAoB,EAAE,CAAC;QACzB,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AAAA,CACF"}
@@ -0,0 +1,5 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processObject(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
4
+ export declare function processIntersection(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
5
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/processors/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA8BlF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAsBN"}
@@ -0,0 +1,46 @@
1
+ import { inferLabel, joinPath } from '../utils.js';
2
+ function getDef(schema) {
3
+ return schema['_zod']?.['def'] ?? {};
4
+ }
5
+ function getShape(def) {
6
+ const rawShape = def['shape'];
7
+ if (typeof rawShape === 'function') {
8
+ return rawShape() ?? {};
9
+ }
10
+ return rawShape ?? {};
11
+ }
12
+ function processShapeEntries(shape, parentKey, ctx) {
13
+ if (!ctx.processChild) {
14
+ return [];
15
+ }
16
+ return Object.entries(shape).map(([key, childSchema]) => {
17
+ const fullKey = joinPath(parentKey, key);
18
+ return ctx.processChild(childSchema, fullKey);
19
+ });
20
+ }
21
+ export function processObject(schema, ctx, field, params) {
22
+ field.component = 'Fieldset';
23
+ field.label = field.label || inferLabel(params.parentKey ?? field.key);
24
+ const def = getDef(schema);
25
+ const shape = getShape(def);
26
+ field.children = processShapeEntries(shape, params.parentKey, ctx);
27
+ }
28
+ export function processIntersection(schema, ctx, field, params) {
29
+ field.component = 'Fieldset';
30
+ const def = getDef(schema);
31
+ const left = def['left'];
32
+ const right = def['right'];
33
+ const children = [];
34
+ if (left) {
35
+ const leftDef = getDef(left);
36
+ const leftShape = getShape(leftDef);
37
+ children.push(...processShapeEntries(leftShape, params.parentKey, ctx));
38
+ }
39
+ if (right) {
40
+ const rightDef = getDef(right);
41
+ const rightShape = getShape(rightDef);
42
+ children.push(...processShapeEntries(rightShape, params.parentKey, ctx));
43
+ }
44
+ field.children = children;
45
+ }
46
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/processors/object.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEnD,SAAS,MAAM,CAAC,MAAe,EAA2B;IACxD,OAAQ,MAAkE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,CACnG;AAED,SAAS,QAAQ,CAAC,GAA4B,EAA2B;IACvE,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,OAAS,QAA0B,EAA8B,IAAI,EAAE,CAAC;IAC1E,CAAC;IACD,OAAQ,QAAoC,IAAI,EAAE,CAAC;AAAA,CACpD;AAED,SAAS,mBAAmB,CAC1B,KAA8B,EAC9B,SAA6B,EAC7B,GAAyB,EACZ;IACb,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,YAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAAA,CAChD,CAAC,CAAC;AAAA,CACJ;AAED,MAAM,UAAU,aAAa,CAC3B,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,MAAqB,EACf;IACN,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;IAC7B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAEvE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5B,KAAK,CAAC,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAAA,CACpE;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,MAAqB,EACf;IACN,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;IAE7B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAwB,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAwB,CAAC;IAElD,MAAM,QAAQ,GAAgB,EAAE,CAAC;IAEjC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAAA,CAC3B"}
@@ -0,0 +1,5 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processString(schema: ZodType, ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
4
+ export declare function processTemplateLiteral(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
5
+ //# sourceMappingURL=string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/processors/string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUlF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CA8BN;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAQN"}
@@ -0,0 +1,45 @@
1
+ function getDef(schema) {
2
+ return schema['_zod']?.['def'] ?? {};
3
+ }
4
+ function getBag(schema) {
5
+ return schema['_zod']?.['bag'] ?? {};
6
+ }
7
+ export function processString(schema, ctx, field, _params) {
8
+ const bag = getBag(schema);
9
+ const meta = ctx.formRegistry?.get(schema);
10
+ const fieldType = meta?.fieldType?.toLowerCase();
11
+ const format = typeof bag['format'] === 'string' ? bag['format'] : undefined;
12
+ const minimum = typeof bag['minimum'] === 'number' ? bag['minimum'] : undefined;
13
+ const maximum = typeof bag['maximum'] === 'number' ? bag['maximum'] : undefined;
14
+ const pattern = typeof bag['pattern'] === 'string' ? bag['pattern'] : undefined;
15
+ field.component = fieldType === 'textarea' ? 'Textarea' : 'Input';
16
+ field.props = {
17
+ ...field.props,
18
+ type: format === 'email' || format === 'url' ? format : 'text'
19
+ };
20
+ if (format) {
21
+ field.constraints.format = format;
22
+ }
23
+ if (minimum !== undefined) {
24
+ field.constraints.minLength = minimum;
25
+ field.props['minLength'] = minimum;
26
+ }
27
+ if (maximum !== undefined) {
28
+ field.constraints.maxLength = maximum;
29
+ field.props['maxLength'] = maximum;
30
+ }
31
+ if (pattern) {
32
+ field.constraints.pattern = pattern;
33
+ field.props['pattern'] = pattern;
34
+ }
35
+ }
36
+ export function processTemplateLiteral(schema, _ctx, field, _params) {
37
+ const def = getDef(schema);
38
+ field.component = 'Input';
39
+ field.props = {
40
+ ...field.props,
41
+ type: 'text'
42
+ };
43
+ field.zodType = typeof def['type'] === 'string' ? def['type'] : 'template_literal';
44
+ }
45
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/processors/string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processUnion(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
4
+ //# sourceMappingURL=union.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../src/processors/union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAmB,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAuCnG,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CA2BN"}
@@ -0,0 +1,94 @@
1
+ import { inferLabel } from '../utils.js';
2
+ function getDef(schema) {
3
+ return schema['_zod']?.['def'] ?? {};
4
+ }
5
+ function getShape(def) {
6
+ const rawShape = def['shape'];
7
+ if (typeof rawShape === 'function') {
8
+ return rawShape() ?? {};
9
+ }
10
+ return rawShape ?? {};
11
+ }
12
+ function getLiteralValues(schema) {
13
+ const def = getDef(schema);
14
+ if (def['type'] === 'literal') {
15
+ const values = def['values'];
16
+ return values ?? [];
17
+ }
18
+ return [];
19
+ }
20
+ function buildOptionFromLiteral(schema) {
21
+ const values = getLiteralValues(schema);
22
+ if (values.length === 0)
23
+ return null;
24
+ const value = values[0];
25
+ const strValue = String(value);
26
+ return { value: strValue, label: inferLabel(strValue) };
27
+ }
28
+ function isAllLiterals(options) {
29
+ return options.every((opt) => {
30
+ const def = getDef(opt);
31
+ return def['type'] === 'literal';
32
+ });
33
+ }
34
+ export function processUnion(schema, ctx, field, params) {
35
+ const def = getDef(schema);
36
+ const options = def['options'];
37
+ const discriminator = def['discriminator'];
38
+ if (!options || options.length === 0) {
39
+ field.component = 'Input';
40
+ return;
41
+ }
42
+ // Discriminated union
43
+ if (discriminator) {
44
+ processDiscriminatedUnion(field, options, discriminator, params, ctx);
45
+ return;
46
+ }
47
+ // Regular union: only render as Select if all options are literals
48
+ if (isAllLiterals(options)) {
49
+ field.component = 'Select';
50
+ field.options = options
51
+ .map(buildOptionFromLiteral)
52
+ .filter((opt) => opt !== null);
53
+ return;
54
+ }
55
+ // Fallback for mixed unions
56
+ field.component = 'Input';
57
+ }
58
+ function processDiscriminatedUnion(field, options, discriminator, params, ctx) {
59
+ field.component = 'Select';
60
+ field.props['_discriminator'] = discriminator;
61
+ const selectOptions = [];
62
+ const variants = {};
63
+ for (const variantSchema of options) {
64
+ const variantDef = getDef(variantSchema);
65
+ const shape = getShape(variantDef);
66
+ // Find the discriminator literal value
67
+ const discSchema = shape[discriminator];
68
+ if (!discSchema)
69
+ continue;
70
+ const discDef = getDef(discSchema);
71
+ const discValues = discDef['values'];
72
+ const discValue = discValues?.[0];
73
+ if (discValue === undefined)
74
+ continue;
75
+ const strValue = String(discValue);
76
+ selectOptions.push({ value: strValue, label: inferLabel(strValue) });
77
+ // Build children for this variant (excluding the discriminator field itself)
78
+ if (ctx.processChild) {
79
+ const variantChildren = Object.entries(shape)
80
+ .filter(([key]) => key !== discriminator)
81
+ .map(([key, childSchema]) => {
82
+ const fullKey = params.parentKey ? `${params.parentKey}.${key}` : key;
83
+ return ctx.processChild(childSchema, fullKey);
84
+ });
85
+ variants[strValue] = variantChildren;
86
+ }
87
+ else {
88
+ variants[strValue] = [];
89
+ }
90
+ }
91
+ field.options = selectOptions;
92
+ field.props['_variants'] = variants;
93
+ }
94
+ //# sourceMappingURL=union.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union.js","sourceRoot":"","sources":["../../src/processors/union.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
3
+ export declare function processOptional(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
4
+ export declare function processNullable(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
5
+ export declare function processDefault(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
6
+ export declare function processReadonly(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
7
+ export declare function processPipe(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
8
+ export declare function processLazy(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
9
+ //# sourceMappingURL=wrappers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../src/processors/wrappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAwBlF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAQN;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAQN;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAcN;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAQN;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAON;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAyBN"}
@@ -0,0 +1,81 @@
1
+ import { processFallback } from './fallback.js';
2
+ function getDef(schema) {
3
+ return schema['_zod']?.['def'] ?? {};
4
+ }
5
+ function runInner(innerSchema, ctx, field, params) {
6
+ const innerDef = getDef(innerSchema);
7
+ const innerType = typeof innerDef['type'] === 'string' ? innerDef['type'] : 'unknown';
8
+ const processor = ctx.processors[innerType];
9
+ if (processor) {
10
+ processor(innerSchema, ctx, field, params);
11
+ return;
12
+ }
13
+ processFallback(innerSchema, ctx, field, params);
14
+ }
15
+ export function processOptional(schema, ctx, field, params) {
16
+ const def = getDef(schema);
17
+ const innerType = def['innerType'];
18
+ field.required = false;
19
+ if (innerType) {
20
+ runInner(innerType, ctx, field, params);
21
+ }
22
+ }
23
+ export function processNullable(schema, ctx, field, params) {
24
+ const def = getDef(schema);
25
+ const innerType = def['innerType'];
26
+ field.required = false;
27
+ if (innerType) {
28
+ runInner(innerType, ctx, field, params);
29
+ }
30
+ }
31
+ export function processDefault(schema, ctx, field, params) {
32
+ const def = getDef(schema);
33
+ const innerType = def['innerType'];
34
+ const defaultValue = def['defaultValue'];
35
+ if (typeof defaultValue === 'function') {
36
+ field.defaultValue = defaultValue();
37
+ }
38
+ else {
39
+ field.defaultValue = defaultValue;
40
+ }
41
+ if (innerType) {
42
+ runInner(innerType, ctx, field, params);
43
+ }
44
+ }
45
+ export function processReadonly(schema, ctx, field, params) {
46
+ const def = getDef(schema);
47
+ const innerType = def['innerType'];
48
+ field.readOnly = true;
49
+ if (innerType) {
50
+ runInner(innerType, ctx, field, params);
51
+ }
52
+ }
53
+ export function processPipe(schema, ctx, field, params) {
54
+ const def = getDef(schema);
55
+ const inputType = def['in'];
56
+ if (inputType) {
57
+ runInner(inputType, ctx, field, params);
58
+ }
59
+ }
60
+ export function processLazy(schema, ctx, field, params) {
61
+ if (ctx.currentDepth >= ctx.maxDepth) {
62
+ field.component = 'Input';
63
+ field.props['type'] = 'text';
64
+ return;
65
+ }
66
+ const def = getDef(schema);
67
+ const getter = def['getter'];
68
+ if (!getter) {
69
+ field.component = 'Input';
70
+ field.props['type'] = 'text';
71
+ return;
72
+ }
73
+ const innerSchema = getter();
74
+ if (ctx.seen.has(innerSchema)) {
75
+ field.component = 'Input';
76
+ field.props['type'] = 'text';
77
+ return;
78
+ }
79
+ runInner(innerSchema, { ...ctx, currentDepth: ctx.currentDepth + 1 }, field, params);
80
+ }
81
+ //# sourceMappingURL=wrappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.js","sourceRoot":"","sources":["../../src/processors/wrappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { FormProcessor } from './types.js';
2
+ export declare const builtinProcessors: Record<string, FormProcessor>;
3
+ /**
4
+ * Create a custom processor registry by merging with built-in processors.
5
+ *
6
+ * @param custom - Custom processors to add or override
7
+ * @returns Merged processor registry
8
+ */
9
+ export declare function createProcessors(custom: Record<string, FormProcessor>): Record<string, FormProcessor>;
10
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoBhD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CA2B3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACpC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAE/B"}
@@ -0,0 +1,49 @@
1
+ import { processArray, processTuple } from './processors/array.js';
2
+ import { processBoolean } from './processors/boolean.js';
3
+ import { processDate } from './processors/date.js';
4
+ import { processEnum, processLiteral } from './processors/enum.js';
5
+ import { processFallback } from './processors/fallback.js';
6
+ import { processFile } from './processors/file.js';
7
+ import { processNumber } from './processors/number.js';
8
+ import { processObject, processIntersection } from './processors/object.js';
9
+ import { processString, processTemplateLiteral } from './processors/string.js';
10
+ import { processUnion } from './processors/union.js';
11
+ import { processDefault, processLazy, processNullable, processOptional, processPipe, processReadonly } from './processors/wrappers.js';
12
+ export const builtinProcessors = {
13
+ string: processString,
14
+ template_literal: processTemplateLiteral,
15
+ number: processNumber,
16
+ bigint: processNumber,
17
+ boolean: processBoolean,
18
+ date: processDate,
19
+ enum: processEnum,
20
+ nativeEnum: processEnum,
21
+ literal: processLiteral,
22
+ file: processFile,
23
+ object: processObject,
24
+ array: processArray,
25
+ tuple: processTuple,
26
+ union: processUnion,
27
+ intersection: processIntersection,
28
+ lazy: processLazy,
29
+ optional: processOptional,
30
+ nullable: processNullable,
31
+ default: processDefault,
32
+ readonly: processReadonly,
33
+ pipe: processPipe,
34
+ transform: processFallback,
35
+ custom: processFallback,
36
+ any: processFallback,
37
+ unknown: processFallback,
38
+ record: processFallback
39
+ };
40
+ /**
41
+ * Create a custom processor registry by merging with built-in processors.
42
+ *
43
+ * @param custom - Custom processors to add or override
44
+ * @returns Merged processor registry
45
+ */
46
+ export function createProcessors(custom) {
47
+ return { ...builtinProcessors, ...custom };
48
+ }
49
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAkC;IAC9D,MAAM,EAAE,aAAa;IACrB,gBAAgB,EAAE,sBAAsB;IACxC,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,WAAW;IACvB,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,YAAY,EAAE,mBAAmB;IACjC,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,eAAe;IACzB,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,eAAe;IACzB,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,eAAe;IACvB,GAAG,EAAE,eAAe;IACpB,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,eAAe;CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAqC,EACN;IAC/B,OAAO,EAAE,GAAG,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAAC;AAAA,CAC5C"}
@@ -0,0 +1,114 @@
1
+ import type { ZodType } from 'zod';
2
+ export interface FormFieldOption {
3
+ value: string | number;
4
+ label: string;
5
+ disabled?: boolean;
6
+ }
7
+ export interface FormFieldConstraints {
8
+ min?: number;
9
+ max?: number;
10
+ minLength?: number;
11
+ maxLength?: number;
12
+ pattern?: string;
13
+ format?: string;
14
+ step?: number;
15
+ }
16
+ export interface FormField {
17
+ /** Field path, e.g. "name", "address.street", "items.0.name" */
18
+ key: string;
19
+ /** Component name from ComponentMap, e.g. "Input", "Select", "Textarea" */
20
+ component: string;
21
+ /** Pass-through props for the component */
22
+ props: Record<string, unknown>;
23
+ /** Display label */
24
+ label: string;
25
+ /** Help text from .describe() or .meta() */
26
+ description?: string;
27
+ /** Placeholder from examples[0] or metadata */
28
+ placeholder?: string;
29
+ /** Whether the field is required */
30
+ required: boolean;
31
+ /** Default value from z.default() or metadata */
32
+ defaultValue?: unknown;
33
+ /** Read-only from z.readonly() or metadata */
34
+ readOnly: boolean;
35
+ /** Hidden but present in form state */
36
+ hidden: boolean;
37
+ /** Display order override from form registry */
38
+ order?: number;
39
+ /** CSS grid-column hint from form registry */
40
+ gridColumn?: string;
41
+ /** Options for enum/union select fields */
42
+ options?: FormFieldOption[];
43
+ /** Children for nested objects */
44
+ children?: FormField[];
45
+ /** Template for array items */
46
+ arrayItem?: FormField;
47
+ /** Validation constraints extracted from _zod.bag */
48
+ constraints: FormFieldConstraints;
49
+ /** Original Zod def.type for reference */
50
+ zodType: string;
51
+ /** Whether a custom render function is registered for this field (runtime only) */
52
+ hasCustomRender?: boolean;
53
+ /** Custom render function from FormMeta (runtime only, not serialisable) */
54
+ render?: (field: FormField, props: Record<string, unknown>) => unknown;
55
+ }
56
+ export interface FormMeta {
57
+ /** Override component, e.g. "textarea", "switch", "combobox" */
58
+ fieldType?: string;
59
+ /** Display order override */
60
+ order?: number;
61
+ /** Hide field from UI (remains in form state) */
62
+ hidden?: boolean;
63
+ /** CSS grid column hint */
64
+ gridColumn?: string;
65
+ /** Custom render function (runtime only, ignored in codegen) */
66
+ render?: (field: FormField, props: unknown) => unknown;
67
+ }
68
+ export interface ProcessParams {
69
+ /** Parent field path for nested fields */
70
+ parentKey?: string;
71
+ /** Whether this field is an array item template */
72
+ isArrayItem?: boolean;
73
+ /** Array item index for rendering */
74
+ index?: number;
75
+ }
76
+ export interface FormProcessorContext {
77
+ /** Registry mapping def.type → processor function */
78
+ processors: Record<string, FormProcessor>;
79
+ /** Form-specific metadata registry */
80
+ formRegistry?: ZodFormRegistry;
81
+ /** Current field path stack */
82
+ path: string[];
83
+ /** Cycle detection for recursive schemas */
84
+ seen: WeakSet<ZodType>;
85
+ /** Maximum recursion depth (default: 5) */
86
+ maxDepth: number;
87
+ /** Current recursion depth */
88
+ currentDepth: number;
89
+ /**
90
+ * Process a child schema into a FormField.
91
+ * Provided by the walker for use in nesting processors (object, array, union).
92
+ * Undefined only in unit-test contexts where nesting is not being tested.
93
+ */
94
+ processChild?: (schema: ZodType, key: string) => FormField;
95
+ }
96
+ export type FormProcessor = (schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams) => void;
97
+ /**
98
+ * Type alias for the form registry. Uses the Zod registry system
99
+ * with FormMeta as the metadata shape.
100
+ * Consumers create this via: `const formRegistry = z.registry<FormMeta>()`
101
+ */
102
+ export type ZodFormRegistry = {
103
+ get(schema: ZodType): FormMeta | undefined;
104
+ has(schema: ZodType): boolean;
105
+ };
106
+ export interface WalkOptions {
107
+ /** Custom form registry for metadata annotations */
108
+ formRegistry?: ZodFormRegistry;
109
+ /** Custom processors to add or override built-in ones */
110
+ processors?: Record<string, FormProcessor>;
111
+ /** Maximum recursion depth for lazy/recursive schemas (default: 5) */
112
+ maxDepth?: number;
113
+ }
114
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import type { FormField } from './types.js';
2
+ /**
3
+ * Convert a camelCase or snake_case key to a human-readable Title Case label.
4
+ *
5
+ * @example inferLabel('firstName') → 'First Name'
6
+ * @example inferLabel('email_address') → 'Email Address'
7
+ */
8
+ export declare function inferLabel(key: string): string;
9
+ /**
10
+ * Join a parent key path with a child key.
11
+ *
12
+ * @example joinPath(undefined, 'name') → 'name'
13
+ * @example joinPath('address', 'street') → 'address.street'
14
+ */
15
+ export declare function joinPath(parent: string | undefined, key: string): string;
16
+ /**
17
+ * Create a base FormField with sensible defaults.
18
+ * Processors fill in the specific component and props.
19
+ */
20
+ export declare function createBaseField(key: string, zodType: string): FormField;
21
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc9C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAYvE"}
package/dist/utils.js ADDED
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Convert a camelCase or snake_case key to a human-readable Title Case label.
3
+ *
4
+ * @example inferLabel('firstName') → 'First Name'
5
+ * @example inferLabel('email_address') → 'Email Address'
6
+ */
7
+ export function inferLabel(key) {
8
+ // Remove everything before the last dot (for nested paths like "address.street")
9
+ const base = key.includes('.') ? key.split('.').pop() : key;
10
+ return (base
11
+ // Insert space before uppercase letters (camelCase)
12
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
13
+ // Replace underscores and hyphens with spaces
14
+ .replace(/[_-]/g, ' ')
15
+ // Capitalize the first letter of each word
16
+ .replace(/\b\w/g, (c) => c.toUpperCase())
17
+ .trim());
18
+ }
19
+ /**
20
+ * Join a parent key path with a child key.
21
+ *
22
+ * @example joinPath(undefined, 'name') → 'name'
23
+ * @example joinPath('address', 'street') → 'address.street'
24
+ */
25
+ export function joinPath(parent, key) {
26
+ if (!parent)
27
+ return key;
28
+ return `${parent}.${key}`;
29
+ }
30
+ /**
31
+ * Create a base FormField with sensible defaults.
32
+ * Processors fill in the specific component and props.
33
+ */
34
+ export function createBaseField(key, zodType) {
35
+ return {
36
+ key,
37
+ component: 'Input',
38
+ props: {},
39
+ label: inferLabel(key),
40
+ required: true,
41
+ readOnly: false,
42
+ hidden: false,
43
+ constraints: {},
44
+ zodType
45
+ };
46
+ }
47
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW,EAAU;IAC9C,iFAAiF;IACjF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAE7D,OAAO,CACL,IAAI;QACF,oDAAoD;SACnD,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACpC,8CAA8C;SAC7C,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;QACtB,2CAA2C;SAC1C,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACxC,IAAI,EAAE,CACV,CAAC;AAAA,CACH;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,MAA0B,EAAE,GAAW,EAAU;IACxE,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;AAAA,CAC3B;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,OAAe,EAAa;IACvE,OAAO;QACL,GAAG;QACH,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC;QACtB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,EAAE;QACf,OAAO;KACR,CAAC;AAAA,CACH"}
@@ -0,0 +1,11 @@
1
+ import type { ZodType } from 'zod';
2
+ import type { FormField, WalkOptions } from './types.js';
3
+ /**
4
+ * Walk a Zod schema and produce a FormField[] tree.
5
+ *
6
+ * @param schema - A Zod object schema (top-level must be z.object())
7
+ * @param options - Optional configuration for the walk
8
+ * @returns FormField[] - Ordered array of field descriptors
9
+ */
10
+ export declare function walkSchema(schema: ZodType, options?: WalkOptions): FormField[];
11
+ //# sourceMappingURL=walker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAKnC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuFzD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,CA6B9E"}
package/dist/walker.js ADDED
@@ -0,0 +1,101 @@
1
+ import { resolveMetadata } from './metadata.js';
2
+ import { processFallback } from './processors/fallback.js';
3
+ import { createProcessors } from './registry.js';
4
+ import { createBaseField } from './utils.js';
5
+ function getDef(schema) {
6
+ return schema['_zod']?.['def'] ?? {};
7
+ }
8
+ function getShape(def) {
9
+ const rawShape = def['shape'];
10
+ if (typeof rawShape === 'function') {
11
+ const computed = rawShape;
12
+ return computed() ?? {};
13
+ }
14
+ return rawShape ?? {};
15
+ }
16
+ function processField(schema, key, options, processors, seen, maxDepth, currentDepth) {
17
+ const def = getDef(schema);
18
+ const zodType = typeof def['type'] === 'string' ? def['type'] : 'unknown';
19
+ const field = createBaseField(key, zodType);
20
+ if (seen.has(schema) || currentDepth > maxDepth) {
21
+ field.component = 'Input';
22
+ field.props['type'] = 'text';
23
+ return field;
24
+ }
25
+ seen.add(schema);
26
+ const ctx = {
27
+ processors,
28
+ formRegistry: options?.formRegistry,
29
+ path: key.split('.'),
30
+ seen,
31
+ maxDepth,
32
+ currentDepth,
33
+ processChild: (childSchema, childKey) => processField(childSchema, childKey, options, processors, seen, maxDepth, currentDepth + 1)
34
+ };
35
+ const processor = processors[zodType];
36
+ if (processor) {
37
+ processor(schema, ctx, field, { parentKey: key });
38
+ }
39
+ else {
40
+ processFallback(schema, ctx, field, { parentKey: key });
41
+ }
42
+ const metadata = resolveMetadata(schema, options?.formRegistry);
43
+ if (metadata.title) {
44
+ field.label = metadata.title;
45
+ }
46
+ if (metadata.description) {
47
+ field.description = metadata.description;
48
+ }
49
+ if (metadata.examples?.[0] && typeof metadata.examples[0] === 'string') {
50
+ field.placeholder = metadata.examples[0];
51
+ if (field.component === 'Input' || field.component === 'Textarea') {
52
+ field.props['placeholder'] = metadata.examples[0];
53
+ }
54
+ }
55
+ if (metadata.hidden !== undefined) {
56
+ field.hidden = metadata.hidden;
57
+ }
58
+ if (metadata.order !== undefined) {
59
+ field.order = metadata.order;
60
+ }
61
+ if (metadata.gridColumn !== undefined) {
62
+ field.gridColumn = metadata.gridColumn;
63
+ }
64
+ if (typeof metadata.render === 'function') {
65
+ field.render = metadata.render;
66
+ field.hasCustomRender = true;
67
+ }
68
+ return field;
69
+ }
70
+ /**
71
+ * Walk a Zod schema and produce a FormField[] tree.
72
+ *
73
+ * @param schema - A Zod object schema (top-level must be z.object())
74
+ * @param options - Optional configuration for the walk
75
+ * @returns FormField[] - Ordered array of field descriptors
76
+ */
77
+ export function walkSchema(schema, options) {
78
+ const def = getDef(schema);
79
+ const topLevelType = def['type'];
80
+ if (topLevelType !== 'object') {
81
+ throw new Error('walkSchema expects a top-level z.object() schema.');
82
+ }
83
+ const maxDepth = options?.maxDepth ?? 5;
84
+ const processors = createProcessors(options?.processors ?? {});
85
+ const seen = new WeakSet();
86
+ const shape = getShape(def);
87
+ const fields = Object.entries(shape).map(([key, childSchema]) => processField(childSchema, key, options, processors, seen, maxDepth, 0));
88
+ return fields.sort((left, right) => {
89
+ if (left.order === undefined && right.order === undefined) {
90
+ return 0;
91
+ }
92
+ if (left.order === undefined) {
93
+ return 1;
94
+ }
95
+ if (right.order === undefined) {
96
+ return -1;
97
+ }
98
+ return left.order - right.order;
99
+ });
100
+ }
101
+ //# sourceMappingURL=walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@zod-to-form/core",
3
+ "version": "0.2.0",
4
+ "description": "Schema walker and processor registry for Zod v4 form generation",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/pradeepmouli/zodforms#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/pradeepmouli/zodforms.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "keywords": [
13
+ "zod",
14
+ "forms",
15
+ "form-generation",
16
+ "schema",
17
+ "typescript"
18
+ ],
19
+ "type": "module",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ }
25
+ },
26
+ "main": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "peerDependencies": {
32
+ "zod": "^4.0.0"
33
+ },
34
+ "devDependencies": {
35
+ "zod": "^4.3.6"
36
+ },
37
+ "scripts": {
38
+ "build": "tsgo -p tsconfig.build.json",
39
+ "clean": "rm -rf dist",
40
+ "dev": "tsgo -p tsconfig.build.json --watch",
41
+ "test": "vitest run",
42
+ "test:coverage": "vitest run --coverage",
43
+ "type-check": "tsgo --noEmit"
44
+ }
45
+ }