/snap/node/11691/lib/node_modules/npm/lib/commands
NameSizeModeActions
access.js61890644editdlrm
adduser.js13210644editdlrm
audit.js32210644editdlrm
bugs.js8470644editdlrm
cache.js72920644editdlrm
ci.js43250644editdlrm
completion.js91160644editdlrm
config.js114440644editdlrm
dedupe.js14430644editdlrm
deprecate.js21820644editdlrm
diff.js81910644editdlrm
dist-tag.js56540644editdlrm
docs.js4490644editdlrm
doctor.js103470644editdlrm
edit.js18040644editdlrm
exec.js35000644editdlrm
explain.js36610644editdlrm
explore.js22110644editdlrm
find-dupes.js6340644editdlrm
fund.js66100644editdlrm
get.js5770644editdlrm
help-search.js56500644editdlrm
help.js37520644editdlrm
hook.js34530644editdlrm
init.js70180644editdlrm
install-ci-test.js3730644editdlrm
install-test.js3700644editdlrm
install.js52770644editdlrm
link.js53810644editdlrm
ll.js2340644editdlrm
login.js13180644editdlrm
logout.js14530644editdlrm
ls.js186290644editdlrm
org.js41210644editdlrm
outdated.js78800644editdlrm
owner.js59880644editdlrm
pack.js26650644editdlrm
ping.js8730644editdlrm
pkg.js36410644editdlrm
prefix.js3350644editdlrm
profile.js108190644editdlrm
prune.js7990644editdlrm
publish.js75520644editdlrm
query.js35950644editdlrm
rebuild.js22410644editdlrm
repo.js12780644editdlrm
restart.js3100644editdlrm
root.js2950644editdlrm
run-script.js62210644editdlrm
sbom.js46160644editdlrm
search.js18770644editdlrm
set.js6710644editdlrm
shrinkwrap.js27120644editdlrm
star.js19110644editdlrm
stars.js10520644editdlrm
start.js3000644editdlrm
stop.js2950644editdlrm
team.js44610644editdlrm
test.js2950644editdlrm
token.js61600644editdlrm
uninstall.js15610644editdlrm
unpublish.js53940644editdlrm
unstar.js1830644editdlrm
update.js17650644editdlrm
version.js36280644editdlrm
view.js131060644editdlrm
whoami.js5270644editdlrm
Edit: /snap/node/11691/lib/node_modules/npm/lib/commands/explain.js (3661B)
const { explainNode } = require('../utils/explain-dep.js') const npa = require('npm-package-arg') const semver = require('semver') const { relative, resolve } = require('node:path') const validName = require('validate-npm-package-name') const { output } = require('proc-log') const ArboristWorkspaceCmd = require('../arborist-cmd.js') class Explain extends ArboristWorkspaceCmd { static description = 'Explain installed packages' static name = 'explain' static usage = [''] static params = [ 'json', 'workspace', ] static ignoreImplicitWorkspace = false // TODO /* istanbul ignore next */ static async completion (opts, npm) { const completion = require('../utils/installed-deep.js') return completion(npm, opts) } async exec (args) { if (!args.length) { throw this.usageError() } const Arborist = require('@npmcli/arborist') const arb = new Arborist({ path: this.npm.prefix, ...this.npm.flatOptions }) const tree = await arb.loadActual() if (this.npm.flatOptions.workspacesEnabled && this.workspaceNames && this.workspaceNames.length ) { this.filterSet = arb.workspaceDependencySet(tree, this.workspaceNames) } else if (!this.npm.flatOptions.workspacesEnabled) { this.filterSet = arb.excludeWorkspacesDependencySet(tree) } const nodes = new Set() for (const arg of args) { for (const node of this.getNodes(tree, arg)) { const filteredOut = this.filterSet && this.filterSet.size > 0 && !this.filterSet.has(node) if (!filteredOut) { nodes.add(node) } } } if (nodes.size === 0) { throw new Error(`No dependencies found matching ${args.join(', ')}`) } const expls = [] for (const node of nodes) { const { extraneous, dev, optional, devOptional, peer, inBundle, overridden } = node const expl = node.explain() if (extraneous) { expl.extraneous = true } else { expl.dev = dev expl.optional = optional expl.devOptional = devOptional expl.peer = peer expl.bundled = inBundle expl.overridden = overridden } expls.push(expl) } if (this.npm.flatOptions.json) { output.buffer(expls) } else { output.standard(expls.map(expl => { return explainNode(expl, Infinity, this.npm.chalk) }).join('\n\n')) } } getNodes (tree, arg) { // if it's just a name, return packages by that name const { validForOldPackages: valid } = validName(arg) if (valid) { return tree.inventory.query('packageName', arg) } // if it's a location, get that node const maybeLoc = arg.replace(/\\/g, '/').replace(/\/+$/, '') const nodeByLoc = tree.inventory.get(maybeLoc) if (nodeByLoc) { return [nodeByLoc] } // maybe a path to a node_modules folder const maybePath = relative(this.npm.prefix, resolve(maybeLoc)) .replace(/\\/g, '/').replace(/\/+$/, '') const nodeByPath = tree.inventory.get(maybePath) if (nodeByPath) { return [nodeByPath] } // otherwise, try to select all matching nodes try { return this.getNodesByVersion(tree, arg) } catch (er) { return [] } } getNodesByVersion (tree, arg) { const spec = npa(arg, this.npm.prefix) if (spec.type !== 'version' && spec.type !== 'range') { return [] } return tree.inventory.filter(node => { return node.package.name === spec.name && semver.satisfies(node.package.version, spec.rawSpec) }) } } module.exports = Explain