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.
- package/CONTRIBUTING.md +430 -0
- package/README.md +505 -62
- package/dist/ICommandOptions.js +3 -0
- package/dist/ICommandOptions.js.map +1 -0
- package/dist/SchemaGenerator.deterministic-extended.test.js +420 -0
- package/dist/SchemaGenerator.deterministic-extended.test.js.map +1 -0
- package/dist/SchemaGenerator.deterministic.test.js +251 -0
- package/dist/SchemaGenerator.deterministic.test.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 +226 -0
- package/dist/SchemaGenerator.test.js.map +1 -0
- package/dist/cli.test.js +155 -0
- package/dist/cli.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 +321 -0
- package/dist/services/CodeGenerator.js.map +1 -0
- package/dist/services/FileDiscovery.js +123 -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 +198 -0
- package/dist/services/SchemaProcessor.js.map +1 -0
- package/dist/services/SchemaProcessor.test.js +455 -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/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.deterministic-extended.test.ts +429 -0
- package/src/SchemaGenerator.deterministic.test.ts +276 -0
- package/src/SchemaGenerator.integration.test.ts +411 -0
- package/src/SchemaGenerator.test.ts +118 -0
- package/src/SchemaGenerator.ts +112 -298
- package/src/cli.test.ts +130 -0
- package/src/errors/index.test.ts +319 -0
- package/src/errors/index.ts +92 -0
- package/src/index.ts +8 -1
- package/src/services/CodeGenerator.ts +370 -0
- package/src/services/FileDiscovery.test.ts +216 -0
- package/src/services/FileDiscovery.ts +140 -0
- package/src/services/SchemaProcessor.test.ts +536 -0
- package/src/services/SchemaProcessor.ts +194 -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,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,226 @@
|
|
|
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
|
+
test("it should sort definitions alphabetically in the generated schema", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
132
|
+
// Create test directory and files
|
|
133
|
+
const testDir = path_1.default.resolve(__dirname, "./test/alphabetical-sorting");
|
|
134
|
+
// Ensure test directory exists
|
|
135
|
+
fs_1.default.mkdirSync(testDir, { recursive: true });
|
|
136
|
+
// Create test file with unsorted type definitions
|
|
137
|
+
const testFilePath = path_1.default.join(testDir, "types.jsonschema.ts");
|
|
138
|
+
fs_1.default.writeFileSync(testFilePath, `
|
|
139
|
+
export interface ZebraType {
|
|
140
|
+
id: string;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export interface AppleType {
|
|
144
|
+
name: string;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export interface MiddleType {
|
|
148
|
+
value: number;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export interface BananaType {
|
|
152
|
+
flag: boolean;
|
|
153
|
+
}
|
|
154
|
+
`);
|
|
155
|
+
try {
|
|
156
|
+
const options = getGeneratorConfig("alphabetical-sorting");
|
|
157
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(options);
|
|
158
|
+
yield generator.Generate();
|
|
159
|
+
const rawFile = fs_1.default.readFileSync(getOutputSchemaPath("alphabetical-sorting")).toString();
|
|
160
|
+
const result = JSON.parse(rawFile);
|
|
161
|
+
// Check that definitions are sorted alphabetically
|
|
162
|
+
const definitionKeys = Object.keys(result.definitions);
|
|
163
|
+
const sortedKeys = [...definitionKeys].sort();
|
|
164
|
+
expect(definitionKeys).toEqual(sortedKeys);
|
|
165
|
+
expect(definitionKeys).toEqual(['AppleType', 'BananaType', 'MiddleType', 'ZebraType']);
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
// Clean up test directory
|
|
169
|
+
if (fs_1.default.existsSync(testDir)) {
|
|
170
|
+
fs_1.default.rmSync(testDir, { recursive: true });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}));
|
|
174
|
+
test("it should sort properties alphabetically in generated TypeScript helpers", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
175
|
+
// Create test directory and files
|
|
176
|
+
const testDir = path_1.default.resolve(__dirname, "./test/alphabetical-helpers");
|
|
177
|
+
const outputDir = path_1.default.resolve(__dirname, "./test/output/alphabetical-helpers");
|
|
178
|
+
// Ensure test directory exists
|
|
179
|
+
fs_1.default.mkdirSync(testDir, { recursive: true });
|
|
180
|
+
// Create test file with unsorted type definitions
|
|
181
|
+
const testFilePath = path_1.default.join(testDir, "types.jsonschema.ts");
|
|
182
|
+
fs_1.default.writeFileSync(testFilePath, `
|
|
183
|
+
export type ZebraType = string;
|
|
184
|
+
export type AppleType = number;
|
|
185
|
+
export type MiddleType = boolean;
|
|
186
|
+
export type BananaType = object;
|
|
187
|
+
`);
|
|
188
|
+
try {
|
|
189
|
+
const options = Object.assign(Object.assign({}, getGeneratorConfig("alphabetical-helpers")), { helpers: true });
|
|
190
|
+
const generator = new SchemaGenerator_1.SchemaGenerator(options);
|
|
191
|
+
yield generator.Generate();
|
|
192
|
+
// Check SchemaDefinition.ts for sorted imports and properties
|
|
193
|
+
const schemaDefPath = path_1.default.resolve(outputDir, "SchemaDefinition.ts");
|
|
194
|
+
if (fs_1.default.existsSync(schemaDefPath)) {
|
|
195
|
+
const schemaDefContent = fs_1.default.readFileSync(schemaDefPath, 'utf-8');
|
|
196
|
+
// Extract type names from the schemas object (looking only at the schemas constant)
|
|
197
|
+
const schemasMatch = schemaDefContent.match(/export const schemas[^{]*{([\s\S]*?)}/);
|
|
198
|
+
let schemaKeys = [];
|
|
199
|
+
if (schemasMatch) {
|
|
200
|
+
const schemaLines = schemasMatch[1].split('\n').filter(line => line.includes('#/definitions/'));
|
|
201
|
+
schemaKeys = schemaLines.map(line => {
|
|
202
|
+
const match = line.match(/\["#\/definitions\/([^"]+)"\]/);
|
|
203
|
+
return match ? match[1] : null;
|
|
204
|
+
}).filter(Boolean);
|
|
205
|
+
}
|
|
206
|
+
const sortedSchemaKeys = [...schemaKeys].sort();
|
|
207
|
+
expect(schemaKeys).toEqual(sortedSchemaKeys);
|
|
208
|
+
expect(schemaKeys).toEqual(['AppleType', 'BananaType', 'MiddleType', 'ZebraType']);
|
|
209
|
+
// Check that imports are sorted
|
|
210
|
+
const importMatch = schemaDefContent.match(/import\s+{\s*([^}]+)\s*}/);
|
|
211
|
+
if (importMatch) {
|
|
212
|
+
const imports = importMatch[1].split(',').map(s => s.trim());
|
|
213
|
+
const sortedImports = [...imports].sort();
|
|
214
|
+
expect(imports).toEqual(sortedImports);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
// Clean up test directory
|
|
220
|
+
if (fs_1.default.existsSync(testDir)) {
|
|
221
|
+
fs_1.default.rmSync(testDir, { recursive: true });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}));
|
|
225
|
+
});
|
|
226
|
+
//# 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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"}
|
package/dist/cli.test.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
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 child_process_1 = require("child_process");
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
describe("CLI Arguments", () => {
|
|
49
|
+
const cliPath = path.join(__dirname, "..", "dist", "index.js");
|
|
50
|
+
const testOutputPath = path.join(__dirname, "../.test-tmp/cli-output");
|
|
51
|
+
beforeEach(() => {
|
|
52
|
+
if (fs.existsSync(testOutputPath)) {
|
|
53
|
+
fs.rmSync(testOutputPath, { recursive: true, force: true });
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
afterEach(() => {
|
|
57
|
+
if (fs.existsSync(testOutputPath)) {
|
|
58
|
+
fs.rmSync(testOutputPath, { recursive: true, force: true });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const runCLI = (args) => {
|
|
62
|
+
return new Promise((resolve) => {
|
|
63
|
+
const proc = (0, child_process_1.spawn)("node", [cliPath, ...args]);
|
|
64
|
+
let stdout = "";
|
|
65
|
+
let stderr = "";
|
|
66
|
+
proc.stdout.on("data", (data) => {
|
|
67
|
+
stdout += data.toString();
|
|
68
|
+
});
|
|
69
|
+
proc.stderr.on("data", (data) => {
|
|
70
|
+
stderr += data.toString();
|
|
71
|
+
});
|
|
72
|
+
proc.on("close", (code) => {
|
|
73
|
+
resolve({ code: code || 0, stdout, stderr });
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
it("should accept glob pattern with --glob parameter", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
|
+
const result = yield runCLI([
|
|
79
|
+
"--glob", "test/basic-scenario/*.jsonschema.ts",
|
|
80
|
+
"--rootPath", path.join(__dirname),
|
|
81
|
+
"--output", "../.test-tmp/cli-output"
|
|
82
|
+
]);
|
|
83
|
+
expect(result.code).toBe(0);
|
|
84
|
+
expect(fs.existsSync(testOutputPath)).toBe(true);
|
|
85
|
+
// Check that files were generated
|
|
86
|
+
const generatedFiles = fs.readdirSync(testOutputPath);
|
|
87
|
+
expect(generatedFiles).toContain("validation.schema.json");
|
|
88
|
+
expect(generatedFiles).toContain("SchemaDefinition.ts");
|
|
89
|
+
expect(generatedFiles).toContain("ValidationType.ts");
|
|
90
|
+
expect(generatedFiles).toContain("isValidSchema.ts");
|
|
91
|
+
}));
|
|
92
|
+
it("should use default glob pattern when --glob is not provided", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
93
|
+
// Create test files matching the default pattern
|
|
94
|
+
const testDir = path.join(__dirname, "test-default-glob");
|
|
95
|
+
const testFile1 = path.join(testDir, "test.jsonschema.ts");
|
|
96
|
+
const testFile2 = path.join(testDir, "test2.jsonschema.tsx");
|
|
97
|
+
if (!fs.existsSync(testDir)) {
|
|
98
|
+
fs.mkdirSync(testDir, { recursive: true });
|
|
99
|
+
}
|
|
100
|
+
fs.writeFileSync(testFile1, "export interface TestInterface { test: string; }");
|
|
101
|
+
fs.writeFileSync(testFile2, "export interface TestInterface2 { test2: number; }");
|
|
102
|
+
try {
|
|
103
|
+
const result = yield runCLI([
|
|
104
|
+
"--rootPath", testDir,
|
|
105
|
+
"--output", path.join("..", "../.test-tmp/cli-output")
|
|
106
|
+
]);
|
|
107
|
+
expect(result.code).toBe(0);
|
|
108
|
+
expect(fs.existsSync(testOutputPath)).toBe(true);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
// Clean up test files and directory
|
|
112
|
+
if (fs.existsSync(testDir)) {
|
|
113
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}));
|
|
117
|
+
it("should accept all supported CLI options", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
|
+
const result = yield runCLI([
|
|
119
|
+
"--glob", "test/basic-scenario/*.jsonschema.ts",
|
|
120
|
+
"--rootPath", path.join(__dirname),
|
|
121
|
+
"--output", "../.test-tmp/cli-output",
|
|
122
|
+
"--additionalProperties",
|
|
123
|
+
"--verbose",
|
|
124
|
+
"--progress",
|
|
125
|
+
"--minify",
|
|
126
|
+
"--cache",
|
|
127
|
+
"--tree-shaking",
|
|
128
|
+
"--lazy-load"
|
|
129
|
+
]);
|
|
130
|
+
expect(result.code).toBe(0);
|
|
131
|
+
// With verbose flag, we should see output
|
|
132
|
+
expect(result.stdout).toContain("Found");
|
|
133
|
+
}));
|
|
134
|
+
it("should handle parallel processing flags correctly", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
// Test with parallel disabled
|
|
136
|
+
const result = yield runCLI([
|
|
137
|
+
"--glob", "test/basic-scenario/*.jsonschema.ts",
|
|
138
|
+
"--rootPath", path.join(__dirname),
|
|
139
|
+
"--output", "../.test-tmp/cli-output",
|
|
140
|
+
"--no-parallel"
|
|
141
|
+
]);
|
|
142
|
+
expect(result.code).toBe(0);
|
|
143
|
+
expect(fs.existsSync(testOutputPath)).toBe(true);
|
|
144
|
+
}));
|
|
145
|
+
it("should error gracefully when no matching files are found", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
146
|
+
const result = yield runCLI([
|
|
147
|
+
"--glob", "nonexistent/*.jsonschema.ts",
|
|
148
|
+
"--rootPath", path.join(__dirname),
|
|
149
|
+
"--output", "../.test-tmp/cli-output"
|
|
150
|
+
]);
|
|
151
|
+
expect(result.code).not.toBe(0);
|
|
152
|
+
expect(result.stderr).toContain("No files found");
|
|
153
|
+
}));
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=cli.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CacheError = exports.ConfigurationError = exports.ValidationError = exports.CodeGenerationError = exports.DuplicateSymbolError = exports.SchemaGenerationError = exports.FileDiscoveryError = exports.BaseError = void 0;
|
|
4
|
+
exports.isKnownError = isKnownError;
|
|
5
|
+
exports.formatError = formatError;
|
|
6
|
+
class BaseError extends Error {
|
|
7
|
+
constructor(message, code) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.name = this.constructor.name;
|
|
11
|
+
Error.captureStackTrace(this, this.constructor);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.BaseError = BaseError;
|
|
15
|
+
class FileDiscoveryError extends BaseError {
|
|
16
|
+
constructor(message, path) {
|
|
17
|
+
super(message, 'FILE_DISCOVERY_ERROR');
|
|
18
|
+
this.path = path;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.FileDiscoveryError = FileDiscoveryError;
|
|
22
|
+
class SchemaGenerationError extends BaseError {
|
|
23
|
+
constructor(message, file) {
|
|
24
|
+
super(message, 'SCHEMA_GENERATION_ERROR');
|
|
25
|
+
this.file = file;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.SchemaGenerationError = SchemaGenerationError;
|
|
29
|
+
class DuplicateSymbolError extends BaseError {
|
|
30
|
+
constructor(message, symbol, file, existingDefinition, newDefinition) {
|
|
31
|
+
super(message, 'DUPLICATE_SYMBOL_ERROR');
|
|
32
|
+
this.symbol = symbol;
|
|
33
|
+
this.file = file;
|
|
34
|
+
this.existingDefinition = existingDefinition;
|
|
35
|
+
this.newDefinition = newDefinition;
|
|
36
|
+
}
|
|
37
|
+
getDetailedMessage() {
|
|
38
|
+
return `${this.message}
|
|
39
|
+
Symbol: ${this.symbol}
|
|
40
|
+
File: ${this.file}
|
|
41
|
+
Existing Definition: ${JSON.stringify(this.existingDefinition, null, 2)}
|
|
42
|
+
New Definition: ${JSON.stringify(this.newDefinition, null, 2)}`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.DuplicateSymbolError = DuplicateSymbolError;
|
|
46
|
+
class CodeGenerationError extends BaseError {
|
|
47
|
+
constructor(message, outputFile) {
|
|
48
|
+
super(message, 'CODE_GENERATION_ERROR');
|
|
49
|
+
this.outputFile = outputFile;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.CodeGenerationError = CodeGenerationError;
|
|
53
|
+
class ValidationError extends BaseError {
|
|
54
|
+
constructor(message, errors) {
|
|
55
|
+
super(message, 'VALIDATION_ERROR');
|
|
56
|
+
this.errors = errors;
|
|
57
|
+
}
|
|
58
|
+
getDetailedMessage() {
|
|
59
|
+
const errorList = this.errors
|
|
60
|
+
.map(err => ` - ${err.path}: ${err.message}`)
|
|
61
|
+
.join('\n');
|
|
62
|
+
return `${this.message}\n${errorList}`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ValidationError = ValidationError;
|
|
66
|
+
class ConfigurationError extends BaseError {
|
|
67
|
+
constructor(message, field) {
|
|
68
|
+
super(message, 'CONFIGURATION_ERROR');
|
|
69
|
+
this.field = field;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.ConfigurationError = ConfigurationError;
|
|
73
|
+
class CacheError extends BaseError {
|
|
74
|
+
constructor(message, operation) {
|
|
75
|
+
super(message, 'CACHE_ERROR');
|
|
76
|
+
this.operation = operation;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.CacheError = CacheError;
|
|
80
|
+
function isKnownError(error) {
|
|
81
|
+
return error instanceof BaseError;
|
|
82
|
+
}
|
|
83
|
+
function formatError(error, verbose = false) {
|
|
84
|
+
if (isKnownError(error)) {
|
|
85
|
+
if (verbose && 'getDetailedMessage' in error) {
|
|
86
|
+
return error.getDetailedMessage();
|
|
87
|
+
}
|
|
88
|
+
return `[${error.code}] ${error.message}`;
|
|
89
|
+
}
|
|
90
|
+
if (error instanceof Error) {
|
|
91
|
+
return verbose ? error.stack || error.message : error.message;
|
|
92
|
+
}
|
|
93
|
+
return String(error);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
|