@asamuzakjp/dom-selector 0.23.2 → 1.0.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.
package/README.md CHANGED
@@ -8,8 +8,7 @@
8
8
  [![release](https://img.shields.io/github/v/release/asamuzaK/domSelector)](https://github.com/asamuzaK/domSelector/releases)
9
9
  -->
10
10
 
11
- Retrieve DOM node from the given CSS selector.
12
- **Experimental**
11
+ Retrieve DOM node from the given CSS selector.
13
12
 
14
13
  ## Install
15
14
 
@@ -85,6 +84,79 @@ querySelectorAll - same functionality as [Document.querySelectorAll()][69], [Doc
85
84
  Returns **[Array][62]<([object][60] \| [undefined][63])>** array of matched nodes
86
85
 
87
86
 
87
+ ## Supported CSS selectors
88
+
89
+ |Pattern|Supported|Note|
90
+ |:--------|:-------:|:--------|
91
+ |\*|✓| |
92
+ |ns\|E|✓| |
93
+ |\*\|E|✓| |
94
+ |\|E|✓| |
95
+ |E|✓| |
96
+ |E:not(s1, s2, …)|✓| |
97
+ |E:is(s1, s2, …)|✓| |
98
+ |E:where(s1, s2, …)|✓| |
99
+ |E:has(rs1, rs2, …)|✓| |
100
+ |E.warning|✓| |
101
+ |E#myid|✓| |
102
+ |E\[foo\]|✓| |
103
+ |E\[foo="bar"\]|✓| |
104
+ |E\[foo="bar" i\]|✓| |
105
+ |E\[foo="bar" s\]|✓| |
106
+ |E\[foo~="bar"\]|✓| |
107
+ |E\[foo^="bar"\]|✓| |
108
+ |E\[foo$="bar"\]|✓| |
109
+ |E\[foo*="bar"\]|✓| |
110
+ |E\[foo\|="en"\]|✓| |
111
+ |E:dir(ltr)|✓| |
112
+ |E:lang(zh, "\*‑hant")|Partially supported|Quoted keys e.g. `:lang("*-Latn")` fails. It succeeds if escaped e.g. `:lang(\*-Latn)`.|
113
+ |E:any‑link|✓| |
114
+ |E:link|✓| |
115
+ |E:visited|✓|Returns `false` or `null` to prevent fingerprinting.|
116
+ |E:local‑link|✓| |
117
+ |E:target|✓| |
118
+ |E:target‑within|✓| |
119
+ |E:scope|✓| |
120
+ |E:current|Unsupported| |
121
+ |E:current(s)|Unsupported| |
122
+ |E:past|Unsupported| |
123
+ |E:future|Unsupported| |
124
+ |E:active|Unsupported| |
125
+ |E:hover|Unsupported| |
126
+ |E:focus|✓| |
127
+ |E:focus‑within|✓| |
128
+ |E:focus‑visible|Unsupported| |
129
+ |E:enabled<br>E:disabled|✓| |
130
+ |E:read&#8209;write<br>E:read&#8209;only|✓| |
131
+ |E:placeholder&#8209;shown|✓| |
132
+ |E:default|✓| |
133
+ |E:checked|✓| |
134
+ |E:indeterminate|✓| |
135
+ |E:valid<br>E:invalid|✓| |
136
+ |E:required<br>E:optional|✓| |
137
+ |E:blank|Unsupported| |
138
+ |E:user&#8209;invalid|Unsupported| |
139
+ |E:root|✓| |
140
+ |E:empty|✓| |
141
+ |E:nth&#8209;child(n&nbsp;[of&nbsp;S]?)|✓| |
142
+ |E:nth&#8209;last&#8209;child(n&nbsp;[of&nbsp;S]?)|✓| |
143
+ |E:first&#8209;child|✓| |
144
+ |E:last&#8209;child|✓| |
145
+ |E:only&#8209;child|✓| |
146
+ |E:nth&#8209;of&#8209;type(n)|✓| |
147
+ |E:nth&#8209;last&#8209;of&#8209;type(n)|✓| |
148
+ |E:first&#8209;of&#8209;type|✓| |
149
+ |E:last&#8209;of&#8209;type|✓| |
150
+ |E:only&#8209;of&#8209;type|✓| |
151
+ |E&nbsp;F|✓| |
152
+ |E > F|✓| |
153
+ |E + F|✓| |
154
+ |E ~ F|✓| |
155
+ |F \|\| E|Unsupported| |
156
+ |E:nth&#8209;col(n)|Unsupported| |
157
+ |E:nth&#8209;last&#8209;col(n)|Unsupported| |
158
+
159
+
88
160
  ## Monkey patch jsdom
89
161
 
90
162
  ``` javascript
@@ -159,7 +231,7 @@ const dom = new JSDOM('', {
159
231
 
160
232
  ### Performance
161
233
 
162
- |selector|jsdom|patched-jsdom|result|
234
+ |Method and CSS selector|Jsdom|Patched-jsdom|Result|
163
235
  |:------------|:------------|:------------|:------------|
164
236
  |matches('.container.box')|1,704,793 ops/sec ±2.10%|95,691 ops/sec ±2.40%|jsdom is 17.8 times faster. patched-jsdom took 0.010msec.|
165
237
  |matches('.container:not(.box)')|906,712 ops/sec ±2.02%|57,603 ops/sec ±4.57%|jsdom is 15.7 times faster. patched-jsdom took 0.017msec.|
@@ -0,0 +1,7 @@
1
+ var l=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var q=(t,e)=>{for(var o in e)l(t,o,{get:e[o],enumerable:!0})},u=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!m.call(t,r)&&r!==o&&l(t,r,{get:()=>e[r],enumerable:!(s=n(e,r))||s.enumerable});return t};var w=t=>u(l({},"__esModule",{value:!0}),t);var h={};q(h,{closest:()=>y,matches:()=>x,querySelector:()=>S,querySelectorAll:()=>a});module.exports=w(h);var c=require("./js/matcher.js");/*!
2
+ * DOM Selector - retrieve DOM node from the given CSS selector
3
+ * @license MIT
4
+ * @copyright asamuzaK (Kazz)
5
+ * @see {@link https://github.com/asamuzaK/domSelector/blob/main/LICENSE}
6
+ */const x=(t,e,o)=>new c.Matcher(t,e,o).matches(),y=(t,e,o)=>new c.Matcher(t,e,o).closest(),S=(t,e,o)=>new c.Matcher(t,e,o).querySelector(),a=(t,e,o)=>new c.Matcher(t,e,o).querySelectorAll();0&&(module.exports={closest,matches,querySelector,querySelectorAll});
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.js"],
4
+ "sourcesContent": ["/*!\n * DOM Selector - retrieve DOM node from the given CSS selector\n * @license MIT\n * @copyright asamuzaK (Kazz)\n * @see {@link https://github.com/asamuzaK/domSelector/blob/main/LICENSE}\n */\n\n/* import */\nimport { Matcher } from './js/matcher.js';\n\n/**\n * matches\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} [opt] - options\n * @param {boolean} [opt.warn] - console warn e.g. unsupported pseudo-class\n * @returns {boolean} - `true` if matched `false` otherwise\n */\nexport const matches = (selector, node, opt) =>\n new Matcher(selector, node, opt).matches();\n\n/**\n * closest\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} [opt] - options\n * @param {boolean} [opt.warn] - console warn e.g. unsupported pseudo-class\n * @returns {?object} - matched node\n */\nexport const closest = (selector, node, opt) =>\n new Matcher(selector, node, opt).closest();\n\n/**\n * querySelector\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment or Element node\n * @param {object} [opt] - options\n * @param {boolean} [opt.warn] - console warn e.g. unsupported pseudo-class\n * @returns {?object} - matched node\n */\nexport const querySelector = (selector, node, opt) =>\n new Matcher(selector, node, opt).querySelector();\n\n/**\n * querySelectorAll\n * NOTE: returns Array, not NodeList\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment or Element node\n * @param {object} [opt] - options\n * @param {boolean} [opt.sort] - sort matched nodes\n * @param {boolean} [opt.warn] - console warn e.g. unsupported pseudo-class\n * @returns {Array.<object|undefined>} - array of matched nodes\n */\nexport const querySelectorAll = (selector, node, opt) =>\n new Matcher(selector, node, opt).querySelectorAll();\n"],
5
+ "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,YAAAC,EAAA,kBAAAC,EAAA,qBAAAC,IAAA,eAAAC,EAAAN,GAQA,IAAAO,EAAwB,2BARxB;AAAA;AAAA;AAAA;AAAA;AAAA,GAkBO,MAAMJ,EAAU,CAACK,EAAUC,EAAMC,IACtC,IAAI,UAAQF,EAAUC,EAAMC,CAAG,EAAE,QAAQ,EAU9BR,EAAU,CAACM,EAAUC,EAAMC,IACtC,IAAI,UAAQF,EAAUC,EAAMC,CAAG,EAAE,QAAQ,EAU9BN,EAAgB,CAACI,EAAUC,EAAMC,IAC5C,IAAI,UAAQF,EAAUC,EAAMC,CAAG,EAAE,cAAc,EAYpCL,EAAmB,CAACG,EAAUC,EAAMC,IAC/C,IAAI,UAAQF,EAAUC,EAAMC,CAAG,EAAE,iBAAiB",
6
+ "names": ["src_exports", "__export", "closest", "matches", "querySelector", "querySelectorAll", "__toCommonJS", "import_matcher", "selector", "node", "opt"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var r=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var x=(o,t)=>{for(var E in t)r(o,E,{get:t[E],enumerable:!0})},p=(o,t,E,T)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of s(t))!n.call(o,e)&&e!==E&&r(o,e,{get:()=>t[e],enumerable:!(T=c(t,e))||T.enumerable});return o};var S=o=>p(r({},"__esModule",{value:!0}),o);var k={};x(k,{AN_PLUS_B:()=>_,ATTRIBUTE_SELECTOR:()=>O,BIT_1:()=>d,BIT_10:()=>u,BIT_100:()=>Y,BIT_1000:()=>F,BIT_10000:()=>G,BIT_100000:()=>b,CLASS_SELECTOR:()=>N,COMBINATOR:()=>I,DOCUMENT_FRAGMENT_NODE:()=>f,DOCUMENT_NODE:()=>X,DOCUMENT_POSITION_CONTAINED_BY:()=>w,DOCUMENT_POSITION_CONTAINS:()=>h,DOCUMENT_POSITION_PRECEDING:()=>g,ELEMENT_NODE:()=>H,IDENTIFIER:()=>R,ID_SELECTOR:()=>C,NOT_SUPPORTED_ERR:()=>D,NTH:()=>L,PSEUDO_CLASS_SELECTOR:()=>P,PSEUDO_ELEMENT_SELECTOR:()=>l,RAW:()=>A,SELECTOR:()=>B,SELECTOR_LIST:()=>M,SHOW_ELEMENT:()=>j,STRING:()=>U,SYNTAX_ERR:()=>i,TEXT_NODE:()=>W,TYPE_FROM:()=>m,TYPE_SELECTOR:()=>a,TYPE_TO:()=>y});module.exports=S(k);const _="AnPlusB",O="AttributeSelector",N="ClassSelector",I="Combinator",C="IdSelector",R="Identifier",D="NotSupportedError",L="Nth",P="PseudoClassSelector",l="PseudoElementSelector",A="Raw",B="Selector",M="SelectorList",U="String",i="SyntaxError",a="TypeSelector",d=1,u=2,Y=4,F=8,G=16,b=32,m=8,y=-1,H=1,W=3,X=9,f=11,g=2,h=8,w=16,j=1;0&&(module.exports={AN_PLUS_B,ATTRIBUTE_SELECTOR,BIT_1,BIT_10,BIT_100,BIT_1000,BIT_10000,BIT_100000,CLASS_SELECTOR,COMBINATOR,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,ELEMENT_NODE,IDENTIFIER,ID_SELECTOR,NOT_SUPPORTED_ERR,NTH,PSEUDO_CLASS_SELECTOR,PSEUDO_ELEMENT_SELECTOR,RAW,SELECTOR,SELECTOR_LIST,SHOW_ELEMENT,STRING,SYNTAX_ERR,TEXT_NODE,TYPE_FROM,TYPE_SELECTOR,TYPE_TO});
2
+ //# sourceMappingURL=constant.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/js/constant.js"],
4
+ "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const AN_PLUS_B = 'AnPlusB';\nexport const ATTRIBUTE_SELECTOR = 'AttributeSelector';\nexport const CLASS_SELECTOR = 'ClassSelector';\nexport const COMBINATOR = 'Combinator';\nexport const ID_SELECTOR = 'IdSelector';\nexport const IDENTIFIER = 'Identifier';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const PSEUDO_CLASS_SELECTOR = 'PseudoClassSelector';\nexport const PSEUDO_ELEMENT_SELECTOR = 'PseudoElementSelector';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const TYPE_SELECTOR = 'TypeSelector';\n\n/* numeric */\nexport const BIT_1 = 1;\nexport const BIT_10 = 2;\nexport const BIT_100 = 4;\nexport const BIT_1000 = 8;\nexport const BIT_10000 = 16;\nexport const BIT_100000 = 32;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* Node */\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\nexport const DOCUMENT_POSITION_PRECEDING = 0x02;\nexport const DOCUMENT_POSITION_CONTAINS = 0x08;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ELEMENT = 0x00000001;\n"],
5
+ "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,EAAA,uBAAAC,EAAA,UAAAC,EAAA,WAAAC,EAAA,YAAAC,EAAA,aAAAC,EAAA,cAAAC,EAAA,eAAAC,EAAA,mBAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,kBAAAC,EAAA,mCAAAC,EAAA,+BAAAC,EAAA,gCAAAC,EAAA,iBAAAC,EAAA,eAAAC,EAAA,gBAAAC,EAAA,sBAAAC,EAAA,QAAAC,EAAA,0BAAAC,EAAA,4BAAAC,EAAA,QAAAC,EAAA,aAAAC,EAAA,kBAAAC,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,cAAAC,EAAA,cAAAC,EAAA,kBAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAlC,GAKO,MAAME,EAAY,UACZC,EAAqB,oBACrBO,EAAiB,gBACjBC,EAAa,aACbQ,EAAc,aACdD,EAAa,aACbE,EAAoB,oBACpBC,EAAM,MACNC,EAAwB,sBACxBC,EAA0B,wBAC1BC,EAAM,MACNC,EAAW,WACXC,EAAgB,eAChBE,EAAS,SACTC,EAAa,cACbG,EAAgB,eAGhB5B,EAAQ,EACRC,EAAS,EACTC,EAAU,EACVC,EAAW,EACXC,EAAY,GACZC,EAAa,GACbsB,EAAY,EACZE,EAAU,GAGVhB,EAAe,EACfa,EAAY,EACZjB,EAAgB,EAChBD,EAAyB,GACzBI,EAA8B,EAC9BD,EAA6B,EAC7BD,EAAiC,GAGjCa,EAAe",
6
+ "names": ["constant_exports", "__export", "AN_PLUS_B", "ATTRIBUTE_SELECTOR", "BIT_1", "BIT_10", "BIT_100", "BIT_1000", "BIT_10000", "BIT_100000", "CLASS_SELECTOR", "COMBINATOR", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_PRECEDING", "ELEMENT_NODE", "IDENTIFIER", "ID_SELECTOR", "NOT_SUPPORTED_ERR", "NTH", "PSEUDO_CLASS_SELECTOR", "PSEUDO_ELEMENT_SELECTOR", "RAW", "SELECTOR", "SELECTOR_LIST", "SHOW_ELEMENT", "STRING", "SYNTAX_ERR", "TEXT_NODE", "TYPE_FROM", "TYPE_SELECTOR", "TYPE_TO", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var E=Object.create;var f=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var h=(e,t)=>{for(var i in t)f(e,i,{get:t[i],enumerable:!0})},N=(e,t,i,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of x(t))!g.call(e,r)&&r!==i&&f(e,r,{get:()=>t[r],enumerable:!(n=y(t,r))||n.enumerable});return e};var O=(e,t,i)=>(i=e!=null?E(D(e)):{},N(t||!e||!e.__esModule?f(i,"default",{value:e,enumerable:!0}):i,e)),C=e=>N(f({},"__esModule",{value:!0}),e);var L={};h(L,{getDirectionality:()=>m,getSlottedTextContent:()=>u,isContentEditable:()=>b,isNamespaceDeclared:()=>v,isSameOrDescendant:()=>A,selectorToNodeProps:()=>M});module.exports=C(L);var T=O(require("bidi-js"),1),l=require("./constant.js");const a="ltr",p="rtl",w=/^(?:(?:butto|hidde)n|(?:emai|te|ur)l|(?:rese|submi|tex)t|password|search)$/,_=/^(?:close|open)$/,c=(0,T.default)(),u=(e={})=>{let t;if(e.nodeType===l.ELEMENT_NODE&&e.localName==="slot"){let i=e.parentNode,n;for(;i;){const{host:r,mode:s,nodeType:o,parentNode:d}=i;if(o===l.DOCUMENT_FRAGMENT_NODE&&r&&s&&_.test(s)){n=!0;break}i=d}if(n){const r=e.assignedNodes();if(r.length){for(const s of r)if(t=s.textContent.trim(),t)break}else t=e.textContent.trim()}}return t??null},m=(e={})=>{let t;if(e.nodeType===l.ELEMENT_NODE){const{dir:i,localName:n,parentNode:r}=e;if(/^(?:ltr|rtl)$/.test(i))t=i;else if(i==="auto"){let s;if(n==="textarea"||n==="input"&&(!e.type||w.test(e.type))?s=e.value:n==="slot"?s=u(e):s=e.textContent.trim(),s){const{paragraphs:[{level:o}]}=c.getEmbeddingLevels(s);o%2===1?t=p:t=a}if(!t)if(r){const{nodeType:o}=r;o===l.ELEMENT_NODE?t=m(r):(o===l.DOCUMENT_NODE||o===l.DOCUMENT_FRAGMENT_NODE)&&(t=a)}else t=a}else if(n==="bdi"){const s=e.textContent.trim();if(s){const{paragraphs:[{level:o}]}=c.getEmbeddingLevels(s);o%2===1?t=p:t=a}t||r||(t=a)}else if(n==="input"&&e.type==="tel")t=a;else if(r){if(n==="slot"){const s=u(e);if(s){const{paragraphs:[{level:o}]}=c.getEmbeddingLevels(s);o%2===1?t=p:t=a}}if(!t){const{nodeType:s}=r;s===l.ELEMENT_NODE?t=m(r):(s===l.DOCUMENT_NODE||s===l.DOCUMENT_FRAGMENT_NODE)&&(t=a)}}else t=a}return t??null},b=(e={})=>{let t;if(e.nodeType===l.ELEMENT_NODE){if(typeof e.isContentEditable=="boolean")t=e.isContentEditable;else if(e.ownerDocument.designMode==="on")t=!0;else if(e.hasAttribute("contenteditable")){const i=e.getAttribute("contenteditable");if(/^(?:plaintext-only|true)$/.test(i)||i==="")t=!0;else if(i==="inherit"){let n=e.parentNode;for(;n;){if(b(n)){t=!0;break}n=n.parentNode}}}}return!!t},v=(e="",t={})=>{let i;if(e&&typeof e=="string"&&t.nodeType===l.ELEMENT_NODE){const n=`xmlns:${e}`,r=t.ownerDocument.documentElement;let s=t;for(;s;){if(typeof s.hasAttribute=="function"&&s.hasAttribute(n)){i=!0;break}else if(s===r)break;s=s.parentNode}}return!!i},A=(e={},t={})=>{let i;return e.nodeType===l.ELEMENT_NODE&&e.ownerDocument&&((!t||t.nodeType!==l.ELEMENT_NODE)&&(t=e.ownerDocument),e===t?i=!0:t&&(i=t.compareDocumentPosition(e)&l.DOCUMENT_POSITION_CONTAINED_BY)),!!i},M=(e,t)=>{let i,n;if(e&&typeof e=="string")/\|/.test(e)?[i,n]=e.split("|"):(i="*",n=e);else throw new DOMException(`invalid selector ${e}`,l.SYNTAX_ERR);return{prefix:i,tagName:n}};0&&(module.exports={getDirectionality,getSlottedTextContent,isContentEditable,isNamespaceDeclared,isSameOrDescendant,selectorToNodeProps});
2
+ //# sourceMappingURL=dom-util.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/js/dom-util.js"],
4
+ "sourcesContent": ["/**\n * dom-util.js\n */\n\n/* import */\nimport bidiFactory from 'bidi-js';\n\n/* constants */\nimport {\n DOCUMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_POSITION_CONTAINED_BY,\n ELEMENT_NODE, SYNTAX_ERR\n} from './constant.js';\nconst LTR = 'ltr';\nconst RTL = 'rtl';\n\n/* regexp */\nconst INPUT_TYPE =\n /^(?:(?:butto|hidde)n|(?:emai|te|ur)l|(?:rese|submi|tex)t|password|search)$/;\nconst SHADOW_MODE = /^(?:close|open)$/;\n\n/* bidi */\nconst bidi = bidiFactory();\n\n/**\n * get slotted text content\n * @param {object} node - Element node\n * @returns {?string} - text content\n */\nexport const getSlottedTextContent = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE && node.localName === 'slot') {\n let parent = node.parentNode;\n let bool;\n while (parent) {\n const { host, mode, nodeType, parentNode } = parent;\n if (nodeType === DOCUMENT_FRAGMENT_NODE && host &&\n mode && SHADOW_MODE.test(mode)) {\n bool = true;\n break;\n }\n parent = parentNode;\n }\n if (bool) {\n const nodes = node.assignedNodes();\n if (nodes.length) {\n for (const item of nodes) {\n res = item.textContent.trim();\n if (res) {\n break;\n }\n }\n } else {\n res = node.textContent.trim();\n }\n }\n }\n return res ?? null;\n};\n\n/**\n * get directionality of node\n * @see https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute\n * @param {object} node - Element node\n * @returns {?string} - result\n */\nexport const getDirectionality = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n const { dir: nodeDir, localName, parentNode } = node;\n if (/^(?:ltr|rtl)$/.test(nodeDir)) {\n res = nodeDir;\n } else if (nodeDir === 'auto') {\n let text;\n if (localName === 'textarea') {\n text = node.value;\n } else if (localName === 'input' &&\n (!node.type || INPUT_TYPE.test(node.type))) {\n text = node.value;\n } else if (localName === 'slot') {\n text = getSlottedTextContent(node);\n } else {\n text = node.textContent.trim();\n }\n if (text) {\n const { paragraphs: [{ level }] } = bidi.getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = RTL;\n } else {\n res = LTR;\n }\n }\n if (!res) {\n if (parentNode) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = LTR;\n }\n } else {\n res = LTR;\n }\n }\n } else if (localName === 'bdi') {\n const text = node.textContent.trim();\n if (text) {\n const { paragraphs: [{ level }] } = bidi.getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = RTL;\n } else {\n res = LTR;\n }\n }\n if (!(res || parentNode)) {\n res = LTR;\n }\n } else if (localName === 'input' && node.type === 'tel') {\n res = LTR;\n } else if (parentNode) {\n if (localName === 'slot') {\n const text = getSlottedTextContent(node);\n if (text) {\n const { paragraphs: [{ level }] } = bidi.getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = RTL;\n } else {\n res = LTR;\n }\n }\n }\n if (!res) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = LTR;\n }\n }\n } else {\n res = LTR;\n }\n }\n return res ?? null;\n};\n\n/**\n * is content editable\n * NOTE: not implemented in jsdom https://github.com/jsdom/jsdom/issues/1670\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isContentEditable = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n if (typeof node.isContentEditable === 'boolean') {\n res = node.isContentEditable;\n } else if (node.ownerDocument.designMode === 'on') {\n res = true;\n } else if (node.hasAttribute('contenteditable')) {\n const attr = node.getAttribute('contenteditable');\n if (/^(?:plaintext-only|true)$/.test(attr) || attr === '') {\n res = true;\n } else if (attr === 'inherit') {\n let parent = node.parentNode;\n while (parent) {\n if (isContentEditable(parent)) {\n res = true;\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n }\n return !!res;\n};\n\n/**\n * is namespace declared\n * @param {string} ns - namespace\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isNamespaceDeclared = (ns = '', node = {}) => {\n let res;\n if (ns && typeof ns === 'string' && node.nodeType === ELEMENT_NODE) {\n const attr = `xmlns:${ns}`;\n const root = node.ownerDocument.documentElement;\n let parent = node;\n while (parent) {\n if (typeof parent.hasAttribute === 'function' &&\n parent.hasAttribute(attr)) {\n res = true;\n break;\n } else if (parent === root) {\n break;\n }\n parent = parent.parentNode;\n }\n }\n return !!res;\n};\n\n/**\n * is node same or descendant of the root node\n * @param {object} node - Element node\n * @param {object} root - Document, DocumentFragment, Element node\n * @returns {boolean} - result\n */\nexport const isSameOrDescendant = (node = {}, root = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE && node.ownerDocument) {\n if (!root || root.nodeType !== ELEMENT_NODE) {\n root = node.ownerDocument;\n }\n if (node === root) {\n res = true;\n } else if (root) {\n res = root.compareDocumentPosition(node) & DOCUMENT_POSITION_CONTAINED_BY;\n }\n }\n return !!res;\n};\n\n/**\n * selector to node properties - e.g. ns|E -> { prefix: ns, tagName: E }\n * @param {string} selector - type selector\n * @param {object} [node] - Element node\n * @returns {object} - node properties\n */\nexport const selectorToNodeProps = (selector, node) => {\n let prefix, tagName;\n if (selector && typeof selector === 'string') {\n if (/\\|/.test(selector)) {\n [prefix, tagName] = selector.split('|');\n } else {\n prefix = '*';\n tagName = selector;\n }\n } else {\n throw new DOMException(`invalid selector ${selector}`, SYNTAX_ERR);\n }\n return {\n prefix,\n tagName\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["dom_util_exports", "__export", "getDirectionality", "getSlottedTextContent", "isContentEditable", "isNamespaceDeclared", "isSameOrDescendant", "selectorToNodeProps", "__toCommonJS", "import_bidi_js", "import_constant", "LTR", "RTL", "INPUT_TYPE", "SHADOW_MODE", "bidi", "bidiFactory", "node", "res", "parent", "bool", "host", "mode", "nodeType", "parentNode", "nodes", "item", "nodeDir", "localName", "text", "level", "parentNodeType", "attr", "ns", "root", "selector", "prefix", "tagName"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var V=Object.create;var L=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var G=(y,a)=>{for(var e in a)L(y,e,{get:a[e],enumerable:!0})},P=(y,a,e,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let f of H(a))!q.call(y,f)&&f!==e&&L(y,f,{get:()=>a[f],enumerable:!(n=j(a,f))||n.enumerable});return y};var Y=(y,a,e)=>(e=y!=null?V(W(y)):{},P(a||!y||!y.__esModule?L(e,"default",{value:y,enumerable:!0}):e,y)),X=y=>P(L({},"__esModule",{value:!0}),y);var Q={};G(Q,{Matcher:()=>J});module.exports=X(Q);var D=Y(require("is-potential-custom-element-name"),1),g=require("./dom-util.js"),k=require("./parser.js"),b=require("./constant.js");const C="all",A="first",S="lineal",v="self",M=/^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/,O=/^(?:(?:(?:in|out)pu|selec)t|button|form|textarea)$/,R=/^a(?:rea)?$/,U=/^d(?:etails|ialog)$/,$=/^(?:checkbox|radio)$/,x=/^(?:(?:emai|te|ur)l|number|password|search|text)$/,B=/(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/,z=/^(?:button|reset)$/,F=/^(?:image|submit)$/,I=/^(?:date(?:time-local)?|month|time|week)$/,Z=/^(?:(?:ha|i)s|not|where)$/,K=/^nth-(?:last-)?(?:child|of-type)$/;class J{#a;#i;#e;#r;#t;#o;#l;#s;constructor(a,e,n={}){const{sort:f,warn:h}=n;this.#o=a,this.#e=e,[this.#a,this.#r]=this._prepare(a),this.#t=this._getRoot(e),this.#i=new WeakMap,this.#l=!!f,this.#s=!!h}_onError(a){if(a instanceof DOMException&&a.name===b.NOT_SUPPORTED_ERR)this.#s&&console.warn(a.message);else throw a}_getRoot(a=this.#e){let e,n;switch(a.nodeType){case b.DOCUMENT_NODE:{e=a,n=a;break}case b.DOCUMENT_FRAGMENT_NODE:{e=a.ownerDocument,n=a;break}case b.ELEMENT_NODE:{if((0,g.isSameOrDescendant)(a))e=a.ownerDocument,n=a.ownerDocument;else{let f=a;for(;f&&f.parentNode;)f=f.parentNode;e=f.ownerDocument,n=f}break}default:throw new TypeError(`Unexpected node ${a.nodeName}`)}return{document:e,root:n}}_sortLeaves(a){const e=[...a];if(e.length>1){const n=new Map([[b.ATTRIBUTE_SELECTOR,b.BIT_10000],[b.CLASS_SELECTOR,b.BIT_100],[b.ID_SELECTOR,b.BIT_10],[b.PSEUDO_CLASS_SELECTOR,b.BIT_100000],[b.PSEUDO_ELEMENT_SELECTOR,b.BIT_1],[b.TYPE_SELECTOR,b.BIT_1000]]);e.sort((f,h)=>{const{type:d}=f,{type:p}=h,u=n.get(d),t=n.get(p);let i;return u===t?i=0:u>t?i=1:i=-1,i})}return e}_prepare(a=this.#o){const e=(0,k.parseSelector)(a),n=(0,k.walkAST)(e),f=[],h=[];let d=0;for(const[...p]of n){const u=[];let t=p.shift();if(t&&t.type!==b.COMBINATOR){const i=new Set;for(;t;){if(t.type===b.COMBINATOR){const[l]=p;if(l.type===b.COMBINATOR){const c=`Invalid combinator ${t.name}${l.name}`;throw new DOMException(c,b.SYNTAX_ERR)}u.push({combo:t,leaves:this._sortLeaves(i)}),i.clear()}else t&&i.add(t);if(p.length)t=p.shift();else{u.push({combo:null,leaves:this._sortLeaves(i)}),i.clear();break}}}f.push({branch:u,skip:!1}),h[d]=new Set,d++}return[f,h]}_collectNthChild(a,e){const{a:n,b:f,reverse:h,selector:d}=a,{parentNode:p}=e,u=new Set;let t;if(d&&(this.#i.has(d)?t=this.#i.get(d):(t=(0,k.walkAST)(d),this.#i.set(d,t))),p){const i=[...p.children],l=i.length;if(l){const c=new Set;if(t){const o=t.length;for(const s of i){let r;for(let m=0;m<o;m++){const N=t[m];if(r=this._matchLeaves(N,s),!r)break}r&&c.add(s)}}if(h&&i.reverse(),n===0){if(f>0&&f<=l){if(c.size)for(let o=0;o<l;o++){const s=i[o];if(c.has(s)){u.add(s);break}}else if(!d){const o=i[f-1];u.add(o)}}}else{let o=0,s=f-1;if(n>0)for(;s<0;)s+=++o*n;if(s>=0&&s<l){let r=n>0?0:f-1;for(let m=0;m<l&&s>=0&&s<l;m++){const N=i[m];c.size?c.has(N)&&(r===s&&(u.add(N),s+=n),n>0?r++:r--):m===s&&(d||u.add(N),s+=n)}}}}}else{const{root:i}=this.#t;if(i.nodeType===b.ELEMENT_NODE&&e===i&&n+f===1)if(t){const l=t.length;let c;for(let o=0;o<l;o++){const s=t[o];if(c=this._matchLeaves(s,e),c)break}c&&u.add(e)}else u.add(e)}return u}_collectNthOfType(a,e){const{a:n,b:f,reverse:h}=a,{localName:d,parentNode:p,prefix:u}=e,t=new Set;if(p){const i=[...p.children],l=i.length;if(l)if(h&&i.reverse(),n===0){if(f>0&&f<=l){let c=0;for(let o=0;o<l;o++){const s=i[o],{localName:r,prefix:m}=s;if(r===d&&m===u){if(c===f-1){t.add(s);break}c++}}}}else{let c=f-1;if(n>0)for(;c<0;)c+=n;if(c>=0&&c<l){let o=n>0?0:f-1;for(let s=0;s<l;s++){const r=i[s],{localName:m,prefix:N}=r;if(m===d&&N===u){if(o===c&&(t.add(r),c+=n),c<0||c>=l)break;n>0?o++:o--}}}}}else{const{root:i}=this.#t;i.nodeType===b.ELEMENT_NODE&&e===i&&n+f===1&&t.add(e)}return t}_matchAnPlusB(a,e,n){const{nth:{a:f,b:h,name:d},selector:p}=a,u=(0,k.unescapeSelector)(d),t=new Map;u?(u==="even"?(t.set("a",2),t.set("b",0)):u==="odd"&&(t.set("a",2),t.set("b",1)),/last/.test(n)&&t.set("reverse",!0)):(typeof f=="string"&&/-?\d+/.test(f)?t.set("a",f*1):t.set("a",0),typeof h=="string"&&/-?\d+/.test(h)?t.set("b",h*1):t.set("b",0),/last/.test(n)&&t.set("reverse",!0));let i=new Set;if(t.has("a")&&t.has("b")){if(/^nth-(?:last-)?child$/.test(n)){p&&t.set("selector",p);const l=Object.fromEntries(t),c=this._collectNthChild(l,e);c.size&&(i=c)}else if(/^nth-(?:last-)?of-type$/.test(n)){const l=Object.fromEntries(t),c=this._collectNthOfType(l,e);c.size&&(i=c)}}return i}_matchPseudoElementSelector(a,e={}){const{forgive:n}=e;switch(a){case"after":case"backdrop":case"before":case"cue":case"cue-region":case"first-letter":case"first-line":case"file-selector-button":case"marker":case"part":case"placeholder":case"selection":case"slotted":case"target-text":{if(this.#s)throw new DOMException(`Unsupported pseudo-element ::${a}`,b.NOT_SUPPORTED_ERR);break}default:if(a.startsWith("-webkit-")){if(this.#s)throw new DOMException(`Unsupported pseudo-element ::${a}`,b.NOT_SUPPORTED_ERR)}else if(!n)throw new DOMException(`Unknown pseudo-element ::${a}`,b.SYNTAX_ERR)}}_matchDirectionPseudoClass(a,e){const n=(0,k.unescapeSelector)(a.name),f=(0,g.getDirectionality)(e);let h;return n===f&&(h=e),h??null}_matchLanguagePseudoClass(a,e){const{lang:n}=e,f=(0,k.unescapeSelector)(a.name);let h;if(f==="")e.getAttribute("lang")===""&&(h=e);else if(f==="*")e.hasAttribute("lang")||(h=e);else if(/[A-Z\d-]+/i.test(f)){const d="(?:-[A-Za-z\\d]+)?";let p;if(/-/.test(f)){const[u,t,...i]=f.split("-"),l=`${u}${d}`,c=`-${t}${d}`,o=i.length;let s="";if(o)for(let r=0;r<o;r++)s+=`-${i[r]}${d}`;p=new RegExp(`^${l}${c}${s}$`,"i")}else p=new RegExp(`^${f}${d}$`,"i");if(n)p.test(n)&&(h=e);else{let u=e;for(;u;){if(p.test(u.lang)){h=e;break}u=u.parentNode}}}return h??null}_matchHasPseudoFunc(a,e){let n;if(Array.isArray(a)&&a.length){const[f]=a,{type:h}=f;let d;h===b.COMBINATOR?d=a.shift():d={name:" ",type:b.COMBINATOR};const p=[];for(;a.length;){const[i]=a,{type:l}=i;if(l===b.COMBINATOR)break;p.push(a.shift())}const u={combo:d,leaves:p},t=this._matchCombinator(u,e,{find:"next"});if(t.size)if(a.length){for(const i of t)if(n=this._matchHasPseudoFunc(Object.assign([],a),i),n)break}else n=!0}return!!n}_matchLogicalPseudoFunc(a,e){const{astName:n="",branches:f=[],selector:h="",twigBranches:d=[]}=a;let p;if(n==="has")if(h.includes(":has("))p=null;else{let u;const t=f.length;for(let i=0;i<t;i++){const l=f[i];if(u=this._matchHasPseudoFunc(Object.assign([],l),e),u)break}u&&(p=e)}else{const u=/^(?:is|where)$/.test(n);let t;const i=d.length;for(let l=0;l<i;l++){const c=d[l],o=c.length-1,{leaves:s}=c[o];if(t=this._matchLeaves(s,e,{forgive:u}),t&&o>0){let r=new Set([e]);for(let m=o-1;m>=0;m--){const N=c[m],w=[];for(const E of r){const T=this._matchCombinator(N,E,{forgive:u,find:"prev"});T.size&&w.push(...T)}const _=new Set(w);if(_.size)if(m===0){t=!0;break}else r=_;else{t=!1;break}}}if(t)break}n==="not"?t||(p=e):t&&(p=e)}return p??null}_matchPseudoClassSelector(a,e,n={}){const{children:f}=a,{localName:h,parentNode:d}=e,{forgive:p}=n,u=(0,k.unescapeSelector)(a.name);let t=new Set;if(Z.test(u)){let i;if(this.#i.has(a))i=this.#i.get(a);else{const c=(0,k.walkAST)(a),o=[],s=[];for(const[...r]of c){for(const _ of r){const E=(0,k.generateCSS)(_);o.push(E)}const m=[],N=new Set;let w=r.shift();for(;w;)if(w.type===b.COMBINATOR?(m.push({combo:w,leaves:[...N]}),N.clear()):w&&N.add(w),r.length)w=r.shift();else{m.push({combo:null,leaves:[...N]}),N.clear();break}s.push(m)}i={astName:u,branches:c,twigBranches:s,selector:o.join(",")},this.#i.set(a,i)}const l=this._matchLogicalPseudoFunc(i,e);l&&t.add(l)}else if(Array.isArray(f)){const[i]=f;if(K.test(u)){const l=this._matchAnPlusB(i,e,u);l.size&&(t=l)}else if(u==="dir"){const l=this._matchDirectionPseudoClass(i,e);l&&t.add(l)}else if(u==="lang"){const l=this._matchLanguagePseudoClass(i,e);l&&t.add(l)}else switch(u){case"current":case"nth-col":case"nth-last-col":{if(this.#s)throw new DOMException(`Unsupported pseudo-class :${u}()`,b.NOT_SUPPORTED_ERR);break}default:if(!p)throw new DOMException(`Unknown pseudo-class :${u}()`,b.SYNTAX_ERR)}}else{const{document:i,root:l}=this.#t,{documentElement:c}=i,o=new URL(i.URL);switch(u){case"any-link":case"link":{R.test(h)&&e.hasAttribute("href")&&t.add(e);break}case"local-link":{if(R.test(h)&&e.hasAttribute("href")){const s=new URL(e.getAttribute("href"),o.href);s.origin===o.origin&&s.pathname===o.pathname&&t.add(e)}break}case"visited":break;case"target":{(0,g.isSameOrDescendant)(e)&&o.hash&&e.id&&o.hash===`#${e.id}`&&t.add(e);break}case"target-within":{if(o.hash){const s=o.hash.replace(/^#/,"");let r=i.getElementById(s);for(;r;){if(r===e){t.add(e);break}r=r.parentNode}}break}case"scope":{this.#e.nodeType===b.ELEMENT_NODE?e===this.#e&&t.add(e):e===c&&t.add(e);break}case"focus":{e===i.activeElement&&t.add(e);break}case"focus-within":{let s=i.activeElement;for(;s;){if(s===e){t.add(e);break}s=s.parentNode}break}case"open":{U.test(h)&&e.hasAttribute("open")&&t.add(e);break}case"closed":{U.test(h)&&!e.hasAttribute("open")&&t.add(e);break}case"disabled":{if(M.test(h)||(0,D.default)(h))if(e.disabled||e.hasAttribute("disabled"))t.add(e);else{let s=d;for(;s&&s.localName!=="fieldset";)s=s.parentNode;s&&s.hasAttribute("disabled")&&d.localName!=="legend"&&t.add(e)}break}case"enabled":{(M.test(h)||(0,D.default)(h))&&!(e.disabled&&e.hasAttribute("disabled"))&&t.add(e);break}case"read-only":{switch(h){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}case"input":{(!e.type||x.test(e.type)||I.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,g.isContentEditable)(e)||t.add(e)}break}case"read-write":{switch(h){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||t.add(e);break}case"input":{(!e.type||x.test(e.type)||I.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,g.isContentEditable)(e)&&t.add(e)}break}case"placeholder-shown":{let s;h==="textarea"?s=e:h==="input"&&(e.hasAttribute("type")?x.test(e.getAttribute("type"))&&(s=e):s=e),s&&e.hasAttribute("placeholder")&&e.getAttribute("placeholder").trim().length&&e.value===""&&t.add(e);break}case"checked":{(h==="input"&&e.hasAttribute("type")&&$.test(e.getAttribute("type"))&&e.checked||h==="option"&&e.selected)&&t.add(e);break}case"indeterminate":{if(h==="input"&&e.type==="checkbox"&&e.indeterminate||h==="progress"&&!e.hasAttribute("value"))t.add(e);else if(h==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const s=e.name;let r=e.parentNode;for(;r&&r.localName!=="form";)r=r.parentNode;r||(r=c);const m=[...r.getElementsByTagName("input")];let N;for(const w of m)if(w.getAttribute("type")==="radio"&&(s?w.getAttribute("name")===s&&(N=!!w.checked):w.hasAttribute("name")||(N=!!w.checked),N))break;N||t.add(e)}break}case"default":{if(h==="button"&&!(e.hasAttribute("type")&&z.test(e.getAttribute("type")))||h==="input"&&e.hasAttribute("type")&&F.test(e.getAttribute("type"))){let s=e.parentNode;for(;s&&s.localName!=="form";)s=s.parentNode;if(s){const r=i.createNodeIterator(s,b.SHOW_ELEMENT);let m=r.nextNode();for(;m;){const N=m.localName;let w;if(N==="button"?w=!(m.hasAttribute("type")&&z.test(m.getAttribute("type"))):N==="input"&&(w=m.hasAttribute("type")&&F.test(m.getAttribute("type"))),w){m===e&&t.add(e);break}m=r.nextNode()}}}else if(h==="input"&&e.hasAttribute("type")&&$.test(e.getAttribute("type"))&&e.hasAttribute("checked"))t.add(e);else if(h==="option"){let s=!1,r=d;for(;r&&r.localName!=="datalist";){if(r.localName==="select"){s=!!r.multiple;break}r=r.parentNode}if(s){if(this.#s)throw new DOMException(`Unsupported pseudo-class :${u}`,b.NOT_SUPPORTED_ERR)}else{const m=d.firstElementChild,N=new Set;let w=m;for(;w;){if(w.hasAttribute("selected")){N.add(w);break}w=w.nextElementSibling}N.size||N.add(m),N.has(e)&&t.add(e)}}break}case"valid":{if(O.test(h))e.checkValidity()&&t.add(e);else if(/^fieldset$/.test(h)){const s=i.createNodeIterator(e,b.SHOW_ELEMENT);let r=s.nextNode();r===e&&(r=s.nextNode());let m;for(;r&&!(O.test(r.localName)&&(m=r.checkValidity(),!m));)r=s.nextNode();m&&t.add(e)}break}case"invalid":{if(O.test(h))e.checkValidity()||t.add(e);else if(/^fieldset$/.test(h)){const s=i.createNodeIterator(e,b.SHOW_ELEMENT);let r=s.nextNode();r===e&&(r=s.nextNode());let m;for(;r&&!(O.test(r.localName)&&(m=r.checkValidity(),!m));)r=s.nextNode();m||t.add(e)}break}case"in-range":{h==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&B.test(e.getAttribute("type"))&&!(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&(e.hasAttribute("min")||e.hasAttribute("max")||e.getAttribute("type")==="range")&&t.add(e);break}case"out-of-range":{h==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&B.test(e.getAttribute("type"))&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&t.add(e);break}case"required":{let s;if(/^(?:select|textarea)$/.test(h))s=e;else if(h==="input")if(e.hasAttribute("type")){const r=e.getAttribute("type");(x.test(r)||$.test(r)||I.test(r)||r==="file")&&(s=e)}else s=e;s&&(e.required||e.hasAttribute("required"))&&t.add(e);break}case"optional":{let s;if(/^(?:select|textarea)$/.test(h))s=e;else if(h==="input")if(e.hasAttribute("type")){const r=e.getAttribute("type");(x.test(r)||$.test(r)||I.test(r)||r==="file")&&(s=e)}else s=e;s&&!(e.required||e.hasAttribute("required"))&&t.add(e);break}case"root":{e===c&&t.add(e);break}case"empty":{if(e.hasChildNodes()){const s=e.childNodes.values();let r;for(const m of s)if(r=m.nodeType!==b.ELEMENT_NODE&&m.nodeType!==b.TEXT_NODE,!r)break;r&&t.add(e)}else t.add(e);break}case"first-child":{(d&&e===d.firstElementChild||l.nodeType===b.ELEMENT_NODE&&e===l)&&t.add(e);break}case"last-child":{(d&&e===d.lastElementChild||l.nodeType===b.ELEMENT_NODE&&e===l)&&t.add(e);break}case"only-child":{(d&&e===d.firstElementChild&&e===d.lastElementChild||l.nodeType===b.ELEMENT_NODE&&e===l)&&t.add(e);break}case"first-of-type":{if(d){const[s]=this._collectNthOfType({a:0,b:1},e);s&&t.add(s)}else l.nodeType===b.ELEMENT_NODE&&e===l&&t.add(e);break}case"last-of-type":{if(d){const[s]=this._collectNthOfType({a:0,b:1,reverse:!0},e);s&&t.add(s)}else l.nodeType===b.ELEMENT_NODE&&e===l&&t.add(e);break}case"only-of-type":{if(d){const[s]=this._collectNthOfType({a:0,b:1},e);if(s===e){const[r]=this._collectNthOfType({a:0,b:1,reverse:!0},e);r===e&&t.add(e)}}else l.nodeType===b.ELEMENT_NODE&&e===l&&t.add(e);break}case"after":case"before":case"first-letter":case"first-line":{if(this.#s)throw new DOMException(`Unsupported pseudo-element ::${u}`,b.NOT_SUPPORTED_ERR);break}case"active":case"autofill":case"blank":case"buffering":case"current":case"focus-visible":case"fullscreen":case"future":case"hover":case"modal":case"muted":case"past":case"paused":case"picture-in-picture":case"playing":case"seeking":case"stalled":case"user-invalid":case"user-valid":case"volume-locked":case"-webkit-autofill":{if(this.#s)throw new DOMException(`Unsupported pseudo-class :${u}`,b.NOT_SUPPORTED_ERR);break}default:if(u.startsWith("-webkit-")){if(this.#s)throw new DOMException(`Unsupported pseudo-class :${u}`,b.NOT_SUPPORTED_ERR)}else if(!p)throw new DOMException(`Unknown pseudo-class :${u}`,b.SYNTAX_ERR)}}return t}_matchAttributeSelector(a,e){const{flags:n,matcher:f,name:h,value:d}=a;if(typeof n=="string"&&!/^[is]$/i.test(n))throw new DOMException("Invalid attribute selector",b.SYNTAX_ERR);const{attributes:p}=e;let u;if(p&&p.length){const{document:t}=this.#t;let i;t.contentType==="text/html"?typeof n=="string"&&/^s$/i.test(n)?i=!1:i=!0:typeof n=="string"&&/^i$/i.test(n)?i=!0:i=!1;let{name:l}=h;l=(0,k.unescapeSelector)(l),i&&(l=l.toLowerCase());const c=new Set;if(/\|/.test(l)){const{prefix:o,tagName:s}=(0,g.selectorToNodeProps)(l);for(let{name:r,value:m}of p)switch(i&&(r=r.toLowerCase(),m=m.toLowerCase()),o){case"":{s===r&&c.add(m);break}case"*":{/:/.test(r)?r.endsWith(`:${s}`)&&c.add(m):s===r&&c.add(m);break}default:if(/:/.test(r)){const[N,w]=r.split(":");o===N&&s===w&&(0,g.isNamespaceDeclared)(o,e)&&c.add(m)}}}else for(let{name:o,value:s}of p)if(i&&(o=o.toLowerCase(),s=s.toLowerCase()),/:/.test(o)){const[,r]=o.split(":");l===r&&c.add(s)}else l===o&&c.add(s);if(c.size){const{name:o,value:s}=d||{};let r;switch(o?i?r=o.toLowerCase():r=o:s?i?r=s.toLowerCase():r=s:s===""&&(r=s),f){case"=":{typeof r=="string"&&c.has(r)&&(u=e);break}case"~=":{if(r&&typeof r=="string"){for(const m of c)if(new Set(m.split(/\s+/)).has(r)){u=e;break}}break}case"|=":{if(r&&typeof r=="string"){let m;for(const N of c)if(N===r||N.startsWith(`${r}-`)){m=N;break}m&&(u=e)}break}case"^=":{if(r&&typeof r=="string"){let m;for(const N of c)if(N.startsWith(`${r}`)){m=N;break}m&&(u=e)}break}case"$=":{if(r&&typeof r=="string"){let m;for(const N of c)if(N.endsWith(`${r}`)){m=N;break}m&&(u=e)}break}case"*=":{if(r&&typeof r=="string"){let m;for(const N of c)if(N.includes(`${r}`)){m=N;break}m&&(u=e)}break}case null:default:u=e}}}return u??null}_matchClassSelector(a,e){const n=(0,k.unescapeSelector)(a.name);let f;return e.classList.contains(n)&&(f=e),f??null}_matchIDSelector(a,e){const{id:n}=e,f=(0,k.unescapeSelector)(a.name);let h;return f===n&&(h=e),h??null}_matchTypeSelector(a,e){const n=(0,k.unescapeSelector)(a.name),{localName:f,prefix:h}=e,{document:d}=this.#t;let{prefix:p,tagName:u}=(0,g.selectorToNodeProps)(n,e);d.contentType==="text/html"&&(p=p.toLowerCase(),u=u.toLowerCase());let t,i;/:/.test(f)?[t,i]=f.split(":"):(t=h||"",i=f);let l;return p===""&&t===""?e.namespaceURI===null&&(u==="*"||u===i)&&(l=e):p==="*"?(u==="*"||u===i)&&(l=e):p===t&&(0,g.isNamespaceDeclared)(p,e)&&(u==="*"||u===i)&&(l=e),l??null}_matchSelector(a,e,n){const{type:f}=a;let h=new Set;if(e.nodeType===b.ELEMENT_NODE)switch(f){case b.ATTRIBUTE_SELECTOR:{const d=this._matchAttributeSelector(a,e);d&&h.add(d);break}case b.CLASS_SELECTOR:{const d=this._matchClassSelector(a,e);d&&h.add(d);break}case b.ID_SELECTOR:{const d=this._matchIDSelector(a,e);d&&h.add(d);break}case b.PSEUDO_CLASS_SELECTOR:{const d=this._matchPseudoClassSelector(a,e,n);d.size&&(h=d);break}case b.PSEUDO_ELEMENT_SELECTOR:{const d=(0,k.unescapeSelector)(a.name);this._matchPseudoElementSelector(d,n);break}case b.TYPE_SELECTOR:default:{const d=this._matchTypeSelector(a,e);d&&h.add(d)}}return h}_matchLeaves(a,e,n){let f;for(const h of a)if(f=this._matchSelector(h,e,n).has(e),!f)break;return!!f}_findDescendantNodes(a,e){const[n,...f]=a,{type:h}=n,d=(0,k.unescapeSelector)(n.name),p=f.length>0,{document:u,root:t}=this.#t;let i=new Set,l=!1;switch(h){case b.ID_SELECTOR:{if(t.nodeType===b.ELEMENT_NODE)l=!0;else{const c=t.getElementById(d);if(c&&c!==e){const o=(0,g.isSameOrDescendant)(c,e);let s;o&&(s=c),s&&(p?this._matchLeaves(f,s)&&i.add(s):i.add(s))}}break}case b.CLASS_SELECTOR:{const c=[...e.getElementsByClassName(d)];if(c.length)if(p)for(const o of c)this._matchLeaves(f,o)&&i.add(o);else i=new Set(c);break}case b.TYPE_SELECTOR:{if(u.contentType!=="text/html"||/[*|]/.test(d))l=!0;else{const c=[...e.getElementsByTagName(d)];if(c.length)if(p)for(const o of c)this._matchLeaves(f,o)&&i.add(o);else i=new Set(c)}break}case b.PSEUDO_ELEMENT_SELECTOR:{this._matchPseudoElementSelector(d);break}default:l=!0}return{nodes:i,pending:l}}_matchCombinator(a,e,n={}){const{combo:f,leaves:h}=a,{name:d}=f,{find:p,forgive:u}=n;let t=new Set;if(p==="next")switch(d){case"+":{const i=e.nextElementSibling;i&&this._matchLeaves(h,i)&&t.add(i);break}case"~":{let i=e.nextElementSibling;for(;i;)this._matchLeaves(h,i)&&t.add(i),i=i.nextElementSibling;break}case">":{const i=[...e.children];for(const l of i)this._matchLeaves(h,l)&&t.add(l);break}case" ":default:{const{nodes:i,pending:l}=this._findDescendantNodes(h,e);if(i.size)t=i;else if(l){const{document:c}=this.#t,o=c.createNodeIterator(e,b.SHOW_ELEMENT);let s=o.nextNode();for(s===e&&(s=o.nextNode());s;)this._matchLeaves(h,s)&&t.add(s),s=o.nextNode()}}}else switch(d){case"+":{const i=e.previousElementSibling;i&&this._matchLeaves(h,i,{forgive:u})&&t.add(i);break}case"~":{const i=[];let l=e.previousElementSibling;for(;l;)this._matchLeaves(h,l,{forgive:u})&&i.push(l),l=l.previousElementSibling;i.length&&(t=new Set(i.reverse()));break}case">":{const i=e.parentNode;i&&this._matchLeaves(h,i,{forgive:u})&&t.add(i);break}case" ":default:{const i=[];let l=e.parentNode;for(;l;)this._matchLeaves(h,l,{forgive:u})&&i.push(l),l=l.parentNode;i.length&&(t=new Set(i.reverse()))}}return t}_findNodes(a,e){const{leaves:[n,...f]}=a,{type:h}=n,d=(0,k.unescapeSelector)(n.name),p=f.length>0,{document:u,root:t}=this.#t;let i=new Set,l=!1;switch(h){case b.ID_SELECTOR:{let c;if(e===v)this._matchLeaves([n],this.#e)&&(c=this.#e);else if(e===S){let o=this.#e;for(;o;){if(this._matchLeaves([n],o)){c=o;break}o=o.parentNode}}else t.nodeType===b.ELEMENT_NODE?l=!0:c=t.getElementById(d);c&&(p?this._matchLeaves(f,c)&&i.add(c):i.add(c));break}case b.CLASS_SELECTOR:{const c=[];if(e===v)this.#e.nodeType===b.ELEMENT_NODE&&this.#e.classList.contains(d)&&c.push(this.#e);else if(e===S){let o=this.#e;for(;o&&o.nodeType===b.ELEMENT_NODE;)o.classList.contains(d)&&c.push(o),o=o.parentNode}else if(t.nodeType===b.DOCUMENT_FRAGMENT_NODE){const o=[...t.children];for(const s of o){s.classList.contains(d)&&c.push(s);const r=[...s.getElementsByClassName(d)];c.push(...r)}}else{const o=[...t.getElementsByClassName(d)];c.push(...o)}if(c.length)if(p)for(const o of c)this._matchLeaves(f,o)&&i.add(o);else i=new Set(c);break}case b.TYPE_SELECTOR:{const c=[];if(e===v)this.#e.nodeType===b.ELEMENT_NODE&&this._matchLeaves([n],this.#e)&&c.push(this.#e);else if(e===S){let o=this.#e;for(;o&&o.nodeType===b.ELEMENT_NODE;)this._matchLeaves([n],o)&&c.push(o),o=o.parentNode}else if(u.contentType!=="text/html"||/[*|]/.test(d))l=!0;else if(t.nodeType===b.DOCUMENT_FRAGMENT_NODE){const o=d.toLowerCase(),s=[...t.children];for(const r of s){r.localName===o&&c.push(r);const m=[...r.getElementsByTagName(d)];c.push(...m)}}else{const o=[...t.getElementsByTagName(d)];c.push(...o)}if(c.length)if(p)for(const o of c)this._matchLeaves(f,o)&&i.add(o);else i=new Set(c);break}case b.PSEUDO_ELEMENT_SELECTOR:{this._matchPseudoElementSelector(d);break}default:{const c=[];if(e===v)this._matchLeaves([n],this.#e)&&c.push(this.#e);else if(e===S){let o=this.#e;for(;o;)this._matchLeaves([n],o)&&c.push(o),o=o.parentNode}else l=!0;if(c.length)if(p)for(const o of c)this._matchLeaves(f,o)&&i.add(o);else i=new Set(c)}}return{nodes:i,pending:l}}_collectNodes(a){const e=this.#a.values();if(a===C||a===A){const n=new Set;let f=0;for(const{branch:h}of e){const d=h[0],{nodes:p,pending:u}=this._findNodes(d,a);p.size?this.#r[f]=p:u?n.add(new Map([["index",f],["twig",d]])):this.#a[f].skip=!0,f++}if(n.size){const{document:h,root:d}=this.#t,p=h.createNodeIterator(d,b.SHOW_ELEMENT);let u=p.nextNode();for(;u;){let t=!1;if(this.#e.nodeType===b.ELEMENT_NODE?t=(0,g.isSameOrDescendant)(u,this.#e):t=!0,t)for(const i of n){const{leaves:l}=i.get("twig");if(this._matchLeaves(l,u)){const o=i.get("index");this.#r[o].add(u)}}u=p.nextNode()}}}else{let n=0;for(const{branch:f}of e){const h=f[f.length-1],{nodes:d}=this._findNodes(h,a);d.size?this.#r[n]=d:this.#a[n].skip=!0,n++}}return[this.#a,this.#r]}_matchNodes(a){const[...e]=this.#a,n=e.length;let f=new Set;for(let h=0;h<n;h++){const{branch:d,skip:p}=e[h],u=d.length;if(!p&&u){const t=this.#r[h],i=u-1;if(i===0)if((a===C||a===A)&&this.#e.nodeType===b.ELEMENT_NODE){for(const l of t)if(l!==this.#e&&(0,g.isSameOrDescendant)(l,this.#e)&&(f.add(l),a===A))break}else if(a===A){const[l]=[...t];f.add(l)}else{const l=[...f],c=[...t];f=new Set([...l,...c])}else if(a===C||a===A){let{combo:l}=d[0];for(const c of t){let o=new Set([c]);for(let s=1;s<u;s++){const{combo:r,leaves:m}=d[s],N=[];for(const _ of o){const E={combo:l,leaves:m},T=this._matchCombinator(E,_,{find:"next"});T.size&&N.push(...T)}const w=new Set(N);if(w.size)if(s===i){if(a===A){const[_]=[...w];f.add(_)}else{const _=[...f],E=[...w];f=new Set([..._,...E])}break}else l=r,o=w;else break}}}else for(const l of t){let c=new Set([l]),o;for(let s=i-1;s>=0;s--){const r=d[s],m=[];for(const w of c){const _=this._matchCombinator(r,w,{find:"prev"});_.size&&m.push(..._)}const N=new Set(m);if(N.size)if(o=!0,s===0){f.add(l);break}else c=N;else{o=!1;break}}if(o)break}}}return f}_find(a){return this._collectNodes(a),this._matchNodes(a)}_sortNodes(a){const e=[...a];return e.length>1&&e.sort((n,f)=>{let h;const d=n.compareDocumentPosition(f);return d&b.DOCUMENT_POSITION_PRECEDING||d&b.DOCUMENT_POSITION_CONTAINS?h=1:h=-1,h}),e}matches(){if(this.#e.nodeType!==b.ELEMENT_NODE)throw new TypeError(`Unexpected node ${this.#e.nodeName}`);let a;try{a=this._find(v).has(this.#e)}catch(e){this._onError(e)}return!!a}closest(){if(this.#e.nodeType!==b.ELEMENT_NODE)throw new TypeError(`Unexpected node ${this.#e.nodeName}`);let a;try{const e=this._find(S);let n=this.#e;for(;n;){if(e.has(n)){a=n;break}n=n.parentNode}}catch(e){this._onError(e)}return a??null}querySelector(){let a;try{const e=this._find(A);e.delete(this.#e),e.size>1?[a]=this._sortNodes(e):e.size&&([a]=[...e])}catch(e){this._onError(e)}return a??null}querySelectorAll(){const a=[];try{const e=this._find(C);e.delete(this.#e),e.size>1&&this.#l?a.push(...this._sortNodes(e)):e.size&&a.push(...e)}catch(e){this._onError(e)}return a}}0&&(module.exports={Matcher});
2
+ //# sourceMappingURL=matcher.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/js/matcher.js"],
4
+ "sourcesContent": ["/**\n * matcher.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport {\n getDirectionality, isContentEditable, isNamespaceDeclared, isSameOrDescendant,\n selectorToNodeProps\n} from './dom-util.js';\nimport {\n generateCSS, parseSelector, unescapeSelector, walkAST\n} from './parser.js';\n\n/* constants */\nimport {\n ATTRIBUTE_SELECTOR, BIT_1, BIT_10, BIT_100, BIT_1000, BIT_10000, BIT_100000,\n CLASS_SELECTOR, COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE,\n DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_PRECEDING, ELEMENT_NODE,\n ID_SELECTOR, NOT_SUPPORTED_ERR, PSEUDO_CLASS_SELECTOR,\n PSEUDO_ELEMENT_SELECTOR, SHOW_ELEMENT, SYNTAX_ERR, TEXT_NODE, TYPE_SELECTOR\n} from './constant.js';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\n\n/* regexp */\nconst FORM_PARTS =\n /^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/;\nconst FORM_VALIDITY = /^(?:(?:(?:in|out)pu|selec)t|button|form|textarea)$/;\nconst HTML_ANCHOR = /^a(?:rea)?$/;\nconst HTML_INTERACT = /^d(?:etails|ialog)$/;\nconst INPUT_CHECK = /^(?:checkbox|radio)$/;\nconst INPUT_EDIT = /^(?:(?:emai|te|ur)l|number|password|search|text)$/;\nconst INPUT_RANGE = /(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/;\nconst INPUT_RESET = /^(?:button|reset)$/;\nconst INPUT_SUBMIT = /^(?:image|submit)$/;\nconst INPUT_TIME = /^(?:date(?:time-local)?|month|time|week)$/;\nconst PSEUDO_FUNC = /^(?:(?:ha|i)s|not|where)$/;\nconst PSEUDO_NTH = /^nth-(?:last-)?(?:child|of-type)$/;\n\n/**\n * Matcher\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: [\n * {\n * branch: branch[],\n * skip: boolean\n * },\n * {\n * branch: branch[],\n * skip: boolean\n * }\n * ]\n * #nodes: [\n * Set([node{}, node{}]),\n * Set([node{}, node, node{}])\n * ]\n * branch[]: [twig{}, twig{}]\n * twig{}: {\n * combo: leaf{}|null,\n * leaves: leaves[]\n * }\n * leaves[]: [leaf{}, leaf{}, leaf{}]\n * leaf{}: AST leaf\n * node{}: Element node\n */\nexport class Matcher {\n /* private fields */\n #ast;\n #cache;\n #node;\n #nodes;\n #root;\n #selector;\n #sort;\n #warn;\n\n /**\n * construct\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @param {boolean} [opt.sort] - sort results of querySelectorAll()\n * @param {boolean} [opt.warn] - console warn\n */\n constructor(selector, node, opt = {}) {\n const { sort, warn } = opt;\n this.#selector = selector;\n this.#node = node;\n [this.#ast, this.#nodes] = this._prepare(selector);\n this.#root = this._getRoot(node);\n this.#cache = new WeakMap();\n this.#sort = !!sort;\n this.#warn = !!warn;\n }\n\n /**\n * handle error\n * @param {Error} e - Error\n * @throws Error\n * @returns {void}\n */\n _onError(e) {\n if (e instanceof DOMException && e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else {\n throw e;\n }\n }\n\n /**\n * get root\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {object} - root object\n */\n _getRoot(node = this.#node) {\n let document;\n let root;\n switch (node.nodeType) {\n case DOCUMENT_NODE: {\n document = node;\n root = node;\n break;\n }\n case DOCUMENT_FRAGMENT_NODE: {\n document = node.ownerDocument;\n root = node;\n break;\n }\n case ELEMENT_NODE: {\n if (isSameOrDescendant(node)) {\n document = node.ownerDocument;\n root = node.ownerDocument;\n } else {\n let parent = node;\n while (parent) {\n if (parent.parentNode) {\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n document = parent.ownerDocument;\n root = parent;\n }\n break;\n }\n default: {\n throw new TypeError(`Unexpected node ${node.nodeName}`);\n }\n }\n return {\n document,\n root\n };\n }\n\n /**\n * sort AST leaves\n * @param {Array.<object>} leaves - AST leaves\n * @returns {Array.<object>} - sorted leaves\n */\n _sortLeaves(leaves) {\n const arr = [...leaves];\n if (arr.length > 1) {\n const bitMap = new Map([\n [ATTRIBUTE_SELECTOR, BIT_10000],\n [CLASS_SELECTOR, BIT_100],\n [ID_SELECTOR, BIT_10],\n [PSEUDO_CLASS_SELECTOR, BIT_100000],\n [PSEUDO_ELEMENT_SELECTOR, BIT_1],\n [TYPE_SELECTOR, BIT_1000]\n ]);\n arr.sort((a, b) => {\n const { type: typeA } = a;\n const { type: typeB } = b;\n const bitA = bitMap.get(typeA);\n const bitB = bitMap.get(typeB);\n let res;\n if (bitA === bitB) {\n res = 0;\n } else if (bitA > bitB) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n }\n\n /**\n * prepare ast and nodes\n * @param {string} selector - CSS selector\n * @returns {Array.<Array.<object|undefined>>} - list and matrix\n */\n _prepare(selector = this.#selector) {\n const ast = parseSelector(selector);\n const branches = walkAST(ast);\n const tree = [];\n const nodes = [];\n let i = 0;\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n const msg = `Invalid combinator ${item.name}${nextItem.name}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n branch.push({\n combo: item,\n leaves: this._sortLeaves(leaves)\n });\n leaves.clear();\n } else if (item) {\n leaves.add(item);\n }\n if (items.length) {\n item = items.shift();\n } else {\n branch.push({\n combo: null,\n leaves: this._sortLeaves(leaves)\n });\n leaves.clear();\n break;\n }\n }\n }\n tree.push({\n branch,\n skip: false\n });\n nodes[i] = new Set();\n i++;\n }\n return [\n tree,\n nodes\n ];\n }\n\n /**\n * collect nth child\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @returns {object} - collection of matched nodes\n */\n _collectNthChild(anb, node) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n const matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#cache.has(selector)) {\n selectorBranches = this.#cache.get(selector);\n } else {\n selectorBranches = walkAST(selector);\n this.#cache.set(selector, selectorBranches);\n }\n }\n if (parentNode) {\n const arr = [...parentNode.children];\n const l = arr.length;\n if (l) {\n const selectorNodes = new Set();\n if (selectorBranches) {\n const branchesLen = selectorBranches.length;\n for (const refNode of arr) {\n let bool;\n for (let i = 0; i < branchesLen; i++) {\n const leaves = selectorBranches[i];\n bool = this._matchLeaves(leaves, refNode);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n }\n }\n if (reverse) {\n arr.reverse();\n }\n // :first-child, :last-child, :nth-child(0 of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n for (let i = 0; i < l; i++) {\n const current = arr[i];\n if (selectorNodes.has(current)) {\n matched.add(current);\n break;\n }\n }\n } else if (!selector) {\n const current = arr[b - 1];\n matched.add(current);\n }\n }\n // :nth-child()\n } else {\n let n = 0;\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += (++n * a);\n }\n }\n if (nth >= 0 && nth < l) {\n let j = a > 0 ? 0 : b - 1;\n for (let i = 0; i < l && nth >= 0 && nth < l; i++) {\n const current = arr[i];\n if (selectorNodes.size) {\n if (selectorNodes.has(current)) {\n if (j === nth) {\n matched.add(current);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(current);\n }\n nth += a;\n }\n }\n }\n }\n }\n } else {\n const { root } = this.#root;\n if (root.nodeType === ELEMENT_NODE && node === root && (a + b) === 1) {\n if (selectorBranches) {\n const branchesLen = selectorBranches.length;\n let bool;\n for (let i = 0; i < branchesLen; i++) {\n const leaves = selectorBranches[i];\n bool = this._matchLeaves(leaves, node);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {object} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const arr = [...parentNode.children];\n const l = arr.length;\n if (l) {\n if (reverse) {\n arr.reverse();\n }\n // :first-of-type, :last-of-type\n if (a === 0) {\n if (b > 0 && b <= l) {\n let j = 0;\n for (let i = 0; i < l; i++) {\n const current = arr[i];\n const { localName: itemLocalName, prefix: itemPrefix } = current;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === b - 1) {\n matched.add(current);\n break;\n }\n j++;\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n let j = a > 0 ? 0 : b - 1;\n for (let i = 0; i < l; i++) {\n const current = arr[i];\n const { localName: itemLocalName, prefix: itemPrefix } = current;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === nth) {\n matched.add(current);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n }\n }\n }\n }\n } else {\n const { root } = this.#root;\n if (root.nodeType === ELEMENT_NODE && node === root && (a + b) === 1) {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * match An+B\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {string} nthName - nth pseudo-class name\n * @returns {object} - collection of matched nodes\n */\n _matchAnPlusB(ast, node, nthName) {\n const {\n nth: {\n a,\n b,\n name: nthIdentName\n },\n selector\n } = ast;\n const identName = unescapeSelector(nthIdentName);\n const anbMap = new Map();\n if (identName) {\n if (identName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (identName === 'odd') {\n anbMap.set('a', 2);\n anbMap.set('b', 1);\n }\n if (/last/.test(nthName)) {\n anbMap.set('reverse', true);\n }\n } else {\n if (typeof a === 'string' && /-?\\d+/.test(a)) {\n anbMap.set('a', a * 1);\n } else {\n anbMap.set('a', 0);\n }\n if (typeof b === 'string' && /-?\\d+/.test(b)) {\n anbMap.set('b', b * 1);\n } else {\n anbMap.set('b', 0);\n }\n if (/last/.test(nthName)) {\n anbMap.set('reverse', true);\n }\n }\n let matched = new Set();\n if (anbMap.has('a') && anbMap.has('b')) {\n if (/^nth-(?:last-)?child$/.test(nthName)) {\n if (selector) {\n anbMap.set('selector', selector);\n }\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthChild(anb, node);\n if (nodes.size) {\n matched = nodes;\n }\n } else if (/^nth-(?:last-)?of-type$/.test(nthName)) {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n if (nodes.size) {\n matched = nodes;\n }\n }\n }\n return matched;\n }\n\n /**\n * match pseudo element selector\n * @param {string} astName - AST name\n * @param {object} opt - options\n * @throws {DOMException}\n * @returns {void}\n */\n _matchPseudoElementSelector(astName, opt = {}) {\n const { forgive } = opt;\n switch (astName) {\n case 'after':\n case 'backdrop':\n case 'before':\n case 'cue':\n case 'cue-region':\n case 'first-letter':\n case 'first-line':\n case 'file-selector-button':\n case 'marker':\n case 'part':\n case 'placeholder':\n case 'selection':\n case 'slotted':\n case 'target-text': {\n if (this.#warn) {\n throw new DOMException(`Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (this.#warn) {\n throw new DOMException(`Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n throw new DOMException(`Unknown pseudo-element ::${astName}`,\n SYNTAX_ERR);\n }\n }\n }\n }\n\n /**\n * match directionality pseudo-class - :dir()\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchDirectionPseudoClass(ast, node) {\n const astName = unescapeSelector(ast.name);\n const dir = getDirectionality(node);\n let res;\n if (astName === dir) {\n res = node;\n }\n return res ?? null;\n }\n\n /**\n * match language pseudo-class - :lang()\n * @see https://datatracker.ietf.org/doc/html/rfc4647#section-3.3.1\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchLanguagePseudoClass(ast, node) {\n const { lang } = node;\n const astName = unescapeSelector(ast.name);\n let res;\n // TBD: what about xml:lang?\n if (astName === '') {\n if (node.getAttribute('lang') === '') {\n res = node;\n }\n } else if (astName === '*') {\n if (!node.hasAttribute('lang')) {\n res = node;\n }\n } else if (/[A-Z\\d-]+/i.test(astName)) {\n const codePart = '(?:-[A-Za-z\\\\d]+)?';\n let reg;\n if (/-/.test(astName)) {\n const [langMain, langSub, ...langRest] = astName.split('-');\n const extendedMain = `${langMain}${codePart}`;\n const extendedSub = `-${langSub}${codePart}`;\n const len = langRest.length;\n let extendedRest = '';\n if (len) {\n for (let i = 0; i < len; i++) {\n extendedRest += `-${langRest[i]}${codePart}`;\n }\n }\n reg = new RegExp(`^${extendedMain}${extendedSub}${extendedRest}$`, 'i');\n } else {\n reg = new RegExp(`^${astName}${codePart}$`, 'i');\n }\n if (lang) {\n if (reg.test(lang)) {\n res = node;\n }\n } else {\n let target = node;\n while (target) {\n if (reg.test(target.lang)) {\n res = node;\n break;\n }\n target = target.parentNode;\n }\n }\n }\n return res ?? null;\n }\n\n /**\n * match :has() pseudo-class function\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(leaves, node) {\n let bool;\n if (Array.isArray(leaves) && leaves.length) {\n const [leaf] = leaves;\n const { type: leafType } = leaf;\n let combo;\n if (leafType === COMBINATOR) {\n combo = leaves.shift();\n } else {\n combo = {\n name: ' ',\n type: COMBINATOR\n };\n }\n const twigLeaves = [];\n while (leaves.length) {\n const [item] = leaves;\n const { type: itemType } = item;\n if (itemType === COMBINATOR) {\n break;\n } else {\n twigLeaves.push(leaves.shift());\n }\n }\n const twig = {\n combo,\n leaves: twigLeaves\n };\n const nodes = this._matchCombinator(twig, node, {\n find: 'next'\n });\n if (nodes.size) {\n if (leaves.length) {\n for (const nextNode of nodes) {\n bool =\n this._matchHasPseudoFunc(Object.assign([], leaves), nextNode);\n if (bool) {\n break;\n }\n }\n } else {\n bool = true;\n }\n }\n }\n return !!bool;\n }\n\n /**\n * match logical pseudo-class functions - :has(), :is(), :not(), :where()\n * @param {object} astData - AST data\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchLogicalPseudoFunc(astData, node) {\n const {\n astName = '', branches = [], selector = '', twigBranches = []\n } = astData;\n let res;\n if (astName === 'has') {\n if (selector.includes(':has(')) {\n res = null;\n } else {\n let bool;\n const l = branches.length;\n for (let i = 0; i < l; i++) {\n const leaves = branches[i];\n bool = this._matchHasPseudoFunc(Object.assign([], leaves), node);\n if (bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else {\n const forgive = /^(?:is|where)$/.test(astName);\n let bool;\n const l = twigBranches.length;\n for (let i = 0; i < l; i++) {\n const branch = twigBranches[i];\n const lastIndex = branch.length - 1;\n const { leaves } = branch[lastIndex];\n bool = this._matchLeaves(leaves, node, {\n forgive\n });\n if (bool && lastIndex > 0) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, {\n forgive,\n find: 'prev'\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n const matchedNodes = new Set(arr);\n if (matchedNodes.size) {\n if (j === 0) {\n bool = true;\n break;\n } else {\n nextNodes = matchedNodes;\n }\n } else {\n bool = false;\n break;\n }\n }\n }\n if (bool) {\n break;\n }\n }\n if (astName === 'not') {\n if (!bool) {\n res = node;\n }\n } else if (bool) {\n res = node;\n }\n }\n return res ?? null;\n }\n\n /**\n * match pseudo-class selector\n * @see https://html.spec.whatwg.org/#pseudo-classes\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {object} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt = {}) {\n const { children: astChildren } = ast;\n const { localName, parentNode } = node;\n const { forgive } = opt;\n const astName = unescapeSelector(ast.name);\n let matched = new Set();\n // :has(), :is(), :not(), :where()\n if (PSEUDO_FUNC.test(astName)) {\n let astData;\n if (this.#cache.has(ast)) {\n astData = this.#cache.get(ast);\n } else {\n const branches = walkAST(ast);\n const selectors = [];\n const twigBranches = [];\n for (const [...leaves] of branches) {\n for (const leaf of leaves) {\n const css = generateCSS(leaf);\n selectors.push(css);\n }\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches,\n selector: selectors.join(',')\n };\n this.#cache.set(ast, astData);\n }\n const res = this._matchLogicalPseudoFunc(astData, node);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n const [branch] = astChildren;\n // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (PSEUDO_NTH.test(astName)) {\n const nodes = this._matchAnPlusB(branch, node, astName);\n if (nodes.size) {\n matched = nodes;\n }\n // :dir()\n } else if (astName === 'dir') {\n const res = this._matchDirectionPseudoClass(branch, node);\n if (res) {\n matched.add(res);\n }\n // :lang()\n } else if (astName === 'lang') {\n const res = this._matchLanguagePseudoClass(branch, node);\n if (res) {\n matched.add(res);\n }\n } else {\n switch (astName) {\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (this.#warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n const { document, root } = this.#root;\n const { documentElement } = document;\n const docURL = new URL(document.URL);\n switch (astName) {\n case 'any-link':\n case 'link': {\n if (HTML_ANCHOR.test(localName) && node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (HTML_ANCHOR.test(localName) && node.hasAttribute('href')) {\n const attrURL = new URL(node.getAttribute('href'), docURL.href);\n if (attrURL.origin === docURL.origin &&\n attrURL.pathname === docURL.pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case 'target': {\n if (isSameOrDescendant(node) && docURL.hash &&\n node.id && docURL.hash === `#${node.id}`) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n if (docURL.hash) {\n const hash = docURL.hash.replace(/^#/, '');\n let current = document.getElementById(hash);\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n }\n break;\n }\n case 'scope': {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (node === this.#node) {\n matched.add(node);\n }\n } else if (node === documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus': {\n if (node === document.activeElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus-within': {\n let current = document.activeElement;\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n break;\n }\n case 'open': {\n if (HTML_INTERACT.test(localName) && node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'closed': {\n if (HTML_INTERACT.test(localName) && !node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'disabled': {\n if (FORM_PARTS.test(localName) || isCustomElementName(localName)) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else {\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset') {\n break;\n }\n parent = parent.parentNode;\n }\n if (parent && parent.hasAttribute('disabled') &&\n parentNode.localName !== 'legend') {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((FORM_PARTS.test(localName) || isCustomElementName(localName)) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'read-only': {\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type ||\n INPUT_EDIT.test(node.type) || INPUT_TIME.test(node.type)) &&\n (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (!isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'read-write': {\n switch (localName) {\n case 'textarea': {\n if (!(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type ||\n INPUT_EDIT.test(node.type) || INPUT_TIME.test(node.type)) &&\n !(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'placeholder-shown': {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (INPUT_EDIT.test(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.hasAttribute('placeholder') &&\n node.getAttribute('placeholder').trim().length &&\n node.value === '') {\n matched.add(node);\n }\n break;\n }\n case 'checked': {\n if ((localName === 'input' && node.hasAttribute('type') &&\n INPUT_CHECK.test(node.getAttribute('type')) &&\n node.checked) ||\n (localName === 'option' && node.selected)) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if ((localName === 'input' && node.type === 'checkbox' &&\n node.indeterminate) ||\n (localName === 'progress' && !node.hasAttribute('value'))) {\n matched.add(node);\n } else if (localName === 'input' && node.type === 'radio' &&\n !node.hasAttribute('checked')) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = documentElement;\n }\n const nodes = [...parent.getElementsByTagName('input')];\n let checked;\n for (const item of nodes) {\n if (item.getAttribute('type') === 'radio') {\n if (nodeName) {\n if (item.getAttribute('name') === nodeName) {\n checked = !!item.checked;\n }\n } else if (!item.hasAttribute('name')) {\n checked = !!item.checked;\n }\n if (checked) {\n break;\n }\n }\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n if ((localName === 'button' &&\n !(node.hasAttribute('type') &&\n INPUT_RESET.test(node.getAttribute('type')))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n INPUT_SUBMIT.test(node.getAttribute('type')))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const iterator = document.createNodeIterator(form, SHOW_ELEMENT);\n let nextNode = iterator.nextNode();\n while (nextNode) {\n const nodeName = nextNode.localName;\n let m;\n if (nodeName === 'button') {\n m = !(nextNode.hasAttribute('type') &&\n INPUT_RESET.test(nextNode.getAttribute('type')));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n INPUT_SUBMIT.test(nextNode.getAttribute('type'));\n }\n if (m) {\n if (nextNode === node) {\n matched.add(node);\n }\n break;\n }\n nextNode = iterator.nextNode();\n }\n }\n // input[type=\"checkbox\"], input[type=\"radio\"]\n } else if (localName === 'input' && node.hasAttribute('type') &&\n INPUT_CHECK.test(node.getAttribute('type')) &&\n node.hasAttribute('checked')) {\n matched.add(node);\n // option\n } else if (localName === 'option') {\n let isMultiple = false;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'datalist') {\n break;\n } else if (parent.localName === 'select') {\n isMultiple = !!parent.multiple;\n break;\n }\n parent = parent.parentNode;\n }\n // FIXME:\n if (isMultiple) {\n if (this.#warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n } else {\n const firstOpt = parentNode.firstElementChild;\n const defaultOpt = new Set();\n let opt = firstOpt;\n while (opt) {\n if (opt.hasAttribute('selected')) {\n defaultOpt.add(opt);\n break;\n }\n opt = opt.nextElementSibling;\n }\n if (!defaultOpt.size) {\n defaultOpt.add(firstOpt);\n }\n if (defaultOpt.has(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'valid': {\n if (FORM_VALIDITY.test(localName)) {\n if (node.checkValidity()) {\n matched.add(node);\n }\n } else if (/^fieldset$/.test(localName)) {\n const iterator = document.createNodeIterator(node, SHOW_ELEMENT);\n let refNode = iterator.nextNode();\n if (refNode === node) {\n refNode = iterator.nextNode();\n }\n let bool;\n while (refNode) {\n if (FORM_VALIDITY.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = iterator.nextNode();\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (FORM_VALIDITY.test(localName)) {\n if (!node.checkValidity()) {\n matched.add(node);\n }\n } else if (/^fieldset$/.test(localName)) {\n const iterator = document.createNodeIterator(node, SHOW_ELEMENT);\n let refNode = iterator.nextNode();\n if (refNode === node) {\n refNode = iterator.nextNode();\n }\n let bool;\n while (refNode) {\n if (FORM_VALIDITY.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = iterator.nextNode();\n }\n if (!bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n INPUT_RANGE.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n INPUT_RANGE.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (INPUT_EDIT.test(inputType) || INPUT_CHECK.test(inputType) ||\n INPUT_TIME.test(inputType) || inputType === 'file') {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n (node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'optional': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (INPUT_EDIT.test(inputType) || INPUT_CHECK.test(inputType) ||\n INPUT_TIME.test(inputType) || inputType === 'file') {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n !(node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const nodes = node.childNodes.values();\n let bool;\n for (const refNode of nodes) {\n bool = refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if ((parentNode && node === parentNode.firstElementChild) ||\n (root.nodeType === ELEMENT_NODE && node === root)) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n (root.nodeType === ELEMENT_NODE && node === root)) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode &&\n node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) ||\n (root.nodeType === ELEMENT_NODE && node === root)) {\n matched.add(node);\n }\n break;\n }\n case 'first-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (root.nodeType === ELEMENT_NODE && node === root) {\n matched.add(node);\n }\n break;\n }\n case 'last-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (root.nodeType === ELEMENT_NODE && node === root) {\n matched.add(node);\n }\n break;\n }\n case 'only-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1 === node) {\n const [node2] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node2 === node) {\n matched.add(node);\n }\n }\n } else if (root.nodeType === ELEMENT_NODE && node === root) {\n matched.add(node);\n }\n break;\n }\n // legacy pseudo-elements\n case 'after':\n case 'before':\n case 'first-letter':\n case 'first-line': {\n if (this.#warn) {\n throw new DOMException(`Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'active':\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'focus-visible':\n case 'fullscreen':\n case 'future':\n case 'hover':\n case 'modal':\n case 'muted':\n case 'past':\n case 'paused':\n case 'picture-in-picture':\n case 'playing':\n case 'seeking':\n case 'stalled':\n case 'user-invalid':\n case 'user-valid':\n case 'volume-locked':\n case '-webkit-autofill': {\n if (this.#warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (this.#warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}`,\n SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match attribute selector\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchAttributeSelector(ast, node) {\n const {\n flags: astFlags, matcher: astMatcher, name: astName, value: astValue\n } = ast;\n if (typeof astFlags === 'string' && !/^[is]$/i.test(astFlags)) {\n throw new DOMException('Invalid attribute selector', SYNTAX_ERR);\n }\n const { attributes } = node;\n let res;\n if (attributes && attributes.length) {\n const { document } = this.#root;\n let caseInsensitive;\n if (document.contentType === 'text/html') {\n if (typeof astFlags === 'string' && /^s$/i.test(astFlags)) {\n caseInsensitive = false;\n } else {\n caseInsensitive = true;\n }\n } else if (typeof astFlags === 'string' && /^i$/i.test(astFlags)) {\n caseInsensitive = true;\n } else {\n caseInsensitive = false;\n }\n let { name: astAttrName } = astName;\n astAttrName = unescapeSelector(astAttrName);\n if (caseInsensitive) {\n astAttrName = astAttrName.toLowerCase();\n }\n const attrValues = new Set();\n // namespaced\n if (/\\|/.test(astAttrName)) {\n const {\n prefix: astAttrPrefix, tagName: astAttrLocalName\n } = selectorToNodeProps(astAttrName);\n for (let { name: itemName, value: itemValue } of attributes) {\n if (caseInsensitive) {\n itemName = itemName.toLowerCase();\n itemValue = itemValue.toLowerCase();\n }\n switch (astAttrPrefix) {\n case '': {\n if (astAttrLocalName === itemName) {\n attrValues.add(itemValue);\n }\n break;\n }\n case '*': {\n if (/:/.test(itemName)) {\n if (itemName.endsWith(`:${astAttrLocalName}`)) {\n attrValues.add(itemValue);\n }\n } else if (astAttrLocalName === itemName) {\n attrValues.add(itemValue);\n }\n break;\n }\n default: {\n if (/:/.test(itemName)) {\n const [itemNamePrefix, itemNameLocalName] = itemName.split(':');\n if (astAttrPrefix === itemNamePrefix &&\n astAttrLocalName === itemNameLocalName &&\n isNamespaceDeclared(astAttrPrefix, node)) {\n attrValues.add(itemValue);\n }\n }\n }\n }\n }\n } else {\n for (let { name: itemName, value: itemValue } of attributes) {\n if (caseInsensitive) {\n itemName = itemName.toLowerCase();\n itemValue = itemValue.toLowerCase();\n }\n if (/:/.test(itemName)) {\n const [, itemNameLocalName] = itemName.split(':');\n if (astAttrName === itemNameLocalName) {\n attrValues.add(itemValue);\n }\n } else if (astAttrName === itemName) {\n attrValues.add(itemValue);\n }\n }\n }\n if (attrValues.size) {\n const {\n name: astAttrIdentValue, value: astAttrStringValue\n } = astValue || {};\n let attrValue;\n if (astAttrIdentValue) {\n if (caseInsensitive) {\n attrValue = astAttrIdentValue.toLowerCase();\n } else {\n attrValue = astAttrIdentValue;\n }\n } else if (astAttrStringValue) {\n if (caseInsensitive) {\n attrValue = astAttrStringValue.toLowerCase();\n } else {\n attrValue = astAttrStringValue;\n }\n } else if (astAttrStringValue === '') {\n attrValue = astAttrStringValue;\n }\n switch (astMatcher) {\n case '=': {\n if (typeof attrValue === 'string' && attrValues.has(attrValue)) {\n res = node;\n }\n break;\n }\n case '~=': {\n if (attrValue && typeof attrValue === 'string') {\n for (const value of attrValues) {\n const item = new Set(value.split(/\\s+/));\n if (item.has(attrValue)) {\n res = node;\n break;\n }\n }\n }\n break;\n }\n case '|=': {\n if (attrValue && typeof attrValue === 'string') {\n let item;\n for (const value of attrValues) {\n if (value === attrValue || value.startsWith(`${attrValue}-`)) {\n item = value;\n break;\n }\n }\n if (item) {\n res = node;\n }\n }\n break;\n }\n case '^=': {\n if (attrValue && typeof attrValue === 'string') {\n let item;\n for (const value of attrValues) {\n if (value.startsWith(`${attrValue}`)) {\n item = value;\n break;\n }\n }\n if (item) {\n res = node;\n }\n }\n break;\n }\n case '$=': {\n if (attrValue && typeof attrValue === 'string') {\n let item;\n for (const value of attrValues) {\n if (value.endsWith(`${attrValue}`)) {\n item = value;\n break;\n }\n }\n if (item) {\n res = node;\n }\n }\n break;\n }\n case '*=': {\n if (attrValue && typeof attrValue === 'string') {\n let item;\n for (const value of attrValues) {\n if (value.includes(`${attrValue}`)) {\n item = value;\n break;\n }\n }\n if (item) {\n res = node;\n }\n }\n break;\n }\n case null:\n default: {\n res = node;\n }\n }\n }\n }\n return res ?? null;\n }\n\n /**\n * match class selector\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchClassSelector(ast, node) {\n const astName = unescapeSelector(ast.name);\n let res;\n if (node.classList.contains(astName)) {\n res = node;\n }\n return res ?? null;\n }\n\n /**\n * match ID selector\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchIDSelector(ast, node) {\n const { id } = node;\n const astName = unescapeSelector(ast.name);\n let res;\n if (astName === id) {\n res = node;\n }\n return res ?? null;\n }\n\n /**\n * match type selector\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchTypeSelector(ast, node) {\n const astName = unescapeSelector(ast.name);\n const { localName, prefix } = node;\n const { document } = this.#root;\n let {\n prefix: astPrefix, tagName: astNodeName\n } = selectorToNodeProps(astName, node);\n if (document.contentType === 'text/html') {\n astPrefix = astPrefix.toLowerCase();\n astNodeName = astNodeName.toLowerCase();\n }\n let nodePrefix;\n let nodeName;\n // just in case that the namespaced content is parsed as text/html\n if (/:/.test(localName)) {\n [nodePrefix, nodeName] = localName.split(':');\n } else {\n nodePrefix = prefix || '';\n nodeName = localName;\n }\n let res;\n if (astPrefix === '' && nodePrefix === '') {\n if (node.namespaceURI === null &&\n (astNodeName === '*' || astNodeName === nodeName)) {\n res = node;\n }\n } else if (astPrefix === '*') {\n if (astNodeName === '*' || astNodeName === nodeName) {\n res = node;\n }\n } else if (astPrefix === nodePrefix &&\n isNamespaceDeclared(astPrefix, node)) {\n if (astNodeName === '*' || astNodeName === nodeName) {\n res = node;\n }\n }\n return res ?? null;\n };\n\n /**\n * match selector\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {object} - collection of matched nodes\n */\n _matchSelector(ast, node, opt) {\n const { type } = ast;\n let matched = new Set();\n if (node.nodeType === ELEMENT_NODE) {\n switch (type) {\n case ATTRIBUTE_SELECTOR: {\n const res = this._matchAttributeSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n break;\n }\n case CLASS_SELECTOR: {\n const res = this._matchClassSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n break;\n }\n case ID_SELECTOR: {\n const res = this._matchIDSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n break;\n }\n case PSEUDO_CLASS_SELECTOR: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n if (nodes.size) {\n matched = nodes;\n }\n break;\n }\n case PSEUDO_ELEMENT_SELECTOR: {\n const astName = unescapeSelector(ast.name);\n this._matchPseudoElementSelector(astName, opt);\n break;\n }\n case TYPE_SELECTOR:\n default: {\n const res = this._matchTypeSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match leaves\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchLeaves(leaves, node, opt) {\n let bool;\n for (const leaf of leaves) {\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n return !!bool;\n }\n\n /**\n * find descendant nodes\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} baseNode - base Element node\n * @returns {object} - result\n */\n _findDescendantNodes(leaves, baseNode) {\n const [leaf, ...items] = leaves;\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n const matchItems = items.length > 0;\n const { document, root } = this.#root;\n let nodes = new Set();\n let pending = false;\n switch (leafType) {\n case ID_SELECTOR: {\n if (root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n const elm = root.getElementById(leafName);\n if (elm && elm !== baseNode) {\n const bool = isSameOrDescendant(elm, baseNode);\n let node;\n if (bool) {\n node = elm;\n }\n if (node) {\n if (matchItems) {\n const bool = this._matchLeaves(items, node);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n }\n }\n break;\n }\n case CLASS_SELECTOR: {\n const arr = [...baseNode.getElementsByClassName(leafName)];\n if (arr.length) {\n if (matchItems) {\n for (const node of arr) {\n const bool = this._matchLeaves(items, node);\n if (bool) {\n nodes.add(node);\n }\n }\n } else {\n nodes = new Set(arr);\n }\n }\n break;\n }\n case TYPE_SELECTOR: {\n if (document.contentType !== 'text/html' || /[*|]/.test(leafName)) {\n pending = true;\n } else {\n const arr = [...baseNode.getElementsByTagName(leafName)];\n if (arr.length) {\n if (matchItems) {\n for (const node of arr) {\n const bool = this._matchLeaves(items, node);\n if (bool) {\n nodes.add(node);\n }\n }\n } else {\n nodes = new Set(arr);\n }\n }\n }\n break;\n }\n case PSEUDO_ELEMENT_SELECTOR: {\n this._matchPseudoElementSelector(leafName);\n break;\n }\n default: {\n pending = true;\n }\n }\n return {\n nodes,\n pending\n };\n }\n\n /**\n * match combinator\n * @param {object} twig - twig\n * @param {object} node - Element node\n * @param {object} [opt] - option\n * @param {string} [opt.find] - 'prev'|'next', which nodes to find\n * @returns {object} - collection of matched nodes\n */\n _matchCombinator(twig, node, opt = {}) {\n const { combo, leaves } = twig;\n const { name: comboName } = combo;\n const { find, forgive } = opt;\n let matched = new Set();\n if (find === 'next') {\n switch (comboName) {\n case '+': {\n const refNode = node.nextElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n let refNode = node.nextElementSibling;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode);\n if (bool) {\n matched.add(refNode);\n }\n refNode = refNode.nextElementSibling;\n }\n break;\n }\n case '>': {\n const childNodes = [...node.children];\n for (const refNode of childNodes) {\n const bool = this._matchLeaves(leaves, refNode);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case ' ':\n default: {\n const { nodes, pending } = this._findDescendantNodes(leaves, node);\n if (nodes.size) {\n matched = nodes;\n } else if (pending) {\n const { document } = this.#root;\n const iterator = document.createNodeIterator(node, SHOW_ELEMENT);\n let refNode = iterator.nextNode();\n if (refNode === node) {\n refNode = iterator.nextNode();\n }\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode);\n if (bool) {\n matched.add(refNode);\n }\n refNode = iterator.nextNode();\n }\n }\n }\n }\n } else {\n switch (comboName) {\n case '+': {\n const refNode = node.previousElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, {\n forgive\n });\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n const arr = [];\n let refNode = node.previousElementSibling;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, {\n forgive\n });\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.previousElementSibling;\n }\n if (arr.length) {\n matched = new Set(arr.reverse());\n }\n break;\n }\n case '>': {\n const refNode = node.parentNode;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, {\n forgive\n });\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case ' ':\n default: {\n const arr = [];\n let refNode = node.parentNode;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, {\n forgive\n });\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n }\n if (arr.length) {\n matched = new Set(arr.reverse());\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * find nodes\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @returns {object} - result\n */\n _findNodes(twig, targetType) {\n const { leaves: [leaf, ...items] } = twig;\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n const matchItems = items.length > 0;\n const { document, root } = this.#root;\n let nodes = new Set();\n let pending = false;\n switch (leafType) {\n case ID_SELECTOR: {\n let node;\n if (targetType === TARGET_SELF) {\n const bool = this._matchLeaves([leaf], this.#node);\n if (bool) {\n node = this.#node;\n }\n } else if (targetType === TARGET_LINEAL) {\n let refNode = this.#node;\n while (refNode) {\n const bool = this._matchLeaves([leaf], refNode);\n if (bool) {\n node = refNode;\n break;\n }\n refNode = refNode.parentNode;\n }\n } else if (root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n node = root.getElementById(leafName);\n }\n if (node) {\n if (matchItems) {\n const bool = this._matchLeaves(items, node);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n break;\n }\n case CLASS_SELECTOR: {\n const arr = [];\n if (targetType === TARGET_SELF) {\n if (this.#node.nodeType === ELEMENT_NODE &&\n this.#node.classList.contains(leafName)) {\n arr.push(this.#node);\n }\n } else if (targetType === TARGET_LINEAL) {\n let refNode = this.#node;\n while (refNode) {\n if (refNode.nodeType === ELEMENT_NODE) {\n if (refNode.classList.contains(leafName)) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n } else if (root.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const childNodes = [...root.children];\n for (const node of childNodes) {\n if (node.classList.contains(leafName)) {\n arr.push(node);\n }\n const a = [...node.getElementsByClassName(leafName)];\n arr.push(...a);\n }\n } else {\n const a = [...root.getElementsByClassName(leafName)];\n arr.push(...a);\n }\n if (arr.length) {\n if (matchItems) {\n for (const node of arr) {\n const bool = this._matchLeaves(items, node);\n if (bool) {\n nodes.add(node);\n }\n }\n } else {\n nodes = new Set(arr);\n }\n }\n break;\n }\n case TYPE_SELECTOR: {\n const arr = [];\n if (targetType === TARGET_SELF) {\n const bool = this.#node.nodeType === ELEMENT_NODE &&\n this._matchLeaves([leaf], this.#node);\n if (bool) {\n arr.push(this.#node);\n }\n } else if (targetType === TARGET_LINEAL) {\n let refNode = this.#node;\n while (refNode) {\n if (refNode.nodeType === ELEMENT_NODE) {\n const bool = this._matchLeaves([leaf], refNode);\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n } else if (document.contentType !== 'text/html' ||\n /[*|]/.test(leafName)) {\n pending = true;\n } else if (root.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const tagName = leafName.toLowerCase();\n const childNodes = [...root.children];\n for (const node of childNodes) {\n if (node.localName === tagName) {\n arr.push(node);\n }\n const a = [...node.getElementsByTagName(leafName)];\n arr.push(...a);\n }\n } else {\n const a = [...root.getElementsByTagName(leafName)];\n arr.push(...a);\n }\n if (arr.length) {\n if (matchItems) {\n for (const node of arr) {\n const bool = this._matchLeaves(items, node);\n if (bool) {\n nodes.add(node);\n }\n }\n } else {\n nodes = new Set(arr);\n }\n }\n break;\n }\n case PSEUDO_ELEMENT_SELECTOR: {\n this._matchPseudoElementSelector(leafName);\n break;\n }\n default: {\n const arr = [];\n if (targetType === TARGET_SELF) {\n const bool = this._matchLeaves([leaf], this.#node);\n if (bool) {\n arr.push(this.#node);\n }\n } else if (targetType === TARGET_LINEAL) {\n let refNode = this.#node;\n while (refNode) {\n const bool = this._matchLeaves([leaf], refNode);\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n }\n } else {\n pending = true;\n }\n if (arr.length) {\n if (matchItems) {\n for (const node of arr) {\n const bool = this._matchLeaves(items, node);\n if (bool) {\n nodes.add(node);\n }\n }\n } else {\n nodes = new Set(arr);\n }\n }\n }\n }\n return {\n nodes,\n pending\n };\n }\n\n /**\n * collect nodes\n * @param {string} targetType - target type\n * @returns {Array.<Array.<object|undefined>>} - matrix\n */\n _collectNodes(targetType) {\n const ast = this.#ast.values();\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n const pendingItems = new Set();\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[0];\n const { nodes, pending } = this._findNodes(twig, targetType);\n if (nodes.size) {\n this.#nodes[i] = nodes;\n } else if (pending) {\n pendingItems.add(new Map([\n ['index', i],\n ['twig', twig]\n ]));\n } else {\n this.#ast[i].skip = true;\n }\n i++;\n }\n if (pendingItems.size) {\n const { document, root } = this.#root;\n const iterator = document.createNodeIterator(root, SHOW_ELEMENT);\n let nextNode = iterator.nextNode();\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n bool = isSameOrDescendant(nextNode, this.#node);\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode);\n if (matched) {\n const index = pendingItem.get('index');\n this.#nodes[index].add(nextNode);\n }\n }\n }\n nextNode = iterator.nextNode();\n }\n }\n } else {\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[branch.length - 1];\n const { nodes } = this._findNodes(twig, targetType);\n if (nodes.size) {\n this.#nodes[i] = nodes;\n } else {\n this.#ast[i].skip = true;\n }\n i++;\n }\n }\n return [\n this.#ast,\n this.#nodes\n ];\n }\n\n /**\n * match nodes\n * @param {string} targetType - target type\n * @returns {object} - collection of matched nodes\n */\n _matchNodes(targetType) {\n const [...branches] = this.#ast;\n const l = branches.length;\n let nodes = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, skip } = branches[i];\n const branchLen = branch.length;\n if (skip) {\n continue;\n } else if (branchLen) {\n const matched = this.#nodes[i];\n const lastIndex = branchLen - 1;\n if (lastIndex === 0) {\n if ((targetType === TARGET_ALL || targetType === TARGET_FIRST) &&\n this.#node.nodeType === ELEMENT_NODE) {\n for (const node of matched) {\n if (node !== this.#node) {\n if (isSameOrDescendant(node, this.#node)) {\n nodes.add(node);\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n }\n } else if (targetType === TARGET_FIRST) {\n const [node] = [...matched];\n nodes.add(node);\n } else {\n const n = [...nodes];\n const m = [...matched];\n nodes = new Set([...n, ...m]);\n }\n } else if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n let { combo } = branch[0];\n for (const node of matched) {\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const twig = {\n combo,\n leaves\n };\n const m = this._matchCombinator(twig, nextNode, {\n find: 'next'\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n const matchedNodes = new Set(arr);\n if (matchedNodes.size) {\n if (j === lastIndex) {\n if (targetType === TARGET_FIRST) {\n const [node] = [...matchedNodes];\n nodes.add(node);\n } else {\n const n = [...nodes];\n const m = [...matchedNodes];\n nodes = new Set([...n, ...m]);\n }\n break;\n } else {\n combo = nextCombo;\n nextNodes = matchedNodes;\n }\n } else {\n break;\n }\n }\n }\n } else {\n for (const node of matched) {\n let nextNodes = new Set([node]);\n let bool;\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, {\n find: 'prev'\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n const matchedNodes = new Set(arr);\n if (matchedNodes.size) {\n bool = true;\n if (j === 0) {\n nodes.add(node);\n break;\n } else {\n nextNodes = matchedNodes;\n }\n } else {\n bool = false;\n break;\n }\n }\n if (bool) {\n break;\n }\n }\n }\n }\n }\n return nodes;\n }\n\n /**\n * find matched nodes\n * @param {string} targetType - target type\n * @returns {object} - collection of matched nodes\n */\n _find(targetType) {\n this._collectNodes(targetType);\n const nodes = this._matchNodes(targetType);\n return nodes;\n }\n\n /**\n * sort nodes\n * @param {object} nodes - collection of nodes\n * @returns {Array.<object|undefined>} - collection of sorted nodes\n */\n _sortNodes(nodes) {\n const arr = [...nodes];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n const posBit = a.compareDocumentPosition(b);\n if (posBit & DOCUMENT_POSITION_PRECEDING ||\n posBit & DOCUMENT_POSITION_CONTAINS) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n }\n\n /**\n * matches\n * @returns {boolean} - `true` if matched `false` otherwise\n */\n matches() {\n if (this.#node.nodeType !== ELEMENT_NODE) {\n throw new TypeError(`Unexpected node ${this.#node.nodeName}`);\n }\n let res;\n try {\n const nodes = this._find(TARGET_SELF);\n res = nodes.has(this.#node);\n } catch (e) {\n this._onError(e);\n }\n return !!res;\n }\n\n /**\n * closest\n * @returns {?object} - matched node\n */\n closest() {\n if (this.#node.nodeType !== ELEMENT_NODE) {\n throw new TypeError(`Unexpected node ${this.#node.nodeName}`);\n }\n let res;\n try {\n const nodes = this._find(TARGET_LINEAL);\n let node = this.#node;\n while (node) {\n if (nodes.has(node)) {\n res = node;\n break;\n }\n node = node.parentNode;\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector\n * @returns {?object} - matched node\n */\n querySelector() {\n let res;\n try {\n const nodes = this._find(TARGET_FIRST);\n nodes.delete(this.#node);\n if (nodes.size > 1) {\n [res] = this._sortNodes(nodes);\n } else if (nodes.size) {\n [res] = [...nodes];\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector all\n * NOTE: returns Array, not NodeList\n * @returns {Array.<object|undefined>} - collection of matched nodes\n */\n querySelectorAll() {\n const res = [];\n try {\n const nodes = this._find(TARGET_ALL);\n nodes.delete(this.#node);\n if (nodes.size > 1 && this.#sort) {\n res.push(...this._sortNodes(nodes));\n } else if (nodes.size) {\n res.push(...nodes);\n }\n } catch (e) {\n this._onError(e);\n }\n return res;\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["matcher_exports", "__export", "Matcher", "__toCommonJS", "import_is_potential_custom_element_name", "import_dom_util", "import_parser", "import_constant", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "FORM_PARTS", "FORM_VALIDITY", "HTML_ANCHOR", "HTML_INTERACT", "INPUT_CHECK", "INPUT_EDIT", "INPUT_RANGE", "INPUT_RESET", "INPUT_SUBMIT", "INPUT_TIME", "PSEUDO_FUNC", "PSEUDO_NTH", "#ast", "#cache", "#node", "#nodes", "#root", "#selector", "#sort", "#warn", "selector", "node", "opt", "sort", "warn", "e", "document", "root", "parent", "leaves", "arr", "bitMap", "a", "b", "typeA", "typeB", "bitA", "bitB", "res", "ast", "branches", "tree", "nodes", "i", "items", "branch", "item", "nextItem", "msg", "anb", "reverse", "parentNode", "matched", "selectorBranches", "selectorNodes", "branchesLen", "refNode", "bool", "current", "n", "nth", "j", "localName", "prefix", "itemLocalName", "itemPrefix", "nthName", "nthIdentName", "identName", "anbMap", "astName", "forgive", "dir", "lang", "codePart", "reg", "langMain", "langSub", "langRest", "extendedMain", "extendedSub", "len", "extendedRest", "target", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "twigBranches", "l", "lastIndex", "nextNodes", "m", "matchedNodes", "astChildren", "selectors", "css", "leavesSet", "documentElement", "docURL", "attrURL", "hash", "isCustomElementName", "targetNode", "nodeName", "checked", "form", "iterator", "isMultiple", "firstOpt", "defaultOpt", "inputType", "node1", "node2", "astFlags", "astMatcher", "astValue", "attributes", "caseInsensitive", "astAttrName", "attrValues", "astAttrPrefix", "astAttrLocalName", "itemName", "itemValue", "itemNamePrefix", "itemNameLocalName", "astAttrIdentValue", "astAttrStringValue", "attrValue", "value", "id", "astPrefix", "astNodeName", "nodePrefix", "type", "baseNode", "leafName", "matchItems", "pending", "elm", "comboName", "find", "childNodes", "targetType", "tagName", "pendingItems", "pendingItem", "index", "skip", "branchLen", "nextCombo", "posBit"]
7
+ }
@@ -0,0 +1,3 @@
1
+ var u=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var $=(n,e)=>{for(var s in e)u(n,s,{get:e[s],enumerable:!0})},D=(n,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of w(e))!O.call(n,t)&&t!==s&&u(n,t,{get:()=>e[t],enumerable:!(o=m(e,t))||o.enumerable});return n};var P=n=>D(u({},"__esModule",{value:!0}),n);var A={};$(A,{generateCSS:()=>S.generate,parseSelector:()=>F,preprocess:()=>x,unescapeSelector:()=>b,walkAST:()=>_});module.exports=P(A);var c=require("css-tree"),r=require("./constant.js"),S=require("css-tree");const C=parseInt("10000",16),y=16,E=2,T=/^([\da-f]{1,6}\s?)/i,g=/^(?:(?:ha|i)s|not|where)$/,I=/^[\n\r\f]/,b=(n="")=>{if(typeof n=="string"&&n.indexOf("\\",0)>=0){const e=n.split("\\"),s=e.length;for(let o=1;o<s;o++){let t=e[o];if(o===s-1&&t==="")t="\uFFFD";else{const l=T.exec(t);if(l){const[,i]=l;let a;try{const p=parseInt("D800",16),h=parseInt("DFFF",16),d=parseInt(i,16);d===0||d>=p&&d<=h?a="\uFFFD":a=String.fromCodePoint(d)}catch{a="\uFFFD"}let f="";t.length>i.length&&(f=t.substring(i.length)),t=`${a}${f}`}else I.test(t)&&(t="\\"+t)}e[o]=t}n=e.join("")}return n},x=(...n)=>{if(!n.length)throw new TypeError("1 argument required, but only 0 present.");let[e]=n;if(typeof e=="string"){let s=0;for(;s>=0&&(s=e.indexOf("#",s),!(s<0));){const o=e.substring(0,s+1);let t=e.substring(s+1);const l=t.codePointAt(0);if(l>=C){const i=`\\${l.toString(y)} `;t.length===E?t=i:t=`${i}${t.substring(E)}`}e=`${o}${t}`,s++}e=e.replace(/\f|\r\n?/g,`
2
+ `).replace(/[\0\uD800-\uDFFF]|\\$/g,"\uFFFD")}else if(e==null)e=Object.prototype.toString.call(e).slice(r.TYPE_FROM,r.TYPE_TO).toLowerCase();else throw new DOMException(`Invalid selector ${e}`,r.SYNTAX_ERR);return e},F=n=>{if(n=x(n),/^$|^\s*>|,\s*$/.test(n))throw new DOMException(`Invalid selector ${n}`,r.SYNTAX_ERR);let e;try{const s=(0,c.parse)(n,{context:"selectorList",parseCustomProperty:!0});e=(0,c.toPlainObject)(s)}catch(s){if(s.message==='"]" is expected'&&!n.endsWith("]"))e=F(`${n}]`);else if(s.message==='")" is expected'&&!n.endsWith(")"))e=F(`${n})`);else throw new DOMException(s.message,r.SYNTAX_ERR)}return e},_=(n={})=>{const e=new Set;let s;return(0,c.walk)(n,{enter:t=>{t.type===r.SELECTOR?e.add(t.children):t.type===r.PSEUDO_CLASS_SELECTOR&&g.test(t.name)&&(s=!0)}}),s&&(0,c.findAll)(n,(t,l,i)=>{if(t.type===r.PSEUDO_CLASS_SELECTOR&&g.test(t.name)&&i){const a=i.filter(f=>{const{name:p,type:h}=f;return h===r.PSEUDO_CLASS_SELECTOR&&g.test(p)});for(const{children:f}of a)for(const{children:p}of f)for(const{children:h}of p)e.has(h)&&e.delete(h)}}),[...e]};0&&(module.exports={generateCSS,parseSelector,preprocess,unescapeSelector,walkAST});
3
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/js/parser.js"],
4
+ "sourcesContent": ["/**\n * parser.js\n */\n\n/* import */\nimport { findAll, parse, toPlainObject, walk } from 'css-tree';\n\n/* constants */\nimport {\n PSEUDO_CLASS_SELECTOR, SELECTOR, SYNTAX_ERR, TYPE_FROM, TYPE_TO\n} from './constant.js';\nconst CODE_POINT_UNIT = parseInt('10000', 16);\nconst HEX = 16;\nconst PAIR = 2;\n\n/* regexp */\nconst HEX_CAPTURE = /^([\\da-f]{1,6}\\s?)/i;\nconst PSEUDO_FUNC = /^(?:(?:ha|i)s|not|where)$/;\nconst WHITESPACE = /^[\\n\\r\\f]/;\n\n/**\n * unescape selector\n * @param {string} selector - CSS selector\n * @returns {?string} - unescaped selector\n */\nexport const unescapeSelector = (selector = '') => {\n if (typeof selector === 'string' && selector.indexOf('\\\\', 0) >= 0) {\n const arr = selector.split('\\\\');\n const l = arr.length;\n for (let i = 1; i < l; i++) {\n let item = arr[i];\n if (i === l - 1 && item === '') {\n item = '\\uFFFD';\n } else {\n const hexExists = HEX_CAPTURE.exec(item);\n if (hexExists) {\n const [, hex] = hexExists;\n let str;\n try {\n const low = parseInt('D800', 16);\n const high = parseInt('DFFF', 16);\n const deci = parseInt(hex, 16);\n if (deci === 0 || (deci >= low && deci <= high)) {\n str = '\\uFFFD';\n } else {\n str = String.fromCodePoint(deci);\n }\n } catch (e) {\n str = '\\uFFFD';\n }\n let postStr = '';\n if (item.length > hex.length) {\n postStr = item.substring(hex.length);\n }\n item = `${str}${postStr}`;\n } else if (WHITESPACE.test(item)) {\n item = '\\\\' + item;\n }\n }\n arr[i] = item;\n }\n selector = arr.join('');\n }\n return selector;\n};\n\n/**\n * preprocess\n * @see https://drafts.csswg.org/css-syntax-3/#input-preprocessing\n * @param {...*} args - arguments\n * @returns {string} - filtered selector string\n */\nexport const preprocess = (...args) => {\n if (!args.length) {\n throw new TypeError('1 argument required, but only 0 present.');\n }\n let [selector] = args;\n if (typeof selector === 'string') {\n let index = 0;\n while (index >= 0) {\n index = selector.indexOf('#', index);\n if (index < 0) {\n break;\n }\n const preHash = selector.substring(0, index + 1);\n let postHash = selector.substring(index + 1);\n const codePoint = postHash.codePointAt(0);\n if (codePoint >= CODE_POINT_UNIT) {\n const str = `\\\\${codePoint.toString(HEX)} `;\n if (postHash.length === PAIR) {\n postHash = str;\n } else {\n postHash = `${str}${postHash.substring(PAIR)}`;\n }\n }\n selector = `${preHash}${postHash}`;\n index++;\n }\n selector = selector.replace(/\\f|\\r\\n?/g, '\\n')\n .replace(/[\\0\\uD800-\\uDFFF]|\\\\$/g, '\\uFFFD');\n } else if (selector === undefined || selector === null) {\n selector = Object.prototype.toString.call(selector)\n .slice(TYPE_FROM, TYPE_TO).toLowerCase();\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n return selector;\n};\n\n/**\n * create AST from CSS selector\n * @param {string} selector - CSS selector\n * @returns {object} - AST\n */\nexport const parseSelector = selector => {\n selector = preprocess(selector);\n // invalid selectors\n if (/^$|^\\s*>|,\\s*$/.test(selector)) {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n let res;\n try {\n const ast = parse(selector, {\n context: 'selectorList',\n parseCustomProperty: true\n });\n res = toPlainObject(ast);\n } catch (e) {\n if (e.message === '\"]\" is expected' && !selector.endsWith(']')) {\n res = parseSelector(`${selector}]`);\n } else if (e.message === '\")\" is expected' && !selector.endsWith(')')) {\n res = parseSelector(`${selector})`);\n } else {\n throw new DOMException(e.message, SYNTAX_ERR);\n }\n }\n return res;\n};\n\n/**\n * walk AST\n * @param {object} ast - AST\n * @returns {Array.<object|undefined>} - collection of AST branches\n */\nexport const walkAST = (ast = {}) => {\n const branches = new Set();\n let hasPseudoFunc;\n const opt = {\n enter: node => {\n if (node.type === SELECTOR) {\n branches.add(node.children);\n } else if (node.type === PSEUDO_CLASS_SELECTOR &&\n PSEUDO_FUNC.test(node.name)) {\n hasPseudoFunc = true;\n }\n }\n };\n walk(ast, opt);\n if (hasPseudoFunc) {\n findAll(ast, (node, item, list) => {\n if (node.type === PSEUDO_CLASS_SELECTOR && PSEUDO_FUNC.test(node.name) &&\n list) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n return type === PSEUDO_CLASS_SELECTOR && PSEUDO_FUNC.test(name);\n });\n for (const { children } of itemList) {\n // SelectorList\n for (const { children: grandChildren } of children) {\n // Selector\n for (const { children: greatGrandChildren } of grandChildren) {\n if (branches.has(greatGrandChildren)) {\n branches.delete(greatGrandChildren);\n }\n }\n }\n }\n }\n });\n }\n return [...branches];\n};\n\n/* export */\nexport { generate as generateCSS } from 'css-tree';\n"],
5
+ "mappings": "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",
6
+ "names": ["parser_exports", "__export", "parseSelector", "preprocess", "unescapeSelector", "walkAST", "__toCommonJS", "import_css_tree", "import_constant", "CODE_POINT_UNIT", "HEX", "PAIR", "HEX_CAPTURE", "PSEUDO_FUNC", "WHITESPACE", "selector", "arr", "l", "i", "item", "hexExists", "hex", "str", "low", "high", "deci", "postStr", "args", "index", "preHash", "postHash", "codePoint", "res", "ast", "e", "branches", "hasPseudoFunc", "node", "list", "itemList", "name", "type", "children", "grandChildren", "greatGrandChildren"]
7
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
package/package.json CHANGED
@@ -12,11 +12,15 @@
12
12
  "url": "git+https://github.com/asamuzaK/domSelector.git"
13
13
  },
14
14
  "files": [
15
+ "dist",
15
16
  "src",
16
17
  "types"
17
18
  ],
18
- "main": "src/index.js",
19
19
  "type": "module",
20
+ "exports": {
21
+ "import": "src/index.js",
22
+ "require": "dist/cjs/index.js"
23
+ },
20
24
  "types": "types/index.d.ts",
21
25
  "dependencies": {
22
26
  "bidi-js": "^1.0.3",
@@ -28,6 +32,7 @@
28
32
  "benchmark": "^2.1.4",
29
33
  "c8": "^8.0.1",
30
34
  "chai": "^4.3.10",
35
+ "esbuild": "^0.19.5",
31
36
  "eslint": "^8.53.0",
32
37
  "eslint-config-standard": "^17.1.0",
33
38
  "eslint-plugin-import": "^2.29.0",
@@ -43,7 +48,8 @@
43
48
  },
44
49
  "scripts": {
45
50
  "bench": "node benchmark/bench.js",
46
- "build": "npm run tsc && npm run lint && npm test",
51
+ "build": "npm run tsc && npm run lint && npm test && npm run bundle",
52
+ "bundle": "esbuild --format=cjs --platform=node --outdir=dist/cjs/ --minify --sourcemap src/**/*.js",
47
53
  "lint": "eslint --fix .",
48
54
  "test": "c8 --reporter=text mocha --exit test/**/*.test.js",
49
55
  "test-wpt": "npm run update-wpt && node test/wpt/wpt-runner.js",
@@ -51,5 +57,5 @@
51
57
  "update": "npm-run-all -s update-*",
52
58
  "update-wpt": "git submodule update --init --recursive --remote"
53
59
  },
54
- "version": "0.23.2"
60
+ "version": "1.0.0"
55
61
  }
package/src/js/matcher.js CHANGED
@@ -1143,7 +1143,7 @@ export class Matcher {
1143
1143
  // input[type="checkbox"], input[type="radio"]
1144
1144
  } else if (localName === 'input' && node.hasAttribute('type') &&
1145
1145
  INPUT_CHECK.test(node.getAttribute('type')) &&
1146
- node.hasAttribute('checked')) {
1146
+ (node.checked || node.hasAttribute('checked'))) {
1147
1147
  matched.add(node);
1148
1148
  // option
1149
1149
  } else if (localName === 'option') {
@@ -1153,23 +1153,23 @@ export class Matcher {
1153
1153
  if (parent.localName === 'datalist') {
1154
1154
  break;
1155
1155
  } else if (parent.localName === 'select') {
1156
- isMultiple = !!parent.multiple;
1156
+ if (parent.multiple || parent.hasAttribute('multiple')) {
1157
+ isMultiple = true;
1158
+ }
1157
1159
  break;
1158
1160
  }
1159
1161
  parent = parent.parentNode;
1160
1162
  }
1161
- // FIXME:
1162
1163
  if (isMultiple) {
1163
- if (this.#warn) {
1164
- throw new DOMException(`Unsupported pseudo-class :${astName}`,
1165
- NOT_SUPPORTED_ERR);
1164
+ if (node.selected || node.hasAttribute('selected')) {
1165
+ matched.add(node);
1166
1166
  }
1167
1167
  } else {
1168
1168
  const firstOpt = parentNode.firstElementChild;
1169
1169
  const defaultOpt = new Set();
1170
1170
  let opt = firstOpt;
1171
1171
  while (opt) {
1172
- if (opt.hasAttribute('selected')) {
1172
+ if (opt.selected || opt.hasAttribute('selected')) {
1173
1173
  defaultOpt.add(opt);
1174
1174
  break;
1175
1175
  }
@@ -2109,10 +2109,6 @@ export class Matcher {
2109
2109
  arr.push(...a);
2110
2110
  }
2111
2111
  } else {
2112
- if (root.nodeType === ELEMENT_NODE &&
2113
- root.classList.contains(leafName)) {
2114
- arr.push(root);
2115
- }
2116
2112
  const a = [...root.getElementsByClassName(leafName)];
2117
2113
  arr.push(...a);
2118
2114
  }
@@ -2154,27 +2150,19 @@ export class Matcher {
2154
2150
  } else if (document.contentType !== 'text/html' ||
2155
2151
  /[*|]/.test(leafName)) {
2156
2152
  pending = true;
2157
- } else {
2153
+ } else if (root.nodeType === DOCUMENT_FRAGMENT_NODE) {
2158
2154
  const tagName = leafName.toLowerCase();
2159
- if (root.nodeType === DOCUMENT_NODE) {
2160
- const a = [...document.getElementsByTagName(leafName)];
2161
- arr.push(...a);
2162
- } else if (root.nodeType === DOCUMENT_FRAGMENT_NODE) {
2163
- const childNodes = [...root.children];
2164
- for (const node of childNodes) {
2165
- if (node.localName === tagName) {
2166
- arr.push(node);
2167
- }
2168
- const a = [...node.getElementsByTagName(leafName)];
2169
- arr.push(...a);
2170
- }
2171
- } else if (root.nodeType === ELEMENT_NODE) {
2172
- if (root.localName === tagName) {
2173
- arr.push(root);
2155
+ const childNodes = [...root.children];
2156
+ for (const node of childNodes) {
2157
+ if (node.localName === tagName) {
2158
+ arr.push(node);
2174
2159
  }
2175
- const a = [...root.getElementsByTagName(leafName)];
2160
+ const a = [...node.getElementsByTagName(leafName)];
2176
2161
  arr.push(...a);
2177
2162
  }
2163
+ } else {
2164
+ const a = [...root.getElementsByTagName(leafName)];
2165
+ arr.push(...a);
2178
2166
  }
2179
2167
  if (arr.length) {
2180
2168
  if (matchItems) {
@@ -2301,29 +2289,6 @@ export class Matcher {
2301
2289
  ];
2302
2290
  }
2303
2291
 
2304
- /**
2305
- * sort nodes
2306
- * @param {object} nodes - collection of nodes
2307
- * @returns {Array.<object|undefined>} - collection of sorted nodes
2308
- */
2309
- _sortNodes(nodes) {
2310
- const arr = [...nodes];
2311
- if (arr.length > 1) {
2312
- arr.sort((a, b) => {
2313
- let res;
2314
- const posBit = a.compareDocumentPosition(b);
2315
- if (posBit & DOCUMENT_POSITION_PRECEDING ||
2316
- posBit & DOCUMENT_POSITION_CONTAINS) {
2317
- res = 1;
2318
- } else {
2319
- res = -1;
2320
- }
2321
- return res;
2322
- });
2323
- }
2324
- return arr;
2325
- }
2326
-
2327
2292
  /**
2328
2293
  * match nodes
2329
2294
  * @param {string} targetType - target type
@@ -2452,6 +2417,29 @@ export class Matcher {
2452
2417
  return nodes;
2453
2418
  }
2454
2419
 
2420
+ /**
2421
+ * sort nodes
2422
+ * @param {object} nodes - collection of nodes
2423
+ * @returns {Array.<object|undefined>} - collection of sorted nodes
2424
+ */
2425
+ _sortNodes(nodes) {
2426
+ const arr = [...nodes];
2427
+ if (arr.length > 1) {
2428
+ arr.sort((a, b) => {
2429
+ let res;
2430
+ const posBit = a.compareDocumentPosition(b);
2431
+ if (posBit & DOCUMENT_POSITION_PRECEDING ||
2432
+ posBit & DOCUMENT_POSITION_CONTAINS) {
2433
+ res = 1;
2434
+ } else {
2435
+ res = -1;
2436
+ }
2437
+ return res;
2438
+ });
2439
+ }
2440
+ return arr;
2441
+ }
2442
+
2455
2443
  /**
2456
2444
  * matches
2457
2445
  * @returns {boolean} - `true` if matched `false` otherwise
@@ -37,9 +37,9 @@ export class Matcher {
37
37
  }): object;
38
38
  _findNodes(twig: object, targetType: string): object;
39
39
  _collectNodes(targetType: string): Array<Array<object | undefined>>;
40
- _sortNodes(nodes: object): Array<object | undefined>;
41
40
  _matchNodes(targetType: string): object;
42
41
  _find(targetType: string): object;
42
+ _sortNodes(nodes: object): Array<object | undefined>;
43
43
  matches(): boolean;
44
44
  closest(): object | null;
45
45
  querySelector(): object | null;