@foal/cli
Version:
CLI tool for FoalTS
54 lines (53 loc) • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateControllerCommandService = void 0;
// std
const path_1 = require("path");
const utils_1 = require("../utils");
/**
* Service for creating a new controller file.
*/
class CreateControllerCommandService {
generator;
constructor(generator) {
this.generator = generator;
}
/**
* Create a new controller file.
*
* @param {string} name - The name of the controller
* @param {boolean} register - Whether to register the controller in app.controller.ts
* @returns {void}
*/
run({ name, register }) {
let root = '';
if (this.generator.exists('src/app/controllers')) {
root = 'src/app/controllers';
}
else if (this.generator.exists('controllers')) {
root = 'controllers';
}
const names = (0, utils_1.getNames)((0, path_1.basename)(name));
const subdir = (0, path_1.dirname)(name);
const parentControllerPath = `${subdir === '.' ? 'app' : (0, path_1.basename)(subdir)}.controller.ts`;
const fileName = `${names.kebabName}.controller.ts`;
const specFileName = `${names.kebabName}.controller.spec.ts`;
const className = `${names.upperFirstCamelName}Controller`;
this.generator
.cd(root)
.ensureDir(subdir)
.cd(subdir)
.render('controller/controller.empty.ts', fileName, names)
.render('controller/controller.spec.empty.ts', specFileName, names)
.ensureFile('index.ts')
.addNamedExportIn('index.ts', className, `./${names.kebabName}.controller`);
if (register) {
this.generator
.cd('..')
.addOrExtendNamedImportIn(parentControllerPath, 'controller', '@foal/core', { logs: false })
.addOrExtendNamedImportIn(parentControllerPath, className, `./${subdir === '.' ? 'controllers' : (0, path_1.basename)(subdir)}`, { logs: false })
.addOrExtendClassArrayPropertyIn(parentControllerPath, 'subControllers', `controller('/${names.kebabName}', ${className})`);
}
}
}
exports.CreateControllerCommandService = CreateControllerCommandService;