UNPKG

synthex

Version:

Type-safe LLM response simulation with streaming & error injection

88 lines (87 loc) 3 kB
describe("types", () => { it("should type-check", () => { expect(true).toBe(true); }); }); import { s, MockGenerator, TypeInference } from "../src/index"; const userSchema = s .object({ id: s.uuid().required(), name: s.string().required(), email: s.email().required(), age: s.number().optional(), isActive: s.boolean().required(), tags: s.array(s.string()).min(1).max(5), profile: s.object({ bio: s.string().max(200), website: s.url(), }), role: s.enum(["admin", "user", "moderator"]), createdAt: s.date().format("date-time"), }) .build("UserSchema", "1.0.0"); // eslint-disable-next-line @typescript-eslint/no-unused-vars const _user = { id: "abc", name: "Test", email: "test@example.com", isActive: true, tags: ["a"], profile: { bio: "b", website: "https://a.com" }, role: "admin", createdAt: "2025-01-01T00:00:00Z", age: 42, }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _tsType = TypeInference.inferType(userSchema); // $ExpectType string // @ts-expect-no-error const _generator = new MockGenerator({ seed: 1 }); const _response = _generator.generate(userSchema); // $ExpectType User // eslint-disable-next-line @typescript-eslint/no-unused-vars const _data = _response.data; // @ts-expect-error Missing required fields // eslint-disable-next-line @typescript-eslint/no-unused-vars const _badUser = { id: "abc" }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _badUser2 = { // @ts-expect-error Wrong type: id should be string id: 123, name: "Test", email: "a", isActive: true, tags: [], profile: { bio: "", website: "" }, role: "admin", createdAt: "", }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _extendedSchema = s .object({ foo: s.string().required() }) .extend({ bar: s.number().optional() }) .build("X"); // @ts-expect-error TS limitation: bar is optional but required in intersection // eslint-disable-next-line @typescript-eslint/no-unused-vars const _ext = { foo: "a", bar: undefined }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _unionSchema = s.union([s.string(), s.number()]).build(); // eslint-disable-next-line @typescript-eslint/no-unused-vars const _u1 = "a"; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _u2 = 1; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _intersectionSchema = s .intersection([ s.object({ a: s.string().required() }), s.object({ b: s.number().required() }), ]) .build(); // eslint-disable-next-line @typescript-eslint/no-unused-vars const _i = { a: "a", b: 1 }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _nullableSchema = s.nullable(s.string()).build(); // eslint-disable-next-line @typescript-eslint/no-unused-vars const _n1 = null; // eslint-disable-next-line @typescript-eslint/no-unused-vars const _n2 = "x";