Skip to content

Commit f662686

Browse files
authored
chore(css selector): temporarily remove light dom shortcut (#2008)
1 parent 8aab725 commit f662686

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

src/injected/cssSelectorEngine.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -81,26 +81,28 @@ export function createCSSEngine(shadow: boolean): SelectorEngine {
8181
},
8282

8383
query(root: SelectorRoot, selector: string): Element | undefined {
84-
const simple = root.querySelector(selector);
85-
if (simple)
86-
return simple;
87-
if (!shadow)
88-
return;
84+
// TODO: uncomment for performance.
85+
// const simple = root.querySelector(selector);
86+
// if (simple)
87+
// return simple;
88+
// if (!shadow)
89+
// return;
8990
const parts = split(selector);
9091
if (!parts.length)
9192
return;
9293
parts.reverse();
93-
return queryShadowInternal(root, root, parts);
94+
return queryShadowInternal(root, root, parts, shadow);
9495
},
9596

9697
queryAll(root: SelectorRoot, selector: string): Element[] {
97-
if (!shadow)
98-
return Array.from(root.querySelectorAll(selector));
98+
// TODO: uncomment for performance.
99+
// if (!shadow)
100+
// return Array.from(root.querySelectorAll(selector));
99101
const result: Element[] = [];
100102
const parts = split(selector);
101103
if (parts.length) {
102104
parts.reverse();
103-
queryShadowAllInternal(root, root, parts, result);
105+
queryShadowAllInternal(root, root, parts, shadow, result);
104106
}
105107
return result;
106108
}
@@ -109,43 +111,45 @@ export function createCSSEngine(shadow: boolean): SelectorEngine {
109111
return engine;
110112
}
111113

112-
function queryShadowInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[]): Element | undefined {
114+
function queryShadowInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[], shadow: boolean): Element | undefined {
113115
const matching = root.querySelectorAll(parts[0]);
114116
for (let i = 0; i < matching.length; i++) {
115117
const element = matching[i];
116118
if (parts.length === 1 || matches(element, parts, boundary))
117119
return element;
118120
}
121+
if (!shadow)
122+
return;
119123
if ((root as Element).shadowRoot) {
120-
const child = queryShadowInternal(boundary, (root as Element).shadowRoot!, parts);
124+
const child = queryShadowInternal(boundary, (root as Element).shadowRoot!, parts, shadow);
121125
if (child)
122126
return child;
123127
}
124128
const elements = root.querySelectorAll('*');
125129
for (let i = 0; i < elements.length; i++) {
126130
const element = elements[i];
127131
if (element.shadowRoot) {
128-
const child = queryShadowInternal(boundary, element.shadowRoot, parts);
132+
const child = queryShadowInternal(boundary, element.shadowRoot, parts, shadow);
129133
if (child)
130134
return child;
131135
}
132136
}
133137
}
134138

135-
function queryShadowAllInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[], result: Element[]) {
139+
function queryShadowAllInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[], shadow: boolean, result: Element[]) {
136140
const matching = root.querySelectorAll(parts[0]);
137141
for (let i = 0; i < matching.length; i++) {
138142
const element = matching[i];
139143
if (parts.length === 1 || matches(element, parts, boundary))
140144
result.push(element);
141145
}
142-
if ((root as Element).shadowRoot)
143-
queryShadowAllInternal(boundary, (root as Element).shadowRoot!, parts, result);
146+
if (shadow && (root as Element).shadowRoot)
147+
queryShadowAllInternal(boundary, (root as Element).shadowRoot!, parts, shadow, result);
144148
const elements = root.querySelectorAll('*');
145149
for (let i = 0; i < elements.length; i++) {
146150
const element = elements[i];
147-
if (element.shadowRoot)
148-
queryShadowAllInternal(boundary, element.shadowRoot, parts, result);
151+
if (shadow && element.shadowRoot)
152+
queryShadowAllInternal(boundary, element.shadowRoot, parts, shadow, result);
149153
}
150154
}
151155

0 commit comments

Comments
 (0)