ts-runtime-validation 1.6.15 → 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.
Files changed (79) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/CONTRIBUTING.md +430 -0
  3. package/README.md +444 -64
  4. package/dist/ICommandOptions.js +3 -0
  5. package/dist/ICommandOptions.js.map +1 -0
  6. package/dist/SchemaGenerator.integration.test.js +323 -0
  7. package/dist/SchemaGenerator.integration.test.js.map +1 -0
  8. package/dist/SchemaGenerator.js +120 -0
  9. package/dist/SchemaGenerator.js.map +1 -0
  10. package/dist/SchemaGenerator.test.js +132 -0
  11. package/dist/SchemaGenerator.test.js.map +1 -0
  12. package/dist/errors/index.js +95 -0
  13. package/dist/errors/index.js.map +1 -0
  14. package/dist/errors/index.test.js +232 -0
  15. package/dist/errors/index.test.js.map +1 -0
  16. package/dist/getPosixPath.js +13 -0
  17. package/dist/getPosixPath.js.map +1 -0
  18. package/dist/index.js +27 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/lib.js.map +1 -0
  21. package/dist/services/CodeGenerator.js +305 -0
  22. package/dist/services/CodeGenerator.js.map +1 -0
  23. package/dist/services/FileDiscovery.js +121 -0
  24. package/dist/services/FileDiscovery.js.map +1 -0
  25. package/dist/services/FileDiscovery.test.js +184 -0
  26. package/dist/services/FileDiscovery.test.js.map +1 -0
  27. package/dist/services/SchemaProcessor.js +182 -0
  28. package/dist/services/SchemaProcessor.js.map +1 -0
  29. package/dist/services/SchemaProcessor.test.js +395 -0
  30. package/dist/services/SchemaProcessor.test.js.map +1 -0
  31. package/dist/services/SchemaWriter.js +76 -0
  32. package/dist/services/SchemaWriter.js.map +1 -0
  33. package/dist/services/SchemaWriter.test.js +255 -0
  34. package/dist/services/SchemaWriter.test.js.map +1 -0
  35. package/dist/test/basic-scenario/types.jsonschema.js +3 -0
  36. package/dist/test/basic-scenario/types.jsonschema.js.map +1 -0
  37. package/dist/test/duplicate-symbols-different-implementation/IBaseType.js +3 -0
  38. package/dist/test/duplicate-symbols-different-implementation/IBaseType.js.map +1 -0
  39. package/dist/test/duplicate-symbols-different-implementation/IBaseTypeDefinitionReplicated.js +3 -0
  40. package/dist/test/duplicate-symbols-different-implementation/IBaseTypeDefinitionReplicated.js.map +1 -0
  41. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesA.jsonschema.js +3 -0
  42. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesA.jsonschema.js.map +1 -0
  43. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesB.jsonschema.js +3 -0
  44. package/dist/test/duplicate-symbols-different-implementation/IBasicTypesB.jsonschema.js.map +1 -0
  45. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseType.js +3 -0
  46. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseType.js.map +1 -0
  47. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseTypeDefinitionReplicated.js +3 -0
  48. package/dist/test/duplicate-symbols-identitcal-implementation/IBaseTypeDefinitionReplicated.js.map +1 -0
  49. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesA.jsonschema.js +3 -0
  50. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesA.jsonschema.js.map +1 -0
  51. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesB.jsonschema.js +3 -0
  52. package/dist/test/duplicate-symbols-identitcal-implementation/IBasicTypesB.jsonschema.js.map +1 -0
  53. package/dist/test/output/duplicate-symbols-identitcal-implementation/ValidationType.js +3 -0
  54. package/dist/test/output/duplicate-symbols-identitcal-implementation/ValidationType.js.map +1 -0
  55. package/dist/test/output/duplicate-symbols-identitcal-implementation/isValidSchema.js +49 -0
  56. package/dist/test/output/duplicate-symbols-identitcal-implementation/isValidSchema.js.map +1 -0
  57. package/dist/utils/ProgressReporter.js +67 -0
  58. package/dist/utils/ProgressReporter.js.map +1 -0
  59. package/dist/utils/ProgressReporter.test.js +267 -0
  60. package/dist/utils/ProgressReporter.test.js.map +1 -0
  61. package/dist/writeLine.js +12 -0
  62. package/dist/writeLine.js.map +1 -0
  63. package/package.json +2 -2
  64. package/src/ICommandOptions.ts +7 -0
  65. package/src/SchemaGenerator.integration.test.ts +411 -0
  66. package/src/SchemaGenerator.test.ts +7 -0
  67. package/src/SchemaGenerator.ts +112 -298
  68. package/src/errors/index.test.ts +319 -0
  69. package/src/errors/index.ts +92 -0
  70. package/src/index.ts +7 -0
  71. package/src/services/CodeGenerator.ts +352 -0
  72. package/src/services/FileDiscovery.test.ts +216 -0
  73. package/src/services/FileDiscovery.ts +137 -0
  74. package/src/services/SchemaProcessor.test.ts +464 -0
  75. package/src/services/SchemaProcessor.ts +173 -0
  76. package/src/services/SchemaWriter.test.ts +304 -0
  77. package/src/services/SchemaWriter.ts +75 -0
  78. package/src/utils/ProgressReporter.test.ts +357 -0
  79. 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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"}