UNPKG

@tsclean/scaffold

Version:

This CLI creates an initial structure of a project based on clean architecture.

85 lines (83 loc) 3.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CommandCreateInterfaceResource = void 0; const ora_1 = __importDefault(require("ora")); const paths_1 = require("../utils/paths"); const emojis_1 = require("../utils/emojis"); const messages_1 = require("../utils/messages"); const CommandUtils_1 = require("./CommandUtils"); const helpers_1 = require("../utils/helpers"); class CommandCreateInterfaceResource { constructor() { this.command = "create:interface-resource"; this.describe = "Generate a new interface resource"; } builder(args) { return args .option("n", { alias: "name", describe: "Name the Interface", demandOption: true }) .option("r", { alias: "resource", describe: "Interface resource", demandOption: true }); } async handler(args) { let spinner; let basePath; let fileName; let path; let fileExists; try { const fileContent = CommandCreateInterfaceResource.getTemplateResourceInterface(args.name); setTimeout(() => (spinner = (0, ora_1.default)("Installing...").start()), 1000); CommandUtils_1.CommandUtils.readModelFiles(paths_1.PATHS.PATH_MODELS_ENTITY(), args.name); basePath = `${process.cwd()}/src/domain/entities/contracts`; fileName = `${args.name}-resource-repository.ts`; path = `${basePath}/${fileName}`; fileExists = await CommandUtils_1.CommandUtils.fileExists(path); if (fileExists) throw messages_1.MESSAGES.FILE_EXISTS(path); await CommandUtils_1.CommandUtils.createFile(path, fileContent); setTimeout(() => { spinner.succeed("Installation completed"); spinner.stopAndPersist({ symbol: emojis_1.EMOJIS.ROCKET, text: messages_1.MESSAGES.FILE_SUCCESS("Interface", path) }); }, 1000 * 5); } catch (error) { setTimeout(() => (spinner.fail("Installation fail"), (0, helpers_1.errorMessage)(error, "interface")), 2000); } } /** * Get contents for resource interface * @param param nombre del recurso, puede contener guiones * @protected */ static getTemplateResourceInterface(param) { const namePascal = CommandUtils_1.CommandUtils.capitalizeString(param .split("-") .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join("")); const nameSnakeUpper = param.replace(/-/g, "_").toUpperCase(); return `import { Add${namePascal}Params, ${namePascal}Entity } from "@/domain/entities/${param}"; export const ${nameSnakeUpper}_RESOURCE_REPOSITORY = "${nameSnakeUpper}_RESOURCE_REPOSITORY"; export interface I${namePascal}ResourceRepository { findAll: () => Promise<${namePascal}Entity[]>; save: (data: Add${namePascal}Params) => Promise<${namePascal}Entity>; findById: (id: number) => Promise<${namePascal}Entity>; update: (id: number, data: any) => Promise<boolean | undefined>; } `; } } exports.CommandCreateInterfaceResource = CommandCreateInterfaceResource; //# sourceMappingURL=CommandCreateInterfaceResource.js.map