egg-orm-ts
Version:
Simple orm with Typeorm, for egg plugin.
118 lines (117 loc) • 8.79 kB
JavaScript
;
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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