You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
256 lines
8.7 KiB
256 lines
8.7 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
function _react() {
|
|
const data = _interopRequireDefault(require("react"));
|
|
|
|
_react = function _react() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _umi() {
|
|
const data = require("umi");
|
|
|
|
_umi = function _umi() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _path() {
|
|
const data = require("path");
|
|
|
|
_path = function _path() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _fs() {
|
|
const data = require("fs");
|
|
|
|
_fs = function _fs() {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
var _getModels = require("./getModels/getModels");
|
|
|
|
var _getUserLibDir = require("./getUserLibDir");
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
|
|
const Mustache = _umi().utils.Mustache,
|
|
lodash = _umi().utils.lodash,
|
|
winPath = _umi().utils.winPath;
|
|
|
|
var _default = api => {
|
|
const logger = api.logger;
|
|
|
|
function getModelDir() {
|
|
return api.config.singular ? 'model' : 'models';
|
|
}
|
|
|
|
function getSrcModelsPath() {
|
|
return (0, _path().join)(api.paths.absSrcPath, getModelDir());
|
|
}
|
|
|
|
function hasDvaDependency() {
|
|
const _api$pkg = api.pkg,
|
|
dependencies = _api$pkg.dependencies,
|
|
devDependencies = _api$pkg.devDependencies;
|
|
return (dependencies === null || dependencies === void 0 ? void 0 : dependencies.dva) || (devDependencies === null || devDependencies === void 0 ? void 0 : devDependencies.dva);
|
|
} // 配置
|
|
|
|
|
|
api.describe({
|
|
key: 'dva',
|
|
config: {
|
|
schema(joi) {
|
|
return joi.object({
|
|
immer: joi.boolean(),
|
|
hmr: joi.boolean(),
|
|
skipModelValidate: joi.boolean(),
|
|
extraModels: joi.array().items(joi.string())
|
|
});
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
function getAllModels() {
|
|
var _api$config$dva, _api$config$dva2;
|
|
|
|
const srcModelsPath = getSrcModelsPath();
|
|
const baseOpts = {
|
|
skipModelValidate: (_api$config$dva = api.config.dva) === null || _api$config$dva === void 0 ? void 0 : _api$config$dva.skipModelValidate,
|
|
extraModels: (_api$config$dva2 = api.config.dva) === null || _api$config$dva2 === void 0 ? void 0 : _api$config$dva2.extraModels
|
|
};
|
|
return lodash.uniq([...(0, _getModels.getModels)(_objectSpread({
|
|
base: srcModelsPath
|
|
}, baseOpts)), ...(0, _getModels.getModels)(_objectSpread({
|
|
base: api.paths.absPagesPath,
|
|
pattern: `**/${getModelDir()}/**/*.{ts,tsx,js,jsx}`
|
|
}, baseOpts)), ...(0, _getModels.getModels)(_objectSpread({
|
|
base: api.paths.absPagesPath,
|
|
pattern: `**/model.{ts,tsx,js,jsx}`
|
|
}, baseOpts))]);
|
|
}
|
|
|
|
let hasModels = false; // 初始检测一遍
|
|
|
|
api.onStart(() => {
|
|
hasModels = getAllModels().length > 0;
|
|
}); // 生成临时文件
|
|
|
|
api.onGenerateFiles({
|
|
fn() {
|
|
var _api$config$dva3, _api$config;
|
|
|
|
const models = getAllModels();
|
|
hasModels = models.length > 0;
|
|
logger.debug('dva models:');
|
|
logger.debug(models); // 没有 models 不生成文件
|
|
|
|
if (!hasModels) return; // dva.ts
|
|
|
|
const dvaTpl = (0, _fs().readFileSync)((0, _path().join)(__dirname, 'dva.tpl'), 'utf-8');
|
|
api.writeTmpFile({
|
|
path: 'plugin-dva/dva.ts',
|
|
content: Mustache.render(dvaTpl, {
|
|
ExtendDvaConfig: '',
|
|
EnhanceApp: '',
|
|
RegisterPlugins: [((_api$config$dva3 = api.config.dva) === null || _api$config$dva3 === void 0 ? void 0 : _api$config$dva3.immer) && `app.use(require('${winPath(require.resolve('dva-immer'))}')());`].filter(Boolean).join('\n'),
|
|
RegisterModels: models.map(path => {
|
|
// prettier-ignore
|
|
return `
|
|
app.model({ namespace: '${(0, _path().basename)(path, (0, _path().extname)(path))}', ...(require('${path}').default) });
|
|
`.trim();
|
|
}).join('\r\n'),
|
|
// use esm version
|
|
dvaLoadingPkgPath: winPath(require.resolve('dva-loading/dist/index.esm.js'))
|
|
})
|
|
}); // runtime.tsx
|
|
|
|
const runtimeTpl = (0, _fs().readFileSync)((0, _path().join)(__dirname, 'runtime.tpl'), 'utf-8');
|
|
api.writeTmpFile({
|
|
path: 'plugin-dva/runtime.tsx',
|
|
content: Mustache.render(runtimeTpl, {
|
|
SSR: !!((_api$config = api.config) === null || _api$config === void 0 ? void 0 : _api$config.ssr)
|
|
})
|
|
}); // exports.ts
|
|
|
|
const exportsTpl = (0, _fs().readFileSync)((0, _path().join)(__dirname, 'exports.tpl'), 'utf-8');
|
|
const dvaLibPath = winPath((0, _getUserLibDir.getUserLibDir)({
|
|
library: 'dva',
|
|
pkg: api.pkg,
|
|
cwd: api.cwd
|
|
}) || (0, _path().dirname)(require.resolve('dva/package.json')));
|
|
|
|
const dvaVersion = require((0, _path().join)(dvaLibPath, 'package.json')).version;
|
|
|
|
const exportMethods = dvaVersion.startsWith('2.6') ? ['connect', 'useDispatch', 'useStore', 'useSelector'] : ['connect'];
|
|
logger.debug(`dva lib path: ${dvaLibPath}`);
|
|
logger.debug(`dva version: ${dvaVersion}`);
|
|
logger.debug(`exported methods:`);
|
|
logger.debug(exportMethods);
|
|
api.writeTmpFile({
|
|
path: 'plugin-dva/exports.ts',
|
|
content: Mustache.render(exportsTpl, {
|
|
dvaLibPath,
|
|
exportMethods: exportMethods.join(', ')
|
|
})
|
|
}); // typings
|
|
|
|
const connectTpl = (0, _fs().readFileSync)((0, _path().join)(__dirname, 'connect.tpl'), 'utf-8');
|
|
api.writeTmpFile({
|
|
path: 'plugin-dva/connect.ts',
|
|
content: Mustache.render(connectTpl, {
|
|
dvaHeadExport: models.map(path => {
|
|
// prettier-ignore
|
|
return `export * from '${winPath((0, _path().dirname)(path) + "/" + (0, _path().basename)(path, (0, _path().extname)(path)))}';`;
|
|
}).join('\r\n'),
|
|
dvaLoadingModels: models.map(path => {
|
|
// prettier-ignore
|
|
return ` ${(0, _path().basename)(path, (0, _path().extname)(path))} ?: boolean;`;
|
|
}).join('\r\n')
|
|
})
|
|
});
|
|
},
|
|
|
|
// 要比 preset-built-in 靠前
|
|
// 在内部文件生成之前执行,这样 hasModels 设的值对其他函数才有效
|
|
stage: -1
|
|
}); // src/models 下的文件变化会触发临时文件生成
|
|
|
|
api.addTmpGenerateWatcherPaths(() => [getSrcModelsPath()]); // dva 优先读用户项目的依赖
|
|
|
|
api.addProjectFirstLibraries(() => [{
|
|
name: 'dva',
|
|
path: (0, _path().dirname)(require.resolve('dva/package.json'))
|
|
}]); // Babel Plugin for HMR
|
|
|
|
api.modifyBabelOpts(babelOpts => {
|
|
var _api$config$dva4;
|
|
|
|
const hmr = (_api$config$dva4 = api.config.dva) === null || _api$config$dva4 === void 0 ? void 0 : _api$config$dva4.hmr;
|
|
|
|
if (hmr) {
|
|
const hmrOpts = lodash.isPlainObject(hmr) ? hmr : {};
|
|
babelOpts.plugins.push([require.resolve('babel-plugin-dva-hmr'), hmrOpts]);
|
|
}
|
|
|
|
return babelOpts;
|
|
}); // Runtime Plugin
|
|
|
|
api.addRuntimePlugin(() => hasModels ? [(0, _path().join)(api.paths.absTmpPath, 'plugin-dva/runtime.tsx')] : []);
|
|
api.addRuntimePluginKey(() => hasModels ? ['dva'] : []); // 导出内容
|
|
|
|
api.addUmiExports(() => hasModels ? [{
|
|
exportAll: true,
|
|
source: '../plugin-dva/exports'
|
|
}, {
|
|
exportAll: true,
|
|
source: '../plugin-dva/connect'
|
|
}] : []);
|
|
api.registerCommand({
|
|
name: 'dva',
|
|
|
|
fn({
|
|
args
|
|
}) {
|
|
if (args._[0] === 'list' && args._[1] === 'model') {
|
|
const models = getAllModels();
|
|
console.log();
|
|
console.log(_umi().utils.chalk.bold(' Models in your project:'));
|
|
console.log();
|
|
models.forEach(model => {
|
|
console.log(` - ${(0, _path().relative)(api.cwd, model)}`);
|
|
});
|
|
console.log();
|
|
console.log(` Totally ${models.length}.`);
|
|
console.log();
|
|
}
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
exports.default = _default; |