swagger-to-playwright-api-clients 1.0.4

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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +190 -0
  3. package/dist/api.d.ts +27 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +127 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli.d.ts +6 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +255 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/clients/BaseAPIClient.d.ts +88 -0
  12. package/dist/clients/BaseAPIClient.d.ts.map +1 -0
  13. package/dist/clients/BaseAPIClient.js +199 -0
  14. package/dist/clients/BaseAPIClient.js.map +1 -0
  15. package/dist/config/types.d.ts +72 -0
  16. package/dist/config/types.d.ts.map +1 -0
  17. package/dist/config/types.js +19 -0
  18. package/dist/config/types.js.map +1 -0
  19. package/dist/index.d.ts +17 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +55 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/utils/copyBaseClient.d.ts +8 -0
  24. package/dist/utils/copyBaseClient.d.ts.map +1 -0
  25. package/dist/utils/copyBaseClient.js +354 -0
  26. package/dist/utils/copyBaseClient.js.map +1 -0
  27. package/dist/utils/logger.d.ts +6 -0
  28. package/dist/utils/logger.d.ts.map +1 -0
  29. package/dist/utils/logger.js +57 -0
  30. package/dist/utils/logger.js.map +1 -0
  31. package/dist/utils/swagger/ClientGenerator.d.ts +49 -0
  32. package/dist/utils/swagger/ClientGenerator.d.ts.map +1 -0
  33. package/dist/utils/swagger/ClientGenerator.js +192 -0
  34. package/dist/utils/swagger/ClientGenerator.js.map +1 -0
  35. package/dist/utils/swagger/FileWriter.d.ts +66 -0
  36. package/dist/utils/swagger/FileWriter.d.ts.map +1 -0
  37. package/dist/utils/swagger/FileWriter.js +185 -0
  38. package/dist/utils/swagger/FileWriter.js.map +1 -0
  39. package/dist/utils/swagger/SwaggerGenerator.d.ts +42 -0
  40. package/dist/utils/swagger/SwaggerGenerator.d.ts.map +1 -0
  41. package/dist/utils/swagger/SwaggerGenerator.js +211 -0
  42. package/dist/utils/swagger/SwaggerGenerator.js.map +1 -0
  43. package/dist/utils/swagger/SwaggerParser.d.ts +69 -0
  44. package/dist/utils/swagger/SwaggerParser.d.ts.map +1 -0
  45. package/dist/utils/swagger/SwaggerParser.js +358 -0
  46. package/dist/utils/swagger/SwaggerParser.js.map +1 -0
  47. package/dist/utils/swagger/TypeGenerator.d.ts +49 -0
  48. package/dist/utils/swagger/TypeGenerator.d.ts.map +1 -0
  49. package/dist/utils/swagger/TypeGenerator.js +166 -0
  50. package/dist/utils/swagger/TypeGenerator.js.map +1 -0
  51. package/dist/utils/swagger/index.d.ts +12 -0
  52. package/dist/utils/swagger/index.d.ts.map +1 -0
  53. package/dist/utils/swagger/index.js +38 -0
  54. package/dist/utils/swagger/index.js.map +1 -0
  55. package/dist/utils/swagger/run-generator.d.ts +23 -0
  56. package/dist/utils/swagger/run-generator.d.ts.map +1 -0
  57. package/dist/utils/swagger/run-generator.js +195 -0
  58. package/dist/utils/swagger/run-generator.js.map +1 -0
  59. package/dist/utils/swagger/types.d.ts +142 -0
  60. package/dist/utils/swagger/types.d.ts.map +1 -0
  61. package/dist/utils/swagger/types.js +7 -0
  62. package/dist/utils/swagger/types.js.map +1 -0
  63. package/dist/utils/swagger/utils/naming.d.ts +48 -0
  64. package/dist/utils/swagger/utils/naming.d.ts.map +1 -0
  65. package/dist/utils/swagger/utils/naming.js +109 -0
  66. package/dist/utils/swagger/utils/naming.js.map +1 -0
  67. package/dist/utils/swagger/utils/pathUtils.d.ts +40 -0
  68. package/dist/utils/swagger/utils/pathUtils.d.ts.map +1 -0
  69. package/dist/utils/swagger/utils/pathUtils.js +118 -0
  70. package/dist/utils/swagger/utils/pathUtils.js.map +1 -0
  71. package/package.json +56 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Generator Runner - Executes swagger generation based on automation config
3
+ */
4
+ import { GeneratorResult } from '.';
5
+ import { AutomationConfig } from '../../config/types';
6
+ /**
7
+ * Results for all processed sources
8
+ */
9
+ export interface RunResults {
10
+ totalSources: number;
11
+ successful: number;
12
+ failed: number;
13
+ skipped: number;
14
+ results: Array<{
15
+ source: string;
16
+ result: GeneratorResult;
17
+ }>;
18
+ }
19
+ /**
20
+ * Run the generator for all configured sources
21
+ */
22
+ export declare function runGenerator(config: AutomationConfig): Promise<RunResults>;
23
+ //# sourceMappingURL=run-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-generator.d.ts","sourceRoot":"","sources":["../../../src/utils/swagger/run-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAoB,eAAe,EAAE,MAAM,GAAG,CAAC;AACtD,OAAO,EACN,gBAAgB,EAGhB,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,eAAe,CAAC;KACxB,CAAC,CAAC;CACH;AAyCD;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0HhF"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ /**
3
+ * Generator Runner - Executes swagger generation based on automation config
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.runGenerator = runGenerator;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const _1 = require(".");
46
+ const types_1 = require("../../config/types");
47
+ const logger_1 = __importDefault(require("../logger"));
48
+ /**
49
+ * Process a single swagger source
50
+ */
51
+ async function processSource(sourceConfig, globalOutputDir, baseClientPath) {
52
+ const outputDir = sourceConfig.outputDir || globalOutputDir;
53
+ const generator = new _1.SwaggerGenerator({
54
+ outputDir,
55
+ serviceName: sourceConfig.serviceName,
56
+ baseClientPath: baseClientPath || types_1.DEFAULT_BASE_CLIENT_PATH,
57
+ });
58
+ if (sourceConfig.type === 'file') {
59
+ // Resolve file path relative to project root
60
+ const filePath = path.isAbsolute(sourceConfig.source)
61
+ ? sourceConfig.source
62
+ : path.join(process.cwd(), sourceConfig.source);
63
+ return generator.generateFromFile(filePath);
64
+ }
65
+ else {
66
+ return generator.generateFromUrl(sourceConfig.source);
67
+ }
68
+ }
69
+ /**
70
+ * Clean output directory
71
+ */
72
+ async function cleanDirectory(dirPath) {
73
+ try {
74
+ await fs.promises.rm(dirPath, { recursive: true, force: true });
75
+ logger_1.default.info(`Cleaned output directory: ${dirPath}`);
76
+ }
77
+ catch (error) {
78
+ // Ignore if doesn't exist
79
+ }
80
+ }
81
+ /**
82
+ * Run the generator for all configured sources
83
+ */
84
+ async function runGenerator(config) {
85
+ logger_1.default.info('='.repeat(60));
86
+ logger_1.default.info('Starting Swagger to Playwright API Client Generation');
87
+ logger_1.default.info('='.repeat(60));
88
+ const results = {
89
+ totalSources: config.sources.length,
90
+ successful: 0,
91
+ failed: 0,
92
+ skipped: 0,
93
+ results: [],
94
+ };
95
+ // Filter active sources
96
+ const activeSources = config.sources.filter((s) => !s.skip);
97
+ const skippedSources = config.sources.filter((s) => s.skip);
98
+ results.skipped = skippedSources.length;
99
+ if (skippedSources.length > 0) {
100
+ logger_1.default.info(`Skipping ${skippedSources.length} source(s)`);
101
+ }
102
+ if (activeSources.length === 0) {
103
+ logger_1.default.warn('No active sources to process. Check your automation-config.ts');
104
+ return results;
105
+ }
106
+ // Generated clients go into a subfolder for safe cleanup
107
+ const generatedClientsDir = path.join(config.outputDir, 'generatedClients');
108
+ // Clean generated clients directory if configured (safe - doesn't touch BaseAPIClient etc.)
109
+ if (config.cleanOutput) {
110
+ await cleanDirectory(generatedClientsDir);
111
+ }
112
+ // Create generated clients directory
113
+ await fs.promises.mkdir(generatedClientsDir, { recursive: true });
114
+ // Process sources
115
+ if (config.parallel) {
116
+ // Parallel processing
117
+ logger_1.default.info(`Processing ${activeSources.length} source(s) in parallel`);
118
+ const promises = activeSources.map((source) => processSource(source, generatedClientsDir, config.baseClientPath));
119
+ const allResults = await Promise.allSettled(promises);
120
+ for (let i = 0; i < allResults.length; i++) {
121
+ const settledResult = allResults[i];
122
+ const source = activeSources[i];
123
+ if (settledResult.status === 'fulfilled') {
124
+ const result = settledResult.value;
125
+ results.results.push({ source: source.source, result });
126
+ if (result.success) {
127
+ results.successful++;
128
+ }
129
+ else {
130
+ results.failed++;
131
+ }
132
+ }
133
+ else {
134
+ results.failed++;
135
+ results.results.push({
136
+ source: source.source,
137
+ result: {
138
+ success: false,
139
+ serviceName: '',
140
+ filesWritten: [],
141
+ folderStructure: '',
142
+ errors: [settledResult.reason?.message || 'Unknown error'],
143
+ },
144
+ });
145
+ }
146
+ }
147
+ }
148
+ else {
149
+ // Sequential processing
150
+ for (const source of activeSources) {
151
+ logger_1.default.info('-'.repeat(40));
152
+ logger_1.default.info(`Processing: ${source.source}`);
153
+ try {
154
+ const result = await processSource(source, generatedClientsDir, config.baseClientPath);
155
+ results.results.push({ source: source.source, result });
156
+ if (result.success) {
157
+ results.successful++;
158
+ logger_1.default.info(`✓ Generated ${result.filesWritten.length} files for ${result.serviceName}`);
159
+ }
160
+ else {
161
+ results.failed++;
162
+ logger_1.default.error(`✗ Failed: ${result.errors.join(', ')}`);
163
+ }
164
+ }
165
+ catch (error) {
166
+ results.failed++;
167
+ const errorMessage = error instanceof Error ? error.message : String(error);
168
+ logger_1.default.error(`✗ Exception: ${errorMessage}`);
169
+ results.results.push({
170
+ source: source.source,
171
+ result: {
172
+ success: false,
173
+ serviceName: '',
174
+ filesWritten: [],
175
+ folderStructure: '',
176
+ errors: [errorMessage],
177
+ },
178
+ });
179
+ }
180
+ }
181
+ }
182
+ // Print summary
183
+ logger_1.default.info('='.repeat(60));
184
+ logger_1.default.info('Generation Complete');
185
+ logger_1.default.info('='.repeat(60));
186
+ logger_1.default.info(`Total Sources: ${results.totalSources}`);
187
+ logger_1.default.info(`Successful: ${results.successful}`);
188
+ logger_1.default.info(`Failed: ${results.failed}`);
189
+ logger_1.default.info(`Skipped: ${results.skipped}`);
190
+ if (results.failed > 0) {
191
+ logger_1.default.warn('Some sources failed. Check the logs above for details.');
192
+ }
193
+ return results;
194
+ }
195
+ //# sourceMappingURL=run-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-generator.js","sourceRoot":"","sources":["../../../src/utils/swagger/run-generator.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEH,oCA0HC;AA5LD,uCAAyB;AACzB,2CAA6B;AAC7B,wBAAsD;AACtD,8CAI4B;AAC5B,uDAA+B;AAgB/B;;GAEG;AACH,KAAK,UAAU,aAAa,CAC3B,YAAiC,EACjC,eAAuB,EACvB,cAAuB;IAEvB,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,IAAI,eAAe,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,mBAAgB,CAAC;QACtC,SAAS;QACT,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,cAAc,EAAE,cAAc,IAAI,gCAAwB;KAC1D,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAClC,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;YACpD,CAAC,CAAC,YAAY,CAAC,MAAM;YACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAEjD,OAAO,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACP,OAAO,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,gBAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,0BAA0B;IAC3B,CAAC;AACF,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,MAAwB;IAC1D,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,gBAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACpE,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAe;QAC3B,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,EAAE;KACX,CAAC;IAEF,wBAAwB;IACxB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC;IAExC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,gBAAM,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,MAAM,YAAY,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,gBAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,yDAAyD;IACzD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAE5E,4FAA4F;IAC5F,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC3C,CAAC;IAED,qCAAqC;IACrC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,kBAAkB;IAClB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,sBAAsB;QACtB,gBAAM,CAAC,IAAI,CAAC,cAAc,aAAa,CAAC,MAAM,wBAAwB,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7C,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,cAAc,CAAC,CACjE,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAEhC,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;gBACnC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,CAAC,UAAU,EAAE,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,MAAM,EAAE,CAAC;gBAClB,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;oBACpB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE;wBACP,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,EAAE;wBACf,YAAY,EAAE,EAAE;wBAChB,eAAe,EAAE,EAAE;wBACnB,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,IAAI,eAAe,CAAC;qBAC1D;iBACD,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;SAAM,CAAC;QACP,wBAAwB;QACxB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACpC,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,gBAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAE5C,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;gBACvF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBAExD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,CAAC,UAAU,EAAE,CAAC;oBACrB,gBAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,YAAY,CAAC,MAAM,cAAc,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1F,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,gBAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvD,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5E,gBAAM,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;oBACpB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE;wBACP,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,EAAE;wBACf,YAAY,EAAE,EAAE;wBAChB,eAAe,EAAE,EAAE;wBACnB,MAAM,EAAE,CAAC,YAAY,CAAC;qBACtB;iBACD,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;IAED,gBAAgB;IAChB,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,gBAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACnC,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,gBAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACtD,gBAAM,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACjD,gBAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,gBAAM,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,gBAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Type definitions for Swagger/OpenAPI parsing
3
+ * Supports Swagger 2.0 and OpenAPI 3.x (including 3.1)
4
+ */
5
+ export interface SwaggerInfo {
6
+ title: string;
7
+ version: string;
8
+ description?: string;
9
+ }
10
+ export interface SwaggerParameter {
11
+ name: string;
12
+ in: 'path' | 'query' | 'header' | 'body' | 'formData';
13
+ required?: boolean;
14
+ type?: string;
15
+ format?: string;
16
+ description?: string;
17
+ schema?: SchemaObject;
18
+ items?: SchemaObject;
19
+ enum?: string[];
20
+ }
21
+ export interface SchemaObject {
22
+ type?: string;
23
+ format?: string;
24
+ $ref?: string;
25
+ items?: SchemaObject;
26
+ properties?: Record<string, SchemaObject>;
27
+ required?: string[];
28
+ additionalProperties?: boolean | SchemaObject;
29
+ enum?: (string | number)[];
30
+ nullable?: boolean;
31
+ allOf?: SchemaObject[];
32
+ oneOf?: SchemaObject[];
33
+ anyOf?: SchemaObject[];
34
+ description?: string;
35
+ default?: unknown;
36
+ example?: unknown;
37
+ }
38
+ export interface RequestBody {
39
+ required?: boolean;
40
+ content: Record<string, {
41
+ schema?: SchemaObject;
42
+ }>;
43
+ }
44
+ export interface ResponseObject {
45
+ description?: string;
46
+ schema?: SchemaObject;
47
+ content?: Record<string, {
48
+ schema?: SchemaObject;
49
+ }>;
50
+ }
51
+ export interface OperationObject {
52
+ operationId?: string;
53
+ summary?: string;
54
+ description?: string;
55
+ tags?: string[];
56
+ parameters?: SwaggerParameter[];
57
+ requestBody?: RequestBody;
58
+ responses?: Record<string, ResponseObject>;
59
+ deprecated?: boolean;
60
+ }
61
+ export interface PathItemObject {
62
+ get?: OperationObject;
63
+ post?: OperationObject;
64
+ put?: OperationObject;
65
+ patch?: OperationObject;
66
+ delete?: OperationObject;
67
+ parameters?: SwaggerParameter[];
68
+ }
69
+ export interface Swagger2Document {
70
+ swagger: '2.0';
71
+ info: SwaggerInfo;
72
+ host?: string;
73
+ basePath?: string;
74
+ schemes?: string[];
75
+ paths: Record<string, PathItemObject>;
76
+ definitions?: Record<string, SchemaObject>;
77
+ parameters?: Record<string, SwaggerParameter>;
78
+ }
79
+ export interface OpenAPI3Document {
80
+ openapi: string;
81
+ info: SwaggerInfo;
82
+ servers?: Array<{
83
+ url: string;
84
+ description?: string;
85
+ }>;
86
+ paths: Record<string, PathItemObject>;
87
+ components?: {
88
+ schemas?: Record<string, SchemaObject>;
89
+ parameters?: Record<string, SwaggerParameter>;
90
+ requestBodies?: Record<string, RequestBody>;
91
+ responses?: Record<string, ResponseObject>;
92
+ };
93
+ }
94
+ export type SwaggerDocument = Swagger2Document | OpenAPI3Document;
95
+ export interface ParsedEndpoint {
96
+ path: string;
97
+ method: string;
98
+ operationId?: string;
99
+ summary?: string;
100
+ description?: string;
101
+ tags?: string[];
102
+ pathParams: ParsedParameter[];
103
+ queryParams: ParsedParameter[];
104
+ headerParams: ParsedParameter[];
105
+ requestBody?: ParsedSchema;
106
+ responses: Record<string, ParsedSchema>;
107
+ deprecated?: boolean;
108
+ }
109
+ export interface ParsedParameter {
110
+ name: string;
111
+ required: boolean;
112
+ type: string;
113
+ description?: string;
114
+ enum?: (string | number)[];
115
+ }
116
+ export interface ParsedSchema {
117
+ typeName: string;
118
+ typeDefinition: string;
119
+ isArray?: boolean;
120
+ isEnum?: boolean;
121
+ enumValues?: (string | number)[];
122
+ properties?: Record<string, ParsedSchema>;
123
+ required?: string[];
124
+ }
125
+ export interface GeneratedType {
126
+ name: string;
127
+ definition: string;
128
+ source: string;
129
+ }
130
+ export interface GeneratedClient {
131
+ serviceName: string;
132
+ folder: string[];
133
+ imports: string[];
134
+ functions: string[];
135
+ types: GeneratedType[];
136
+ }
137
+ export interface GeneratorOutput {
138
+ serviceName: string;
139
+ clients: GeneratedClient[];
140
+ sharedTypes: GeneratedType[];
141
+ }
142
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/swagger/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * Type definitions for Swagger/OpenAPI parsing
4
+ * Supports Swagger 2.0 and OpenAPI 3.x (including 3.1)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/swagger/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Naming convention utilities for generating TypeScript code
3
+ * Handles conversion between different case styles
4
+ */
5
+ /**
6
+ * Convert string to PascalCase
7
+ * Example: "activity-plan-schedule" -> "ActivityPlanSchedule"
8
+ */
9
+ export declare function toPascalCase(str: string): string;
10
+ /**
11
+ * Convert string to camelCase
12
+ * Example: "activity-plan-schedule" -> "activityPlanSchedule"
13
+ */
14
+ export declare function toCamelCase(str: string): string;
15
+ /**
16
+ * Convert path parameter to "By{ParamName}" format
17
+ * Example: "{id}" -> "ById", "{lessonId}" -> "ByLessonId"
18
+ */
19
+ export declare function pathParamToByFormat(param: string): string;
20
+ /**
21
+ * Generate type name from endpoint and method
22
+ * Example: POST /api/v1/activity/activity-plan-schedule -> postActivityPlanScheduleRequest
23
+ */
24
+ export declare function generateTypeName(method: string, resourceName: string, pathParams: string[], suffix: 'Request' | 'Response'): string;
25
+ /**
26
+ * Generate function name from endpoint and method
27
+ * Example: GET /api/v1/activity/activity-plan-schedule/{id} -> getActivityPlanScheduleById
28
+ */
29
+ export declare function generateFunctionName(method: string, resourceName: string, pathParams: string[]): string;
30
+ /**
31
+ * Extract resource name from path
32
+ * Example: "/api/v1/activity/activity-plan-schedule/{id}" -> "ActivityPlanSchedule"
33
+ */
34
+ export declare function extractResourceName(path: string): string;
35
+ /**
36
+ * Extract path parameters from endpoint path
37
+ * Example: "/api/v1/activity/{id}/items/{itemId}" -> ["id", "itemId"]
38
+ */
39
+ export declare function extractPathParams(path: string): string[];
40
+ /**
41
+ * Sanitize a name to be a valid TypeScript identifier
42
+ */
43
+ export declare function sanitizeIdentifier(name: string): string;
44
+ /**
45
+ * Convert schema property name to valid TypeScript property
46
+ */
47
+ export declare function sanitizePropertyName(name: string): string;
48
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../../src/utils/swagger/utils/naming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAAE,EACpB,MAAM,EAAE,SAAS,GAAG,UAAU,GAC5B,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAAE,GAClB,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ /**
3
+ * Naming convention utilities for generating TypeScript code
4
+ * Handles conversion between different case styles
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.toPascalCase = toPascalCase;
8
+ exports.toCamelCase = toCamelCase;
9
+ exports.pathParamToByFormat = pathParamToByFormat;
10
+ exports.generateTypeName = generateTypeName;
11
+ exports.generateFunctionName = generateFunctionName;
12
+ exports.extractResourceName = extractResourceName;
13
+ exports.extractPathParams = extractPathParams;
14
+ exports.sanitizeIdentifier = sanitizeIdentifier;
15
+ exports.sanitizePropertyName = sanitizePropertyName;
16
+ /**
17
+ * Convert string to PascalCase
18
+ * Example: "activity-plan-schedule" -> "ActivityPlanSchedule"
19
+ */
20
+ function toPascalCase(str) {
21
+ return str
22
+ .replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))
23
+ .replace(/^(.)/, (char) => char.toUpperCase())
24
+ .replace(/[^a-zA-Z0-9]/g, '');
25
+ }
26
+ /**
27
+ * Convert string to camelCase
28
+ * Example: "activity-plan-schedule" -> "activityPlanSchedule"
29
+ */
30
+ function toCamelCase(str) {
31
+ const pascal = toPascalCase(str);
32
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
33
+ }
34
+ /**
35
+ * Convert path parameter to "By{ParamName}" format
36
+ * Example: "{id}" -> "ById", "{lessonId}" -> "ByLessonId"
37
+ */
38
+ function pathParamToByFormat(param) {
39
+ const cleanParam = param.replace(/[{}]/g, '');
40
+ return `By${toPascalCase(cleanParam)}`;
41
+ }
42
+ /**
43
+ * Generate type name from endpoint and method
44
+ * Example: POST /api/v1/activity/activity-plan-schedule -> postActivityPlanScheduleRequest
45
+ */
46
+ function generateTypeName(method, resourceName, pathParams, suffix) {
47
+ const methodLower = method.toLowerCase();
48
+ const resource = toPascalCase(resourceName);
49
+ const paramSuffix = pathParams.map((p) => pathParamToByFormat(p)).join('');
50
+ return `${methodLower}${resource}${paramSuffix}${suffix}`;
51
+ }
52
+ /**
53
+ * Generate function name from endpoint and method
54
+ * Example: GET /api/v1/activity/activity-plan-schedule/{id} -> getActivityPlanScheduleById
55
+ */
56
+ function generateFunctionName(method, resourceName, pathParams) {
57
+ const methodLower = method.toLowerCase();
58
+ const resource = toPascalCase(resourceName);
59
+ const paramSuffix = pathParams.map((p) => pathParamToByFormat(p)).join('');
60
+ return `${methodLower}${resource}${paramSuffix}`;
61
+ }
62
+ /**
63
+ * Extract resource name from path
64
+ * Example: "/api/v1/activity/activity-plan-schedule/{id}" -> "ActivityPlanSchedule"
65
+ */
66
+ function extractResourceName(path) {
67
+ // Remove path parameters and split by /
68
+ const segments = path.split('/').filter((s) => s && !s.startsWith('{') && !s.endsWith('}'));
69
+ // Skip common prefixes like api, v1, v2, etc.
70
+ const filteredSegments = segments.filter((s) => !['api', 'v1', 'v2', 'v3'].includes(s.toLowerCase()));
71
+ // Take the last meaningful segments
72
+ if (filteredSegments.length === 0)
73
+ return 'Root';
74
+ // Join last 2-3 segments to form resource name
75
+ const relevantSegments = filteredSegments.slice(-3);
76
+ return relevantSegments.map((s) => toPascalCase(s)).join('');
77
+ }
78
+ /**
79
+ * Extract path parameters from endpoint path
80
+ * Example: "/api/v1/activity/{id}/items/{itemId}" -> ["id", "itemId"]
81
+ */
82
+ function extractPathParams(path) {
83
+ const matches = path.match(/\{([^}]+)\}/g);
84
+ if (!matches)
85
+ return [];
86
+ return matches.map((m) => m.replace(/[{}]/g, ''));
87
+ }
88
+ /**
89
+ * Sanitize a name to be a valid TypeScript identifier
90
+ */
91
+ function sanitizeIdentifier(name) {
92
+ // Remove invalid characters and ensure it starts with a letter
93
+ let sanitized = name.replace(/[^a-zA-Z0-9_$]/g, '');
94
+ if (/^[0-9]/.test(sanitized)) {
95
+ sanitized = '_' + sanitized;
96
+ }
97
+ return sanitized || '_unknown';
98
+ }
99
+ /**
100
+ * Convert schema property name to valid TypeScript property
101
+ */
102
+ function sanitizePropertyName(name) {
103
+ // If name contains special characters, wrap in quotes
104
+ if (/[^a-zA-Z0-9_$]/.test(name) || /^[0-9]/.test(name)) {
105
+ return `'${name}'`;
106
+ }
107
+ return name;
108
+ }
109
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../../src/utils/swagger/utils/naming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Path utilities for processing API endpoints
3
+ * Handles path parsing, grouping, and organization
4
+ */
5
+ import { PathItemObject } from '../types';
6
+ /**
7
+ * Determine the folder structure for an endpoint
8
+ * Groups endpoints logically based on path segments
9
+ */
10
+ export declare function determineFolderStructure(path: string, serviceName: string): string[];
11
+ /**
12
+ * Strip path parameters from endpoint for base path
13
+ * Example: "/api/v1/activity/{id}/items/{itemId}" -> "/api/v1/activity"
14
+ */
15
+ export declare function stripPathParams(path: string): string;
16
+ /**
17
+ * Generate template literal for path with params
18
+ * Example: "/api/v1/activity/{id}" -> "`/api/v1/activity/${id}`"
19
+ */
20
+ export declare function generatePathTemplate(path: string): string;
21
+ /**
22
+ * Parse query parameters from path (if any exist in the path definition)
23
+ */
24
+ export declare function parseQueryFromPath(path: string): {
25
+ basePath: string;
26
+ queryParams: string[];
27
+ };
28
+ /**
29
+ * Group endpoints by their logical folder
30
+ */
31
+ export interface EndpointGroup {
32
+ folder: string[];
33
+ endpoints: Array<{
34
+ path: string;
35
+ method: string;
36
+ operationId?: string;
37
+ }>;
38
+ }
39
+ export declare function groupEndpointsByFolder(paths: Record<string, PathItemObject>, serviceName: string): Map<string, EndpointGroup>;
40
+ //# sourceMappingURL=pathUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/swagger/utils/pathUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAoCpF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB,CAgBA;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACH;AAED,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACrC,WAAW,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAmC5B"}