File size: 719 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import { z } from 'zod';
export function toInputJsonSchema(schema: z.ZodType): Record<string, unknown> {
const jsonSchema = z.toJSONSchema(schema, {
target: 'draft-7',
io: 'input',
});
closeObjectNodes(jsonSchema);
return jsonSchema;
}
function closeObjectNodes(value: unknown): void {
if (Array.isArray(value)) {
for (const item of value) closeObjectNodes(item);
return;
}
if (typeof value !== 'object' || value === null) return;
const node = value as Record<string, unknown>;
if (node['type'] === 'object' && node['additionalProperties'] === undefined) {
node['additionalProperties'] = false;
}
for (const child of Object.values(node)) {
closeObjectNodes(child);
}
}
|