happy-dom 2.43.0 → 2.43.1

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.

Potentially problematic release.


This version of happy-dom might be problematic. Click here for more details.

@@ -25,6 +25,14 @@ export default class SelectorItem {
25
25
  * @returns TRUE if matching.
26
26
  */
27
27
  match(element: Element): boolean;
28
+ /**
29
+ * Matches a psuedo selector.
30
+ *
31
+ * @param element Element.
32
+ * @param selector Selector.
33
+ * @returns True if it is a match.
34
+ */
35
+ private matchesPsuedo;
28
36
  /**
29
37
  * Matches a nth-child selector.
30
38
  *
@@ -35,13 +43,13 @@ export default class SelectorItem {
35
43
  */
36
44
  private matchesNthChild;
37
45
  /**
38
- * Matches a psuedo selector.
46
+ * Matches a psuedo selector expression.
39
47
  *
40
48
  * @param element Element.
41
49
  * @param psuedo Psuedo name.
42
50
  * @returns True if it is a match.
43
51
  */
44
- private matchesPsuedo;
52
+ private matchesPsuedoExpression;
45
53
  /**
46
54
  * Matches attribute.
47
55
  *
@@ -50,6 +58,14 @@ export default class SelectorItem {
50
58
  * @returns True if it is a match.
51
59
  */
52
60
  private matchesAttribute;
61
+ /**
62
+ * Matches class.
63
+ *
64
+ * @param element Element.
65
+ * @param selector Selector.
66
+ * @returns True if it is a match.
67
+ */
68
+ private matchesClass;
53
69
  /**
54
70
  * Matches attribute name only.
55
71
  *
@@ -20,10 +20,10 @@ var SelectorItem = /** @class */ (function () {
20
20
  */
21
21
  function SelectorItem(selector) {
22
22
  this.tagName = null;
23
+ var isNotPseudo = selector.includes(':not(');
23
24
  this.isAll = selector === '*';
24
25
  this.isID = !this.isAll ? selector.startsWith('#') : false;
25
- this.isAttribute =
26
- !this.isAll && !this.isID && selector.includes('[') && !selector.includes(':not(');
26
+ this.isAttribute = !this.isAll && !this.isID && selector.includes('[') && !isNotPseudo;
27
27
  this.isPseudo = !this.isAll && !this.isID && selector.includes(':');
28
28
  this.isClass = !this.isAll && !this.isID && new RegExp(CLASS_REGEXP, 'g').test(selector);
29
29
  this.tagName = !this.isAll && !this.isID ? selector.match(TAG_NAME_REGEXP) : null;
@@ -40,7 +40,6 @@ var SelectorItem = /** @class */ (function () {
40
40
  */
41
41
  SelectorItem.prototype.match = function (element) {
42
42
  var selector = this.selector;
43
- var match;
44
43
  // Is all (*)
45
44
  if (this.isAll) {
46
45
  return true;
@@ -56,28 +55,12 @@ var SelectorItem = /** @class */ (function () {
56
55
  }
57
56
  }
58
57
  // Class match
59
- if (this.isClass) {
60
- var regexp = new RegExp(CLASS_REGEXP, 'g');
61
- while ((match = regexp.exec(selector))) {
62
- if (!element.classList.contains(match[1])) {
63
- return false;
64
- }
65
- }
58
+ if (this.isClass && !this.matchesClass(element, selector)) {
59
+ return false;
66
60
  }
67
61
  // Pseudo match
68
- if (this.isPseudo) {
69
- var regexp = new RegExp(PSUEDO_REGEXP, 'g');
70
- while ((match = regexp.exec(selector))) {
71
- if (match[1] && !this.matchesNthChild(element, match[1], match[2])) {
72
- return false;
73
- }
74
- else if (match[3] && this.matchesAttribute(element, match[3])) {
75
- return false;
76
- }
77
- else if (match[4] && !this.matchesPsuedo(element, match[4])) {
78
- return false;
79
- }
80
- }
62
+ if (this.isPseudo && !this.matchesPsuedo(element, selector)) {
63
+ return false;
81
64
  }
82
65
  // Attribute match
83
66
  if (this.isAttribute && !this.matchesAttribute(element, selector)) {
@@ -85,6 +68,32 @@ var SelectorItem = /** @class */ (function () {
85
68
  }
86
69
  return true;
87
70
  };
71
+ /**
72
+ * Matches a psuedo selector.
73
+ *
74
+ * @param element Element.
75
+ * @param selector Selector.
76
+ * @returns True if it is a match.
77
+ */
78
+ SelectorItem.prototype.matchesPsuedo = function (element, selector) {
79
+ var regexp = new RegExp(PSUEDO_REGEXP, 'g');
80
+ var match;
81
+ while ((match = regexp.exec(selector))) {
82
+ var isNotClass = match[3] && match[3].trim()[0] === '.';
83
+ if (match[1] && !this.matchesNthChild(element, match[1], match[2])) {
84
+ return false;
85
+ }
86
+ else if (match[3] &&
87
+ ((isNotClass && this.matchesClass(element, match[3])) ||
88
+ (!isNotClass && this.matchesAttribute(element, match[3])))) {
89
+ return false;
90
+ }
91
+ else if (match[4] && !this.matchesPsuedoExpression(element, match[4])) {
92
+ return false;
93
+ }
94
+ }
95
+ return true;
96
+ };
88
97
  /**
89
98
  * Matches a nth-child selector.
90
99
  *
@@ -136,13 +145,13 @@ var SelectorItem = /** @class */ (function () {
136
145
  return children[number - 1] === element;
137
146
  };
138
147
  /**
139
- * Matches a psuedo selector.
148
+ * Matches a psuedo selector expression.
140
149
  *
141
150
  * @param element Element.
142
151
  * @param psuedo Psuedo name.
143
152
  * @returns True if it is a match.
144
153
  */
145
- SelectorItem.prototype.matchesPsuedo = function (element, psuedo) {
154
+ SelectorItem.prototype.matchesPsuedoExpression = function (element, psuedo) {
146
155
  var parent = element.parentNode;
147
156
  if (!parent) {
148
157
  return false;
@@ -207,6 +216,26 @@ var SelectorItem = /** @class */ (function () {
207
216
  }
208
217
  return true;
209
218
  };
219
+ /**
220
+ * Matches class.
221
+ *
222
+ * @param element Element.
223
+ * @param selector Selector.
224
+ * @returns True if it is a match.
225
+ */
226
+ SelectorItem.prototype.matchesClass = function (element, selector) {
227
+ var regexp = new RegExp(CLASS_REGEXP, 'g');
228
+ var classList = element.className.split(' ');
229
+ var previousIndex = 0;
230
+ var match;
231
+ while ((match = regexp.exec(selector)) && match.index === previousIndex) {
232
+ if (!classList.includes(match[1])) {
233
+ return false;
234
+ }
235
+ previousIndex = match.index + match[0].length - 1;
236
+ }
237
+ return true;
238
+ };
210
239
  /**
211
240
  * Matches attribute name only.
212
241
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SelectorItem.js","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectorItem.js","sourceRoot":"","sources":["../../src/query-selector/SelectorItem.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-dom",
3
- "version": "2.43.0",
3
+ "version": "2.43.1",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/capricorn86/happy-dom",
6
6
  "repository": "https://github.com/capricorn86/happy-dom",
@@ -75,5 +75,5 @@
75
75
  "ts-jest": "^26.5.6",
76
76
  "typescript": "^4.2.4"
77
77
  },
78
- "gitHead": "ac202fdcad3d4e5b6a85d98728526ffca1a3b6d8"
78
+ "gitHead": "784370f5b561d513c09f28c44b59d7c4a167245a"
79
79
  }
@@ -27,10 +27,11 @@ export default class SelectorItem {
27
27
  * @param selector Selector.
28
28
  */
29
29
  constructor(selector: string) {
30
+ const isNotPseudo = selector.includes(':not(');
31
+
30
32
  this.isAll = selector === '*';
31
33
  this.isID = !this.isAll ? selector.startsWith('#') : false;
32
- this.isAttribute =
33
- !this.isAll && !this.isID && selector.includes('[') && !selector.includes(':not(');
34
+ this.isAttribute = !this.isAll && !this.isID && selector.includes('[') && !isNotPseudo;
34
35
  this.isPseudo = !this.isAll && !this.isID && selector.includes(':');
35
36
  this.isClass = !this.isAll && !this.isID && new RegExp(CLASS_REGEXP, 'g').test(selector);
36
37
  this.tagName = !this.isAll && !this.isID ? selector.match(TAG_NAME_REGEXP) : null;
@@ -48,7 +49,6 @@ export default class SelectorItem {
48
49
  */
49
50
  public match(element: Element): boolean {
50
51
  const selector = this.selector;
51
- let match;
52
52
 
53
53
  // Is all (*)
54
54
  if (this.isAll) {
@@ -68,29 +68,13 @@ export default class SelectorItem {
68
68
  }
69
69
 
70
70
  // Class match
71
- if (this.isClass) {
72
- const regexp = new RegExp(CLASS_REGEXP, 'g');
73
-
74
- while ((match = regexp.exec(selector))) {
75
- if (!element.classList.contains(match[1])) {
76
- return false;
77
- }
78
- }
71
+ if (this.isClass && !this.matchesClass(element, selector)) {
72
+ return false;
79
73
  }
80
74
 
81
75
  // Pseudo match
82
- if (this.isPseudo) {
83
- const regexp = new RegExp(PSUEDO_REGEXP, 'g');
84
-
85
- while ((match = regexp.exec(selector))) {
86
- if (match[1] && !this.matchesNthChild(element, match[1], match[2])) {
87
- return false;
88
- } else if (match[3] && this.matchesAttribute(element, match[3])) {
89
- return false;
90
- } else if (match[4] && !this.matchesPsuedo(element, match[4])) {
91
- return false;
92
- }
93
- }
76
+ if (this.isPseudo && !this.matchesPsuedo(element, selector)) {
77
+ return false;
94
78
  }
95
79
 
96
80
  // Attribute match
@@ -101,6 +85,35 @@ export default class SelectorItem {
101
85
  return true;
102
86
  }
103
87
 
88
+ /**
89
+ * Matches a psuedo selector.
90
+ *
91
+ * @param element Element.
92
+ * @param selector Selector.
93
+ * @returns True if it is a match.
94
+ */
95
+ private matchesPsuedo(element: Element, selector: string): boolean {
96
+ const regexp = new RegExp(PSUEDO_REGEXP, 'g');
97
+ let match: RegExpMatchArray;
98
+
99
+ while ((match = regexp.exec(selector))) {
100
+ const isNotClass = match[3] && match[3].trim()[0] === '.';
101
+ if (match[1] && !this.matchesNthChild(element, match[1], match[2])) {
102
+ return false;
103
+ } else if (
104
+ match[3] &&
105
+ ((isNotClass && this.matchesClass(element, match[3])) ||
106
+ (!isNotClass && this.matchesAttribute(element, match[3])))
107
+ ) {
108
+ return false;
109
+ } else if (match[4] && !this.matchesPsuedoExpression(element, match[4])) {
110
+ return false;
111
+ }
112
+ }
113
+
114
+ return true;
115
+ }
116
+
104
117
  /**
105
118
  * Matches a nth-child selector.
106
119
  *
@@ -158,13 +171,13 @@ export default class SelectorItem {
158
171
  }
159
172
 
160
173
  /**
161
- * Matches a psuedo selector.
174
+ * Matches a psuedo selector expression.
162
175
  *
163
176
  * @param element Element.
164
177
  * @param psuedo Psuedo name.
165
178
  * @returns True if it is a match.
166
179
  */
167
- private matchesPsuedo(element: Element, psuedo: string): boolean {
180
+ private matchesPsuedoExpression(element: Element, psuedo: string): boolean {
168
181
  const parent = <Element>element.parentNode;
169
182
 
170
183
  if (!parent) {
@@ -220,7 +233,7 @@ export default class SelectorItem {
220
233
  */
221
234
  private matchesAttribute(element: Element, selector: string): boolean {
222
235
  const regexp = new RegExp(ATTRIBUTE_REGEXP, 'g');
223
- let match;
236
+ let match: RegExpMatchArray;
224
237
 
225
238
  while ((match = regexp.exec(selector))) {
226
239
  const isPsuedo = match.index > 0 && selector[match.index] === '(';
@@ -236,6 +249,29 @@ export default class SelectorItem {
236
249
  return true;
237
250
  }
238
251
 
252
+ /**
253
+ * Matches class.
254
+ *
255
+ * @param element Element.
256
+ * @param selector Selector.
257
+ * @returns True if it is a match.
258
+ */
259
+ private matchesClass(element: Element, selector: string): boolean {
260
+ const regexp = new RegExp(CLASS_REGEXP, 'g');
261
+ const classList = element.className.split(' ');
262
+ let previousIndex = 0;
263
+ let match: RegExpMatchArray;
264
+
265
+ while ((match = regexp.exec(selector)) && match.index === previousIndex) {
266
+ if (!classList.includes(match[1])) {
267
+ return false;
268
+ }
269
+ previousIndex = match.index + match[0].length - 1;
270
+ }
271
+
272
+ return true;
273
+ }
274
+
239
275
  /**
240
276
  * Matches attribute name only.
241
277
  *