From fc1dbd37f163d9c738a2592de13c453066ee96ea Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Sun, 9 Aug 2026 09:36:49 +0200 Subject: [PATCH] fix: accept legacy dynamic sections --- packages/validation/src/board.spec.ts | 12 ++++++++++-- packages/validation/src/shared.ts | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/validation/src/board.spec.ts b/packages/validation/src/board.spec.ts index c8220f445..8a6e8b37c 100644 --- a/packages/validation/src/board.spec.ts +++ b/packages/validation/src/board.spec.ts @@ -44,8 +44,16 @@ describe("section behavior validation", () => { }); }); - it.each(["category", "dynamic"])("rejects the legacy %s kind", (kind) => { - expect(() => sectionSchema.parse({ id: "legacy", kind, layouts: [] })).toThrow(); + it("normalizes the legacy dynamic kind to a container", () => { + expect(sectionSchema.parse({ id: "legacy", kind: "dynamic", layouts: [] })).toMatchObject({ + id: "legacy", + kind: "container", + layouts: [], + }); + }); + + it("rejects the legacy category kind", () => { + expect(() => sectionSchema.parse({ id: "legacy", kind: "category", layouts: [] })).toThrow(); }); it.each([ diff --git a/packages/validation/src/shared.ts b/packages/validation/src/shared.ts index cd7ec8ac3..6a6a3e92d 100644 --- a/packages/validation/src/shared.ts +++ b/packages/validation/src/shared.ts @@ -93,4 +93,8 @@ const containerSectionSchema = z.object({ ), }); -export const sectionSchema = z.union([emptySectionSchema, containerSectionSchema]); +const legacyDynamicSectionSchema = containerSectionSchema + .extend({ kind: z.literal("dynamic") }) + .transform((section) => ({ ...section, kind: "container" as const })); + +export const sectionSchema = z.union([emptySectionSchema, containerSectionSchema, legacyDynamicSectionSchema]);