in scripts/parse-mjs-source.js [9:44]
function find(source, opts) {
const ast = acorn.parse(source, {
// to parse ESM
sourceType: 'module',
// top level await
allowAwaitOutsideFunction: true,
});
const modules = [];
// TODO: walk the AST and return the list of modues in
// `strings` property
walk.recursive(ast, null, {
// import { a, b, c } from 'module';
ImportDeclaration(node) {
modules.push(node.source.value);
},
// export { a, b, c } from 'module';
ExportNamedDeclaration(node) {
modules.push(node.source.value);
},
// const x = await import('module');
ExpressionStatement(node) {
if (
node.expression.type === 'AwaitExpression' &&
node.expression.argument.type === 'CallExpression' &&
node.expression.argument.callee.type === 'Import'
) {
modules.push(node.expression.argument.arguments[0].value);
}
},
});
// Cleanup `node:` prefix for built-in modules
return modules.map((m) => m.replace(/^node:/, ''));
}