UNPKG

rollup-plugin-require-context2

Version:
66 lines (59 loc) 1.34 kB
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 }; }) }