qlin f8b70f0ebb Ts type (#133)
* fix: 优化类型提示

* fix: 添加 enums 接口类型声明

* feat: 配置插件api提示

Co-authored-by: wanchun <445436867@qq.com>
2022-06-22 19:24:49 +08:00

79 lines
2.0 KiB
JavaScript

import { readFileSync } from 'fs';
import { join } from 'path';
import { name } from '../package.json';
const namespace = 'plugin-model';
export default (api) => {
const {
paths,
utils: { Mustache },
} = api;
const { lodash, winPath } = require('@fesjs/utils');
const { getModels } = require('./utils/getModels');
const { getTmpFile } = require('./utils/getTmpFile');
function getModelDir() {
return api.config.singular ? 'model' : 'models';
}
function getModelsPath() {
return join(paths.absSrcPath, getModelDir());
}
function getAllModels() {
const srcModelsPath = getModelsPath();
return lodash.uniq([...getModels(srcModelsPath)]);
}
const absCoreFilePath = join(namespace, 'core.js');
const absInitialStateFilePath = join(namespace, 'models/initialState.js');
api.register({
key: 'addExtraModels',
fn: () => [
{
absPath: winPath(join(paths.absTmpPath, absInitialStateFilePath)),
namespace: '@@initialState',
},
],
});
api.onGenerateFiles(async () => {
const files = getAllModels();
const additionalModels = await api.applyPlugins({
key: 'addExtraModels',
type: api.ApplyPluginsType.add,
initialValue: [],
});
const tmpFiles = getTmpFile(files, additionalModels, paths.absSrcPath);
api.writeTmpFile({
path: absCoreFilePath,
content: Mustache.render(readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'), {
...tmpFiles,
}),
});
api.copyTmpFiles({
namespace,
path: join(__dirname, 'runtime'),
ignore: ['.tpl'],
});
});
api.addPluginExports(() => [
{
specifiers: ['useModel'],
source: absCoreFilePath,
},
]);
api.addConfigType(() => ({
source: name,
}));
};