UNPKG

@nokecy/umi-plugin-widget

Version:

widget

102 lines (88 loc) 2.73 kB
import { IApi, utils } from 'umi'; import { basename, dirname, extname, join, relative } from 'path'; import { getWidgets } from './getWidgets'; import { readFileSync } from 'fs'; const { Mustache, lodash, winPath } = utils; const erpCommon_DIR = 'plugin-abp-widget'; // plugin-init-state 插件创建临时文件的专有文件夹 export default function (api: IApi) { function getSrcModelsPath() { return join(api.paths.absSrcPath!, '_widgets'); } function getAllInitStates() { const srcModelsPath = getSrcModelsPath(); const baseOpts = { skipModelValidate: api.config.dva?.skipModelValidate, extraModels: api.config.dva?.extraModels, }; return lodash.uniq([ ...getWidgets({ base: srcModelsPath, cwd: api.cwd, ...baseOpts, }), ...getWidgets({ base: api.paths.absPagesPath!, cwd: api.cwd, pattern: `**/${"_widgets"}/*.{ts,tsx,js,jsx}`, ...baseOpts, }), ...getWidgets({ base: api.paths.absPagesPath!, cwd: api.cwd, pattern: `**/widget.{ts,tsx,js,jsx}`, ...baseOpts, }), ]); } api.describe({ key: "abpwidget", enableBy: api.EnableBy.register, }) let hasModels = false; api.onStart(() => { hasModels = getAllInitStates().length > 0; }); api.onGenerateFiles(() => { const models = getAllInitStates(); hasModels = models.length > 0; // if (!hasModels) return; const dvaTpl = readFileSync(join(__dirname, 'widget.tpl'), 'utf-8'); api.writeTmpFile({ path: `${erpCommon_DIR}/widget.ts`, content: Mustache.render(dvaTpl, { RegisterModelImports: models .map((path, index) => { const modelName = `${lodash.upperFirst( lodash.camelCase(basename(path, extname(path))), )}`; return `import ${modelName} from '${path}';`; }) .join('\r\n'), RegisterModels: models .map((path, index) => { // prettier-ignore const modelName = `${lodash.upperFirst( lodash.camelCase(basename(path, extname(path))), )}`; return `export { ${modelName} }`.trim(); }) .join('\r\n'), Datas: models .map((path, index) => { // prettier-ignore const modelName = `${lodash.upperFirst( lodash.camelCase(basename(path, extname(path))), )}`; return `"${modelName}" : ${modelName} ,`.trim(); }) .join('\r\n'), }) }); }); api.addUmiExports(() => [ { exportAll: true, source: `../${erpCommon_DIR}/widget`, }, ]); }