typescript-runtime-schemas
Version:
A TypeScript schema generation tool that extracts Zod schemas from TypeScript source files with runtime validation support. Generate validation schemas directly from your existing TypeScript types with support for computed types and constraint-based valid
60 lines • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
describe("Utils", () => {
describe("isSourceCode", () => {
it("should identify TypeScript source code", () => {
expect((0, utils_1.isSourceCode)("type User = { name: string }")).toBe(true);
expect((0, utils_1.isSourceCode)("interface User { name: string }")).toBe(true);
expect((0, utils_1.isSourceCode)("export type User = { name: string }")).toBe(true);
expect((0, utils_1.isSourceCode)('import { User } from "./types"')).toBe(true);
expect((0, utils_1.isSourceCode)('declare module "test"')).toBe(true);
expect((0, utils_1.isSourceCode)('const user = { name: "test" }')).toBe(true);
expect((0, utils_1.isSourceCode)("let x = 5")).toBe(true);
expect((0, utils_1.isSourceCode)("var y = 10")).toBe(true);
expect((0, utils_1.isSourceCode)("function test() {}")).toBe(true);
expect((0, utils_1.isSourceCode)("class User {}")).toBe(true);
});
it("should identify file paths", () => {
expect((0, utils_1.isSourceCode)("./src/types.ts")).toBe(false);
expect((0, utils_1.isSourceCode)("../types.ts")).toBe(false);
expect((0, utils_1.isSourceCode)("/home/user/types.ts")).toBe(false);
expect((0, utils_1.isSourceCode)("src\\types.ts")).toBe(false);
expect((0, utils_1.isSourceCode)("types.ts")).toBe(false);
expect((0, utils_1.isSourceCode)("types.tsx")).toBe(false);
});
it("should handle ambiguous cases", () => {
// Short strings without keywords should be treated as paths if they look like paths
expect((0, utils_1.isSourceCode)("src")).toBe(false);
expect((0, utils_1.isSourceCode)("test")).toBe(false);
// Strings with keywords should be treated as source code
expect((0, utils_1.isSourceCode)("some text with type keyword")).toBe(true);
});
});
describe("looksLikePath", () => {
it("should identify file paths", () => {
expect((0, utils_1.looksLikePath)("./src/types.ts")).toBe(true);
expect((0, utils_1.looksLikePath)("../types.ts")).toBe(true);
expect((0, utils_1.looksLikePath)("/home/user/types.ts")).toBe(true);
expect((0, utils_1.looksLikePath)("src\\types.ts")).toBe(true);
expect((0, utils_1.looksLikePath)("types.ts")).toBe(true);
expect((0, utils_1.looksLikePath)("types.tsx")).toBe(true);
expect((0, utils_1.looksLikePath)("src/utils")).toBe(true);
expect((0, utils_1.looksLikePath)("utils\\test")).toBe(true);
});
it("should identify non-paths", () => {
expect((0, utils_1.looksLikePath)("type User = {\n name: string;\n age: number;\n}")).toBe(false);
expect((0, utils_1.looksLikePath)("interface User {\n name: string;\n age: number;\n}")).toBe(false);
expect((0, utils_1.looksLikePath)("export type User = {\n name: string;\n age: number;\n}")).toBe(false);
});
it("should handle short strings without newlines", () => {
expect((0, utils_1.looksLikePath)("src")).toBe(true);
expect((0, utils_1.looksLikePath)("test")).toBe(true);
expect((0, utils_1.looksLikePath)("utils")).toBe(true);
});
it("should handle long strings with newlines", () => {
expect((0, utils_1.looksLikePath)("this is a long string\nwith multiple lines\nand should not be considered a path")).toBe(false);
});
});
});
//# sourceMappingURL=utils.test.js.map