UNPKG

dependency-cruiser-fork

Version:

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

65 lines (59 loc) 1.73 kB
const walk = require("acorn-walk"); const estreeHelpers = require("./estree-helpers"); function pryStringsFromArguments(pArguments) { let lReturnValue = []; if (estreeHelpers.firstArgumentIsAString(pArguments)) { lReturnValue = pArguments[0].value.split("!"); } else if (estreeHelpers.firstArgumentIsATemplateLiteral(pArguments)) { lReturnValue = [pArguments[0].quasis[0].value.cooked]; } return lReturnValue; } function pushRequireCallsToDependencies( pDependencies, pModuleSystem, pExoticRequireStrings ) { return (pNode) => { for (let pName of ["require"].concat(pExoticRequireStrings)) { if (estreeHelpers.isRequireOfSomeSort(pNode, pName)) { for (let pString of pryStringsFromArguments(pNode.arguments)) { pDependencies.push({ module: pString, moduleSystem: pModuleSystem, dynamic: false, ...(pName === "require" ? { exoticallyRequired: false } : { exoticallyRequired: true, exoticRequire: pName }), }); } } } }; } module.exports = ( 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") walk.simple( pAST, { CallExpression: pushRequireCallsToDependencies( pDependencies, pModuleSystem, pExoticRequireStrings ), }, // see https://github.com/acornjs/acorn/issues/746 walk.base ); };