@avleon/cli
Version:
> **🚧 This project is in active development.** > > It is **not stable** and **not ready** for live environments. > Use **only for testing, experimentation, or internal evaluation**. > > ####❗ Risks of using this in production: > > - 🔄 Breaking
74 lines (73 loc) • 3.53 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createService = createService;
const fs_1 = require("fs");
const path_1 = __importDefault(require("path"));
const path_helper_1 = require("./helpers/path-helper");
const promises_1 = __importDefault(require("node:fs/promises"));
const file_helper_1 = require("./helpers/file-helper");
const lodash_1 = require("lodash");
function capitalize(str) {
if (!str)
return '';
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
}
function lower(str) {
return str.toLowerCase();
}
const servicesStubs = {
basic: path_helper_1.pathHelper.stubPath('services/basic-service.stub'),
rest: path_helper_1.pathHelper.stubPath('services/basic-service.stub'),
ormRest: path_helper_1.pathHelper.stubPath('services/orm-rest-service.stub')
};
async function createService(name, options = { force: false, resource: false, prefix: true, rest: false, model: null, root: null }, p) {
if (!name) {
throw new Error("Service name not found. use --name or npx avleon make:service HomeService");
}
if ((options.rest || options.resource) && !options.model) {
throw new Error("Model not found. Plese ensure you pass --model or -m to create resouce service");
}
// determine stub for generate
let stubPath = servicesStubs.basic;
if (options.rest) {
stubPath = servicesStubs.rest;
if (options.model) {
stubPath = servicesStubs.ormRest;
}
}
const rootPath = options.root ? 'src/' + options.root + '/' : 'src/services/';
if (name.split("/").length > 1) {
if (!(0, fs_1.existsSync)(path_1.default.join(rootPath, name.split("/").splice(-1, 1).join("/")))) {
await promises_1.default.mkdir(path_1.default.join(rootPath, name.replace('/' + file_helper_1.fh.filenameFromPath(name), '')), { recursive: true });
}
}
const content = await promises_1.default.readFile(stubPath, 'utf8');
const names = (0, file_helper_1.resolveNames)(file_helper_1.fh.filenameFromPath(name), 'Service');
const className = names.className.replace("Service", '');
let replacedContent = content
.replaceAll('{Service}', className)
.replaceAll('{service}', names.varName);
if (options.model) {
replacedContent = replacedContent
.replaceAll('{Model}', capitalize(options.model))
.replaceAll('{model}', lower(options.model));
}
await promises_1.default.writeFile(path_1.default.join(rootPath, (0, file_helper_1.getFilePathWithoutName)(name) + "/" + (0, lodash_1.kebabCase)(className) + '.service.ts'), replacedContent, 'utf8');
console.log("Service created succssessfully!");
}
async function createRestService(name, model) {
let stubPath = path_helper_1.pathHelper.stubPath('services/rest-service.stub');
const content = await promises_1.default.readFile(stubPath, 'utf8');
let replacedContent = content
.replaceAll('{Service}', name);
if (model) {
replacedContent = replacedContent
.replaceAll('{Model}', capitalize(model))
.replaceAll('{model}', lower(model));
}
await promises_1.default.writeFile(path_1.default.join('src/services/', (0, lodash_1.kebabCase)(name) + '.service.ts'), replacedContent, 'utf8');
console.log("Service created succssessfully!");
}