Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion workspaces/arborist/lib/query-selector-all.js
Original file line number Diff line number Diff line change
Expand Up @@ -695,7 +695,11 @@ const depTypes = {
// the compare nodes array
const hasParent = (node, compareNodes) => {
// All it takes is one so we loop and return on the first hit
for (const compareNode of compareNodes) {
for (let compareNode of compareNodes) {
if (compareNode.isLink) {
compareNode = compareNode.target
}

// follows logical parent for link anscestors
if (node.isTop && (node.resolveParent === compareNode)) {
return true
Expand Down
64 changes: 51 additions & 13 deletions workspaces/arborist/test/query-selector-all.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ t.test('query-selector-all', async t => {
│ └── [email protected] (production dep of b, deduped)
├─┬ [email protected] (production dep of query-selector-all-tests)
│ └── [email protected] (production dep of bar)
|-┬ [email protected] -> ./c (workspace)
│ └── [email protected] (production dep of c, deduped)
├─┬ [email protected] (dev dep of query-selector-all-tests)
│ ├─┬ [email protected] (production dep of foo, deduped)
│ │ └── [email protected] (overridden peer dep of bar)
Expand Down Expand Up @@ -65,6 +67,9 @@ t.test('query-selector-all', async t => {
'1.0.0': undefined,
'1.0.1': yesterday,
},
c: {
'1.0.0': today,
},
'dash-separated-pkg': {
'1.0.0': dayBeforeYesterday,
'2.0.0': yesterday,
Expand Down Expand Up @@ -173,6 +178,7 @@ t.test('query-selector-all', async t => {
},
}),
},
c: t.fixture('symlink', '../c'),
foo: {
node_modules: {
bar: {
Expand Down Expand Up @@ -275,10 +281,19 @@ t.test('query-selector-all', async t => {
bar: '^2.0.0',
},
}) },
c: {
'package.json': JSON.stringify({
name: 'c',
version: '1.0.0',
dependencies: {
b: '^1.0.0',
},
}),
},
'package.json': JSON.stringify({
name: 'query-selector-all-tests',
version: '1.0.0',
workspaces: ['a', 'b'],
workspaces: ['a', 'b', 'c'],
dependencies: {
a: '^1.0.0',
abbrev: '^1.1.1',
Expand Down Expand Up @@ -387,6 +402,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'@npmcli/[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -404,6 +420,7 @@ t.test('query-selector-all', async t => {
['* > *', [
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -425,18 +442,19 @@ t.test('query-selector-all', async t => {
[':root > *', [
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'ipsum@npm:[email protected]',
'[email protected]',
'[email protected]',
]],
[':root > .workspace', ['[email protected]', '[email protected]']],
[':root > *.workspace', ['[email protected]', '[email protected]']],
[':root > .workspace', ['[email protected]', '[email protected]', '[email protected]']],
[':root > *.workspace', ['[email protected]', '[email protected]', '[email protected]']],
[':root > .workspace[name=a]', ['[email protected]']],
[':root > [name=bar]', ['[email protected]']],
[':root > .workspace[version=1.0.0]', ['[email protected]', '[email protected]']],
[':root > .workspace[version=1.0.0]', ['[email protected]', '[email protected]', '[email protected]']],
[':root > .workspace[name=a][version=1.0.0]', ['[email protected]']],
[':root > :root', []],
['* > :root', []],
Expand All @@ -452,6 +470,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -461,12 +480,12 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
]],
[':extraneous', ['@npmcli/[email protected]']],
[':invalid', ['[email protected]']],
[':link', ['[email protected]', '[email protected]']],
[':link', ['[email protected]', '[email protected]']],
[':link', ['[email protected]', '[email protected]', '[email protected]']],
[':deduped', [
'[email protected]',
'[email protected]',
Expand All @@ -481,6 +500,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'@npmcli/[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -494,34 +514,36 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
]],
[':root > .workspace:not(#b)', ['[email protected]']],
[':root > .workspace > *:not(#bar)', ['[email protected]', '[email protected]']],
[':root > .workspace:not(#b)', ['[email protected]', '[email protected]']],
[':root > .workspace > *:not(#bar)', ['[email protected]', '[email protected]', '[email protected]']],
['.bundled ~ :not(.workspace)', [
'[email protected]',
'[email protected]',
'ipsum@npm:[email protected]',
'[email protected]',
'[email protected]',
]],
['*:root > *:empty:not(*[name^=a], #b)', ['[email protected]']],
['*:root > *:empty:not(*[name^=a], #b, #c)', ['[email protected]']],
[':not(:not(:link))', [
'[email protected]',
'[email protected]',
'[email protected]',
]],

// has pseudo
[':root > *:has(* > #bar:semver(1.4.0))', ['[email protected]']],
['*:has(* > #bar:semver(1.4.0))', ['[email protected]']],
['*:has(> #bar:semver(1.4.0))', ['[email protected]']],
['.workspace:has(> * > #lorem)', ['[email protected]']],
['.workspace:has(* #lorem, ~ #b)', ['[email protected]', '[email protected]']],
['.workspace:has(* #lorem, ~ #b)', ['[email protected]', '[email protected]', '[email protected]']],

// is pseudo
[':is(#a, #b) > *', ['[email protected]', '[email protected]', '[email protected]']],
// TODO: ipsum is not empty but its child is missing so it doesn't return a
// result here
[':root > *:is(.prod:not(:empty), .dev > [name=bar]) > *', [
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -538,6 +560,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'@npmcli/[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -557,6 +580,7 @@ t.test('query-selector-all', async t => {
[':type(range)', [
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
Expand Down Expand Up @@ -584,11 +608,12 @@ t.test('query-selector-all', async t => {
[':path(./node_modules/bar)', ['[email protected]']],
[':path(node_modules/foo/node_modules/bar)', ['[email protected]']],
[':path(**/bar)', ['[email protected]', '[email protected]']],
[':path(*)', ['[email protected]', '[email protected]']],
[':path(*)', ['[email protected]', '[email protected]', '[email protected]']],
[':path()', [
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'@npmcli/[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -609,6 +634,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'@npmcli/[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -627,6 +653,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
Expand Down Expand Up @@ -690,6 +717,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'ipsum@npm:[email protected]',
Expand All @@ -702,6 +730,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
Expand All @@ -720,6 +749,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'ipsum@npm:[email protected]',
Expand All @@ -731,6 +761,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'ipsum@npm:[email protected]',
Expand Down Expand Up @@ -832,6 +863,7 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'@npmcli/[email protected]',
'[email protected]',
'[email protected]',
Expand Down Expand Up @@ -882,15 +914,18 @@ t.test('query-selector-all', async t => {
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'ipsum@npm:[email protected]',
'[email protected]',
'[email protected]',
]],
['.workspace', ['[email protected]', '[email protected]']],
['.workspace > *', ['[email protected]', '[email protected]', '[email protected]']],
['.workspace', ['[email protected]', '[email protected]', '[email protected]']],
['.workspace > *', ['[email protected]', '[email protected]', '[email protected]', '[email protected]']],
['.workspace .workspace', ['[email protected]', '[email protected]']],
['.workspace .workspace .workspace', ['[email protected]']],
['.workspace ~ *', [
'[email protected]',
'[email protected]',
Expand All @@ -911,9 +946,11 @@ t.test('query-selector-all', async t => {
'[email protected]',
]],
['.dev *', [
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
]],
Expand All @@ -923,6 +960,7 @@ t.test('query-selector-all', async t => {
['.bundled ~ *', [
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'[email protected]',
'ipsum@npm:[email protected]',
Expand Down