/
home
/
techb158
/
.nvm
/
versions
/
node
/
v16.20.2
/
lib
/
node_modules
/
npm
/
lib
/
commands
/
/home/techb158/.nvm/versions/node/v16.20.2/lib/node_modules/npm/lib/commands
mkdir
upload
Name
Size
Mode
Actions
access.js
5585
0644
edit
dl
rm
adduser.js
2253
0644
edit
dl
rm
audit.js
12234
0644
edit
dl
rm
bin.js
729
0644
edit
dl
rm
birthday.js
508
0644
edit
dl
rm
bugs.js
815
0644
edit
dl
rm
cache.js
7247
0644
edit
dl
rm
ci.js
3715
0644
edit
dl
rm
completion.js
9124
0644
edit
dl
rm
config.js
8308
0644
edit
dl
rm
dedupe.js
1405
0644
edit
dl
rm
deprecate.js
2109
0644
edit
dl
rm
diff.js
8291
0644
edit
dl
rm
dist-tag.js
5604
0644
edit
dl
rm
docs.js
447
0644
edit
dl
rm
doctor.js
9446
0644
edit
dl
rm
edit.js
2047
0644
edit
dl
rm
exec.js
2499
0644
edit
dl
rm
explain.js
3639
0644
edit
dl
rm
explore.js
2387
0644
edit
dl
rm
find-dupes.js
602
0644
edit
dl
rm
fund.js
6524
0644
edit
dl
rm
get.js
524
0644
edit
dl
rm
help-search.js
5755
0644
edit
dl
rm
help.js
4637
0644
edit
dl
rm
hook.js
4027
0644
edit
dl
rm
init.js
6972
0644
edit
dl
rm
install-ci-test.js
377
0644
edit
dl
rm
install-test.js
374
0644
edit
dl
rm
install.js
5236
0644
edit
dl
rm
link.js
5141
0644
edit
dl
rm
ll.js
234
0644
edit
dl
rm
logout.js
1377
0644
edit
dl
rm
ls.js
17351
0644
edit
dl
rm
org.js
4305
0644
edit
dl
rm
outdated.js
9050
0644
edit
dl
rm
owner.js
6018
0644
edit
dl
rm
pack.js
2419
0644
edit
dl
rm
ping.js
874
0644
edit
dl
rm
pkg.js
3554
0644
edit
dl
rm
prefix.js
343
0644
edit
dl
rm
profile.js
11525
0644
edit
dl
rm
prune.js
779
0644
edit
dl
rm
publish.js
6481
0644
edit
dl
rm
query.js
2873
0644
edit
dl
rm
rebuild.js
2214
0644
edit
dl
rm
repo.js
1272
0644
edit
dl
rm
restart.js
351
0644
edit
dl
rm
root.js
298
0644
edit
dl
rm
run-script.js
7067
0644
edit
dl
rm
search.js
2781
0644
edit
dl
rm
set-script.js
2698
0644
edit
dl
rm
set.js
572
0644
edit
dl
rm
shrinkwrap.js
2705
0644
edit
dl
rm
star.js
1911
0644
edit
dl
rm
stars.js
1052
0644
edit
dl
rm
start.js
341
0644
edit
dl
rm
stop.js
336
0644
edit
dl
rm
team.js
4545
0644
edit
dl
rm
test.js
336
0644
edit
dl
rm
token.js
6954
0644
edit
dl
rm
uninstall.js
1552
0644
edit
dl
rm
unpublish.js
4617
0644
edit
dl
rm
unstar.js
182
0644
edit
dl
rm
update.js
1738
0644
edit
dl
rm
version.js
3690
0644
edit
dl
rm
view.js
14723
0644
edit
dl
rm
whoami.js
514
0644
edit
dl
rm
Edit:
/home/techb158/.nvm/versions/node/v16.20.2/lib/node_modules/npm/lib/commands/diff.js
(8291B)
const { resolve } = require('path') const semver = require('semver') const libnpmdiff = require('libnpmdiff') const npa = require('npm-package-arg') const Arborist = require('@npmcli/arborist') const pacote = require('pacote') const pickManifest = require('npm-pick-manifest') const log = require('../utils/log-shim') const readPackage = require('read-package-json-fast') const BaseCommand = require('../base-command.js') class Diff extends BaseCommand { static description = 'The registry diff command' static name = 'diff' static usage = [ '[...<paths>]', ] static params = [ 'diff', 'diff-name-only', 'diff-unified', 'diff-ignore-all-space', 'diff-no-prefix', 'diff-src-prefix', 'diff-dst-prefix', 'diff-text', 'global', 'tag', 'workspace', 'workspaces', 'include-workspace-root', ] static ignoreImplicitWorkspace = false async exec (args) { const specs = this.npm.config.get('diff').filter(d => d) if (specs.length > 2) { throw this.usageError(`Can't use more than two --diff arguments.`) } // execWorkspaces may have set this already if (!this.prefix) { this.prefix = this.npm.prefix } // this is the "top" directory, one up from node_modules // in global mode we have to walk one up from globalDir because our // node_modules is sometimes under ./lib, and in global mode we're only ever // walking through node_modules (because we will have been given a package // name already) if (this.npm.global) { this.top = resolve(this.npm.globalDir, '..') } else { this.top = this.prefix } const [a, b] = await this.retrieveSpecs(specs) log.info('diff', { src: a, dst: b }) const res = await libnpmdiff([a, b], { ...this.npm.flatOptions, diffFiles: args, where: this.top, }) return this.npm.output(res) } async execWorkspaces (args, filters) { await this.setWorkspaces(filters) for (const workspacePath of this.workspacePaths) { this.top = workspacePath this.prefix = workspacePath await this.exec(args) } } // get the package name from the packument at `path` // throws if no packument is present OR if it does not have `name` attribute async packageName (path) { let name try { const pkg = await readPackage(resolve(this.prefix, 'package.json')) name = pkg.name } catch (e) { log.verbose('diff', 'could not read project dir package.json') } if (!name) { throw this.usageError('Needs multiple arguments to compare or run from a project dir.') } return name } async retrieveSpecs ([a, b]) { if (a && b) { const specs = await this.convertVersionsToSpecs([a, b]) return this.findVersionsByPackageName(specs) } // no arguments, defaults to comparing cwd // to its latest published registry version if (!a) { const pkgName = await this.packageName(this.prefix) return [ `${pkgName}@${this.npm.config.get('tag')}`, `file:${this.prefix.replace(/#/g, '%23')}`, ] } // single argument, used to compare wanted versions of an // installed dependency or to compare the cwd to a published version let noPackageJson let pkgName try { const pkg = await readPackage(resolve(this.prefix, 'package.json')) pkgName = pkg.name } catch (e) { log.verbose('diff', 'could not read project dir package.json') noPackageJson = true } const missingPackageJson = this.usageError('Needs multiple arguments to compare or run from a project dir.') // using a valid semver range, that means it should just diff // the cwd against a published version to the registry using the // same project name and the provided semver range if (semver.validRange(a)) { if (!pkgName) { throw missingPackageJson } return [ `${pkgName}@${a}`, `file:${this.prefix.replace(/#/g, '%23')}`, ] } // when using a single package name as arg and it's part of the current // install tree, then retrieve the current installed version and compare // it against the same value `npm outdated` would suggest you to update to const spec = npa(a) if (spec.registry) { let actualTree let node try { const opts = { ...this.npm.flatOptions, path: this.top, } const arb = new Arborist(opts) actualTree = await arb.loadActual(opts) node = actualTree && actualTree.inventory.query('name', spec.name) .values().next().value } catch (e) { log.verbose('diff', 'failed to load actual install tree') } if (!node || !node.name || !node.package || !node.package.version) { if (noPackageJson) { throw missingPackageJson } return [ `${spec.name}@${spec.fetchSpec}`, `file:${this.prefix.replace(/#/g, '%23')}`, ] } const tryRootNodeSpec = () => (actualTree && actualTree.edgesOut.get(spec.name) || {}).spec const tryAnySpec = () => { for (const edge of node.edgesIn) { return edge.spec } } const aSpec = `file:${node.realpath.replace(/#/g, '%23')}` // finds what version of the package to compare against, if a exact // version or tag was passed than it should use that, otherwise // work from the top of the arborist tree to find the original semver // range declared in the package that depends on the package. let bSpec if (spec.rawSpec) { bSpec = spec.rawSpec } else { const bTargetVersion = tryRootNodeSpec() || tryAnySpec() // figure out what to compare against, // follows same logic to npm outdated "Wanted" results const packument = await pacote.packument(spec, { ...this.npm.flatOptions, preferOnline: true, }) bSpec = pickManifest( packument, bTargetVersion, { ...this.npm.flatOptions } ).version } return [ `${spec.name}@${aSpec}`, `${spec.name}@${bSpec}`, ] } else if (spec.type === 'directory') { return [ `file:${spec.fetchSpec.replace(/#/g, '%23')}`, `file:${this.prefix.replace(/#/g, '%23')}`, ] } else { throw this.usageError(`Spec type ${spec.type} not supported.`) } } async convertVersionsToSpecs ([a, b]) { const semverA = semver.validRange(a) const semverB = semver.validRange(b) // both specs are semver versions, assume current project dir name if (semverA && semverB) { let pkgName try { const pkg = await readPackage(resolve(this.prefix, 'package.json')) pkgName = pkg.name } catch (e) { log.verbose('diff', 'could not read project dir package.json') } if (!pkgName) { throw this.usageError('Needs to be run from a project dir in order to diff two versions.') } return [`${pkgName}@${a}`, `${pkgName}@${b}`] } // otherwise uses the name from the other arg to // figure out the spec.name of what to compare if (!semverA && semverB) { return [a, `${npa(a).name}@${b}`] } if (semverA && !semverB) { return [`${npa(b).name}@${a}`, b] } // no valid semver ranges used return [a, b] } async findVersionsByPackageName (specs) { let actualTree try { const opts = { ...this.npm.flatOptions, path: this.top, } const arb = new Arborist(opts) actualTree = await arb.loadActual(opts) } catch (e) { log.verbose('diff', 'failed to load actual install tree') } return specs.map(i => { const spec = npa(i) if (spec.rawSpec) { return i } const node = actualTree && actualTree.inventory.query('name', spec.name) .values().next().value const res = !node || !node.package || !node.package.version ? spec.fetchSpec : `file:${node.realpath.replace(/#/g, '%23')}` return `${spec.name}@${res}` }) } } module.exports = Diff
Save
cmd:
run