@zod-to-form/core 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +28 -18
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +42 -52
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +1 -0
- package/dist/metadata.d.ts.map +1 -1
- package/dist/metadata.js +5 -2
- package/dist/metadata.js.map +1 -1
- package/dist/processors/_utils.d.ts +1 -1
- package/dist/processors/_utils.d.ts.map +1 -1
- package/dist/processors/array.d.ts +1 -1
- package/dist/processors/array.d.ts.map +1 -1
- package/dist/processors/boolean.d.ts +1 -1
- package/dist/processors/boolean.d.ts.map +1 -1
- package/dist/processors/boolean.js +1 -2
- package/dist/processors/boolean.js.map +1 -1
- package/dist/processors/cross-ref.d.ts +1 -1
- package/dist/processors/cross-ref.d.ts.map +1 -1
- package/dist/processors/date.d.ts +1 -1
- package/dist/processors/date.d.ts.map +1 -1
- package/dist/processors/enum.d.ts +1 -1
- package/dist/processors/enum.d.ts.map +1 -1
- package/dist/processors/fallback.d.ts +1 -1
- package/dist/processors/fallback.d.ts.map +1 -1
- package/dist/processors/file.d.ts +1 -1
- package/dist/processors/file.d.ts.map +1 -1
- package/dist/processors/number.d.ts +1 -1
- package/dist/processors/number.d.ts.map +1 -1
- package/dist/processors/object.d.ts +1 -1
- package/dist/processors/object.d.ts.map +1 -1
- package/dist/processors/string.d.ts +1 -1
- package/dist/processors/string.d.ts.map +1 -1
- package/dist/processors/string.js +1 -2
- package/dist/processors/string.js.map +1 -1
- package/dist/processors/union.d.ts +1 -1
- package/dist/processors/union.d.ts.map +1 -1
- package/dist/processors/wrappers.d.ts +1 -1
- package/dist/processors/wrappers.d.ts.map +1 -1
- package/dist/register.d.ts +70 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +188 -0
- package/dist/register.js.map +1 -0
- package/dist/types.d.ts +26 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/walker.d.ts +1 -1
- package/dist/walker.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/config.d.ts
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { $ZodType } from 'zod/v4/core';
|
|
2
3
|
import type { FieldConfig } from './types.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
render?: () => Promise<unknown>;
|
|
4
|
+
/** Per-component metadata override. Only components that differ from defaults need an entry. */
|
|
5
|
+
export type ComponentOverride = {
|
|
6
6
|
/** When true, use Controller/useController instead of register() spread */
|
|
7
7
|
controlled?: boolean;
|
|
8
8
|
/** Map RHF field props to component-specific prop names (e.g. { onSelect: 'field.onChange' }) */
|
|
9
9
|
propMap?: Record<string, string>;
|
|
10
10
|
};
|
|
11
|
+
export type ComponentPreset = 'shadcn' | 'unstyled';
|
|
12
|
+
export type ComponentsConfig<T extends Record<string, unknown> = Record<string, unknown>> = {
|
|
13
|
+
/** Import path for the components module */
|
|
14
|
+
source: string;
|
|
15
|
+
/** Preset that provides base overrides */
|
|
16
|
+
preset?: ComponentPreset;
|
|
17
|
+
/** Per-component overrides, strongly typed to module export keys */
|
|
18
|
+
overrides?: {
|
|
19
|
+
[K in keyof T & string]?: ComponentOverride;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
11
22
|
export type FormPrimitivesConfig<T extends Record<string, unknown> = Record<string, unknown>> = {
|
|
12
23
|
field?: keyof T & string;
|
|
13
24
|
label?: keyof T & string;
|
|
@@ -15,32 +26,32 @@ export type FormPrimitivesConfig<T extends Record<string, unknown> = Record<stri
|
|
|
15
26
|
};
|
|
16
27
|
/** Field config with props constrained to a specific component's prop type */
|
|
17
28
|
type TypedFieldConfigForComponent<TComponents extends Record<string, unknown>, K extends keyof TComponents & string> = {
|
|
18
|
-
|
|
29
|
+
component: K;
|
|
19
30
|
order?: number;
|
|
20
31
|
hidden?: boolean;
|
|
21
32
|
gridColumn?: string;
|
|
22
33
|
props?: TComponents[K] extends Record<string, unknown> ? Partial<TComponents[K]> : Record<string, unknown>;
|
|
23
|
-
/** Per-field prop mapping override (merges over
|
|
34
|
+
/** Per-field prop mapping override (merges over ComponentOverride.propMap) */
|
|
24
35
|
propMap?: Record<string, string>;
|
|
25
36
|
/** Group into a named section component */
|
|
26
37
|
section?: string;
|
|
27
38
|
};
|
|
28
|
-
/** Field config with no
|
|
39
|
+
/** Field config with no component specified (untyped props) */
|
|
29
40
|
type UntypedFieldConfig = {
|
|
30
|
-
|
|
41
|
+
component?: undefined;
|
|
31
42
|
order?: number;
|
|
32
43
|
hidden?: boolean;
|
|
33
44
|
gridColumn?: string;
|
|
34
45
|
props?: Record<string, unknown>;
|
|
35
|
-
/** Per-field prop mapping override (merges over
|
|
46
|
+
/** Per-field prop mapping override (merges over ComponentOverride.propMap) */
|
|
36
47
|
propMap?: Record<string, string>;
|
|
37
48
|
/** Group into a named section component */
|
|
38
49
|
section?: string;
|
|
39
50
|
};
|
|
40
51
|
/**
|
|
41
52
|
* Discriminated union over component keys.
|
|
42
|
-
* When `
|
|
43
|
-
* to that component's prop type. When `
|
|
53
|
+
* When `component` is set to a known component key, `props` is constrained
|
|
54
|
+
* to that component's prop type. When `component` is omitted, `props` is
|
|
44
55
|
* an open `Record<string, unknown>`.
|
|
45
56
|
*/
|
|
46
57
|
export type TypedFieldConfig<TComponents extends Record<string, unknown> = Record<string, unknown>> = {
|
|
@@ -62,11 +73,8 @@ export type ZodTypeConfig<TFieldKeys extends string = string, TComponents extend
|
|
|
62
73
|
serverAction?: boolean;
|
|
63
74
|
fields?: Partial<Record<TFieldKeys, TypedFieldConfig<TComponents>>>;
|
|
64
75
|
};
|
|
65
|
-
export type FieldTypePreset = 'shadcn' | 'unstyled';
|
|
66
76
|
export type ZodFormsConfig<TComponents extends Record<string, unknown> = Record<string, unknown>, TSchemas extends Record<string, unknown> = Record<string, unknown>> = {
|
|
67
|
-
components:
|
|
68
|
-
preset?: FieldTypePreset;
|
|
69
|
-
fieldTypes: Record<string, ComponentEntry<TComponents>>;
|
|
77
|
+
components: ComponentsConfig<TComponents>;
|
|
70
78
|
formPrimitives?: FormPrimitivesConfig<TComponents>;
|
|
71
79
|
defaults?: ConfigDefaults;
|
|
72
80
|
types?: string[];
|
|
@@ -74,7 +82,7 @@ export type ZodFormsConfig<TComponents extends Record<string, unknown> = Record<
|
|
|
74
82
|
exclude?: string[];
|
|
75
83
|
fields?: Record<string, TypedFieldConfig<TComponents>>;
|
|
76
84
|
schemas?: {
|
|
77
|
-
[K in keyof TSchemas & string]?: ZodTypeConfig<TSchemas[K] extends
|
|
85
|
+
[K in keyof TSchemas & string]?: ZodTypeConfig<TSchemas[K] extends $ZodType ? SchemaFieldPath<TSchemas[K]> : string, TComponents>;
|
|
78
86
|
};
|
|
79
87
|
};
|
|
80
88
|
/**
|
|
@@ -91,9 +99,11 @@ type DotPath<T> = T extends Primitive ? never : T extends readonly (infer TItem)
|
|
|
91
99
|
type NormalizeArrayPath<TPath extends string> = TPath extends `${infer Prefix}.${number}.${infer Suffix}` ? NormalizeArrayPath<`${Prefix}[].${Suffix}`> : TPath extends `${infer Prefix}.${number}` ? NormalizeArrayPath<`${Prefix}[]`> : TPath;
|
|
92
100
|
type FieldPath<TValues extends Record<string, unknown>> = DotPath<TValues> extends infer TPath ? TPath extends string ? TPath | NormalizeArrayPath<TPath> : never : never;
|
|
93
101
|
/** Extracts dot-notation field paths from a Zod schema's inferred type */
|
|
94
|
-
type SchemaFieldPath<T extends
|
|
95
|
-
|
|
96
|
-
export declare const
|
|
102
|
+
type SchemaFieldPath<T extends $ZodType> = z.infer<T> extends infer O ? (O extends Record<string, unknown> ? FieldPath<O> : string) : string;
|
|
103
|
+
/** shadcn preset — no controlled components by default */
|
|
104
|
+
export declare const SHADCN_OVERRIDES: Record<string, ComponentOverride>;
|
|
105
|
+
/** Default/unstyled preset — no controlled components by default */
|
|
106
|
+
export declare const DEFAULT_OVERRIDES: Record<string, ComponentOverride>;
|
|
97
107
|
export declare function defineConfig<TComponents extends Record<string, unknown> = Record<string, unknown>, TSchemas extends Record<string, unknown> = Record<string, unknown>>(config: ZodFormsConfig<TComponents, TSchemas>): ZodFormsConfig<TComponents, TSchemas>;
|
|
98
108
|
export declare function validateConfig(value: unknown, source?: string): ZodFormsConfig<Record<string, unknown>>;
|
|
99
109
|
export declare function resolveFieldConfig(globalFields: Record<string, FieldConfig> | undefined, schemaFields: Partial<Record<string, FieldConfig>> | undefined): Record<string, FieldConfig>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
// ─── Validation Schemas ───────────────────────────────────────────────
|
|
3
3
|
const nonEmptyStringSchema = z.string().trim().min(1);
|
|
4
|
-
const
|
|
4
|
+
const componentOverrideSchema = z
|
|
5
5
|
.object({
|
|
6
|
-
component: nonEmptyStringSchema,
|
|
7
|
-
render: z
|
|
8
|
-
.unknown()
|
|
9
|
-
.optional()
|
|
10
|
-
.refine((value) => value === undefined || typeof value === 'function'),
|
|
11
6
|
controlled: z.boolean().optional(),
|
|
12
7
|
propMap: z.record(z.string(), z.string()).optional()
|
|
13
8
|
})
|
|
14
|
-
.
|
|
9
|
+
.loose();
|
|
10
|
+
const componentsConfigSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
source: nonEmptyStringSchema,
|
|
13
|
+
preset: z.enum(['shadcn', 'unstyled']).optional(),
|
|
14
|
+
overrides: z.record(z.string(), componentOverrideSchema).optional()
|
|
15
|
+
})
|
|
16
|
+
.loose();
|
|
15
17
|
const fieldConfigSchema = z
|
|
16
18
|
.object({
|
|
17
|
-
|
|
19
|
+
component: nonEmptyStringSchema.optional(),
|
|
18
20
|
order: z.number().optional(),
|
|
19
21
|
hidden: z.boolean().optional(),
|
|
20
22
|
gridColumn: z.string().optional(),
|
|
@@ -22,13 +24,13 @@ const fieldConfigSchema = z
|
|
|
22
24
|
propMap: z.record(z.string(), z.string()).optional(),
|
|
23
25
|
section: z.string().optional()
|
|
24
26
|
})
|
|
25
|
-
.
|
|
27
|
+
.loose();
|
|
26
28
|
const fieldOverrideSchema = z
|
|
27
29
|
.object({
|
|
28
|
-
|
|
30
|
+
component: nonEmptyStringSchema,
|
|
29
31
|
props: z.record(z.string(), z.unknown()).optional()
|
|
30
32
|
})
|
|
31
|
-
.
|
|
33
|
+
.loose();
|
|
32
34
|
const defaultsSchema = z
|
|
33
35
|
.object({
|
|
34
36
|
mode: z.string().optional(),
|
|
@@ -38,7 +40,7 @@ const defaultsSchema = z
|
|
|
38
40
|
serverAction: z.boolean().optional(),
|
|
39
41
|
formProvider: z.boolean().optional()
|
|
40
42
|
})
|
|
41
|
-
.
|
|
43
|
+
.loose()
|
|
42
44
|
.optional();
|
|
43
45
|
const zodTypeConfigSchema = z
|
|
44
46
|
.object({
|
|
@@ -48,22 +50,20 @@ const zodTypeConfigSchema = z
|
|
|
48
50
|
serverAction: z.boolean().optional(),
|
|
49
51
|
fields: z.record(z.string(), fieldConfigSchema).optional()
|
|
50
52
|
})
|
|
51
|
-
.
|
|
53
|
+
.loose();
|
|
52
54
|
const configSchema = z
|
|
53
55
|
.object({
|
|
54
|
-
components:
|
|
55
|
-
preset: z.enum(['shadcn', 'unstyled']).optional(),
|
|
56
|
+
components: componentsConfigSchema,
|
|
56
57
|
overwrite: z.boolean().optional(),
|
|
57
58
|
include: z.array(z.string()).optional(),
|
|
58
59
|
exclude: z.array(z.string()).optional(),
|
|
59
60
|
types: z.array(z.string()).optional(),
|
|
60
|
-
fieldTypes: z.record(z.string(), componentEntrySchema),
|
|
61
61
|
formPrimitives: z.record(z.string(), nonEmptyStringSchema).optional(),
|
|
62
62
|
fields: z.record(z.string(), fieldOverrideSchema.or(fieldConfigSchema)).optional(),
|
|
63
63
|
defaults: defaultsSchema,
|
|
64
64
|
schemas: z.record(z.string(), zodTypeConfigSchema).optional()
|
|
65
65
|
})
|
|
66
|
-
.
|
|
66
|
+
.loose();
|
|
67
67
|
// ─── Error Formatting ─────────────────────────────────────────────────
|
|
68
68
|
function formatValidationError(error, source) {
|
|
69
69
|
const [issue] = error.issues;
|
|
@@ -76,22 +76,19 @@ function formatValidationError(error, source) {
|
|
|
76
76
|
return new Error(`${source} must be an object.`);
|
|
77
77
|
}
|
|
78
78
|
if (root === 'components') {
|
|
79
|
-
return new Error(`${source}.components must be a non-empty string.`);
|
|
80
|
-
}
|
|
81
|
-
if (root === 'fieldTypes') {
|
|
82
79
|
if (!entry) {
|
|
83
|
-
return new Error(`${source}.
|
|
80
|
+
return new Error(`${source}.components must be an object.`);
|
|
84
81
|
}
|
|
85
|
-
if (
|
|
86
|
-
return new Error(`${source}.
|
|
82
|
+
if (entry === 'source') {
|
|
83
|
+
return new Error(`${source}.components.source must be a non-empty string.`);
|
|
87
84
|
}
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return new Error(`${source}.
|
|
85
|
+
if (entry === 'overrides') {
|
|
86
|
+
if (!property) {
|
|
87
|
+
return new Error(`${source}.components.overrides must be an object when provided.`);
|
|
88
|
+
}
|
|
89
|
+
return new Error(`${source}.components.overrides.${property} must be an object.`);
|
|
93
90
|
}
|
|
94
|
-
return new Error(`${source}.
|
|
91
|
+
return new Error(`${source}.components.${entry} is invalid.`);
|
|
95
92
|
}
|
|
96
93
|
if (root === 'formPrimitives') {
|
|
97
94
|
if (!entry) {
|
|
@@ -106,8 +103,8 @@ function formatValidationError(error, source) {
|
|
|
106
103
|
if (!property) {
|
|
107
104
|
return new Error(`${source}.fields.${entry} must be an object.`);
|
|
108
105
|
}
|
|
109
|
-
if (property === '
|
|
110
|
-
return new Error(`${source}.fields.${entry}.
|
|
106
|
+
if (property === 'component') {
|
|
107
|
+
return new Error(`${source}.fields.${entry}.component must be a non-empty string.`);
|
|
111
108
|
}
|
|
112
109
|
if (property === 'props') {
|
|
113
110
|
return new Error(`${source}.fields.${entry}.props must be an object when provided.`);
|
|
@@ -154,35 +151,28 @@ function formatValidationError(error, source) {
|
|
|
154
151
|
}
|
|
155
152
|
return new Error(`${source} is invalid: ${issue.message}`);
|
|
156
153
|
}
|
|
157
|
-
// ─── Preset
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
Checkbox: { component: 'Checkbox' },
|
|
163
|
-
Switch: { component: 'Switch' },
|
|
164
|
-
DatePicker: { component: 'DatePicker' },
|
|
165
|
-
FileInput: { component: 'FileInput' }
|
|
166
|
-
};
|
|
167
|
-
export const DEFAULT_FIELD_TYPES = {
|
|
168
|
-
Input: { component: 'Input' },
|
|
169
|
-
Textarea: { component: 'Textarea' },
|
|
170
|
-
Select: { component: 'Select' },
|
|
171
|
-
Checkbox: { component: 'Checkbox' }
|
|
172
|
-
};
|
|
154
|
+
// ─── Preset Override Maps ─────────────────────────────────────────────
|
|
155
|
+
/** shadcn preset — no controlled components by default */
|
|
156
|
+
export const SHADCN_OVERRIDES = {};
|
|
157
|
+
/** Default/unstyled preset — no controlled components by default */
|
|
158
|
+
export const DEFAULT_OVERRIDES = {};
|
|
173
159
|
// ─── Public Functions ─────────────────────────────────────────────────
|
|
174
160
|
const PRESET_MAP = {
|
|
175
|
-
shadcn:
|
|
176
|
-
unstyled:
|
|
161
|
+
shadcn: SHADCN_OVERRIDES,
|
|
162
|
+
unstyled: DEFAULT_OVERRIDES
|
|
177
163
|
};
|
|
178
164
|
export function defineConfig(config) {
|
|
179
|
-
|
|
165
|
+
const preset = config.components.preset;
|
|
166
|
+
if (!preset) {
|
|
180
167
|
return config;
|
|
181
168
|
}
|
|
182
|
-
const base = PRESET_MAP[
|
|
169
|
+
const base = PRESET_MAP[preset];
|
|
183
170
|
return {
|
|
184
171
|
...config,
|
|
185
|
-
|
|
172
|
+
components: {
|
|
173
|
+
...config.components,
|
|
174
|
+
overrides: { ...base, ...config.components.overrides }
|
|
175
|
+
}
|
|
186
176
|
};
|
|
187
177
|
}
|
|
188
178
|
export function validateConfig(value, source = 'config') {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export type { FormField, FormFieldOption, FormFieldConstraints, FormProcessor, FormProcessorContext, FormMeta, FieldConfig, ProcessParams, WalkOptions, ZodFormRegistry } from './types.js';
|
|
2
|
-
export type {
|
|
3
|
-
export { defineConfig, validateConfig, resolveFieldConfig, normalizeConfig,
|
|
2
|
+
export type { ComponentOverride, ComponentPreset, ComponentsConfig, FormPrimitivesConfig, TypedFieldConfig, ZodFormsConfig, ZodTypeConfig, ConfigDefaults, StripIndexSignature } from './config.js';
|
|
3
|
+
export { defineConfig, validateConfig, resolveFieldConfig, normalizeConfig, SHADCN_OVERRIDES, DEFAULT_OVERRIDES } from './config.js';
|
|
4
4
|
export { inferLabel, joinPath, createBaseField, getEmptyDefault, normalizeFieldKey, collectFieldSections } from './utils.js';
|
|
5
5
|
export { walkSchema } from './walker.js';
|
|
6
6
|
export { builtinProcessors, createProcessors } from './registry.js';
|
|
7
|
+
export { registerDeep, registerFlat } from './register.js';
|
|
7
8
|
export * as processors from './processors/index.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// @zod-to-form/core — Public API
|
|
2
2
|
// All exports are named exports only (no default, no `export *`) for full tree-shakeability.
|
|
3
|
-
export { defineConfig, validateConfig, resolveFieldConfig, normalizeConfig,
|
|
3
|
+
export { defineConfig, validateConfig, resolveFieldConfig, normalizeConfig, SHADCN_OVERRIDES, DEFAULT_OVERRIDES } from './config.js';
|
|
4
4
|
export { inferLabel, joinPath, createBaseField, getEmptyDefault, normalizeFieldKey, collectFieldSections } from './utils.js';
|
|
5
5
|
export { walkSchema } from './walker.js';
|
|
6
6
|
export { builtinProcessors, createProcessors } from './registry.js';
|
|
7
|
+
export { registerDeep, registerFlat } from './register.js';
|
|
7
8
|
export * as processors from './processors/index.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,6FAA6F;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,6FAA6F;AA2B7F,OAAO,EACL,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC"}
|
package/dist/metadata.d.ts
CHANGED
|
@@ -5,5 +5,6 @@ export type ResolvedMetadata = FormMeta & {
|
|
|
5
5
|
examples?: unknown[];
|
|
6
6
|
deprecated?: boolean;
|
|
7
7
|
};
|
|
8
|
+
/** Merge global + form registry metadata for a schema. Form registry keys take precedence. */
|
|
8
9
|
export declare function resolveMetadata(schema: unknown, formRegistry?: ZodFormRegistry): ResolvedMetadata;
|
|
9
10
|
//# sourceMappingURL=metadata.d.ts.map
|
package/dist/metadata.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,8FAA8F;AAC9F,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAoBjG"}
|
package/dist/metadata.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { globalRegistry } from 'zod/v4/core';
|
|
2
|
+
/** Merge global + form registry metadata for a schema. Form registry keys take precedence. */
|
|
2
3
|
export function resolveMetadata(schema, formRegistry) {
|
|
3
|
-
|
|
4
|
+
// SAFETY: `as never` bridges untyped `schema` to the registry's generic constraint — callers always pass $ZodType-compatible values
|
|
5
|
+
const globalMeta = globalRegistry.get(schema);
|
|
6
|
+
// SAFETY: same as above — schema is $ZodType at runtime
|
|
4
7
|
const formMeta = formRegistry?.get(schema);
|
|
5
8
|
return {
|
|
6
9
|
title: globalMeta?.title,
|
package/dist/metadata.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAU7C,8FAA8F;AAC9F,MAAM,UAAU,eAAe,CAAC,MAAe,EAAE,YAA8B;IAC7E,oIAAoI;IACpI,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,MAAe,CAOxC,CAAC;IACd,wDAAwD;IACxD,MAAM,QAAQ,GAAG,YAAY,EAAE,GAAG,CAAC,MAAe,CAAyB,CAAC;IAE5E,OAAO;QACL,KAAK,EAAE,UAAU,EAAE,KAAK;QACxB,WAAW,EAAE,UAAU,EAAE,WAAW;QACpC,QAAQ,EAAE,UAAU,EAAE,QAAQ;QAC9B,UAAU,EAAE,UAAU,EAAE,UAAU;QAClC,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
export declare function getDef(schema: ZodType): Record<string, unknown>;
|
|
3
3
|
export declare function getShape(def: Record<string, unknown>): Record<string, ZodType>;
|
|
4
4
|
export declare function getBag(schema: ZodType): Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../../src/processors/_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../../src/processors/_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO/D;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAS9E;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO/D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processArray(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
|
|
4
4
|
export declare function processTuple(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/processors/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/processors/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlF,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAsBN;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAeN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processBoolean(schema: ZodType, ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
//# sourceMappingURL=boolean.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/processors/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/processors/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAKN"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export function processBoolean(schema, ctx, field, _params) {
|
|
2
2
|
const meta = ctx.formRegistry?.get(schema);
|
|
3
|
-
|
|
4
|
-
field.component = fieldType === 'switch' ? 'Switch' : 'Checkbox';
|
|
3
|
+
field.component = meta?.component ?? 'Checkbox';
|
|
5
4
|
field.required = true;
|
|
6
5
|
}
|
|
7
6
|
//# sourceMappingURL=boolean.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/processors/boolean.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAC5B,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,OAAsB;IAEtB,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/processors/boolean.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAC5B,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,OAAsB;IAEtB,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE3C,KAAK,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,UAAU,CAAC;IAChD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AACxB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processCrossRef(schema: ZodType, ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
//# sourceMappingURL=cross-ref.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-ref.d.ts","sourceRoot":"","sources":["../../src/processors/cross-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cross-ref.d.ts","sourceRoot":"","sources":["../../src/processors/cross-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CASN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processDate(_schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
//# sourceMappingURL=date.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/processors/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/processors/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElF,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAEN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processEnum(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
export declare function processLiteral(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/processors/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/processors/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAmB,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsBnG,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CASN;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAQN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processFallback(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
//# sourceMappingURL=fallback.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/processors/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/processors/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQlF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAgBN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processFile(_schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
//# sourceMappingURL=file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/processors/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/processors/file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElF,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAEN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processNumber(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
//# sourceMappingURL=number.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/processors/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/processors/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAwCN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processObject(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
|
|
4
4
|
export declare function processIntersection(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/processors/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/processors/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBlF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAON;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAsBN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processString(schema: ZodType, ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
4
4
|
export declare function processTemplateLiteral(schema: ZodType, _ctx: FormProcessorContext, field: FormField, _params: ProcessParams): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/processors/string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/processors/string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIlF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAsCN;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,aAAa,GACrB,IAAI,CAQN"}
|
|
@@ -3,7 +3,6 @@ import { getDef, getBag } from './_utils.js';
|
|
|
3
3
|
export function processString(schema, ctx, field, _params) {
|
|
4
4
|
const bag = getBag(schema);
|
|
5
5
|
const meta = ctx.formRegistry?.get(schema);
|
|
6
|
-
const fieldType = meta?.fieldType?.toLowerCase();
|
|
7
6
|
const format = typeof bag['format'] === 'string' ? bag['format'] : undefined;
|
|
8
7
|
const minimum = typeof bag['minimum'] === 'number' ? bag['minimum'] : undefined;
|
|
9
8
|
const maximum = typeof bag['maximum'] === 'number' ? bag['maximum'] : undefined;
|
|
@@ -12,7 +11,7 @@ export function processString(schema, ctx, field, _params) {
|
|
|
12
11
|
const pattern = patternsSet instanceof Set && patternsSet.size > 0
|
|
13
12
|
? [...patternsSet][0].source
|
|
14
13
|
: undefined;
|
|
15
|
-
field.component =
|
|
14
|
+
field.component = meta?.component ?? 'Input';
|
|
16
15
|
field.props = {
|
|
17
16
|
...field.props,
|
|
18
17
|
type: format === 'email' || format === 'url' ? format : 'text'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/processors/string.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,aAAa,CAC3B,MAAe,EACf,GAAyB,EACzB,KAAgB,EAChB,OAAsB;IAEtB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/processors/string.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processUnion(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
|
|
4
4
|
//# sourceMappingURL=union.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../src/processors/union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../src/processors/union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAmB,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA4BnG,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CA2BN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodType as ZodType } from 'zod/v4/core';
|
|
2
2
|
import type { FormField, FormProcessorContext, ProcessParams } from '../types.js';
|
|
3
3
|
export declare function processOptional(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
|
|
4
4
|
export declare function processNullable(schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../src/processors/wrappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../src/processors/wrappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqBlF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAQN;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAQN;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAcN;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAQN;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAON;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,aAAa,GACpB,IAAI,CAyBN"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { $ZodRegistry, $ZodType } from 'zod/v4/core';
|
|
2
|
+
import type { FieldConfig } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register a schema and all its nested fields in a registry using a
|
|
5
|
+
* path-structured {@link FieldConfig} tree.
|
|
6
|
+
*
|
|
7
|
+
* Only the flat metadata fields (`fieldType`, `order`, `hidden`, `section`,
|
|
8
|
+
* `props`, etc.) are passed to `registry.add()` for each schema. The
|
|
9
|
+
* structural keys `fields` and `arrayItems` are used purely to drive the
|
|
10
|
+
* recursive walk and are never stored in the registry.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const formRegistry = z.registry<FormMeta>();
|
|
15
|
+
*
|
|
16
|
+
* const schema = z.object({
|
|
17
|
+
* name: z.string(),
|
|
18
|
+
* address: z.object({ street: z.string(), city: z.string() }),
|
|
19
|
+
* tags: z.array(z.string()),
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* registerDeep(formRegistry, schema, {
|
|
23
|
+
* component: 'form',
|
|
24
|
+
* fields: {
|
|
25
|
+
* name: { component: 'Input', order: 0 },
|
|
26
|
+
* address: {
|
|
27
|
+
* component: 'Fieldset',
|
|
28
|
+
* fields: {
|
|
29
|
+
* street: { component: 'Input' },
|
|
30
|
+
* city: { component: 'Input', hidden: true },
|
|
31
|
+
* },
|
|
32
|
+
* },
|
|
33
|
+
* tags: {
|
|
34
|
+
* component: 'ArrayField',
|
|
35
|
+
* arrayItems: { component: 'Input' },
|
|
36
|
+
* },
|
|
37
|
+
* },
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function registerDeep<S extends $ZodType, Meta extends object>(registry: $ZodRegistry<Meta>, schema: S, config: FieldConfig<S>): void;
|
|
42
|
+
/**
|
|
43
|
+
* Register flat dot-path field configs against a schema's registry.
|
|
44
|
+
*
|
|
45
|
+
* Typically called with the merged output of `resolveFieldConfig()`,
|
|
46
|
+
* a flat `Record<string, FieldConfig>` keyed by dot-paths like
|
|
47
|
+
* `"name"`, `"address.street"`, `"tags[]"` — and resolves each path against
|
|
48
|
+
* the schema structure, calling `registry.add()` for the target schema node.
|
|
49
|
+
*
|
|
50
|
+
* This bridges the existing flat config format (used by CLI and
|
|
51
|
+
* `ZodFormsConfig.fields`) into the registry so that `walkSchema` can
|
|
52
|
+
* consume it uniformly.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* const formRegistry = z.registry<FormMeta>();
|
|
57
|
+
* const schema = z.object({
|
|
58
|
+
* name: z.string(),
|
|
59
|
+
* address: z.object({ street: z.string(), city: z.string() }),
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* registerFlat(formRegistry, schema, {
|
|
63
|
+
* name: { component: 'Input', order: 0 },
|
|
64
|
+
* 'address.street': { component: 'Input' },
|
|
65
|
+
* 'address.city': { component: 'Input', hidden: true },
|
|
66
|
+
* });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function registerFlat<Meta extends object>(registry: $ZodRegistry<Meta>, schema: $ZodType, fields: Record<string, FieldConfig>): void;
|
|
70
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAY,MAAM,aAAa,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,SAAS,MAAM,EAClE,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,EAC5B,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GACrB,IAAI,CA+CN;AAiDD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,IAAI,SAAS,MAAM,EAC9C,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,EAC5B,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAClC,IAAI,CAqBN"}
|
package/dist/register.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { getDef, getShape } from './processors/_utils.js';
|
|
2
|
+
// Structural keys used to drive recursive traversal in registerDeep.
|
|
3
|
+
// These are not field metadata, so they are stripped before calling registry.add().
|
|
4
|
+
const TRAVERSAL_KEYS = new Set(['fields', 'arrayItems']);
|
|
5
|
+
/**
|
|
6
|
+
* Extract only the flat metadata keys from a config object, stripping
|
|
7
|
+
* traversal directives (`fields`, `arrayItems`). Returns `undefined`
|
|
8
|
+
* when no metadata keys remain.
|
|
9
|
+
*/
|
|
10
|
+
function stripTraversalKeys(config) {
|
|
11
|
+
const flatMeta = {};
|
|
12
|
+
for (const [key, value] of Object.entries(config)) {
|
|
13
|
+
if (!TRAVERSAL_KEYS.has(key)) {
|
|
14
|
+
flatMeta[key] = value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return Object.keys(flatMeta).length > 0 ? flatMeta : undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Register a schema and all its nested fields in a registry using a
|
|
21
|
+
* path-structured {@link FieldConfig} tree.
|
|
22
|
+
*
|
|
23
|
+
* Only the flat metadata fields (`fieldType`, `order`, `hidden`, `section`,
|
|
24
|
+
* `props`, etc.) are passed to `registry.add()` for each schema. The
|
|
25
|
+
* structural keys `fields` and `arrayItems` are used purely to drive the
|
|
26
|
+
* recursive walk and are never stored in the registry.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const formRegistry = z.registry<FormMeta>();
|
|
31
|
+
*
|
|
32
|
+
* const schema = z.object({
|
|
33
|
+
* name: z.string(),
|
|
34
|
+
* address: z.object({ street: z.string(), city: z.string() }),
|
|
35
|
+
* tags: z.array(z.string()),
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* registerDeep(formRegistry, schema, {
|
|
39
|
+
* component: 'form',
|
|
40
|
+
* fields: {
|
|
41
|
+
* name: { component: 'Input', order: 0 },
|
|
42
|
+
* address: {
|
|
43
|
+
* component: 'Fieldset',
|
|
44
|
+
* fields: {
|
|
45
|
+
* street: { component: 'Input' },
|
|
46
|
+
* city: { component: 'Input', hidden: true },
|
|
47
|
+
* },
|
|
48
|
+
* },
|
|
49
|
+
* tags: {
|
|
50
|
+
* component: 'ArrayField',
|
|
51
|
+
* arrayItems: { component: 'Input' },
|
|
52
|
+
* },
|
|
53
|
+
* },
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function registerDeep(registry, schema, config) {
|
|
58
|
+
// SAFETY: FieldConfig<S> is a branded intersection — cast to plain record for dynamic key iteration
|
|
59
|
+
const raw = config;
|
|
60
|
+
const flatMeta = stripTraversalKeys(raw);
|
|
61
|
+
if (flatMeta) {
|
|
62
|
+
// SAFETY: flatMeta is built from the user's FieldConfig which matches Meta at runtime
|
|
63
|
+
registry.add(schema, flatMeta);
|
|
64
|
+
}
|
|
65
|
+
// ── Object shape ───────────────────────────────────────────────────
|
|
66
|
+
const fields = raw['fields'];
|
|
67
|
+
if (fields && typeof fields === 'object') {
|
|
68
|
+
const shape = getShape(getDef(schema));
|
|
69
|
+
const shapeKeys = new Set(Object.keys(shape));
|
|
70
|
+
for (const [key, childSchema] of Object.entries(shape)) {
|
|
71
|
+
// SAFETY: fields is Record<string, FieldConfig> at runtime
|
|
72
|
+
const childConfig = fields[key];
|
|
73
|
+
if (childConfig) {
|
|
74
|
+
// SAFETY: childSchema is $ZodType from the shape — cast needed for recursive generic
|
|
75
|
+
registerDeep(registry, childSchema, childConfig);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Warn about config keys that don't match any schema field
|
|
79
|
+
for (const configKey of Object.keys(fields)) {
|
|
80
|
+
if (!shapeKeys.has(configKey)) {
|
|
81
|
+
console.warn(`[zod-to-form] registerDeep: config references field "${configKey}" ` +
|
|
82
|
+
`which does not exist in the schema shape. Available fields: ${[...shapeKeys].join(', ')}. ` +
|
|
83
|
+
`This entry will be ignored.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// ── Array element ──────────────────────────────────────────────────
|
|
88
|
+
const arrayItems = raw['arrayItems'];
|
|
89
|
+
if (arrayItems) {
|
|
90
|
+
// SAFETY: element is $ZodType when schema is a ZodArray — undefined otherwise (safely guarded)
|
|
91
|
+
const element = getDef(schema)['element'];
|
|
92
|
+
if (element) {
|
|
93
|
+
// SAFETY: recursive generic requires cast — element is $ZodType at runtime
|
|
94
|
+
registerDeep(registry, element, arrayItems);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a dot-path (e.g. `"address.street"` or `"tags[]"`) against a
|
|
100
|
+
* schema, returning the leaf `$ZodType` that the path points to.
|
|
101
|
+
*
|
|
102
|
+
* Supported path segments:
|
|
103
|
+
* - `key` — object shape lookup
|
|
104
|
+
* - `key[]` — array element lookup (strips the `[]` suffix, descends into element)
|
|
105
|
+
* - `N` — numeric segment, descends into the array element of the current schema
|
|
106
|
+
*/
|
|
107
|
+
function resolveSchemaPath(schema, path) {
|
|
108
|
+
const segments = path.split('.');
|
|
109
|
+
let current = schema;
|
|
110
|
+
for (const segment of segments) {
|
|
111
|
+
// Handle trailing `[]` — means "descend into the array element"
|
|
112
|
+
const arrayBracket = segment.endsWith('[]');
|
|
113
|
+
const key = arrayBracket ? segment.slice(0, -2) : segment;
|
|
114
|
+
// Numeric segment → descend into the array element of the current schema
|
|
115
|
+
if (/^\d+$/.test(key)) {
|
|
116
|
+
// SAFETY: element is $ZodType when current is a ZodArray — undefined otherwise
|
|
117
|
+
const element = getDef(current)['element'];
|
|
118
|
+
if (!element)
|
|
119
|
+
return undefined;
|
|
120
|
+
current = element;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Named key → object shape lookup
|
|
124
|
+
if (key) {
|
|
125
|
+
const shape = getShape(getDef(current));
|
|
126
|
+
const child = shape[key];
|
|
127
|
+
if (!child)
|
|
128
|
+
return undefined;
|
|
129
|
+
current = child;
|
|
130
|
+
}
|
|
131
|
+
// If the segment had `[]`, descend into the array element
|
|
132
|
+
if (arrayBracket) {
|
|
133
|
+
// SAFETY: element is $ZodType when current is a ZodArray — undefined otherwise
|
|
134
|
+
const element = getDef(current)['element'];
|
|
135
|
+
if (!element)
|
|
136
|
+
return undefined;
|
|
137
|
+
current = element;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return current;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Register flat dot-path field configs against a schema's registry.
|
|
144
|
+
*
|
|
145
|
+
* Typically called with the merged output of `resolveFieldConfig()`,
|
|
146
|
+
* a flat `Record<string, FieldConfig>` keyed by dot-paths like
|
|
147
|
+
* `"name"`, `"address.street"`, `"tags[]"` — and resolves each path against
|
|
148
|
+
* the schema structure, calling `registry.add()` for the target schema node.
|
|
149
|
+
*
|
|
150
|
+
* This bridges the existing flat config format (used by CLI and
|
|
151
|
+
* `ZodFormsConfig.fields`) into the registry so that `walkSchema` can
|
|
152
|
+
* consume it uniformly.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* const formRegistry = z.registry<FormMeta>();
|
|
157
|
+
* const schema = z.object({
|
|
158
|
+
* name: z.string(),
|
|
159
|
+
* address: z.object({ street: z.string(), city: z.string() }),
|
|
160
|
+
* });
|
|
161
|
+
*
|
|
162
|
+
* registerFlat(formRegistry, schema, {
|
|
163
|
+
* name: { component: 'Input', order: 0 },
|
|
164
|
+
* 'address.street': { component: 'Input' },
|
|
165
|
+
* 'address.city': { component: 'Input', hidden: true },
|
|
166
|
+
* });
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
export function registerFlat(registry, schema, fields) {
|
|
170
|
+
for (const [path, config] of Object.entries(fields)) {
|
|
171
|
+
if (!config)
|
|
172
|
+
continue;
|
|
173
|
+
const target = resolveSchemaPath(schema, path);
|
|
174
|
+
if (!target) {
|
|
175
|
+
console.warn(`[zod-to-form] registerFlat: path "${path}" does not resolve to any ` +
|
|
176
|
+
`schema node and will be ignored. Check for typos or ensure the schema ` +
|
|
177
|
+
`structure matches the configured paths.`);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
// Strip traversal keys before storing in registry
|
|
181
|
+
const flatMeta = stripTraversalKeys(config);
|
|
182
|
+
if (flatMeta) {
|
|
183
|
+
// SAFETY: flatMeta is built from the user's FieldConfig which matches Meta at runtime
|
|
184
|
+
registry.add(target, flatMeta);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ZodType } from 'zod';
|
|
1
|
+
import type { $ZodArray, $ZodObject, $ZodRegistry, $ZodType } from 'zod/v4/core';
|
|
2
2
|
export interface FormFieldOption {
|
|
3
3
|
value: string | number;
|
|
4
4
|
label: string;
|
|
@@ -53,9 +53,9 @@ export interface FormField {
|
|
|
53
53
|
/** Custom render function from FormMeta (runtime only, not serialisable) */
|
|
54
54
|
render?: (field: FormField, props: Record<string, unknown>) => unknown;
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
|
|
56
|
+
type FieldConfigBase = {
|
|
57
|
+
/** Component name override, e.g. "Textarea", "Switch", "Combobox" */
|
|
58
|
+
component?: string;
|
|
59
59
|
/** Display order override */
|
|
60
60
|
order?: number;
|
|
61
61
|
/** Hide field from UI (remains in form state) */
|
|
@@ -64,7 +64,7 @@ export interface FieldConfig {
|
|
|
64
64
|
gridColumn?: string;
|
|
65
65
|
/** Arbitrary field metadata props forwarded by processors */
|
|
66
66
|
props?: Record<string, unknown>;
|
|
67
|
-
/** Per-field prop mapping override (merges over
|
|
67
|
+
/** Per-field prop mapping override (merges over ComponentOverride.propMap) */
|
|
68
68
|
propMap?: Record<string, string>;
|
|
69
69
|
/**
|
|
70
70
|
* Group this field into a named section component.
|
|
@@ -73,7 +73,20 @@ export interface FieldConfig {
|
|
|
73
73
|
* The section component reads its fields from FormProvider context.
|
|
74
74
|
*/
|
|
75
75
|
section?: string;
|
|
76
|
-
}
|
|
76
|
+
};
|
|
77
|
+
type FieldConfigExtras<T extends $ZodType> = $ZodType extends T ? {
|
|
78
|
+
fields?: Record<string, FieldConfig>;
|
|
79
|
+
arrayItems?: FieldConfig;
|
|
80
|
+
} : T extends $ZodObject<infer Shape> ? {
|
|
81
|
+
fields?: {
|
|
82
|
+
[K in keyof Shape]?: FieldConfig<Shape[K]>;
|
|
83
|
+
};
|
|
84
|
+
arrayItems?: never;
|
|
85
|
+
} : T extends $ZodArray<infer Item> ? {
|
|
86
|
+
arrayItems?: FieldConfig<Item & $ZodType>;
|
|
87
|
+
fields?: never;
|
|
88
|
+
} : Record<never, never>;
|
|
89
|
+
export type FieldConfig<T extends $ZodType = $ZodType> = FieldConfigBase & FieldConfigExtras<T>;
|
|
77
90
|
export interface FormMeta extends FieldConfig {
|
|
78
91
|
/** Custom render function (runtime only, ignored in codegen) */
|
|
79
92
|
render?: (field: FormField, props: unknown) => unknown;
|
|
@@ -93,8 +106,8 @@ export interface FormProcessorContext {
|
|
|
93
106
|
formRegistry?: ZodFormRegistry;
|
|
94
107
|
/** Current field path stack */
|
|
95
108
|
path: string[];
|
|
96
|
-
/**
|
|
97
|
-
seen: WeakSet
|
|
109
|
+
/** Tracks visited schema objects — prevents infinite loops from recursive schemas and avoids re-processing the same reference */
|
|
110
|
+
seen: WeakSet<$ZodType>;
|
|
98
111
|
/** Maximum recursion depth (default: 5) */
|
|
99
112
|
maxDepth: number;
|
|
100
113
|
/** Current recursion depth */
|
|
@@ -104,18 +117,11 @@ export interface FormProcessorContext {
|
|
|
104
117
|
* Provided by the walker for use in nesting processors (object, array, union).
|
|
105
118
|
* Undefined only in unit-test contexts where nesting is not being tested.
|
|
106
119
|
*/
|
|
107
|
-
processChild?: (schema: ZodType, key: string) => FormField;
|
|
120
|
+
processChild?: (schema: $ZodType, key: string) => FormField;
|
|
108
121
|
}
|
|
109
|
-
export type FormProcessor = (schema: ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams) => void;
|
|
110
|
-
/**
|
|
111
|
-
|
|
112
|
-
* with FormMeta as the metadata shape.
|
|
113
|
-
* Consumers create this via: `const formRegistry = z.registry<FormMeta>()`
|
|
114
|
-
*/
|
|
115
|
-
export type ZodFormRegistry = {
|
|
116
|
-
get(schema: ZodType): FormMeta | undefined;
|
|
117
|
-
has(schema: ZodType): boolean;
|
|
118
|
-
};
|
|
122
|
+
export type FormProcessor = (schema: $ZodType, ctx: FormProcessorContext, field: FormField, params: ProcessParams) => void;
|
|
123
|
+
/** Zod v4 registry parameterized with FormMeta. Create via `z.registry<FormMeta>()`. */
|
|
124
|
+
export type ZodFormRegistry = $ZodRegistry<FormMeta>;
|
|
119
125
|
export interface WalkOptions {
|
|
120
126
|
/** Custom form registry for metadata annotations */
|
|
121
127
|
formRegistry?: ZodFormRegistry;
|
|
@@ -124,4 +130,5 @@ export interface WalkOptions {
|
|
|
124
130
|
/** Maximum recursion depth for lazy/recursive schemas (default: 5) */
|
|
125
131
|
maxDepth?: number;
|
|
126
132
|
}
|
|
133
|
+
export {};
|
|
127
134
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/walker.d.ts
CHANGED
package/dist/walker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AAMvD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwEzD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,CA6B9E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zod-to-form/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Schema walker and processor registry for Zod v4 form generation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/pradeepmouli/zod-to-form#readme",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"zod": "^4.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
+
"type-fest": "^5.4.4",
|
|
39
40
|
"zod": "^4.3.6"
|
|
40
41
|
},
|
|
41
42
|
"scripts": {
|