@ant-design/tools
Version:
tools for ant design
40 lines • 1.41 kB
JavaScript
import * as crypto from 'crypto';
import { createTransformer } from 'babel-jest';
import getBabelCommonConfig from "../getBabelCommonConfig";
import rewriteSource from "./rewriteSource";
import pkg from "../../package.json";
const libDir = process.env.LIB_DIR || 'components';
function processDemo({
types: t
}) {
return {
visitor: {
ImportDeclaration(path) {
rewriteSource(t, path, libDir);
}
}
};
}
const preprocessor = {
canInstrument: true,
process(src, filePath, config, transformOptions) {
global.__clearBabelAntdPlugin && global.__clearBabelAntdPlugin(); // eslint-disable-line
const babelConfig = getBabelCommonConfig();
babelConfig.plugins = [...(babelConfig.plugins || [])];
if (/\/demo\//.test(filePath)) {
babelConfig.plugins.push(processDemo);
}
babelConfig.plugins.push([require.resolve('babel-plugin-import'), {
libraryName: 'antd-mobile',
libraryDirectory: '../../../../components'
}]);
const babelSupport = /\.(t|j)sx?$/.test(filePath);
const babelJest = createTransformer(babelConfig);
const name = babelSupport ? filePath : 'file.js';
return babelJest.process(src, name, config, transformOptions);
},
getCacheKey() {
return crypto.createHash('md5').update('\0', 'utf8').update(libDir).update('\0', 'utf8').update(pkg.version).digest('hex');
}
};
module.exports = preprocessor;