UNPKG

@eggjs/dal-runtime

Version:
145 lines 13.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CodeGenerator = void 0; const promises_1 = __importDefault(require("node:fs/promises")); const node_path_1 = __importDefault(require("node:path")); const js_beautify_1 = require("js-beautify"); const lodash_1 = __importDefault(require("lodash")); const nunjucks_1 = __importDefault(require("nunjucks")); const tegg_types_1 = require("@eggjs/tegg-types"); const tegg_1 = require("@eggjs/tegg"); const SqlGenerator_1 = require("./SqlGenerator"); const TemplateUtil_1 = require("./TemplateUtil"); class CodeGenerator { constructor(options) { this.moduleDir = options.moduleDir; this.moduleName = options.moduleName; this.teggPkg = options.teggPkg ?? '@eggjs/tegg'; this.dalPkg = options.dalPkg ?? '@eggjs/tegg/dal'; this.createNunjucksEnv(); } createNunjucksEnv() { this.njkEnv = nunjucks_1.default.configure(node_path_1.default.join(__dirname, './templates'), { autoescape: false, }); this.njkEnv.addFilter('pascalCase', name => lodash_1.default.upperFirst(lodash_1.default.camelCase(name))); this.njkEnv.addFilter('camelCase', name => lodash_1.default.camelCase(name)); this.njkEnv.addFilter('dbTypeToTSType', TemplateUtil_1.TemplateUtil.dbTypeToTsType); } genCode(tplName, filePath, tableModel) { let tableModelAbsolutePath = tegg_1.PrototypeUtil.getFilePath(tableModel.clazz); tableModelAbsolutePath = tableModelAbsolutePath.substring(0, tableModelAbsolutePath.length - 3); const data = { table: tableModel, file: filePath, fileName: node_path_1.default.basename(filePath), clazzName: tableModel.clazz.name, moduleName: this.moduleName, teggPkg: this.teggPkg, dalPkg: this.dalPkg, id: tableModel.columns.find(t => t.propertyName === 'id'), primaryIndex: tableModel.getPrimary(), tableModelPath: TemplateUtil_1.TemplateUtil.importPath(tableModelAbsolutePath, node_path_1.default.dirname(filePath)), extensionPath: `../../extension/${tableModel.clazz.name}Extension`, structurePath: `../../structure/${tableModel.clazz.name}.json`, sqlPath: `../../structure/${tableModel.clazz.name}.sql`, columnMap: tableModel.columns.reduce((p, c) => { p[c.propertyName] = c; return p; }, {}), }; return this.njkEnv.render(`${tplName}.njk`, data); } async generate(tableModel) { let dalDir; try { await promises_1.default.access(node_path_1.default.join(this.moduleDir, 'src')); dalDir = node_path_1.default.join(this.moduleDir, 'src/dal'); } catch { dalDir = node_path_1.default.join(this.moduleDir, 'dal'); } // const tableName = tableModel.name; // const clazzName = tableModel.clazz.name; const clazzFileName = node_path_1.default.basename(tegg_1.PrototypeUtil.getFilePath(tableModel.clazz)); const baseFileName = node_path_1.default.basename(clazzFileName, '.ts'); // 要动的一些文件 const paths = { // e.g. app/dal/dao/base/example.ts baseBizDAO: node_path_1.default.join(dalDir, `dao/base/Base${baseFileName}DAO.ts`), // e.g. app/dal/dao/example.ts bizDAO: node_path_1.default.join(dalDir, `dao/${baseFileName}DAO.ts`), // e.g. app/dal/extension/example.ts extension: node_path_1.default.join(dalDir, `extension/${baseFileName}Extension.ts`), // e.g. app/dal/structure/example.json structure: node_path_1.default.join(dalDir, `structure/${baseFileName}.json`), // e.g. app/dal/structure/example.sql structureSql: node_path_1.default.join(dalDir, `structure/${baseFileName}.sql`), }; // 建立 structure 文件 await promises_1.default.mkdir(node_path_1.default.dirname(paths.structure), { recursive: true, }); await promises_1.default.writeFile(paths.structure, JSON.stringify(tableModel, null, 2), 'utf8'); const sqlGenerator = new SqlGenerator_1.SqlGenerator(); const structureSql = sqlGenerator.generate(tableModel); await promises_1.default.writeFile(paths.structureSql, structureSql, 'utf8'); const codes = [{ templates: tegg_types_1.Templates.BASE_DAO, filePath: paths.baseBizDAO, beautify: true, overwrite: true, }, { templates: tegg_types_1.Templates.DAO, filePath: paths.bizDAO, beautify: true, overwrite: false, }, { templates: tegg_types_1.Templates.EXTENSION, filePath: paths.extension, beautify: false, overwrite: false, }]; for (const { templates, filePath, beautify, overwrite } of codes) { await promises_1.default.mkdir(node_path_1.default.dirname(filePath), { recursive: true, }); const code = this.genCode(templates, filePath, tableModel); let beautified; if (beautify) { beautified = (0, js_beautify_1.js_beautify)(code, { brace_style: 'preserve-inline', indent_size: 2, jslint_happy: true, preserve_newlines: false, }); } else { beautified = code; } beautified = beautified .replace(/( )*\/\/ empty-line( )*/g, '') .replace(/Promise( )*<( )*(.+?)( )*>/g, 'Promise<$3>') .replace(/Optional( )*<( )*(.+?)( )*>/g, 'Optional<$3>') .replace(/Record( )*<( )*(.+?)( )*>/g, 'Record<$3>') .replace(/Partial( )*<( )*(.+?)( )*>/g, 'Partial<$3>') .replace(/DataSource( )*<( )*(.+?)( )*>/g, 'DataSource<$3>') .replace(/ \? :/g, '?:'); if (overwrite !== true) { try { await promises_1.default.access(filePath); continue; } catch { // file not exists } } await promises_1.default.writeFile(filePath, beautified, 'utf8'); } } } exports.CodeGenerator = CodeGenerator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZUdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db2RlR2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFrQztBQUNsQywwREFBNkI7QUFDN0IsNkNBQTBDO0FBQzFDLG9EQUF1QjtBQUN2Qix3REFBc0Q7QUFDdEQsa0RBQThDO0FBRzlDLHNDQUE0QztBQUM1QyxpREFBOEM7QUFDOUMsaURBQThDO0FBRTlDLE1BQWEsYUFBYTtJQU14QixZQUFZLE9BQTZCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksaUJBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUFFO1lBQ3BFLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFDLENBQUMsVUFBVSxDQUFDLGdCQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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