@asad_dev/leo-generator 1.6.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 (38) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/COMMAND_REFERENCE.md +412 -0
  3. package/README.md +486 -0
  4. package/dist/app/modules/imagemodule/imagemodule.constants.js +18 -0
  5. package/dist/app/modules/imagemodule/imagemodule.controller.js +98 -0
  6. package/dist/app/modules/imagemodule/imagemodule.interface.js +2 -0
  7. package/dist/app/modules/imagemodule/imagemodule.model.js +10 -0
  8. package/dist/app/modules/imagemodule/imagemodule.route.js +20 -0
  9. package/dist/app/modules/imagemodule/imagemodule.service.js +137 -0
  10. package/dist/app/modules/imagemodule/imagemodule.validation.js +12 -0
  11. package/dist/app/modules/skiptest/skiptest.controller.js +81 -0
  12. package/dist/app/modules/skiptest/skiptest.route.js +19 -0
  13. package/dist/app/modules/skiptest/skiptest.service.js +129 -0
  14. package/dist/app/modules/skiptest/skiptest.validation.js +12 -0
  15. package/dist/app/modules/testmodule/testmodule.constants.js +18 -0
  16. package/dist/app/modules/testmodule/testmodule.controller.js +81 -0
  17. package/dist/app/modules/testmodule/testmodule.interface.js +2 -0
  18. package/dist/app/modules/testmodule/testmodule.model.js +11 -0
  19. package/dist/app/modules/testmodule/testmodule.route.js +19 -0
  20. package/dist/app/modules/testmodule/testmodule.service.js +129 -0
  21. package/dist/app/modules/testmodule/testmodule.validation.js +14 -0
  22. package/dist/helpers/fileHelper.js +44 -0
  23. package/dist/index.js +586 -0
  24. package/dist/templates/constants.template.js +24 -0
  25. package/dist/templates/controller.template.js +108 -0
  26. package/dist/templates/route.template.js +68 -0
  27. package/dist/templates/service.template.js +184 -0
  28. package/dist/types.js +2 -0
  29. package/dist/utils/documentationUpdater.js +430 -0
  30. package/dist/utils/fieldParser.js +163 -0
  31. package/dist/utils/helperGenerator.js +87 -0
  32. package/dist/utils/interfaceGenerator.js +158 -0
  33. package/dist/utils/modelGenerator.js +140 -0
  34. package/dist/utils/postmanApi.js +113 -0
  35. package/dist/utils/postmanGenerator.js +283 -0
  36. package/dist/utils/swaggerGenerator.js +444 -0
  37. package/dist/utils/validationGenerator.js +170 -0
  38. package/package.json +58 -0
@@ -0,0 +1,283 @@
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.generatePostmanCollection = generatePostmanCollection;
37
+ exports.savePostmanCollection = savePostmanCollection;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ // Helper to generate Pre-request Script
41
+ function generatePreRequestScript(fields, prefix = "") {
42
+ const scriptLines = [];
43
+ fields.forEach(field => {
44
+ var _a, _b, _c;
45
+ if (field.name.toLowerCase() === "_id")
46
+ return;
47
+ const varName = prefix ? `${prefix}_${field.name}` : field.name;
48
+ switch (field.type.toLowerCase()) {
49
+ case "string":
50
+ scriptLines.push(`pm.variables.set("${varName}", "${field.name}_" + Date.now());`);
51
+ break;
52
+ case "number":
53
+ scriptLines.push(`pm.variables.set("${varName}", Math.floor(Math.random() * 100));`);
54
+ break;
55
+ case "boolean":
56
+ scriptLines.push(`pm.variables.set("${varName}", Math.random() < 0.5);`);
57
+ break;
58
+ case "date":
59
+ scriptLines.push(`pm.variables.set("${varName}", new Date().toISOString());`);
60
+ break;
61
+ case "enum":
62
+ if (field.enumValues && field.enumValues.length > 0) {
63
+ const values = JSON.stringify(field.enumValues);
64
+ scriptLines.push(`const ${varName}_values = ${values};`);
65
+ scriptLines.push(`pm.variables.set("${varName}", ${varName}_values[Math.floor(Math.random() * ${varName}_values.length)]);`);
66
+ }
67
+ else {
68
+ scriptLines.push(`pm.variables.set("${varName}", "ENUM_VALUE");`);
69
+ }
70
+ break;
71
+ case "object":
72
+ if ((_a = field.objectProperties) === null || _a === void 0 ? void 0 : _a.length) {
73
+ // Recursive call for nested properties
74
+ const nestedPrefix = varName;
75
+ scriptLines.push(...generatePreRequestScript(field.objectProperties, nestedPrefix));
76
+ }
77
+ break;
78
+ case "array":
79
+ if (((_b = field.ref) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === "object" && ((_c = field.objectProperties) === null || _c === void 0 ? void 0 : _c.length)) {
80
+ // For array of objects, we generate one item's structure
81
+ // This is a simplification but helps with pre-request variable setting
82
+ scriptLines.push(...generatePreRequestScript(field.objectProperties, varName));
83
+ }
84
+ break;
85
+ }
86
+ });
87
+ return scriptLines;
88
+ }
89
+ function generatePostmanCollection(moduleName, fields) {
90
+ const camelCaseName = toCamelCase(moduleName);
91
+ const folderName = camelCaseName.toLowerCase();
92
+ const baseUrl = "{{base_url}}";
93
+ const sampleData = generateSampleData(fields);
94
+ const requests = [
95
+ // Create request
96
+ {
97
+ name: `Create ${camelCaseName}`,
98
+ request: {
99
+ method: "POST",
100
+ header: [
101
+ {
102
+ key: "Content-Type",
103
+ value: "application/json"
104
+ }
105
+ ],
106
+ body: {
107
+ mode: "raw",
108
+ raw: JSON.stringify(sampleData, null, 2),
109
+ options: {
110
+ raw: {
111
+ language: "json"
112
+ }
113
+ }
114
+ },
115
+ url: {
116
+ raw: `${baseUrl}/api/v1/${folderName}`,
117
+ host: ["{{base_url}}"],
118
+ path: ["api", "v1", folderName]
119
+ }
120
+ },
121
+ event: [
122
+ {
123
+ listen: "prerequest",
124
+ script: {
125
+ exec: generatePreRequestScript(fields),
126
+ type: "text/javascript"
127
+ }
128
+ }
129
+ ]
130
+ },
131
+ // Get all request
132
+ {
133
+ name: `Get All ${camelCaseName}s`,
134
+ request: {
135
+ method: "GET",
136
+ header: [],
137
+ url: {
138
+ raw: `${baseUrl}/api/v1/${folderName}`,
139
+ host: ["{{base_url}}"],
140
+ path: ["api", "v1", folderName]
141
+ }
142
+ }
143
+ },
144
+ // Get single request
145
+ {
146
+ name: `Get ${camelCaseName} by ID`,
147
+ request: {
148
+ method: "GET",
149
+ header: [],
150
+ url: {
151
+ raw: `${baseUrl}/api/v1/${folderName}/{{${folderName}_id}}`,
152
+ host: ["{{base_url}}"],
153
+ path: ["api", "v1", folderName, `{{${folderName}_id}}`]
154
+ }
155
+ }
156
+ },
157
+ // Update request
158
+ {
159
+ name: `Update ${camelCaseName}`,
160
+ request: {
161
+ method: "PATCH",
162
+ header: [
163
+ {
164
+ key: "Content-Type",
165
+ value: "application/json"
166
+ }
167
+ ],
168
+ body: {
169
+ mode: "raw",
170
+ raw: JSON.stringify(generateUpdateSampleData(fields), null, 2),
171
+ options: {
172
+ raw: {
173
+ language: "json"
174
+ }
175
+ }
176
+ },
177
+ url: {
178
+ raw: `${baseUrl}/api/v1/${folderName}/{{${folderName}_id}}`,
179
+ host: ["{{base_url}}"],
180
+ path: ["api", "v1", folderName, `{{${folderName}_id}}`]
181
+ }
182
+ },
183
+ event: [
184
+ {
185
+ listen: "prerequest",
186
+ script: {
187
+ exec: generatePreRequestScript(fields),
188
+ type: "text/javascript"
189
+ }
190
+ }
191
+ ]
192
+ },
193
+ // Delete request
194
+ {
195
+ name: `Delete ${camelCaseName}`,
196
+ request: {
197
+ method: "DELETE",
198
+ header: [],
199
+ url: {
200
+ raw: `${baseUrl}/api/v1/${folderName}/{{${folderName}_id}}`,
201
+ host: ["{{base_url}}"],
202
+ path: ["api", "v1", folderName, `{{${folderName}_id}}`]
203
+ }
204
+ }
205
+ }
206
+ ];
207
+ return {
208
+ info: {
209
+ name: `${camelCaseName} API`,
210
+ schema: "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
211
+ },
212
+ item: requests
213
+ };
214
+ }
215
+ function savePostmanCollection(moduleName, collection, outputDir = "postman") {
216
+ const camelCaseName = toCamelCase(moduleName);
217
+ const postmanDir = path.join(process.cwd(), outputDir);
218
+ // Create postman directory if it doesn't exist
219
+ if (!fs.existsSync(postmanDir)) {
220
+ fs.mkdirSync(postmanDir, { recursive: true });
221
+ }
222
+ const filePath = path.join(postmanDir, `${camelCaseName.toLowerCase()}.postman_collection.json`);
223
+ fs.writeFileSync(filePath, JSON.stringify(collection, null, 2));
224
+ console.log(`✅ Postman collection created: ${filePath}`);
225
+ }
226
+ function generateSampleData(fields, prefix = "") {
227
+ const sampleData = {};
228
+ fields.forEach(field => {
229
+ var _a, _b, _c;
230
+ if (field.name.toLowerCase() === "_id")
231
+ return;
232
+ const varName = prefix ? `${prefix}_${field.name}` : field.name;
233
+ switch (field.type.toLowerCase()) {
234
+ case "string":
235
+ case "number":
236
+ case "boolean":
237
+ case "date":
238
+ case "enum":
239
+ case "objectid":
240
+ case "id":
241
+ sampleData[field.name] = `{{${varName}}}`;
242
+ break;
243
+ case "array":
244
+ if (((_a = field.ref) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === "object" && ((_b = field.objectProperties) === null || _b === void 0 ? void 0 : _b.length)) {
245
+ // Array of objects - return one item with variable placeholders
246
+ sampleData[field.name] = [generateSampleData(field.objectProperties, varName)];
247
+ }
248
+ else if (field.arrayItemType) {
249
+ // ... existing logic for scalar arrays ...
250
+ sampleData[field.name] = []; // Placeholder for scalar array for now
251
+ }
252
+ else {
253
+ sampleData[field.name] = [];
254
+ }
255
+ break;
256
+ case "object":
257
+ if ((_c = field.objectProperties) === null || _c === void 0 ? void 0 : _c.length) {
258
+ sampleData[field.name] = generateSampleData(field.objectProperties, varName);
259
+ }
260
+ else {
261
+ sampleData[field.name] = {};
262
+ }
263
+ break;
264
+ default:
265
+ sampleData[field.name] = `{{${varName}}}`;
266
+ }
267
+ });
268
+ return sampleData;
269
+ }
270
+ function generateUpdateSampleData(fields) {
271
+ const sampleData = generateSampleData(fields);
272
+ // For update, we typically only include a few fields
273
+ const updateFields = {};
274
+ const fieldNames = Object.keys(sampleData);
275
+ // Include first 2-3 fields for update example
276
+ fieldNames.slice(0, Math.min(3, fieldNames.length)).forEach(fieldName => {
277
+ updateFields[fieldName] = sampleData[fieldName];
278
+ });
279
+ return updateFields;
280
+ }
281
+ function toCamelCase(str) {
282
+ return str.charAt(0).toUpperCase() + str.slice(1);
283
+ }