rollup-plugin-require-context2
Version:
rollup-plugin for webpack requrie-context
66 lines (59 loc) • 1.34 kB
JavaScript
const Path = require('path');
const { parse } = require('acorn');
const walk = require('acorn-walk');
function stripHeadAndTailChar(str) {
return str.substring(1, str.length-1);
}
function extract(code) {
return new Promise((resolve, reject) => {
const ast = parse(code, {
sourceType: 'module'
});
const res = []
walk.simple(ast, {
CallExpression(node) {
const {
start,
end,
callee,
arguments: argNodes
} = node;
let args = [];
if (
callee.type === 'MemberExpression' &&
callee.object.name === 'require' &&
callee.property.name === 'context'
) {
args = argNodes.map(a => a.value)
res.push({
start,
end,
args
});
}
}
});
resolve(res);
});
}
module.exports = async function extractArgs(code, baseDirname) {
const data = await extract(code);
return data.map(r => {
const { start, end, args } = r;
const [
rawDirname = '',
rawRecursive,
rawRegexp
] = args;
const dirname = Path.join(baseDirname, rawDirname);
const recursive = rawRecursive;
const regexp = rawRegexp;
return {
dirname,
recursive,
regexp,
start,
end
};
})
}