UNPKG

egg-orm-ts

Version:

Simple orm with Typeorm, for egg plugin.

118 lines (117 loc) 8.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadInstance = exports.generateTypings = exports.createTyingFile = exports.getTypingText = exports.writeFile = void 0; const tslib_1 = require("tslib"); const path_1 = require("path"); const chokidar_1 = require("chokidar"); const fs_jetpack_1 = require("fs-jetpack"); const fs = tslib_1.__importStar(require("fs-extra")); const typeorm_1 = require("typeorm"); const string_1 = require("./string"); function writeFile(path, text) { fs.writeFileSync(path, string_1.formatCode(text), { encoding: 'utf8' }); } exports.writeFile = writeFile; function getTypingText(importText, repoText, entityText) { return ` import 'egg'; import { Repository, Connection } from 'typeorm'; ${importText} declare module 'egg' { interface Context { connection: Connection entity: { ${entityText} } repo: { ${repoText} } } } `; } exports.getTypingText = getTypingText; function createTyingFile(app) { const { baseDir } = app; const entityDir = path_1.join(baseDir, 'app', 'entity'); const typingPath = path_1.join(baseDir, 'typings', 'typeorm.d.ts'); const files = fs_jetpack_1.find(entityDir, { matching: '*.ts' }); const pathArr = string_1.formatPaths(files); const importText = pathArr .map(i => `import ${i.name} from '${i.importPath}'`) .join(';\n'); const repoText = pathArr .map(i => `${i.name}: Repository<${i.name}>`) .join(';\n'); const entityText = pathArr.map(i => `${i.name}: any`).join(';\n'); const typingText = getTypingText(importText, repoText, entityText); writeFile(typingPath, typingText); } exports.createTyingFile = createTyingFile; function generateTypings(app) { const { baseDir } = app; const entityDir = path_1.join(baseDir, 'app', 'entity'); const typingsDir = path_1.join(baseDir, 'typings'); if (!fs.existsSync(entityDir)) { return; } fs.ensureDirSync(typingsDir); chokidar_1.watch(entityDir).on('all', (eventType) => { if (['add', 'change'].includes(eventType)) { createTyingFile(app); } if (['unlink'].includes(eventType)) { createTyingFile(app); } }); } exports.generateTypings = generateTypings; function getEntityByPath(app, entityPath) { const connection = app.context.connection; const fileModule = require(entityPath); const entities = Object.keys(fileModule).reduce((result, cur) => { try { connection.getMetadata(fileModule[cur]); if (!result.includes(fileModule[cur])) { return [...result, fileModule[cur]]; } else { return result; } } catch (e) { app.logger.error('[egg-orm-ts] [getEntityByPath] ERROR:', e); } return result; }, []); if (!entities.length) { throw new Error(`[egg-orm-ts] [${entityPath}] is not exist or wrong format.`); } return entities[0]; } async function loadInstance(app, matching) { const { baseDir } = app; const entityDir = path_1.join(baseDir, 'app', 'entity'); if (!fs.existsSync(entityDir)) { return; } app.context.repo = {}; app.context.entity = {}; const files = fs_jetpack_1.find(entityDir, { matching }); try { for (const file of files) { // const entityPath = join(baseDir, file.replace('test/fixtures/apps/orm-ts-test/', '')); const entityPath = path_1.join(baseDir, file); // console.log('entityPath: ', entityPath); const entity = getEntityByPath(app, entityPath); const name = string_1.getModelName(file); app.context.repo[name] = typeorm_1.getRepository(entity); app.context.entity[name] = entity; } } catch (e) { app.logger.error('[egg-orm-ts] [loadInstance] ERROR:', e); } } exports.loadInstance = loadInstance; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSwrQkFBNEI7QUFDNUIsdUNBQWlDO0FBQ2pDLDJDQUFrQztBQUNsQyxxREFBK0I7QUFFL0IscUNBQXdDO0FBQ3hDLHFDQUFpRTtBQUVqRSxTQUFnQixTQUFTLENBQUMsSUFBWSxFQUFFLElBQVk7SUFDbEQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsbUJBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFGRCw4QkFFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxVQUFrQixFQUFFLFFBQWdCLEVBQUUsVUFBa0I7SUFDcEYsT0FBTzs7O0VBR1AsVUFBVTs7Ozs7O1FBTUosVUFBVTs7O1FBR1YsUUFBUTs7OztDQUlmLENBQUM7QUFDRixDQUFDO0FBbEJELHNDQWtCQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxHQUFnQjtJQUM5QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBRXhCLE1BQU0sU0FBUyxHQUFHLFdBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sVUFBVSxHQUFHLFdBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRTVELE1BQU0sS0FBSyxHQUFHLGlCQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsb0JBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxNQUFNLFVBQVUsR0FBRyxPQUFPO1NBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsVUFBVSxHQUFHLENB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