/
load-perf-config.js
39 lines (35 loc) · 1.21 KB
/
load-perf-config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const { accessSync, constants } = require('fs');
const path = require('path');
const rollup = require('../dist/rollup.js');
exports.targetDir = path.resolve(__dirname, '..', 'perf');
const configFile = path.resolve(exports.targetDir, 'rollup.config.js');
try {
accessSync(configFile, constants.R_OK);
} catch (e) {
console.error(
`No valid "rollup.config.js" in ${exports.targetDir}. Did you "npm run perf:init"?`
);
process.exit(1);
}
exports.loadPerfConfig = async () => {
const bundle = await rollup.rollup({
external: id => (id[0] !== '.' && !path.isAbsolute(id)) || id.slice(-5, id.length) === '.json',
input: configFile,
onwarn: warning => console.error(warning.message)
});
let config = loadConfigFromCode((await bundle.generate({ format: 'cjs' })).output[0].code);
config = typeof config === 'function' ? config({}) : config;
return Array.isArray(config) ? config[0] : config;
};
function loadConfigFromCode(code) {
const defaultLoader = require.extensions['.js'];
require.extensions['.js'] = (module, filename) => {
if (filename === configFile) {
module._compile(code, filename);
} else {
defaultLoader(module, filename);
}
};
delete require.cache[configFile];
return require(configFile);
}