UNPKG

dependency-cruiser

Version:

Validate and visualize javascript dependencies. With your rules. ES6, CommonJS, AMD

65 lines (57 loc) 2.11 kB
"use strict"; const path = require('path'); const _ = require('lodash'); const resolve = require('resolve'); const utl = require('../utl'); const isRelativeModuleName = pString => pString.startsWith("."); /* * resolves both CommonJS and ES6 */ function resolveCJSModule(pModuleName, pBaseDir, pFileDir) { let lRetval = { resolved : pModuleName, coreModule : false, followable : false, couldNotResolve : false }; if (resolve.isCore(pModuleName)){ lRetval.coreModule = true; } else { try { lRetval.resolved = path.relative( pBaseDir, resolve.sync(pModuleName, {basedir: pFileDir}) ); lRetval.followable = (path.extname(lRetval.resolved) !== ".json"); } catch (e) { lRetval.couldNotResolve = true; } } return lRetval; } function resolveAMDModule(pModuleName, pBaseDir, pFileDir) { // lookups: // - [x] could be relative in the end (implemented) // - [ ] require.config kerfuffle (command line, html, file, ...) // - [ ] maybe use mrjoelkemp/module-lookup-amd ? // - [ ] funky plugins (json!wappie, screeching-cat!saberttooth) const lProbablePath = path.relative( pBaseDir, path.join(pFileDir, `${pModuleName}.js`) ); return { resolved: utl.fileExists(lProbablePath) ? lProbablePath : pModuleName, coreModule: Boolean(resolve.isCore(pModuleName)), followable: utl.fileExists(lProbablePath), couldNotResolve: !Boolean(resolve.isCore(pModuleName)) && !utl.fileExists(lProbablePath) }; } module.exports = (pDependency, pBaseDir, pFileDir) => { if (isRelativeModuleName(pDependency.moduleName)){ return resolveCJSModule(pDependency.moduleName, pBaseDir, pFileDir); } else if (_.includes(["cjs", "es6"], pDependency.moduleSystem)){ return resolveCJSModule(pDependency.moduleName, pBaseDir, pFileDir); } else { return resolveAMDModule(pDependency.moduleName, pBaseDir, pFileDir); } };