@tsclean/scaffold
Version:
This CLI creates an initial structure of a project based on clean architecture.
104 lines (98 loc) • 4.25 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CommandCreateServiceResource = 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 constants_1 = require("../utils/constants");
const helpers_1 = require("../utils/helpers");
class CommandCreateServiceResource {
constructor() {
this.command = "create:service-resource";
this.describe = "Generate a new service resource";
}
builder(args) {
return args
.option("name", {
alias: "n",
describe: "Name the service",
demandOption: true
})
.option("resource", {
alias: "r",
describe: "Service resource",
demandOption: true
});
}
async handler(args) {
let spinner;
setTimeout(async () => (spinner = (0, ora_1.default)(constants_1.CONSTANTS.INSTALLING).start()), 1000);
const basePath = paths_1.PATHS.PATH_SERVICE_RESOURCE();
const fileService = `${basePath}/${args.name}-service-resource-impl.ts`;
const fileContract = `${process.cwd()}/src/domain/use-cases/${args.name}-service-resource.ts`;
const fileServiceExists = await CommandUtils_1.CommandUtils.fileExists(fileService);
if (fileServiceExists)
throw messages_1.MESSAGES.FILE_EXISTS(fileService);
try {
await CommandUtils_1.CommandUtils.createFile(`${fileContract}`, CommandCreateServiceResource.getServiceResourceInterface(args.name));
await CommandUtils_1.CommandUtils.createFile(`${fileService}`, CommandCreateServiceResource.getServiceResource(args.name));
setTimeout(() => {
spinner.succeed("Installation completed");
spinner.stopAndPersist({
symbol: emojis_1.EMOJIS.ROCKET,
prefixText: messages_1.MESSAGES.REPOSITORY_SUCCESS(fileContract),
text: messages_1.MESSAGES.FILE_SUCCESS("Services resource", fileService)
});
}, 1000 * 5);
}
catch (error) {
setTimeout(() => (spinner.fail("Installation fail"), (0, helpers_1.errorMessage)(error, "service")), 2000);
}
}
static getServiceResourceInterface(param) {
const name = CommandUtils_1.CommandUtils.capitalizeString(param);
const nameTransform = param.replace(/-/g, "_");
const nameRef = nameTransform.toUpperCase();
return `export const ${nameRef}_RESOURCE_SERVICE = "${nameRef}_RESOURCE_SERVICE";
export interface I${name}ResourceService {
findAll: () => Promise<any[]>;
save: (data: any) => Promise<any>;
findById: (id: number) => Promise<any>;
update: (id: number, data: any) => Promise<boolean | undefined>
}
`;
}
static getServiceResource(param) {
const name = CommandUtils_1.CommandUtils.capitalizeString(param);
return `import {Service} from "@tsclean/core";
import {I${name}ResourceService} from "@/domain/use-cases/${param}-service-resource";
@Service()
export class ${name}ServiceImpl implements I${name}ResourceService {
constructor() {
}
// Se debe de tipar la devolución de la promesa
async findAll(): Promise<any[]> {
return Promise.resolve([]);
}
// Se debe de tipar la devolución de la promesa
async findById(id: number): Promise<any> {
return Promise.resolve(undefined);
}
// Se debe de tipar la devolución de la promesa y el input de la data
async save(data: any): Promise<any> {
return Promise.resolve(undefined);
}
// Se debe de tipar el input de la data
async update(id: number, data: any): Promise<boolean | undefined> {
return Promise.resolve(undefined);
}
}`;
}
}
exports.CommandCreateServiceResource = CommandCreateServiceResource;
//# sourceMappingURL=CommandCreateServiceResource.js.map