Skip to content

Commit f4b0c8a

Browse files
committed
fix: make default-field filter recursive for nested objects
1 parent 81e0e9f commit f4b0c8a

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

scripts/generate-schema.mjs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,23 @@ const { AgentCoreProjectSpecSchema } = await import('../dist/schema/schemas/agen
1717

1818
const schema = z.toJSONSchema(AgentCoreProjectSpecSchema, { target: 'draft-07' });
1919

20-
// Fields with defaults should not be required — Zod's toJSONSchema marks them required anyway
21-
if (schema.required && schema.properties) {
22-
schema.required = schema.required.filter(field => !('default' in schema.properties[field]));
20+
// Fields with defaults should not be required — Zod's toJSONSchema marks them required anyway.
21+
// Walk the entire schema tree so nested objects are fixed too.
22+
function stripDefaultsFromRequired(node) {
23+
if (typeof node !== 'object' || node === null) return;
24+
if (Array.isArray(node)) {
25+
node.forEach(stripDefaultsFromRequired);
26+
return;
27+
}
28+
if (Array.isArray(node.required) && node.properties) {
29+
node.required = node.required.filter(field => !('default' in (node.properties[field] ?? {})));
30+
if (node.required.length === 0) delete node.required;
31+
}
32+
for (const value of Object.values(node)) {
33+
stripDefaultsFromRequired(value);
34+
}
2335
}
36+
stripDefaultsFromRequired(schema);
2437

2538
mkdirSync(dirname(outPath), { recursive: true });
2639
writeFileSync(outPath, JSON.stringify(schema, null, 2) + '\n');

0 commit comments

Comments
 (0)