@avleon/cli 0.0.47 → 0.4.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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.js +10 -0
  4. package/dist/commands/build.d.ts +11 -0
  5. package/dist/commands/build.js +65 -0
  6. package/dist/commands/doctor.d.ts +10 -0
  7. package/dist/commands/doctor.js +96 -0
  8. package/dist/commands/new.d.ts +19 -0
  9. package/dist/commands/new.js +306 -0
  10. package/dist/commands/route-list.d.ts +19 -0
  11. package/dist/commands/route-list.js +160 -0
  12. package/dist/commands/serve.d.ts +17 -0
  13. package/dist/commands/serve.js +238 -0
  14. package/dist/commands/start.d.ts +10 -0
  15. package/dist/commands/start.js +43 -0
  16. package/dist/compiler.d.ts +24 -0
  17. package/dist/compiler.js +83 -0
  18. package/dist/errors.d.ts +8 -0
  19. package/dist/errors.js +16 -0
  20. package/dist/generators/make.d.ts +24 -0
  21. package/dist/generators/make.js +157 -0
  22. package/dist/index.d.ts +17 -0
  23. package/dist/index.js +40 -15
  24. package/dist/program.d.ts +22 -0
  25. package/dist/program.js +178 -0
  26. package/dist/utils/entry.d.ts +15 -0
  27. package/dist/utils/entry.js +55 -0
  28. package/dist/utils/env-types.d.ts +8 -0
  29. package/dist/utils/env-types.js +19 -0
  30. package/dist/utils/log.d.ts +25 -0
  31. package/dist/utils/log.js +39 -0
  32. package/dist/utils/names.d.ts +27 -0
  33. package/dist/utils/names.js +58 -0
  34. package/dist/utils/process.d.ts +18 -0
  35. package/dist/utils/process.js +84 -0
  36. package/dist/utils/project.d.ts +17 -0
  37. package/dist/utils/project.js +91 -0
  38. package/dist/utils/stubs.d.ts +15 -0
  39. package/dist/utils/stubs.js +52 -0
  40. package/dist/utils/tsconfig.d.ts +13 -0
  41. package/dist/utils/tsconfig.js +102 -0
  42. package/package.json +28 -27
  43. package/readme.md +50 -11
  44. package/stubs/config/config.stub +9 -0
  45. package/stubs/controllers/basic-controller.stub +3 -3
  46. package/stubs/controllers/resource-controller.stub +45 -0
  47. package/stubs/controllers/rest-controller.stub +2 -2
  48. package/stubs/dtos/dto.stub +11 -0
  49. package/stubs/middlewares/middleware.stub +9 -0
  50. package/stubs/models/basic-model.stub +2 -2
  51. package/stubs/models/entity-model.stub +6 -8
  52. package/stubs/{app → project}/app-minimal.stub +1 -1
  53. package/stubs/{app/app-controller.stub → project/app.stub} +2 -7
  54. package/stubs/project/env.stub +3 -0
  55. package/stubs/project/gitignore.stub +5 -0
  56. package/stubs/project/home.controller.spec.stub +19 -0
  57. package/stubs/project/home.controller.stub +12 -0
  58. package/stubs/project/home.service.stub +8 -0
  59. package/stubs/{config.stub → project/openapi.config.stub} +4 -4
  60. package/stubs/project/readme.stub +26 -0
  61. package/stubs/{serve.stub → project/serve.stub} +1 -1
  62. package/stubs/project/tsconfig.build.stub +4 -0
  63. package/stubs/project/tsconfig.stub +18 -0
  64. package/stubs/project/vitest-e2e.config.stub +10 -0
  65. package/stubs/project/vitest.config.stub +17 -0
  66. package/stubs/services/basic-service.stub +1 -1
  67. package/stubs/services/orm-rest-service.stub +15 -14
  68. package/stubs/services/rest-service.stub +9 -9
  69. package/dist/av-cli.js +0 -60
  70. package/dist/avcli.js +0 -26
  71. package/dist/cli.interface.js +0 -2
  72. package/dist/cli.js +0 -332
  73. package/dist/commands.js +0 -63
  74. package/dist/controller.js +0 -96
  75. package/dist/create.js +0 -512
  76. package/dist/helpers/file-helper.js +0 -30
  77. package/dist/helpers/path-helper.js +0 -36
  78. package/dist/paths.js +0 -32
  79. package/dist/scripts/serve.js +0 -290
  80. package/dist/serve.js +0 -311
  81. package/dist/service.js +0 -69
  82. package/stubs/controllers/orm-rest-controller.stub +0 -45
package/dist/cli.js DELETED
@@ -1,332 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- var __importDefault = (this && this.__importDefault) || function (mod) {
37
- return (mod && mod.__esModule) ? mod : { "default": mod };
38
- };
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.iqraCli = iqraCli;
41
- exports.run = run;
42
- const cli_table3_1 = __importDefault(require("cli-table3"));
43
- const path_1 = __importDefault(require("path"));
44
- const promises_1 = __importDefault(require("fs/promises"));
45
- const fs_extra_1 = __importDefault(require("fs-extra"));
46
- const fs_1 = require("fs");
47
- const prettier = __importStar(require("prettier"));
48
- const controller_1 = require("./controller");
49
- const commands_1 = require("./commands");
50
- const child_process_1 = require("child_process");
51
- const create_1 = require("./create");
52
- const service_1 = require("./service");
53
- const path_helper_1 = require("./helpers/path-helper");
54
- const lodash_1 = require("lodash");
55
- function iqraCli() { }
56
- const listedCommands = commands_1.commandList
57
- .flatMap((x) => x.Command)
58
- .concat(commands_1.commandList.flatMap((x) => x.Alias.split(",")))
59
- .flatMap((a) => a.trim())
60
- .concat("build");
61
- /**
62
- * @description Displaying basic info
63
- * @since v0.0.2
64
- * */
65
- async function printLogo() {
66
- try {
67
- const packageInfo = await promises_1.default.readFile(path_1.default.join(__dirname, "../package.json"), "utf8");
68
- const parsedPackInfo = JSON.parse(packageInfo);
69
- console.log(`Name: Avleon CLI`, "\r");
70
- console.log(`Version: ${parsedPackInfo.version}`, "\r");
71
- }
72
- catch (error) {
73
- throw new Error("Can't read packag info");
74
- }
75
- }
76
- async function displayCommandList(info = { logo: true, all: false }) {
77
- if (info.logo) {
78
- await printLogo();
79
- }
80
- console.log("Available commandList:");
81
- if (info.all) {
82
- const table = new cli_table3_1.default({
83
- head: ["Command", "Alias", "Available Options", "Description"],
84
- colWidths: [20, 10, 30, 50],
85
- wrapOnWordBoundary: true,
86
- wordWrap: true,
87
- });
88
- commands_1.commandList.forEach((c) => {
89
- table.push([c.Command, c.Alias, c.Options, c.Description]);
90
- });
91
- console.log(table.toString());
92
- }
93
- else {
94
- const table = new cli_table3_1.default({
95
- head: ["Command", "Alias", "Available Options"],
96
- colWidths: [20, 10, 50],
97
- wrapOnWordBoundary: true,
98
- wordWrap: true,
99
- });
100
- commands_1.commandList.forEach((c) => {
101
- table.push([c.Command, c.Alias, c.Options]);
102
- });
103
- console.log(table.toString());
104
- }
105
- }
106
- async function createModel(name, options = { force: false, orm: false }) {
107
- if (!name) {
108
- throw new Error("Model name not found . use --name or node artisan make:model ModelName");
109
- }
110
- const modelFolderExists = (0, fs_1.existsSync)(path_1.default.join(process.cwd(), "./src/models"));
111
- if (!modelFolderExists) {
112
- await promises_1.default.mkdir(path_1.default.join(process.cwd(), "./src/models"), {
113
- recursive: true,
114
- });
115
- }
116
- const modelName = name.at(0).toUpperCase() + name.slice(1);
117
- const modelExists = (0, fs_1.existsSync)(path_1.default.join(process.cwd(), `./src/models/${modelName.toLowerCase()}.ts`));
118
- if (modelExists && !options.force) {
119
- console.log("Model already exists!", "Use -f or --force to overwrite.\r");
120
- return;
121
- }
122
- const stubPath = path_helper_1.pathHelper.stubPath(options.orm ? "models/entity-model.stub" : "models/basic-model.stub");
123
- const stub = await promises_1.default.readFile(stubPath, "utf8");
124
- const model = stub
125
- .replaceAll("{Model}", modelName)
126
- .replaceAll("{model}", modelName.toLowerCase());
127
- const formatModel = await prettier.format(model, {
128
- singleQuote: true,
129
- singleAttributePerLine: true,
130
- parser: "typescript",
131
- });
132
- await promises_1.default.writeFile(path_1.default.join(process.cwd(), "./src/models/" + modelName.toLowerCase() + ".ts"), formatModel);
133
- console.log("Model created successfully!");
134
- }
135
- async function createMiddleware(name, options = { force: false }) {
136
- if (!name) {
137
- throw new Error("Middleware name not found. Use npx avleon make:middleware MiddlewareName");
138
- }
139
- const baseName = name.replace(/middleware$/i, "");
140
- const className = baseName.at(0).toUpperCase() + baseName.slice(1) + "Middleware";
141
- const fileName = `${baseName.toLowerCase()}.middleware.ts`;
142
- const middlewareDir = path_1.default.join(process.cwd(), "./src/middlewares");
143
- const filePath = path_1.default.join(middlewareDir, fileName);
144
- if ((0, fs_1.existsSync)(filePath) && !options.force) {
145
- console.log("Middleware already exists!", "Use -f or --force to overwrite.\r");
146
- return;
147
- }
148
- if (!(0, fs_1.existsSync)(middlewareDir)) {
149
- await promises_1.default.mkdir(middlewareDir, { recursive: true });
150
- }
151
- const basicMiddleware = `
152
- import { AppMiddleware, AvleonMiddleware, IRequest, IResponse } from '@avleon/core';
153
-
154
- @AppMiddleware
155
- export class ${className} extends AvleonMiddleware {
156
- async invoke(req: IRequest, res?: IResponse) {
157
- // your logic goes here
158
- return req;
159
- }
160
- }
161
- `;
162
- const formatModel = await prettier.format(basicMiddleware, {
163
- singleQuote: true,
164
- singleAttributePerLine: true,
165
- parser: "typescript",
166
- });
167
- await promises_1.default.writeFile(filePath, formatModel);
168
- console.log("Middleware created successfully!");
169
- }
170
- async function createConfig(name, options = { force: false }) {
171
- if (!name) {
172
- throw new Error("Config name not found . use --name or node artisan make:config JwtConfig");
173
- }
174
- const baseName = name.replace(/config$/i, "");
175
- const modelClassName = (0, lodash_1.capitalize)(baseName) + "Config";
176
- const fileName = `${baseName.toLowerCase()}.config.ts`;
177
- const configDir = path_1.default.join(process.cwd(), "./src/config");
178
- const filePath = path_1.default.join(configDir, fileName);
179
- if ((0, fs_1.existsSync)(filePath) && !options.force) {
180
- console.log("Config already exists!", "Use -f or --force to overwrite.\r");
181
- return;
182
- }
183
- if (!(0, fs_1.existsSync)(configDir)) {
184
- await promises_1.default.mkdir(configDir, { recursive: true });
185
- }
186
- const basicMiddleware = `
187
- import { AppConfig, AvleonConfig, Environment } from '@avleon/core';
188
-
189
- @AppConfig
190
- export class ${modelClassName} extends AvleonConfig {
191
- config(env: Environment) {
192
- // config must return the configuration object
193
- return {};
194
- }
195
- }
196
- `;
197
- const formatModel = await prettier.format(basicMiddleware, {
198
- singleQuote: true,
199
- singleAttributePerLine: true,
200
- parser: "typescript",
201
- });
202
- await promises_1.default.writeFile(filePath, formatModel);
203
- console.log("Config created successfully!");
204
- }
205
- async function run() {
206
- try {
207
- const args = process.argv.slice(2);
208
- if (args[0] == "serve") {
209
- require('./serve');
210
- return;
211
- }
212
- if (args.length < 1) {
213
- await displayCommandList({ logo: true, all: false });
214
- }
215
- else {
216
- const cmdList = commands_1.commandList
217
- .flatMap((x) => x.Command)
218
- .concat(...commands_1.commandList.flatMap((f) => f.Alias.split(",").map((s) => s.trim())));
219
- if (!listedCommands.includes(args[0].trim())) {
220
- console.error("Invalid command");
221
- await displayCommandList({ logo: false, all: false });
222
- }
223
- else {
224
- let force = false;
225
- let minimal = false;
226
- if (args.some((x) => x == "-f" || x == "--force")) {
227
- force = true;
228
- }
229
- if (args.some((x) => x == "--minimal" || x == "-m")) {
230
- minimal = true;
231
- }
232
- const flags = { minimal, force };
233
- if (args[0] == "new") {
234
- if (args[1] == undefined) {
235
- throw new Error('Please provide a project name. Ex avleon new example_api');
236
- }
237
- const fname = args[1];
238
- await (0, create_1.createApplication)(fname, flags);
239
- }
240
- if (args[0] == "build") {
241
- process.env.NODE_ENV = "production";
242
- await fs_extra_1.default.remove(path_1.default.join(process.cwd(), "dist"));
243
- (0, child_process_1.execSync)("npx tsc --project tsconfig.build.json", { stdio: "inherit" });
244
- console.log("Build successfully");
245
- }
246
- if (args[0] == "make:model" || args[0] == "m:m") {
247
- const orm = args.some((x) => x == "--orm");
248
- await createModel(args[1], { force, orm });
249
- }
250
- if (args[0] == "make:config" || args[0] == "m:cnf" || args[0] == "m:cfg") {
251
- await createConfig(args[1], { force });
252
- }
253
- if (args[0] == "make:middleware" || args[0] == "m:mlwr" || args[0] == "m:mdlr") {
254
- await createMiddleware(args[1], { force });
255
- }
256
- if (args[0] == "make:controller" || args[0] == "m:c") {
257
- let resource = false;
258
- let rest = false;
259
- let prefix = true;
260
- let root = null;
261
- if (args.some((x) => x == "-r" || x == "--resource" || x == "--rest")) {
262
- resource = true;
263
- rest = true;
264
- }
265
- if (args.some((x) => x == "--base-path")) {
266
- prefix = false;
267
- }
268
- let model = null;
269
- if (args.some((x) => x == "-m" || x == "--model")) {
270
- const index = args.includes("-m")
271
- ? args.indexOf("-m")
272
- : args.indexOf("--model");
273
- if (args[index + 1] == undefined) {
274
- throw new Error("Model not defined");
275
- }
276
- const modelName = args[index + 1];
277
- model = modelName;
278
- }
279
- if (args.some((x) => x == "-rt" || x == "--root")) {
280
- const index = args.includes("-rt")
281
- ? args.indexOf("-rt")
282
- : args.indexOf("--root");
283
- if (args[index + 1] == undefined) {
284
- throw new Error("Root Path not defined");
285
- }
286
- const rootPath = args[index + 1];
287
- root = rootPath;
288
- }
289
- const orm = args.some((x) => x == "--orm");
290
- await (0, controller_1.createController)(args[1], { force, resource, prefix, rest, model, root, orm });
291
- }
292
- if (args[0] == "make:service" || args[0] == "m:s") {
293
- let resource = false;
294
- let rest = false;
295
- let prefix = true;
296
- let root = null;
297
- if (args.some((x) => x == "-r" || x == "--resource" || x == '--rest')) {
298
- resource = true;
299
- rest = true;
300
- }
301
- let model = null;
302
- if (args.some((x) => x == "-m" || x == "--model")) {
303
- const index = args.includes("-m")
304
- ? args.indexOf("-m")
305
- : args.indexOf("--model");
306
- if (args[index + 1] == undefined) {
307
- throw new Error("Model not defined");
308
- }
309
- const modelName = args[index + 1];
310
- model = modelName;
311
- }
312
- if (args.some((x) => x == "-rt" || x == "--root")) {
313
- const index = args.includes("-rt")
314
- ? args.indexOf("-rt")
315
- : args.indexOf("--root");
316
- if (args[index + 1] == undefined) {
317
- throw new Error("Root Path not defined");
318
- }
319
- const rootPath = args[index + 1];
320
- root = rootPath;
321
- }
322
- const orm = args.some((x) => x == "--orm");
323
- await (0, service_1.createService)(args[1], { force, resource, prefix, rest, model, root, orm });
324
- }
325
- }
326
- }
327
- }
328
- catch (error) {
329
- console.log("CLI ERROR:", error);
330
- }
331
- }
332
- run();
package/dist/commands.js DELETED
@@ -1,63 +0,0 @@
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.commandList = void 0;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- exports.commandList = [
9
- {
10
- Command: "new",
11
- Alias: "",
12
- Options: "-m --minimal",
13
- Description: "Create a new application",
14
- },
15
- {
16
- Command: "serve",
17
- Alias: "",
18
- Options: "",
19
- Description: "Start the development server. Compiles src/ on change and restarts the app.",
20
- },
21
- {
22
- Command: "build",
23
- Alias: "",
24
- Options: "",
25
- Description: "Compile the application using tsconfig.build.json",
26
- },
27
- {
28
- Command: "make:model",
29
- Alias: "m:m",
30
- Options: "-f --force, --orm",
31
- Description: "Create a new model. Use -f or --force to overwrite an existing model. Pass --orm to generate a TypeORM entity.",
32
- },
33
- {
34
- Command: "make:controller",
35
- Alias: "m:c",
36
- Options: "-f --force, -r --resource, -m --model, -rt --root, --orm, --base-path",
37
- Description: `Create a new controller. Use -f or --force to overwrite an existing controller.
38
- Pass -r or --resource for a full REST skeleton, and -m or --model to bind it to a model.\n
39
- ${chalk_1.default.blueBright("Note:")} with -m, the matching service is generated in src/services and the
40
- controller delegates to it. Add --orm to back that service with a TypeORM repository.`,
41
- },
42
- {
43
- Command: "make:service",
44
- Alias: "m:s",
45
- Options: "-f --force, -r --resource, -m --model, -rt --root, --orm",
46
- Description: `Create a new service. Use -f or --force to overwrite an existing service.
47
- Pass -r or --resource together with -m or --model for a REST service.\n
48
- ${chalk_1.default.blueBright("Note:")} a resource service uses an in-memory Collection by default.
49
- Add --orm to generate one backed by a TypeORM repository instead.`,
50
- },
51
- {
52
- Command: "make:config",
53
- Alias: "m:cnf",
54
- Options: "-f --force",
55
- Description: "Create a new config class registered with @AppConfig. Use -f or --force to overwrite an existing config.",
56
- },
57
- {
58
- Command: "make:middleware",
59
- Alias: "m:mlwr",
60
- Options: "-f --force",
61
- Description: "Create a new middleware extending AvleonMiddleware. Use -f or --force to overwrite an existing middleware.",
62
- },
63
- ];
@@ -1,96 +0,0 @@
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.createController = createController;
7
- const fs_1 = require("fs");
8
- const path_1 = __importDefault(require("path"));
9
- const path_helper_1 = require("./helpers/path-helper");
10
- const promises_1 = __importDefault(require("node:fs/promises"));
11
- const file_helper_1 = require("./helpers/file-helper");
12
- const lodash_1 = require("lodash");
13
- function capitalize(str) {
14
- if (!str)
15
- return '';
16
- return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
17
- }
18
- function lower(str) {
19
- return str.toLowerCase();
20
- }
21
- function exportNamesAndPath(input) {
22
- const parts = input.split('/');
23
- const lastPart = parts.pop();
24
- const filePath = parts.length ? parts.join('/') + '/' : '.';
25
- // Normalize base name by removing trailing "Controller" (case-insensitive)
26
- const rawName = lastPart.replace(/controller$/i, '');
27
- // Create className in PascalCase + Controller
28
- const className = (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(rawName));
29
- // Create fileName in kebab-case + .controller.ts
30
- const fileName = `${(0, lodash_1.kebabCase)(rawName)}.controller.ts`;
31
- return { className, fileName, filePath };
32
- }
33
- const controllersStubs = {
34
- basic: path_helper_1.pathHelper.stubPath('controllers/basic-controller.stub'),
35
- rest: path_helper_1.pathHelper.stubPath('controllers/rest-controller.stub'),
36
- ormRest: path_helper_1.pathHelper.stubPath('controllers/orm-rest-controller.stub')
37
- };
38
- async function createController(name, options = { force: false, resource: false, prefix: true, rest: false, model: null, root: null, orm: false }, p) {
39
- if (!name) {
40
- throw new Error("Controller name not found. use --name or npx avleon make:controller HomeController");
41
- }
42
- // determine stub for generate
43
- // A model means the controller can delegate to a generated service; without
44
- // one there is nothing to call, so emit the unimplemented REST skeleton.
45
- let stubPath = controllersStubs.basic;
46
- if (options.rest || options.resource) {
47
- stubPath = options.model ? controllersStubs.ormRest : controllersStubs.rest;
48
- }
49
- // determine root path for create controller file
50
- const rootPath = options.root ? 'src/' + options.root + '/' : 'src/controllers/';
51
- // ensure the output directory exists
52
- const outDir = path_1.default.join(rootPath, (0, file_helper_1.getFilePathWithoutName)(name));
53
- if (!(0, fs_1.existsSync)(outDir)) {
54
- await promises_1.default.mkdir(outDir, { recursive: true });
55
- }
56
- // read stub content from stub file
57
- const content = await promises_1.default.readFile(stubPath, 'utf8');
58
- const names = (0, file_helper_1.resolveNames)(file_helper_1.fh.filenameFromPath(name), 'Controller');
59
- const className = names.className.replace("Controller", '');
60
- if (options.model) {
61
- await createRestService(className, options.model, options.orm);
62
- }
63
- let replacedContent = content
64
- .replaceAll('{Controller}', className)
65
- .replaceAll('{controller}', names.varName);
66
- if (options.model) {
67
- replacedContent = replacedContent
68
- .replaceAll('{Model}', capitalize(options.model))
69
- .replaceAll('{model}', lower(options.model));
70
- }
71
- if (!options.prefix) {
72
- replacedContent = replacedContent.replace(/@ApiController\s*\(([^)]*)\)/g, '@ApiController');
73
- }
74
- await promises_1.default.writeFile(path_1.default.join(outDir, (0, lodash_1.kebabCase)(className) + '.controller.ts'), replacedContent, 'utf8');
75
- console.log("Controller created successfully!");
76
- }
77
- async function createRestService(name, model, orm = false) {
78
- const stubPath = path_helper_1.pathHelper.stubPath(orm ? 'services/orm-rest-service.stub' : 'services/rest-service.stub');
79
- const content = await promises_1.default.readFile(stubPath, 'utf8');
80
- // The generated controller imports `{Model}Service` from
81
- // `../services/{model}.service`, so the file must be named after the model.
82
- const serviceName = model ? capitalize(model) : name;
83
- let replacedContent = content
84
- .replaceAll('{Service}', serviceName);
85
- if (model) {
86
- replacedContent = replacedContent
87
- .replaceAll('{Model}', capitalize(model))
88
- .replaceAll('{model}', lower(model));
89
- }
90
- const serviceDir = path_1.default.join('src', 'services');
91
- if (!(0, fs_1.existsSync)(serviceDir)) {
92
- await promises_1.default.mkdir(serviceDir, { recursive: true });
93
- }
94
- await promises_1.default.writeFile(path_1.default.join(serviceDir, lower(serviceName) + '.service.ts'), replacedContent, 'utf8');
95
- console.log("Service created successfully!");
96
- }