happy-dom 9.16.0 → 9.18.0

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.

Files changed (33) hide show
  1. package/lib/nodes/html-link-element/HTMLLinkElement.d.ts.map +1 -1
  2. package/lib/nodes/html-link-element/HTMLLinkElement.js +5 -68
  3. package/lib/nodes/html-link-element/HTMLLinkElement.js.map +1 -1
  4. package/lib/nodes/html-link-element/HTMLLinkElementUtility.d.ts +22 -0
  5. package/lib/nodes/html-link-element/HTMLLinkElementUtility.d.ts.map +1 -0
  6. package/lib/nodes/html-link-element/HTMLLinkElementUtility.js +70 -0
  7. package/lib/nodes/html-link-element/HTMLLinkElementUtility.js.map +1 -0
  8. package/lib/nodes/html-script-element/HTMLScriptElement.js +3 -3
  9. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  10. package/lib/nodes/html-script-element/{ScriptUtility.d.ts → HTMLScriptElementUtility.d.ts} +9 -2
  11. package/lib/nodes/html-script-element/HTMLScriptElementUtility.d.ts.map +1 -0
  12. package/lib/nodes/html-script-element/{ScriptUtility.js → HTMLScriptElementUtility.js} +35 -36
  13. package/lib/nodes/html-script-element/HTMLScriptElementUtility.js.map +1 -0
  14. package/lib/query-selector/ISelectorAttribute.d.ts +2 -0
  15. package/lib/query-selector/ISelectorAttribute.d.ts.map +1 -1
  16. package/lib/query-selector/SelectorItem.d.ts.map +1 -1
  17. package/lib/query-selector/SelectorItem.js +5 -42
  18. package/lib/query-selector/SelectorItem.js.map +1 -1
  19. package/lib/query-selector/SelectorParser.d.ts +10 -0
  20. package/lib/query-selector/SelectorParser.d.ts.map +1 -1
  21. package/lib/query-selector/SelectorParser.js +65 -20
  22. package/lib/query-selector/SelectorParser.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/nodes/html-link-element/HTMLLinkElement.ts +5 -83
  25. package/src/nodes/html-link-element/HTMLLinkElementUtility.ts +82 -0
  26. package/src/nodes/html-script-element/HTMLScriptElement.ts +3 -3
  27. package/src/nodes/html-script-element/HTMLScriptElementUtility.ts +94 -0
  28. package/src/query-selector/ISelectorAttribute.ts +2 -0
  29. package/src/query-selector/SelectorItem.ts +7 -43
  30. package/src/query-selector/SelectorParser.ts +72 -20
  31. package/lib/nodes/html-script-element/ScriptUtility.d.ts.map +0 -1
  32. package/lib/nodes/html-script-element/ScriptUtility.js.map +0 -1
  33. package/src/nodes/html-script-element/ScriptUtility.ts +0 -89
@@ -17,15 +17,16 @@ const DOMException_1 = __importDefault(require("../exception/DOMException"));
17
17
  * Group 6: Attribute name when there is a value using apostrophe (e.g. "attr1")
18
18
  * Group 7: Attribute operator when using apostrophe (e.g. "~")
19
19
  * Group 8: Attribute value when using apostrophe (e.g. "value1")
20
- * Group 9: Attribute name when threre is a value not using apostrophe (e.g. "attr1")
21
- * Group 10: Attribute operator when not using apostrophe (e.g. "~")
22
- * Group 11: Attribute value when notusing apostrophe (e.g. "value1")
23
- * Group 12: Pseudo name when arguments (e.g. "nth-child")
24
- * Group 13: Arguments of pseudo (e.g. "2n + 1")
25
- * Group 14: Pseudo name when no arguments (e.g. "empty")
26
- * Group 15: Combinator.
20
+ * Group 9: Attribute modifier when using apostrophe (e.g. "i" or "s")
21
+ * Group 10: Attribute name when threre is a value not using apostrophe (e.g. "attr1")
22
+ * Group 11: Attribute operator when not using apostrophe (e.g. "~")
23
+ * Group 12: Attribute value when notusing apostrophe (e.g. "value1")
24
+ * Group 13: Pseudo name when arguments (e.g. "nth-child")
25
+ * Group 14: Arguments of pseudo (e.g. "2n + 1")
26
+ * Group 15: Pseudo name when no arguments (e.g. "empty")
27
+ * Group 16: Combinator.
27
28
  */
28
- const SELECTOR_REGEXP = /(\*)|([a-zA-Z0-9-]+)|#((?:[a-zA-Z0-9-_]|\\.)+)|\.((?:[a-zA-Z0-9-_]|\\.)+)|\[([a-zA-Z0-9-_]+)\]|\[([a-zA-Z0-9-_]+)([~|^$*]{0,1}) *= *["']{1}([^"']*)["']{1}\]|\[([a-zA-Z0-9-_]+)([~|^$*]{0,1}) *= *([^\]]*)\]|:([a-zA-Z-]+) *\(([^)]+)\)|:([a-zA-Z-]+)|([ ,+>]*)/g;
29
+ const SELECTOR_REGEXP = /(\*)|([a-zA-Z0-9-]+)|#((?:[a-zA-Z0-9-_]|\\.)+)|\.((?:[a-zA-Z0-9-_]|\\.)+)|\[([a-zA-Z0-9-_]+)\]|\[([a-zA-Z0-9-_]+) *([~|^$*]{0,1}) *= *["']{1}([^"']*)["']{1} *(s|i){0,1}\]|\[([a-zA-Z0-9-_]+) *([~|^$*]{0,1}) *= *([^\]]*)\]|:([a-zA-Z-]+) *\(([^)]+)\)|:([a-zA-Z-]+)|([ ,+>]*)/g;
29
30
  /**
30
31
  * Escaped Character RegExp.
31
32
  */
@@ -114,7 +115,9 @@ class SelectorParser {
114
115
  currentSelectorItem.attributes.push({
115
116
  name: match[5].toLowerCase(),
116
117
  operator: null,
117
- value: null
118
+ value: null,
119
+ modifier: null,
120
+ regExp: null
118
121
  });
119
122
  }
120
123
  else if (match[6] && match[8] !== undefined) {
@@ -122,27 +125,35 @@ class SelectorParser {
122
125
  currentSelectorItem.attributes.push({
123
126
  name: match[6].toLowerCase(),
124
127
  operator: match[7] || null,
125
- value: match[8]
128
+ value: match[8],
129
+ modifier: match[9] || null,
130
+ regExp: this.getAttributeRegExp({
131
+ operator: match[7],
132
+ value: match[8],
133
+ modifier: match[9]
134
+ })
126
135
  });
127
136
  }
128
- else if (match[9] && match[11] !== undefined) {
137
+ else if (match[10] && match[12] !== undefined) {
129
138
  currentSelectorItem.attributes = currentSelectorItem.attributes || [];
130
139
  currentSelectorItem.attributes.push({
131
- name: match[9].toLowerCase(),
132
- operator: match[10] || null,
133
- value: match[11]
140
+ name: match[10].toLowerCase(),
141
+ operator: match[11] || null,
142
+ value: match[12],
143
+ modifier: null,
144
+ regExp: this.getAttributeRegExp({ operator: match[7], value: match[8] })
134
145
  });
135
146
  }
136
- else if (match[12] && match[13]) {
147
+ else if (match[13] && match[14]) {
137
148
  currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
138
- currentSelectorItem.pseudos.push(this.getPseudo(match[12], match[13]));
149
+ currentSelectorItem.pseudos.push(this.getPseudo(match[13], match[14]));
139
150
  }
140
- else if (match[14]) {
151
+ else if (match[15]) {
141
152
  currentSelectorItem.pseudos = currentSelectorItem.pseudos || [];
142
- currentSelectorItem.pseudos.push(this.getPseudo(match[14]));
153
+ currentSelectorItem.pseudos.push(this.getPseudo(match[15]));
143
154
  }
144
- else if (match[15]) {
145
- switch (match[15].trim()) {
155
+ else if (match[16]) {
156
+ switch (match[16].trim()) {
146
157
  case ',':
147
158
  currentSelectorItem = new SelectorItem_1.default({
148
159
  combinator: SelectorCombinatorEnum_1.default.descendant
@@ -178,6 +189,40 @@ class SelectorParser {
178
189
  }
179
190
  return groups;
180
191
  }
192
+ /**
193
+ * Returns attribute RegExp.
194
+ *
195
+ * @param attribute Attribute.
196
+ * @param attribute.value Attribute value.
197
+ * @param attribute.operator Attribute operator.
198
+ * @param attribute.modifier Attribute modifier.
199
+ * @returns Attribute RegExp.
200
+ */
201
+ static getAttributeRegExp(attribute) {
202
+ const modifier = attribute.modifier === 'i' ? 'i' : '';
203
+ if (!attribute.operator || !attribute.value) {
204
+ return null;
205
+ }
206
+ switch (attribute.operator) {
207
+ // [attribute~="value"] - Contains a specified word.
208
+ case '~':
209
+ return new RegExp(`[- ]${attribute.value}|${attribute.value}[- ]`, modifier);
210
+ // [attribute|="value"] - Starts with the specified word.
211
+ case '|':
212
+ return new RegExp(`^${attribute.value}[- ]`, modifier);
213
+ // [attribute^="value"] - Begins with a specified value.
214
+ case '^':
215
+ return new RegExp(`^${attribute.value}`, modifier);
216
+ // [attribute$="value"] - Ends with a specified value.
217
+ case '$':
218
+ return new RegExp(`${attribute.value}$`, modifier);
219
+ // [attribute*="value"] - Contains a specified value.
220
+ case '*':
221
+ return new RegExp(`${attribute.value}`, modifier);
222
+ default:
223
+ return null;
224
+ }
225
+ }
181
226
  /**
182
227
  * Returns pseudo.
183
228
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SelectorParser.js","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":";;;;;AAAA,kEAA0C;AAC1C,sFAA8D;AAC9D,6EAAqD;AAGrD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,eAAe,GACpB,kQAAkQ,CAAC;AAEpQ;;GAEG;AACH,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAE7C;;GAEG;AACH,MAAM,YAAY,GAAG;IACpB,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACtC,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,sBAAsB,GAAG,6DAA6D,CAAC;AAE7F;;GAEG;AACH,MAAqB,cAAc;IAClC;;;;;OAKG;IACI,MAAM,CAAC,eAAe,CAAC,QAAgB;QAC7C,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,QAAgB;QAC/C,IAAI,QAAQ,KAAK,GAAG,EAAE;YACrB,OAAO,CAAC,CAAC,IAAI,sBAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;SAC9C;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,IAAI,WAAW,EAAE;YAChB,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;gBACnB,OAAO,CAAC,CAAC,IAAI,sBAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;aACjE;iBAAM,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;gBAC1B,OAAO,CAAC,CAAC,IAAI,sBAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAClF;iBAAM,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;gBAC1B,OAAO,CAAC,CAAC,IAAI,sBAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC/D;SACD;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAI,mBAAmB,GAAiB,IAAI,sBAAY,CAAC;YACxD,UAAU,EAAE,gCAAsB,CAAC,UAAU;SAC7C,CAAC,CAAC;QACH,IAAI,YAAY,GAAmB,CAAC,mBAAmB,CAAC,CAAC;QACzD,MAAM,MAAM,GAA+B,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;YACvC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;gBACb,OAAO,GAAG,IAAI,CAAC;gBAEf,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACb,mBAAmB,CAAC,OAAO,GAAG,GAAG,CAAC;iBAClC;qBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACpB,mBAAmB,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACrD;qBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACpB,mBAAmB,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC;iBAC9E;qBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACpB,mBAAmB,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,IAAI,EAAE,CAAC;oBACtE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC1F;qBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACpB,mBAAmB,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,IAAI,EAAE,CAAC;oBACtE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;wBACnC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;wBAC5B,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,IAAI;qBACX,CAAC,CAAC;iBACH;qBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;oBAC9C,mBAAmB,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,IAAI,EAAE,CAAC;oBACtE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;wBACnC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;wBAC5B,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;wBAC1B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;qBACf,CAAC,CAAC;iBACH;qBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;oBAC/C,mBAAmB,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,IAAI,EAAE,CAAC;oBACtE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;wBACnC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;wBAC5B,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI;wBAC3B,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;qBAChB,CAAC,CAAC;iBACH;qBAAM,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;oBAClC,mBAAmB,CAAC,OAAO,GAAG,mBAAmB,CAAC,OAAO,IAAI,EAAE,CAAC;oBAChE,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACvE;qBAAM,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;oBACrB,mBAAmB,CAAC,OAAO,GAAG,mBAAmB,CAAC,OAAO,IAAI,EAAE,CAAC;oBAChE,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC5D;qBAAM,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;oBACrB,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;wBACzB,KAAK,GAAG;4BACP,mBAAmB,GAAG,IAAI,sBAAY,CAAC;gCACtC,UAAU,EAAE,gCAAsB,CAAC,UAAU;6BAC7C,CAAC,CAAC;4BACH,YAAY,GAAG,CAAC,mBAAmB,CAAC,CAAC;4BACrC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;4BAC1B,MAAM;wBACP,KAAK,GAAG;4BACP,mBAAmB,GAAG,IAAI,sBAAY,CAAC,EAAE,UAAU,EAAE,gCAAsB,CAAC,KAAK,EAAE,CAAC,CAAC;4BACrF,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;4BACvC,MAAM;wBACP,KAAK,GAAG;4BACP,mBAAmB,GAAG,IAAI,sBAAY,CAAC;gCACtC,UAAU,EAAE,gCAAsB,CAAC,eAAe;6BAClD,CAAC,CAAC;4BACH,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;4BACvC,MAAM;wBACP,KAAK,EAAE;4BACN,mBAAmB,GAAG,IAAI,sBAAY,CAAC;gCACtC,UAAU,EAAE,gCAAsB,CAAC,UAAU;6BAC7C,CAAC,CAAC;4BACH,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;4BACvC,MAAM;qBACP;iBACD;aACD;iBAAM;gBACN,MAAM;aACN;SACD;QAED,IAAI,CAAC,OAAO,EAAE;YACb,MAAM,IAAI,sBAAY,CAAC,sBAAsB,QAAQ,GAAG,CAAC,CAAC;SAC1D;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,SAAS,CAAC,IAAY,EAAE,IAAa;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,CAAC,IAAI,EAAE;YACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;SACnF;QAED,QAAQ,SAAS,EAAE;YAClB,KAAK,gBAAgB,CAAC;YACtB,KAAK,WAAW;gBACf,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7E,MAAM,YAAY,GACjB,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxF,OAAO;oBACN,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,IAAI;oBACf,YAAY;oBACZ,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;iBACnD,CAAC;YACH,KAAK,aAAa,CAAC;YACnB,KAAK,kBAAkB;gBACtB,OAAO;oBACN,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,IAAI;oBACf,YAAY,EAAE,IAAI;oBAClB,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;iBAC5C,CAAC;YACH,KAAK,KAAK;gBACT,OAAO;oBACN,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,IAAI;oBACf,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACxC,WAAW,EAAE,IAAI;iBACjB,CAAC;YACH;gBACC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;SACpF;IACF,CAAC;IAED;;;;;;;;OAQG;IACK,MAAM,CAAC,oBAAoB,CAAC,IAAa;QAChD,IAAI,IAAI,KAAK,KAAK,EAAE;YACnB,OAAO,YAAY,CAAC,GAAG,CAAC;SACxB;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE;YAC3B,OAAO,YAAY,CAAC,IAAI,CAAC;SACzB;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;YACpB,KAAK,GAAG,CAAC,CAAC,CAAC;SACX;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;SACzB;QAED,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;YACpB,KAAK,GAAG,CAAC,CAAC;SACV;QAED,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;YAC9B,IAAI,KAAK,IAAI,CAAC,EAAE;gBACf,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC1B,OAAO,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;iBAC7C;gBACD,OAAO,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;aAC/E;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC1B,OAAO,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;aAC7C;YACD,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;SAC9D;QAED,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACb,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;SAC1B;QAED,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAC7B,CAAC;CACD;AA7ND,iCA6NC"}
1
+ {"version":3,"file":"SelectorParser.js","sourceRoot":"","sources":["../../src/query-selector/SelectorParser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-dom",
3
- "version": "9.16.0",
3
+ "version": "9.18.0",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/capricorn86/happy-dom",
6
6
  "repository": "https://github.com/capricorn86/happy-dom",
@@ -1,14 +1,13 @@
1
1
  import IAttr from '../attr/IAttr';
2
2
  import CSSStyleSheet from '../../css/CSSStyleSheet';
3
- import ResourceFetch from '../../fetch/ResourceFetch';
4
3
  import HTMLElement from '../html-element/HTMLElement';
5
- import Document from '../document/Document';
6
4
  import IHTMLLinkElement from './IHTMLLinkElement';
7
5
  import Event from '../../event/Event';
8
6
  import ErrorEvent from '../../event/events/ErrorEvent';
9
7
  import INode from '../../nodes/node/INode';
10
8
  import DOMTokenList from '../../dom-token-list/DOMTokenList';
11
9
  import IDOMTokenList from '../../dom-token-list/IDOMTokenList';
10
+ import HTMLLinkElementUtility from './HTMLLinkElementUtility';
12
11
 
13
12
  /**
14
13
  * HTML Link Element.
@@ -184,51 +183,13 @@ export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkEle
184
183
  */
185
184
  public override setAttributeNode(attribute: IAttr): IAttr {
186
185
  const replacedAttribute = super.setAttributeNode(attribute);
187
- const rel = this.getAttribute('rel');
188
- const href = this.getAttribute('href');
189
186
 
190
187
  if (attribute.name === 'rel' && this._relList) {
191
188
  this._relList._updateIndices();
192
189
  }
193
190
 
194
- if (
195
- (attribute.name === 'rel' || attribute.name === 'href') &&
196
- href !== null &&
197
- rel &&
198
- rel.toLowerCase() === 'stylesheet' &&
199
- this.isConnected &&
200
- !this.ownerDocument.defaultView.happyDOM.settings.disableCSSFileLoading
201
- ) {
202
- (<Document>this.ownerDocument)._readyStateManager.startTask();
203
- ResourceFetch.fetch(this.ownerDocument, href)
204
- .then((code) => {
205
- const styleSheet = new CSSStyleSheet();
206
- styleSheet.replaceSync(code);
207
- (<CSSStyleSheet>this.sheet) = styleSheet;
208
- this.dispatchEvent(new Event('load'));
209
- (<Document>this.ownerDocument)._readyStateManager.endTask();
210
- })
211
- .catch((error) => {
212
- this.dispatchEvent(
213
- new ErrorEvent('error', {
214
- message: error.message,
215
- error
216
- })
217
- );
218
- this.ownerDocument.defaultView.dispatchEvent(
219
- new ErrorEvent('error', {
220
- message: error.message,
221
- error
222
- })
223
- );
224
- (<Document>this.ownerDocument)._readyStateManager.endTask();
225
- if (
226
- !this['_listeners']['error'] &&
227
- !this.ownerDocument.defaultView['_listeners']['error']
228
- ) {
229
- this.ownerDocument.defaultView.console.error(error);
230
- }
231
- });
191
+ if (attribute.name === 'rel' || attribute.name === 'href') {
192
+ HTMLLinkElementUtility.loadExternalStylesheet(this);
232
193
  }
233
194
 
234
195
  return replacedAttribute;
@@ -256,47 +217,8 @@ export default class HTMLLinkElement extends HTMLElement implements IHTMLLinkEle
256
217
 
257
218
  super._connectToNode(parentNode);
258
219
 
259
- if (
260
- isParentConnected &&
261
- isConnected !== isParentConnected &&
262
- this._evaluateCSS &&
263
- !this.ownerDocument.defaultView.happyDOM.settings.disableCSSFileLoading
264
- ) {
265
- const href = this.getAttribute('href');
266
- const rel = this.getAttribute('rel');
267
-
268
- if (href !== null && rel && rel.toLowerCase() === 'stylesheet') {
269
- (<Document>this.ownerDocument)._readyStateManager.startTask();
270
- ResourceFetch.fetch(this.ownerDocument, href)
271
- .then((code) => {
272
- const styleSheet = new CSSStyleSheet();
273
- styleSheet.replaceSync(code);
274
- (<CSSStyleSheet>this.sheet) = styleSheet;
275
- this.dispatchEvent(new Event('load'));
276
- (<Document>this.ownerDocument)._readyStateManager.endTask();
277
- })
278
- .catch((error) => {
279
- this.dispatchEvent(
280
- new ErrorEvent('error', {
281
- message: error.message,
282
- error
283
- })
284
- );
285
- this.ownerDocument.defaultView.dispatchEvent(
286
- new ErrorEvent('error', {
287
- message: error.message,
288
- error
289
- })
290
- );
291
- (<Document>this.ownerDocument)._readyStateManager.endTask();
292
- if (
293
- !this['_listeners']['error'] &&
294
- !this.ownerDocument.defaultView['_listeners']['error']
295
- ) {
296
- this.ownerDocument.defaultView.console.error(error);
297
- }
298
- });
299
- }
220
+ if (isParentConnected && isConnected !== isParentConnected && this._evaluateCSS) {
221
+ HTMLLinkElementUtility.loadExternalStylesheet(this);
300
222
  }
301
223
  }
302
224
  }
@@ -0,0 +1,82 @@
1
+ import Document from '../document/Document';
2
+ import Event from '../../event/Event';
3
+ import ErrorEvent from '../../event/events/ErrorEvent';
4
+ import ResourceFetch from '../../fetch/ResourceFetch';
5
+ import HTMLLinkElement from './HTMLLinkElement';
6
+ import CSSStyleSheet from '../../css/CSSStyleSheet';
7
+ import DOMException from '../../exception/DOMException';
8
+ import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum';
9
+
10
+ /**
11
+ * Helper class for getting the URL relative to a Location object.
12
+ */
13
+ export default class HTMLLinkElementUtility {
14
+ /**
15
+ * Returns a URL relative to the given Location object.
16
+ *
17
+ * @param options Options.
18
+ * @param options.element Element.
19
+ * @param element
20
+ */
21
+ public static async loadExternalStylesheet(element: HTMLLinkElement): Promise<void> {
22
+ const href = element.getAttribute('href');
23
+ const rel = element.getAttribute('rel');
24
+
25
+ if (href !== null && rel && rel.toLowerCase() === 'stylesheet' && element.isConnected) {
26
+ if (element.ownerDocument.defaultView.happyDOM.settings.disableCSSFileLoading) {
27
+ this.onError(
28
+ element,
29
+ new DOMException(
30
+ `Failed to load external stylesheet "${href}". CSS file loading is disabled.`,
31
+ DOMExceptionNameEnum.notSupportedError
32
+ )
33
+ );
34
+ return;
35
+ }
36
+
37
+ (<Document>element.ownerDocument)._readyStateManager.startTask();
38
+
39
+ let code: string;
40
+ try {
41
+ code = await ResourceFetch.fetch(element.ownerDocument, href);
42
+ } catch (error) {
43
+ this.onError(element, error);
44
+ return;
45
+ }
46
+
47
+ const styleSheet = new CSSStyleSheet();
48
+ styleSheet.replaceSync(code);
49
+ (<CSSStyleSheet>element.sheet) = styleSheet;
50
+ element.dispatchEvent(new Event('load'));
51
+ (<Document>element.ownerDocument)._readyStateManager.endTask();
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Triggered when an error occurs.
57
+ *
58
+ * @param element Element.
59
+ * @param error Error.
60
+ */
61
+ private static onError(element: HTMLLinkElement, error: Error): void {
62
+ element.dispatchEvent(
63
+ new ErrorEvent('error', {
64
+ message: error.message,
65
+ error
66
+ })
67
+ );
68
+ element.ownerDocument.defaultView.dispatchEvent(
69
+ new ErrorEvent('error', {
70
+ message: error.message,
71
+ error
72
+ })
73
+ );
74
+ (<Document>element.ownerDocument)._readyStateManager.endTask();
75
+ if (
76
+ !element['_listeners']['error'] &&
77
+ !element.ownerDocument.defaultView['_listeners']['error']
78
+ ) {
79
+ element.ownerDocument.defaultView.console.error(error);
80
+ }
81
+ }
82
+ }
@@ -1,7 +1,7 @@
1
1
  import IAttr from '../attr/IAttr';
2
2
  import HTMLElement from '../html-element/HTMLElement';
3
3
  import IHTMLScriptElement from './IHTMLScriptElement';
4
- import ScriptUtility from './ScriptUtility';
4
+ import HTMLScriptElementUtility from './HTMLScriptElementUtility';
5
5
  import Event from '../../event/Event';
6
6
  import ErrorEvent from '../../event/events/ErrorEvent';
7
7
  import INode from '../../nodes/node/INode';
@@ -162,7 +162,7 @@ export default class HTMLScriptElement extends HTMLElement implements IHTMLScrip
162
162
  const replacedAttribute = super.setAttributeNode(attribute);
163
163
 
164
164
  if (attribute.name === 'src' && attribute.value !== null && this.isConnected) {
165
- ScriptUtility.loadExternalScript(this);
165
+ HTMLScriptElementUtility.loadExternalScript(this);
166
166
  }
167
167
 
168
168
  return replacedAttribute;
@@ -192,7 +192,7 @@ export default class HTMLScriptElement extends HTMLElement implements IHTMLScrip
192
192
  const src = this.getAttribute('src');
193
193
 
194
194
  if (src !== null) {
195
- ScriptUtility.loadExternalScript(this);
195
+ HTMLScriptElementUtility.loadExternalScript(this);
196
196
  } else if (!this.ownerDocument.defaultView.happyDOM.settings.disableJavaScriptEvaluation) {
197
197
  const textContent = this.textContent;
198
198
  const type = this.getAttribute('type');
@@ -0,0 +1,94 @@
1
+ import Document from '../document/Document';
2
+ import Event from '../../event/Event';
3
+ import ErrorEvent from '../../event/events/ErrorEvent';
4
+ import DOMException from '../../exception/DOMException';
5
+ import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum';
6
+ import ResourceFetch from '../../fetch/ResourceFetch';
7
+ import HTMLScriptElement from './HTMLScriptElement';
8
+
9
+ /**
10
+ * Helper class for getting the URL relative to a Location object.
11
+ */
12
+ export default class HTMLScriptElementUtility {
13
+ /**
14
+ * Returns a URL relative to the given Location object.
15
+ *
16
+ * @param options Options.
17
+ * @param options.element Element.
18
+ * @param element
19
+ */
20
+ public static async loadExternalScript(element: HTMLScriptElement): Promise<void> {
21
+ const src = element.getAttribute('src');
22
+ const async = element.getAttribute('async') !== null;
23
+
24
+ if (
25
+ element.ownerDocument.defaultView.happyDOM.settings.disableJavaScriptFileLoading ||
26
+ element.ownerDocument.defaultView.happyDOM.settings.disableJavaScriptEvaluation
27
+ ) {
28
+ this.onError(
29
+ element,
30
+ new DOMException(
31
+ `Failed to load external script "${src}". JavaScript file loading is disabled.`,
32
+ DOMExceptionNameEnum.notSupportedError
33
+ )
34
+ );
35
+ return;
36
+ }
37
+
38
+ if (async) {
39
+ (<Document>element.ownerDocument)._readyStateManager.startTask();
40
+
41
+ let code = null;
42
+
43
+ try {
44
+ code = await ResourceFetch.fetch(element.ownerDocument, src);
45
+ } catch (error) {
46
+ this.onError(element, error);
47
+ return;
48
+ }
49
+
50
+ element.ownerDocument.defaultView.eval(code);
51
+ element.dispatchEvent(new Event('load'));
52
+ (<Document>element.ownerDocument)._readyStateManager.endTask();
53
+ } else {
54
+ let code = null;
55
+
56
+ try {
57
+ code = ResourceFetch.fetchSync(element.ownerDocument, src);
58
+ } catch (error) {
59
+ this.onError(element, error);
60
+ return;
61
+ }
62
+
63
+ element.ownerDocument.defaultView.eval(code);
64
+ element.dispatchEvent(new Event('load'));
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Triggered when an error occurs.
70
+ *
71
+ * @param element Element.
72
+ * @param error Error.
73
+ */
74
+ private static onError(element: HTMLScriptElement, error: Error): void {
75
+ element.dispatchEvent(
76
+ new ErrorEvent('error', {
77
+ message: error.message,
78
+ error
79
+ })
80
+ );
81
+ element.ownerDocument.defaultView.dispatchEvent(
82
+ new ErrorEvent('error', {
83
+ message: error.message,
84
+ error
85
+ })
86
+ );
87
+ if (
88
+ !element['_listeners']['error'] &&
89
+ !element.ownerDocument.defaultView['_listeners']['error']
90
+ ) {
91
+ element.ownerDocument.defaultView.console.error(error);
92
+ }
93
+ }
94
+ }
@@ -2,4 +2,6 @@ export default interface ISelectorAttribute {
2
2
  name: string;
3
3
  operator: string | null;
4
4
  value: string | null;
5
+ modifier: 's' | 'i' | null;
6
+ regExp: RegExp | null;
5
7
  }
@@ -236,49 +236,13 @@ export default class SelectorItem {
236
236
 
237
237
  priorityWeight += 10;
238
238
 
239
- if (attribute.value !== null) {
240
- if (elementAttribute.value === null) {
241
- return null;
242
- }
243
-
244
- switch (attribute.operator) {
245
- // [attribute~="value"] - Contains a specified word.
246
- case null:
247
- if (attribute.value !== elementAttribute.value) {
248
- return null;
249
- }
250
- break;
251
- // [attribute~="value"] - Contains a specified word.
252
- case '~':
253
- if (!elementAttribute.value.split(' ').includes(attribute.value)) {
254
- return null;
255
- }
256
- break;
257
- // [attribute|="value"] - Starts with the specified word.
258
- case '|':
259
- if (!new RegExp(`^${attribute.value}[- ]`).test(elementAttribute.value)) {
260
- return null;
261
- }
262
- break;
263
- // [attribute^="value"] - Begins with a specified value.
264
- case '^':
265
- if (!elementAttribute.value.startsWith(attribute.value)) {
266
- return null;
267
- }
268
- break;
269
- // [attribute$="value"] - Ends with a specified value.
270
- case '$':
271
- if (!elementAttribute.value.endsWith(attribute.value)) {
272
- return null;
273
- }
274
- break;
275
- // [attribute*="value"] - Contains a specified value.
276
- case '*':
277
- if (!elementAttribute.value.includes(attribute.value)) {
278
- return null;
279
- }
280
- break;
281
- }
239
+ if (
240
+ attribute.value !== null &&
241
+ (elementAttribute.value === null ||
242
+ (attribute.regExp && !attribute.regExp.test(elementAttribute.value)) ||
243
+ (!attribute.regExp && attribute.value !== elementAttribute.value))
244
+ ) {
245
+ return null;
282
246
  }
283
247
  }
284
248