UNPKG

@notadd/cli

Version:

notadd core none dependence

89 lines (85 loc) 2.39 kB
import { join } from 'path'; import { readFileSync, readdirSync } from 'fs-extra'; import { compact } from 'lodash'; import { Injectable } from "@notadd/core"; @Injectable() export class ReadEntitiesService { /** * 搜索 .entity 文件表名 */ private readonly _entityNameReg = /class ([^\s]*Entity)/; /** * 拿到 .entity 中所有的字段 */ private readonly _filedsReg = /[^\s]*\??\:\s*(number|string|any|Date|boolean|Array|Object).*/g; /** * 用于拆分一个字段 */ private readonly _filedDetailReg = /([^\s]*)\??\:\s*(number|string|any|Date|boolean|Array|Object).*/; readEntities(): ReadEntitiesResult[] { const fileNames = readdirSync(process.cwd()).filter((it) => it.includes('.entity.ts')); const dirName = process.cwd().split('/').pop(); if (!dirName) throw new Error('文件夹名或位置不正确'); if (fileNames.length == 0) { throw new Error('未找到.entity.ts文件'); } const entities: ReadEntitiesResult[] = fileNames.map((it) => { const content = readFileSync(join(process.cwd(), it)).toString(); const entityName = content.match(this._entityNameReg); if (!entityName || !entityName[1]) throw new Error(`${it}文件没有Entity结尾的class`); const fileds = content.match(this._filedsReg); if (!fileds || fileds.length == 0) throw new Error(`${it}文件没有字段`); const filedNames = compact( fileds.map((it) => { const filedsMatch = it.match(this._filedDetailReg); if (filedsMatch) { const filedName = filedsMatch[1].replace('?', '').trim(); const type = filedsMatch[2].trim(); return filedName; } return null; }) ); return { fileName: it, content, entityName: entityName[1].trim(), fileds, dirName, filedNames, }; }); return entities; } } export interface ReadEntitiesResult { /** * 文件名 * @example "test.entity.ts" */ fileName: string; /** * entity文件内容 */ content: string; /** * 表(class)名 * @example "TestEntity" */ entityName: string; /** * 所有字段列表 * @example ['id?: number;','type: string;'] */ fileds: string[]; /** * 文件夹名 * @example "test" */ dirName: string; /** * 所有字段民 * @example [ 'id', 'createDate' ] */ filedNames: string[]; }