UNPKG

@dword-design/depcheck

Version:

Check dependencies in your node module

37 lines (36 loc) 1.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = parseBinary; var _path = _interopRequireDefault(require("path")); var _lodash = _interopRequireDefault(require("lodash")); var _utils = require("../utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getBinMetadata(dep, dir) { const metadata = (0, _utils.loadModuleData)(dep, dir).metadata || {}; return metadata.bin || {}; } function getBinaries(dep, dir) { const binMetadata = getBinMetadata(dep, dir); if (typeof binMetadata === 'string') { // Use path.basename to discard any scope // e.g. a package named "@foo/bar" creates a command named "bar" return [[_path.default.basename(dep), binMetadata]]; } return _lodash.default.toPairs(binMetadata); } function getBinaryFeatures(dep, [key, value]) { const binPath = _path.default.join('node_modules', dep, value).replace(/\\/g, '/'); const features = [key, `--require ${key}`, `--require ${key}/register`, `-r ${key}`, `-r ${key}/register`, `$(npm bin)/${key}`, `node_modules/.bin/${key}`, `./node_modules/.bin/${key}`, binPath, `./${binPath}`]; return features; } function isBinaryInUse(dep, scripts, dir) { const binaries = getBinaries(dep, dir); return binaries.some(bin => getBinaryFeatures(dep, bin).some(feature => scripts.some(script => _lodash.default.includes(` ${script} `, ` ${feature} `)))); } async function parseBinary(filename, deps, dir) { const scripts = await (0, _utils.getScripts)(filename); return deps.filter(dep => isBinaryInUse(dep, scripts, dir)); } module.exports = exports.default;