nestjs-to-collection 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +334 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +234 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/generators/index.d.ts +3 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +8 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/insomnia.generator.d.ts +24 -0
- package/dist/generators/insomnia.generator.d.ts.map +1 -0
- package/dist/generators/insomnia.generator.js +276 -0
- package/dist/generators/insomnia.generator.js.map +1 -0
- package/dist/generators/postman.generator.d.ts +22 -0
- package/dist/generators/postman.generator.d.ts.map +1 -0
- package/dist/generators/postman.generator.js +299 -0
- package/dist/generators/postman.generator.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/decorator.parser.d.ts +20 -0
- package/dist/parsers/decorator.parser.d.ts.map +1 -0
- package/dist/parsers/decorator.parser.js +396 -0
- package/dist/parsers/decorator.parser.js.map +1 -0
- package/dist/parsers/index.d.ts +3 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +8 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/swagger.parser.d.ts +25 -0
- package/dist/parsers/swagger.parser.d.ts.map +1 -0
- package/dist/parsers/swagger.parser.js +237 -0
- package/dist/parsers/swagger.parser.js.map +1 -0
- package/dist/types/index.d.ts +187 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +73 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.InsomniaGenerator = exports.PostmanGenerator = exports.DecoratorParser = exports.SwaggerParser = void 0;
|
|
18
|
+
// Types
|
|
19
|
+
__exportStar(require("./types"), exports);
|
|
20
|
+
// Parsers
|
|
21
|
+
var swagger_parser_1 = require("./parsers/swagger.parser");
|
|
22
|
+
Object.defineProperty(exports, "SwaggerParser", { enumerable: true, get: function () { return swagger_parser_1.SwaggerParser; } });
|
|
23
|
+
var decorator_parser_1 = require("./parsers/decorator.parser");
|
|
24
|
+
Object.defineProperty(exports, "DecoratorParser", { enumerable: true, get: function () { return decorator_parser_1.DecoratorParser; } });
|
|
25
|
+
// Generators
|
|
26
|
+
var postman_generator_1 = require("./generators/postman.generator");
|
|
27
|
+
Object.defineProperty(exports, "PostmanGenerator", { enumerable: true, get: function () { return postman_generator_1.PostmanGenerator; } });
|
|
28
|
+
var insomnia_generator_1 = require("./generators/insomnia.generator");
|
|
29
|
+
Object.defineProperty(exports, "InsomniaGenerator", { enumerable: true, get: function () { return insomnia_generator_1.InsomniaGenerator; } });
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,0CAAwB;AAExB,UAAU;AACV,2DAAyD;AAAhD,+GAAA,aAAa,OAAA;AACtB,+DAA6D;AAApD,mHAAA,eAAe,OAAA;AAExB,aAAa;AACb,oEAAkE;AAAzD,qHAAA,gBAAgB,OAAA;AACzB,sEAAoE;AAA3D,uHAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ApiCollection } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Parser for NestJS decorators from source code
|
|
4
|
+
*/
|
|
5
|
+
export declare class DecoratorParser {
|
|
6
|
+
/**
|
|
7
|
+
* Parse NestJS source files and return an ApiCollection
|
|
8
|
+
*/
|
|
9
|
+
parse(srcPath: string): Promise<ApiCollection>;
|
|
10
|
+
private findAndParseControllers;
|
|
11
|
+
private parseControllerFile;
|
|
12
|
+
private parseControllerMethods;
|
|
13
|
+
private parseMethodBlock;
|
|
14
|
+
private parseMethodParameters;
|
|
15
|
+
private parseObjectLiteral;
|
|
16
|
+
private normalizePath;
|
|
17
|
+
private convertToGroups;
|
|
18
|
+
private joinPaths;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=decorator.parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorator.parser.d.ts","sourceRoot":"","sources":["../../src/parsers/decorator.parser.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EAOd,MAAM,UAAU,CAAC;AA+ClB;;GAEG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAyBtC,uBAAuB;IAoBrC,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,sBAAsB;IAiC9B,OAAO,CAAC,gBAAgB;IAoJxB,OAAO,CAAC,qBAAqB;IAsD7B,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,SAAS;CAUlB"}
|
|
@@ -0,0 +1,396 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DecoratorParser = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const glob_1 = require("glob");
|
|
40
|
+
/**
|
|
41
|
+
* Regex patterns for NestJS decorators
|
|
42
|
+
*/
|
|
43
|
+
const DECORATOR_PATTERNS = {
|
|
44
|
+
controller: /@Controller\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
45
|
+
get: /@Get\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
46
|
+
post: /@Post\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
47
|
+
put: /@Put\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
48
|
+
patch: /@Patch\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
49
|
+
delete: /@Delete\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
50
|
+
options: /@Options\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
51
|
+
head: /@Head\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
52
|
+
all: /@All\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
53
|
+
param: /@Param\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/g,
|
|
54
|
+
query: /@Query\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/g,
|
|
55
|
+
body: /@Body\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/,
|
|
56
|
+
headers: /@Headers\s*\(\s*['"`]?([^'"`\)]*)?['"`]?\s*\)/g,
|
|
57
|
+
apiTags: /@ApiTags\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/,
|
|
58
|
+
apiOperation: /@ApiOperation\s*\(\s*\{([^}]+)\}\s*\)/,
|
|
59
|
+
apiBody: /@ApiBody\s*\(\s*\{([^}]+)\}\s*\)/,
|
|
60
|
+
apiParam: /@ApiParam\s*\(\s*\{([^}]+)\}\s*\)/g,
|
|
61
|
+
apiQuery: /@ApiQuery\s*\(\s*\{([^}]+)\}\s*\)/g,
|
|
62
|
+
apiResponse: /@ApiResponse\s*\(\s*\{([^}]+)\}\s*\)/g,
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Parser for NestJS decorators from source code
|
|
66
|
+
*/
|
|
67
|
+
class DecoratorParser {
|
|
68
|
+
/**
|
|
69
|
+
* Parse NestJS source files and return an ApiCollection
|
|
70
|
+
*/
|
|
71
|
+
async parse(srcPath) {
|
|
72
|
+
const absolutePath = path.resolve(process.cwd(), srcPath);
|
|
73
|
+
if (!fs.existsSync(absolutePath)) {
|
|
74
|
+
throw new Error(`Source path not found: ${absolutePath}`);
|
|
75
|
+
}
|
|
76
|
+
const controllers = await this.findAndParseControllers(absolutePath);
|
|
77
|
+
const groups = this.convertToGroups(controllers);
|
|
78
|
+
return {
|
|
79
|
+
name: 'NestJS API',
|
|
80
|
+
description: 'Generated from NestJS decorators',
|
|
81
|
+
baseUrl: '{{baseUrl}}',
|
|
82
|
+
groups,
|
|
83
|
+
variables: [
|
|
84
|
+
{
|
|
85
|
+
key: 'baseUrl',
|
|
86
|
+
value: 'http://localhost:3000',
|
|
87
|
+
description: 'Base URL of the API',
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async findAndParseControllers(srcPath) {
|
|
93
|
+
const pattern = path.join(srcPath, '**/*.controller.ts').replace(/\\/g, '/');
|
|
94
|
+
const files = await (0, glob_1.glob)(pattern);
|
|
95
|
+
const controllers = [];
|
|
96
|
+
for (const file of files) {
|
|
97
|
+
try {
|
|
98
|
+
const content = fs.readFileSync(file, 'utf-8');
|
|
99
|
+
const parsed = this.parseControllerFile(content, file);
|
|
100
|
+
if (parsed) {
|
|
101
|
+
controllers.push(parsed);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.warn(`Warning: Could not parse ${file}:`, error);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return controllers;
|
|
109
|
+
}
|
|
110
|
+
parseControllerFile(content, filePath) {
|
|
111
|
+
// Find @Controller decorator
|
|
112
|
+
const controllerMatch = content.match(DECORATOR_PATTERNS.controller);
|
|
113
|
+
if (!controllerMatch) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const basePath = controllerMatch[1] || '';
|
|
117
|
+
// Extract class name
|
|
118
|
+
const classMatch = content.match(/export\s+class\s+(\w+)/);
|
|
119
|
+
const className = classMatch ? classMatch[1] : 'UnknownController';
|
|
120
|
+
// Extract API tags if present
|
|
121
|
+
const tagsMatch = content.match(DECORATOR_PATTERNS.apiTags);
|
|
122
|
+
const tags = tagsMatch ? [tagsMatch[1]] : undefined;
|
|
123
|
+
// Parse methods
|
|
124
|
+
const methods = this.parseControllerMethods(content);
|
|
125
|
+
return {
|
|
126
|
+
className,
|
|
127
|
+
basePath: this.normalizePath(basePath),
|
|
128
|
+
filePath,
|
|
129
|
+
tags,
|
|
130
|
+
methods,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
parseControllerMethods(content) {
|
|
134
|
+
const methods = [];
|
|
135
|
+
const lines = content.split('\n');
|
|
136
|
+
const httpMethods = [
|
|
137
|
+
{ pattern: DECORATOR_PATTERNS.get, method: 'GET' },
|
|
138
|
+
{ pattern: DECORATOR_PATTERNS.post, method: 'POST' },
|
|
139
|
+
{ pattern: DECORATOR_PATTERNS.put, method: 'PUT' },
|
|
140
|
+
{ pattern: DECORATOR_PATTERNS.patch, method: 'PATCH' },
|
|
141
|
+
{ pattern: DECORATOR_PATTERNS.delete, method: 'DELETE' },
|
|
142
|
+
{ pattern: DECORATOR_PATTERNS.options, method: 'OPTIONS' },
|
|
143
|
+
{ pattern: DECORATOR_PATTERNS.head, method: 'HEAD' },
|
|
144
|
+
];
|
|
145
|
+
for (let i = 0; i < lines.length; i++) {
|
|
146
|
+
const line = lines[i];
|
|
147
|
+
for (const { pattern, method } of httpMethods) {
|
|
148
|
+
const match = line.match(pattern);
|
|
149
|
+
if (match) {
|
|
150
|
+
const endpointPath = match[1] || '';
|
|
151
|
+
const parsedMethod = this.parseMethodBlock(lines, i, method, endpointPath);
|
|
152
|
+
if (parsedMethod) {
|
|
153
|
+
methods.push(parsedMethod);
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return methods;
|
|
160
|
+
}
|
|
161
|
+
parseMethodBlock(lines, decoratorLine, httpMethod, endpointPath) {
|
|
162
|
+
// Look backwards for additional decorators
|
|
163
|
+
let startLine = decoratorLine;
|
|
164
|
+
let apiOperation = {};
|
|
165
|
+
const parameters = [];
|
|
166
|
+
let requestBody;
|
|
167
|
+
// Scan backwards for decorators
|
|
168
|
+
for (let i = decoratorLine - 1; i >= 0 && i >= decoratorLine - 10; i--) {
|
|
169
|
+
const line = lines[i].trim();
|
|
170
|
+
// Stop if we hit another method or empty content
|
|
171
|
+
if (line === '' ||
|
|
172
|
+
line.startsWith('async ') ||
|
|
173
|
+
line.startsWith('public ') ||
|
|
174
|
+
/^\}/.test(line)) {
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
startLine = i;
|
|
178
|
+
// Parse @ApiOperation
|
|
179
|
+
const operationMatch = line.match(DECORATOR_PATTERNS.apiOperation);
|
|
180
|
+
if (operationMatch) {
|
|
181
|
+
apiOperation = this.parseObjectLiteral(operationMatch[1]);
|
|
182
|
+
}
|
|
183
|
+
// Parse @ApiParam
|
|
184
|
+
const paramMatch = line.match(/@ApiParam\s*\(\s*\{([^}]+)\}\s*\)/);
|
|
185
|
+
if (paramMatch) {
|
|
186
|
+
const paramObj = this.parseObjectLiteral(paramMatch[1]);
|
|
187
|
+
if (paramObj.name) {
|
|
188
|
+
parameters.push({
|
|
189
|
+
name: paramObj.name,
|
|
190
|
+
in: 'path',
|
|
191
|
+
required: paramObj.required !== false,
|
|
192
|
+
type: paramObj.type || 'string',
|
|
193
|
+
description: paramObj.description,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Parse @ApiQuery
|
|
198
|
+
const queryMatch = line.match(/@ApiQuery\s*\(\s*\{([^}]+)\}\s*\)/);
|
|
199
|
+
if (queryMatch) {
|
|
200
|
+
const queryObj = this.parseObjectLiteral(queryMatch[1]);
|
|
201
|
+
if (queryObj.name) {
|
|
202
|
+
parameters.push({
|
|
203
|
+
name: queryObj.name,
|
|
204
|
+
in: 'query',
|
|
205
|
+
required: queryObj.required === true,
|
|
206
|
+
type: queryObj.type || 'string',
|
|
207
|
+
description: queryObj.description,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Parse @ApiBody
|
|
212
|
+
const bodyMatch = line.match(DECORATOR_PATTERNS.apiBody);
|
|
213
|
+
if (bodyMatch) {
|
|
214
|
+
const bodyObj = this.parseObjectLiteral(bodyMatch[1]);
|
|
215
|
+
requestBody = {
|
|
216
|
+
contentType: 'application/json',
|
|
217
|
+
required: bodyObj.required !== false,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Find the method name and parameters
|
|
222
|
+
let methodName = 'unknownMethod';
|
|
223
|
+
let endLine = decoratorLine + 1;
|
|
224
|
+
for (let i = decoratorLine + 1; i < lines.length && i < decoratorLine + 5; i++) {
|
|
225
|
+
const line = lines[i];
|
|
226
|
+
const methodMatch = line.match(/(?:async\s+)?(\w+)\s*\(/);
|
|
227
|
+
if (methodMatch) {
|
|
228
|
+
methodName = methodMatch[1];
|
|
229
|
+
// Parse method parameters for @Param, @Query, @Body
|
|
230
|
+
const methodParams = this.parseMethodParameters(lines, i);
|
|
231
|
+
// Merge with API decorator parameters
|
|
232
|
+
for (const param of methodParams) {
|
|
233
|
+
const exists = parameters.find((p) => p.name === param.name && p.in === param.in);
|
|
234
|
+
if (!exists) {
|
|
235
|
+
parameters.push(param);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Check for body parameter
|
|
239
|
+
if (methodParams.some((p) => p.in === 'body') && !requestBody) {
|
|
240
|
+
requestBody = {
|
|
241
|
+
contentType: 'application/json',
|
|
242
|
+
required: true,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
// Find the end of the method (simplified)
|
|
246
|
+
let braceCount = 0;
|
|
247
|
+
for (let j = i; j < lines.length; j++) {
|
|
248
|
+
braceCount += (lines[j].match(/\{/g) || []).length;
|
|
249
|
+
braceCount -= (lines[j].match(/\}/g) || []).length;
|
|
250
|
+
if (braceCount === 0 && lines[j].includes('}')) {
|
|
251
|
+
endLine = j;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Extract path parameters from endpoint path
|
|
259
|
+
const pathParams = endpointPath.match(/:(\w+)/g);
|
|
260
|
+
if (pathParams) {
|
|
261
|
+
for (const param of pathParams) {
|
|
262
|
+
const paramName = param.slice(1);
|
|
263
|
+
const exists = parameters.find((p) => p.name === paramName && p.in === 'path');
|
|
264
|
+
if (!exists) {
|
|
265
|
+
parameters.push({
|
|
266
|
+
name: paramName,
|
|
267
|
+
in: 'path',
|
|
268
|
+
required: true,
|
|
269
|
+
type: 'string',
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
method: httpMethod,
|
|
276
|
+
path: this.normalizePath(endpointPath),
|
|
277
|
+
methodName,
|
|
278
|
+
parameters,
|
|
279
|
+
requestBody,
|
|
280
|
+
summary: apiOperation.summary,
|
|
281
|
+
description: apiOperation.description,
|
|
282
|
+
startLine,
|
|
283
|
+
endLine,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
parseMethodParameters(lines, methodLine) {
|
|
287
|
+
const parameters = [];
|
|
288
|
+
// Get the full method signature (might span multiple lines)
|
|
289
|
+
let signature = '';
|
|
290
|
+
let parenCount = 0;
|
|
291
|
+
for (let i = methodLine; i < lines.length && i < methodLine + 10; i++) {
|
|
292
|
+
signature += lines[i];
|
|
293
|
+
parenCount += (lines[i].match(/\(/g) || []).length;
|
|
294
|
+
parenCount -= (lines[i].match(/\)/g) || []).length;
|
|
295
|
+
if (parenCount <= 0 && signature.includes(')')) {
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Parse @Param decorators
|
|
300
|
+
const paramMatches = signature.matchAll(/@Param\s*\(\s*['"`]?(\w*)['"`]?\s*\)/g);
|
|
301
|
+
for (const match of paramMatches) {
|
|
302
|
+
if (match[1]) {
|
|
303
|
+
parameters.push({
|
|
304
|
+
name: match[1],
|
|
305
|
+
in: 'path',
|
|
306
|
+
required: true,
|
|
307
|
+
type: 'string',
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Parse @Query decorators
|
|
312
|
+
const queryMatches = signature.matchAll(/@Query\s*\(\s*['"`]?(\w*)['"`]?\s*\)/g);
|
|
313
|
+
for (const match of queryMatches) {
|
|
314
|
+
if (match[1]) {
|
|
315
|
+
parameters.push({
|
|
316
|
+
name: match[1],
|
|
317
|
+
in: 'query',
|
|
318
|
+
required: false,
|
|
319
|
+
type: 'string',
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Check for @Body decorator
|
|
324
|
+
if (/@Body\s*\(/.test(signature)) {
|
|
325
|
+
parameters.push({
|
|
326
|
+
name: 'body',
|
|
327
|
+
in: 'body',
|
|
328
|
+
required: true,
|
|
329
|
+
type: 'object',
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return parameters;
|
|
333
|
+
}
|
|
334
|
+
parseObjectLiteral(content) {
|
|
335
|
+
const result = {};
|
|
336
|
+
// Simple parsing for common properties
|
|
337
|
+
const nameMatch = content.match(/name\s*:\s*['"`]([^'"`]+)['"`]/);
|
|
338
|
+
if (nameMatch)
|
|
339
|
+
result.name = nameMatch[1];
|
|
340
|
+
const typeMatch = content.match(/type\s*:\s*['"`]([^'"`]+)['"`]/);
|
|
341
|
+
if (typeMatch)
|
|
342
|
+
result.type = typeMatch[1];
|
|
343
|
+
const descMatch = content.match(/description\s*:\s*['"`]([^'"`]+)['"`]/);
|
|
344
|
+
if (descMatch)
|
|
345
|
+
result.description = descMatch[1];
|
|
346
|
+
const summaryMatch = content.match(/summary\s*:\s*['"`]([^'"`]+)['"`]/);
|
|
347
|
+
if (summaryMatch)
|
|
348
|
+
result.summary = summaryMatch[1];
|
|
349
|
+
const requiredMatch = content.match(/required\s*:\s*(true|false)/);
|
|
350
|
+
if (requiredMatch)
|
|
351
|
+
result.required = requiredMatch[1] === 'true';
|
|
352
|
+
return result;
|
|
353
|
+
}
|
|
354
|
+
normalizePath(pathStr) {
|
|
355
|
+
if (!pathStr)
|
|
356
|
+
return '/';
|
|
357
|
+
// Ensure path starts with /
|
|
358
|
+
let normalized = pathStr.startsWith('/') ? pathStr : '/' + pathStr;
|
|
359
|
+
// Convert NestJS :param to OpenAPI {param} format
|
|
360
|
+
normalized = normalized.replace(/:(\w+)/g, '{$1}');
|
|
361
|
+
// Remove trailing slash
|
|
362
|
+
if (normalized.length > 1 && normalized.endsWith('/')) {
|
|
363
|
+
normalized = normalized.slice(0, -1);
|
|
364
|
+
}
|
|
365
|
+
return normalized;
|
|
366
|
+
}
|
|
367
|
+
convertToGroups(controllers) {
|
|
368
|
+
return controllers.map((controller) => {
|
|
369
|
+
const groupName = controller.tags?.[0] || controller.className.replace('Controller', '');
|
|
370
|
+
const endpoints = controller.methods.map((method) => ({
|
|
371
|
+
path: this.joinPaths(controller.basePath, method.path),
|
|
372
|
+
method: method.method,
|
|
373
|
+
summary: method.summary || `${method.method} ${method.methodName}`,
|
|
374
|
+
description: method.description,
|
|
375
|
+
operationId: `${controller.className}_${method.methodName}`,
|
|
376
|
+
tags: controller.tags || [groupName],
|
|
377
|
+
parameters: method.parameters.filter((p) => p.in !== 'body'),
|
|
378
|
+
requestBody: method.requestBody,
|
|
379
|
+
}));
|
|
380
|
+
return {
|
|
381
|
+
name: groupName,
|
|
382
|
+
endpoints,
|
|
383
|
+
};
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
joinPaths(basePath, endpointPath) {
|
|
387
|
+
const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;
|
|
388
|
+
const endpoint = endpointPath.startsWith('/') ? endpointPath : '/' + endpointPath;
|
|
389
|
+
if (base === '/' || base === '') {
|
|
390
|
+
return endpoint || '/';
|
|
391
|
+
}
|
|
392
|
+
return base + endpoint;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
exports.DecoratorParser = DecoratorParser;
|
|
396
|
+
//# sourceMappingURL=decorator.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorator.parser.js","sourceRoot":"","sources":["../../src/parsers/decorator.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DecoratorParser = exports.SwaggerParser = void 0;
|
|
4
|
+
var swagger_parser_1 = require("./swagger.parser");
|
|
5
|
+
Object.defineProperty(exports, "SwaggerParser", { enumerable: true, get: function () { return swagger_parser_1.SwaggerParser; } });
|
|
6
|
+
var decorator_parser_1 = require("./decorator.parser");
|
|
7
|
+
Object.defineProperty(exports, "DecoratorParser", { enumerable: true, get: function () { return decorator_parser_1.DecoratorParser; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ApiCollection, SwaggerDocument } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Parser for Swagger/OpenAPI specification files
|
|
4
|
+
*/
|
|
5
|
+
export declare class SwaggerParser {
|
|
6
|
+
/**
|
|
7
|
+
* Parse a Swagger/OpenAPI file and return an ApiCollection
|
|
8
|
+
*/
|
|
9
|
+
parse(filePath: string): Promise<ApiCollection>;
|
|
10
|
+
/**
|
|
11
|
+
* Parse Swagger document from URL
|
|
12
|
+
*/
|
|
13
|
+
parseFromUrl(url: string): Promise<ApiCollection>;
|
|
14
|
+
/**
|
|
15
|
+
* Parse Swagger document from object
|
|
16
|
+
*/
|
|
17
|
+
parseFromObject(swagger: SwaggerDocument): ApiCollection;
|
|
18
|
+
private convertToApiCollection;
|
|
19
|
+
private extractBaseUrl;
|
|
20
|
+
private extractGroups;
|
|
21
|
+
private convertOperation;
|
|
22
|
+
private convertParameter;
|
|
23
|
+
private extractRequestBody;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=swagger.parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.parser.d.ts","sourceRoot":"","sources":["../../src/parsers/swagger.parser.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EAOb,eAAe,EAIhB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmBrD;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IASvD;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa;IAIxD,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,aAAa;IAyDrB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;CA8B3B"}
|