UNPKG

dependency-cruiser

Version:

Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.

68 lines (61 loc) 1.85 kB
import { simple as walk_simple, base as walk_base } from "acorn-walk"; import estreeHelpers from "./estree-helpers.mjs"; function pryStringsFromArguments(pArguments) { let lReturnValue = null; if (estreeHelpers.firstArgumentIsAString(pArguments)) { lReturnValue = pArguments[0].value; } else if (estreeHelpers.firstArgumentIsATemplateLiteral(pArguments)) { lReturnValue = pArguments[0].quasis[0].value.cooked; } return lReturnValue; } function pushRequireCallsToDependencies( pDependencies, pModuleSystem, pRequireStrings ) { return (pNode) => { for (let lName of pRequireStrings) { if (estreeHelpers.isRequireOfSomeSort(pNode, lName)) { const lModuleName = pryStringsFromArguments(pNode.arguments); if (lModuleName) { pDependencies.push({ module: lModuleName, moduleSystem: pModuleSystem, dynamic: false, ...(lName === "require" ? { exoticallyRequired: false } : { exoticallyRequired: true, exoticRequire: lName }), }); } } } }; } export default function extractCommonJSDependencies( pAST, pDependencies, pModuleSystem, pExoticRequireStrings ) { // var/const lalala = require('./lalala'); // require('./lalala'); // require('./lalala').doFunkyStuff(); // require('zoinks!./wappie') // require(`./withatemplateliteral`) // as well as renamed requires/ require wrappers // as passed in pExoticRequireStrings ("need", "window.require") const lRequireStrings = ["require"].concat(pExoticRequireStrings); walk_simple( pAST, { CallExpression: pushRequireCallsToDependencies( pDependencies, pModuleSystem, lRequireStrings ), }, // see https://github.com/acornjs/acorn/issues/746 walk_base ); }