@zod-to-form/cli 0.2.4 → 0.2.6

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 CHANGED
@@ -22,12 +22,18 @@ pnpm add -D @zod-to-form/cli zod
22
22
  ## CLI Usage
23
23
 
24
24
  ```bash
25
- zodform generate --schema ./src/schema.ts --export userSchema
25
+ zod-to-form generate --config ./z2f.config.ts --schema ./src/schema.ts --export userSchema
26
26
  ```
27
27
 
28
+ ```bash
29
+ zod-to-form init
30
+ ```
31
+
32
+ Alias: `z2f`.
33
+
28
34
  ### Command
29
35
 
30
- `zodform generate`
36
+ `zod-to-form generate`
31
37
 
32
38
  Required options:
33
39
 
@@ -37,27 +43,63 @@ Required options:
37
43
  Optional options:
38
44
 
39
45
  - `--mode <mode>`: `submit | auto-save` (default `submit`)
40
- - `--component-config <path>`: path to component config (`.json` or `.ts`)
46
+ - `--config <path>`: path to generate config (`.json` or `.ts`) **required**
41
47
  - `--out <path>`: output directory or `.tsx` file path
42
48
  - `--name <componentName>`: generated component name override
43
49
  - `--ui <preset>`: `shadcn | unstyled` (default `shadcn`)
44
- - `--force`: overwrite existing output file
45
50
  - `--dry-run`: print generated code to stdout without writing files
46
51
  - `--server-action`: generate Next.js server action next to form output
47
52
  - `--watch`: watch schema file and regenerate on changes
48
53
 
54
+ Generation selection/overwrite is now config-driven:
55
+
56
+ - `overwrite`: overwrite existing output files
57
+ - `types`: explicit list of schema exports to generate (used when `--export` is omitted)
58
+ - `include`: wildcard include patterns for schema export names
59
+ - `exclude`: wildcard exclude patterns for schema export names
60
+
61
+ When generating with `--config`, component mapping and generation controls come from the same file.
62
+ Default config discovery order (used by runtime helpers / existing workflows) is still:
63
+
64
+ 1. `z2f.config.ts`
65
+ 2. `component-config.ts`
66
+ 3. `z2f.config.js`
67
+ 4. `component-config.js`
68
+ 5. `z2f.config.json`
69
+ 6. `component-config.json`
70
+
71
+ ### Command
72
+
73
+ `zod-to-form init`
74
+
75
+ Creates `z2f.config.ts` using sensible defaults and introspection of shadcn `components.json` when available.
76
+
77
+ Optional options:
78
+
79
+ - `--out <path>`: output file or directory (default `z2f.config.ts`)
80
+ - `--components <modulePath>`: module path assigned to `components` in generated config (overrides inference)
81
+ - `--force`: overwrite existing config file
82
+ - `--dry-run`: print generated config and skip file writes
83
+ - `--verbose`: print detailed diagnostics for each step
84
+
85
+ Output behavior:
86
+
87
+ - default: concise progress + final summary
88
+ - `--verbose`: adds detailed diagnostics (detected config source/aliases)
89
+
49
90
  ## Examples
50
91
 
51
92
  Generate to default output (`<DerivedName>Form.tsx`):
52
93
 
53
94
  ```bash
54
- zodform generate --schema ./src/user.schema.ts --export userSchema
95
+ zod-to-form generate --schema ./src/user.schema.ts --export userSchema
55
96
  ```
56
97
 
57
98
  Generate to specific directory with custom component name:
58
99
 
59
100
  ```bash
60
- zodform generate \
101
+ zod-to-form generate \
102
+ --config ./z2f.config.ts \
61
103
  --schema ./src/user.schema.ts \
62
104
  --export userSchema \
63
105
  --out ./src/forms \
@@ -67,7 +109,8 @@ zodform generate \
67
109
  Generate in auto-save mode with server action:
68
110
 
69
111
  ```bash
70
- zodform generate \
112
+ zod-to-form generate \
113
+ --config ./z2f.config.ts \
71
114
  --schema ./src/user.schema.ts \
72
115
  --export userSchema \
73
116
  --mode auto-save \
@@ -77,7 +120,19 @@ zodform generate \
77
120
  Dry run to inspect generated output:
78
121
 
79
122
  ```bash
80
- zodform generate --schema ./src/user.schema.ts --export userSchema --dry-run
123
+ zod-to-form generate --config ./z2f.config.ts --schema ./src/user.schema.ts --export userSchema --dry-run
124
+ ```
125
+
126
+ Initialize config with verbose diagnostics:
127
+
128
+ ```bash
129
+ zod-to-form init --verbose
130
+ ```
131
+
132
+ Initialize config with explicit components module path:
133
+
134
+ ```bash
135
+ zod-to-form init --components ../../src/components/zod-form-components
81
136
  ```
82
137
 
83
138
  ## Type-Safe Component Config
@@ -103,6 +158,15 @@ type Components = {
103
158
 
104
159
  export default defineComponentConfig<Components, Values>({
105
160
  components: '@/components/form-components',
161
+ overwrite: true,
162
+ types: ['userSchema'],
163
+ include: ['*Schema'],
164
+ exclude: ['Internal*'],
165
+ formPrimitives: {
166
+ field: 'Field',
167
+ label: 'FieldLabel',
168
+ control: 'FieldControl'
169
+ },
106
170
  fieldTypes: {
107
171
  Input: { component: 'TextInput' },
108
172
  textarea: { component: 'TextareaInput' }
@@ -114,6 +178,26 @@ export default defineComponentConfig<Components, Values>({
114
178
  });
115
179
  ```
116
180
 
181
+ `formPrimitives` is optional. When provided, generated fields use those wrappers instead of raw `div`/`label` markup.
182
+
183
+ Common examples:
184
+
185
+ ```ts
186
+ formPrimitives: {
187
+ field: 'Field',
188
+ label: 'FieldLabel',
189
+ control: 'FieldControl'
190
+ }
191
+ ```
192
+
193
+ ```ts
194
+ formPrimitives: {
195
+ field: 'FormField',
196
+ label: 'FormLabel',
197
+ control: 'FormControl'
198
+ }
199
+ ```
200
+
117
201
  ### `validateComponentConfig(...)`
118
202
 
119
203
  Use at runtime when loading external config objects.
@@ -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;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"}
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,EACV,cAAc,EACd,aAAa,EAEb,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAGpB,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;AAyJF,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,CAuBA;AAkOD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,CA6FjB"}
package/dist/codegen.js CHANGED
@@ -24,11 +24,12 @@ function renderOverrideProps(props) {
24
24
  function getMappedFieldComponent(field, componentConfig) {
25
25
  const mapping = resolveFieldMapping(field.key, field.component, componentConfig);
26
26
  if (!mapping.entry) {
27
- return {};
27
+ return { source: mapping.source };
28
28
  }
29
29
  return {
30
30
  componentName: mapping.entry.component,
31
- override: mapping.override
31
+ override: mapping.override,
32
+ source: mapping.source
32
33
  };
33
34
  }
34
35
  function collectMappedComponentNames(fields, componentConfig, out = new Set()) {
@@ -46,14 +47,79 @@ function collectMappedComponentNames(fields, componentConfig, out = new Set()) {
46
47
  }
47
48
  return out;
48
49
  }
50
+ function collectFormPrimitiveNames(primitives) {
51
+ const names = new Set();
52
+ if (!primitives) {
53
+ return names;
54
+ }
55
+ if (primitives.field) {
56
+ names.add(primitives.field);
57
+ }
58
+ if (primitives.label) {
59
+ names.add(primitives.label);
60
+ }
61
+ if (primitives.control) {
62
+ names.add(primitives.control);
63
+ }
64
+ return names;
65
+ }
66
+ function renderFieldContainer(field, content, indent, primitives) {
67
+ const styleAttr = field.gridColumn ? ` style={{ gridColumn: '${field.gridColumn}' }}` : '';
68
+ const fieldTag = primitives?.field;
69
+ const labelTag = primitives?.label;
70
+ const controlTag = primitives?.control;
71
+ if (!fieldTag && !labelTag && !controlTag) {
72
+ return [
73
+ `${indent}<div${styleAttr}>`,
74
+ `${indent} <label htmlFor="${field.key}">${field.label}</label>`,
75
+ `${indent} ${content}`,
76
+ `${indent}</div>`
77
+ ].join('\n');
78
+ }
79
+ const openField = fieldTag ? `<${fieldTag}${styleAttr}>` : `<div${styleAttr}>`;
80
+ const closeField = fieldTag ? `</${fieldTag}>` : `</div>`;
81
+ const openLabel = labelTag
82
+ ? `<${labelTag} htmlFor="${field.key}">`
83
+ : `<label htmlFor="${field.key}">`;
84
+ const closeLabel = labelTag ? `</${labelTag}>` : `</label>`;
85
+ if (!controlTag) {
86
+ return [
87
+ `${indent}${openField}`,
88
+ `${indent} ${openLabel}${field.label}${closeLabel}`,
89
+ `${indent} ${content}`,
90
+ `${indent}${closeField}`
91
+ ].join('\n');
92
+ }
93
+ return [
94
+ `${indent}${openField}`,
95
+ `${indent} ${openLabel}${field.label}${closeLabel}`,
96
+ `${indent} <${controlTag}>`,
97
+ `${indent} ${content}`,
98
+ `${indent} </${controlTag}>`,
99
+ `${indent}${closeField}`
100
+ ].join('\n');
101
+ }
102
+ /**
103
+ * Normalise a concrete field key (e.g. `attributes.0.typeCall.type` or
104
+ * `attributes.${index}.typeCall.type`) to the bracket notation used in
105
+ * the user-facing `fields` config (e.g. `attributes[].typeCall.type`).
106
+ */
107
+ function normalizeFieldKey(key) {
108
+ // Replace `.0.` or `.${index}.` segments with `[].`
109
+ let result = key.replace(/\.(?:0|\$\{index\})\./g, '[].');
110
+ // Replace trailing `.0` or `.${index}`
111
+ result = result.replace(/\.(?:0|\$\{index\})$/, '[]');
112
+ return result;
113
+ }
49
114
  export function resolveFieldMapping(fieldKey, fieldType, componentConfig) {
50
115
  if (!componentConfig) {
51
116
  return { source: 'none' };
52
117
  }
53
- const override = componentConfig.fields?.[fieldKey];
118
+ // Try exact match first, then normalised bracket-notation match
119
+ const override = componentConfig.fields?.[fieldKey] ?? componentConfig.fields?.[normalizeFieldKey(fieldKey)];
54
120
  if (override) {
55
121
  return {
56
- entry: componentConfig.fieldTypes[override.fieldType],
122
+ entry: override.fieldType ? componentConfig.fieldTypes[override.fieldType] : undefined,
57
123
  override,
58
124
  source: 'fields'
59
125
  };
@@ -70,10 +136,11 @@ function getSchemaImportPath(config) {
70
136
  const relative = path
71
137
  .relative(path.dirname(config.outputPath), config.schemaPath)
72
138
  .replace(/\\/g, '/');
73
- if (relative.startsWith('.')) {
74
- return relative;
75
- }
76
- return `./${relative}`;
139
+ const withDot = relative.startsWith('.') ? relative : `./${relative}`;
140
+ return withDot
141
+ .replace(/\.mts$/i, '.mjs')
142
+ .replace(/\.cts$/i, '.cjs')
143
+ .replace(/\.tsx?$/i, '.js');
77
144
  }
78
145
  /** Convert a field key to a safe camelCase variable prefix (e.g. 'address.street' → 'addressStreet') */
79
146
  function toVarName(key) {
@@ -83,7 +150,7 @@ function toVarName(key) {
83
150
  function collectArrayFields(fields) {
84
151
  const result = [];
85
152
  for (const field of fields) {
86
- if (field.component === 'ArrayField') {
153
+ if (field.component === 'ArrayField' && !field.key.includes('.0.')) {
87
154
  result.push(field);
88
155
  }
89
156
  if (field.component === 'Fieldset' && field.children) {
@@ -92,9 +159,74 @@ function collectArrayFields(fields) {
92
159
  }
93
160
  return result;
94
161
  }
95
- function renderNestedBlock(field, componentConfig, indent) {
162
+ function replaceArrayIndexToken(key, arrayKey) {
163
+ const prefix = `${arrayKey}.0`;
164
+ if (key === prefix) {
165
+ return `${arrayKey}.${'${index}'}`;
166
+ }
167
+ if (key.startsWith(`${prefix}.`)) {
168
+ return `${arrayKey}.${'${index}'}.${key.slice(prefix.length + 1)}`;
169
+ }
170
+ return key;
171
+ }
172
+ function cloneFieldWithArrayIndex(field, arrayKey) {
173
+ return {
174
+ ...field,
175
+ key: replaceArrayIndexToken(field.key, arrayKey),
176
+ children: field.children?.map((child) => cloneFieldWithArrayIndex(child, arrayKey)),
177
+ arrayItem: field.arrayItem ? cloneFieldWithArrayIndex(field.arrayItem, arrayKey) : undefined
178
+ };
179
+ }
180
+ function getObjectPropertyName(path) {
181
+ const lastSegment = path.split('.').at(-1) ?? path;
182
+ return JSON.stringify(lastSegment);
183
+ }
184
+ function getDefaultArrayItemExpression(field) {
185
+ if (!field) {
186
+ return `''`;
187
+ }
188
+ if (field.defaultValue !== undefined) {
189
+ return JSON.stringify(field.defaultValue);
190
+ }
191
+ if (field.options && field.options.length > 0) {
192
+ return JSON.stringify(field.options[0].value);
193
+ }
194
+ if (field.component === 'Checkbox' || field.component === 'Switch') {
195
+ return 'false';
196
+ }
197
+ if (field.component === 'Input') {
198
+ const inputType = typeof field.props['type'] === 'string' ? field.props['type'] : 'text';
199
+ if (inputType === 'number') {
200
+ return '0';
201
+ }
202
+ if (inputType === 'checkbox') {
203
+ return 'false';
204
+ }
205
+ }
206
+ if (field.component === 'Fieldset') {
207
+ const children = field.children ?? [];
208
+ if (children.length === 0) {
209
+ return '{}';
210
+ }
211
+ const entries = children
212
+ .map((child) => `${getObjectPropertyName(child.key)}: ${getDefaultArrayItemExpression(child)}`)
213
+ .join(', ');
214
+ return `{ ${entries} }`;
215
+ }
216
+ if (field.component === 'ArrayField') {
217
+ return '[]';
218
+ }
219
+ if (field.zodType === 'number' || field.zodType === 'bigint') {
220
+ return '0';
221
+ }
222
+ if (field.zodType === 'boolean') {
223
+ return 'false';
224
+ }
225
+ return `''`;
226
+ }
227
+ function renderNestedBlock(field, componentConfig, primitives, indent) {
96
228
  const children = (field.children ?? [])
97
- .map((child) => renderFieldBlockWithConfig(child, componentConfig, `${indent} `))
229
+ .map((child) => renderFieldBlockWithConfig(child, componentConfig, primitives, `${indent} `))
98
230
  .join('\n');
99
231
  return [
100
232
  `${indent}<div>`,
@@ -106,32 +238,43 @@ function renderNestedBlock(field, componentConfig, indent) {
106
238
  `${indent}</div>`
107
239
  ].join('\n');
108
240
  }
109
- function renderArrayBlock(field, componentConfig, indent) {
241
+ function renderArrayBlock(field, componentConfig, primitives, indent) {
242
+ if (field.key.includes('${')) {
243
+ return [
244
+ `${indent}<div>`,
245
+ `${indent} <label>${field.label}</label>`,
246
+ `${indent} <p>Nested array editing is not auto-generated for dynamic paths. Use a custom renderer for ${field.key}.</p>`,
247
+ `${indent}</div>`
248
+ ].join('\n');
249
+ }
110
250
  const varName = toVarName(field.key);
111
251
  const itemField = field.arrayItem;
112
- const mappedItem = itemField ? getMappedFieldComponent(itemField, componentConfig) : {};
113
- const itemJsx = itemField
252
+ const indexedItemField = itemField ? cloneFieldWithArrayIndex(itemField, field.key) : undefined;
253
+ const mappedItem = indexedItemField
254
+ ? getMappedFieldComponent(indexedItemField, componentConfig)
255
+ : { source: 'none' };
256
+ const itemJsx = indexedItemField
114
257
  ? mappedItem.componentName
115
- ? `<${mappedItem.componentName} {...register('${field.key}.0')}${renderOverrideProps(mappedItem.override?.props)} />`
116
- : renderField({ ...itemField, key: `\${${varName}Fields[index].id}` })
117
- : `<input {...register(\`${field.key}.\${index}\`)} />`;
258
+ ? `<${mappedItem.componentName} {...register(\`${indexedItemField.key}\`)}${renderOverrideProps(mappedItem.override?.props)} />`
259
+ : renderFieldBlockWithConfig(indexedItemField, componentConfig, primitives, `${indent} `)
260
+ : `${indent} <input {...register(\`${field.key}.\${index}\`)} />`;
118
261
  return [
119
262
  `${indent}<div>`,
120
263
  `${indent} <label>${field.label}</label>`,
121
264
  `${indent} {${varName}Fields.map((item, index) => (`,
122
265
  `${indent} <div key={item.id}>`,
123
- `${indent} ${itemJsx.replace(new RegExp(`register\\('${field.key}\\.0'\\)`), `register(\`${field.key}.\${index}\`)`)}`,
266
+ itemJsx,
124
267
  `${indent} <button type="button" onClick={() => remove${capitalize(varName)}(index)}>Remove</button>`,
125
268
  `${indent} </div>`,
126
269
  `${indent} ))}`,
127
- `${indent} <button type="button" onClick={() => append${capitalize(varName)}('')}>Add</button>`,
270
+ `${indent} <button type="button" onClick={() => append${capitalize(varName)}(${getDefaultArrayItemExpression(itemField)})}>Add</button>`,
128
271
  `${indent}</div>`
129
272
  ].join('\n');
130
273
  }
131
274
  function capitalize(s) {
132
275
  return s.charAt(0).toUpperCase() + s.slice(1);
133
276
  }
134
- function renderFieldBlockWithConfig(field, componentConfig, indent = ' ') {
277
+ function renderFieldBlockWithConfig(field, componentConfig, primitives, indent = ' ') {
135
278
  const mapping = getMappedFieldComponent(field, componentConfig);
136
279
  if (field.hasCustomRender) {
137
280
  const styleAttr = field.gridColumn ? ` style={{ gridColumn: '${field.gridColumn}' }}` : '';
@@ -142,47 +285,47 @@ function renderFieldBlockWithConfig(field, componentConfig, indent = ' ') {
142
285
  `${indent}</div>`
143
286
  ].join('\n');
144
287
  }
288
+ // If a fields override maps this nested/array field to a custom component,
289
+ // render that component instead of expanding children.
290
+ if (mapping.source === 'fields' && mapping.componentName) {
291
+ const overrideProps = renderOverrideProps(mapping.override?.props);
292
+ const regExpr = field.key.includes('${') ? `register(\`${field.key}\`)` : `register('${field.key}')`;
293
+ const content = `<${mapping.componentName} id="${field.key}" {...${regExpr}}${overrideProps} />`;
294
+ return renderFieldContainer(field, content, indent, primitives);
295
+ }
145
296
  if (field.component === 'Fieldset') {
146
- return renderNestedBlock(field, componentConfig, indent);
297
+ return renderNestedBlock(field, componentConfig, primitives, indent);
147
298
  }
148
299
  if (field.component === 'ArrayField') {
149
- return renderArrayBlock(field, componentConfig, indent);
300
+ return renderArrayBlock(field, componentConfig, primitives, indent);
150
301
  }
151
302
  if (mapping.componentName) {
152
- const styleAttr = field.gridColumn ? ` style={{ gridColumn: '${field.gridColumn}' }}` : '';
153
303
  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');
304
+ const content = `<${mapping.componentName} id="${field.key}" {...${field.key.includes('${') ? `register(\`${field.key}\`)` : `register('${field.key}')`}}${overrideProps} />`;
305
+ return renderFieldContainer(field, content, indent, primitives);
160
306
  }
161
- const styleAttr = field.gridColumn ? ` style={{ gridColumn: '${field.gridColumn}' }}` : '';
162
- return [
163
- `${indent}<div${styleAttr}>`,
164
- `${indent} <label htmlFor="${field.key}">${field.label}</label>`,
165
- `${indent} ${renderField(field)}`,
166
- `${indent}</div>`
167
- ].join('\n');
307
+ return renderFieldContainer(field, renderField(field), indent, primitives);
168
308
  }
169
309
  export async function generateFormComponent(fields, config) {
170
310
  const schemaImportPath = getSchemaImportPath(config);
171
311
  const arrayFields = collectArrayFields(fields);
172
312
  const hasArrays = arrayFields.length > 0;
313
+ const formPrimitives = config.componentConfig?.formPrimitives;
173
314
  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}';`
315
+ const primitiveComponents = collectFormPrimitiveNames(formPrimitives);
316
+ const importNames = new Set([...mappedComponents, ...primitiveComponents]);
317
+ const componentImportLine = config.componentConfig && importNames.size > 0
318
+ ? `import { ${Array.from(importNames).sort().join(', ')} } from '${config.componentConfig.components}';`
176
319
  : undefined;
177
320
  const header = getFileHeader(schemaImportPath, config.exportName, hasArrays, config.mode, componentImportLine);
178
321
  const body = fields
179
- .map((field) => renderFieldBlockWithConfig(field, config.componentConfig, ' '))
322
+ .map((field) => renderFieldBlockWithConfig(field, config.componentConfig, formPrimitives, ' '))
180
323
  .join('\n');
181
324
  // useFieldArray hook declarations
182
325
  const arrayHooks = arrayFields
183
326
  .map((f) => {
184
327
  const varName = toVarName(f.key);
185
- return ` const { fields: ${varName}Fields, append: append${capitalize(varName)}, remove: remove${capitalize(varName)} } = useFieldArray({ control, name: '${f.key}' });`;
328
+ return ` const { fields: ${varName}Fields, append: append${capitalize(varName)}, remove: remove${capitalize(varName)} } = useFieldArray<FormData, '${f.key}'>({ control, name: '${f.key}' });`;
186
329
  })
187
330
  .join('\n');
188
331
  const useFormDestructure = config.mode === 'auto-save'
@@ -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;AAQ7B,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,EAK9E;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,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC;IAED,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,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,SAAS,yBAAyB,CAChC,UAAqE,EACxD;IACb,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC;AAAA,CACd;AAED,SAAS,oBAAoB,CAC3B,KAAgB,EAChB,OAAe,EACf,MAAc,EACd,UAAqE,EAC7D;IACR,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B,KAAK,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,MAAM,QAAQ,GAAG,UAAU,EAAE,KAAK,CAAC;IACnC,MAAM,QAAQ,GAAG,UAAU,EAAE,KAAK,CAAC;IACnC,MAAM,UAAU,GAAG,UAAU,EAAE,OAAO,CAAC;IAEvC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1C,OAAO;YACL,GAAG,MAAM,OAAO,SAAS,GAAG;YAC5B,GAAG,MAAM,qBAAqB,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,UAAU;YACjE,GAAG,MAAM,KAAK,OAAO,EAAE;YACvB,GAAG,MAAM,QAAQ;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,SAAS,GAAG,CAAC;IAC/E,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1D,MAAM,SAAS,GAAG,QAAQ;QACxB,CAAC,CAAC,IAAI,QAAQ,aAAa,KAAK,CAAC,GAAG,IAAI;QACxC,CAAC,CAAC,mBAAmB,KAAK,CAAC,GAAG,IAAI,CAAC;IACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;IAE5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,GAAG,MAAM,GAAG,SAAS,EAAE;YACvB,GAAG,MAAM,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE;YACpD,GAAG,MAAM,KAAK,OAAO,EAAE;YACvB,GAAG,MAAM,GAAG,UAAU,EAAE;SACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,OAAO;QACL,GAAG,MAAM,GAAG,SAAS,EAAE;QACvB,GAAG,MAAM,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,UAAU,EAAE;QACpD,GAAG,MAAM,MAAM,UAAU,GAAG;QAC5B,GAAG,MAAM,OAAO,OAAO,EAAE;QACzB,GAAG,MAAM,OAAO,UAAU,GAAG;QAC7B,GAAG,MAAM,GAAG,UAAU,EAAE;KACzB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACd;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAU;IAC9C,oDAAoD;IACpD,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC1D,uCAAuC;IACvC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC;AAAA,CACf;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,gEAAgE;IAChE,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7G,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YACtF,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,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;IACtE,OAAO,OAAO;SACX,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAAA,CAC/B;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,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,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,sBAAsB,CAAC,GAAW,EAAE,QAAgB,EAAU;IACrE,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAC;IAC/B,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,QAAQ,IAAI,UAAU,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,CAAC;AAAA,CACZ;AAED,SAAS,wBAAwB,CAAC,KAAgB,EAAE,QAAgB,EAAa;IAC/E,OAAO;QACL,GAAG,KAAK;QACR,GAAG,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC;QAChD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnF,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAC7F,CAAC;AAAA,CACH;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAU;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnD,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAAA,CACpC;AAED,SAAS,6BAA6B,CAAC,KAA4B,EAAU;IAC3E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAChC,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;QACzF,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ;aACrB,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAC1F;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,KAAK,OAAO,IAAI,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AAAA,CACb;AAED,SAAS,iBAAiB,CACxB,KAAgB,EAChB,eAA8E,EAC9E,UAAqE,EACrE,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,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;SAC7F,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,UAAqE,EACrE,MAAc,EACN;IACR,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,GAAG,MAAM,OAAO;YAChB,GAAG,MAAM,YAAY,KAAK,CAAC,KAAK,UAAU;YAC1C,GAAG,MAAM,gGAAgG,KAAK,CAAC,GAAG,OAAO;YACzH,GAAG,MAAM,QAAQ;SAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChG,MAAM,UAAU,GAAG,gBAAgB;QACjC,CAAC,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,eAAe,CAAC;QAC5D,CAAC,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,gBAAgB;QAC9B,CAAC,CAAC,UAAU,CAAC,aAAa;YACxB,CAAC,CAAC,IAAI,UAAU,CAAC,aAAa,mBAAmB,gBAAgB,CAAC,GAAG,OAAO,mBAAmB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK;YAChI,CAAC,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC;QAChG,CAAC,CAAC,GAAG,MAAM,+BAA+B,KAAK,CAAC,GAAG,mBAAmB,CAAC;IAEzE,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,OAAO;QACP,GAAG,MAAM,oDAAoD,UAAU,CAAC,OAAO,CAAC,0BAA0B;QAC1G,GAAG,MAAM,YAAY;QACrB,GAAG,MAAM,OAAO;QAChB,GAAG,MAAM,gDAAgD,UAAU,CAAC,OAAO,CAAC,IAAI,6BAA6B,CAAC,SAAS,CAAC,iBAAiB;QACzI,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,UAAqE,EACrE,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,2EAA2E;IAC3E,uDAAuD;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,GAAG,IAAI,CAAC;QACrG,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,aAAa,QAAQ,KAAK,CAAC,GAAG,SAAS,OAAO,IAAI,aAAa,KAAK,CAAC;QACjG,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;QACrC,OAAO,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,aAAa,QAAQ,KAAK,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,GAAG,IAAI,IAAI,aAAa,KAAK,CAAC;QAE9K,OAAO,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAAA,CAC5E;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;IACzC,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;IAE9D,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACrF,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,gBAAgB,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAEnF,MAAM,mBAAmB,GACvB,MAAM,CAAC,eAAe,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC;QAC5C,CAAC,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,eAAe,CAAC,UAAU,IAAI;QACxG,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,CACb,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,QAAQ,CAAC,CACpF;SACA,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,iCAAiC,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,GAAG,OAAO,CAAC;IAAA,CACjM,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"}
@@ -0,0 +1,4 @@
1
+ export declare function wildcardPatternToRegExp(pattern: string): RegExp;
2
+ export declare function matchesAnyPattern(value: string, patterns: string[] | undefined): boolean;
3
+ export declare function applyExportFilters(exports: string[], include: string[] | undefined, exclude: string[] | undefined): string[];
4
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAMxF;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,GAC5B,MAAM,EAAE,CAOV"}
@@ -0,0 +1,18 @@
1
+ export function wildcardPatternToRegExp(pattern) {
2
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*');
3
+ return new RegExp(`^${escaped}$`);
4
+ }
5
+ export function matchesAnyPattern(value, patterns) {
6
+ if (!patterns || patterns.length === 0) {
7
+ return true;
8
+ }
9
+ return patterns.some((pattern) => wildcardPatternToRegExp(pattern).test(value));
10
+ }
11
+ export function applyExportFilters(exports, include, exclude) {
12
+ const included = exports.filter((name) => matchesAnyPattern(name, include));
13
+ if (!exclude || exclude.length === 0) {
14
+ return included;
15
+ }
16
+ return included.filter((name) => !matchesAnyPattern(name, exclude));
17
+ }
18
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAU;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnF,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AAAA,CACnC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAA8B,EAAW;IACxF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAAA,CACjF;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAiB,EACjB,OAA6B,EAC7B,OAA6B,EACnB;IACV,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,CACrE"}
package/dist/index.d.ts CHANGED
@@ -3,36 +3,22 @@
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
+ import { defineConfig, validateConfig, defineComponentConfig, validateComponentConfig, type ComponentEntry, type FieldConfig, type FieldOverride, type FormPrimitivesConfig, type ZodFormsConfig, type ZodToFormComponentConfig } from '@zod-to-form/core';
7
+ export { defineConfig, validateConfig, defineComponentConfig, validateComponentConfig };
8
+ export type { ComponentEntry, FieldConfig, FormPrimitivesConfig, ZodFormsConfig, FieldOverride, ZodToFormComponentConfig };
24
9
  type GenerateOptions = {
10
+ config: string;
25
11
  schema: string;
26
- export: string;
12
+ export?: string;
27
13
  mode?: 'submit' | 'auto-save';
28
- componentConfig?: string;
29
14
  out?: string;
30
15
  name?: string;
31
16
  ui?: 'shadcn' | 'unstyled';
32
- force?: boolean;
33
17
  dryRun?: boolean;
34
18
  serverAction?: boolean;
35
19
  watch?: boolean;
20
+ /** Pre-loaded config to avoid redundant file loads */
21
+ _loadedConfig?: ZodFormsConfig<Record<string, unknown>>;
36
22
  };
37
23
  export declare function runGenerate(options: GenerateOptions): Promise<{
38
24
  outputPath: string;
@@ -42,5 +28,4 @@ export declare function runGenerate(options: GenerateOptions): Promise<{
42
28
  actionCode?: string;
43
29
  }>;
44
30
  export declare function createProgram(): Command;
45
- export {};
46
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,cAAc,EAGd,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAE9B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EACL,YAAY,EACZ,cAAc,EAEd,qBAAqB,EACrB,uBAAuB,EACxB,CAAC;AAEF,YAAY,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,cAAc,EAEd,aAAa,EACb,wBAAwB,EACzB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,aAAa,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD,CAAC;AA0CF,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,CAmED;AAED,wBAAgB,aAAa,IAAI,OAAO,CAkGvC"}