@npmcli/arborist 5.0.1 → 5.0.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/lib/arborist/build-ideal-tree.js +22 -2
- package/lib/arborist/load-actual.js +1 -1
- package/lib/arborist/load-virtual.js +3 -2
- package/lib/arborist/rebuild.js +13 -14
- package/lib/arborist/reify.js +18 -9
- package/lib/tracker.js +7 -3
- package/package.json +15 -17
|
@@ -355,6 +355,21 @@ Try using the package name instead, e.g:
|
|
|
355
355
|
})
|
|
356
356
|
|
|
357
357
|
.then(tree => {
|
|
358
|
+
// search the virtual tree for invalid edges, if any are found add their source to
|
|
359
|
+
// the depsQueue so that we'll fix it later
|
|
360
|
+
depth({
|
|
361
|
+
tree,
|
|
362
|
+
getChildren: (node) => [...node.edgesOut.values()].map(edge => edge.to),
|
|
363
|
+
filter: node => node,
|
|
364
|
+
visit: node => {
|
|
365
|
+
for (const edge of node.edgesOut.values()) {
|
|
366
|
+
if (!edge.valid) {
|
|
367
|
+
this[_depsQueue].push(node)
|
|
368
|
+
break // no need to continue the loop after the first hit
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
})
|
|
358
373
|
// null the virtual tree, because we're about to hack away at it
|
|
359
374
|
// if you want another one, load another copy.
|
|
360
375
|
this.idealTree = tree
|
|
@@ -743,6 +758,12 @@ This is a one-time fix-up, please be patient...
|
|
|
743
758
|
continue
|
|
744
759
|
}
|
|
745
760
|
|
|
761
|
+
// if the node's location isn't within node_modules then this is actually
|
|
762
|
+
// a link target, so skip it. the link node itself will be queued later.
|
|
763
|
+
if (!node.location.startsWith('node_modules')) {
|
|
764
|
+
continue
|
|
765
|
+
}
|
|
766
|
+
|
|
746
767
|
queue.push(async () => {
|
|
747
768
|
log.silly('inflate', node.location)
|
|
748
769
|
const { resolved, version, path, name, location, integrity } = node
|
|
@@ -750,8 +771,7 @@ This is a one-time fix-up, please be patient...
|
|
|
750
771
|
const useResolved = resolved && (
|
|
751
772
|
!version || resolved.startsWith('file:')
|
|
752
773
|
)
|
|
753
|
-
const id = useResolved ? resolved
|
|
754
|
-
: version || `file:${node.path}`
|
|
774
|
+
const id = useResolved ? resolved : version
|
|
755
775
|
const spec = npa.resolve(name, id, dirname(path))
|
|
756
776
|
const t = `idealTree:inflate:${location}`
|
|
757
777
|
this.addTracker(t)
|
|
@@ -435,7 +435,7 @@ module.exports = cls => class ActualLoader extends cls {
|
|
|
435
435
|
if (d.dummy) {
|
|
436
436
|
// it's a placeholder, so likely would not have loaded this dep,
|
|
437
437
|
// unless another dep in the tree also needs it.
|
|
438
|
-
const depPath = `${p}/node_modules/${name}`
|
|
438
|
+
const depPath = normalize(`${p}/node_modules/${name}`)
|
|
439
439
|
const cached = this[_cache].get(depPath)
|
|
440
440
|
if (!cached || cached.dummy) {
|
|
441
441
|
depPromises.push(this[_loadFSNode]({
|
|
@@ -79,7 +79,7 @@ module.exports = cls => class VirtualLoader extends cls {
|
|
|
79
79
|
async [loadRoot] (s) {
|
|
80
80
|
const pj = this.path + '/package.json'
|
|
81
81
|
const pkg = await rpj(pj).catch(() => s.data.packages['']) || {}
|
|
82
|
-
return this[loadWorkspaces](this[loadNode]('', pkg))
|
|
82
|
+
return this[loadWorkspaces](this[loadNode]('', pkg, true))
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
async [loadFromShrinkwrap] (s, root) {
|
|
@@ -264,7 +264,7 @@ module.exports = cls => class VirtualLoader extends cls {
|
|
|
264
264
|
}
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
-
[loadNode] (location, sw) {
|
|
267
|
+
[loadNode] (location, sw, loadOverrides) {
|
|
268
268
|
const p = this.virtualTree ? this.virtualTree.realpath : this.path
|
|
269
269
|
const path = resolve(p, location)
|
|
270
270
|
// shrinkwrap doesn't include package name unless necessary
|
|
@@ -290,6 +290,7 @@ module.exports = cls => class VirtualLoader extends cls {
|
|
|
290
290
|
optional,
|
|
291
291
|
devOptional,
|
|
292
292
|
peer,
|
|
293
|
+
loadOverrides,
|
|
293
294
|
})
|
|
294
295
|
// cast to boolean because they're undefined in the lock file when false
|
|
295
296
|
node.extraneous = !!sw.extraneous
|
package/lib/arborist/rebuild.js
CHANGED
|
@@ -136,15 +136,19 @@ module.exports = cls => class Builder extends cls {
|
|
|
136
136
|
process.emit('time', `build:${type}`)
|
|
137
137
|
|
|
138
138
|
await this[_buildQueues](nodes)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
139
|
+
// links should run prepare scripts and only link bins after that
|
|
140
|
+
if (type !== 'links') {
|
|
141
|
+
if (!this[_ignoreScripts]) {
|
|
142
|
+
await this[_runScripts]('preinstall')
|
|
143
|
+
}
|
|
144
|
+
if (this[_binLinks]) {
|
|
145
|
+
await this[_linkAllBins]()
|
|
146
|
+
}
|
|
147
|
+
if (!this[_ignoreScripts]) {
|
|
148
|
+
await this[_runScripts]('install')
|
|
149
|
+
await this[_runScripts]('postinstall')
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
148
152
|
await this[_runScripts]('prepare')
|
|
149
153
|
|
|
150
154
|
if (this[_binLinks]) {
|
|
@@ -152,11 +156,6 @@ module.exports = cls => class Builder extends cls {
|
|
|
152
156
|
}
|
|
153
157
|
}
|
|
154
158
|
|
|
155
|
-
if (!this[_ignoreScripts]) {
|
|
156
|
-
await this[_runScripts]('install')
|
|
157
|
-
await this[_runScripts]('postinstall')
|
|
158
|
-
}
|
|
159
|
-
|
|
160
159
|
process.emit('timeEnd', `build:${type}`)
|
|
161
160
|
}
|
|
162
161
|
|
package/lib/arborist/reify.js
CHANGED
|
@@ -1225,14 +1225,23 @@ module.exports = cls => class Reifier extends cls {
|
|
|
1225
1225
|
newSpec = h.shortcut(opt)
|
|
1226
1226
|
}
|
|
1227
1227
|
} else if (isLocalDep) {
|
|
1228
|
-
//
|
|
1229
|
-
//
|
|
1230
|
-
//
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1228
|
+
// when finding workspace nodes, make sure that
|
|
1229
|
+
// we save them using their version instead of
|
|
1230
|
+
// using their relative path
|
|
1231
|
+
if (edge.type === 'workspace') {
|
|
1232
|
+
const { version } = edge.to.target
|
|
1233
|
+
const prefixRange = version ? this[_savePrefix] + version : '*'
|
|
1234
|
+
newSpec = prefixRange
|
|
1235
|
+
} else {
|
|
1236
|
+
// save the relative path in package.json
|
|
1237
|
+
// Normally saveSpec is updated with the proper relative
|
|
1238
|
+
// path already, but it's possible to specify a full absolute
|
|
1239
|
+
// path initially, in which case we can end up with the wrong
|
|
1240
|
+
// thing, so just get the ultimate fetchSpec and relativize it.
|
|
1241
|
+
const p = req.fetchSpec.replace(/^file:/, '')
|
|
1242
|
+
const rel = relpath(addTree.realpath, p)
|
|
1243
|
+
newSpec = `file:${rel}`
|
|
1244
|
+
}
|
|
1236
1245
|
} else {
|
|
1237
1246
|
newSpec = req.saveSpec
|
|
1238
1247
|
}
|
|
@@ -1299,7 +1308,7 @@ module.exports = cls => class Reifier extends cls {
|
|
|
1299
1308
|
// to only names that are found in this list
|
|
1300
1309
|
const retrieveUpdatedNodes = names => {
|
|
1301
1310
|
const filterDirectDependencies = node =>
|
|
1302
|
-
!node.isRoot && node.resolveParent.isRoot
|
|
1311
|
+
!node.isRoot && node.resolveParent && node.resolveParent.isRoot
|
|
1303
1312
|
&& (!names || names.includes(node.name))
|
|
1304
1313
|
&& exactVersion(node) // skip update for exact ranges
|
|
1305
1314
|
|
package/lib/tracker.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
const _progress = Symbol('_progress')
|
|
2
2
|
const _onError = Symbol('_onError')
|
|
3
|
+
const _setProgress = Symbol('_setProgess')
|
|
3
4
|
const npmlog = require('npmlog')
|
|
4
5
|
|
|
5
6
|
module.exports = cls => class Tracker extends cls {
|
|
6
7
|
constructor (options = {}) {
|
|
7
8
|
super(options)
|
|
9
|
+
this[_setProgress] = !!options.progress
|
|
8
10
|
this[_progress] = new Map()
|
|
9
11
|
}
|
|
10
12
|
|
|
@@ -27,7 +29,7 @@ module.exports = cls => class Tracker extends cls {
|
|
|
27
29
|
// 1. no existing tracker, no subsection
|
|
28
30
|
// Create a new tracker from npmlog
|
|
29
31
|
// starts progress bar
|
|
30
|
-
if (this[_progress].size === 0) {
|
|
32
|
+
if (this[_setProgress] && this[_progress].size === 0) {
|
|
31
33
|
npmlog.enableProgress()
|
|
32
34
|
}
|
|
33
35
|
|
|
@@ -76,7 +78,7 @@ module.exports = cls => class Tracker extends cls {
|
|
|
76
78
|
|
|
77
79
|
// remove progress bar if all
|
|
78
80
|
// trackers are finished
|
|
79
|
-
if (this[_progress].size === 0) {
|
|
81
|
+
if (this[_setProgress] && this[_progress].size === 0) {
|
|
80
82
|
npmlog.disableProgress()
|
|
81
83
|
}
|
|
82
84
|
} else if (!hasTracker && subsection === null) {
|
|
@@ -92,7 +94,9 @@ module.exports = cls => class Tracker extends cls {
|
|
|
92
94
|
}
|
|
93
95
|
|
|
94
96
|
[_onError] (msg) {
|
|
95
|
-
|
|
97
|
+
if (this[_setProgress]) {
|
|
98
|
+
npmlog.disableProgress()
|
|
99
|
+
}
|
|
96
100
|
throw new Error(msg)
|
|
97
101
|
}
|
|
98
102
|
}
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@npmcli/arborist",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4",
|
|
4
4
|
"description": "Manage node_modules trees",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@isaacs/string-locale-compare": "^1.1.0",
|
|
7
7
|
"@npmcli/installed-package-contents": "^1.0.7",
|
|
8
8
|
"@npmcli/map-workspaces": "^2.0.0",
|
|
9
|
-
"@npmcli/metavuln-calculator": "^3.0.
|
|
9
|
+
"@npmcli/metavuln-calculator": "^3.0.1",
|
|
10
10
|
"@npmcli/move-file": "^1.1.0",
|
|
11
11
|
"@npmcli/name-from-folder": "^1.0.1",
|
|
12
12
|
"@npmcli/node-gyp": "^1.0.3",
|
|
13
13
|
"@npmcli/package-json": "^1.0.1",
|
|
14
14
|
"@npmcli/run-script": "^3.0.0",
|
|
15
15
|
"bin-links": "^3.0.0",
|
|
16
|
-
"cacache": "^
|
|
16
|
+
"cacache": "^16.0.0",
|
|
17
17
|
"common-ancestor-path": "^1.0.1",
|
|
18
18
|
"json-parse-even-better-errors": "^2.3.1",
|
|
19
19
|
"json-stringify-nice": "^1.1.4",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"npm-pick-manifest": "^7.0.0",
|
|
26
26
|
"npm-registry-fetch": "^13.0.0",
|
|
27
27
|
"npmlog": "^6.0.1",
|
|
28
|
-
"pacote": "^13.0.
|
|
28
|
+
"pacote": "^13.0.5",
|
|
29
29
|
"parse-conflict-json": "^2.0.1",
|
|
30
30
|
"proc-log": "^2.0.0",
|
|
31
31
|
"promise-all-reject-late": "^1.0.0",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"walk-up-path": "^1.0.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@npmcli/
|
|
42
|
+
"@npmcli/eslint-config": "^3.0.1",
|
|
43
|
+
"@npmcli/template-oss": "3.2.2",
|
|
43
44
|
"benchmark": "^2.1.4",
|
|
44
45
|
"chalk": "^4.1.0",
|
|
45
46
|
"minify-registry-metadata": "^2.1.0",
|
|
@@ -57,24 +58,24 @@
|
|
|
57
58
|
"postversion": "npm publish",
|
|
58
59
|
"prepublishOnly": "git push origin --follow-tags",
|
|
59
60
|
"eslint": "eslint",
|
|
60
|
-
"lint": "eslint
|
|
61
|
+
"lint": "eslint \"**/*.js\"",
|
|
61
62
|
"lintfix": "npm run lint -- --fix",
|
|
62
63
|
"benchmark": "node scripts/benchmark.js",
|
|
63
64
|
"benchclean": "rm -rf scripts/benchmark/*/",
|
|
64
65
|
"npmclilint": "npmcli-lint",
|
|
65
|
-
"postlint": "
|
|
66
|
-
"template-
|
|
66
|
+
"postlint": "template-oss-check",
|
|
67
|
+
"template-oss-apply": "template-oss-apply --force"
|
|
67
68
|
},
|
|
68
69
|
"repository": {
|
|
69
70
|
"type": "git",
|
|
70
|
-
"url": "https://github.com/npm/cli",
|
|
71
|
+
"url": "https://github.com/npm/cli.git",
|
|
71
72
|
"directory": "workspaces/arborist"
|
|
72
73
|
},
|
|
73
74
|
"author": "GitHub Inc.",
|
|
74
75
|
"license": "ISC",
|
|
75
76
|
"files": [
|
|
76
|
-
"bin",
|
|
77
|
-
"lib"
|
|
77
|
+
"bin/",
|
|
78
|
+
"lib/"
|
|
78
79
|
],
|
|
79
80
|
"main": "lib/index.js",
|
|
80
81
|
"bin": {
|
|
@@ -96,13 +97,10 @@
|
|
|
96
97
|
"timeout": "360"
|
|
97
98
|
},
|
|
98
99
|
"engines": {
|
|
99
|
-
"node": "^12.13.0 || ^14.15.0 || >=16"
|
|
100
|
+
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
|
100
101
|
},
|
|
101
|
-
"eslintIgnore": [
|
|
102
|
-
"test/fixtures/",
|
|
103
|
-
"!test/fixtures/*.js"
|
|
104
|
-
],
|
|
105
102
|
"templateOSS": {
|
|
106
|
-
"
|
|
103
|
+
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
|
|
104
|
+
"version": "3.2.2"
|
|
107
105
|
}
|
|
108
106
|
}
|