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.
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/dist/api.d.ts +27 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +127 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +255 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/BaseAPIClient.d.ts +88 -0
- package/dist/clients/BaseAPIClient.d.ts.map +1 -0
- package/dist/clients/BaseAPIClient.js +199 -0
- package/dist/clients/BaseAPIClient.js.map +1 -0
- package/dist/config/types.d.ts +72 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +19 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/copyBaseClient.d.ts +8 -0
- package/dist/utils/copyBaseClient.d.ts.map +1 -0
- package/dist/utils/copyBaseClient.js +354 -0
- package/dist/utils/copyBaseClient.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +57 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/swagger/ClientGenerator.d.ts +49 -0
- package/dist/utils/swagger/ClientGenerator.d.ts.map +1 -0
- package/dist/utils/swagger/ClientGenerator.js +192 -0
- package/dist/utils/swagger/ClientGenerator.js.map +1 -0
- package/dist/utils/swagger/FileWriter.d.ts +66 -0
- package/dist/utils/swagger/FileWriter.d.ts.map +1 -0
- package/dist/utils/swagger/FileWriter.js +185 -0
- package/dist/utils/swagger/FileWriter.js.map +1 -0
- package/dist/utils/swagger/SwaggerGenerator.d.ts +42 -0
- package/dist/utils/swagger/SwaggerGenerator.d.ts.map +1 -0
- package/dist/utils/swagger/SwaggerGenerator.js +211 -0
- package/dist/utils/swagger/SwaggerGenerator.js.map +1 -0
- package/dist/utils/swagger/SwaggerParser.d.ts +69 -0
- package/dist/utils/swagger/SwaggerParser.d.ts.map +1 -0
- package/dist/utils/swagger/SwaggerParser.js +358 -0
- package/dist/utils/swagger/SwaggerParser.js.map +1 -0
- package/dist/utils/swagger/TypeGenerator.d.ts +49 -0
- package/dist/utils/swagger/TypeGenerator.d.ts.map +1 -0
- package/dist/utils/swagger/TypeGenerator.js +166 -0
- package/dist/utils/swagger/TypeGenerator.js.map +1 -0
- package/dist/utils/swagger/index.d.ts +12 -0
- package/dist/utils/swagger/index.d.ts.map +1 -0
- package/dist/utils/swagger/index.js +38 -0
- package/dist/utils/swagger/index.js.map +1 -0
- package/dist/utils/swagger/run-generator.d.ts +23 -0
- package/dist/utils/swagger/run-generator.d.ts.map +1 -0
- package/dist/utils/swagger/run-generator.js +195 -0
- package/dist/utils/swagger/run-generator.js.map +1 -0
- package/dist/utils/swagger/types.d.ts +142 -0
- package/dist/utils/swagger/types.d.ts.map +1 -0
- package/dist/utils/swagger/types.js +7 -0
- package/dist/utils/swagger/types.js.map +1 -0
- package/dist/utils/swagger/utils/naming.d.ts +48 -0
- package/dist/utils/swagger/utils/naming.d.ts.map +1 -0
- package/dist/utils/swagger/utils/naming.js +109 -0
- package/dist/utils/swagger/utils/naming.js.map +1 -0
- package/dist/utils/swagger/utils/pathUtils.d.ts +40 -0
- package/dist/utils/swagger/utils/pathUtils.d.ts.map +1 -0
- package/dist/utils/swagger/utils/pathUtils.js +118 -0
- package/dist/utils/swagger/utils/pathUtils.js.map +1 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|