ts-runtime-validation 1.6.16 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,76 @@
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.SchemaWriter = void 0;
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const path_1 = __importDefault(require("path"));
18
+ const errors_1 = require("../errors");
19
+ class SchemaWriter {
20
+ constructor(options) {
21
+ this.options = options;
22
+ }
23
+ writeJsonSchema(schema, outputFile) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ try {
26
+ yield this.ensureOutputPath();
27
+ const content = this.options.minify
28
+ ? JSON.stringify(schema)
29
+ : JSON.stringify(schema, null, 4);
30
+ yield fs_1.default.promises.writeFile(outputFile, content, 'utf-8');
31
+ }
32
+ catch (error) {
33
+ throw new errors_1.CodeGenerationError(`Failed to write JSON schema: ${error instanceof Error ? error.message : String(error)}`, outputFile);
34
+ }
35
+ });
36
+ }
37
+ writeTypeScriptFile(content, outputFile) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ try {
40
+ yield this.ensureOutputPath();
41
+ yield fs_1.default.promises.writeFile(outputFile, content, 'utf-8');
42
+ }
43
+ catch (error) {
44
+ throw new errors_1.CodeGenerationError(`Failed to write TypeScript file: ${error instanceof Error ? error.message : String(error)}`, outputFile);
45
+ }
46
+ });
47
+ }
48
+ ensureOutputPath() {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ if (!fs_1.default.existsSync(this.options.outputPath)) {
51
+ yield fs_1.default.promises.mkdir(this.options.outputPath, { recursive: true });
52
+ }
53
+ });
54
+ }
55
+ cleanOutputDirectory() {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ try {
58
+ if (fs_1.default.existsSync(this.options.outputPath)) {
59
+ const files = yield fs_1.default.promises.readdir(this.options.outputPath);
60
+ for (const file of files) {
61
+ const filePath = path_1.default.join(this.options.outputPath, file);
62
+ const stat = yield fs_1.default.promises.stat(filePath);
63
+ if (stat.isFile() && (file.endsWith('.ts') || file.endsWith('.json'))) {
64
+ yield fs_1.default.promises.unlink(filePath);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ catch (error) {
70
+ throw new errors_1.CodeGenerationError(`Failed to clean output directory: ${error instanceof Error ? error.message : String(error)}`);
71
+ }
72
+ });
73
+ }
74
+ }
75
+ exports.SchemaWriter = SchemaWriter;
76
+ //# sourceMappingURL=SchemaWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaWriter.js","sourceRoot":"","sources":["../../src/services/SchemaWriter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AAExB,sCAAgD;AAOhD,MAAa,YAAY;IACrB,YAAoB,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAEvC,eAAe,CACxB,MAAc,EACd,UAAkB;;YAElB,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBACxB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAEtC,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,4BAAmB,CACzB,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACxF,UAAU,CACb,CAAC;YACN,CAAC;QACL,CAAC;KAAA;IAEY,mBAAmB,CAC5B,OAAe,EACf,UAAkB;;YAElB,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC9B,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,4BAAmB,CACzB,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC5F,UAAU,CACb,CAAC;YACN,CAAC;QACL,CAAC;KAAA;IAEa,gBAAgB;;YAC1B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC;KAAA;IAEY,oBAAoB;;YAC7B,IAAI,CAAC;gBACD,IAAI,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;oBACzC,MAAM,KAAK,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAEjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBAC1D,MAAM,IAAI,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAE9C,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;4BACpE,MAAM,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACvC,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,4BAAmB,CACzB,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChG,CAAC;YACN,CAAC;QACL,CAAC;KAAA;CACJ;AAhED,oCAgEC"}
@@ -0,0 +1,255 @@
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 SchemaWriter_1 = require("./SchemaWriter");
18
+ const errors_1 = require("../errors");
19
+ const testDir = path_1.default.resolve(__dirname, "../test-tmp/schema-writer");
20
+ const cleanup = () => __awaiter(void 0, void 0, void 0, function* () {
21
+ if (fs_1.default.existsSync(testDir)) {
22
+ yield fs_1.default.promises.rm(testDir, { recursive: true, force: true });
23
+ }
24
+ });
25
+ beforeEach(cleanup);
26
+ afterAll(cleanup);
27
+ describe("SchemaWriter", () => {
28
+ describe("writeJsonSchema", () => {
29
+ it("should write JSON schema with pretty formatting", () => __awaiter(void 0, void 0, void 0, function* () {
30
+ const writer = new SchemaWriter_1.SchemaWriter({
31
+ outputPath: testDir,
32
+ minify: false
33
+ });
34
+ const schema = {
35
+ $schema: "http://json-schema.org/draft-07/schema#",
36
+ definitions: {
37
+ IUser: {
38
+ type: "object",
39
+ properties: {
40
+ id: { type: "string" },
41
+ name: { type: "string" }
42
+ },
43
+ required: ["id", "name"],
44
+ additionalProperties: false
45
+ }
46
+ }
47
+ };
48
+ const outputFile = path_1.default.join(testDir, "schema.json");
49
+ yield writer.writeJsonSchema(schema, outputFile);
50
+ expect(fs_1.default.existsSync(outputFile)).toBe(true);
51
+ const content = yield fs_1.default.promises.readFile(outputFile, 'utf-8');
52
+ const parsed = JSON.parse(content);
53
+ expect(parsed).toEqual(schema);
54
+ // Pretty formatted should have indentation
55
+ expect(content).toMatch(/\n /);
56
+ }));
57
+ it("should write minified JSON schema", () => __awaiter(void 0, void 0, void 0, function* () {
58
+ const writer = new SchemaWriter_1.SchemaWriter({
59
+ outputPath: testDir,
60
+ minify: true
61
+ });
62
+ const schema = {
63
+ $schema: "http://json-schema.org/draft-07/schema#",
64
+ definitions: {
65
+ IUser: {
66
+ type: "object",
67
+ properties: {
68
+ id: { type: "string" }
69
+ }
70
+ }
71
+ }
72
+ };
73
+ const outputFile = path_1.default.join(testDir, "schema.json");
74
+ yield writer.writeJsonSchema(schema, outputFile);
75
+ expect(fs_1.default.existsSync(outputFile)).toBe(true);
76
+ const content = yield fs_1.default.promises.readFile(outputFile, 'utf-8');
77
+ const parsed = JSON.parse(content);
78
+ expect(parsed).toEqual(schema);
79
+ // Minified should not have extra whitespace
80
+ expect(content).not.toMatch(/\n /);
81
+ }));
82
+ it("should create output directory if it doesn't exist", () => __awaiter(void 0, void 0, void 0, function* () {
83
+ const nestedPath = path_1.default.join(testDir, "nested", "deep", "path");
84
+ const writer = new SchemaWriter_1.SchemaWriter({
85
+ outputPath: nestedPath,
86
+ minify: false
87
+ });
88
+ const schema = { $schema: "test" };
89
+ const outputFile = path_1.default.join(nestedPath, "schema.json");
90
+ yield writer.writeJsonSchema(schema, outputFile);
91
+ expect(fs_1.default.existsSync(outputFile)).toBe(true);
92
+ }));
93
+ it("should throw CodeGenerationError on write failure", () => __awaiter(void 0, void 0, void 0, function* () {
94
+ const writer = new SchemaWriter_1.SchemaWriter({
95
+ outputPath: testDir,
96
+ minify: false
97
+ });
98
+ const schema = { $schema: "test" };
99
+ // Try to write to an invalid path (file as directory)
100
+ const invalidPath = path_1.default.join(testDir, "file.json", "invalid");
101
+ // Create file first to make path invalid
102
+ yield fs_1.default.promises.mkdir(testDir, { recursive: true });
103
+ yield fs_1.default.promises.writeFile(path_1.default.join(testDir, "file.json"), "test");
104
+ yield expect(writer.writeJsonSchema(schema, invalidPath))
105
+ .rejects.toThrow(errors_1.CodeGenerationError);
106
+ }));
107
+ });
108
+ describe("writeTypeScriptFile", () => {
109
+ it("should write TypeScript file correctly", () => __awaiter(void 0, void 0, void 0, function* () {
110
+ const writer = new SchemaWriter_1.SchemaWriter({
111
+ outputPath: testDir,
112
+ minify: false
113
+ });
114
+ const content = `export interface IUser {
115
+ id: string;
116
+ name: string;
117
+ }`;
118
+ const outputFile = path_1.default.join(testDir, "types.ts");
119
+ yield writer.writeTypeScriptFile(content, outputFile);
120
+ expect(fs_1.default.existsSync(outputFile)).toBe(true);
121
+ const fileContent = yield fs_1.default.promises.readFile(outputFile, 'utf-8');
122
+ expect(fileContent).toBe(content);
123
+ }));
124
+ it("should create directories for TypeScript files", () => __awaiter(void 0, void 0, void 0, function* () {
125
+ const nestedPath = path_1.default.join(testDir, "src", "types");
126
+ const writer = new SchemaWriter_1.SchemaWriter({
127
+ outputPath: nestedPath,
128
+ minify: false
129
+ });
130
+ const content = "export const test = 'value';";
131
+ const outputFile = path_1.default.join(nestedPath, "test.ts");
132
+ yield writer.writeTypeScriptFile(content, outputFile);
133
+ expect(fs_1.default.existsSync(outputFile)).toBe(true);
134
+ }));
135
+ it("should handle empty content", () => __awaiter(void 0, void 0, void 0, function* () {
136
+ const writer = new SchemaWriter_1.SchemaWriter({
137
+ outputPath: testDir,
138
+ minify: false
139
+ });
140
+ const outputFile = path_1.default.join(testDir, "empty.ts");
141
+ yield writer.writeTypeScriptFile("", outputFile);
142
+ expect(fs_1.default.existsSync(outputFile)).toBe(true);
143
+ const content = yield fs_1.default.promises.readFile(outputFile, 'utf-8');
144
+ expect(content).toBe("");
145
+ }));
146
+ });
147
+ describe("cleanOutputDirectory", () => {
148
+ it("should remove TypeScript and JSON files", () => __awaiter(void 0, void 0, void 0, function* () {
149
+ yield fs_1.default.promises.mkdir(testDir, { recursive: true });
150
+ // Create various files
151
+ yield fs_1.default.promises.writeFile(path_1.default.join(testDir, "schema.json"), "{}");
152
+ yield fs_1.default.promises.writeFile(path_1.default.join(testDir, "types.ts"), "export interface Test {}");
153
+ yield fs_1.default.promises.writeFile(path_1.default.join(testDir, "readme.md"), "# Test");
154
+ yield fs_1.default.promises.writeFile(path_1.default.join(testDir, "config.yaml"), "test: value");
155
+ const writer = new SchemaWriter_1.SchemaWriter({
156
+ outputPath: testDir,
157
+ minify: false
158
+ });
159
+ yield writer.cleanOutputDirectory();
160
+ // Should remove .ts and .json files
161
+ expect(fs_1.default.existsSync(path_1.default.join(testDir, "schema.json"))).toBe(false);
162
+ expect(fs_1.default.existsSync(path_1.default.join(testDir, "types.ts"))).toBe(false);
163
+ // Should keep other files
164
+ expect(fs_1.default.existsSync(path_1.default.join(testDir, "readme.md"))).toBe(true);
165
+ expect(fs_1.default.existsSync(path_1.default.join(testDir, "config.yaml"))).toBe(true);
166
+ }));
167
+ it("should handle non-existent directory", () => __awaiter(void 0, void 0, void 0, function* () {
168
+ const writer = new SchemaWriter_1.SchemaWriter({
169
+ outputPath: path_1.default.join(testDir, "nonexistent"),
170
+ minify: false
171
+ });
172
+ // Should not throw
173
+ yield expect(writer.cleanOutputDirectory()).resolves.not.toThrow();
174
+ }));
175
+ it("should not remove subdirectories", () => __awaiter(void 0, void 0, void 0, function* () {
176
+ yield fs_1.default.promises.mkdir(path_1.default.join(testDir, "subdir"), { recursive: true });
177
+ yield fs_1.default.promises.writeFile(path_1.default.join(testDir, "subdir", "file.ts"), "test");
178
+ yield fs_1.default.promises.writeFile(path_1.default.join(testDir, "main.ts"), "test");
179
+ const writer = new SchemaWriter_1.SchemaWriter({
180
+ outputPath: testDir,
181
+ minify: false
182
+ });
183
+ yield writer.cleanOutputDirectory();
184
+ // Should remove file in root
185
+ expect(fs_1.default.existsSync(path_1.default.join(testDir, "main.ts"))).toBe(false);
186
+ // Should keep subdirectory and its contents
187
+ expect(fs_1.default.existsSync(path_1.default.join(testDir, "subdir"))).toBe(true);
188
+ expect(fs_1.default.existsSync(path_1.default.join(testDir, "subdir", "file.ts"))).toBe(true);
189
+ }));
190
+ it("should handle permission errors gracefully", () => __awaiter(void 0, void 0, void 0, function* () {
191
+ // Skip this test as it's environment dependent
192
+ // Real permission errors would be caught by the try-catch in SchemaWriter
193
+ }));
194
+ });
195
+ describe("edge cases", () => {
196
+ it("should handle large files", () => __awaiter(void 0, void 0, void 0, function* () {
197
+ const writer = new SchemaWriter_1.SchemaWriter({
198
+ outputPath: testDir,
199
+ minify: false
200
+ });
201
+ // Create a large schema
202
+ const largeSchema = {
203
+ $schema: "http://json-schema.org/draft-07/schema#",
204
+ definitions: {}
205
+ };
206
+ // Add many definitions
207
+ for (let i = 0; i < 1000; i++) {
208
+ largeSchema.definitions[`Interface${i}`] = {
209
+ type: "object",
210
+ properties: {
211
+ id: { type: "string" },
212
+ name: { type: "string" },
213
+ value: { type: "number" }
214
+ }
215
+ };
216
+ }
217
+ const outputFile = path_1.default.join(testDir, "large-schema.json");
218
+ yield writer.writeJsonSchema(largeSchema, outputFile);
219
+ expect(fs_1.default.existsSync(outputFile)).toBe(true);
220
+ const stats = yield fs_1.default.promises.stat(outputFile);
221
+ expect(stats.size).toBeGreaterThan(1000); // Should be reasonably large
222
+ }));
223
+ it("should handle unicode content", () => __awaiter(void 0, void 0, void 0, function* () {
224
+ const writer = new SchemaWriter_1.SchemaWriter({
225
+ outputPath: testDir,
226
+ minify: false
227
+ });
228
+ const unicodeContent = `export interface IUser {
229
+ // Unicode: café, naïve, résumé
230
+ name: string; // 中文注释
231
+ emoji: "👨‍💻" | "🚀" | "💡";
232
+ }`;
233
+ const outputFile = path_1.default.join(testDir, "unicode.ts");
234
+ yield writer.writeTypeScriptFile(unicodeContent, outputFile);
235
+ const content = yield fs_1.default.promises.readFile(outputFile, 'utf-8');
236
+ expect(content).toBe(unicodeContent);
237
+ }));
238
+ it("should overwrite existing files", () => __awaiter(void 0, void 0, void 0, function* () {
239
+ const writer = new SchemaWriter_1.SchemaWriter({
240
+ outputPath: testDir,
241
+ minify: false
242
+ });
243
+ const outputFile = path_1.default.join(testDir, "overwrite.ts");
244
+ // Write first content
245
+ yield writer.writeTypeScriptFile("const first = 1;", outputFile);
246
+ const firstContent = yield fs_1.default.promises.readFile(outputFile, 'utf-8');
247
+ expect(firstContent).toBe("const first = 1;");
248
+ // Overwrite with second content
249
+ yield writer.writeTypeScriptFile("const second = 2;", outputFile);
250
+ const secondContent = yield fs_1.default.promises.readFile(outputFile, 'utf-8');
251
+ expect(secondContent).toBe("const second = 2;");
252
+ }));
253
+ });
254
+ });
255
+ //# sourceMappingURL=SchemaWriter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaWriter.test.js","sourceRoot":"","sources":["../../src/services/SchemaWriter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.jsonschema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.jsonschema.js","sourceRoot":"","sources":["../../../src/test/basic-scenario/types.jsonschema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBaseType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBaseType.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-different-implementation/IBaseType.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBaseTypeDefinitionReplicated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBaseTypeDefinitionReplicated.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-different-implementation/IBaseTypeDefinitionReplicated.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBasicTypesA.jsonschema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBasicTypesA.jsonschema.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-different-implementation/IBasicTypesA.jsonschema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBasicTypesB.jsonschema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBasicTypesB.jsonschema.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-different-implementation/IBasicTypesB.jsonschema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBaseType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBaseType.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-identitcal-implementation/IBaseType.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBaseTypeDefinitionReplicated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBaseTypeDefinitionReplicated.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-identitcal-implementation/IBaseTypeDefinitionReplicated.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBasicTypesA.jsonschema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBasicTypesA.jsonschema.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-identitcal-implementation/IBasicTypesA.jsonschema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IBasicTypesB.jsonschema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBasicTypesB.jsonschema.js","sourceRoot":"","sources":["../../../src/test/duplicate-symbols-identitcal-implementation/IBasicTypesB.jsonschema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ValidationType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationType.js","sourceRoot":"","sources":["../../../../src/test/output/duplicate-symbols-identitcal-implementation/ValidationType.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.isValidSchema = exports.validator = void 0;
40
+ const schema = __importStar(require("./validation.schema.json"));
41
+ const ajv_1 = __importDefault(require("ajv"));
42
+ exports.validator = new ajv_1.default({ allErrors: true });
43
+ exports.validator.compile(schema);
44
+ const isValidSchema = (data, schemaKeyRef) => {
45
+ exports.validator.validate(schemaKeyRef, data);
46
+ return Boolean(exports.validator.errors) === false;
47
+ };
48
+ exports.isValidSchema = isValidSchema;
49
+ //# sourceMappingURL=isValidSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidSchema.js","sourceRoot":"","sources":["../../../../src/test/output/duplicate-symbols-identitcal-implementation/isValidSchema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,8CAAsB;AAGT,QAAA,SAAS,GAAG,IAAI,aAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,iBAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAC5B;AAEM,MAAM,aAAa,GAAG,CAAiC,IAAa,EAAE,YAAe,EAAsB,EAAE;IAChH,iBAAS,CAAC,QAAQ,CAAC,YAAsB,EAAE,IAAI,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC,iBAAS,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;AAC3C,CAAC,CACJ;AAJY,QAAA,aAAa,iBAIzB"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProgressReporter = void 0;
4
+ class ProgressReporter {
5
+ constructor(options) {
6
+ this.options = options;
7
+ this.current = 0;
8
+ this.startTime = Date.now();
9
+ }
10
+ start(message) {
11
+ if (!this.options.enabled)
12
+ return;
13
+ this.startTime = Date.now();
14
+ this.current = 0;
15
+ console.log(message);
16
+ if (this.options.showBar && this.options.total) {
17
+ this.drawProgressBar();
18
+ }
19
+ }
20
+ update(current, message) {
21
+ if (!this.options.enabled)
22
+ return;
23
+ this.current = current;
24
+ if (message) {
25
+ this.clearLine();
26
+ process.stdout.write(message);
27
+ }
28
+ else if (this.options.showBar && this.options.total) {
29
+ this.drawProgressBar();
30
+ }
31
+ }
32
+ increment(message) {
33
+ this.update(this.current + 1, message);
34
+ }
35
+ complete(message) {
36
+ if (!this.options.enabled)
37
+ return;
38
+ const elapsed = Date.now() - this.startTime;
39
+ this.clearLine();
40
+ console.log(`${message} (${this.formatTime(elapsed)})`);
41
+ }
42
+ drawProgressBar() {
43
+ if (!this.options.total)
44
+ return;
45
+ const percentage = Math.min(100, Math.floor((this.current / this.options.total) * 100));
46
+ const barLength = 30;
47
+ const filled = Math.max(0, Math.min(barLength, Math.floor((this.current / this.options.total) * barLength)));
48
+ const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);
49
+ this.clearLine();
50
+ process.stdout.write(`Progress: [${bar}] ${percentage}% (${this.current}/${this.options.total})`);
51
+ }
52
+ clearLine() {
53
+ if (process.stdout.isTTY && process.stdout.clearLine && process.stdout.cursorTo) {
54
+ process.stdout.clearLine(0);
55
+ process.stdout.cursorTo(0);
56
+ }
57
+ }
58
+ formatTime(ms) {
59
+ if (ms < 1000)
60
+ return `${ms}ms`;
61
+ if (ms < 60000)
62
+ return `${(ms / 1000).toFixed(1)}s`;
63
+ return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;
64
+ }
65
+ }
66
+ exports.ProgressReporter = ProgressReporter;
67
+ //# sourceMappingURL=ProgressReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressReporter.js","sourceRoot":"","sources":["../../src/utils/ProgressReporter.ts"],"names":[],"mappings":"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"}