UNPKG

@copilotkit/shared

Version:

<div align="center"> <a href="https://copilotkit.ai" target="_blank"> <img src="https://github.com/copilotkit/copilotkit/raw/main/assets/banner.png" alt="CopilotKit Logo"> </a>

140 lines (139 loc) 4.76 kB
import { convertJsonSchemaToZodSchema } from "../chunk-JP2M4U4G.mjs"; // src/utils/json-schema.test.ts import { z } from "zod"; import { zodToJsonSchema } from "zod-to-json-schema"; describe("convertJsonSchemaToZodSchema", () => { it("should convert a simple JSON schema to a Zod schema", () => { const jsonSchema = { type: "object", properties: { name: { type: "string" }, age: { type: "number" } }, required: ["name", "age"] }; const expectedSchema = z.object({ name: z.string(), age: z.number() }); const result = convertJsonSchemaToZodSchema(jsonSchema, true); const resultSchemaJson = zodToJsonSchema(result); const expectedSchemaJson = zodToJsonSchema(expectedSchema); expect(resultSchemaJson).toStrictEqual(expectedSchemaJson); }); it("should convert a JSON schema with nested objects to a Zod schema", () => { const jsonSchema = { type: "object", properties: { name: { type: "string" }, address: { type: "object", properties: { street: { type: "string" }, city: { type: "string" } }, required: ["street", "city"] } }, required: ["name", "address"] }; const expectedSchema = z.object({ name: z.string(), address: z.object({ street: z.string(), city: z.string() }) }); const result = convertJsonSchemaToZodSchema(jsonSchema, true); const resultSchemaJson = zodToJsonSchema(result); const expectedSchemaJson = zodToJsonSchema(expectedSchema); expect(resultSchemaJson).toStrictEqual(expectedSchemaJson); }); it("should convert a JSON schema with arrays to a Zod schema", () => { const jsonSchema = { type: "object", properties: { names: { type: "array", items: { type: "string" } } }, required: ["names"] }; const expectedSchema = z.object({ names: z.array(z.string()) }); const result = convertJsonSchemaToZodSchema(jsonSchema, true); const resultSchemaJson = zodToJsonSchema(result); const expectedSchemaJson = zodToJsonSchema(expectedSchema); expect(resultSchemaJson).toStrictEqual(expectedSchemaJson); }); it("should convert a JSON schema with optional properties to a Zod schema", () => { const jsonSchema = { type: "object", properties: { name: { type: "string" }, age: { type: "number", required: false } } }; const expectedSchema = z.object({ name: z.string().optional(), age: z.number().optional() }).optional(); const result = convertJsonSchemaToZodSchema(jsonSchema, false); console.log(convertJsonSchemaToZodSchema(jsonSchema, false)); const resultSchemaJson = zodToJsonSchema(result); const expectedSchemaJson = zodToJsonSchema(expectedSchema); expect(resultSchemaJson).toStrictEqual(expectedSchemaJson); }); it("should convert a JSON schema with different types to a Zod schema", () => { const jsonSchema = { type: "object", properties: { name: { type: "string" }, age: { type: "number" }, isAdmin: { type: "boolean" } }, required: ["name", "age", "isAdmin"] }; const expectedSchema = z.object({ name: z.string(), age: z.number(), isAdmin: z.boolean() }); const result = convertJsonSchemaToZodSchema(jsonSchema, true); const resultSchemaJson = zodToJsonSchema(result); const expectedSchemaJson = zodToJsonSchema(expectedSchema); expect(resultSchemaJson).toStrictEqual(expectedSchemaJson); }); it("should handle edge case where JSON schema has no properties", () => { const jsonSchema = { type: "object" }; const expectedSchema = z.object({}); const result = convertJsonSchemaToZodSchema(jsonSchema, true); const resultSchemaJson = zodToJsonSchema(result); const expectedSchemaJson = zodToJsonSchema(expectedSchema); expect(resultSchemaJson).toStrictEqual(expectedSchemaJson); }); it("should handle edge case where JSON schema has no required properties", () => { const jsonSchema = { type: "object", properties: { name: { type: "string" }, age: { type: "number" } } }; const expectedSchema = z.object({ name: z.string().optional(), age: z.number().optional() }).optional(); const result = convertJsonSchemaToZodSchema(jsonSchema, false); const resultSchemaJson = zodToJsonSchema(result); const expectedSchemaJson = zodToJsonSchema(expectedSchema); expect(resultSchemaJson).toStrictEqual(expectedSchemaJson); }); }); //# sourceMappingURL=json-schema.test.mjs.map