export const getFormMetadata = (form: z.SomeZodObject) => {
const fields: FieldDefinition[] = [];
for (const name of Object.keys(form.shape)) {
const data = form.shape[name]._def as SupportedZodDef;
const commonProperties = {
name,
description: data.description,
required: data?.typeName !== ZodFirstPartyTypeKind.ZodOptional,
};
const type =
(data as ZodOptionalDef)?.innerType?._def?.typeName ?? data.typeName;
switch (type) {
case ZodFirstPartyTypeKind.ZodString:
fields.push({ ...commonProperties, type: "String" });
break;
case ZodFirstPartyTypeKind.ZodEnum:
fields.push({
...commonProperties,
type: "Enum",
values: (data as ZodEnumDef).values,
});
break;
case ZodFirstPartyTypeKind.ZodBoolean:
fields.push({ ...commonProperties, type: "Boolean" });
break;
default:
throw new Error(`Unsupported zod type: ${data.typeName}`);
}
}
return fields;
};
export const getFormMetadata = (form: z.SomeZodObject) => {
const fields: FieldDefinition[] = [];
for (const name of Object.keys(form.shape)) {
const data = form.shape[name]._def as SupportedZodDef;
const commonProperties = {
name,
description: data.description,
required: data?.typeName !== ZodFirstPartyTypeKind.ZodOptional,
};
const type =
(data as ZodOptionalDef)?.innerType?._def?.typeName ?? data.typeName;
switch (type) {
case ZodFirstPartyTypeKind.ZodString:
fields.push({ ...commonProperties, type: "String" });
break;
case ZodFirstPartyTypeKind.ZodEnum:
fields.push({
...commonProperties,
type: "Enum",
values: (data as ZodEnumDef).values,
});
break;
case ZodFirstPartyTypeKind.ZodBoolean:
fields.push({ ...commonProperties, type: "Boolean" });
break;
default:
throw new Error(`Unsupported zod type: ${data.typeName}`);
}
}
return fields;
};