Skip to content

Commit

Permalink
fix(arborist): _findMissingEdges missing dependency due to inconsist…
Browse files Browse the repository at this point in the history
…ent path separators (#4261)

Co-authored-by: Salvador Jacobi <[email protected]>
  • Loading branch information
fritzy and salvadorj authored Mar 15, 2022
1 parent f66290e commit 0e7511d
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
2 changes: 1 addition & 1 deletion workspaces/arborist/lib/arborist/load-actual.js
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ module.exports = cls => class ActualLoader extends cls {
if (d.dummy) {
// it's a placeholder, so likely would not have loaded this dep,
// unless another dep in the tree also needs it.
const depPath = `${p}/node_modules/${name}`
const depPath = normalize(`${p}/node_modules/${name}`)
const cached = this[_cache].get(depPath)
if (!cached || cached.dummy) {
depPromises.push(this[_loadFSNode]({
Expand Down
45 changes: 45 additions & 0 deletions workspaces/arborist/test/arborist/load-actual.js
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,51 @@ t.test('load global space with link deps', async t => {
})
})

t.test('no edge errors for nested deps', async t => {
const path = t.testdir({
'package.json': JSON.stringify({
name: 'a',
version: '1.0.0',
dependencies: {
b: '1.0.0',
},
}),
node_modules: {
b: {
'package.json': JSON.stringify({
name: 'b',
version: '1.0.0',
dependencies: {
c: '1.0.0',
},
}),
},
c: {
'package.json': JSON.stringify({
name: 'c',
version: '1.0.0',
}),
},
},
})

// disable treeCheck since it prevents the original issue from occuring
const ArboristNoTreeCheck = t.mock('../../lib/arborist', {
'../../lib/tree-check.js': tree => tree,
})
const loadActualNoTreeCheck = (path, opts) =>
new ArboristNoTreeCheck({ path, ...opts }).loadActual(opts)

const tree = await loadActualNoTreeCheck(path)

// assert that no outgoing edges have errors
for (const node of tree.inventory.values()) {
for (const [name, edge] of node.edgesOut.entries()) {
t.equal(edge.error, null, `node ${node.name} has outgoing edge to ${name} with error ${edge.error}`)
}
}
})

t.test('loading a workspace maintains overrides', async t => {
const path = t.testdir({
'package.json': JSON.stringify({
Expand Down

0 comments on commit 0e7511d

Please sign in to comment.