diff --git a/js/dev/types.ts b/js/dev/types.ts index 6a8684593..da992efea 100644 --- a/js/dev/types.ts +++ b/js/dev/types.ts @@ -109,7 +109,7 @@ export type SerializedParametersContainer = z.infer< >; export const evaluatorDefinitionSchema = z.object({ - parameters: serializedParametersContainerSchema.optional(), + parameters: serializedParametersContainerSchema.nullish(), scores: z.array(z.object({ name: z.string() })).optional(), classifiers: z.array(z.object({ name: z.string() })).optional(), }); diff --git a/js/src/zod/zod-v3-serialization.test.ts b/js/src/zod/zod-v3-serialization.test.ts index 826188421..c4d1097d2 100644 --- a/js/src/zod/zod-v3-serialization.test.ts +++ b/js/src/zod/zod-v3-serialization.test.ts @@ -19,7 +19,10 @@ import { serializeEvalParametersToStaticParametersSchema, serializeRemoteEvalParametersContainer, } from "../framework2"; -import { serializedParametersContainerSchema } from "../../dev/types"; +import { + serializedParametersContainerSchema, + evaluatorDefinitionSchema, +} from "../../dev/types"; // Detect which zod version is installed by checking for v4-specific properties function getInstalledZodVersion(): 3 | 4 { const testSchema = zodModule.z.string(); @@ -199,3 +202,33 @@ describe("serializedParametersContainerSchema parsing", () => { expect(result.success).toBe(true); }); }); + +describe("evaluatorDefinitionSchema parameters nullish", () => { + test("allows parameters: null", () => { + const result = evaluatorDefinitionSchema.safeParse({ + parameters: null, + }); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.parameters).toBeNull(); + } + }); + + test("allows parameters: undefined", () => { + const result = evaluatorDefinitionSchema.safeParse({ + parameters: undefined, + }); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.parameters).toBeUndefined(); + } + }); + + test("allows parameters omitted entirely", () => { + const result = evaluatorDefinitionSchema.safeParse({}); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.parameters).toBeUndefined(); + } + }); +});