UNPKG

@avleon/cli

Version:

> **🚧 This project is in active development.** > > It is **not stable** and **not ready** for live environments. > Use **only for testing, experimentation, or internal evaluation**. > > ####❗ Risks of using this in production: > > - 🔄 Breaking

93 lines (92 loc) 4.51 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createController = createController; const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const path_helper_1 = require("./helpers/path-helper"); const promises_1 = __importDefault(require("node:fs/promises")); const file_helper_1 = require("./helpers/file-helper"); const lodash_1 = require("lodash"); function capitalize(str) { if (!str) return ''; return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); } function lower(str) { return str.toLowerCase(); } function exportNamesAndPath(input) { const parts = input.split('/'); const lastPart = parts.pop(); const filePath = parts.length ? parts.join('/') + '/' : '.'; // Normalize base name by removing trailing "Controller" (case-insensitive) const rawName = lastPart.replace(/controller$/i, ''); // Create className in PascalCase + Controller const className = (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(rawName)); // Create fileName in kebab-case + .controller.ts const fileName = `${(0, lodash_1.kebabCase)(rawName)}.controller.ts`; return { className, fileName, filePath }; } const controllersStubs = { basic: path_helper_1.pathHelper.stubPath('controllers/basic-controller.stub'), rest: path_helper_1.pathHelper.stubPath('controllers/basic-controller.stub'), ormRest: path_helper_1.pathHelper.stubPath('controllers/orm-rest-controller.stub') }; async function createController(name, options = { force: false, resource: false, prefix: true, rest: false, model: null, root: null }, p) { if (!name) { throw new Error("Controller name not found. use --name or npx avleon make:controller HomeController"); } // determine stub for generate let stubPath = controllersStubs.basic; if (options.rest) { stubPath = controllersStubs.rest; if (options.model) { stubPath = controllersStubs.ormRest; } } // determine root path for create controller file const rootPath = options.root ? 'src/' + options.root + '/' : 'src/controllers/'; // ensure file create directory exits if (name.split("/").length > 1) { if (!(0, fs_1.existsSync)(path_1.default.join(rootPath, name.split("/").splice(-1, 1).join("/")))) { await promises_1.default.mkdir(path_1.default.join(rootPath, name.replace('/' + file_helper_1.fh.filenameFromPath(name), '')), { recursive: true }); } } // read stub content from stub file const content = await promises_1.default.readFile(stubPath, 'utf8'); const names = (0, file_helper_1.resolveNames)(file_helper_1.fh.filenameFromPath(name), 'Controller'); const className = names.className.replace("Controller", ''); if (options.model) { await createRestService(className, options.model); } let replacedContent = content .replaceAll('{Controller}', className) .replaceAll('{controller}', names.varName); if (options.model) { replacedContent = replacedContent .replaceAll('{Model}', capitalize(options.model)) .replaceAll('{model}', lower(options.model)); } if (!options.prefix) { replacedContent = replacedContent.replace(/@ApiController\s*\(([^)]*)\)/g, '@ApiController'); } await promises_1.default.writeFile(path_1.default.join(rootPath, (0, file_helper_1.getFilePathWithoutName)(name) + "/" + (0, lodash_1.kebabCase)(className) + '.controller.ts'), replacedContent, 'utf8'); console.log("Controller created succssessfully!"); } async function createRestService(name, model) { let stubPath = path_helper_1.pathHelper.stubPath('services/rest-service.stub'); const content = await promises_1.default.readFile(stubPath, 'utf8'); const names = (0, file_helper_1.resolveNames)(file_helper_1.fh.filenameFromPath(name), 'Controller'); let replacedContent = content .replaceAll('{Service}', name); if (model) { replacedContent = replacedContent .replaceAll('{Model}', capitalize(model)) .replaceAll('{model}', lower(model)); } await promises_1.default.writeFile(path_1.default.join('src/services/', (0, lodash_1.kebabCase)(name) + '.service.ts'), replacedContent, 'utf8'); console.log("Service created succssessfully!"); }