foalts2-cli
Version:
CLI tool for FoalTS
61 lines (60 loc) • 3.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRestApi = void 0;
// std
const path_1 = require("path");
// 3p
const safe_1 = require("colors/safe");
// FoalTS
const file_system_1 = require("../../file-system");
const utils_1 = require("../../utils");
function createRestApi({ name, register, auth }) {
auth = auth || false;
const fs = new file_system_1.FileSystem();
if (fs.projectHasDependency('mongodb')) {
throw new file_system_1.ClientError('"foal generate|g rest-api <name>" cannot be used in a MongoDB project.');
}
if (fs.exists('src/app/entities') && fs.exists('src/app/controllers')) {
fs.cd('src/app');
}
else if (!fs.exists('entities') || !fs.exists('controllers')) {
throw new file_system_1.ClientError('Impossible to generate a REST API endpoint. '
+ 'The directories controllers/ and entities/ (or src/app/controllers and src/app/entities) were not found.');
}
const locals = Object.assign(Object.assign({}, utils_1.getNames(path_1.basename(name))), { entitiesPath: `${name.split('/').map(() => '../').join('')}entities` });
const subdir = path_1.dirname(name);
const parentControllerPath = `${subdir === '.' ? 'app' : path_1.basename(subdir)}.controller.ts`;
const entityFileName = `${locals.kebabName}.entity.ts`;
fs
.cd('entities')
.renderOnlyIf(!auth, 'rest-api/entities/entity.ts', entityFileName, locals)
.renderOnlyIf(auth, 'rest-api/entities/entity.auth.ts', entityFileName, locals)
.ensureFile('index.ts')
.addNamedExportIn('index.ts', locals.upperFirstCamelName, `./${locals.kebabName}.entity`)
.cd('..');
const controllerClassName = `${locals.upperFirstCamelName}Controller`;
const controllerFileName = `${locals.kebabName}.controller.ts`;
const controllerSpecFileName = `${locals.kebabName}.controller.spec.ts`;
fs
.cd('controllers')
.ensureDir(subdir)
.cd(subdir)
.renderOnlyIf(!auth, 'rest-api/controllers/controller.ts', controllerFileName, locals)
.renderOnlyIf(auth, 'rest-api/controllers/controller.auth.ts', controllerFileName, locals)
.renderOnlyIf(!auth, 'rest-api/controllers/controller.spec.ts', controllerSpecFileName, locals)
.renderOnlyIf(auth, 'rest-api/controllers/controller.spec.auth.ts', controllerSpecFileName, locals)
.ensureFile('index.ts')
.addNamedExportIn('index.ts', controllerClassName, `./${locals.kebabName}.controller`)
.cd('..');
if (register) {
fs
.addOrExtendNamedImportIn(parentControllerPath, 'controller', '@foal/core', { logs: false })
.addOrExtendNamedImportIn(parentControllerPath, controllerClassName, `./${subdir === '.' ? 'controllers' : path_1.basename(subdir)}`, { logs: false })
.addOrExtendClassArrayPropertyIn(parentControllerPath, 'subControllers', `controller('/${locals.kebabName}s', ${controllerClassName})`);
}
if (process.env.P1Z7kEbSUUPMxF8GqPwD8Gx_FOAL_CLI_TEST !== 'true') {
console.log(`\n${safe_1.underline('Next steps:')} Complete ${locals.upperFirstCamelName} (${locals.kebabName}.entity)`
+ ` and ${locals.camelName}Schema (${locals.kebabName}.controller).`);
}
}
exports.createRestApi = createRestApi;