@npmcli/arborist 2.6.3 → 2.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/lib/timers.js CHANGED
@@ -1,5 +1,6 @@
1
1
  const timers = Object.create(null)
2
2
  const { format } = require('util')
3
+ const options = require('./options.js')
3
4
 
4
5
  process.on('time', name => {
5
6
  if (timers[name])
@@ -15,7 +16,8 @@ process.on('timeEnd', name => {
15
16
  const res = process.hrtime(timers[name])
16
17
  delete timers[name]
17
18
  const msg = format(`${process.pid} ${name}`, res[0] * 1e3 + res[1] / 1e6)
18
- console.error(dim(msg))
19
+ if (options.timers !== false)
20
+ console.error(dim(msg))
19
21
  })
20
22
 
21
23
  process.on('exit', () => {
@@ -15,6 +15,7 @@ const mkdirp = require('mkdirp-infer-owner')
15
15
  const justMkdirp = require('mkdirp')
16
16
  const moveFile = require('@npmcli/move-file')
17
17
  const rimraf = promisify(require('rimraf'))
18
+ const PackageJson = require('@npmcli/package-json')
18
19
  const packageContents = require('@npmcli/installed-package-contents')
19
20
  const { checkEngine, checkPlatform } = require('npm-install-checks')
20
21
 
@@ -24,7 +25,6 @@ const Diff = require('../diff.js')
24
25
  const retirePath = require('../retire-path.js')
25
26
  const promiseAllRejectLate = require('promise-all-reject-late')
26
27
  const optionalSet = require('../optional-set.js')
27
- const updateRootPackageJson = require('../update-root-package-json.js')
28
28
  const calcDepFlags = require('../calc-dep-flags.js')
29
29
  const { saveTypeMap, hasSubKey } = require('../add-rm-pkg-deps.js')
30
30
 
@@ -1029,6 +1029,25 @@ module.exports = cls => class Reifier extends cls {
1029
1029
 
1030
1030
  const promises = [this[_saveLockFile](saveOpt)]
1031
1031
 
1032
+ const updatePackageJson = async (tree) => {
1033
+ const pkgJson = await PackageJson.load(tree.path)
1034
+ .catch(() => new PackageJson(tree.path))
1035
+ const {
1036
+ dependencies = {},
1037
+ devDependencies = {},
1038
+ optionalDependencies = {},
1039
+ peerDependencies = {},
1040
+ } = tree.package
1041
+
1042
+ pkgJson.update({
1043
+ dependencies,
1044
+ devDependencies,
1045
+ optionalDependencies,
1046
+ peerDependencies,
1047
+ })
1048
+ await pkgJson.save()
1049
+ }
1050
+
1032
1051
  // grab any from explicitRequests that had deps removed
1033
1052
  for (const { from: tree } of this.explicitRequests)
1034
1053
  updatedTrees.add(tree)
@@ -1036,7 +1055,7 @@ module.exports = cls => class Reifier extends cls {
1036
1055
  for (const tree of updatedTrees) {
1037
1056
  // refresh the edges so they have the correct specs
1038
1057
  tree.package = tree.package
1039
- promises.push(updateRootPackageJson(tree))
1058
+ promises.push(updatePackageJson(tree))
1040
1059
  }
1041
1060
 
1042
1061
  await Promise.all(promises)
package/lib/diff.js CHANGED
@@ -145,9 +145,9 @@ const allChildren = node => {
145
145
  if (!node)
146
146
  return new Map()
147
147
 
148
- // if the node is a global root, and also a link, then what we really
148
+ // if the node is root, and also a link, then what we really
149
149
  // want is to traverse the target's children
150
- if (node.global && node.isRoot && node.isLink)
150
+ if (node.isRoot && node.isLink)
151
151
  return allChildren(node.target)
152
152
 
153
153
  const kids = new Map()
package/lib/shrinkwrap.js CHANGED
@@ -349,6 +349,7 @@ class Shrinkwrap {
349
349
  reset () {
350
350
  this.tree = null
351
351
  this[_awaitingUpdate] = new Map()
352
+ this.originalLockfileVersion = lockfileVersion
352
353
  this.data = {
353
354
  lockfileVersion,
354
355
  requires: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@npmcli/arborist",
3
- "version": "2.6.3",
3
+ "version": "2.6.4",
4
4
  "description": "Manage node_modules trees",
5
5
  "dependencies": {
6
6
  "@npmcli/installed-package-contents": "^1.0.7",
@@ -9,6 +9,7 @@
9
9
  "@npmcli/move-file": "^1.1.0",
10
10
  "@npmcli/name-from-folder": "^1.0.1",
11
11
  "@npmcli/node-gyp": "^1.0.1",
12
+ "@npmcli/package-json": "^1.0.1",
12
13
  "@npmcli/run-script": "^1.8.2",
13
14
  "bin-links": "^2.2.1",
14
15
  "cacache": "^15.0.3",
@@ -1,95 +0,0 @@
1
- const fs = require('fs')
2
- const promisify = require('util').promisify
3
- const readFile = promisify(fs.readFile)
4
- const writeFile = promisify(fs.writeFile)
5
- const {resolve} = require('path')
6
-
7
- const parseJSON = require('json-parse-even-better-errors')
8
-
9
- const depTypes = new Set([
10
- 'dependencies',
11
- 'optionalDependencies',
12
- 'devDependencies',
13
- 'peerDependencies',
14
- ])
15
-
16
- // sort alphabetically all types of deps for a given package
17
- const orderDeps = (pkg) => {
18
- for (const type of depTypes) {
19
- if (pkg && pkg[type]) {
20
- pkg[type] = Object.keys(pkg[type])
21
- .sort((a, b) => a.localeCompare(b, 'en'))
22
- .reduce((res, key) => {
23
- res[key] = pkg[type][key]
24
- return res
25
- }, {})
26
- }
27
- }
28
- return pkg
29
- }
30
- const parseJsonSafe = json => {
31
- try {
32
- return parseJSON(json)
33
- } catch (er) {
34
- return null
35
- }
36
- }
37
-
38
- const updateRootPackageJson = async tree => {
39
- const filename = resolve(tree.path, 'package.json')
40
- const originalJson = await readFile(filename, 'utf8').catch(() => null)
41
- const originalContent = parseJsonSafe(originalJson)
42
-
43
- const depsData = orderDeps({
44
- ...tree.package,
45
- })
46
-
47
- // optionalDependencies don't need to be repeated in two places
48
- if (depsData.dependencies) {
49
- if (depsData.optionalDependencies) {
50
- for (const name of Object.keys(depsData.optionalDependencies))
51
- delete depsData.dependencies[name]
52
- }
53
- if (Object.keys(depsData.dependencies).length === 0)
54
- delete depsData.dependencies
55
- }
56
-
57
- // if there's no package.json, just use internal pkg info as source of truth
58
- // clone the object though, so we can still refer to what it originally was
59
- const packageJsonContent = !originalContent ? depsData
60
- : Object.assign({}, originalContent)
61
-
62
- // loop through all types of dependencies and update package json content
63
- for (const type of depTypes)
64
- packageJsonContent[type] = depsData[type]
65
-
66
- // if original package.json had dep in peerDeps AND deps, preserve that.
67
- const { dependencies: origProd, peerDependencies: origPeer } =
68
- originalContent || {}
69
- const { peerDependencies: newPeer } = packageJsonContent
70
- if (origProd && origPeer && newPeer) {
71
- // we have original prod/peer deps, and new peer deps
72
- // copy over any that were in both in the original
73
- for (const name of Object.keys(origPeer)) {
74
- if (origProd[name] !== undefined && newPeer[name] !== undefined) {
75
- packageJsonContent.dependencies = packageJsonContent.dependencies || {}
76
- packageJsonContent.dependencies[name] = newPeer[name]
77
- }
78
- }
79
- }
80
-
81
- // format content
82
- const {
83
- [Symbol.for('indent')]: indent,
84
- [Symbol.for('newline')]: newline,
85
- } = tree.package
86
- const format = indent === undefined ? ' ' : indent
87
- const eol = newline === undefined ? '\n' : newline
88
- const content = (JSON.stringify(packageJsonContent, null, format) + '\n')
89
- .replace(/\n/g, eol)
90
-
91
- if (content !== originalJson)
92
- return writeFile(filename, content)
93
- }
94
-
95
- module.exports = updateRootPackageJson