import signale from 'signale'; import { isPlainObject } from 'lodash'; import assert from 'assert'; import { createMiddleware } from 'umi-mock'; export default function(api) { const errors = []; api._registerConfig(() => { return api => { return { name: 'mock', validate(val) { assert(isPlainObject(val), `Configure item mock should be Plain Object, but got ${val}.`); }, onChange() { api.service.restart(/* why */ 'Config mock Changed'); }, configs: [ { group: 'basic', name: 'mock.exclude', type: 'string[]', title: { 'zh-CN': 'Mock 忽略文件', 'en-US': 'Ignored Mock Files', }, description: { 'zh-CN': '指定需要忽略的文件列表,支持 glob 格式。', 'en-US': 'Support glob pattern.', }, }, ], }; }; }); api._beforeServerWithApp(({ app }) => { if (process.env.MOCK !== 'none' && process.env.HTTP_MOCK !== 'none') { const beforeMiddlewares = api.applyPlugins('addMiddlewareBeforeMock', { initialValue: [], }); const afterMiddlewares = api.applyPlugins('addMiddlewareAfterMock', { initialValue: [], }); beforeMiddlewares.forEach(m => app.use(m)); const { cwd, config, paths: { absPagesPath, absSrcPath }, } = api; app.use( createMiddleware({ cwd, config, errors, absPagesPath, absSrcPath, watch: !process.env.WATCH_FILES, onStart({ paths }) { api.addBabelRegister(paths); }, }).middleware, ); afterMiddlewares.forEach(m => app.use(m)); } }); api.onDevCompileDone(() => { if (errors.length) { signale.error(`Mock file parse failed`); errors.forEach(e => { console.error(e.message); }); } }); }