@tsclean/scaffold
Version:
This CLI creates an initial structure of a project based on clean architecture.
85 lines (83 loc) • 3.5 kB
JavaScript
;
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