@asamuzakjp/dom-selector 6.5.0 → 6.5.2

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.
package/README.md CHANGED
@@ -172,14 +172,15 @@ const dom = new JSDOM('', {
172
172
  |Pattern|Supported|Note|
173
173
  |:--------|:-------:|:--------|
174
174
  |\*|✓| |
175
+ |E|✓| |
175
176
  |ns\|E|✓| |
176
177
  |\*\|E|✓| |
177
178
  |\|E|✓| |
178
- |E|✓| |
179
- |E:not(s1, s2, …)|✓| |
180
- |E:is(s1, s2, …)|✓| |
181
- |E:where(s1, s2, …)|✓| |
182
- |E:has(rs1, rs2, …)|✓| |
179
+ |E F|✓| |
180
+ |E > F|✓| |
181
+ |E + F|✓| |
182
+ |E ~ F|✓| |
183
+ |F \|\| E|Unsupported| |
183
184
  |E.warning|✓| |
184
185
  |E#myid|✓| |
185
186
  |E\[foo\]|✓| |
@@ -191,6 +192,10 @@ const dom = new JSDOM('', {
191
192
  |E\[foo$="bar"\]|✓| |
192
193
  |E\[foo*="bar"\]|✓| |
193
194
  |E\[foo\|="en"\]|✓| |
195
+ |E:is(s1, s2, …)|✓| |
196
+ |E:not(s1, s2, …)|✓| |
197
+ |E:where(s1, s2, …)|✓| |
198
+ |E:has(rs1, rs2, …)|✓| |
194
199
  |E:defined|Partially supported|Matching with MathML is not yet supported.|
195
200
  |E:dir(ltr)|✓| |
196
201
  |E:lang(en)|✓| |
@@ -201,25 +206,27 @@ const dom = new JSDOM('', {
201
206
  |E:target|✓| |
202
207
  |E:target‑within|✓| |
203
208
  |E:scope|✓| |
209
+ |E:hover|✓| |
210
+ |E:active|✓| |
211
+ |E:focus|✓| |
212
+ |E:focus‑visible|✓| |
213
+ |E:focus‑within|✓| |
204
214
  |E:current|Unsupported| |
205
215
  |E:current(s)|Unsupported| |
206
216
  |E:past|Unsupported| |
207
217
  |E:future|Unsupported| |
208
- |E:active|✓| |
209
- |E:hover|✓| |
210
- |E:focus|✓| |
211
- |E:focus‑within|✓| |
212
- |E:focus‑visible|✓| |
213
218
  |E:open<br>E:closed|Partially supported|Matching with &lt;select&gt;, e.g. `select:open`, is not supported.|
219
+ |E:popover-open|✓| |
214
220
  |E:enabled<br>E:disabled|✓| |
215
221
  |E:read&#8209;write<br>E:read&#8209;only|✓| |
216
222
  |E:placeholder&#8209;shown|✓| |
217
223
  |E:default|✓| |
218
224
  |E:checked|✓| |
219
225
  |E:indeterminate|✓| |
226
+ |E:blank|Unsupported| |
220
227
  |E:valid<br>E:invalid|✓| |
228
+ |E:in-range<br>E:out-of-range|✓| |
221
229
  |E:required<br>E:optional|✓| |
222
- |E:blank|Unsupported| |
223
230
  |E:user&#8209;valid<br>E:user&#8209;invalid|Unsupported| |
224
231
  |E:root|✓| |
225
232
  |E:empty|✓| |
@@ -233,21 +240,15 @@ const dom = new JSDOM('', {
233
240
  |E:first&#8209;of&#8209;type|✓| |
234
241
  |E:last&#8209;of&#8209;type|✓| |
235
242
  |E:only&#8209;of&#8209;type|✓| |
236
- |E&nbsp;F|✓| |
237
- |E > F|✓| |
238
- |E + F|✓| |
239
- |E ~ F|✓| |
240
- |F \|\| E|Unsupported| |
241
243
  |E:nth&#8209;col(n)|Unsupported| |
242
244
  |E:nth&#8209;last&#8209;col(n)|Unsupported| |
243
- |E:popover-open|✓| |
244
- |E:state(v)|✓|*1|
245
+ |CE:state(v)|✓|*1|
245
246
  |:host|✓| |
246
247
  |:host(s)|✓| |
247
- |:host&#8209;context(s)|✓| |
248
248
  |:host(:state(v))|✓|*1|
249
249
  |:host:has(rs1, rs2, ...)|✓| |
250
250
  |:host(s):has(rs1, rs2, ...)|✓| |
251
+ |:host&#8209;context(s)|✓| |
251
252
  |:host&#8209;context(s):has(rs1, rs2, ...)|✓| |
252
253
  |&amp;|✓|Only supports outermost `&`, i.e. equivalent to `:scope`|
253
254
 
@@ -69,7 +69,6 @@ var BIT_32 = 32;
69
69
  var BIT_FFFF = 65535;
70
70
  var DUO = 2;
71
71
  var HEX = 16;
72
- var HYPHEN = 45;
73
72
  var TYPE_FROM = 8;
74
73
  var TYPE_TO = -1;
75
74
  var ELEMENT_NODE = 1;
@@ -79,7 +78,7 @@ var DOCUMENT_FRAGMENT_NODE = 11;
79
78
  var DOCUMENT_POSITION_PRECEDING = 2;
80
79
  var DOCUMENT_POSITION_CONTAINS = 8;
81
80
  var SHOW_ALL = 4294967295;
82
- var WALKER_FILTER = 1281;
81
+ var SHOW_CONTAINER = 1281;
83
82
  var ALPHA_NUM = "[A-Z\\d]+";
84
83
  var CHILD_IDX = "(?:first|last|only)-(?:child|of-type)";
85
84
  var DIGIT = "(?:0|[1-9]\\d*)";
@@ -768,15 +767,8 @@ var preprocess = (...args) => {
768
767
  }
769
768
  const preHash = selector.substring(0, index + 1);
770
769
  let postHash = selector.substring(index + 1);
771
- if (/^\d$/.test(postHash.substring(0, 1))) {
772
- throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);
773
- }
774
770
  const codePoint = postHash.codePointAt(0);
775
- if (codePoint === HYPHEN) {
776
- if (/^\d$/.test(postHash.substring(1, 2))) {
777
- throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);
778
- }
779
- } else if (codePoint > BIT_FFFF) {
771
+ if (codePoint > BIT_FFFF) {
780
772
  const str = `\\${codePoint.toString(HEX)} `;
781
773
  if (postHash.length === DUO) {
782
774
  postHash = str;
@@ -792,7 +784,7 @@ var preprocess = (...args) => {
792
784
  selector = getType(selector).toLowerCase();
793
785
  } else if (Array.isArray(selector)) {
794
786
  selector = selector.join(",");
795
- } else if (Object.prototype.hasOwnProperty.call(selector, "toString")) {
787
+ } else if (Object.hasOwn(selector, "toString")) {
796
788
  selector = selector.toString();
797
789
  } else {
798
790
  throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);
@@ -846,8 +838,22 @@ var walkAST = (ast = {}) => {
846
838
  const opt = {
847
839
  enter: (node) => {
848
840
  switch (node.type) {
849
- case SELECTOR: {
850
- branches.add(node.children);
841
+ case CLASS_SELECTOR: {
842
+ if (/^-?\d/.test(node.name)) {
843
+ throw new DOMException(
844
+ `Invalid selector .${node.name}`,
845
+ SYNTAX_ERR
846
+ );
847
+ }
848
+ break;
849
+ }
850
+ case ID_SELECTOR: {
851
+ if (/^-?\d/.test(node.name)) {
852
+ throw new DOMException(
853
+ `Invalid selector #${node.name}`,
854
+ SYNTAX_ERR
855
+ );
856
+ }
851
857
  break;
852
858
  }
853
859
  case PS_CLASS_SELECTOR: {
@@ -877,6 +883,10 @@ var walkAST = (ast = {}) => {
877
883
  }
878
884
  break;
879
885
  }
886
+ case SELECTOR: {
887
+ branches.add(node.children);
888
+ break;
889
+ }
880
890
  default:
881
891
  }
882
892
  }
@@ -1478,7 +1488,7 @@ var Finder = class {
1478
1488
  throw new this.#window.DOMException(e.message, e.name);
1479
1489
  }
1480
1490
  } else if (e.name in this.#window) {
1481
- throw new this.#window[e.name](e.message);
1491
+ throw new this.#window[e.name](e.message, { cause: e });
1482
1492
  } else {
1483
1493
  throw e;
1484
1494
  }
@@ -1692,7 +1702,7 @@ var Finder = class {
1692
1702
  * @returns {object} - tree walker
1693
1703
  */
1694
1704
  _createTreeWalker(node, opt = {}) {
1695
- const { force = false, whatToShow = WALKER_FILTER } = opt;
1705
+ const { force = false, whatToShow = SHOW_CONTAINER } = opt;
1696
1706
  let walker;
1697
1707
  if (force) {
1698
1708
  walker = this.#document.createTreeWalker(node, whatToShow);