ts-runtime-validation 1.6.16 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +9 -0
- package/CONTRIBUTING.md +430 -0
- package/README.md +444 -64
- package/dist/ICommandOptions.js +3 -0
- package/dist/ICommandOptions.js.map +1 -0
- package/dist/SchemaGenerator.integration.test.js +323 -0
- package/dist/SchemaGenerator.integration.test.js.map +1 -0
- package/dist/SchemaGenerator.js +120 -0
- package/dist/SchemaGenerator.js.map +1 -0
- package/dist/SchemaGenerator.test.js +132 -0
- package/dist/SchemaGenerator.test.js.map +1 -0
- package/dist/errors/index.js +95 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/index.test.js +232 -0
- package/dist/errors/index.test.js.map +1 -0
- package/dist/getPosixPath.js +13 -0
- package/dist/getPosixPath.js.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.js.map +1 -0
- package/dist/services/CodeGenerator.js +305 -0
- package/dist/services/CodeGenerator.js.map +1 -0
- package/dist/services/FileDiscovery.js +121 -0
- package/dist/services/FileDiscovery.js.map +1 -0
- package/dist/services/FileDiscovery.test.js +184 -0
- package/dist/services/FileDiscovery.test.js.map +1 -0
- package/dist/services/SchemaProcessor.js +182 -0
- package/dist/services/SchemaProcessor.js.map +1 -0
- package/dist/services/SchemaProcessor.test.js +395 -0
- package/dist/services/SchemaProcessor.test.js.map +1 -0
- package/dist/services/SchemaWriter.js +76 -0
- package/dist/services/SchemaWriter.js.map +1 -0
- package/dist/services/SchemaWriter.test.js +255 -0
- package/dist/services/SchemaWriter.test.js.map +1 -0
- package/dist/test/basic-scenario/types.jsonschema.js +3 -0
- package/dist/test/basic-scenario/types.jsonschema.js.map +1 -0
- package/dist/test/duplicate-symbols-different-implementation/IBaseType.js +3 -0
- package/dist/test/duplicate-symbols-different-implementation/IBaseType.js.map +1 -0
- package/dist/test/duplicate-symbols-different-implementation/IBaseTypeDefinitionReplicated.js +3 -0
- package/dist/test/duplicate-symbols-different-implementation/IBaseTypeDefinitionReplicated.js.map +1 -0
- package/dist/test/duplicate-symbols-different-implementation/IBasicTypesA.jsonschema.js +3 -0
- package/dist/test/duplicate-symbols-different-implementation/IBasicTypesA.jsonschema.js.map +1 -0
- package/dist/test/duplicate-symbols-different-implementation/IBasicTypesB.jsonschema.js +3 -0
- package/dist/test/duplicate-symbols-different-implementation/IBasicTypesB.jsonschema.js.map +1 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBaseType.js +3 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBaseType.js.map +1 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBaseTypeDefinitionReplicated.js +3 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBaseTypeDefinitionReplicated.js.map +1 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesA.jsonschema.js +3 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesA.jsonschema.js.map +1 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesB.jsonschema.js +3 -0
- package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesB.jsonschema.js.map +1 -0
- package/dist/test/output/duplicate-symbols-identitcal-implementation/ValidationType.js +3 -0
- package/dist/test/output/duplicate-symbols-identitcal-implementation/ValidationType.js.map +1 -0
- package/dist/test/output/duplicate-symbols-identitcal-implementation/isValidSchema.js +49 -0
- package/dist/test/output/duplicate-symbols-identitcal-implementation/isValidSchema.js.map +1 -0
- package/dist/utils/ProgressReporter.js +67 -0
- package/dist/utils/ProgressReporter.js.map +1 -0
- package/dist/utils/ProgressReporter.test.js +267 -0
- package/dist/utils/ProgressReporter.test.js.map +1 -0
- package/dist/writeLine.js +12 -0
- package/dist/writeLine.js.map +1 -0
- package/package.json +2 -2
- package/src/ICommandOptions.ts +7 -0
- package/src/SchemaGenerator.integration.test.ts +411 -0
- package/src/SchemaGenerator.test.ts +7 -0
- package/src/SchemaGenerator.ts +112 -298
- package/src/errors/index.test.ts +319 -0
- package/src/errors/index.ts +92 -0
- package/src/index.ts +7 -0
- package/src/services/CodeGenerator.ts +352 -0
- package/src/services/FileDiscovery.test.ts +216 -0
- package/src/services/FileDiscovery.ts +137 -0
- package/src/services/SchemaProcessor.test.ts +464 -0
- package/src/services/SchemaProcessor.ts +173 -0
- package/src/services/SchemaWriter.test.ts +304 -0
- package/src/services/SchemaWriter.ts +75 -0
- package/src/utils/ProgressReporter.test.ts +357 -0
- package/src/utils/ProgressReporter.ts +76 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const fs_1 = __importDefault(require("fs"));
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const SchemaGenerator_1 = require("./SchemaGenerator");
|
|
18
|
+
const testDir = path_1.default.resolve(__dirname, "./test-tmp/integration");
|
|
19
|
+
const createTestFile = (filePath, content) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
+
const fullPath = path_1.default.resolve(testDir, filePath);
|
|
21
|
+
yield fs_1.default.promises.mkdir(path_1.default.dirname(fullPath), { recursive: true });
|
|
22
|
+
yield fs_1.default.promises.writeFile(fullPath, content);
|
|
23
|
+
return fullPath;
|
|
24
|
+
});
|
|
25
|
+
const cleanup = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
|
+
if (fs_1.default.existsSync(testDir)) {
|
|
27
|
+
yield fs_1.default.promises.rm(testDir, { recursive: true, force: true });
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const getGeneratorConfig = (overrides = {}) => (Object.assign({ glob: "*.jsonschema.ts", rootPath: testDir, output: "./output", helpers: true, additionalProperties: false, tsconfigPath: "", verbose: false, progress: false, minify: false, cache: false, parallel: false, treeShaking: false, lazyLoad: false }, overrides));
|
|
31
|
+
beforeEach(cleanup);
|
|
32
|
+
afterAll(cleanup);
|
|
33
|
+
describe("SchemaGenerator Integration Tests", () => {
|
|
34
|
+
describe("new CLI options", () => {
|
|
35
|
+
it("should work with verbose mode enabled", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
36
|
+
const consoleSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
37
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
38
|
+
export interface IUser {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
}
|
|
42
|
+
`);
|
|
43
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
44
|
+
verbose: true
|
|
45
|
+
}));
|
|
46
|
+
yield generator.Generate();
|
|
47
|
+
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Found 1 schema file(s)"));
|
|
48
|
+
consoleSpy.mockRestore();
|
|
49
|
+
}));
|
|
50
|
+
it("should work with progress reporting enabled", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
51
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
52
|
+
export interface IUser {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
}
|
|
56
|
+
`);
|
|
57
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
58
|
+
progress: true
|
|
59
|
+
}));
|
|
60
|
+
yield generator.Generate();
|
|
61
|
+
// Check that output files were generated
|
|
62
|
+
const outputDir = path_1.default.join(testDir, "output");
|
|
63
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "validation.schema.json"))).toBe(true);
|
|
64
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "SchemaDefinition.ts"))).toBe(true);
|
|
65
|
+
}));
|
|
66
|
+
it("should work with caching enabled", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
67
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
68
|
+
export interface IUser {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
}
|
|
72
|
+
`);
|
|
73
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
74
|
+
cache: true
|
|
75
|
+
}));
|
|
76
|
+
yield generator.Generate();
|
|
77
|
+
// Check that cache was created
|
|
78
|
+
const cacheDir = path_1.default.join(testDir, ".ts-runtime-validation-cache");
|
|
79
|
+
expect(fs_1.default.existsSync(path_1.default.join(cacheDir, "file-hashes.json"))).toBe(true);
|
|
80
|
+
// Run again to test cache usage
|
|
81
|
+
yield generator.Generate();
|
|
82
|
+
const outputDir = path_1.default.join(testDir, "output");
|
|
83
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "validation.schema.json"))).toBe(true);
|
|
84
|
+
}));
|
|
85
|
+
it("should work with parallel processing enabled", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
87
|
+
export interface IUser {
|
|
88
|
+
id: string;
|
|
89
|
+
name: string;
|
|
90
|
+
}
|
|
91
|
+
`);
|
|
92
|
+
yield createTestFile("product.jsonschema.ts", `
|
|
93
|
+
export interface IProduct {
|
|
94
|
+
id: string;
|
|
95
|
+
title: string;
|
|
96
|
+
price: number;
|
|
97
|
+
}
|
|
98
|
+
`);
|
|
99
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
100
|
+
parallel: true
|
|
101
|
+
}));
|
|
102
|
+
yield generator.Generate();
|
|
103
|
+
// Check that both interfaces were processed
|
|
104
|
+
const schemaFile = path_1.default.join(testDir, "output", "validation.schema.json");
|
|
105
|
+
const schemaContent = JSON.parse(fs_1.default.readFileSync(schemaFile, 'utf-8'));
|
|
106
|
+
expect(schemaContent.definitions.IUser).toBeDefined();
|
|
107
|
+
expect(schemaContent.definitions.IProduct).toBeDefined();
|
|
108
|
+
}));
|
|
109
|
+
it("should work with minified output", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
111
|
+
export interface IUser {
|
|
112
|
+
id: string;
|
|
113
|
+
name: string;
|
|
114
|
+
}
|
|
115
|
+
`);
|
|
116
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
117
|
+
minify: true
|
|
118
|
+
}));
|
|
119
|
+
yield generator.Generate();
|
|
120
|
+
// Check that JSON schema is minified (no pretty formatting)
|
|
121
|
+
const schemaFile = path_1.default.join(testDir, "output", "validation.schema.json");
|
|
122
|
+
const schemaContent = fs_1.default.readFileSync(schemaFile, 'utf-8');
|
|
123
|
+
// Minified JSON shouldn't have indentation
|
|
124
|
+
expect(schemaContent).not.toMatch(/\n /);
|
|
125
|
+
// But should still be valid JSON
|
|
126
|
+
expect(() => JSON.parse(schemaContent)).not.toThrow();
|
|
127
|
+
}));
|
|
128
|
+
it("should work with tree-shaking enabled", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
129
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
130
|
+
export interface IUser {
|
|
131
|
+
id: string;
|
|
132
|
+
name: string;
|
|
133
|
+
}
|
|
134
|
+
`);
|
|
135
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
136
|
+
treeShaking: true
|
|
137
|
+
}));
|
|
138
|
+
yield generator.Generate();
|
|
139
|
+
// Check that ValidationType.ts has individual exports instead of namespace
|
|
140
|
+
const validationTypesFile = path_1.default.join(testDir, "output", "ValidationType.ts");
|
|
141
|
+
const content = fs_1.default.readFileSync(validationTypesFile, 'utf-8');
|
|
142
|
+
expect(content).toContain("export type IUser");
|
|
143
|
+
expect(content).not.toContain("namespace ValidationType");
|
|
144
|
+
}));
|
|
145
|
+
it("should work with lazy loading enabled", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
146
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
147
|
+
export interface IUser {
|
|
148
|
+
id: string;
|
|
149
|
+
name: string;
|
|
150
|
+
}
|
|
151
|
+
`);
|
|
152
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
153
|
+
lazyLoad: true
|
|
154
|
+
}));
|
|
155
|
+
yield generator.Generate();
|
|
156
|
+
// Check that isValidSchema.ts uses lazy loading
|
|
157
|
+
const validatorFile = path_1.default.join(testDir, "output", "isValidSchema.ts");
|
|
158
|
+
const content = fs_1.default.readFileSync(validatorFile, 'utf-8');
|
|
159
|
+
expect(content).toContain("let validator");
|
|
160
|
+
expect(content).toContain("getValidator");
|
|
161
|
+
expect(content).toContain("require(\"ajv\")");
|
|
162
|
+
}));
|
|
163
|
+
});
|
|
164
|
+
describe("combined options", () => {
|
|
165
|
+
it("should work with multiple options enabled", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
166
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
167
|
+
export interface IUser {
|
|
168
|
+
id: string;
|
|
169
|
+
name: string;
|
|
170
|
+
}
|
|
171
|
+
`);
|
|
172
|
+
yield createTestFile("product.jsonschema.ts", `
|
|
173
|
+
export interface IProduct {
|
|
174
|
+
id: string;
|
|
175
|
+
title: string;
|
|
176
|
+
}
|
|
177
|
+
`);
|
|
178
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
179
|
+
verbose: true,
|
|
180
|
+
progress: true,
|
|
181
|
+
cache: true,
|
|
182
|
+
parallel: true,
|
|
183
|
+
minify: true,
|
|
184
|
+
treeShaking: true
|
|
185
|
+
}));
|
|
186
|
+
yield generator.Generate();
|
|
187
|
+
// Verify all features work together
|
|
188
|
+
const outputDir = path_1.default.join(testDir, "output");
|
|
189
|
+
const cacheDir = path_1.default.join(testDir, ".ts-runtime-validation-cache");
|
|
190
|
+
// Check files exist
|
|
191
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "validation.schema.json"))).toBe(true);
|
|
192
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "SchemaDefinition.ts"))).toBe(true);
|
|
193
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "ValidationType.ts"))).toBe(true);
|
|
194
|
+
expect(fs_1.default.existsSync(path_1.default.join(cacheDir, "file-hashes.json"))).toBe(true);
|
|
195
|
+
// Check minification
|
|
196
|
+
const schemaContent = fs_1.default.readFileSync(path_1.default.join(outputDir, "validation.schema.json"), 'utf-8');
|
|
197
|
+
expect(schemaContent).not.toMatch(/\n /);
|
|
198
|
+
// Check tree-shaking
|
|
199
|
+
const validationTypesContent = fs_1.default.readFileSync(path_1.default.join(outputDir, "ValidationType.ts"), 'utf-8');
|
|
200
|
+
expect(validationTypesContent).toContain("export type IUser");
|
|
201
|
+
expect(validationTypesContent).not.toContain("namespace ValidationType");
|
|
202
|
+
}));
|
|
203
|
+
});
|
|
204
|
+
describe("error handling with new options", () => {
|
|
205
|
+
it("should handle errors gracefully with verbose mode", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
206
|
+
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
207
|
+
// Use non-existent glob pattern to trigger error
|
|
208
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
209
|
+
glob: "*.nonexistent.ts",
|
|
210
|
+
verbose: true
|
|
211
|
+
}));
|
|
212
|
+
yield expect(generator.Generate()).rejects.toThrow();
|
|
213
|
+
consoleErrorSpy.mockRestore();
|
|
214
|
+
}));
|
|
215
|
+
it("should provide detailed error context", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
216
|
+
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
217
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
218
|
+
glob: "*.nonexistent.ts", // Pattern that won't match any files
|
|
219
|
+
verbose: true
|
|
220
|
+
}));
|
|
221
|
+
yield expect(generator.Generate()).rejects.toThrow();
|
|
222
|
+
consoleErrorSpy.mockRestore();
|
|
223
|
+
}));
|
|
224
|
+
});
|
|
225
|
+
describe("cache functionality", () => {
|
|
226
|
+
it("should invalidate cache when file changes", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
227
|
+
const filePath = yield createTestFile("user.jsonschema.ts", `
|
|
228
|
+
export interface IUser {
|
|
229
|
+
id: string;
|
|
230
|
+
name: string;
|
|
231
|
+
}
|
|
232
|
+
`);
|
|
233
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
234
|
+
cache: true
|
|
235
|
+
}));
|
|
236
|
+
// First run
|
|
237
|
+
yield generator.Generate();
|
|
238
|
+
const cacheFile = path_1.default.join(testDir, ".ts-runtime-validation-cache", "file-hashes.json");
|
|
239
|
+
expect(fs_1.default.existsSync(cacheFile)).toBe(true);
|
|
240
|
+
const originalCache = JSON.parse(fs_1.default.readFileSync(cacheFile, 'utf-8'));
|
|
241
|
+
// Modify file
|
|
242
|
+
yield fs_1.default.promises.writeFile(filePath, `
|
|
243
|
+
export interface IUser {
|
|
244
|
+
id: string;
|
|
245
|
+
name: string;
|
|
246
|
+
email: string; // Added field
|
|
247
|
+
}
|
|
248
|
+
`);
|
|
249
|
+
// Second run
|
|
250
|
+
yield generator.Generate();
|
|
251
|
+
const updatedCache = JSON.parse(fs_1.default.readFileSync(cacheFile, 'utf-8'));
|
|
252
|
+
// Hash should have changed
|
|
253
|
+
expect(originalCache[filePath]).not.toBe(updatedCache[filePath]);
|
|
254
|
+
}));
|
|
255
|
+
it("should clear cache correctly", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
256
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
257
|
+
export interface IUser {
|
|
258
|
+
id: string;
|
|
259
|
+
name: string;
|
|
260
|
+
}
|
|
261
|
+
`);
|
|
262
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
263
|
+
cache: true
|
|
264
|
+
}));
|
|
265
|
+
yield generator.Generate();
|
|
266
|
+
const cacheFile = path_1.default.join(testDir, ".ts-runtime-validation-cache", "file-hashes.json");
|
|
267
|
+
expect(fs_1.default.existsSync(cacheFile)).toBe(true);
|
|
268
|
+
generator.clearCache();
|
|
269
|
+
expect(fs_1.default.existsSync(cacheFile)).toBe(false);
|
|
270
|
+
}));
|
|
271
|
+
});
|
|
272
|
+
describe("output management", () => {
|
|
273
|
+
it("should clean output directory", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
274
|
+
yield createTestFile("user.jsonschema.ts", `
|
|
275
|
+
export interface IUser {
|
|
276
|
+
id: string;
|
|
277
|
+
name: string;
|
|
278
|
+
}
|
|
279
|
+
`);
|
|
280
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig());
|
|
281
|
+
// Generate first time
|
|
282
|
+
yield generator.Generate();
|
|
283
|
+
const outputDir = path_1.default.join(testDir, "output");
|
|
284
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "validation.schema.json"))).toBe(true);
|
|
285
|
+
// Clean output
|
|
286
|
+
yield generator.cleanOutput();
|
|
287
|
+
// TypeScript and JSON files should be removed
|
|
288
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "validation.schema.json"))).toBe(false);
|
|
289
|
+
expect(fs_1.default.existsSync(path_1.default.join(outputDir, "SchemaDefinition.ts"))).toBe(false);
|
|
290
|
+
}));
|
|
291
|
+
});
|
|
292
|
+
describe("performance with different options", () => {
|
|
293
|
+
it("should process multiple files efficiently with parallel mode", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
294
|
+
// Create multiple test files
|
|
295
|
+
const numFiles = 5;
|
|
296
|
+
for (let i = 0; i < numFiles; i++) {
|
|
297
|
+
yield createTestFile(`interface${i}.jsonschema.ts`, `
|
|
298
|
+
export interface IInterface${i} {
|
|
299
|
+
id: string;
|
|
300
|
+
name: string;
|
|
301
|
+
value${i}: number;
|
|
302
|
+
}
|
|
303
|
+
`);
|
|
304
|
+
}
|
|
305
|
+
const startTime = Date.now();
|
|
306
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(getGeneratorConfig({
|
|
307
|
+
parallel: true
|
|
308
|
+
}));
|
|
309
|
+
yield generator.Generate();
|
|
310
|
+
const endTime = Date.now();
|
|
311
|
+
const duration = endTime - startTime;
|
|
312
|
+
// Should complete reasonably quickly (less than 10 seconds)
|
|
313
|
+
expect(duration).toBeLessThan(10000);
|
|
314
|
+
// Verify all files were processed
|
|
315
|
+
const schemaFile = path_1.default.join(testDir, "output", "validation.schema.json");
|
|
316
|
+
const schemaContent = JSON.parse(fs_1.default.readFileSync(schemaFile, 'utf-8'));
|
|
317
|
+
for (let i = 0; i < numFiles; i++) {
|
|
318
|
+
expect(schemaContent.definitions[`IInterface${i}`]).toBeDefined();
|
|
319
|
+
}
|
|
320
|
+
}));
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
//# sourceMappingURL=SchemaGenerator.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.integration.test.js","sourceRoot":"","sources":["../src/SchemaGenerator.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SchemaGenerator = void 0;
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const FileDiscovery_1 = require("./services/FileDiscovery");
|
|
18
|
+
const SchemaProcessor_1 = require("./services/SchemaProcessor");
|
|
19
|
+
const CodeGenerator_1 = require("./services/CodeGenerator");
|
|
20
|
+
const SchemaWriter_1 = require("./services/SchemaWriter");
|
|
21
|
+
const ProgressReporter_1 = require("./utils/ProgressReporter");
|
|
22
|
+
const errors_1 = require("./errors");
|
|
23
|
+
const validationSchemaFileName = "validation.schema.json";
|
|
24
|
+
const schemaDefinitionFileName = "SchemaDefinition.ts";
|
|
25
|
+
const validationInterfacesFile = "ValidationType.ts";
|
|
26
|
+
const isValidSchemaFileName = "isValidSchema.ts";
|
|
27
|
+
class SchemaGenerator {
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.options = options;
|
|
30
|
+
this.outputPath = path_1.default.join(this.options.rootPath, this.options.output);
|
|
31
|
+
this.jsonSchemaOutputFile = path_1.default.join(this.outputPath, validationSchemaFileName);
|
|
32
|
+
this.tsSchemaDefinitionOutputFile = path_1.default.join(this.outputPath, schemaDefinitionFileName);
|
|
33
|
+
this.validationTypesOutputFile = path_1.default.join(this.outputPath, validationInterfacesFile);
|
|
34
|
+
this.isValidSchemaOutputFile = path_1.default.join(this.outputPath, isValidSchemaFileName);
|
|
35
|
+
this.Generate = () => __awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
try {
|
|
37
|
+
this.progressReporter.start("Starting schema generation...");
|
|
38
|
+
const { helpers } = this.options;
|
|
39
|
+
// Discover files
|
|
40
|
+
this.progressReporter.update(0, "Discovering files...");
|
|
41
|
+
const files = yield this.fileDiscovery.discoverFiles();
|
|
42
|
+
if (this.options.verbose) {
|
|
43
|
+
console.log(`Found ${files.length} schema file(s)`);
|
|
44
|
+
files.forEach(file => console.log(` - ${file.path}`));
|
|
45
|
+
}
|
|
46
|
+
// Process schemas
|
|
47
|
+
this.progressReporter.update(1, "Processing TypeScript files...");
|
|
48
|
+
this.progressReporter.options.total = files.length + 4; // files + 4 generation steps
|
|
49
|
+
const schemaMap = yield this.schemaProcessor.processFiles(files);
|
|
50
|
+
if (schemaMap.size === 0) {
|
|
51
|
+
console.log("No types found to generate schemas for");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Validate schema compatibility
|
|
55
|
+
this.progressReporter.update(files.length + 1, "Validating schema compatibility...");
|
|
56
|
+
this.schemaProcessor.validateSchemaCompatibility(schemaMap);
|
|
57
|
+
// Merge and write JSON schema
|
|
58
|
+
this.progressReporter.update(files.length + 2, "Writing JSON schema...");
|
|
59
|
+
const mergedSchema = this.schemaProcessor.mergeSchemas(schemaMap);
|
|
60
|
+
yield this.schemaWriter.writeJsonSchema(mergedSchema, this.jsonSchemaOutputFile);
|
|
61
|
+
if (helpers === false) {
|
|
62
|
+
this.progressReporter.complete("Schema generation completed (helpers skipped)");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Generate TypeScript helpers
|
|
66
|
+
this.progressReporter.update(files.length + 3, "Generating TypeScript helpers...");
|
|
67
|
+
yield Promise.all([
|
|
68
|
+
this.codeGenerator.generateSchemaDefinition(schemaMap, this.tsSchemaDefinitionOutputFile),
|
|
69
|
+
this.codeGenerator.generateValidatorFunction(this.isValidSchemaOutputFile),
|
|
70
|
+
this.codeGenerator.generateValidationTypes(schemaMap, this.validationTypesOutputFile)
|
|
71
|
+
]);
|
|
72
|
+
this.progressReporter.complete("Schema generation completed successfully");
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const formattedError = (0, errors_1.formatError)(error, this.options.verbose || false);
|
|
76
|
+
console.error(`Schema generation failed: ${formattedError}`);
|
|
77
|
+
if (!(0, errors_1.isKnownError)(error) && this.options.verbose) {
|
|
78
|
+
console.error(error);
|
|
79
|
+
}
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
this.fileDiscovery = new FileDiscovery_1.FileDiscovery({
|
|
84
|
+
glob: options.glob,
|
|
85
|
+
rootPath: options.rootPath,
|
|
86
|
+
cacheEnabled: options.cache || false,
|
|
87
|
+
cachePath: path_1.default.join(options.rootPath, ".ts-runtime-validation-cache")
|
|
88
|
+
});
|
|
89
|
+
this.schemaProcessor = new SchemaProcessor_1.SchemaProcessor({
|
|
90
|
+
additionalProperties: options.additionalProperties,
|
|
91
|
+
tsconfigPath: options.tsconfigPath || undefined,
|
|
92
|
+
parallel: options.parallel !== false,
|
|
93
|
+
verbose: options.verbose || false
|
|
94
|
+
});
|
|
95
|
+
this.codeGenerator = new CodeGenerator_1.CodeGenerator({
|
|
96
|
+
outputPath: this.outputPath,
|
|
97
|
+
minify: options.minify || false,
|
|
98
|
+
treeShaking: options.treeShaking || false,
|
|
99
|
+
lazyLoad: options.lazyLoad || false
|
|
100
|
+
});
|
|
101
|
+
this.schemaWriter = new SchemaWriter_1.SchemaWriter({
|
|
102
|
+
outputPath: this.outputPath,
|
|
103
|
+
minify: options.minify || false
|
|
104
|
+
});
|
|
105
|
+
this.progressReporter = new ProgressReporter_1.ProgressReporter({
|
|
106
|
+
enabled: options.progress || false,
|
|
107
|
+
showBar: true
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
clearCache() {
|
|
111
|
+
this.fileDiscovery.clearCache();
|
|
112
|
+
}
|
|
113
|
+
cleanOutput() {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
yield this.schemaWriter.cleanOutputDirectory();
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.SchemaGenerator = SchemaGenerator;
|
|
120
|
+
//# sourceMappingURL=SchemaGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../src/SchemaGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const fs_1 = __importDefault(require("fs"));
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
17
|
+
const SchemaGenerator_1 = require("./SchemaGenerator");
|
|
18
|
+
const cleanupTestOutput = () => {
|
|
19
|
+
const outputDir = path_1.default.posix.resolve(__dirname, "./test/output");
|
|
20
|
+
const doesDirectoryExist = fs_1.default.existsSync(outputDir);
|
|
21
|
+
if (doesDirectoryExist) {
|
|
22
|
+
fs_1.default.rmSync(outputDir, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const getGeneratorConfig = (scenarioPath) => {
|
|
26
|
+
const options = {
|
|
27
|
+
glob: "*.jsonschema.ts",
|
|
28
|
+
rootPath: path_1.default.resolve(__dirname, `./test/${scenarioPath}`),
|
|
29
|
+
output: `../output/${scenarioPath}`,
|
|
30
|
+
helpers: true,
|
|
31
|
+
additionalProperties: false,
|
|
32
|
+
tsconfigPath: "",
|
|
33
|
+
verbose: false,
|
|
34
|
+
progress: false,
|
|
35
|
+
minify: false,
|
|
36
|
+
cache: false,
|
|
37
|
+
parallel: false,
|
|
38
|
+
treeShaking: false,
|
|
39
|
+
lazyLoad: false
|
|
40
|
+
};
|
|
41
|
+
return options;
|
|
42
|
+
};
|
|
43
|
+
const getOutputSchemaPath = (scenarioPath) => {
|
|
44
|
+
return path_1.default.resolve(__dirname, `./test/output/${scenarioPath}`, "validation.schema.json");
|
|
45
|
+
};
|
|
46
|
+
beforeAll(cleanupTestOutput);
|
|
47
|
+
afterAll(cleanupTestOutput);
|
|
48
|
+
describe("SchemaGenerator", () => {
|
|
49
|
+
test("it should generate the correct schema for a basic interface", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
+
const scenarioPath = "basic-scenario";
|
|
51
|
+
const options = getGeneratorConfig(scenarioPath);
|
|
52
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(options);
|
|
53
|
+
yield generator.Generate();
|
|
54
|
+
const rawFile = fs_1.default.readFileSync(getOutputSchemaPath(scenarioPath)).toString();
|
|
55
|
+
const result = JSON.parse(rawFile);
|
|
56
|
+
const expected = {
|
|
57
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
58
|
+
definitions: {
|
|
59
|
+
IBasicTypes: {
|
|
60
|
+
type: "object",
|
|
61
|
+
properties: {
|
|
62
|
+
propertyA: {
|
|
63
|
+
type: "string",
|
|
64
|
+
},
|
|
65
|
+
propertyB: {
|
|
66
|
+
type: "string",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
required: ["propertyA", "propertyB"],
|
|
70
|
+
additionalProperties: false,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
expect(result).toStrictEqual(expected);
|
|
75
|
+
}));
|
|
76
|
+
test("it should throw an error when there are different implementations of an interface", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
77
|
+
const options = getGeneratorConfig("duplicate-symbols-different-implementation");
|
|
78
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(options);
|
|
79
|
+
yield expect(generator.Generate()).rejects.toThrow();
|
|
80
|
+
}));
|
|
81
|
+
test("it should not an error when there are identical definitions interface", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
82
|
+
const scenarioPath = "duplicate-symbols-identitcal-implementation";
|
|
83
|
+
const options = getGeneratorConfig(scenarioPath);
|
|
84
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(options);
|
|
85
|
+
yield generator.Generate();
|
|
86
|
+
const rawFile = fs_1.default.readFileSync(getOutputSchemaPath(scenarioPath)).toString();
|
|
87
|
+
const result = JSON.parse(rawFile);
|
|
88
|
+
const expected = {
|
|
89
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
90
|
+
definitions: {
|
|
91
|
+
IBasicTypesA: {
|
|
92
|
+
type: "object",
|
|
93
|
+
properties: {
|
|
94
|
+
propertyA: {
|
|
95
|
+
$ref: "#/definitions/IBaseType",
|
|
96
|
+
},
|
|
97
|
+
propertyB: {
|
|
98
|
+
$ref: "#/definitions/IBaseType",
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
required: ["propertyA", "propertyB"],
|
|
102
|
+
additionalProperties: false,
|
|
103
|
+
},
|
|
104
|
+
IBaseType: {
|
|
105
|
+
type: "object",
|
|
106
|
+
properties: {
|
|
107
|
+
someProperty: {
|
|
108
|
+
type: "string",
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
required: ["someProperty"],
|
|
112
|
+
additionalProperties: false,
|
|
113
|
+
},
|
|
114
|
+
IBasicTypesB: {
|
|
115
|
+
type: "object",
|
|
116
|
+
properties: {
|
|
117
|
+
propertyA: {
|
|
118
|
+
$ref: "#/definitions/IBaseType",
|
|
119
|
+
},
|
|
120
|
+
propertyB: {
|
|
121
|
+
$ref: "#/definitions/IBaseType",
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
required: ["propertyA", "propertyB"],
|
|
125
|
+
additionalProperties: false,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
expect(result).toStrictEqual(expected);
|
|
130
|
+
}));
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=SchemaGenerator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.test.js","sourceRoot":"","sources":["../src/SchemaGenerator.test.ts"],"names":[],"mappings":"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"}
|