UNPKG

egg-ts-helper

Version:
70 lines (60 loc) 2.04 kB
import { debuglog } from 'node:util'; import fs from 'node:fs'; import path from 'node:path'; import * as utils from '../utils'; import { declMapping } from '../config'; import { GeneratorResult, TsGenConfig, TsHelperConfig } from '..'; const debug = debuglog('egg-ts-helper#generators_extend'); export default function ExtendGenerator(config: TsGenConfig, baseConfig: TsHelperConfig) { const fileList = config.file ? [ config.file ] : config.fileList; debug('file list : %o', fileList); if (!fileList.length) { // clean files return Object.keys(config.interface).map(key => ({ dist: path.resolve(config.dtsDir, `${key}.d.ts`), })); } const tsList: GeneratorResult[] = []; fileList.forEach(f => { let basename = path.basename(f); basename = basename.substring(0, basename.lastIndexOf('.')); const moduleNames = basename.split('.'); const interfaceNameKey = moduleNames[0]; const interfaceEnvironment = moduleNames[1] ? moduleNames[1].replace(/^[a-z]/, r => r.toUpperCase()) : ''; const interfaceName = config.interface[interfaceNameKey]; if (!interfaceName) { return; } const dist = path.resolve(config.dtsDir, `${basename}.d.ts`); f = path.resolve(config.dir, f); if (!fs.existsSync(f)) { return tsList.push({ dist }); } // get import info const moduleName = `Extend${interfaceEnvironment}${interfaceName}`; const importContext = utils.getImportStr(config.dtsDir, f, moduleName); tsList.push({ dist, content: `${importContext}\n` + `type ${moduleName}Type = typeof ${moduleName};\n` + `declare module \'${baseConfig.framework}\' {\n` + ` interface ${interfaceName} extends ${moduleName}Type { }\n` + '}', }); }); return tsList; } // default config ExtendGenerator.defaultConfig = { interface: utils.pickFields<keyof typeof declMapping>(declMapping, [ 'context', 'application', 'agent', 'request', 'response', 'helper', ]), };