@zod-to-form/cli 0.2.2 → 0.2.4

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/README.md ADDED
@@ -0,0 +1,150 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/pradeepmouli/zod-to-form/master/attached_assets/banner.svg" alt="zod-to-form banner" />
3
+ </p>
4
+
5
+ # @zod-to-form/cli
6
+
7
+ Build-time code generator for Zod v4 form components.
8
+
9
+ `@zod-to-form/cli` loads a Zod schema module, walks it via `@zod-to-form/core`, and generates a TSX form component. It can also watch files and generate a paired Next.js server action.
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ pnpm add -D @zod-to-form/cli zod
15
+ ```
16
+
17
+ ## Requirements
18
+
19
+ - Node.js >= 20
20
+ - Zod v4
21
+
22
+ ## CLI Usage
23
+
24
+ ```bash
25
+ zodform generate --schema ./src/schema.ts --export userSchema
26
+ ```
27
+
28
+ ### Command
29
+
30
+ `zodform generate`
31
+
32
+ Required options:
33
+
34
+ - `--schema <path>`: path to schema module
35
+ - `--export <name>`: named export containing the schema
36
+
37
+ Optional options:
38
+
39
+ - `--mode <mode>`: `submit | auto-save` (default `submit`)
40
+ - `--component-config <path>`: path to component config (`.json` or `.ts`)
41
+ - `--out <path>`: output directory or `.tsx` file path
42
+ - `--name <componentName>`: generated component name override
43
+ - `--ui <preset>`: `shadcn | unstyled` (default `shadcn`)
44
+ - `--force`: overwrite existing output file
45
+ - `--dry-run`: print generated code to stdout without writing files
46
+ - `--server-action`: generate Next.js server action next to form output
47
+ - `--watch`: watch schema file and regenerate on changes
48
+
49
+ ## Examples
50
+
51
+ Generate to default output (`<DerivedName>Form.tsx`):
52
+
53
+ ```bash
54
+ zodform generate --schema ./src/user.schema.ts --export userSchema
55
+ ```
56
+
57
+ Generate to specific directory with custom component name:
58
+
59
+ ```bash
60
+ zodform generate \
61
+ --schema ./src/user.schema.ts \
62
+ --export userSchema \
63
+ --out ./src/forms \
64
+ --name UserProfile
65
+ ```
66
+
67
+ Generate in auto-save mode with server action:
68
+
69
+ ```bash
70
+ zodform generate \
71
+ --schema ./src/user.schema.ts \
72
+ --export userSchema \
73
+ --mode auto-save \
74
+ --server-action
75
+ ```
76
+
77
+ Dry run to inspect generated output:
78
+
79
+ ```bash
80
+ zodform generate --schema ./src/user.schema.ts --export userSchema --dry-run
81
+ ```
82
+
83
+ ## Type-Safe Component Config
84
+
85
+ The package exports helpers to define and validate component config.
86
+
87
+ ### `defineComponentConfig(...)`
88
+
89
+ `defineComponentConfig` gives type-safe field path support (including array path normalization).
90
+
91
+ ```ts
92
+ import { defineComponentConfig } from '@zod-to-form/cli';
93
+
94
+ type Values = {
95
+ profile: { bio: string };
96
+ tags: Array<{ label: string }>;
97
+ };
98
+
99
+ type Components = {
100
+ TextInput: unknown;
101
+ TextareaInput: unknown;
102
+ };
103
+
104
+ export default defineComponentConfig<Components, Values>({
105
+ components: '@/components/form-components',
106
+ fieldTypes: {
107
+ Input: { component: 'TextInput' },
108
+ textarea: { component: 'TextareaInput' }
109
+ },
110
+ fields: {
111
+ 'profile.bio': { fieldType: 'textarea', props: { rows: 5 } },
112
+ 'tags[].label': { fieldType: 'Input' }
113
+ }
114
+ });
115
+ ```
116
+
117
+ ### `validateComponentConfig(...)`
118
+
119
+ Use at runtime when loading external config objects.
120
+
121
+ ```ts
122
+ import { validateComponentConfig } from '@zod-to-form/cli';
123
+
124
+ const parsed = validateComponentConfig(configObject, 'component-config');
125
+ ```
126
+
127
+ ## Programmatic API
128
+
129
+ ### `runGenerate(options)`
130
+
131
+ Runs generation and returns:
132
+
133
+ - `outputPath`
134
+ - `code`
135
+ - `wroteFile`
136
+ - `actionPath` and `actionCode` (when `serverAction` enabled)
137
+
138
+ ### `createProgram()`
139
+
140
+ Returns Commander program instance for embedding or custom CLIs.
141
+
142
+ ## Development
143
+
144
+ From repository root:
145
+
146
+ ```bash
147
+ pnpm --filter @zod-to-form/cli run build
148
+ pnpm --filter @zod-to-form/cli run test
149
+ pnpm --filter @zod-to-form/cli run type-check
150
+ ```
package/dist/codegen.d.ts CHANGED
@@ -1,11 +1,19 @@
1
1
  import type { FormField } from '@zod-to-form/core';
2
+ import type { ComponentEntry, FieldOverride, ZodToFormComponentConfig } from './index.js';
2
3
  export type CodegenConfig = {
3
4
  schemaPath: string;
4
5
  exportName: string;
5
6
  outputPath: string;
6
7
  componentName: string;
8
+ mode: 'submit' | 'auto-save';
9
+ componentConfig?: ZodToFormComponentConfig<Record<string, unknown>>;
7
10
  ui: 'shadcn' | 'unstyled';
8
11
  serverAction: boolean;
9
12
  };
13
+ export declare function resolveFieldMapping<TComponents extends Record<string, unknown>>(fieldKey: string, fieldType: string | undefined, componentConfig: ZodToFormComponentConfig<TComponents> | undefined): {
14
+ entry?: ComponentEntry<TComponents>;
15
+ override?: FieldOverride;
16
+ source: 'fields' | 'fieldTypes' | 'none';
17
+ };
10
18
  export declare function generateFormComponent(fields: FormField[], config: CodegenConfig): Promise<string>;
11
19
  //# sourceMappingURL=codegen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAuGF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CAuCjB"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG1F,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,eAAe,CAAC,EAAE,wBAAwB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,EAAE,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAqEF,wBAAgB,mBAAmB,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7E,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,eAAe,EAAE,wBAAwB,CAAC,WAAW,CAAC,GAAG,SAAS,GACjE;IACD,KAAK,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;CAC1C,CAsBA;AAoID,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CAwFjB"}
package/dist/codegen.js CHANGED
@@ -1,5 +1,71 @@
1
1
  import path from 'node:path';
2
2
  import { getFileHeader, renderField } from './templates.js';
3
+ function renderLiteralProp(value) {
4
+ if (typeof value === 'string') {
5
+ return `"${value.replace(/"/g, '\\"')}"`;
6
+ }
7
+ if (typeof value === 'number' || typeof value === 'boolean') {
8
+ return `{${String(value)}}`;
9
+ }
10
+ return undefined;
11
+ }
12
+ function renderOverrideProps(props) {
13
+ if (!props) {
14
+ return '';
15
+ }
16
+ const attrs = Object.entries(props)
17
+ .map(([key, value]) => {
18
+ const rendered = renderLiteralProp(value);
19
+ return rendered ? ` ${key}=${rendered}` : '';
20
+ })
21
+ .join('');
22
+ return attrs;
23
+ }
24
+ function getMappedFieldComponent(field, componentConfig) {
25
+ const mapping = resolveFieldMapping(field.key, field.component, componentConfig);
26
+ if (!mapping.entry) {
27
+ return {};
28
+ }
29
+ return {
30
+ componentName: mapping.entry.component,
31
+ override: mapping.override
32
+ };
33
+ }
34
+ function collectMappedComponentNames(fields, componentConfig, out = new Set()) {
35
+ for (const field of fields) {
36
+ const mapping = getMappedFieldComponent(field, componentConfig);
37
+ if (mapping.componentName) {
38
+ out.add(mapping.componentName);
39
+ }
40
+ if (field.children?.length) {
41
+ collectMappedComponentNames(field.children, componentConfig, out);
42
+ }
43
+ if (field.arrayItem) {
44
+ collectMappedComponentNames([field.arrayItem], componentConfig, out);
45
+ }
46
+ }
47
+ return out;
48
+ }
49
+ export function resolveFieldMapping(fieldKey, fieldType, componentConfig) {
50
+ if (!componentConfig) {
51
+ return { source: 'none' };
52
+ }
53
+ const override = componentConfig.fields?.[fieldKey];
54
+ if (override) {
55
+ return {
56
+ entry: componentConfig.fieldTypes[override.fieldType],
57
+ override,
58
+ source: 'fields'
59
+ };
60
+ }
61
+ if (fieldType && componentConfig.fieldTypes[fieldType]) {
62
+ return {
63
+ entry: componentConfig.fieldTypes[fieldType],
64
+ source: 'fieldTypes'
65
+ };
66
+ }
67
+ return { source: 'none' };
68
+ }
3
69
  function getSchemaImportPath(config) {
4
70
  const relative = path
5
71
  .relative(path.dirname(config.outputPath), config.schemaPath)
@@ -26,9 +92,9 @@ function collectArrayFields(fields) {
26
92
  }
27
93
  return result;
28
94
  }
29
- function renderNestedBlock(field, indent) {
95
+ function renderNestedBlock(field, componentConfig, indent) {
30
96
  const children = (field.children ?? [])
31
- .map((child) => renderFieldBlock(child, `${indent} `))
97
+ .map((child) => renderFieldBlockWithConfig(child, componentConfig, `${indent} `))
32
98
  .join('\n');
33
99
  return [
34
100
  `${indent}<div>`,
@@ -40,11 +106,14 @@ function renderNestedBlock(field, indent) {
40
106
  `${indent}</div>`
41
107
  ].join('\n');
42
108
  }
43
- function renderArrayBlock(field, indent) {
109
+ function renderArrayBlock(field, componentConfig, indent) {
44
110
  const varName = toVarName(field.key);
45
111
  const itemField = field.arrayItem;
112
+ const mappedItem = itemField ? getMappedFieldComponent(itemField, componentConfig) : {};
46
113
  const itemJsx = itemField
47
- ? renderField({ ...itemField, key: `\${${varName}Fields[index].id}` })
114
+ ? mappedItem.componentName
115
+ ? `<${mappedItem.componentName} {...register('${field.key}.0')}${renderOverrideProps(mappedItem.override?.props)} />`
116
+ : renderField({ ...itemField, key: `\${${varName}Fields[index].id}` })
48
117
  : `<input {...register(\`${field.key}.\${index}\`)} />`;
49
118
  return [
50
119
  `${indent}<div>`,
@@ -62,7 +131,8 @@ function renderArrayBlock(field, indent) {
62
131
  function capitalize(s) {
63
132
  return s.charAt(0).toUpperCase() + s.slice(1);
64
133
  }
65
- function renderFieldBlock(field, indent = ' ') {
134
+ function renderFieldBlockWithConfig(field, componentConfig, indent = ' ') {
135
+ const mapping = getMappedFieldComponent(field, componentConfig);
66
136
  if (field.hasCustomRender) {
67
137
  const styleAttr = field.gridColumn ? ` style={{ gridColumn: '${field.gridColumn}' }}` : '';
68
138
  return [
@@ -73,10 +143,20 @@ function renderFieldBlock(field, indent = ' ') {
73
143
  ].join('\n');
74
144
  }
75
145
  if (field.component === 'Fieldset') {
76
- return renderNestedBlock(field, indent);
146
+ return renderNestedBlock(field, componentConfig, indent);
77
147
  }
78
148
  if (field.component === 'ArrayField') {
79
- return renderArrayBlock(field, indent);
149
+ return renderArrayBlock(field, componentConfig, indent);
150
+ }
151
+ if (mapping.componentName) {
152
+ const styleAttr = field.gridColumn ? ` style={{ gridColumn: '${field.gridColumn}' }}` : '';
153
+ const overrideProps = renderOverrideProps(mapping.override?.props);
154
+ return [
155
+ `${indent}<div${styleAttr}>`,
156
+ `${indent} <label htmlFor="${field.key}">${field.label}</label>`,
157
+ `${indent} <${mapping.componentName} id="${field.key}" {...register('${field.key}')}${overrideProps} />`,
158
+ `${indent}</div>`
159
+ ].join('\n');
80
160
  }
81
161
  const styleAttr = field.gridColumn ? ` style={{ gridColumn: '${field.gridColumn}' }}` : '';
82
162
  return [
@@ -90,8 +170,14 @@ export async function generateFormComponent(fields, config) {
90
170
  const schemaImportPath = getSchemaImportPath(config);
91
171
  const arrayFields = collectArrayFields(fields);
92
172
  const hasArrays = arrayFields.length > 0;
93
- const header = getFileHeader(schemaImportPath, config.exportName, hasArrays);
94
- const body = fields.map((field) => renderFieldBlock(field)).join('\n');
173
+ const mappedComponents = collectMappedComponentNames(fields, config.componentConfig);
174
+ const componentImportLine = config.componentConfig && mappedComponents.size > 0
175
+ ? `import { ${Array.from(mappedComponents).sort().join(', ')} } from '${config.componentConfig.components}';`
176
+ : undefined;
177
+ const header = getFileHeader(schemaImportPath, config.exportName, hasArrays, config.mode, componentImportLine);
178
+ const body = fields
179
+ .map((field) => renderFieldBlockWithConfig(field, config.componentConfig, ' '))
180
+ .join('\n');
95
181
  // useFieldArray hook declarations
96
182
  const arrayHooks = arrayFields
97
183
  .map((f) => {
@@ -99,24 +185,49 @@ export async function generateFormComponent(fields, config) {
99
185
  return ` const { fields: ${varName}Fields, append: append${capitalize(varName)}, remove: remove${capitalize(varName)} } = useFieldArray({ control, name: '${f.key}' });`;
100
186
  })
101
187
  .join('\n');
102
- const useFormDestructure = hasArrays
103
- ? `{ register, handleSubmit, control }`
104
- : `{ register, handleSubmit }`;
188
+ const useFormDestructure = config.mode === 'auto-save'
189
+ ? hasArrays
190
+ ? `{ register, watch, control }`
191
+ : `{ register, watch }`
192
+ : hasArrays
193
+ ? `{ register, handleSubmit, control }`
194
+ : `{ register, handleSubmit }`;
195
+ const propsLines = config.mode === 'auto-save'
196
+ ? [` onValueChange?: (data: FormData) => void;`, ` onSubmit?: (data: FormData) => void;`]
197
+ : [` onSubmit: (data: FormData) => void;`];
198
+ const autoSaveEffect = config.mode === 'auto-save'
199
+ ? [
200
+ ` useEffect(() => {`,
201
+ ` const subscription = watch((values) => {`,
202
+ ` props.onValueChange?.(values as FormData);`,
203
+ ` });`,
204
+ ``,
205
+ ` return () => subscription.unsubscribe();`,
206
+ ` }, [watch, props.onValueChange]);`,
207
+ ``
208
+ ]
209
+ : [];
210
+ const formOpen = config.mode === 'auto-save'
211
+ ? ` <form>`
212
+ : ` <form onSubmit={handleSubmit(props.onSubmit)}>`;
213
+ const formTail = config.mode === 'auto-save' ? [] : [` <button type="submit">Submit</button>`];
105
214
  return [
106
215
  header,
107
216
  '',
108
217
  `export function ${config.componentName}(props: {`,
109
- ` onSubmit: (data: FormData) => void;`,
218
+ ...propsLines,
110
219
  `}) {`,
111
220
  ` const ${useFormDestructure} = useForm<FormData>({`,
112
- ` resolver: zodResolver(${config.exportName})`,
221
+ ` resolver: zodResolver(${config.exportName}),`,
222
+ ...(config.mode === 'auto-save' ? [` mode: 'onChange'`] : []),
113
223
  ` });`,
114
224
  ...(hasArrays ? [arrayHooks] : []),
225
+ ...autoSaveEffect,
115
226
  '',
116
227
  ` return (`,
117
- ` <form onSubmit={handleSubmit(props.onSubmit)}>`,
228
+ formOpen,
118
229
  body,
119
- ` <button type="submit">Submit</button>`,
230
+ ...formTail,
120
231
  ` </form>`,
121
232
  ` );`,
122
233
  `}`
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAa5D,SAAS,iBAAiB,CAAC,KAAc,EAAsB;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AAAA,CAClB;AAED,SAAS,mBAAmB,CAAC,KAA0C,EAAU;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAAA,CAC9C,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,KAAK,CAAC;AAAA,CACd;AAED,SAAS,uBAAuB,CAC9B,KAAgB,EAChB,eAA8E,EAI9E;IACA,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAEjF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AAAA,CACH;AAED,SAAS,2BAA2B,CAClC,MAAmB,EACnB,eAA8E,EAC9E,GAAG,GAAG,IAAI,GAAG,EAAU,EACV;IACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC3B,2BAA2B,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,2BAA2B,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AAAA,CACZ;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,SAA6B,EAC7B,eAAkE,EAKlE;IACA,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;YACrD,QAAQ;YACR,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,IAAI,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,OAAO;YACL,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;YAC5C,MAAM,EAAE,YAAY;SACrB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAAA,CAC3B;AAED,SAAS,mBAAmB,CAAC,MAAqB,EAAU;IAC1D,MAAM,QAAQ,GAAG,IAAI;SAClB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;SAC5D,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEvB,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,KAAK,QAAQ,EAAE,CAAC;AAAA,CACxB;AAED,wGAAwG;AACxG,SAAS,SAAS,CAAC,GAAW,EAAU;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAAA,CACtF;AAED,oEAAoE;AACpE,SAAS,kBAAkB,CAAC,MAAmB,EAAe;IAC5D,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAAA,CACf;AAED,SAAS,iBAAiB,CACxB,KAAgB,EAChB,eAA8E,EAC9E,MAAc,EACN;IACR,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;SACpC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;SACjF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,GAAG,MAAM,OAAO;QAChB,GAAG,MAAM,YAAY,KAAK,CAAC,KAAK,UAAU;QAC1C,GAAG,MAAM,cAAc;QACvB,GAAG,MAAM,eAAe,KAAK,CAAC,KAAK,WAAW;QAC9C,QAAQ;QACR,GAAG,MAAM,eAAe;QACxB,GAAG,MAAM,QAAQ;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACd;AAED,SAAS,gBAAgB,CACvB,KAAgB,EAChB,eAA8E,EAC9E,MAAc,EACN;IACR,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,OAAO,GAAG,SAAS;QACvB,CAAC,CAAC,UAAU,CAAC,aAAa;YACxB,CAAC,CAAC,IAAI,UAAU,CAAC,aAAa,kBAAkB,KAAK,CAAC,GAAG,QAAQ,mBAAmB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK;YACrH,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,mBAAmB,EAAE,CAAC;QACxE,CAAC,CAAC,yBAAyB,KAAK,CAAC,GAAG,mBAAmB,CAAC;IAE1D,OAAO;QACL,GAAG,MAAM,OAAO;QAChB,GAAG,MAAM,YAAY,KAAK,CAAC,KAAK,UAAU;QAC1C,GAAG,MAAM,MAAM,OAAO,+BAA+B;QACrD,GAAG,MAAM,yBAAyB;QAClC,GAAG,MAAM,SAAS,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,eAAe,KAAK,CAAC,GAAG,UAAU,CAAC,EAAE,cAAc,KAAK,CAAC,GAAG,eAAe,CAAC,EAAE;QAC3H,GAAG,MAAM,oDAAoD,UAAU,CAAC,OAAO,CAAC,0BAA0B;QAC1G,GAAG,MAAM,YAAY;QACrB,GAAG,MAAM,OAAO;QAChB,GAAG,MAAM,gDAAgD,UAAU,CAAC,OAAO,CAAC,oBAAoB;QAChG,GAAG,MAAM,QAAQ;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACd;AAED,SAAS,UAAU,CAAC,CAAS,EAAU;IACrC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAAA,CAC/C;AAED,SAAS,0BAA0B,CACjC,KAAgB,EAChB,eAA8E,EAC9E,MAAM,GAAG,QAAQ,EACT;IACR,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAEhE,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,OAAO;YACL,GAAG,MAAM,OAAO,SAAS,GAAG;YAC5B,GAAG,MAAM,qBAAqB,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,UAAU;YACjE,GAAG,MAAM,mCAAmC,KAAK,CAAC,GAAG,oCAAoC;YACzF,GAAG,MAAM,QAAQ;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;QACrC,OAAO,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEnE,OAAO;YACL,GAAG,MAAM,OAAO,SAAS,GAAG;YAC5B,GAAG,MAAM,qBAAqB,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,UAAU;YACjE,GAAG,MAAM,MAAM,OAAO,CAAC,aAAa,QAAQ,KAAK,CAAC,GAAG,mBAAmB,KAAK,CAAC,GAAG,MAAM,aAAa,KAAK;YACzG,GAAG,MAAM,QAAQ;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3F,OAAO;QACL,GAAG,MAAM,OAAO,SAAS,GAAG;QAC5B,GAAG,MAAM,qBAAqB,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,UAAU;QACjE,GAAG,MAAM,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE;QAClC,GAAG,MAAM,QAAQ;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACd;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAmB,EACnB,MAAqB,EACJ;IACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAErF,MAAM,mBAAmB,GACvB,MAAM,CAAC,eAAe,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC;QACjD,CAAC,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,eAAe,CAAC,UAAU,IAAI;QAC7G,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,MAAM,GAAG,aAAa,CAC1B,gBAAgB,EAChB,MAAM,CAAC,UAAU,EACjB,SAAS,EACT,MAAM,CAAC,IAAI,EACX,mBAAmB,CACpB,CAAC;IACF,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;SACnF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,kCAAkC;IAClC,MAAM,UAAU,GAAG,WAAW;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,qBAAqB,OAAO,yBAAyB,UAAU,CAAC,OAAO,CAAC,mBAAmB,UAAU,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,OAAO,CAAC;IAAA,CAC3K,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,kBAAkB,GACtB,MAAM,CAAC,IAAI,KAAK,WAAW;QACzB,CAAC,CAAC,SAAS;YACT,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,qBAAqB;QACzB,CAAC,CAAC,SAAS;YACT,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,4BAA4B,CAAC;IAErC,MAAM,UAAU,GACd,MAAM,CAAC,IAAI,KAAK,WAAW;QACzB,CAAC,CAAC,CAAC,6CAA6C,EAAE,wCAAwC,CAAC;QAC3F,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;IAEhD,MAAM,cAAc,GAClB,MAAM,CAAC,IAAI,KAAK,WAAW;QACzB,CAAC,CAAC;YACE,qBAAqB;YACrB,8CAA8C;YAC9C,kDAAkD;YAClD,SAAS;YACT,EAAE;YACF,8CAA8C;YAC9C,qCAAqC;YACrC,EAAE;SACH;QACH,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,KAAK,WAAW;QACzB,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,oDAAoD,CAAC;IAE3D,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC;IAErF,OAAO;QACL,MAAM;QACN,EAAE;QACF,mBAAmB,MAAM,CAAC,aAAa,WAAW;QAClD,GAAG,UAAU;QACb,MAAM;QACN,WAAW,kBAAkB,wBAAwB;QACrD,6BAA6B,MAAM,CAAC,UAAU,IAAI;QAClD,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO;QACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,GAAG,cAAc;QACjB,EAAE;QACF,YAAY;QACZ,QAAQ;QACR,IAAI;QACJ,GAAG,QAAQ;QACX,aAAa;QACb,MAAM;QACN,GAAG;KACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACd"}
package/dist/index.d.ts CHANGED
@@ -3,9 +3,29 @@
3
3
  * @zod-to-form/cli — Build-time code generator for Zod v4 forms
4
4
  */
5
5
  import { Command } from 'commander';
6
+ import type { Paths as TypeFestPaths } from 'type-fest';
7
+ export type ComponentEntry<T extends Record<string, unknown> = Record<string, unknown>> = {
8
+ component: keyof T & string;
9
+ render?: () => Promise<unknown>;
10
+ };
11
+ type NormalizeArrayPath<TPath extends string> = TPath extends `${infer Prefix}[${number}]${infer Suffix}` ? NormalizeArrayPath<`${Prefix}[]${Suffix}`> : TPath extends `${infer Prefix}.${number}.${infer Suffix}` ? NormalizeArrayPath<`${Prefix}[].${Suffix}`> : TPath extends `${infer Prefix}.${number}` ? NormalizeArrayPath<`${Prefix}[]`> : TPath;
12
+ export type FieldPath<TValues extends Record<string, unknown>> = TypeFestPaths<TValues> extends infer TPath ? TPath extends string ? TPath | NormalizeArrayPath<TPath> : never : never;
13
+ export type FieldOverride = {
14
+ fieldType: string;
15
+ props?: Record<string, unknown>;
16
+ };
17
+ export type ZodToFormComponentConfig<T extends Record<string, unknown> = Record<string, unknown>, TFieldPath extends string = string> = {
18
+ components: string;
19
+ fieldTypes: Record<string, ComponentEntry<T>>;
20
+ fields?: Partial<Record<TFieldPath, FieldOverride>>;
21
+ };
22
+ export declare function defineComponentConfig<TComponents extends Record<string, unknown>, TValues extends Record<string, unknown>>(config: ZodToFormComponentConfig<TComponents, FieldPath<TValues>>): ZodToFormComponentConfig<TComponents, FieldPath<TValues>>;
23
+ export declare function validateComponentConfig(value: unknown, source?: string): ZodToFormComponentConfig<Record<string, unknown>>;
6
24
  type GenerateOptions = {
7
25
  schema: string;
8
26
  export: string;
27
+ mode?: 'submit' | 'auto-save';
28
+ componentConfig?: string;
9
29
  out?: string;
10
30
  name?: string;
11
31
  ui?: 'shadcn' | 'unstyled';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAwCF,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CA8CD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAgCvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,9 +7,61 @@ import path from 'node:path';
7
7
  import { Command } from 'commander';
8
8
  import { walkSchema } from '@zod-to-form/core';
9
9
  import { generateFormComponent } from './codegen.js';
10
- import { loadSchema } from './loader.js';
10
+ import { loadComponentConfig, loadSchema } from './loader.js';
11
11
  import { generateServerAction } from './server-action.js';
12
12
  import { startWatch } from './watcher.js';
13
+ export function defineComponentConfig(config) {
14
+ return config;
15
+ }
16
+ function isObjectRecord(value) {
17
+ return !!value && typeof value === 'object' && !Array.isArray(value);
18
+ }
19
+ export function validateComponentConfig(value, source = 'component-config') {
20
+ if (!isObjectRecord(value)) {
21
+ throw new Error(`${source} must be an object.`);
22
+ }
23
+ const components = value['components'];
24
+ if (typeof components !== 'string' || components.trim().length === 0) {
25
+ throw new Error(`${source}.components must be a non-empty string.`);
26
+ }
27
+ const fieldTypes = value['fieldTypes'];
28
+ if (!isObjectRecord(fieldTypes)) {
29
+ throw new Error(`${source}.fieldTypes must be an object.`);
30
+ }
31
+ for (const [fieldType, entryValue] of Object.entries(fieldTypes)) {
32
+ if (!isObjectRecord(entryValue)) {
33
+ throw new Error(`${source}.fieldTypes.${fieldType} must be an object.`);
34
+ }
35
+ const component = entryValue['component'];
36
+ if (typeof component !== 'string' || component.trim().length === 0) {
37
+ throw new Error(`${source}.fieldTypes.${fieldType}.component must be a non-empty string.`);
38
+ }
39
+ const render = entryValue['render'];
40
+ if (render !== undefined && typeof render !== 'function') {
41
+ throw new Error(`${source}.fieldTypes.${fieldType}.render must be a function when provided.`);
42
+ }
43
+ }
44
+ const fields = value['fields'];
45
+ if (fields !== undefined) {
46
+ if (!isObjectRecord(fields)) {
47
+ throw new Error(`${source}.fields must be an object when provided.`);
48
+ }
49
+ for (const [fieldPath, overrideValue] of Object.entries(fields)) {
50
+ if (!isObjectRecord(overrideValue)) {
51
+ throw new Error(`${source}.fields.${fieldPath} must be an object.`);
52
+ }
53
+ const fieldType = overrideValue['fieldType'];
54
+ if (typeof fieldType !== 'string' || fieldType.trim().length === 0) {
55
+ throw new Error(`${source}.fields.${fieldPath}.fieldType must be a non-empty string.`);
56
+ }
57
+ const props = overrideValue['props'];
58
+ if (props !== undefined && !isObjectRecord(props)) {
59
+ throw new Error(`${source}.fields.${fieldPath}.props must be an object when provided.`);
60
+ }
61
+ }
62
+ }
63
+ return value;
64
+ }
13
65
  function toPascalCase(value) {
14
66
  return value
15
67
  .replace(/[^a-zA-Z0-9]+/g, ' ')
@@ -48,11 +100,16 @@ export async function runGenerate(options) {
48
100
  const outputPath = resolveOutputPath(cwd, options.out, componentName);
49
101
  const schema = await loadSchema(schemaPath, exportName);
50
102
  const fields = walkSchema(schema);
103
+ const componentConfig = options.componentConfig
104
+ ? await loadComponentConfig(path.resolve(cwd, options.componentConfig))
105
+ : undefined;
51
106
  const config = {
52
107
  schemaPath,
53
108
  exportName,
54
109
  outputPath,
55
110
  componentName,
111
+ mode: options.mode ?? 'submit',
112
+ componentConfig,
56
113
  ui: options.ui ?? 'shadcn',
57
114
  serverAction: options.serverAction ?? false
58
115
  };
@@ -91,6 +148,8 @@ export function createProgram() {
91
148
  .command('generate')
92
149
  .requiredOption('--schema <path>', 'Path to schema file')
93
150
  .requiredOption('--export <name>', 'Named export containing the schema')
151
+ .option('--mode <mode>', 'Generation mode (submit|auto-save)', 'submit')
152
+ .option('--component-config <path>', 'Path to component config (.json or .ts)')
94
153
  .option('--out <path>', 'Output directory or file path')
95
154
  .option('--name <componentName>', 'Generated component name')
96
155
  .option('--ui <preset>', 'UI preset (shadcn|unstyled)', 'shadcn')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/loader.d.ts CHANGED
@@ -1,2 +1,4 @@
1
+ import type { ZodToFormComponentConfig } from './index.js';
1
2
  export declare function loadSchema(schemaPath: string, exportName: string): Promise<unknown>;
3
+ export declare function loadComponentConfig(configPath: string): Promise<ZodToFormComponentConfig<Record<string, unknown>>>;
2
4
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAWA,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBzF"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAwF3D,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BzF;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAiB5D"}
package/dist/loader.js CHANGED
@@ -1,16 +1,80 @@
1
1
  import path from 'node:path';
2
+ import { createRequire } from 'node:module';
2
3
  import { createJiti } from 'jiti';
4
+ const requireFromHere = createRequire(import.meta.url);
5
+ function resolveZodModulePath() {
6
+ return requireFromHere.resolve('zod');
7
+ }
3
8
  function isZodSchema(value) {
4
9
  if (!value || typeof value !== 'object') {
5
10
  return false;
6
11
  }
7
12
  return '_zod' in value;
8
13
  }
14
+ function isObjectRecord(value) {
15
+ return !!value && typeof value === 'object' && !Array.isArray(value);
16
+ }
17
+ function validateComponentConfig(value, source = 'component-config') {
18
+ if (!isObjectRecord(value)) {
19
+ throw new Error(`${source} must be an object.`);
20
+ }
21
+ const components = value['components'];
22
+ if (typeof components !== 'string' || components.trim().length === 0) {
23
+ throw new Error(`${source}.components must be a non-empty string.`);
24
+ }
25
+ const fieldTypes = value['fieldTypes'];
26
+ if (!isObjectRecord(fieldTypes)) {
27
+ throw new Error(`${source}.fieldTypes must be an object.`);
28
+ }
29
+ for (const [fieldType, entryValue] of Object.entries(fieldTypes)) {
30
+ if (!isObjectRecord(entryValue)) {
31
+ throw new Error(`${source}.fieldTypes.${fieldType} must be an object.`);
32
+ }
33
+ const component = entryValue['component'];
34
+ if (typeof component !== 'string' || component.trim().length === 0) {
35
+ throw new Error(`${source}.fieldTypes.${fieldType}.component must be a non-empty string.`);
36
+ }
37
+ const render = entryValue['render'];
38
+ if (render !== undefined && typeof render !== 'function') {
39
+ throw new Error(`${source}.fieldTypes.${fieldType}.render must be a function when provided.`);
40
+ }
41
+ }
42
+ const fields = value['fields'];
43
+ if (fields !== undefined) {
44
+ if (!isObjectRecord(fields)) {
45
+ throw new Error(`${source}.fields must be an object when provided.`);
46
+ }
47
+ for (const [fieldPath, overrideValue] of Object.entries(fields)) {
48
+ if (!isObjectRecord(overrideValue)) {
49
+ throw new Error(`${source}.fields.${fieldPath} must be an object.`);
50
+ }
51
+ const fieldType = overrideValue['fieldType'];
52
+ if (typeof fieldType !== 'string' || fieldType.trim().length === 0) {
53
+ throw new Error(`${source}.fields.${fieldPath}.fieldType must be a non-empty string.`);
54
+ }
55
+ const props = overrideValue['props'];
56
+ if (props !== undefined && !isObjectRecord(props)) {
57
+ throw new Error(`${source}.fields.${fieldPath}.props must be an object when provided.`);
58
+ }
59
+ }
60
+ }
61
+ return value;
62
+ }
63
+ function getDefaultExport(moduleExports) {
64
+ if ('default' in moduleExports) {
65
+ return moduleExports['default'];
66
+ }
67
+ return moduleExports;
68
+ }
9
69
  export async function loadSchema(schemaPath, exportName) {
10
70
  const absolutePath = path.resolve(schemaPath);
11
71
  const jiti = createJiti(import.meta.url, {
12
72
  moduleCache: false,
13
- interopDefault: true
73
+ interopDefault: true,
74
+ alias: {
75
+ zod: resolveZodModulePath()
76
+ },
77
+ nativeModules: ['zod']
14
78
  });
15
79
  let moduleExports;
16
80
  try {
@@ -29,4 +93,21 @@ export async function loadSchema(schemaPath, exportName) {
29
93
  }
30
94
  return candidate;
31
95
  }
96
+ export async function loadComponentConfig(configPath) {
97
+ const absolutePath = path.resolve(configPath);
98
+ const jiti = createJiti(import.meta.url, {
99
+ moduleCache: false,
100
+ interopDefault: true
101
+ });
102
+ let moduleExports;
103
+ try {
104
+ moduleExports = await jiti.import(absolutePath);
105
+ }
106
+ catch (error) {
107
+ const message = error instanceof Error ? error.message : String(error);
108
+ throw new Error(`Unable to load component config file "${absolutePath}": ${message}`);
109
+ }
110
+ const configValue = getDefaultExport(moduleExports);
111
+ return validateComponentConfig(configValue, `component-config (${absolutePath})`);
112
+ }
32
113
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,SAAS,WAAW,CAAC,KAAc,EAAW;IAC5C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,IAAK,KAAiC,CAAC;AAAA,CACrD;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,UAAkB,EAAoB;IACzF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE;QACvC,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,IAAI,aAAsC,CAAC;IAC3C,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,MAAM,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,CAAC,UAAU,IAAI,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,mCAAmC,YAAY,IAAI,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,WAAW,YAAY,wBAAwB,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,SAAS,CAAC;AAAA,CAClB"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAEvD,SAAS,oBAAoB,GAAW;IACtC,OAAO,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAAA,CACvC;AAED,SAAS,WAAW,CAAC,KAAc,EAAW;IAC5C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,IAAK,KAAiC,CAAC;AAAA,CACrD;AAED,SAAS,cAAc,CAAC,KAAc,EAAoC;IACxE,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAAA,CACtE;AAED,SAAS,uBAAuB,CAC9B,KAAc,EACd,MAAM,GAAG,kBAAkB,EACwB;IACnD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,qBAAqB,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,yCAAyC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,gCAAgC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,eAAe,SAAS,qBAAqB,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,eAAe,SAAS,wCAAwC,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,eAAe,SAAS,2CAA2C,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,0CAA0C,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAChE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,WAAW,SAAS,qBAAqB,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,WAAW,SAAS,wCAAwC,CAAC,CAAC;YACzF,CAAC;YAED,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,WAAW,SAAS,yCAAyC,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAA0D,CAAC;AAAA,CACnE;AAED,SAAS,gBAAgB,CAAC,aAAsC,EAAW;IACzE,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,aAAa,CAAC;AAAA,CACtB;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,UAAkB,EAAoB;IACzF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE;QACvC,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE;YACL,GAAG,EAAE,oBAAoB,EAAE;SAC5B;QACD,aAAa,EAAE,CAAC,KAAK,CAAC;KACvB,CAAC,CAAC;IAEH,IAAI,aAAsC,CAAC;IAC3C,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,MAAM,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,CAAC,UAAU,IAAI,aAAa,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,mCAAmC,YAAY,IAAI,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,WAAW,YAAY,wBAAwB,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,SAAS,CAAC;AAAA,CAClB;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAC0C;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE;QACvC,WAAW,EAAE,KAAK;QAClB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,IAAI,aAAsC,CAAC;IAC3C,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,MAAM,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,uBAAuB,CAAC,WAAW,EAAE,qBAAqB,YAAY,GAAG,CAAC,CAAC;AAAA,CACnF"}
@@ -1,4 +1,4 @@
1
1
  import type { FormField } from '@zod-to-form/core';
2
- export declare function getFileHeader(schemaImportPath: string, exportName: string, hasArrays?: boolean): string;
2
+ export declare function getFileHeader(schemaImportPath: string, exportName: string, hasArrays?: boolean, mode?: 'submit' | 'auto-save', componentImportLine?: string): string;
3
3
  export declare function renderField(field: FormField): string;
4
4
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,EAClB,SAAS,UAAQ,GAChB,MAAM,CAYR;AA2BD,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAiBpD"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,wBAAgB,aAAa,CAC3B,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,EAClB,SAAS,UAAQ,EACjB,IAAI,GAAE,QAAQ,GAAG,WAAsB,EACvC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,MAAM,CAgBR;AA2BD,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAiBpD"}
package/dist/templates.js CHANGED
@@ -1,10 +1,13 @@
1
- export function getFileHeader(schemaImportPath, exportName, hasArrays = false) {
1
+ export function getFileHeader(schemaImportPath, exportName, hasArrays = false, mode = 'submit', componentImportLine) {
2
2
  const rhfImports = hasArrays
3
3
  ? `import { useForm, useFieldArray } from 'react-hook-form';`
4
4
  : `import { useForm } from 'react-hook-form';`;
5
+ const reactImports = mode === 'auto-save' ? `import { useEffect } from 'react';` : '';
5
6
  return [
7
+ ...(reactImports ? [reactImports] : []),
6
8
  rhfImports,
7
9
  `import { zodResolver } from '@hookform/resolvers/zod';`,
10
+ ...(componentImportLine ? [componentImportLine] : []),
8
11
  `import { ${exportName} } from '${schemaImportPath}';`,
9
12
  ``,
10
13
  `type FormData = (typeof ${exportName})['_zod']['output'];`
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAC3B,gBAAwB,EACxB,UAAkB,EAClB,SAAS,GAAG,KAAK,EACT;IACR,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,2DAA2D;QAC7D,CAAC,CAAC,4CAA4C,CAAC;IAEjD,OAAO;QACL,UAAU;QACV,wDAAwD;QACxD,YAAY,UAAU,YAAY,gBAAgB,IAAI;QACtD,EAAE;QACF,2BAA2B,UAAU,sBAAsB;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACd;AAED,SAAS,WAAW,CAAC,KAAgB,EAAU;IAC7C,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzF,OAAO,cAAc,KAAK,CAAC,GAAG,WAAW,SAAS,mBAAmB,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,CACxF;AAED,SAAS,cAAc,CAAC,KAAgB,EAAU;IAChD,OAAO,cAAc,KAAK,CAAC,GAAG,mCAAmC,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,CACpF;AAED,SAAS,gBAAgB,CAAC,KAAgB,EAAU;IAClD,OAAO,cAAc,KAAK,CAAC,GAAG,+BAA+B,KAAK,CAAC,GAAG,+BAA+B,CAAC;AAAA,CACvG;AAED,SAAS,eAAe,CAAC,KAAgB,EAAU;IACjD,OAAO,cAAc,KAAK,CAAC,GAAG,+BAA+B,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,CAChF;AAED,SAAS,YAAY,CAAC,KAAgB,EAAU;IAC9C,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,WAAW,CAAC;SACnF,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,eAAe,KAAK,CAAC,GAAG,mBAAmB,KAAK,CAAC,GAAG,OAAO,OAAO,WAAW,CAAC;AAAA,CACtF;AAED,MAAM,UAAU,WAAW,CAAC,KAAgB,EAAU;IACpD,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,YAAY;YACf,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,WAAW;YACd,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,iBAAiB,KAAK,CAAC,GAAG,mBAAmB,KAAK,CAAC,GAAG,QAAQ,CAAC;QACxE;YACE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AAAA,CACF"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAC3B,gBAAwB,EACxB,UAAkB,EAClB,SAAS,GAAG,KAAK,EACjB,IAAI,GAA2B,QAAQ,EACvC,mBAA4B,EACpB;IACR,MAAM,UAAU,GAAG,SAAS;QAC1B,CAAC,CAAC,2DAA2D;QAC7D,CAAC,CAAC,4CAA4C,CAAC;IAEjD,MAAM,YAAY,GAAG,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,OAAO;QACL,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,UAAU;QACV,wDAAwD;QACxD,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,YAAY,UAAU,YAAY,gBAAgB,IAAI;QACtD,EAAE;QACF,2BAA2B,UAAU,sBAAsB;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACd;AAED,SAAS,WAAW,CAAC,KAAgB,EAAU;IAC7C,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzF,OAAO,cAAc,KAAK,CAAC,GAAG,WAAW,SAAS,mBAAmB,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,CACxF;AAED,SAAS,cAAc,CAAC,KAAgB,EAAU;IAChD,OAAO,cAAc,KAAK,CAAC,GAAG,mCAAmC,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,CACpF;AAED,SAAS,gBAAgB,CAAC,KAAgB,EAAU;IAClD,OAAO,cAAc,KAAK,CAAC,GAAG,+BAA+B,KAAK,CAAC,GAAG,+BAA+B,CAAC;AAAA,CACvG;AAED,SAAS,eAAe,CAAC,KAAgB,EAAU;IACjD,OAAO,cAAc,KAAK,CAAC,GAAG,+BAA+B,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,CAChF;AAED,SAAS,YAAY,CAAC,KAAgB,EAAU;IAC9C,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;SAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,WAAW,CAAC;SACnF,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,eAAe,KAAK,CAAC,GAAG,mBAAmB,KAAK,CAAC,GAAG,OAAO,OAAO,WAAW,CAAC;AAAA,CACtF;AAED,MAAM,UAAU,WAAW,CAAC,KAAgB,EAAU;IACpD,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;QACxB,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,YAAY;YACf,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,WAAW;YACd,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,iBAAiB,KAAK,CAAC,GAAG,mBAAmB,KAAK,CAAC,GAAG,QAAQ,CAAC;QACxE;YACE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AAAA,CACF"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@zod-to-form/cli",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Build-time code generator for Zod v4 form components",
5
5
  "license": "MIT",
6
- "homepage": "https://github.com/pradeepmouli/zodforms#readme",
6
+ "homepage": "https://github.com/pradeepmouli/zod-to-form#readme",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "https://github.com/pradeepmouli/zodforms.git",
9
+ "url": "https://github.com/pradeepmouli/zod-to-form.git",
10
10
  "directory": "packages/cli"
11
11
  },
12
12
  "keywords": [
@@ -36,7 +36,8 @@
36
36
  "chokidar": "^5.0.0",
37
37
  "commander": "^14.0.3",
38
38
  "jiti": "^2.6.1",
39
- "@zod-to-form/core": "0.2.2"
39
+ "type-fest": "^5.4.4",
40
+ "@zod-to-form/core": "0.2.4"
40
41
  },
41
42
  "devDependencies": {
42
43
  "zod": "^4.3.6"