@diagramers/cli 1.0.12 → 1.0.14
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/dist/commands/api.d.ts +3 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +46 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/services/api-generator.d.ts +2 -0
- package/dist/services/api-generator.d.ts.map +1 -0
- package/dist/services/api-generator.js +387 -0
- package/dist/services/api-generator.js.map +1 -0
- package/dist/services/project-initializer.d.ts +2 -0
- package/dist/services/project-initializer.d.ts.map +1 -1
- package/dist/services/project-initializer.js +55 -0
- package/dist/services/project-initializer.js.map +1 -1
- package/dist/services/template-processor.d.ts +2 -0
- package/dist/services/template-processor.d.ts.map +1 -0
- package/dist/services/template-processor.js +162 -0
- package/dist/services/template-processor.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/api.ts +42 -0
- package/src/index.ts +4 -0
- package/src/services/api-generator.ts +376 -0
- package/src/services/project-initializer.ts +64 -0
- package/src/services/template-processor.ts +161 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,WAoC1C"}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.apiCommand = apiCommand;
|
7
|
+
const api_generator_1 = require("../services/api-generator");
|
8
|
+
const template_processor_1 = require("../services/template-processor");
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
10
|
+
function apiCommand(program) {
|
11
|
+
const api = program
|
12
|
+
.command('api')
|
13
|
+
.description('API-specific commands for diagramers projects');
|
14
|
+
// Generate module command
|
15
|
+
api
|
16
|
+
.command('generate:module <name>')
|
17
|
+
.description('Generate a new module with entity, schema, service, controller, and routes')
|
18
|
+
.action(async (name) => {
|
19
|
+
try {
|
20
|
+
console.log(chalk_1.default.blue(`🚀 Generating module: ${name}`));
|
21
|
+
await (0, api_generator_1.generateModule)(name);
|
22
|
+
console.log(chalk_1.default.green(`✅ Module '${name}' generated successfully!`));
|
23
|
+
}
|
24
|
+
catch (error) {
|
25
|
+
console.error(chalk_1.default.red(`❌ Error generating module: ${error.message}`));
|
26
|
+
process.exit(1);
|
27
|
+
}
|
28
|
+
});
|
29
|
+
// Process template command
|
30
|
+
api
|
31
|
+
.command('process:template <name>')
|
32
|
+
.description('Process template files for a new project')
|
33
|
+
.action(async (name) => {
|
34
|
+
try {
|
35
|
+
console.log(chalk_1.default.blue(`🔧 Processing template for project: ${name}`));
|
36
|
+
await (0, template_processor_1.processTemplate)(name);
|
37
|
+
console.log(chalk_1.default.green(`✅ Template processing completed for '${name}'!`));
|
38
|
+
}
|
39
|
+
catch (error) {
|
40
|
+
console.error(chalk_1.default.red(`❌ Error processing template: ${error.message}`));
|
41
|
+
process.exit(1);
|
42
|
+
}
|
43
|
+
});
|
44
|
+
return api;
|
45
|
+
}
|
46
|
+
//# sourceMappingURL=api.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":";;;;;AAKA,gCAoCC;AAxCD,6DAA2D;AAC3D,uEAAiE;AACjE,kDAA0B;AAE1B,SAAgB,UAAU,CAAC,OAAgB;IACzC,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,+CAA+C,CAAC,CAAC;IAEhE,0BAA0B;IAC1B,GAAG;SACA,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,4EAA4E,CAAC;SACzF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,MAAM,IAAA,8BAAc,EAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,IAAI,2BAA2B,CAAC,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,2BAA2B;IAC3B,GAAG;SACA,OAAO,CAAC,yBAAyB,CAAC;SAClC,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC,CAAC;YACvE,MAAM,IAAA,oCAAe,EAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wCAAwC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.js
CHANGED
@@ -5,6 +5,7 @@ const commander_1 = require("commander");
|
|
5
5
|
const init_1 = require("./commands/init");
|
6
6
|
const update_1 = require("./commands/update");
|
7
7
|
const extend_1 = require("./commands/extend");
|
8
|
+
const api_1 = require("./commands/api");
|
8
9
|
const program = new commander_1.Command();
|
9
10
|
program
|
10
11
|
.name('diagramers')
|
@@ -14,6 +15,7 @@ program
|
|
14
15
|
(0, init_1.initCommand)(program);
|
15
16
|
(0, update_1.updateCommand)(program);
|
16
17
|
(0, extend_1.extendCommand)(program);
|
18
|
+
(0, api_1.apiCommand)(program);
|
17
19
|
// Add help text
|
18
20
|
program.addHelpText('after', `
|
19
21
|
Examples:
|
@@ -21,6 +23,8 @@ Examples:
|
|
21
23
|
$ diagramers init admin my-admin-dashboard
|
22
24
|
$ diagramers update
|
23
25
|
$ diagramers extend --feature auth
|
26
|
+
$ diagramers api generate:module product
|
27
|
+
$ diagramers api process:template my-api-project
|
24
28
|
`);
|
25
29
|
program.parse();
|
26
30
|
// If no command is provided, show help
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,8CAAkD;AAClD,8CAAkD;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,8CAAkD;AAClD,8CAAkD;AAClD,wCAA4C;AAG5C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,eAAe;AACf,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;AACrB,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;AACvB,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;AACvB,IAAA,gBAAU,EAAC,OAAO,CAAC,CAAC;AAEpB,gBAAgB;AAChB,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE;;;;;;;;CAQ5B,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,uCAAuC;AACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api-generator.d.ts","sourceRoot":"","sources":["../../src/services/api-generator.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CtE"}
|
@@ -0,0 +1,387 @@
|
|
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.generateModule = generateModule;
|
37
|
+
const fs = __importStar(require("fs"));
|
38
|
+
const path = __importStar(require("path"));
|
39
|
+
async function generateModule(moduleName) {
|
40
|
+
// Validate module name
|
41
|
+
if (!moduleName || !/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(moduleName)) {
|
42
|
+
throw new Error('Invalid module name. Use only letters, numbers, hyphens, and underscores. Must start with a letter.');
|
43
|
+
}
|
44
|
+
const moduleNameCapitalized = moduleName.charAt(0).toUpperCase() + moduleName.slice(1);
|
45
|
+
const currentDir = process.cwd();
|
46
|
+
// Check if we're in a diagramers API project
|
47
|
+
const packageJsonPath = path.join(currentDir, 'package.json');
|
48
|
+
if (!fs.existsSync(packageJsonPath)) {
|
49
|
+
throw new Error('package.json not found. Please run this command from a diagramers API project root.');
|
50
|
+
}
|
51
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
52
|
+
if (!packageJson.name?.includes('diagramers') && !packageJson.name?.includes('api')) {
|
53
|
+
throw new Error('This command should be run from a diagramers API project.');
|
54
|
+
}
|
55
|
+
console.log('📝 Creating entity...');
|
56
|
+
const entityContent = generateEntityContent(moduleName, moduleNameCapitalized);
|
57
|
+
fs.writeFileSync(path.join(currentDir, 'src/entities', `${moduleName}.ts`), entityContent);
|
58
|
+
console.log('📋 Creating schema...');
|
59
|
+
const schemaContent = generateSchemaContent(moduleName, moduleNameCapitalized);
|
60
|
+
fs.writeFileSync(path.join(currentDir, 'src/schemas', `${moduleName}.ts`), schemaContent);
|
61
|
+
console.log('🔧 Creating service...');
|
62
|
+
const serviceContent = generateServiceContent(moduleName, moduleNameCapitalized);
|
63
|
+
fs.writeFileSync(path.join(currentDir, 'src/services', `${moduleName}-service.ts`), serviceContent);
|
64
|
+
console.log('🎮 Creating controller...');
|
65
|
+
const controllerContent = generateControllerContent(moduleName, moduleNameCapitalized);
|
66
|
+
fs.writeFileSync(path.join(currentDir, 'src/controllers', `${moduleName}-controller.ts`), controllerContent);
|
67
|
+
console.log('🛣️ Creating routes...');
|
68
|
+
const routesContent = generateRoutesContent(moduleName, moduleNameCapitalized);
|
69
|
+
fs.writeFileSync(path.join(currentDir, 'src/routes', `${moduleName}-routes.ts`), routesContent);
|
70
|
+
// Update dbcontext to include the new entity
|
71
|
+
updateDbContext(currentDir, moduleName, moduleNameCapitalized);
|
72
|
+
// Update routes index to include the new routes
|
73
|
+
updateRoutesIndex(currentDir, moduleName);
|
74
|
+
}
|
75
|
+
function generateEntityContent(moduleName, moduleNameCapitalized) {
|
76
|
+
return `import * as mongoose from 'mongoose';
|
77
|
+
import { ObjectId } from "bson";
|
78
|
+
|
79
|
+
export interface I${moduleNameCapitalized} extends mongoose.Document {
|
80
|
+
_id: ObjectId,
|
81
|
+
name: string,
|
82
|
+
description?: string,
|
83
|
+
status: number,
|
84
|
+
createdAt: Date,
|
85
|
+
updatedAt: Date
|
86
|
+
}`;
|
87
|
+
}
|
88
|
+
function generateSchemaContent(moduleName, moduleNameCapitalized) {
|
89
|
+
return `import * as mongoose from 'mongoose';
|
90
|
+
import { I${moduleNameCapitalized} } from '../entities/${moduleName}';
|
91
|
+
|
92
|
+
export const ${moduleName}Schema = new mongoose.Schema(
|
93
|
+
{
|
94
|
+
name: {
|
95
|
+
type: mongoose.SchemaTypes.String,
|
96
|
+
required: true,
|
97
|
+
},
|
98
|
+
description: {
|
99
|
+
type: mongoose.SchemaTypes.String,
|
100
|
+
required: false,
|
101
|
+
},
|
102
|
+
status: {
|
103
|
+
type: mongoose.SchemaTypes.Number,
|
104
|
+
default: 1,
|
105
|
+
}
|
106
|
+
},
|
107
|
+
{ timestamps: true, suppressReservedKeysWarning: true },
|
108
|
+
);
|
109
|
+
|
110
|
+
export const ${moduleNameCapitalized}Entity = mongoose.model<I${moduleNameCapitalized}>('${moduleName}', ${moduleName}Schema);`;
|
111
|
+
}
|
112
|
+
function generateServiceContent(moduleName, moduleNameCapitalized) {
|
113
|
+
return `import { ObjectId } from "bson";
|
114
|
+
import dbcontext from "../helpers/dbcontext";
|
115
|
+
import { ResponseCode } from "../helpers/enums";
|
116
|
+
import { Result } from "../helpers/result";
|
117
|
+
import { ${moduleNameCapitalized}Entity } from "../schemas/${moduleName}";
|
118
|
+
|
119
|
+
export class ${moduleNameCapitalized}Service {
|
120
|
+
result: Result;
|
121
|
+
className = '${moduleNameCapitalized}Service';
|
122
|
+
|
123
|
+
constructor(result: Result) {
|
124
|
+
this.result = result;
|
125
|
+
}
|
126
|
+
|
127
|
+
async getAll(): Promise<Result> {
|
128
|
+
try {
|
129
|
+
const ${moduleName}s = await dbcontext.${moduleNameCapitalized}Entity.find({ status: 1 });
|
130
|
+
this.result.Data = ${moduleName}s;
|
131
|
+
this.result.Status = ResponseCode.Ok;
|
132
|
+
return this.result;
|
133
|
+
} catch (ex) {
|
134
|
+
this.result.addException(this.className, 'GetAll', ex);
|
135
|
+
return this.result;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
async getById(id: string): Promise<Result> {
|
140
|
+
try {
|
141
|
+
const ${moduleName} = await dbcontext.${moduleNameCapitalized}Entity.findById(id);
|
142
|
+
if (${moduleName}) {
|
143
|
+
this.result.Data = ${moduleName};
|
144
|
+
this.result.Status = ResponseCode.Ok;
|
145
|
+
} else {
|
146
|
+
this.result.Status = ResponseCode.NotExist;
|
147
|
+
}
|
148
|
+
return this.result;
|
149
|
+
} catch (ex) {
|
150
|
+
this.result.addException(this.className, 'GetById', ex);
|
151
|
+
return this.result;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
async create(${moduleName}Data: any): Promise<Result> {
|
156
|
+
try {
|
157
|
+
const ${moduleName}Entity = new ${moduleNameCapitalized}Entity({
|
158
|
+
_id: new ObjectId(),
|
159
|
+
...${moduleName}Data,
|
160
|
+
status: 1
|
161
|
+
});
|
162
|
+
const created${moduleNameCapitalized} = await dbcontext.${moduleNameCapitalized}Entity.create(${moduleName}Entity);
|
163
|
+
if (created${moduleNameCapitalized}) {
|
164
|
+
this.result.Data = created${moduleNameCapitalized};
|
165
|
+
this.result.Status = ResponseCode.Ok;
|
166
|
+
} else {
|
167
|
+
this.result.Status = ResponseCode.Error;
|
168
|
+
this.result.Errors.push('Failed to create ${moduleName}');
|
169
|
+
}
|
170
|
+
return this.result;
|
171
|
+
} catch (ex) {
|
172
|
+
this.result.addException(this.className, 'Create', ex);
|
173
|
+
return this.result;
|
174
|
+
}
|
175
|
+
}
|
176
|
+
|
177
|
+
async update(id: string, ${moduleName}Data: any): Promise<Result> {
|
178
|
+
try {
|
179
|
+
const updated${moduleNameCapitalized} = await dbcontext.${moduleNameCapitalized}Entity.findByIdAndUpdate(
|
180
|
+
id,
|
181
|
+
{ ...${moduleName}Data },
|
182
|
+
{ new: true }
|
183
|
+
);
|
184
|
+
if (updated${moduleNameCapitalized}) {
|
185
|
+
this.result.Data = updated${moduleNameCapitalized};
|
186
|
+
this.result.Status = ResponseCode.Ok;
|
187
|
+
} else {
|
188
|
+
this.result.Status = ResponseCode.NotExist;
|
189
|
+
}
|
190
|
+
return this.result;
|
191
|
+
} catch (ex) {
|
192
|
+
this.result.addException(this.className, 'Update', ex);
|
193
|
+
return this.result;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
async delete(id: string): Promise<Result> {
|
198
|
+
try {
|
199
|
+
const deleted${moduleNameCapitalized} = await dbcontext.${moduleNameCapitalized}Entity.findByIdAndUpdate(
|
200
|
+
id,
|
201
|
+
{ status: 0 },
|
202
|
+
{ new: true }
|
203
|
+
);
|
204
|
+
if (deleted${moduleNameCapitalized}) {
|
205
|
+
this.result.Data = deleted${moduleNameCapitalized};
|
206
|
+
this.result.Status = ResponseCode.Ok;
|
207
|
+
} else {
|
208
|
+
this.result.Status = ResponseCode.NotExist;
|
209
|
+
}
|
210
|
+
return this.result;
|
211
|
+
} catch (ex) {
|
212
|
+
this.result.addException(this.className, 'Delete', ex);
|
213
|
+
return this.result;
|
214
|
+
}
|
215
|
+
}
|
216
|
+
}`;
|
217
|
+
}
|
218
|
+
function generateControllerContent(moduleName, moduleNameCapitalized) {
|
219
|
+
return `import { AuditMessageType, ResponseCode } from "../helpers/enums";
|
220
|
+
import handleResponse from "../helpers/handle-response";
|
221
|
+
import { Result } from "../helpers/result";
|
222
|
+
import { ${moduleNameCapitalized}Service } from "../services/${moduleName}-service";
|
223
|
+
|
224
|
+
export default class ${moduleNameCapitalized}Controller {
|
225
|
+
|
226
|
+
async getAll(req, res) {
|
227
|
+
const result = res.locals.result;
|
228
|
+
try {
|
229
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'getAll', 'Started');
|
230
|
+
const ${moduleName}Service = new ${moduleNameCapitalized}Service(result);
|
231
|
+
const serviceResult = await ${moduleName}Service.getAll();
|
232
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'getAll', 'Finished');
|
233
|
+
return handleResponse(req, res, serviceResult);
|
234
|
+
} catch (ex) {
|
235
|
+
result.addException(req.baseUrl, 'getAll', ex);
|
236
|
+
return handleResponse(req, res, result);
|
237
|
+
}
|
238
|
+
}
|
239
|
+
|
240
|
+
async getById(req, res) {
|
241
|
+
const result = res.locals.result;
|
242
|
+
try {
|
243
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'getById', 'Started');
|
244
|
+
const ${moduleName}Service = new ${moduleNameCapitalized}Service(result);
|
245
|
+
const serviceResult = await ${moduleName}Service.getById(req.params.id);
|
246
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'getById', 'Finished');
|
247
|
+
return handleResponse(req, res, serviceResult);
|
248
|
+
} catch (ex) {
|
249
|
+
result.addException(req.baseUrl, 'getById', ex);
|
250
|
+
return handleResponse(req, res, result);
|
251
|
+
}
|
252
|
+
}
|
253
|
+
|
254
|
+
async create(req, res) {
|
255
|
+
const result = res.locals.result;
|
256
|
+
try {
|
257
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'create', 'Started');
|
258
|
+
const ${moduleName}Service = new ${moduleNameCapitalized}Service(result);
|
259
|
+
const serviceResult = await ${moduleName}Service.create(req.body);
|
260
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'create', 'Finished');
|
261
|
+
return handleResponse(req, res, serviceResult);
|
262
|
+
} catch (ex) {
|
263
|
+
result.addException(req.baseUrl, 'create', ex);
|
264
|
+
return handleResponse(req, res, result);
|
265
|
+
}
|
266
|
+
}
|
267
|
+
|
268
|
+
async update(req, res) {
|
269
|
+
const result = res.locals.result;
|
270
|
+
try {
|
271
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'update', 'Started');
|
272
|
+
const ${moduleName}Service = new ${moduleNameCapitalized}Service(result);
|
273
|
+
const serviceResult = await ${moduleName}Service.update(req.params.id, req.body);
|
274
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'update', 'Finished');
|
275
|
+
return handleResponse(req, res, serviceResult);
|
276
|
+
} catch (ex) {
|
277
|
+
result.addException(req.baseUrl, 'update', ex);
|
278
|
+
return handleResponse(req, res, result);
|
279
|
+
}
|
280
|
+
}
|
281
|
+
|
282
|
+
async delete(req, res) {
|
283
|
+
const result = res.locals.result;
|
284
|
+
try {
|
285
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'delete', 'Started');
|
286
|
+
const ${moduleName}Service = new ${moduleNameCapitalized}Service(result);
|
287
|
+
const serviceResult = await ${moduleName}Service.delete(req.params.id);
|
288
|
+
result.addMessage(AuditMessageType.info, req.baseUrl, 'delete', 'Finished');
|
289
|
+
return handleResponse(req, res, serviceResult);
|
290
|
+
} catch (ex) {
|
291
|
+
result.addException(req.baseUrl, 'delete', ex);
|
292
|
+
return handleResponse(req, res, result);
|
293
|
+
}
|
294
|
+
}
|
295
|
+
}`;
|
296
|
+
}
|
297
|
+
function generateRoutesContent(moduleName, moduleNameCapitalized) {
|
298
|
+
return `import express from 'express';
|
299
|
+
import ${moduleNameCapitalized}Controller from '../controllers/${moduleName}-controller';
|
300
|
+
|
301
|
+
const router = express.Router();
|
302
|
+
const ${moduleName}Controller = new ${moduleNameCapitalized}Controller();
|
303
|
+
|
304
|
+
// GET /api/${moduleName}s
|
305
|
+
router.get('/', ${moduleName}Controller.getAll.bind(${moduleName}Controller));
|
306
|
+
|
307
|
+
// GET /api/${moduleName}s/:id
|
308
|
+
router.get('/:id', ${moduleName}Controller.getById.bind(${moduleName}Controller));
|
309
|
+
|
310
|
+
// POST /api/${moduleName}s
|
311
|
+
router.post('/', ${moduleName}Controller.create.bind(${moduleName}Controller));
|
312
|
+
|
313
|
+
// PUT /api/${moduleName}s/:id
|
314
|
+
router.put('/:id', ${moduleName}Controller.update.bind(${moduleName}Controller));
|
315
|
+
|
316
|
+
// DELETE /api/${moduleName}s/:id
|
317
|
+
router.delete('/:id', ${moduleName}Controller.delete.bind(${moduleName}Controller));
|
318
|
+
|
319
|
+
export default router;`;
|
320
|
+
}
|
321
|
+
function updateDbContext(currentDir, moduleName, moduleNameCapitalized) {
|
322
|
+
const dbcontextPath = path.join(currentDir, 'src/helpers/dbcontext.ts');
|
323
|
+
if (!fs.existsSync(dbcontextPath)) {
|
324
|
+
console.log('⚠️ dbcontext.ts not found, skipping dbcontext update');
|
325
|
+
return;
|
326
|
+
}
|
327
|
+
let dbcontextContent = fs.readFileSync(dbcontextPath, 'utf8');
|
328
|
+
// Add import
|
329
|
+
const importStatement = `import { ${moduleNameCapitalized}Entity } from '../schemas/${moduleName}';`;
|
330
|
+
if (!dbcontextContent.includes(importStatement)) {
|
331
|
+
// Find the last import statement and add after it
|
332
|
+
const importRegex = /import.*from.*['"];?\s*$/gm;
|
333
|
+
const matches = [...dbcontextContent.matchAll(importRegex)];
|
334
|
+
if (matches.length > 0) {
|
335
|
+
const lastImport = matches[matches.length - 1];
|
336
|
+
const insertIndex = lastImport.index + lastImport[0].length;
|
337
|
+
dbcontextContent = dbcontextContent.slice(0, insertIndex) + '\n' + importStatement + dbcontextContent.slice(insertIndex);
|
338
|
+
}
|
339
|
+
}
|
340
|
+
// Add to dbcontext object
|
341
|
+
const dbcontextObjectRegex = /export\s+default\s*\{([^}]*)\}/s;
|
342
|
+
const match = dbcontextContent.match(dbcontextObjectRegex);
|
343
|
+
if (match) {
|
344
|
+
const objectContent = match[1];
|
345
|
+
if (!objectContent.includes(`${moduleNameCapitalized}Entity`)) {
|
346
|
+
const newObjectContent = objectContent.trim() + `,\n ${moduleNameCapitalized}Entity`;
|
347
|
+
dbcontextContent = dbcontextContent.replace(dbcontextObjectRegex, `export default {$1${newObjectContent}\n}`);
|
348
|
+
}
|
349
|
+
}
|
350
|
+
fs.writeFileSync(dbcontextPath, dbcontextContent);
|
351
|
+
console.log('📊 Updated dbcontext.ts');
|
352
|
+
}
|
353
|
+
function updateRoutesIndex(currentDir, moduleName) {
|
354
|
+
const routesIndexPath = path.join(currentDir, 'src/routes/index.ts');
|
355
|
+
if (!fs.existsSync(routesIndexPath)) {
|
356
|
+
console.log('⚠️ routes/index.ts not found, skipping routes index update');
|
357
|
+
return;
|
358
|
+
}
|
359
|
+
let routesContent = fs.readFileSync(routesIndexPath, 'utf8');
|
360
|
+
// Add import
|
361
|
+
const importStatement = `import ${moduleName}Routes from './${moduleName}-routes';`;
|
362
|
+
if (!routesContent.includes(importStatement)) {
|
363
|
+
// Find the last import statement and add after it
|
364
|
+
const importRegex = /import.*from.*['"];?\s*$/gm;
|
365
|
+
const matches = [...routesContent.matchAll(importRegex)];
|
366
|
+
if (matches.length > 0) {
|
367
|
+
const lastImport = matches[matches.length - 1];
|
368
|
+
const insertIndex = lastImport.index + lastImport[0].length;
|
369
|
+
routesContent = routesContent.slice(0, insertIndex) + '\n' + importStatement + routesContent.slice(insertIndex);
|
370
|
+
}
|
371
|
+
}
|
372
|
+
// Add route registration
|
373
|
+
const routeRegistration = `app.use('/api/${moduleName}s', ${moduleName}Routes);`;
|
374
|
+
if (!routesContent.includes(routeRegistration)) {
|
375
|
+
// Find where routes are registered (usually after imports)
|
376
|
+
const routeRegex = /app\.use\('\/api\/.*',.*\);?\s*$/gm;
|
377
|
+
const matches = [...routesContent.matchAll(routeRegex)];
|
378
|
+
if (matches.length > 0) {
|
379
|
+
const lastRoute = matches[matches.length - 1];
|
380
|
+
const insertIndex = lastRoute.index + lastRoute[0].length;
|
381
|
+
routesContent = routesContent.slice(0, insertIndex) + '\n' + routeRegistration + routesContent.slice(insertIndex);
|
382
|
+
}
|
383
|
+
}
|
384
|
+
fs.writeFileSync(routesIndexPath, routesContent);
|
385
|
+
console.log('🛣️ Updated routes/index.ts');
|
386
|
+
}
|
387
|
+
//# sourceMappingURL=api-generator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api-generator.js","sourceRoot":"","sources":["../../src/services/api-generator.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"project-initializer.d.ts","sourceRoot":"","sources":["../../src/services/project-initializer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,
|
1
|
+
{"version":3,"file":"project-initializer.d.ts","sourceRoot":"","sources":["../../src/services/project-initializer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CASnB;;IAMI,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAuC5D,sBAAsB;YAetB,iBAAiB;YAwCjB,OAAO;YAcP,iBAAiB;YA8BjB,eAAe;YAyDf,YAAY;YAsEZ,qBAAqB;YAoBrB,eAAe;CAsB9B"}
|
@@ -45,7 +45,9 @@ const child_process_1 = require("child_process");
|
|
45
45
|
class ProjectInitializer {
|
46
46
|
constructor() {
|
47
47
|
this.templateFiles = [
|
48
|
+
'scripts',
|
48
49
|
'src/**/*',
|
50
|
+
'scripts/**/*',
|
49
51
|
'package.json',
|
50
52
|
'tsconfig.json',
|
51
53
|
'webpack.config.js',
|
@@ -73,6 +75,10 @@ class ProjectInitializer {
|
|
73
75
|
await this.createGitignore(projectPath);
|
74
76
|
// Create README
|
75
77
|
await this.createReadme(projectPath, projectName, templateType);
|
78
|
+
// Make scripts executable
|
79
|
+
await this.makeScriptsExecutable(projectPath);
|
80
|
+
// Process template for project name (update database names, etc.)
|
81
|
+
await this.processTemplate(projectPath, projectName);
|
76
82
|
// Clean up the temporary installation
|
77
83
|
await this.cleanup(projectPath);
|
78
84
|
console.log(chalk_1.default.green(`✅ Project structure created successfully`));
|
@@ -149,6 +155,17 @@ class ProjectInitializer {
|
|
149
155
|
if (packageJson.bin) {
|
150
156
|
delete packageJson.bin;
|
151
157
|
}
|
158
|
+
// Ensure CLI scripts are included
|
159
|
+
if (!packageJson.scripts) {
|
160
|
+
packageJson.scripts = {};
|
161
|
+
}
|
162
|
+
// Add CLI scripts if they don't exist
|
163
|
+
if (!packageJson.scripts['generate:module']) {
|
164
|
+
packageJson.scripts['generate:module'] = './scripts/generate-module.sh';
|
165
|
+
}
|
166
|
+
if (!packageJson.scripts['cli']) {
|
167
|
+
packageJson.scripts['cli'] = './scripts/cli-commands.sh';
|
168
|
+
}
|
152
169
|
await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
|
153
170
|
}
|
154
171
|
}
|
@@ -275,6 +292,44 @@ MIT
|
|
275
292
|
`;
|
276
293
|
await fs.writeFile(path.join(projectPath, 'README.md'), readmeContent);
|
277
294
|
}
|
295
|
+
async makeScriptsExecutable(projectPath) {
|
296
|
+
const scriptsDir = path.join(projectPath, 'scripts');
|
297
|
+
if (await fs.pathExists(scriptsDir)) {
|
298
|
+
try {
|
299
|
+
const scripts = await fs.readdir(scriptsDir);
|
300
|
+
for (const script of scripts) {
|
301
|
+
if (script.endsWith('.sh')) {
|
302
|
+
const scriptPath = path.join(scriptsDir, script);
|
303
|
+
// Make script executable (chmod 755)
|
304
|
+
await fs.chmod(scriptPath, 0o755);
|
305
|
+
console.log(chalk_1.default.blue(`🔧 Made executable: ${script}`));
|
306
|
+
}
|
307
|
+
}
|
308
|
+
}
|
309
|
+
catch (error) {
|
310
|
+
console.log(chalk_1.default.yellow(`⚠️ Warning: Could not make scripts executable: ${error.message}`));
|
311
|
+
}
|
312
|
+
}
|
313
|
+
}
|
314
|
+
async processTemplate(projectPath, projectName) {
|
315
|
+
try {
|
316
|
+
console.log(chalk_1.default.blue(`🔧 Processing template for project: ${projectName}`));
|
317
|
+
// Change to project directory
|
318
|
+
const originalCwd = process.cwd();
|
319
|
+
process.chdir(projectPath);
|
320
|
+
// Run the template processor
|
321
|
+
(0, child_process_1.execSync)(`npm run cli process:template ${projectName}`, {
|
322
|
+
stdio: 'inherit'
|
323
|
+
});
|
324
|
+
// Change back to original directory
|
325
|
+
process.chdir(originalCwd);
|
326
|
+
console.log(chalk_1.default.green(`✅ Template processed successfully`));
|
327
|
+
}
|
328
|
+
catch (error) {
|
329
|
+
console.log(chalk_1.default.yellow(`⚠️ Warning: Could not process template: ${error.message}`));
|
330
|
+
console.log(chalk_1.default.yellow(` You can manually run: npm run cli process:template ${projectName}`));
|
331
|
+
}
|
332
|
+
}
|
278
333
|
}
|
279
334
|
exports.ProjectInitializer = ProjectInitializer;
|
280
335
|
//# sourceMappingURL=project-initializer.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"project-initializer.js","sourceRoot":"","sources":["../../src/services/project-initializer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;AAC7B,2CAA6B;AAC7B,kDAA0B;AAC1B,iDAAyC;AAOzC,MAAa,kBAAkB;
|
1
|
+
{"version":3,"file":"project-initializer.js","sourceRoot":"","sources":["../../src/services/project-initializer.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"template-processor.d.ts","sourceRoot":"","sources":["../../src/services/template-processor.ts"],"names":[],"mappings":"AAGA,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHxE"}
|