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.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +334 -0
  3. package/dist/cli/index.d.ts +3 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +234 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/generators/index.d.ts +3 -0
  8. package/dist/generators/index.d.ts.map +1 -0
  9. package/dist/generators/index.js +8 -0
  10. package/dist/generators/index.js.map +1 -0
  11. package/dist/generators/insomnia.generator.d.ts +24 -0
  12. package/dist/generators/insomnia.generator.d.ts.map +1 -0
  13. package/dist/generators/insomnia.generator.js +276 -0
  14. package/dist/generators/insomnia.generator.js.map +1 -0
  15. package/dist/generators/postman.generator.d.ts +22 -0
  16. package/dist/generators/postman.generator.d.ts.map +1 -0
  17. package/dist/generators/postman.generator.js +299 -0
  18. package/dist/generators/postman.generator.js.map +1 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +30 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/parsers/decorator.parser.d.ts +20 -0
  24. package/dist/parsers/decorator.parser.d.ts.map +1 -0
  25. package/dist/parsers/decorator.parser.js +396 -0
  26. package/dist/parsers/decorator.parser.js.map +1 -0
  27. package/dist/parsers/index.d.ts +3 -0
  28. package/dist/parsers/index.d.ts.map +1 -0
  29. package/dist/parsers/index.js +8 -0
  30. package/dist/parsers/index.js.map +1 -0
  31. package/dist/parsers/swagger.parser.d.ts +25 -0
  32. package/dist/parsers/swagger.parser.d.ts.map +1 -0
  33. package/dist/parsers/swagger.parser.js +237 -0
  34. package/dist/parsers/swagger.parser.js.map +1 -0
  35. package/dist/types/index.d.ts +187 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/index.js +3 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/package.json +73 -0
@@ -0,0 +1,237 @@
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.SwaggerParser = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ /**
40
+ * Parser for Swagger/OpenAPI specification files
41
+ */
42
+ class SwaggerParser {
43
+ /**
44
+ * Parse a Swagger/OpenAPI file and return an ApiCollection
45
+ */
46
+ async parse(filePath) {
47
+ const absolutePath = path.resolve(process.cwd(), filePath);
48
+ if (!fs.existsSync(absolutePath)) {
49
+ throw new Error(`Swagger file not found: ${absolutePath}`);
50
+ }
51
+ const content = fs.readFileSync(absolutePath, 'utf-8');
52
+ let swagger;
53
+ try {
54
+ swagger = JSON.parse(content);
55
+ }
56
+ catch {
57
+ throw new Error('Invalid JSON in Swagger file');
58
+ }
59
+ return this.convertToApiCollection(swagger);
60
+ }
61
+ /**
62
+ * Parse Swagger document from URL
63
+ */
64
+ async parseFromUrl(url) {
65
+ const response = await fetch(url);
66
+ if (!response.ok) {
67
+ throw new Error(`Failed to fetch Swagger from URL: ${response.statusText}`);
68
+ }
69
+ const swagger = (await response.json());
70
+ return this.convertToApiCollection(swagger);
71
+ }
72
+ /**
73
+ * Parse Swagger document from object
74
+ */
75
+ parseFromObject(swagger) {
76
+ return this.convertToApiCollection(swagger);
77
+ }
78
+ convertToApiCollection(swagger) {
79
+ const baseUrl = this.extractBaseUrl(swagger);
80
+ const groups = this.extractGroups(swagger);
81
+ return {
82
+ name: swagger.info.title,
83
+ description: swagger.info.description,
84
+ version: swagger.info.version,
85
+ baseUrl,
86
+ groups,
87
+ variables: [
88
+ {
89
+ key: 'baseUrl',
90
+ value: baseUrl.replace('{{baseUrl}}', 'http://localhost:3000'),
91
+ description: 'Base URL of the API',
92
+ },
93
+ ],
94
+ };
95
+ }
96
+ extractBaseUrl(swagger) {
97
+ // OpenAPI 3.x
98
+ if (swagger.servers && swagger.servers.length > 0) {
99
+ return swagger.servers[0].url;
100
+ }
101
+ // Swagger 2.x
102
+ if (swagger.host) {
103
+ const scheme = swagger.schemes?.[0] || 'https';
104
+ const basePath = swagger.basePath || '';
105
+ return `${scheme}://${swagger.host}${basePath}`;
106
+ }
107
+ return '{{baseUrl}}';
108
+ }
109
+ extractGroups(swagger) {
110
+ const tagGroups = new Map();
111
+ const defaultGroup = [];
112
+ // Process all paths
113
+ for (const [pathStr, pathItem] of Object.entries(swagger.paths)) {
114
+ const methods = [];
115
+ if (pathItem.get)
116
+ methods.push({ method: 'GET', operation: pathItem.get });
117
+ if (pathItem.post)
118
+ methods.push({ method: 'POST', operation: pathItem.post });
119
+ if (pathItem.put)
120
+ methods.push({ method: 'PUT', operation: pathItem.put });
121
+ if (pathItem.patch)
122
+ methods.push({ method: 'PATCH', operation: pathItem.patch });
123
+ if (pathItem.delete)
124
+ methods.push({ method: 'DELETE', operation: pathItem.delete });
125
+ if (pathItem.options)
126
+ methods.push({ method: 'OPTIONS', operation: pathItem.options });
127
+ if (pathItem.head)
128
+ methods.push({ method: 'HEAD', operation: pathItem.head });
129
+ for (const { method, operation } of methods) {
130
+ const endpoint = this.convertOperation(pathStr, method, operation, pathItem);
131
+ if (operation.tags && operation.tags.length > 0) {
132
+ for (const tag of operation.tags) {
133
+ if (!tagGroups.has(tag)) {
134
+ tagGroups.set(tag, []);
135
+ }
136
+ tagGroups.get(tag).push(endpoint);
137
+ }
138
+ }
139
+ else {
140
+ defaultGroup.push(endpoint);
141
+ }
142
+ }
143
+ }
144
+ // Convert to ApiGroup array
145
+ const groups = [];
146
+ // Add tag-based groups with descriptions
147
+ for (const [tagName, endpoints] of tagGroups) {
148
+ const tagInfo = swagger.tags?.find((t) => t.name === tagName);
149
+ groups.push({
150
+ name: tagName,
151
+ description: tagInfo?.description,
152
+ endpoints,
153
+ });
154
+ }
155
+ // Add default group if there are untagged endpoints
156
+ if (defaultGroup.length > 0) {
157
+ groups.push({
158
+ name: 'Default',
159
+ description: 'Untagged endpoints',
160
+ endpoints: defaultGroup,
161
+ });
162
+ }
163
+ return groups;
164
+ }
165
+ convertOperation(pathStr, method, operation, pathItem) {
166
+ // Merge path-level and operation-level parameters
167
+ const allParameters = [...(pathItem.parameters || []), ...(operation.parameters || [])];
168
+ const parameters = allParameters.map((p) => this.convertParameter(p));
169
+ const requestBody = this.extractRequestBody(operation);
170
+ return {
171
+ path: pathStr,
172
+ method,
173
+ summary: operation.summary,
174
+ description: operation.description,
175
+ operationId: operation.operationId,
176
+ tags: operation.tags,
177
+ parameters,
178
+ requestBody,
179
+ responses: operation.responses
180
+ ? Object.fromEntries(Object.entries(operation.responses).map(([code, response]) => [
181
+ code,
182
+ {
183
+ statusCode: code,
184
+ description: response.description,
185
+ contentType: response.content
186
+ ? Object.keys(response.content)[0]
187
+ : 'application/json',
188
+ schema: response.content
189
+ ? Object.values(response.content)[0]?.schema
190
+ : response.schema,
191
+ },
192
+ ]))
193
+ : undefined,
194
+ security: operation.security,
195
+ };
196
+ }
197
+ convertParameter(param) {
198
+ return {
199
+ name: param.name,
200
+ in: param.in,
201
+ required: param.required || false,
202
+ type: param.type || param.schema?.type?.toString() || 'string',
203
+ description: param.description,
204
+ example: param.example,
205
+ schema: param.schema,
206
+ };
207
+ }
208
+ extractRequestBody(operation) {
209
+ // OpenAPI 3.x requestBody
210
+ if (operation.requestBody) {
211
+ const content = operation.requestBody.content;
212
+ if (content) {
213
+ const contentType = Object.keys(content)[0] || 'application/json';
214
+ const mediaType = content[contentType];
215
+ return {
216
+ contentType,
217
+ schema: mediaType?.schema,
218
+ example: mediaType?.example,
219
+ required: operation.requestBody.required,
220
+ };
221
+ }
222
+ }
223
+ // Swagger 2.x body parameter
224
+ const bodyParam = operation.parameters?.find((p) => p.in === 'body');
225
+ if (bodyParam) {
226
+ return {
227
+ contentType: 'application/json',
228
+ schema: bodyParam.schema,
229
+ example: bodyParam.example,
230
+ required: bodyParam.required,
231
+ };
232
+ }
233
+ return undefined;
234
+ }
235
+ }
236
+ exports.SwaggerParser = SwaggerParser;
237
+ //# sourceMappingURL=swagger.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swagger.parser.js","sourceRoot":"","sources":["../../src/parsers/swagger.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * HTTP methods supported
3
+ */
4
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';
5
+ /**
6
+ * Output format for the collection
7
+ */
8
+ export type OutputFormat = 'postman' | 'insomnia';
9
+ /**
10
+ * Source type for endpoint extraction
11
+ */
12
+ export type SourceType = 'swagger' | 'decorators';
13
+ /**
14
+ * Parameter location
15
+ */
16
+ export type ParameterLocation = 'query' | 'path' | 'header' | 'body';
17
+ /**
18
+ * Represents a single API parameter
19
+ */
20
+ export interface ApiParameter {
21
+ name: string;
22
+ in: ParameterLocation;
23
+ required: boolean;
24
+ type: string;
25
+ description?: string;
26
+ example?: unknown;
27
+ schema?: Record<string, unknown>;
28
+ }
29
+ /**
30
+ * Represents a request body
31
+ */
32
+ export interface ApiRequestBody {
33
+ contentType: string;
34
+ schema?: Record<string, unknown>;
35
+ example?: unknown;
36
+ required?: boolean;
37
+ }
38
+ /**
39
+ * Represents a single API endpoint
40
+ */
41
+ export interface ApiEndpoint {
42
+ path: string;
43
+ method: HttpMethod;
44
+ summary?: string;
45
+ description?: string;
46
+ operationId?: string;
47
+ tags?: string[];
48
+ parameters?: ApiParameter[];
49
+ requestBody?: ApiRequestBody;
50
+ responses?: Record<string, ApiResponse>;
51
+ security?: Record<string, string[]>[];
52
+ }
53
+ /**
54
+ * Represents an API response
55
+ */
56
+ export interface ApiResponse {
57
+ statusCode: string;
58
+ description?: string;
59
+ contentType?: string;
60
+ schema?: Record<string, unknown>;
61
+ example?: unknown;
62
+ }
63
+ /**
64
+ * Represents a group of endpoints (usually a controller)
65
+ */
66
+ export interface ApiGroup {
67
+ name: string;
68
+ description?: string;
69
+ endpoints: ApiEndpoint[];
70
+ }
71
+ /**
72
+ * Represents the entire API structure
73
+ */
74
+ export interface ApiCollection {
75
+ name: string;
76
+ description?: string;
77
+ version?: string;
78
+ baseUrl?: string;
79
+ groups: ApiGroup[];
80
+ variables?: CollectionVariable[];
81
+ }
82
+ /**
83
+ * Represents a collection variable
84
+ */
85
+ export interface CollectionVariable {
86
+ key: string;
87
+ value: string;
88
+ type?: string;
89
+ description?: string;
90
+ }
91
+ /**
92
+ * CLI Configuration options
93
+ */
94
+ export interface CliOptions {
95
+ source: SourceType;
96
+ output: OutputFormat;
97
+ swaggerPath?: string;
98
+ srcPath?: string;
99
+ outputPath?: string;
100
+ baseUrl?: string;
101
+ collectionName?: string;
102
+ }
103
+ /**
104
+ * Swagger/OpenAPI document structure (simplified)
105
+ */
106
+ export interface SwaggerDocument {
107
+ openapi?: string;
108
+ swagger?: string;
109
+ info: {
110
+ title: string;
111
+ description?: string;
112
+ version: string;
113
+ };
114
+ servers?: Array<{
115
+ url: string;
116
+ description?: string;
117
+ }>;
118
+ host?: string;
119
+ basePath?: string;
120
+ schemes?: string[];
121
+ paths: Record<string, SwaggerPathItem>;
122
+ tags?: Array<{
123
+ name: string;
124
+ description?: string;
125
+ }>;
126
+ components?: {
127
+ schemas?: Record<string, unknown>;
128
+ securitySchemes?: Record<string, unknown>;
129
+ };
130
+ definitions?: Record<string, unknown>;
131
+ }
132
+ /**
133
+ * Swagger path item
134
+ */
135
+ export interface SwaggerPathItem {
136
+ get?: SwaggerOperation;
137
+ post?: SwaggerOperation;
138
+ put?: SwaggerOperation;
139
+ patch?: SwaggerOperation;
140
+ delete?: SwaggerOperation;
141
+ options?: SwaggerOperation;
142
+ head?: SwaggerOperation;
143
+ parameters?: SwaggerParameter[];
144
+ }
145
+ /**
146
+ * Swagger operation
147
+ */
148
+ export interface SwaggerOperation {
149
+ summary?: string;
150
+ description?: string;
151
+ operationId?: string;
152
+ tags?: string[];
153
+ parameters?: SwaggerParameter[];
154
+ requestBody?: {
155
+ required?: boolean;
156
+ content?: Record<string, {
157
+ schema?: Record<string, unknown>;
158
+ example?: unknown;
159
+ }>;
160
+ };
161
+ responses?: Record<string, SwaggerResponse>;
162
+ security?: Record<string, string[]>[];
163
+ }
164
+ /**
165
+ * Swagger parameter
166
+ */
167
+ export interface SwaggerParameter {
168
+ name: string;
169
+ in: string;
170
+ required?: boolean;
171
+ type?: string;
172
+ schema?: Record<string, unknown>;
173
+ description?: string;
174
+ example?: unknown;
175
+ }
176
+ /**
177
+ * Swagger response
178
+ */
179
+ export interface SwaggerResponse {
180
+ description?: string;
181
+ content?: Record<string, {
182
+ schema?: Record<string, unknown>;
183
+ example?: unknown;
184
+ }>;
185
+ schema?: Record<string, unknown>;
186
+ }
187
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "nestjs-to-collection",
3
+ "version": "1.0.0",
4
+ "description": "Transform NestJS endpoints into Postman and Insomnia collections via CLI",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "nest-to-collection": "dist/cli/index.js",
9
+ "ntc": "dist/cli/index.js"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsc --watch",
14
+ "prepublishOnly": "npm run build",
15
+ "test": "jest",
16
+ "lint": "eslint src --ext .ts",
17
+ "format": "prettier --write \"src/**/*.ts\""
18
+ },
19
+ "keywords": [
20
+ "nestjs",
21
+ "postman",
22
+ "insomnia",
23
+ "collection",
24
+ "api",
25
+ "swagger",
26
+ "openapi",
27
+ "cli",
28
+ "generator"
29
+ ],
30
+ "author": "",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": ""
35
+ },
36
+ "engines": {
37
+ "node": ">=20.0.0"
38
+ },
39
+ "dependencies": {
40
+ "chalk": "^5.3.0",
41
+ "commander": "^12.1.0",
42
+ "glob": "^11.0.0",
43
+ "inquirer": "^9.3.7",
44
+ "ora": "^8.1.0",
45
+ "typescript": "^5.6.3",
46
+ "uuid": "^10.0.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/inquirer": "^9.0.7",
50
+ "@types/node": "^22.7.5",
51
+ "@types/uuid": "^10.0.0",
52
+ "@typescript-eslint/eslint-plugin": "^8.8.1",
53
+ "@typescript-eslint/parser": "^8.8.1",
54
+ "eslint": "^9.12.0",
55
+ "jest": "^29.7.0",
56
+ "prettier": "^3.3.3",
57
+ "ts-jest": "^29.2.5"
58
+ },
59
+ "peerDependencies": {
60
+ "@nestjs/common": ">=10.0.0",
61
+ "@nestjs/swagger": ">=7.0.0"
62
+ },
63
+ "peerDependenciesMeta": {
64
+ "@nestjs/swagger": {
65
+ "optional": true
66
+ }
67
+ },
68
+ "files": [
69
+ "dist",
70
+ "README.md",
71
+ "LICENSE"
72
+ ]
73
+ }