@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 +150 -0
- package/dist/codegen.d.ts +8 -0
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +127 -16
- package/dist/codegen.js.map +1 -1
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -1
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +2 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +82 -1
- package/dist/loader.js.map +1 -1
- package/dist/templates.d.ts +1 -1
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +4 -1
- package/dist/templates.js.map +1 -1
- package/package.json +5 -4
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
|
package/dist/codegen.d.ts.map
CHANGED
|
@@ -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;
|
|
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) =>
|
|
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
|
-
?
|
|
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
|
|
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
|
|
94
|
-
const
|
|
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 =
|
|
103
|
-
?
|
|
104
|
-
|
|
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
|
-
|
|
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
|
-
|
|
228
|
+
formOpen,
|
|
118
229
|
body,
|
|
119
|
-
|
|
230
|
+
...formTail,
|
|
120
231
|
` </form>`,
|
|
121
232
|
` );`,
|
|
122
233
|
`}`
|
package/dist/codegen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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"}
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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":";AAEA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
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
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"
|
|
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
|
package/dist/loader.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/templates.d.ts
CHANGED
|
@@ -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
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -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,
|
|
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'];`
|
package/dist/templates.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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/
|
|
6
|
+
"homepage": "https://github.com/pradeepmouli/zod-to-form#readme",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/pradeepmouli/
|
|
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
|
-
"
|
|
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"
|