ts-runtime-validation 1.8.1 → 1.8.2
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/README.md +38 -38
- package/dist/SchemaGenerator.js +3 -1
- package/dist/SchemaGenerator.js.map +1 -1
- package/dist/services/SchemaProcessor.js +77 -1
- package/dist/services/SchemaProcessor.js.map +1 -1
- package/dist/services/SchemaProcessor.test.js +197 -0
- package/dist/services/SchemaProcessor.test.js.map +1 -1
- package/package.json +1 -1
- package/src/SchemaGenerator.ts +3 -1
- package/src/services/SchemaProcessor.test.ts +234 -0
- package/src/services/SchemaProcessor.ts +103 -2
package/README.md
CHANGED
|
@@ -4,36 +4,36 @@
|
|
|
4
4
|
|
|
5
5
|
Automatically generate type-safe runtime validation from your existing TypeScript interfaces. Zero configuration, zero decorators - just add JSDoc comments for validation rules and get bulletproof runtime type checking with full TypeScript support.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**[Project Marketing Page](https://www.thegalah.com/projects/ts-runtime-validation)**
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Features
|
|
10
10
|
|
|
11
11
|
### Core Features
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
13
|
+
- **Zero-effort validation** - Automatically generates JSON Schema validators from TypeScript interfaces
|
|
14
|
+
- **Type-safe** - Full TypeScript support with type inference and type guards
|
|
15
|
+
- **Lightweight** - Minimal dependencies, can be installed as a dev dependency
|
|
16
|
+
- **CLI & Programmatic API** - Use as a CLI tool or integrate into your build process
|
|
17
|
+
- **Selective generation** - Control which types to validate using file naming conventions
|
|
18
|
+
- **JSDoc annotations** - Add validation rules (min/max length, patterns, formats) directly in your TypeScript code
|
|
19
19
|
|
|
20
20
|
### Performance & Optimization
|
|
21
21
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
22
|
+
- **Incremental builds** - File-based caching for faster subsequent builds
|
|
23
|
+
- **Parallel processing** - Concurrent file processing for improved performance
|
|
24
|
+
- **Progress reporting** - Visual feedback for long-running operations
|
|
25
|
+
- **Tree-shaking friendly** - Generate optimized exports for smaller bundles
|
|
26
|
+
- **Lazy loading** - Optional deferred validator initialization
|
|
27
|
+
- **Minified output** - Compressed JSON schemas for production
|
|
28
|
+
- **Verbose logging** - Detailed debugging information when needed
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Prerequisites
|
|
31
31
|
|
|
32
32
|
- Node.js >= 12
|
|
33
33
|
- TypeScript >= 4.0
|
|
34
34
|
- `ajv` >= 8.11.0 (peer dependency for runtime validation)
|
|
35
35
|
|
|
36
|
-
##
|
|
36
|
+
## Installation
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
39
|
# Using yarn (recommended)
|
|
@@ -45,7 +45,7 @@ npm install --save-dev ts-runtime-validation
|
|
|
45
45
|
npm install ajv # Required peer dependency
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
##
|
|
48
|
+
## Quick Start
|
|
49
49
|
|
|
50
50
|
### 1. Mark your types for validation
|
|
51
51
|
|
|
@@ -155,7 +155,7 @@ if (isValidSchema(userData, "#/definitions/IUser")) {
|
|
|
155
155
|
}
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
##
|
|
158
|
+
## Usage
|
|
159
159
|
|
|
160
160
|
### CLI Options
|
|
161
161
|
|
|
@@ -322,7 +322,7 @@ ts-runtime-validation --cache --minify --no-parallel
|
|
|
322
322
|
ts-runtime-validation --verbose --progress --no-parallel
|
|
323
323
|
```
|
|
324
324
|
|
|
325
|
-
##
|
|
325
|
+
## Performance & Optimization
|
|
326
326
|
|
|
327
327
|
### Caching System
|
|
328
328
|
|
|
@@ -412,13 +412,13 @@ const getValidator = () => {
|
|
|
412
412
|
};
|
|
413
413
|
```
|
|
414
414
|
|
|
415
|
-
##
|
|
415
|
+
## Limitations
|
|
416
416
|
|
|
417
417
|
- **No duplicate type names** - Each interface/type must have a unique name across all schema files
|
|
418
418
|
- **TypeScript-only constructs** - Some advanced TypeScript features (like conditional types) may not be fully supported
|
|
419
419
|
- **Circular references** - Limited support for circular type references
|
|
420
420
|
|
|
421
|
-
##
|
|
421
|
+
## Contributing
|
|
422
422
|
|
|
423
423
|
We welcome contributions! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
|
|
424
424
|
|
|
@@ -461,7 +461,7 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed information about:
|
|
|
461
461
|
- Performance optimization techniques
|
|
462
462
|
- Testing approaches and best practices
|
|
463
463
|
|
|
464
|
-
##
|
|
464
|
+
## Acknowledgments
|
|
465
465
|
|
|
466
466
|
Built with modern tools and optimized for performance:
|
|
467
467
|
|
|
@@ -471,7 +471,7 @@ Built with modern tools and optimized for performance:
|
|
|
471
471
|
- [fdir](https://github.com/thecodrr/fdir) - Fast file system traversal
|
|
472
472
|
- [picomatch](https://github.com/micromatch/picomatch) - Efficient glob pattern matching
|
|
473
473
|
|
|
474
|
-
##
|
|
474
|
+
## Related Projects & Comparisons
|
|
475
475
|
|
|
476
476
|
### How ts-runtime-validation differs from alternatives:
|
|
477
477
|
|
|
@@ -486,21 +486,21 @@ Built with modern tools and optimized for performance:
|
|
|
486
486
|
|
|
487
487
|
**ts-runtime-validation**:
|
|
488
488
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
489
|
+
-**Zero runtime API** - Works with your existing TypeScript interfaces
|
|
490
|
+
-**Build-time generation** - No runtime overhead for schema creation
|
|
491
|
+
-**JSDoc validation rules** - Add constraints via comments
|
|
492
|
+
-**Intelligent caching** - Fast incremental builds with change detection
|
|
493
|
+
-**Performance optimized** - Parallel processing and bundle optimization
|
|
494
|
+
-**Requires build step** - Must regenerate when types change
|
|
495
|
+
-**No runtime schema composition** - Can't dynamically create schemas
|
|
496
496
|
|
|
497
497
|
**zod/io-ts/yup**:
|
|
498
498
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
499
|
+
-**Runtime flexibility** - Create and compose schemas dynamically
|
|
500
|
+
-**Single source of truth** - Schema and type defined together
|
|
501
|
+
-**No build step** - Works immediately in your code
|
|
502
|
+
-**Runtime overhead** - Schemas created at runtime
|
|
503
|
+
-**Duplicate type definitions** - Can't reuse existing TypeScript interfaces
|
|
504
504
|
|
|
505
505
|
Choose **ts-runtime-validation** when you:
|
|
506
506
|
|
|
@@ -519,7 +519,7 @@ Choose **alternatives** when you:
|
|
|
519
519
|
- Need complex runtime transformations or coercions
|
|
520
520
|
- Want extensive built-in validation methods and error messages
|
|
521
521
|
|
|
522
|
-
##
|
|
522
|
+
## Troubleshooting
|
|
523
523
|
|
|
524
524
|
### Generated files are not updating
|
|
525
525
|
|
|
@@ -533,7 +533,7 @@ ts-runtime-validation --cache
|
|
|
533
533
|
|
|
534
534
|
### Hash inconsistencies between runs
|
|
535
535
|
|
|
536
|
-
Version 1.8.
|
|
536
|
+
Version 1.8.2+ includes fixes for deterministic output generation. If you're experiencing different file hashes between runs, ensure you're using the latest version.
|
|
537
537
|
|
|
538
538
|
### Performance issues with large projects
|
|
539
539
|
|
package/dist/SchemaGenerator.js
CHANGED
|
@@ -90,7 +90,9 @@ class SchemaGenerator {
|
|
|
90
90
|
additionalProperties: options.additionalProperties,
|
|
91
91
|
tsconfigPath: options.tsconfigPath || undefined,
|
|
92
92
|
parallel: options.parallel !== false,
|
|
93
|
-
verbose: options.verbose || false
|
|
93
|
+
verbose: options.verbose || false,
|
|
94
|
+
glob: options.glob,
|
|
95
|
+
rootPath: options.rootPath
|
|
94
96
|
});
|
|
95
97
|
this.codeGenerator = new CodeGenerator_1.CodeGenerator({
|
|
96
98
|
outputPath: this.outputPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../src/SchemaGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,gDAAwB;AACxB,4DAAyD;AACzD,gEAA6D;AAC7D,4DAAyD;AACzD,0DAAuD;AACvD,+DAA4D;AAC5D,qCAAqD;AAErD,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAC1D,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AACvD,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AACrD,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEjD,MAAa,eAAe;IAaxB,YAA2B,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;QAZ3C,eAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,yBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;QAC5E,iCAA4B,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;QACpF,8BAAyB,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;QACjF,4BAAuB,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../src/SchemaGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
48
48
|
exports.SchemaProcessor = void 0;
|
|
49
49
|
const tsj = __importStar(require("ts-json-schema-generator"));
|
|
50
50
|
const assert_1 = __importDefault(require("assert"));
|
|
51
|
+
const path_1 = __importDefault(require("path"));
|
|
52
|
+
const ts_morph_1 = require("ts-morph");
|
|
51
53
|
const errors_1 = require("../errors");
|
|
52
54
|
class SchemaProcessor {
|
|
53
55
|
constructor(options) {
|
|
@@ -55,18 +57,92 @@ class SchemaProcessor {
|
|
|
55
57
|
}
|
|
56
58
|
processFiles(files) {
|
|
57
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
-
const { parallel = true, verbose = false } = this.options;
|
|
60
|
+
const { parallel = true, verbose = false, glob, rootPath } = this.options;
|
|
59
61
|
if (verbose) {
|
|
60
62
|
console.log(`Processing ${files.length} files...`);
|
|
61
63
|
}
|
|
62
64
|
// Sort files by path to ensure consistent processing order
|
|
63
65
|
const sortedFiles = [...files].sort((a, b) => a.path.localeCompare(b.path));
|
|
66
|
+
// Use single-pass processing when possible (avoids creating N TypeScript programs)
|
|
67
|
+
if (glob && rootPath && sortedFiles.length > 1) {
|
|
68
|
+
try {
|
|
69
|
+
return yield this.processSinglePass(sortedFiles, rootPath, glob);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (verbose) {
|
|
73
|
+
console.log(`Single-pass processing failed, falling back to per-file processing: ${error instanceof Error ? error.message : String(error)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
64
77
|
const results = parallel
|
|
65
78
|
? yield this.processInParallel(sortedFiles)
|
|
66
79
|
: yield this.processSequentially(sortedFiles);
|
|
67
80
|
return this.consolidateSchemas(results);
|
|
68
81
|
});
|
|
69
82
|
}
|
|
83
|
+
processSinglePass(files, rootPath, glob) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
const { additionalProperties, tsconfigPath, verbose } = this.options;
|
|
86
|
+
// Pre-check: scan all TS files in rootPath for duplicate exported type names.
|
|
87
|
+
// If duplicates exist, per-file processing is needed to detect schema conflicts.
|
|
88
|
+
if (this.hasDuplicateTypeNames(rootPath)) {
|
|
89
|
+
throw new Error("Duplicate type names detected across source files");
|
|
90
|
+
}
|
|
91
|
+
const resolvedRoot = path_1.default.resolve(rootPath);
|
|
92
|
+
const globPattern = path_1.default.join(resolvedRoot, "**", glob);
|
|
93
|
+
if (verbose) {
|
|
94
|
+
console.log(`Single-pass processing with pattern: ${globPattern}`);
|
|
95
|
+
}
|
|
96
|
+
const config = Object.assign({ path: globPattern, type: "*", additionalProperties, encodeRefs: false, sortProps: true }, (tsconfigPath ? { tsconfig: tsconfigPath } : {}));
|
|
97
|
+
const schemaGenerator = tsj.createGenerator(config);
|
|
98
|
+
const fullSchema = schemaGenerator.createSchema(config.type);
|
|
99
|
+
return this.partitionSchemaByFile(files, fullSchema);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
hasDuplicateTypeNames(rootPath) {
|
|
103
|
+
const project = new ts_morph_1.Project({ skipAddingFilesFromTsConfig: true });
|
|
104
|
+
const allTsFiles = project.addSourceFilesAtPaths(path_1.default.join(path_1.default.resolve(rootPath), "**/*.{ts,tsx}"));
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
for (const sf of allTsFiles) {
|
|
107
|
+
const names = [];
|
|
108
|
+
for (const t of sf.getTypeAliases()) {
|
|
109
|
+
if (t.isExported())
|
|
110
|
+
names.push(t.getName());
|
|
111
|
+
}
|
|
112
|
+
for (const i of sf.getInterfaces()) {
|
|
113
|
+
if (i.isExported())
|
|
114
|
+
names.push(i.getName());
|
|
115
|
+
}
|
|
116
|
+
for (const e of sf.getEnums()) {
|
|
117
|
+
if (e.isExported())
|
|
118
|
+
names.push(e.getName());
|
|
119
|
+
}
|
|
120
|
+
for (const name of names) {
|
|
121
|
+
if (seen.has(name))
|
|
122
|
+
return true;
|
|
123
|
+
seen.add(name);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
partitionSchemaByFile(files, fullSchema) {
|
|
129
|
+
var _a;
|
|
130
|
+
const defs = (_a = fullSchema.definitions) !== null && _a !== void 0 ? _a : {};
|
|
131
|
+
const schemaVersion = fullSchema.$schema || "http://json-schema.org/draft-07/schema#";
|
|
132
|
+
const schemaMap = new Map();
|
|
133
|
+
if (Object.keys(defs).length === 0)
|
|
134
|
+
return schemaMap;
|
|
135
|
+
// Since we've verified no duplicate type names exist, assign all definitions
|
|
136
|
+
// to each file. Downstream code (extractTypeInfo) uses ts-morph to correctly
|
|
137
|
+
// attribute each definition to its actual source file.
|
|
138
|
+
for (const file of files) {
|
|
139
|
+
schemaMap.set(file.path, {
|
|
140
|
+
$schema: schemaVersion,
|
|
141
|
+
definitions: Object.assign({}, defs),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
return schemaMap;
|
|
145
|
+
}
|
|
70
146
|
processInParallel(files) {
|
|
71
147
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
148
|
const promises = files.map(file => this.processFile(file));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaProcessor.js","sourceRoot":"","sources":["../../src/services/SchemaProcessor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgD;AAEhD,oDAA4B;AAC5B,sCAAwE;
|
|
1
|
+
{"version":3,"file":"SchemaProcessor.js","sourceRoot":"","sources":["../../src/services/SchemaProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -353,6 +353,203 @@ describe("SchemaProcessor", () => {
|
|
|
353
353
|
expect(definitionKeys).toEqual(['Type1', 'Type10', 'Type2', 'TypeA']);
|
|
354
354
|
}));
|
|
355
355
|
});
|
|
356
|
+
describe("single-pass processing", () => {
|
|
357
|
+
it("should use single-pass when glob and rootPath are provided with multiple files", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
358
|
+
const file1 = yield createTestFile("user.jsonschema.ts", `
|
|
359
|
+
export interface IUser {
|
|
360
|
+
id: string;
|
|
361
|
+
name: string;
|
|
362
|
+
}
|
|
363
|
+
`);
|
|
364
|
+
const file2 = yield createTestFile("product.jsonschema.ts", `
|
|
365
|
+
export interface IProduct {
|
|
366
|
+
id: string;
|
|
367
|
+
title: string;
|
|
368
|
+
price: number;
|
|
369
|
+
}
|
|
370
|
+
`);
|
|
371
|
+
const processor = new SchemaProcessor_1.SchemaProcessor({
|
|
372
|
+
additionalProperties: false,
|
|
373
|
+
parallel: false,
|
|
374
|
+
verbose: false,
|
|
375
|
+
glob: "*.jsonschema.ts",
|
|
376
|
+
rootPath: testDir
|
|
377
|
+
});
|
|
378
|
+
const files = [
|
|
379
|
+
{ path: file1 },
|
|
380
|
+
{ path: file2 }
|
|
381
|
+
];
|
|
382
|
+
const schemaMap = yield processor.processFiles(files);
|
|
383
|
+
expect(schemaMap.size).toBe(2);
|
|
384
|
+
expect(schemaMap.has(file1)).toBe(true);
|
|
385
|
+
expect(schemaMap.has(file2)).toBe(true);
|
|
386
|
+
// Both files should have all definitions (single-pass partitioning)
|
|
387
|
+
const schema1 = schemaMap.get(file1);
|
|
388
|
+
const schema2 = schemaMap.get(file2);
|
|
389
|
+
expect(schema1.definitions.IUser).toBeDefined();
|
|
390
|
+
expect(schema1.definitions.IProduct).toBeDefined();
|
|
391
|
+
expect(schema2.definitions.IUser).toBeDefined();
|
|
392
|
+
expect(schema2.definitions.IProduct).toBeDefined();
|
|
393
|
+
}));
|
|
394
|
+
it("should fall back to per-file processing when duplicate type names exist", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
395
|
+
const file1 = yield createTestFile("a/types.jsonschema.ts", `
|
|
396
|
+
export interface IDuplicate {
|
|
397
|
+
id: string;
|
|
398
|
+
name: string;
|
|
399
|
+
}
|
|
400
|
+
`);
|
|
401
|
+
const file2 = yield createTestFile("b/types.jsonschema.ts", `
|
|
402
|
+
export interface IDuplicate {
|
|
403
|
+
id: string;
|
|
404
|
+
email: string;
|
|
405
|
+
}
|
|
406
|
+
`);
|
|
407
|
+
const processor = new SchemaProcessor_1.SchemaProcessor({
|
|
408
|
+
additionalProperties: false,
|
|
409
|
+
parallel: false,
|
|
410
|
+
verbose: false,
|
|
411
|
+
glob: "*.jsonschema.ts",
|
|
412
|
+
rootPath: testDir
|
|
413
|
+
});
|
|
414
|
+
const files = [
|
|
415
|
+
{ path: file1 },
|
|
416
|
+
{ path: file2 }
|
|
417
|
+
];
|
|
418
|
+
const schemaMap = yield processor.processFiles(files);
|
|
419
|
+
// Falls back to per-file: each file only has its own definitions
|
|
420
|
+
const schema1 = schemaMap.get(file1);
|
|
421
|
+
const schema2 = schemaMap.get(file2);
|
|
422
|
+
expect(schema1.definitions.IDuplicate).toBeDefined();
|
|
423
|
+
expect(schema2.definitions.IDuplicate).toBeDefined();
|
|
424
|
+
// The schemas should differ (different implementations)
|
|
425
|
+
expect(schema1.definitions.IDuplicate.properties.name).toBeDefined();
|
|
426
|
+
expect(schema2.definitions.IDuplicate.properties.email).toBeDefined();
|
|
427
|
+
}));
|
|
428
|
+
it("should not use single-pass for a single file", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
429
|
+
const file1 = yield createTestFile("user.jsonschema.ts", `
|
|
430
|
+
export interface IUser {
|
|
431
|
+
id: string;
|
|
432
|
+
name: string;
|
|
433
|
+
}
|
|
434
|
+
`);
|
|
435
|
+
const processor = new SchemaProcessor_1.SchemaProcessor({
|
|
436
|
+
additionalProperties: false,
|
|
437
|
+
parallel: false,
|
|
438
|
+
verbose: false,
|
|
439
|
+
glob: "*.jsonschema.ts",
|
|
440
|
+
rootPath: testDir
|
|
441
|
+
});
|
|
442
|
+
const files = [{ path: file1 }];
|
|
443
|
+
const schemaMap = yield processor.processFiles(files);
|
|
444
|
+
expect(schemaMap.size).toBe(1);
|
|
445
|
+
const schema = schemaMap.get(file1);
|
|
446
|
+
expect(schema.definitions.IUser).toBeDefined();
|
|
447
|
+
}));
|
|
448
|
+
it("should not use single-pass when glob is not provided", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
449
|
+
const file1 = yield createTestFile("user.jsonschema.ts", `
|
|
450
|
+
export interface IUser {
|
|
451
|
+
id: string;
|
|
452
|
+
name: string;
|
|
453
|
+
}
|
|
454
|
+
`);
|
|
455
|
+
const file2 = yield createTestFile("product.jsonschema.ts", `
|
|
456
|
+
export interface IProduct {
|
|
457
|
+
id: string;
|
|
458
|
+
title: string;
|
|
459
|
+
}
|
|
460
|
+
`);
|
|
461
|
+
const processor = new SchemaProcessor_1.SchemaProcessor({
|
|
462
|
+
additionalProperties: false,
|
|
463
|
+
parallel: false,
|
|
464
|
+
verbose: false
|
|
465
|
+
// no glob or rootPath
|
|
466
|
+
});
|
|
467
|
+
const files = [
|
|
468
|
+
{ path: file1 },
|
|
469
|
+
{ path: file2 }
|
|
470
|
+
];
|
|
471
|
+
const schemaMap = yield processor.processFiles(files);
|
|
472
|
+
expect(schemaMap.size).toBe(2);
|
|
473
|
+
// Per-file: each file only has its own definitions
|
|
474
|
+
const schema1 = schemaMap.get(file1);
|
|
475
|
+
expect(schema1.definitions.IUser).toBeDefined();
|
|
476
|
+
expect(schema1.definitions.IProduct).toBeUndefined();
|
|
477
|
+
}));
|
|
478
|
+
it("should include referenced types from non-schema files in single-pass output", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
479
|
+
yield createTestFile("shared/BaseType.ts", `
|
|
480
|
+
export interface IBaseType {
|
|
481
|
+
id: string;
|
|
482
|
+
}
|
|
483
|
+
`);
|
|
484
|
+
const file1 = yield createTestFile("a.jsonschema.ts", `
|
|
485
|
+
import { IBaseType } from "./shared/BaseType";
|
|
486
|
+
export interface ITypeA {
|
|
487
|
+
base: IBaseType;
|
|
488
|
+
}
|
|
489
|
+
`);
|
|
490
|
+
const file2 = yield createTestFile("b.jsonschema.ts", `
|
|
491
|
+
import { IBaseType } from "./shared/BaseType";
|
|
492
|
+
export interface ITypeB {
|
|
493
|
+
base: IBaseType;
|
|
494
|
+
}
|
|
495
|
+
`);
|
|
496
|
+
const processor = new SchemaProcessor_1.SchemaProcessor({
|
|
497
|
+
additionalProperties: false,
|
|
498
|
+
parallel: false,
|
|
499
|
+
verbose: false,
|
|
500
|
+
glob: "*.jsonschema.ts",
|
|
501
|
+
rootPath: testDir
|
|
502
|
+
});
|
|
503
|
+
const files = [
|
|
504
|
+
{ path: file1 },
|
|
505
|
+
{ path: file2 }
|
|
506
|
+
];
|
|
507
|
+
const schemaMap = yield processor.processFiles(files);
|
|
508
|
+
const mergedSchema = processor.mergeSchemas(schemaMap);
|
|
509
|
+
// IBaseType should appear in the merged output even though
|
|
510
|
+
// it's not directly in a .jsonschema.ts file
|
|
511
|
+
expect(mergedSchema.definitions.IBaseType).toBeDefined();
|
|
512
|
+
expect(mergedSchema.definitions.ITypeA).toBeDefined();
|
|
513
|
+
expect(mergedSchema.definitions.ITypeB).toBeDefined();
|
|
514
|
+
}));
|
|
515
|
+
it("should produce same merged schema whether using single-pass or per-file", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
516
|
+
const file1 = yield createTestFile("user.jsonschema.ts", `
|
|
517
|
+
export interface IUser {
|
|
518
|
+
id: string;
|
|
519
|
+
name: string;
|
|
520
|
+
}
|
|
521
|
+
`);
|
|
522
|
+
const file2 = yield createTestFile("product.jsonschema.ts", `
|
|
523
|
+
export interface IProduct {
|
|
524
|
+
id: string;
|
|
525
|
+
title: string;
|
|
526
|
+
price: number;
|
|
527
|
+
}
|
|
528
|
+
`);
|
|
529
|
+
const files = [
|
|
530
|
+
{ path: file1 },
|
|
531
|
+
{ path: file2 }
|
|
532
|
+
];
|
|
533
|
+
// Single-pass (with glob/rootPath)
|
|
534
|
+
const singlePassProcessor = new SchemaProcessor_1.SchemaProcessor({
|
|
535
|
+
additionalProperties: false,
|
|
536
|
+
parallel: false,
|
|
537
|
+
glob: "*.jsonschema.ts",
|
|
538
|
+
rootPath: testDir
|
|
539
|
+
});
|
|
540
|
+
const singlePassMap = yield singlePassProcessor.processFiles(files);
|
|
541
|
+
const singlePassMerged = singlePassProcessor.mergeSchemas(singlePassMap);
|
|
542
|
+
// Per-file (without glob/rootPath)
|
|
543
|
+
const perFileProcessor = new SchemaProcessor_1.SchemaProcessor({
|
|
544
|
+
additionalProperties: false,
|
|
545
|
+
parallel: false
|
|
546
|
+
});
|
|
547
|
+
const perFileMap = yield perFileProcessor.processFiles(files);
|
|
548
|
+
const perFileMerged = perFileProcessor.mergeSchemas(perFileMap);
|
|
549
|
+
// Merged schemas should be identical
|
|
550
|
+
expect(singlePassMerged).toStrictEqual(perFileMerged);
|
|
551
|
+
}));
|
|
552
|
+
});
|
|
356
553
|
describe("error handling", () => {
|
|
357
554
|
it("should handle missing files gracefully", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
358
555
|
const processor = new SchemaProcessor_1.SchemaProcessor({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaProcessor.test.js","sourceRoot":"","sources":["../../src/services/SchemaProcessor.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SchemaProcessor.test.js","sourceRoot":"","sources":["../../src/services/SchemaProcessor.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/SchemaGenerator.ts
CHANGED
|
@@ -37,7 +37,9 @@ export class SchemaGenerator {
|
|
|
37
37
|
additionalProperties: options.additionalProperties,
|
|
38
38
|
tsconfigPath: options.tsconfigPath || undefined,
|
|
39
39
|
parallel: options.parallel !== false,
|
|
40
|
-
verbose: options.verbose || false
|
|
40
|
+
verbose: options.verbose || false,
|
|
41
|
+
glob: options.glob,
|
|
42
|
+
rootPath: options.rootPath
|
|
41
43
|
});
|
|
42
44
|
|
|
43
45
|
this.codeGenerator = new CodeGenerator({
|
|
@@ -414,6 +414,240 @@ describe("SchemaProcessor", () => {
|
|
|
414
414
|
});
|
|
415
415
|
});
|
|
416
416
|
|
|
417
|
+
describe("single-pass processing", () => {
|
|
418
|
+
it("should use single-pass when glob and rootPath are provided with multiple files", async () => {
|
|
419
|
+
const file1 = await createTestFile("user.jsonschema.ts", `
|
|
420
|
+
export interface IUser {
|
|
421
|
+
id: string;
|
|
422
|
+
name: string;
|
|
423
|
+
}
|
|
424
|
+
`);
|
|
425
|
+
|
|
426
|
+
const file2 = await createTestFile("product.jsonschema.ts", `
|
|
427
|
+
export interface IProduct {
|
|
428
|
+
id: string;
|
|
429
|
+
title: string;
|
|
430
|
+
price: number;
|
|
431
|
+
}
|
|
432
|
+
`);
|
|
433
|
+
|
|
434
|
+
const processor = new SchemaProcessor({
|
|
435
|
+
additionalProperties: false,
|
|
436
|
+
parallel: false,
|
|
437
|
+
verbose: false,
|
|
438
|
+
glob: "*.jsonschema.ts",
|
|
439
|
+
rootPath: testDir
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
const files: FileInfo[] = [
|
|
443
|
+
{ path: file1 },
|
|
444
|
+
{ path: file2 }
|
|
445
|
+
];
|
|
446
|
+
|
|
447
|
+
const schemaMap = await processor.processFiles(files);
|
|
448
|
+
|
|
449
|
+
expect(schemaMap.size).toBe(2);
|
|
450
|
+
expect(schemaMap.has(file1)).toBe(true);
|
|
451
|
+
expect(schemaMap.has(file2)).toBe(true);
|
|
452
|
+
|
|
453
|
+
// Both files should have all definitions (single-pass partitioning)
|
|
454
|
+
const schema1 = schemaMap.get(file1)!;
|
|
455
|
+
const schema2 = schemaMap.get(file2)!;
|
|
456
|
+
expect(schema1.definitions!.IUser).toBeDefined();
|
|
457
|
+
expect(schema1.definitions!.IProduct).toBeDefined();
|
|
458
|
+
expect(schema2.definitions!.IUser).toBeDefined();
|
|
459
|
+
expect(schema2.definitions!.IProduct).toBeDefined();
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
it("should fall back to per-file processing when duplicate type names exist", async () => {
|
|
463
|
+
const file1 = await createTestFile("a/types.jsonschema.ts", `
|
|
464
|
+
export interface IDuplicate {
|
|
465
|
+
id: string;
|
|
466
|
+
name: string;
|
|
467
|
+
}
|
|
468
|
+
`);
|
|
469
|
+
|
|
470
|
+
const file2 = await createTestFile("b/types.jsonschema.ts", `
|
|
471
|
+
export interface IDuplicate {
|
|
472
|
+
id: string;
|
|
473
|
+
email: string;
|
|
474
|
+
}
|
|
475
|
+
`);
|
|
476
|
+
|
|
477
|
+
const processor = new SchemaProcessor({
|
|
478
|
+
additionalProperties: false,
|
|
479
|
+
parallel: false,
|
|
480
|
+
verbose: false,
|
|
481
|
+
glob: "*.jsonschema.ts",
|
|
482
|
+
rootPath: testDir
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
const files: FileInfo[] = [
|
|
486
|
+
{ path: file1 },
|
|
487
|
+
{ path: file2 }
|
|
488
|
+
];
|
|
489
|
+
|
|
490
|
+
const schemaMap = await processor.processFiles(files);
|
|
491
|
+
|
|
492
|
+
// Falls back to per-file: each file only has its own definitions
|
|
493
|
+
const schema1 = schemaMap.get(file1)!;
|
|
494
|
+
const schema2 = schemaMap.get(file2)!;
|
|
495
|
+
expect(schema1.definitions!.IDuplicate).toBeDefined();
|
|
496
|
+
expect(schema2.definitions!.IDuplicate).toBeDefined();
|
|
497
|
+
|
|
498
|
+
// The schemas should differ (different implementations)
|
|
499
|
+
expect((schema1.definitions!.IDuplicate as any).properties.name).toBeDefined();
|
|
500
|
+
expect((schema2.definitions!.IDuplicate as any).properties.email).toBeDefined();
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
it("should not use single-pass for a single file", async () => {
|
|
504
|
+
const file1 = await createTestFile("user.jsonschema.ts", `
|
|
505
|
+
export interface IUser {
|
|
506
|
+
id: string;
|
|
507
|
+
name: string;
|
|
508
|
+
}
|
|
509
|
+
`);
|
|
510
|
+
|
|
511
|
+
const processor = new SchemaProcessor({
|
|
512
|
+
additionalProperties: false,
|
|
513
|
+
parallel: false,
|
|
514
|
+
verbose: false,
|
|
515
|
+
glob: "*.jsonschema.ts",
|
|
516
|
+
rootPath: testDir
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
const files: FileInfo[] = [{ path: file1 }];
|
|
520
|
+
const schemaMap = await processor.processFiles(files);
|
|
521
|
+
|
|
522
|
+
expect(schemaMap.size).toBe(1);
|
|
523
|
+
const schema = schemaMap.get(file1)!;
|
|
524
|
+
expect(schema.definitions!.IUser).toBeDefined();
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
it("should not use single-pass when glob is not provided", async () => {
|
|
528
|
+
const file1 = await createTestFile("user.jsonschema.ts", `
|
|
529
|
+
export interface IUser {
|
|
530
|
+
id: string;
|
|
531
|
+
name: string;
|
|
532
|
+
}
|
|
533
|
+
`);
|
|
534
|
+
|
|
535
|
+
const file2 = await createTestFile("product.jsonschema.ts", `
|
|
536
|
+
export interface IProduct {
|
|
537
|
+
id: string;
|
|
538
|
+
title: string;
|
|
539
|
+
}
|
|
540
|
+
`);
|
|
541
|
+
|
|
542
|
+
const processor = new SchemaProcessor({
|
|
543
|
+
additionalProperties: false,
|
|
544
|
+
parallel: false,
|
|
545
|
+
verbose: false
|
|
546
|
+
// no glob or rootPath
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
const files: FileInfo[] = [
|
|
550
|
+
{ path: file1 },
|
|
551
|
+
{ path: file2 }
|
|
552
|
+
];
|
|
553
|
+
|
|
554
|
+
const schemaMap = await processor.processFiles(files);
|
|
555
|
+
|
|
556
|
+
expect(schemaMap.size).toBe(2);
|
|
557
|
+
// Per-file: each file only has its own definitions
|
|
558
|
+
const schema1 = schemaMap.get(file1)!;
|
|
559
|
+
expect(schema1.definitions!.IUser).toBeDefined();
|
|
560
|
+
expect(schema1.definitions!.IProduct).toBeUndefined();
|
|
561
|
+
});
|
|
562
|
+
|
|
563
|
+
it("should include referenced types from non-schema files in single-pass output", async () => {
|
|
564
|
+
await createTestFile("shared/BaseType.ts", `
|
|
565
|
+
export interface IBaseType {
|
|
566
|
+
id: string;
|
|
567
|
+
}
|
|
568
|
+
`);
|
|
569
|
+
|
|
570
|
+
const file1 = await createTestFile("a.jsonschema.ts", `
|
|
571
|
+
import { IBaseType } from "./shared/BaseType";
|
|
572
|
+
export interface ITypeA {
|
|
573
|
+
base: IBaseType;
|
|
574
|
+
}
|
|
575
|
+
`);
|
|
576
|
+
|
|
577
|
+
const file2 = await createTestFile("b.jsonschema.ts", `
|
|
578
|
+
import { IBaseType } from "./shared/BaseType";
|
|
579
|
+
export interface ITypeB {
|
|
580
|
+
base: IBaseType;
|
|
581
|
+
}
|
|
582
|
+
`);
|
|
583
|
+
|
|
584
|
+
const processor = new SchemaProcessor({
|
|
585
|
+
additionalProperties: false,
|
|
586
|
+
parallel: false,
|
|
587
|
+
verbose: false,
|
|
588
|
+
glob: "*.jsonschema.ts",
|
|
589
|
+
rootPath: testDir
|
|
590
|
+
});
|
|
591
|
+
|
|
592
|
+
const files: FileInfo[] = [
|
|
593
|
+
{ path: file1 },
|
|
594
|
+
{ path: file2 }
|
|
595
|
+
];
|
|
596
|
+
|
|
597
|
+
const schemaMap = await processor.processFiles(files);
|
|
598
|
+
const mergedSchema = processor.mergeSchemas(schemaMap);
|
|
599
|
+
|
|
600
|
+
// IBaseType should appear in the merged output even though
|
|
601
|
+
// it's not directly in a .jsonschema.ts file
|
|
602
|
+
expect(mergedSchema.definitions!.IBaseType).toBeDefined();
|
|
603
|
+
expect(mergedSchema.definitions!.ITypeA).toBeDefined();
|
|
604
|
+
expect(mergedSchema.definitions!.ITypeB).toBeDefined();
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
it("should produce same merged schema whether using single-pass or per-file", async () => {
|
|
608
|
+
const file1 = await createTestFile("user.jsonschema.ts", `
|
|
609
|
+
export interface IUser {
|
|
610
|
+
id: string;
|
|
611
|
+
name: string;
|
|
612
|
+
}
|
|
613
|
+
`);
|
|
614
|
+
|
|
615
|
+
const file2 = await createTestFile("product.jsonschema.ts", `
|
|
616
|
+
export interface IProduct {
|
|
617
|
+
id: string;
|
|
618
|
+
title: string;
|
|
619
|
+
price: number;
|
|
620
|
+
}
|
|
621
|
+
`);
|
|
622
|
+
|
|
623
|
+
const files: FileInfo[] = [
|
|
624
|
+
{ path: file1 },
|
|
625
|
+
{ path: file2 }
|
|
626
|
+
];
|
|
627
|
+
|
|
628
|
+
// Single-pass (with glob/rootPath)
|
|
629
|
+
const singlePassProcessor = new SchemaProcessor({
|
|
630
|
+
additionalProperties: false,
|
|
631
|
+
parallel: false,
|
|
632
|
+
glob: "*.jsonschema.ts",
|
|
633
|
+
rootPath: testDir
|
|
634
|
+
});
|
|
635
|
+
const singlePassMap = await singlePassProcessor.processFiles(files);
|
|
636
|
+
const singlePassMerged = singlePassProcessor.mergeSchemas(singlePassMap);
|
|
637
|
+
|
|
638
|
+
// Per-file (without glob/rootPath)
|
|
639
|
+
const perFileProcessor = new SchemaProcessor({
|
|
640
|
+
additionalProperties: false,
|
|
641
|
+
parallel: false
|
|
642
|
+
});
|
|
643
|
+
const perFileMap = await perFileProcessor.processFiles(files);
|
|
644
|
+
const perFileMerged = perFileProcessor.mergeSchemas(perFileMap);
|
|
645
|
+
|
|
646
|
+
// Merged schemas should be identical
|
|
647
|
+
expect(singlePassMerged).toStrictEqual(perFileMerged);
|
|
648
|
+
});
|
|
649
|
+
});
|
|
650
|
+
|
|
417
651
|
describe("error handling", () => {
|
|
418
652
|
it("should handle missing files gracefully", async () => {
|
|
419
653
|
const processor = new SchemaProcessor({
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as tsj from "ts-json-schema-generator";
|
|
2
2
|
import { Config, Schema } from "ts-json-schema-generator";
|
|
3
3
|
import assert from "assert";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { Project } from "ts-morph";
|
|
4
6
|
import { SchemaGenerationError, DuplicateSymbolError } from "../errors";
|
|
5
7
|
import { FileInfo } from "./FileDiscovery";
|
|
6
8
|
|
|
@@ -9,6 +11,8 @@ export interface SchemaProcessorOptions {
|
|
|
9
11
|
tsconfigPath?: string;
|
|
10
12
|
parallel?: boolean;
|
|
11
13
|
verbose?: boolean;
|
|
14
|
+
glob?: string;
|
|
15
|
+
rootPath?: string;
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
export interface ProcessingResult {
|
|
@@ -21,8 +25,8 @@ export class SchemaProcessor {
|
|
|
21
25
|
constructor(private options: SchemaProcessorOptions) {}
|
|
22
26
|
|
|
23
27
|
public async processFiles(files: FileInfo[]): Promise<Map<string, Schema>> {
|
|
24
|
-
const { parallel = true, verbose = false } = this.options;
|
|
25
|
-
|
|
28
|
+
const { parallel = true, verbose = false, glob, rootPath } = this.options;
|
|
29
|
+
|
|
26
30
|
if (verbose) {
|
|
27
31
|
console.log(`Processing ${files.length} files...`);
|
|
28
32
|
}
|
|
@@ -30,6 +34,17 @@ export class SchemaProcessor {
|
|
|
30
34
|
// Sort files by path to ensure consistent processing order
|
|
31
35
|
const sortedFiles = [...files].sort((a, b) => a.path.localeCompare(b.path));
|
|
32
36
|
|
|
37
|
+
// Use single-pass processing when possible (avoids creating N TypeScript programs)
|
|
38
|
+
if (glob && rootPath && sortedFiles.length > 1) {
|
|
39
|
+
try {
|
|
40
|
+
return await this.processSinglePass(sortedFiles, rootPath, glob);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
if (verbose) {
|
|
43
|
+
console.log(`Single-pass processing failed, falling back to per-file processing: ${error instanceof Error ? error.message : String(error)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
33
48
|
const results = parallel
|
|
34
49
|
? await this.processInParallel(sortedFiles)
|
|
35
50
|
: await this.processSequentially(sortedFiles);
|
|
@@ -37,6 +52,92 @@ export class SchemaProcessor {
|
|
|
37
52
|
return this.consolidateSchemas(results);
|
|
38
53
|
}
|
|
39
54
|
|
|
55
|
+
private async processSinglePass(
|
|
56
|
+
files: FileInfo[],
|
|
57
|
+
rootPath: string,
|
|
58
|
+
glob: string
|
|
59
|
+
): Promise<Map<string, Schema>> {
|
|
60
|
+
const { additionalProperties, tsconfigPath, verbose } = this.options;
|
|
61
|
+
|
|
62
|
+
// Pre-check: scan all TS files in rootPath for duplicate exported type names.
|
|
63
|
+
// If duplicates exist, per-file processing is needed to detect schema conflicts.
|
|
64
|
+
if (this.hasDuplicateTypeNames(rootPath)) {
|
|
65
|
+
throw new Error("Duplicate type names detected across source files");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const resolvedRoot = path.resolve(rootPath);
|
|
69
|
+
const globPattern = path.join(resolvedRoot, "**", glob);
|
|
70
|
+
|
|
71
|
+
if (verbose) {
|
|
72
|
+
console.log(`Single-pass processing with pattern: ${globPattern}`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const config: Config = {
|
|
76
|
+
path: globPattern,
|
|
77
|
+
type: "*",
|
|
78
|
+
additionalProperties,
|
|
79
|
+
encodeRefs: false,
|
|
80
|
+
sortProps: true,
|
|
81
|
+
...(tsconfigPath ? { tsconfig: tsconfigPath } : {}),
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const schemaGenerator = tsj.createGenerator(config);
|
|
85
|
+
const fullSchema = schemaGenerator.createSchema(config.type);
|
|
86
|
+
|
|
87
|
+
return this.partitionSchemaByFile(files, fullSchema);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private hasDuplicateTypeNames(rootPath: string): boolean {
|
|
91
|
+
const project = new Project({ skipAddingFilesFromTsConfig: true });
|
|
92
|
+
const allTsFiles = project.addSourceFilesAtPaths(
|
|
93
|
+
path.join(path.resolve(rootPath), "**/*.{ts,tsx}")
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
const seen = new Set<string>();
|
|
97
|
+
|
|
98
|
+
for (const sf of allTsFiles) {
|
|
99
|
+
const names: string[] = [];
|
|
100
|
+
for (const t of sf.getTypeAliases()) {
|
|
101
|
+
if (t.isExported()) names.push(t.getName());
|
|
102
|
+
}
|
|
103
|
+
for (const i of sf.getInterfaces()) {
|
|
104
|
+
if (i.isExported()) names.push(i.getName());
|
|
105
|
+
}
|
|
106
|
+
for (const e of sf.getEnums()) {
|
|
107
|
+
if (e.isExported()) names.push(e.getName());
|
|
108
|
+
}
|
|
109
|
+
for (const name of names) {
|
|
110
|
+
if (seen.has(name)) return true;
|
|
111
|
+
seen.add(name);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private partitionSchemaByFile(
|
|
119
|
+
files: FileInfo[],
|
|
120
|
+
fullSchema: Schema
|
|
121
|
+
): Map<string, Schema> {
|
|
122
|
+
const defs = fullSchema.definitions ?? {};
|
|
123
|
+
const schemaVersion = fullSchema.$schema || "http://json-schema.org/draft-07/schema#";
|
|
124
|
+
const schemaMap = new Map<string, Schema>();
|
|
125
|
+
|
|
126
|
+
if (Object.keys(defs).length === 0) return schemaMap;
|
|
127
|
+
|
|
128
|
+
// Since we've verified no duplicate type names exist, assign all definitions
|
|
129
|
+
// to each file. Downstream code (extractTypeInfo) uses ts-morph to correctly
|
|
130
|
+
// attribute each definition to its actual source file.
|
|
131
|
+
for (const file of files) {
|
|
132
|
+
schemaMap.set(file.path, {
|
|
133
|
+
$schema: schemaVersion,
|
|
134
|
+
definitions: { ...defs },
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return schemaMap;
|
|
139
|
+
}
|
|
140
|
+
|
|
40
141
|
private async processInParallel(files: FileInfo[]): Promise<ProcessingResult[]> {
|
|
41
142
|
const promises = files.map(file => this.processFile(file));
|
|
42
143
|
const results = await Promise.allSettled(promises);
|