ts-runtime-validation 1.6.16 → 1.8.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.
Files changed (83) hide show
  1. package/CONTRIBUTING.md +430 -0
  2. package/README.md +505 -62
  3. package/dist/ICommandOptions.js +3 -0
  4. package/dist/ICommandOptions.js.map +1 -0
  5. package/dist/SchemaGenerator.deterministic-extended.test.js +420 -0
  6. package/dist/SchemaGenerator.deterministic-extended.test.js.map +1 -0
  7. package/dist/SchemaGenerator.deterministic.test.js +251 -0
  8. package/dist/SchemaGenerator.deterministic.test.js.map +1 -0
  9. package/dist/SchemaGenerator.integration.test.js +323 -0
  10. package/dist/SchemaGenerator.integration.test.js.map +1 -0
  11. package/dist/SchemaGenerator.js +120 -0
  12. package/dist/SchemaGenerator.js.map +1 -0
  13. package/dist/SchemaGenerator.test.js +226 -0
  14. package/dist/SchemaGenerator.test.js.map +1 -0
  15. package/dist/cli.test.js +155 -0
  16. package/dist/cli.test.js.map +1 -0
  17. package/dist/errors/index.js +95 -0
  18. package/dist/errors/index.js.map +1 -0
  19. package/dist/errors/index.test.js +232 -0
  20. package/dist/errors/index.test.js.map +1 -0
  21. package/dist/getPosixPath.js +13 -0
  22. package/dist/getPosixPath.js.map +1 -0
  23. package/dist/index.js +27 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/lib.js.map +1 -0
  26. package/dist/services/CodeGenerator.js +321 -0
  27. package/dist/services/CodeGenerator.js.map +1 -0
  28. package/dist/services/FileDiscovery.js +123 -0
  29. package/dist/services/FileDiscovery.js.map +1 -0
  30. package/dist/services/FileDiscovery.test.js +184 -0
  31. package/dist/services/FileDiscovery.test.js.map +1 -0
  32. package/dist/services/SchemaProcessor.js +198 -0
  33. package/dist/services/SchemaProcessor.js.map +1 -0
  34. package/dist/services/SchemaProcessor.test.js +455 -0
  35. package/dist/services/SchemaProcessor.test.js.map +1 -0
  36. package/dist/services/SchemaWriter.js +76 -0
  37. package/dist/services/SchemaWriter.js.map +1 -0
  38. package/dist/services/SchemaWriter.test.js +255 -0
  39. package/dist/services/SchemaWriter.test.js.map +1 -0
  40. package/dist/test/basic-scenario/types.jsonschema.js +3 -0
  41. package/dist/test/basic-scenario/types.jsonschema.js.map +1 -0
  42. package/dist/test/duplicate-symbols-different-implementation/IBaseType.js +3 -0
  43. package/dist/test/duplicate-symbols-different-implementation/IBaseType.js.map +1 -0
  44. package/dist/test/duplicate-symbols-different-implementation/IBaseTypeDefinitionReplicated.js +3 -0
  45. package/dist/test/duplicate-symbols-different-implementation/IBaseTypeDefinitionReplicated.js.map +1 -0
  46. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesA.jsonschema.js +3 -0
  47. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesA.jsonschema.js.map +1 -0
  48. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesB.jsonschema.js +3 -0
  49. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesB.jsonschema.js.map +1 -0
  50. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseType.js +3 -0
  51. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseType.js.map +1 -0
  52. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseTypeDefinitionReplicated.js +3 -0
  53. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseTypeDefinitionReplicated.js.map +1 -0
  54. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesA.jsonschema.js +3 -0
  55. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesA.jsonschema.js.map +1 -0
  56. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesB.jsonschema.js +3 -0
  57. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesB.jsonschema.js.map +1 -0
  58. package/dist/utils/ProgressReporter.js +67 -0
  59. package/dist/utils/ProgressReporter.js.map +1 -0
  60. package/dist/utils/ProgressReporter.test.js +267 -0
  61. package/dist/utils/ProgressReporter.test.js.map +1 -0
  62. package/dist/writeLine.js +12 -0
  63. package/dist/writeLine.js.map +1 -0
  64. package/package.json +2 -2
  65. package/src/ICommandOptions.ts +7 -0
  66. package/src/SchemaGenerator.deterministic-extended.test.ts +429 -0
  67. package/src/SchemaGenerator.deterministic.test.ts +276 -0
  68. package/src/SchemaGenerator.integration.test.ts +411 -0
  69. package/src/SchemaGenerator.test.ts +118 -0
  70. package/src/SchemaGenerator.ts +112 -298
  71. package/src/cli.test.ts +130 -0
  72. package/src/errors/index.test.ts +319 -0
  73. package/src/errors/index.ts +92 -0
  74. package/src/index.ts +8 -1
  75. package/src/services/CodeGenerator.ts +370 -0
  76. package/src/services/FileDiscovery.test.ts +216 -0
  77. package/src/services/FileDiscovery.ts +140 -0
  78. package/src/services/SchemaProcessor.test.ts +536 -0
  79. package/src/services/SchemaProcessor.ts +194 -0
  80. package/src/services/SchemaWriter.test.ts +304 -0
  81. package/src/services/SchemaWriter.ts +75 -0
  82. package/src/utils/ProgressReporter.test.ts +357 -0
  83. package/src/utils/ProgressReporter.ts +76 -0
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ const SchemaGenerator_1 = require("./SchemaGenerator");
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const crypto = __importStar(require("crypto"));
49
+ describe("SchemaGenerator - Extended Deterministic Tests", () => {
50
+ const baseTestDir = path.join(__dirname, "../.test-tmp/deterministic-extended");
51
+ const createTestEnv = (name) => {
52
+ const testDir = path.join(baseTestDir, name);
53
+ const outputDir1 = path.join(testDir, "output-1");
54
+ const outputDir2 = path.join(testDir, "output-2");
55
+ const srcDir = path.join(testDir, "src");
56
+ return { testDir, outputDir1, outputDir2, srcDir };
57
+ };
58
+ beforeEach(() => {
59
+ if (fs.existsSync(baseTestDir)) {
60
+ fs.rmSync(baseTestDir, { recursive: true, force: true });
61
+ }
62
+ });
63
+ afterEach(() => {
64
+ if (fs.existsSync(baseTestDir)) {
65
+ fs.rmSync(baseTestDir, { recursive: true, force: true });
66
+ }
67
+ });
68
+ const getFileHash = (filePath) => {
69
+ if (!fs.existsSync(filePath)) {
70
+ return "";
71
+ }
72
+ const content = fs.readFileSync(filePath, "utf-8");
73
+ return crypto.createHash("md5").update(content).digest("hex");
74
+ };
75
+ const compareDirectories = (dir1, dir2) => {
76
+ const files1 = fs.existsSync(dir1) ? fs.readdirSync(dir1).sort() : [];
77
+ const files2 = fs.existsSync(dir2) ? fs.readdirSync(dir2).sort() : [];
78
+ if (files1.length !== files2.length)
79
+ return false;
80
+ if (!files1.every((f, i) => f === files2[i]))
81
+ return false;
82
+ return files1.every(file => {
83
+ const hash1 = getFileHash(path.join(dir1, file));
84
+ const hash2 = getFileHash(path.join(dir2, file));
85
+ return hash1 === hash2;
86
+ });
87
+ };
88
+ const createTestFiles = (srcDir, files) => __awaiter(void 0, void 0, void 0, function* () {
89
+ yield fs.promises.mkdir(srcDir, { recursive: true });
90
+ for (const [filename, content] of Object.entries(files)) {
91
+ yield fs.promises.writeFile(path.join(srcDir, filename), content);
92
+ }
93
+ });
94
+ it("should generate identical output with complex nested interfaces", () => __awaiter(void 0, void 0, void 0, function* () {
95
+ const { srcDir, outputDir1, outputDir2 } = createTestEnv("nested-interfaces");
96
+ yield createTestFiles(srcDir, {
97
+ "user.jsonschema.ts": `
98
+ export interface IAddress {
99
+ street: string;
100
+ city: string;
101
+ country: string;
102
+ }
103
+
104
+ export interface IUser {
105
+ id: string;
106
+ name: string;
107
+ addresses: IAddress[];
108
+ metadata: {
109
+ created: Date;
110
+ updated: Date;
111
+ tags: string[];
112
+ };
113
+ }
114
+ `,
115
+ "product.jsonschema.ts": `
116
+ export interface ICategory {
117
+ id: number;
118
+ name: string;
119
+ parent?: ICategory;
120
+ }
121
+
122
+ export interface IProduct {
123
+ sku: string;
124
+ name: string;
125
+ price: number;
126
+ categories: ICategory[];
127
+ }
128
+ `
129
+ });
130
+ const baseOptions = {
131
+ glob: "**/*.jsonschema.ts",
132
+ rootPath: srcDir,
133
+ output: "",
134
+ tsconfigPath: "",
135
+ helpers: true,
136
+ additionalProperties: false,
137
+ verbose: false,
138
+ progress: false,
139
+ minify: false,
140
+ cache: false,
141
+ parallel: true,
142
+ treeShaking: false,
143
+ lazyLoad: false,
144
+ };
145
+ // Generate twice
146
+ const generator1 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, baseOptions), { output: outputDir1 }));
147
+ yield generator1.Generate();
148
+ const generator2 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, baseOptions), { output: outputDir2 }));
149
+ yield generator2.Generate();
150
+ expect(compareDirectories(outputDir1, outputDir2)).toBe(true);
151
+ }));
152
+ it("should maintain determinism with circular references", () => __awaiter(void 0, void 0, void 0, function* () {
153
+ const { srcDir, outputDir1, outputDir2 } = createTestEnv("circular-refs");
154
+ yield createTestFiles(srcDir, {
155
+ "models.jsonschema.ts": `
156
+ export interface INode {
157
+ id: string;
158
+ value: any;
159
+ parent?: INode;
160
+ children: INode[];
161
+ }
162
+
163
+ export interface IGraph {
164
+ nodes: INode[];
165
+ edges: IEdge[];
166
+ }
167
+
168
+ export interface IEdge {
169
+ from: INode;
170
+ to: INode;
171
+ weight?: number;
172
+ }
173
+ `
174
+ });
175
+ const options = {
176
+ glob: "**/*.jsonschema.ts",
177
+ rootPath: srcDir,
178
+ output: "",
179
+ tsconfigPath: "",
180
+ helpers: true,
181
+ additionalProperties: false,
182
+ verbose: false,
183
+ progress: false,
184
+ minify: false,
185
+ cache: false,
186
+ parallel: true,
187
+ treeShaking: false,
188
+ lazyLoad: false,
189
+ };
190
+ const generator1 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir1 }));
191
+ yield generator1.Generate();
192
+ const generator2 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir2 }));
193
+ yield generator2.Generate();
194
+ expect(compareDirectories(outputDir1, outputDir2)).toBe(true);
195
+ }));
196
+ it("should be deterministic with many files processed in parallel", () => __awaiter(void 0, void 0, void 0, function* () {
197
+ const { srcDir } = createTestEnv("many-files");
198
+ const files = {};
199
+ for (let i = 0; i < 5; i++) { // Reduced to 5 files for faster tests
200
+ files[`model${i}.jsonschema.ts`] = `
201
+ export interface IModel${i} {
202
+ id: string;
203
+ index: number;
204
+ data: {
205
+ value${i}: string;
206
+ timestamp: Date;
207
+ };
208
+ }
209
+
210
+ export type Model${i}Type = "type_${i}_a" | "type_${i}_b";
211
+ `;
212
+ }
213
+ yield createTestFiles(srcDir, files);
214
+ const options = {
215
+ glob: "**/*.jsonschema.ts",
216
+ rootPath: srcDir,
217
+ output: "",
218
+ tsconfigPath: "",
219
+ helpers: true,
220
+ additionalProperties: false,
221
+ verbose: false,
222
+ progress: false,
223
+ minify: false,
224
+ cache: false,
225
+ parallel: true,
226
+ treeShaking: false,
227
+ lazyLoad: false,
228
+ };
229
+ // Run multiple times to ensure consistency
230
+ const outputs = [];
231
+ for (let run = 0; run < 2; run++) { // Reduced from 3 to 2 runs
232
+ const outputDir = path.join(baseTestDir, `many-files/output-run-${run}`);
233
+ const generator = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir }));
234
+ yield generator.Generate();
235
+ const schemaPath = path.join(outputDir, "validation.schema.json");
236
+ const hash = getFileHash(schemaPath);
237
+ outputs.push(hash);
238
+ }
239
+ // All runs should produce identical output
240
+ expect(outputs.every(h => h === outputs[0])).toBe(true);
241
+ }), 30000); // 30 second timeout for this test
242
+ it("should be deterministic with mixed export types", () => __awaiter(void 0, void 0, void 0, function* () {
243
+ const { srcDir, outputDir1, outputDir2 } = createTestEnv("mixed-exports");
244
+ yield createTestFiles(srcDir, {
245
+ "types.jsonschema.ts": `
246
+ export interface IInterface {
247
+ field: string;
248
+ }
249
+
250
+ export type StringAlias = string;
251
+
252
+ export type UnionType = "option1" | "option2" | "option3";
253
+
254
+ export type IntersectionType = IInterface & {
255
+ extra: number;
256
+ };
257
+
258
+ export enum Status {
259
+ Active = "ACTIVE",
260
+ Inactive = "INACTIVE",
261
+ Pending = "PENDING"
262
+ }
263
+
264
+ export type ComplexType = {
265
+ status: Status;
266
+ union: UnionType;
267
+ data: IInterface | null;
268
+ };
269
+ `
270
+ });
271
+ const options = {
272
+ glob: "**/*.jsonschema.ts",
273
+ rootPath: srcDir,
274
+ output: "",
275
+ tsconfigPath: "",
276
+ helpers: true,
277
+ additionalProperties: false,
278
+ verbose: false,
279
+ progress: false,
280
+ minify: false,
281
+ cache: false,
282
+ parallel: false, // Test with sequential processing too
283
+ treeShaking: false,
284
+ lazyLoad: false,
285
+ };
286
+ const generator1 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir1 }));
287
+ yield generator1.Generate();
288
+ const generator2 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir2, parallel: true }));
289
+ yield generator2.Generate();
290
+ expect(compareDirectories(outputDir1, outputDir2)).toBe(true);
291
+ }));
292
+ it("should maintain order with tree-shaking and lazy-loading enabled", () => __awaiter(void 0, void 0, void 0, function* () {
293
+ const { srcDir, outputDir1, outputDir2 } = createTestEnv("optimization-flags");
294
+ yield createTestFiles(srcDir, {
295
+ "api.jsonschema.ts": `
296
+ export interface IRequest {
297
+ method: string;
298
+ url: string;
299
+ headers: Record<string, string>;
300
+ body?: unknown;
301
+ }
302
+
303
+ export interface IResponse {
304
+ status: number;
305
+ headers: Record<string, string>;
306
+ data: unknown;
307
+ }
308
+ `
309
+ });
310
+ const baseOptions = {
311
+ glob: "**/*.jsonschema.ts",
312
+ rootPath: srcDir,
313
+ output: "",
314
+ tsconfigPath: "",
315
+ helpers: true,
316
+ additionalProperties: false,
317
+ verbose: false,
318
+ progress: false,
319
+ minify: true,
320
+ cache: false,
321
+ parallel: true,
322
+ treeShaking: true,
323
+ lazyLoad: true,
324
+ };
325
+ // Test multiple combinations
326
+ const generator1 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, baseOptions), { output: outputDir1 }));
327
+ yield generator1.Generate();
328
+ const generator2 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, baseOptions), { output: outputDir2 }));
329
+ yield generator2.Generate();
330
+ expect(compareDirectories(outputDir1, outputDir2)).toBe(true);
331
+ }));
332
+ it("should handle files with same symbols consistently", () => __awaiter(void 0, void 0, void 0, function* () {
333
+ const { srcDir, outputDir1, outputDir2 } = createTestEnv("duplicate-symbols");
334
+ yield createTestFiles(srcDir, {
335
+ "module1.jsonschema.ts": `
336
+ export interface IShared {
337
+ id: string;
338
+ name: string;
339
+ }
340
+
341
+ export interface IModule1 {
342
+ shared: IShared;
343
+ specific1: string;
344
+ }
345
+ `,
346
+ "module2.jsonschema.ts": `
347
+ export interface IShared {
348
+ id: string;
349
+ name: string;
350
+ }
351
+
352
+ export interface IModule2 {
353
+ shared: IShared;
354
+ specific2: number;
355
+ }
356
+ `
357
+ });
358
+ const options = {
359
+ glob: "**/*.jsonschema.ts",
360
+ rootPath: srcDir,
361
+ output: "",
362
+ tsconfigPath: "",
363
+ helpers: true,
364
+ additionalProperties: false,
365
+ verbose: false,
366
+ progress: false,
367
+ minify: false,
368
+ cache: false,
369
+ parallel: true,
370
+ treeShaking: false,
371
+ lazyLoad: false,
372
+ };
373
+ const generator1 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir1 }));
374
+ yield generator1.Generate();
375
+ const generator2 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir2 }));
376
+ yield generator2.Generate();
377
+ expect(compareDirectories(outputDir1, outputDir2)).toBe(true);
378
+ }));
379
+ it("should generate deterministic output with cache enabled", () => __awaiter(void 0, void 0, void 0, function* () {
380
+ const { srcDir, outputDir1, outputDir2 } = createTestEnv("with-cache");
381
+ yield createTestFiles(srcDir, {
382
+ "cached.jsonschema.ts": `
383
+ export interface ICached {
384
+ id: string;
385
+ value: number;
386
+ timestamp: Date;
387
+ }
388
+ `
389
+ });
390
+ const options = {
391
+ glob: "**/*.jsonschema.ts",
392
+ rootPath: srcDir,
393
+ output: "",
394
+ tsconfigPath: "",
395
+ helpers: true,
396
+ additionalProperties: false,
397
+ verbose: false,
398
+ progress: false,
399
+ minify: false,
400
+ cache: true, // Enable caching
401
+ parallel: true,
402
+ treeShaking: false,
403
+ lazyLoad: false,
404
+ };
405
+ // First run with cache
406
+ const generator1 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir1 }));
407
+ yield generator1.Generate();
408
+ // Second run should use cache
409
+ const generator2 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir2 }));
410
+ yield generator2.Generate();
411
+ expect(compareDirectories(outputDir1, outputDir2)).toBe(true);
412
+ // Clear cache and run again
413
+ generator2.clearCache();
414
+ const outputDir3 = path.join(baseTestDir, "with-cache/output-3");
415
+ const generator3 = new SchemaGenerator_1.SchemaGenerator(Object.assign(Object.assign({}, options), { output: outputDir3 }));
416
+ yield generator3.Generate();
417
+ expect(compareDirectories(outputDir1, outputDir3)).toBe(true);
418
+ }));
419
+ });
420
+ //# sourceMappingURL=SchemaGenerator.deterministic-extended.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaGenerator.deterministic-extended.test.js","sourceRoot":"","sources":["../src/SchemaGenerator.deterministic-extended.test.ts"],"names":[],"mappings":"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"}