From 9fa5ced3c993188b4b37b942c6fad94b0823cdcf Mon Sep 17 00:00:00 2001
From: "asamuzaK (Kazz)" <kazz@asamuzak.jp>
Date: Sat, 17 Feb 2024 13:04:26 +0900
Subject: [PATCH] v4.1.3

---
 dist/cjs/js/constant.js     | 2 +-
 dist/cjs/js/constant.js.map | 6 +++---
 dist/cjs/js/finder.js       | 2 +-
 dist/cjs/js/finder.js.map   | 4 ++--
 dist/cjs/js/parser.js       | 4 ++--
 dist/cjs/js/parser.js.map   | 6 +++---
 package.json                | 2 +-
 types/js/constant.d.ts      | 1 +
 8 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/dist/cjs/js/constant.js b/dist/cjs/js/constant.js
index 821856d4..01fc7aa5 100644
--- a/dist/cjs/js/constant.js
+++ b/dist/cjs/js/constant.js
@@ -1,2 +1,2 @@
-var E=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var T=(o,t)=>{for(var r in t)E(o,r,{get:t[r],enumerable:!0})},_=(o,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of c(t))!n.call(o,e)&&e!==r&&E(o,e,{get:()=>t[e],enumerable:!(s=x(t,e))||s.enumerable});return o};var p=o=>_(E({},"__esModule",{value:!0}),o);var Et={};T(Et,{ALPHA_NUM:()=>O,AN_PLUS_B:()=>S,BIT_01:()=>W,BIT_02:()=>a,BIT_04:()=>d,BIT_08:()=>i,BIT_16:()=>u,BIT_32:()=>Y,BIT_FFFF:()=>h,BIT_HYPHEN:()=>$,COMBINATOR:()=>N,DOCUMENT_FRAGMENT_NODE:()=>Z,DOCUMENT_NODE:()=>K,DOCUMENT_POSITION_CONTAINED_BY:()=>q,DOCUMENT_POSITION_CONTAINS:()=>k,DOCUMENT_POSITION_PRECEDING:()=>j,DUO:()=>X,ELEMENT_NODE:()=>y,HEX:()=>b,IDENTIFIER:()=>R,NOT_SUPPORTED_ERR:()=>D,NTH:()=>I,RAW:()=>C,REG_LOGICAL_PSEUDO:()=>tt,REG_SHADOW_HOST:()=>ot,REG_SHADOW_MODE:()=>et,REG_SHADOW_PSEUDO:()=>rt,SELECTOR:()=>L,SELECTOR_ATTR:()=>A,SELECTOR_CLASS:()=>F,SELECTOR_ID:()=>P,SELECTOR_LIST:()=>M,SELECTOR_PSEUDO_CLASS:()=>U,SELECTOR_PSEUDO_ELEMENT:()=>l,SELECTOR_TYPE:()=>H,SHOW_ALL:()=>v,SHOW_DOCUMENT:()=>z,SHOW_DOCUMENT_FRAGMENT:()=>J,SHOW_ELEMENT:()=>Q,STRING:()=>B,SYNTAX_ERR:()=>f,TEXT_NODE:()=>g,TYPE_FROM:()=>m,TYPE_TO:()=>w,U_FFFD:()=>G,WALKER_FILTER:()=>V});module.exports=p(Et);const O="[A-Z\\d]+",S="AnPlusB",N="Combinator",R="Identifier",D="NotSupportedError",I="Nth",C="Raw",L="Selector",A="AttributeSelector",F="ClassSelector",P="IdSelector",M="SelectorList",U="PseudoClassSelector",l="PseudoElementSelector",H="TypeSelector",B="String",f="SyntaxError",G="\uFFFD",W=1,a=2,d=4,i=8,u=16,Y=32,h=65535,$=45,X=2,b=16,m=8,w=-1,y=1,g=3,K=9,Z=11,j=2,k=8,q=16,v=4294967295,z=256,J=1024,Q=1,V=1281,tt=/^(?:(?:ha|i)s|not|where)$/,ot=/^host(?:-context)?$/,et=/^(?:close|open)$/,rt=/^part|slotted$/;0&&(module.exports={ALPHA_NUM,AN_PLUS_B,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,BIT_HYPHEN,COMBINATOR,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,HEX,IDENTIFIER,NOT_SUPPORTED_ERR,NTH,RAW,REG_LOGICAL_PSEUDO,REG_SHADOW_HOST,REG_SHADOW_MODE,REG_SHADOW_PSEUDO,SELECTOR,SELECTOR_ATTR,SELECTOR_CLASS,SELECTOR_ID,SELECTOR_LIST,SELECTOR_PSEUDO_CLASS,SELECTOR_PSEUDO_ELEMENT,SELECTOR_TYPE,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,STRING,SYNTAX_ERR,TEXT_NODE,TYPE_FROM,TYPE_TO,U_FFFD,WALKER_FILTER});
+var E=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var _=(o,t)=>{for(var r in t)E(o,r,{get:t[r],enumerable:!0})},T=(o,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of c(t))!n.call(o,e)&&e!==r&&E(o,e,{get:()=>t[e],enumerable:!(s=x(t,e))||s.enumerable});return o};var p=o=>T(E({},"__esModule",{value:!0}),o);var st={};_(st,{ALPHA_NUM:()=>O,AN_PLUS_B:()=>S,BIT_01:()=>Y,BIT_02:()=>a,BIT_04:()=>d,BIT_08:()=>i,BIT_16:()=>u,BIT_32:()=>h,BIT_FFFF:()=>$,BIT_HYPHEN:()=>X,COMBINATOR:()=>N,DOCUMENT_FRAGMENT_NODE:()=>j,DOCUMENT_NODE:()=>Z,DOCUMENT_POSITION_CONTAINED_BY:()=>v,DOCUMENT_POSITION_CONTAINS:()=>q,DOCUMENT_POSITION_PRECEDING:()=>k,DUO:()=>b,ELEMENT_NODE:()=>g,EMPTY:()=>R,HEX:()=>m,IDENTIFIER:()=>D,NOT_SUPPORTED_ERR:()=>I,NTH:()=>C,RAW:()=>L,REG_LOGICAL_PSEUDO:()=>ot,REG_SHADOW_HOST:()=>et,REG_SHADOW_MODE:()=>rt,REG_SHADOW_PSEUDO:()=>Et,SELECTOR:()=>A,SELECTOR_ATTR:()=>P,SELECTOR_CLASS:()=>F,SELECTOR_ID:()=>M,SELECTOR_LIST:()=>U,SELECTOR_PSEUDO_CLASS:()=>l,SELECTOR_PSEUDO_ELEMENT:()=>H,SELECTOR_TYPE:()=>B,SHOW_ALL:()=>z,SHOW_DOCUMENT:()=>J,SHOW_DOCUMENT_FRAGMENT:()=>Q,SHOW_ELEMENT:()=>V,STRING:()=>f,SYNTAX_ERR:()=>G,TEXT_NODE:()=>K,TYPE_FROM:()=>w,TYPE_TO:()=>y,U_FFFD:()=>W,WALKER_FILTER:()=>tt});module.exports=p(st);const O="[A-Z\\d]+",S="AnPlusB",N="Combinator",R="__EMPTY__",D="Identifier",I="NotSupportedError",C="Nth",L="Raw",A="Selector",P="AttributeSelector",F="ClassSelector",M="IdSelector",U="SelectorList",l="PseudoClassSelector",H="PseudoElementSelector",B="TypeSelector",f="String",G="SyntaxError",W="\uFFFD",Y=1,a=2,d=4,i=8,u=16,h=32,$=65535,X=45,b=2,m=16,w=8,y=-1,g=1,K=3,Z=9,j=11,k=2,q=8,v=16,z=4294967295,J=256,Q=1024,V=1,tt=1281,ot=/^(?:(?:ha|i)s|not|where)$/,et=/^host(?:-context)?$/,rt=/^(?:close|open)$/,Et=/^part|slotted$/;0&&(module.exports={ALPHA_NUM,AN_PLUS_B,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,BIT_HYPHEN,COMBINATOR,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,EMPTY,HEX,IDENTIFIER,NOT_SUPPORTED_ERR,NTH,RAW,REG_LOGICAL_PSEUDO,REG_SHADOW_HOST,REG_SHADOW_MODE,REG_SHADOW_PSEUDO,SELECTOR,SELECTOR_ATTR,SELECTOR_CLASS,SELECTOR_ID,SELECTOR_LIST,SELECTOR_PSEUDO_CLASS,SELECTOR_PSEUDO_ELEMENT,SELECTOR_TYPE,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,STRING,SYNTAX_ERR,TEXT_NODE,TYPE_FROM,TYPE_TO,U_FFFD,WALKER_FILTER});
 //# sourceMappingURL=constant.js.map
diff --git a/dist/cjs/js/constant.js.map b/dist/cjs/js/constant.js.map
index 3a32bc5b..d56e10d1 100644
--- a/dist/cjs/js/constant.js.map
+++ b/dist/cjs/js/constant.js.map
@@ -1,7 +1,7 @@
 {
   "version": 3,
   "sources": ["../../../src/js/constant.js"],
-  "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const ALPHA_NUM = '[A-Z\\\\d]+';\nexport const AN_PLUS_B = 'AnPlusB';\nexport const COMBINATOR = 'Combinator';\nexport const IDENTIFIER = 'Identifier';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_ATTR = 'AttributeSelector';\nexport const SELECTOR_CLASS = 'ClassSelector';\nexport const SELECTOR_ID = 'IdSelector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const SELECTOR_PSEUDO_CLASS = 'PseudoClassSelector';\nexport const SELECTOR_PSEUDO_ELEMENT = 'PseudoElementSelector';\nexport const SELECTOR_TYPE = 'TypeSelector';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const U_FFFD = '\\uFFFD';\n\n/* numeric */\nexport const BIT_01 = 1;\nexport const BIT_02 = 2;\nexport const BIT_04 = 4;\nexport const BIT_08 = 8;\nexport const BIT_16 = 0x10;\nexport const BIT_32 = 0x20;\nexport const BIT_FFFF = 0xFFFF;\nexport const BIT_HYPHEN = 0x2D;\nexport const DUO = 2;\nexport const HEX = 16;\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 = 2;\nexport const DOCUMENT_POSITION_CONTAINS = 8;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ALL = 0xffffffff;\nexport const SHOW_DOCUMENT = 0x100;\nexport const SHOW_DOCUMENT_FRAGMENT = 0x400;\nexport const SHOW_ELEMENT = 1;\nexport const WALKER_FILTER = 0x501;\n\n/* regexp */\nexport const REG_LOGICAL_PSEUDO = /^(?:(?:ha|i)s|not|where)$/;\nexport const REG_SHADOW_HOST = /^host(?:-context)?$/;\nexport const REG_SHADOW_MODE = /^(?:close|open)$/;\nexport const REG_SHADOW_PSEUDO = /^part|slotted$/;\n"],
-  "mappings": "4ZAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,eAAAE,EAAA,cAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,kBAAAC,EAAA,mCAAAC,EAAA,+BAAAC,EAAA,gCAAAC,EAAA,QAAAC,EAAA,iBAAAC,EAAA,QAAAC,EAAA,eAAAC,EAAA,sBAAAC,EAAA,QAAAC,EAAA,QAAAC,EAAA,uBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,sBAAAC,GAAA,aAAAC,EAAA,kBAAAC,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,kBAAAC,EAAA,0BAAAC,EAAA,4BAAAC,EAAA,kBAAAC,EAAA,aAAAC,EAAA,kBAAAC,EAAA,2BAAAC,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,cAAAC,EAAA,cAAAC,EAAA,YAAAC,EAAA,WAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAhD,IAKO,MAAME,EAAY,YACZC,EAAY,UACZS,EAAa,aACbS,EAAa,aACbC,EAAoB,oBACpBC,EAAM,MACNC,EAAM,MACNK,EAAW,WACXC,EAAgB,oBAChBC,EAAiB,gBACjBC,EAAc,aACdC,EAAgB,eAChBC,EAAwB,sBACxBC,EAA0B,wBAC1BC,EAAgB,eAChBK,EAAS,SACTC,EAAa,cACbI,EAAS,SAGT1C,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,GACTC,EAAS,GACTC,EAAW,MACXC,EAAa,GACbO,EAAM,EACNE,EAAM,GACNwB,EAAY,EACZC,EAAU,GAGV1B,EAAe,EACfwB,EAAY,EACZ7B,EAAgB,EAChBD,EAAyB,GACzBI,EAA8B,EAC9BD,EAA6B,EAC7BD,EAAiC,GAGjCsB,EAAW,WACXC,EAAgB,IAChBC,EAAyB,KACzBC,EAAe,EACfO,EAAgB,KAGhBtB,GAAqB,4BACrBC,GAAkB,sBAClBC,GAAkB,mBAClBC,GAAoB",
-  "names": ["constant_exports", "__export", "ALPHA_NUM", "AN_PLUS_B", "BIT_01", "BIT_02", "BIT_04", "BIT_08", "BIT_16", "BIT_32", "BIT_FFFF", "BIT_HYPHEN", "COMBINATOR", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_PRECEDING", "DUO", "ELEMENT_NODE", "HEX", "IDENTIFIER", "NOT_SUPPORTED_ERR", "NTH", "RAW", "REG_LOGICAL_PSEUDO", "REG_SHADOW_HOST", "REG_SHADOW_MODE", "REG_SHADOW_PSEUDO", "SELECTOR", "SELECTOR_ATTR", "SELECTOR_CLASS", "SELECTOR_ID", "SELECTOR_LIST", "SELECTOR_PSEUDO_CLASS", "SELECTOR_PSEUDO_ELEMENT", "SELECTOR_TYPE", "SHOW_ALL", "SHOW_DOCUMENT", "SHOW_DOCUMENT_FRAGMENT", "SHOW_ELEMENT", "STRING", "SYNTAX_ERR", "TEXT_NODE", "TYPE_FROM", "TYPE_TO", "U_FFFD", "WALKER_FILTER", "__toCommonJS"]
+  "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const ALPHA_NUM = '[A-Z\\\\d]+';\nexport const AN_PLUS_B = 'AnPlusB';\nexport const COMBINATOR = 'Combinator';\nexport const EMPTY = '__EMPTY__';\nexport const IDENTIFIER = 'Identifier';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_ATTR = 'AttributeSelector';\nexport const SELECTOR_CLASS = 'ClassSelector';\nexport const SELECTOR_ID = 'IdSelector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const SELECTOR_PSEUDO_CLASS = 'PseudoClassSelector';\nexport const SELECTOR_PSEUDO_ELEMENT = 'PseudoElementSelector';\nexport const SELECTOR_TYPE = 'TypeSelector';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const U_FFFD = '\\uFFFD';\n\n/* numeric */\nexport const BIT_01 = 1;\nexport const BIT_02 = 2;\nexport const BIT_04 = 4;\nexport const BIT_08 = 8;\nexport const BIT_16 = 0x10;\nexport const BIT_32 = 0x20;\nexport const BIT_FFFF = 0xFFFF;\nexport const BIT_HYPHEN = 0x2D;\nexport const DUO = 2;\nexport const HEX = 16;\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 = 2;\nexport const DOCUMENT_POSITION_CONTAINS = 8;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ALL = 0xffffffff;\nexport const SHOW_DOCUMENT = 0x100;\nexport const SHOW_DOCUMENT_FRAGMENT = 0x400;\nexport const SHOW_ELEMENT = 1;\nexport const WALKER_FILTER = 0x501;\n\n/* regexp */\nexport const REG_LOGICAL_PSEUDO = /^(?:(?:ha|i)s|not|where)$/;\nexport const REG_SHADOW_HOST = /^host(?:-context)?$/;\nexport const REG_SHADOW_MODE = /^(?:close|open)$/;\nexport const REG_SHADOW_PSEUDO = /^part|slotted$/;\n"],
+  "mappings": "4ZAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,eAAAE,EAAA,cAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,kBAAAC,EAAA,mCAAAC,EAAA,+BAAAC,EAAA,gCAAAC,EAAA,QAAAC,EAAA,iBAAAC,EAAA,UAAAC,EAAA,QAAAC,EAAA,eAAAC,EAAA,sBAAAC,EAAA,QAAAC,EAAA,QAAAC,EAAA,uBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,sBAAAC,GAAA,aAAAC,EAAA,kBAAAC,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,kBAAAC,EAAA,0BAAAC,EAAA,4BAAAC,EAAA,kBAAAC,EAAA,aAAAC,EAAA,kBAAAC,EAAA,2BAAAC,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,cAAAC,EAAA,cAAAC,EAAA,YAAAC,EAAA,WAAAC,EAAA,kBAAAC,KAAA,eAAAC,EAAAjD,IAKO,MAAME,EAAY,YACZC,EAAY,UACZS,EAAa,aACbQ,EAAQ,YACRE,EAAa,aACbC,EAAoB,oBACpBC,EAAM,MACNC,EAAM,MACNK,EAAW,WACXC,EAAgB,oBAChBC,EAAiB,gBACjBC,EAAc,aACdC,EAAgB,eAChBC,EAAwB,sBACxBC,EAA0B,wBAC1BC,EAAgB,eAChBK,EAAS,SACTC,EAAa,cACbI,EAAS,SAGT3C,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,GACTC,EAAS,GACTC,EAAW,MACXC,EAAa,GACbO,EAAM,EACNG,EAAM,GACNwB,EAAY,EACZC,EAAU,GAGV3B,EAAe,EACfyB,EAAY,EACZ9B,EAAgB,EAChBD,EAAyB,GACzBI,EAA8B,EAC9BD,EAA6B,EAC7BD,EAAiC,GAGjCuB,EAAW,WACXC,EAAgB,IAChBC,EAAyB,KACzBC,EAAe,EACfO,GAAgB,KAGhBtB,GAAqB,4BACrBC,GAAkB,sBAClBC,GAAkB,mBAClBC,GAAoB",
+  "names": ["constant_exports", "__export", "ALPHA_NUM", "AN_PLUS_B", "BIT_01", "BIT_02", "BIT_04", "BIT_08", "BIT_16", "BIT_32", "BIT_FFFF", "BIT_HYPHEN", "COMBINATOR", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_PRECEDING", "DUO", "ELEMENT_NODE", "EMPTY", "HEX", "IDENTIFIER", "NOT_SUPPORTED_ERR", "NTH", "RAW", "REG_LOGICAL_PSEUDO", "REG_SHADOW_HOST", "REG_SHADOW_MODE", "REG_SHADOW_PSEUDO", "SELECTOR", "SELECTOR_ATTR", "SELECTOR_CLASS", "SELECTOR_ID", "SELECTOR_LIST", "SELECTOR_PSEUDO_CLASS", "SELECTOR_PSEUDO_ELEMENT", "SELECTOR_TYPE", "SHOW_ALL", "SHOW_DOCUMENT", "SHOW_DOCUMENT_FRAGMENT", "SHOW_ELEMENT", "STRING", "SYNTAX_ERR", "TEXT_NODE", "TYPE_FROM", "TYPE_TO", "U_FFFD", "WALKER_FILTER", "__toCommonJS"]
 }
diff --git a/dist/cjs/js/finder.js b/dist/cjs/js/finder.js
index b9bf7d73..4e8fe017 100644
--- a/dist/cjs/js/finder.js
+++ b/dist/cjs/js/finder.js
@@ -1,2 +1,2 @@
-var W=Object.create;var P=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var q=(A,i)=>{for(var e in i)P(A,e,{get:i[e],enumerable:!0})},U=(A,i,e,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of B(i))!G.call(A,a)&&a!==e&&P(A,a,{get:()=>i[a],enumerable:!(r=H(i,a))||r.enumerable});return A};var z=(A,i,e)=>(e=A!=null?W(j(A)):{},U(i||!A||!A.__esModule?P(e,"default",{value:A,enumerable:!0}):e,A)),V=A=>U(P({},"__esModule",{value:!0}),A);var Q={};q(Q,{Finder:()=>X});module.exports=V(Q);var I=z(require("is-potential-custom-element-name"),1),F=z(require("nwsapi"),1),L=require("./dom-util.js"),M=require("./matcher.js"),y=require("./parser.js"),u=require("./constant.js");const C="next",O="prev",$="all",E="first",R="lineal",D="self";class X{#a;#l;#t;#o;#f;#e;#h;#w;#c;#n;#m;#s;#d;#u;#r;#b;#i;#p;constructor(i){this.#p=i,this.#f=i.document,this.#l=new WeakMap,this.#m=new WeakMap,this.#c=(0,F.default)({document:i.document,DOMException:i.DOMException}),this.#c.configure({LOGERRORS:!1})}_onError(i){if(!this.#w)if(i instanceof DOMException||i instanceof this.#p.DOMException)if(i.name===u.NOT_SUPPORTED_ERR)this.#i&&console.warn(i.message);else throw new this.#p.DOMException(i.message,i.name);else throw i}_setup(i,e,r={}){const{noexcept:a,warn:s}=r;return this.#w=!!a,this.#i=!!s,this.#e=e,[this.#t,this.#s,this.#r]=(0,L.resolveContent)(e),this.#d=(0,L.isInShadowTree)(e),[this.#a,this.#h]=this._correspond(i),this.#b=new WeakMap,e}_correspond(i){const e=[];this.#o=!1;let r;if(this.#t){const a=this.#l.get(this.#t);if(a&&a.has(`${i}`)){const s=a.get(`${i}`);this.#o=s.descendant,r=s.ast}}if(r){const a=r.length;for(let s=0;s<a;s++)r[s].collected=!1,r[s].dir=null,r[s].filtered=!1,r[s].find=!1,e[s]=[]}else{let a;try{a=(0,y.parseSelector)(i)}catch(h){this._onError(h)}const s=(0,y.walkAST)(a);let o=!1,n=0;r=[];for(const[...h]of s){const f=[];let t=h.shift();if(t&&t.type!==u.COMBINATOR){const l=new Set;for(;t;){if(t.type===u.COMBINATOR){const[c]=h;if(c.type===u.COMBINATOR){const p=`Invalid selector ${i}`;throw new DOMException(p,u.SYNTAX_ERR)}const m=t.name;/^[\s>]$/.test(m)&&(o=!0),f.push({combo:t,leaves:(0,y.sortAST)(l)}),l.clear()}else if(t){let{name:c}=t;c&&typeof c=="string"&&(c=(0,y.unescapeSelector)(c),t.name=c,/[|:]/.test(c)&&(t.namespace=!0)),l.add(t)}if(h.length)t=h.shift();else{f.push({combo:null,leaves:(0,y.sortAST)(l)}),l.clear();break}}}r.push({branch:f,collected:!1,dir:null,filtered:!1,find:!1}),e[n]=[],n++}if(this.#t){let h;this.#l.has(this.#t)?h=this.#l.get(this.#t):h=new Map,h.set(`${i}`,{ast:r,descendant:o}),this.#l.set(this.#t,h)}this.#o=o}return[r,e]}_createTreeWalker(i){let e;return this.#b.has(i)?e=this.#b.get(i):(e=this.#f.createTreeWalker(i,u.WALKER_FILTER),this.#b.set(i,e)),e}_prepareQuerySelectorWalker(){return this.#n=this._createTreeWalker(this.#e),this.#u=!1,this.#n}_traverse(i,e=this.#r){let r=e.currentNode,a;if(r===i)a=r;else if(r.contains(i))for(r=e.nextNode();r;){if(r===i){a=r;break}r=e.nextNode()}else{if(r!==e.root)for(;r&&!(r===e.root||r===i);)r=e.parentNode();if(i?.nodeType===u.ELEMENT_NODE)for(;r;){if(r===i){a=r;break}r=e.nextNode()}else a=r}return a??null}_collectNthChild(i,e,r){const{a,b:s,reverse:o,selector:n}=i,{parentNode:h}=e,f=new Set;let t;if(n&&(this.#l.has(n)?t=this.#l.get(n):(t=(0,y.walkAST)(n),this.#l.set(n,t))),h){const l=this.#r;let c=this._traverse(h,l);c=l.firstChild();let m=0;for(;c;)m++,c=l.nextSibling();c=this._traverse(h,l);const p=new Set;if(t)for(c=l.firstChild();c;){let b;for(const _ of t)if(b=this._matchLeaves(_,c,r),!b)break;b&&p.add(c),c=l.nextSibling()}if(a===0){if(s>0&&s<=m){if(p.size){c=this._traverse(h,l),o?c=l.lastChild():c=l.firstChild();let b=0;for(;c;){if(p.has(c)){if(b===s-1){f.add(c);break}b++}o?c=l.previousSibling():c=l.nextSibling()}}else if(!n){c=this._traverse(h,l),o?c=l.lastChild():c=l.firstChild();let b=0;for(;c;){if(b===s-1){f.add(c);break}o?c=l.previousSibling():c=l.nextSibling(),b++}}}}else{let b=s-1;if(a>0)for(;b<0;)b+=a;if(b>=0&&b<m){c=this._traverse(h,l),o?c=l.lastChild():c=l.firstChild();let _=0,N=a>0?0:s-1;for(;c&&(c&&b>=0&&b<m);)p.size?p.has(c)&&(N===b&&(f.add(c),b+=a),a>0?N++:N--):_===b&&(n||f.add(c),b+=a),o?c=l.previousSibling():c=l.nextSibling(),_++}}if(o&&f.size>1){const b=[...f];return new Set(b.reverse())}}else if(e===this.#s&&a+s===1)if(t){let l;for(const c of t)if(l=this._matchLeaves(c,e,r),l)break;l&&f.add(e)}else f.add(e);return f}_collectNthOfType(i,e){const{a:r,b:a,reverse:s}=i,{localName:o,parentNode:n,prefix:h}=e,f=new Set;if(n){const t=this.#r;let l=this._traverse(n,t);l=t.firstChild();let c=0;for(;l;)c++,l=t.nextSibling();if(r===0){if(a>0&&a<=c){l=this._traverse(n,t),s?l=t.lastChild():l=t.firstChild();let m=0;for(;l;){const{localName:p,prefix:b}=l;if(p===o&&b===h){if(m===a-1){f.add(l);break}m++}s?l=t.previousSibling():l=t.nextSibling()}}}else{let m=a-1;if(r>0)for(;m<0;)m+=r;if(m>=0&&m<c){l=this._traverse(n,t),s?l=t.lastChild():l=t.firstChild();let p=r>0?0:a-1;for(;l;){const{localName:b,prefix:_}=l;if(b===o&&_===h){if(p===m&&(f.add(l),m+=r),m<0||m>=c)break;r>0?p++:p--}s?l=t.previousSibling():l=t.nextSibling()}}}if(s&&f.size>1){const m=[...f];return new Set(m.reverse())}}else e===this.#s&&r+a===1&&f.add(e);return f}_matchAnPlusB(i,e,r,a){const{nth:{a:s,b:o,name:n},selector:h}=i,f=new Map;if(n?(n==="even"?(f.set("a",2),f.set("b",0)):n==="odd"&&(f.set("a",2),f.set("b",1)),r.indexOf("last")>-1&&f.set("reverse",!0)):(typeof s=="string"&&/-?\d+/.test(s)?f.set("a",s*1):f.set("a",0),typeof o=="string"&&/-?\d+/.test(o)?f.set("b",o*1):f.set("b",0),r.indexOf("last")>-1&&f.set("reverse",!0)),/^nth-(?:last-)?child$/.test(r)){h&&f.set("selector",h);const t=Object.fromEntries(f);return this._collectNthChild(t,e,a)}else if(/^nth-(?:last-)?of-type$/.test(r)){const t=Object.fromEntries(f);return this._collectNthOfType(t,e)}return new Set}_matchDirectionPseudoClass(i,e){const r=(0,L.getDirectionality)(e);let a;return i.name===r&&(a=e),a??null}_matchLanguagePseudoClass(i,e){const r=(0,y.unescapeSelector)(i.name);i.name=r;let a;if(r==="*")if(e.hasAttribute("lang"))e.getAttribute("lang")&&(a=e);else{let s=e.parentNode;for(;s&&s.nodeType===u.ELEMENT_NODE;){if(s.hasAttribute("lang")){s.getAttribute("lang")&&(a=e);break}s=s.parentNode}}else if(r){const s=`(?:-${u.ALPHA_NUM})*`;if(new RegExp(`^(?:\\*-)?${u.ALPHA_NUM}${s}$`,"i").test(r)){let n;if(r.indexOf("-")>-1){const[h,f,...t]=r.split("-");let l;h==="*"?l=`${u.ALPHA_NUM}${s}`:l=`${h}${s}`;const c=`-${f}${s}`,m=t.length;let p="";if(m)for(let b=0;b<m;b++)p+=`-${t[b]}${s}`;n=new RegExp(`^${l}${c}${p}$`,"i")}else n=new RegExp(`^${r}${s}$`,"i");if(e.hasAttribute("lang"))n.test(e.getAttribute("lang"))&&(a=e);else{let h=e.parentNode;for(;h&&h.nodeType===u.ELEMENT_NODE;){if(h.hasAttribute("lang")){const f=h.getAttribute("lang");n.test(f)&&(a=e);break}h=h.parentNode}}}}return a??null}_matchHasPseudoFunc(i,e,r={}){let a;if(Array.isArray(i)&&i.length){const[s]=i,{type:o}=s;let n;o===u.COMBINATOR?n=i.shift():n={name:" ",type:u.COMBINATOR};const h=[];for(;i.length;){const[l]=i,{type:c}=l;if(c===u.COMBINATOR)break;h.push(i.shift())}const f={combo:n,leaves:h};r.dir=C;const t=this._matchCombinator(f,e,r);if(t.size)if(i.length){for(const l of t)if(a=this._matchHasPseudoFunc(Object.assign([],i),l,r),a)break}else a=!0}return!!a}_matchLogicalPseudoFunc(i,e,r={}){const{astName:a="",branches:s=[],selector:o="",twigBranches:n=[]}=i;let h;if(a==="has")if(o.includes(":has("))h=null;else{let f;for(const t of s)if(f=this._matchHasPseudoFunc(Object.assign([],t),e,r),f)break;f&&(h=e)}else{const f=/^(?:is|where)$/.test(a);r.forgive=f;const t=n.length;let l;for(let c=0;c<t;c++){const m=n[c],p=m.length-1,{leaves:b}=m[p];if(l=this._matchLeaves(b,e,r),l&&p>0){let _=new Set([e]);for(let N=p-1;N>=0;N--){const k=m[N],d=[];r.dir=O;for(const w of _){const g=this._matchCombinator(k,w,r);g.size&&d.push(...g)}if(d.length)N===0?l=!0:_=new Set(d);else{l=!1;break}}}if(l)break}a==="not"?l||(h=e):l&&(h=e)}return h??null}_matchPseudoClassSelector(i,e,r={}){const{children:a,name:s}=i,{localName:o,parentNode:n}=e,{forgive:h,warn:f=this.#i}=r,t=new Set;if(u.REG_LOGICAL_PSEUDO.test(s)){let l;if(this.#l.has(i))l=this.#l.get(i);else{const m=(0,y.walkAST)(i),p=[],b=[];for(const[..._]of m){for(const w of _){const g=(0,y.generateCSS)(w);p.push(g)}const N=[],k=new Set;let d=_.shift();for(;d;)if(d.type===u.COMBINATOR?(N.push({combo:d,leaves:[...k]}),k.clear()):d&&k.add(d),_.length)d=_.shift();else{N.push({combo:null,leaves:[...k]}),k.clear();break}b.push(N)}l={astName:s,branches:m,twigBranches:b,selector:p.join(",")},this.#l.set(i,l)}const c=this._matchLogicalPseudoFunc(l,e,r);c&&t.add(c)}else if(Array.isArray(a)){const[l]=a;if(/^nth-(?:last-)?(?:child|of-type)$/.test(s))return this._matchAnPlusB(l,e,s,r);if(s==="dir"){const c=this._matchDirectionPseudoClass(l,e);c&&t.add(c)}else if(s==="lang"){const c=this._matchLanguagePseudoClass(l,e);c&&t.add(c)}else switch(s){case"current":case"nth-col":case"nth-last-col":{if(f){const c=`Unsupported pseudo-class :${s}()`;throw new DOMException(c,u.NOT_SUPPORTED_ERR)}break}case"host":case"host-context":break;default:if(!h){const c=`Unknown pseudo-class :${s}()`;throw new DOMException(c,u.SYNTAX_ERR)}}}else{const l=/^a(?:rea)?$/,c=/^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/,m=/^(?:(?:inpu|selec)t|button|form|textarea)$/,p=/^d(?:etails|ialog)$/,b=/^(?:checkbox|radio)$/,_=/^(?:date(?:time-local)?|month|time|week)$/,N=/(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/,k=/^(?:(?:emai|te|ur)l|number|password|search|text)$/;switch(s){case"any-link":case"link":{l.test(o)&&e.hasAttribute("href")&&t.add(e);break}case"local-link":{if(l.test(o)&&e.hasAttribute("href")){const{href:d,origin:w,pathname:g}=new URL(this.#t.URL),x=new URL(e.getAttribute("href"),d);x.origin===w&&x.pathname===g&&t.add(e)}break}case"visited":break;case"target":{const{hash:d}=new URL(this.#t.URL);e.id&&d===`#${e.id}`&&this.#t.contains(e)&&t.add(e);break}case"target-within":{const{hash:d}=new URL(this.#t.URL);if(d){const w=d.replace(/^#/,"");let g=this.#t.getElementById(w);for(;g;){if(g===e){t.add(e);break}g=g.parentNode}}break}case"scope":{this.#e.nodeType===u.ELEMENT_NODE?!this.#d&&e===this.#e&&t.add(e):e===this.#t.documentElement&&t.add(e);break}case"focus":{if(e===this.#t.activeElement){let d=e,w=!0;for(;d;){if(d.hasAttribute("hidden")){w=!1;break}else if(d.hasAttribute("style")){const{display:g,visibility:x}=d.style;if(w=!(g==="none"||x==="hidden"),!w)break}if(d.parentNode&&d.parentNode.nodeType===u.ELEMENT_NODE)d=d.parentNode;else break}w&&t.add(e)}break}case"focus-within":{let d=this.#t.activeElement,w;for(;d;){if(d===e){w=!0;break}d=d.parentNode}if(w){let g=e,x=!0;for(;g;){if(g.hasAttribute("hidden")){x=!1;break}else if(g.hasAttribute("style")){const{display:v,visibility:T}=g.style;if(x=!(v==="none"||T==="hidden"),!x)break}if(g.parentNode&&g.parentNode.nodeType===u.ELEMENT_NODE)g=g.parentNode;else break}x&&t.add(e)}break}case"open":{p.test(o)&&e.hasAttribute("open")&&t.add(e);break}case"closed":{p.test(o)&&!e.hasAttribute("open")&&t.add(e);break}case"disabled":{if(c.test(o)||(0,I.default)(o))if(e.disabled||e.hasAttribute("disabled"))t.add(e);else{let d=n;for(;d&&d.localName!=="fieldset";)d=d.parentNode;d&&n.localName!=="legend"&&d.hasAttribute("disabled")&&t.add(e)}break}case"enabled":{(c.test(o)||(0,I.default)(o))&&!(e.disabled&&e.hasAttribute("disabled"))&&t.add(e);break}case"read-only":{switch(o){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}case"input":{(!e.type||_.test(e.type)||k.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,L.isContentEditable)(e)||t.add(e)}break}case"read-write":{switch(o){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||t.add(e);break}case"input":{(!e.type||_.test(e.type)||k.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,L.isContentEditable)(e)&&t.add(e)}break}case"placeholder-shown":{let d;o==="textarea"?d=e:o==="input"&&(e.hasAttribute("type")?k.test(e.getAttribute("type"))&&(d=e):d=e),d&&e.value===""&&e.hasAttribute("placeholder")&&e.getAttribute("placeholder").trim().length&&t.add(e);break}case"checked":{(e.checked&&o==="input"&&e.hasAttribute("type")&&b.test(e.getAttribute("type"))||e.selected&&o==="option")&&t.add(e);break}case"indeterminate":{if(e.indeterminate&&o==="input"&&e.type==="checkbox"||o==="progress"&&!e.hasAttribute("value"))t.add(e);else if(o==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const d=e.name;let w=e.parentNode;for(;w&&w.localName!=="form";)w=w.parentNode;w||(w=this.#t.documentElement);const g=w.getElementsByTagName("input"),x=g.length;let v;for(let T=0;T<x;T++){const S=g[T];if(S.getAttribute("type")==="radio"&&(d?S.getAttribute("name")===d&&(v=!!S.checked):S.hasAttribute("name")||(v=!!S.checked),v))break}v||t.add(e)}break}case"default":{const d=/^(?:button|reset)$/,w=/^(?:image|submit)$/;if(o==="button"&&!(e.hasAttribute("type")&&d.test(e.getAttribute("type")))||o==="input"&&e.hasAttribute("type")&&w.test(e.getAttribute("type"))){let g=e.parentNode;for(;g&&g.localName!=="form";)g=g.parentNode;if(g){const x=this.#r;let v=this._traverse(g,x);for(v=x.firstChild();v&&g.contains(v);){const T=v.localName;let S;if(T==="button"?S=!(v.hasAttribute("type")&&d.test(v.getAttribute("type"))):T==="input"&&(S=v.hasAttribute("type")&&w.test(v.getAttribute("type"))),S){v===e&&t.add(e);break}v=x.nextNode()}}}else if(o==="input"&&e.hasAttribute("type")&&b.test(e.getAttribute("type"))&&(e.checked||e.hasAttribute("checked")))t.add(e);else if(o==="option"){let g=n,x=!1;for(;g&&g.localName!=="datalist";){if(g.localName==="select"){(g.multiple||g.hasAttribute("multiple"))&&(x=!0);break}g=g.parentNode}if(x)(e.selected||e.hasAttribute("selected"))&&t.add(e);else{const v=new Set,T=this.#r;let S=this._traverse(n,T);for(S=T.firstChild();S;){if(S.selected||S.hasAttribute("selected")){v.add(S);break}S=T.nextSibling()}v.size&&v.has(e)&&t.add(e)}}break}case"valid":{if(m.test(o))e.checkValidity()&&t.add(e);else if(o==="fieldset"){const d=this.#r;let w=this._traverse(e,d);w=d.firstChild();let g;for(;w&&e.contains(w)&&!(m.test(w.localName)&&(g=w.checkValidity(),!g));)w=d.nextNode();g&&t.add(e)}break}case"invalid":{if(m.test(o))e.checkValidity()||t.add(e);else if(o==="fieldset"){const d=this.#r;let w=this._traverse(e,d);w=d.firstChild();let g;for(;w&&e.contains(w)&&!(m.test(w.localName)&&(g=w.checkValidity(),!g));)w=d.nextNode();g||t.add(e)}break}case"in-range":{o==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&N.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":{o==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&N.test(e.getAttribute("type"))&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&t.add(e);break}case"required":{let d;if(/^(?:select|textarea)$/.test(o))d=e;else if(o==="input")if(e.hasAttribute("type")){const w=e.getAttribute("type");(w==="file"||b.test(w)||_.test(w)||k.test(w))&&(d=e)}else d=e;d&&(e.required||e.hasAttribute("required"))&&t.add(e);break}case"optional":{let d;if(/^(?:select|textarea)$/.test(o))d=e;else if(o==="input")if(e.hasAttribute("type")){const w=e.getAttribute("type");(w==="file"||b.test(w)||_.test(w)||k.test(w))&&(d=e)}else d=e;d&&!(e.required||e.hasAttribute("required"))&&t.add(e);break}case"root":{e===this.#t.documentElement&&t.add(e);break}case"empty":{if(e.hasChildNodes()){const d=this.#f.createTreeWalker(e,u.SHOW_ALL);let w=d.firstChild(),g;for(;w&&(g=w.nodeType!==u.ELEMENT_NODE&&w.nodeType!==u.TEXT_NODE,!!g);)w=d.nextSibling();g&&t.add(e)}else t.add(e);break}case"first-child":{(n&&e===n.firstElementChild||e===this.#s)&&t.add(e);break}case"last-child":{(n&&e===n.lastElementChild||e===this.#s)&&t.add(e);break}case"only-child":{(n&&e===n.firstElementChild&&e===n.lastElementChild||e===this.#s)&&t.add(e);break}case"first-of-type":{if(n){const[d]=this._collectNthOfType({a:0,b:1},e);d&&t.add(d)}else e===this.#s&&t.add(e);break}case"last-of-type":{if(n){const[d]=this._collectNthOfType({a:0,b:1,reverse:!0},e);d&&t.add(d)}else e===this.#s&&t.add(e);break}case"only-of-type":{if(n){const[d]=this._collectNthOfType({a:0,b:1},e);if(d===e){const[w]=this._collectNthOfType({a:0,b:1,reverse:!0},e);w===e&&t.add(e)}}else e===this.#s&&t.add(e);break}case"host":case"host-context":break;case"after":case"before":case"first-letter":case"first-line":{if(f){const d=`Unsupported pseudo-element ::${s}`;throw new DOMException(d,u.NOT_SUPPORTED_ERR)}break}case"active":case"autofill":case"blank":case"buffering":case"current":case"defined":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(f){const d=`Unsupported pseudo-class :${s}`;throw new DOMException(d,u.NOT_SUPPORTED_ERR)}break}default:if(s.startsWith("-webkit-")){if(f){const d=`Unsupported pseudo-class :${s}`;throw new DOMException(d,u.NOT_SUPPORTED_ERR)}}else if(!h){const d=`Unknown pseudo-class :${s}`;throw new DOMException(d,u.SYNTAX_ERR)}}}return t}_matchShadowHostPseudoClass(i,e){const{children:r,name:a}=i;let s;if(Array.isArray(r)){const[o]=(0,y.walkAST)(r[0]),[...n]=o,{host:h}=e;if(a==="host"){let f;for(const t of n){const{type:l}=t;if(l===u.COMBINATOR){const m=`Invalid selector ${(0,y.generateCSS)(i)}`;throw new DOMException(m,u.SYNTAX_ERR)}if(f=this._matchSelector(t,h).has(h),!f)break}f&&(s=e)}else if(a==="host-context"){let f=h,t;for(;f;){for(const l of n){const{type:c}=l;if(c===u.COMBINATOR){const p=`Invalid selector ${(0,y.generateCSS)(i)}`;throw new DOMException(p,u.SYNTAX_ERR)}if(t=this._matchSelector(l,f).has(f),!t)break}if(t)break;f=f.parentNode}t&&(s=e)}}else if(a==="host")s=e;else{const o=`Invalid selector :${a}`;throw new DOMException(o,u.SYNTAX_ERR)}return s??null}_matchSelector(i,e,r){const{type:a}=i,s=(0,y.unescapeSelector)(i.name);i.name=s;const o=new Set;if(e.nodeType===u.ELEMENT_NODE)switch(a){case u.SELECTOR_PSEUDO_ELEMENT:{(0,M.matchPseudoElementSelector)(s,r);break}case u.SELECTOR_ID:{e.id===s&&o.add(e);break}case u.SELECTOR_CLASS:{e.classList.contains(s)&&o.add(e);break}case u.SELECTOR_PSEUDO_CLASS:return this._matchPseudoClassSelector(i,e,r);default:{const n=(0,M.matchSelector)(i,e,r);n&&o.add(n)}}else if(this.#d&&a===u.SELECTOR_PSEUDO_CLASS&&e.nodeType===u.DOCUMENT_FRAGMENT_NODE){if(s!=="has"&&u.REG_LOGICAL_PSEUDO.test(s))return this._matchPseudoClassSelector(i,e,r);if(u.REG_SHADOW_HOST.test(s)){const n=this._matchShadowHostPseudoClass(i,e,r);n&&o.add(n)}}return o}_matchLeaves(i,e,r){const{attributes:a,localName:s,nodeType:o}=e;let n=this.#m.get(i),h;if(n&&n.has(e)){const{attr:f,matched:t}=n.get(e);a?.length===f&&(h=t)}if(typeof h!="boolean"){const f=/^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;let t;o===u.ELEMENT_NODE&&f.test(s)?t=!1:t=!0;for(const l of i){const{name:c,type:m}=l,p=(0,y.unescapeSelector)(c);if(l.name=p,m===u.SELECTOR_PSEUDO_CLASS&&p==="dir"&&(t=!1),h=this._matchSelector(l,e,r).has(e),!h)break}t&&(n||(n=new WeakMap),n.set(e,{attr:a?.length,matched:h}),this.#m.set(i,n))}return!!h}_matchHTMLCollection(i,e={}){const{compound:r,filterLeaves:a}=e,s=new Set,o=i.length;if(o)if(r)for(let n=0;n<o;n++){const h=i[n];this._matchLeaves(a,h,e)&&s.add(h)}else{const n=[].slice.call(i);return new Set(n)}return s}_findDescendantNodes(i,e,r){const[a,...s]=i,o=s.length>0,{type:n}=a,h=(0,y.unescapeSelector)(a.name);a.name=h;let f=new Set,t=!1;if(this.#d)t=!0;else switch(n){case u.SELECTOR_PSEUDO_ELEMENT:{(0,M.matchPseudoElementSelector)(h,r);break}case u.SELECTOR_ID:{if(this.#s.nodeType===u.ELEMENT_NODE)t=!0;else{const l=this.#s.getElementById(h);l&&l!==e&&e.contains(l)&&(o?this._matchLeaves(s,l,r)&&f.add(l):f.add(l))}break}case u.SELECTOR_CLASS:{const l=e.getElementsByClassName(h);f=this._matchHTMLCollection(l,{compound:o,filterLeaves:s});break}case u.SELECTOR_TYPE:{if(this.#t.contentType==="text/html"&&!/[*|]/.test(h)){const l=e.getElementsByTagName(h);f=this._matchHTMLCollection(l,{compound:o,filterLeaves:s})}else t=!0;break}default:t=!0}return{nodes:f,pending:t}}_matchCombinator(i,e,r={}){const{combo:a,leaves:s}=i,{name:o}=a,{parentNode:n}=e,{dir:h}=r,f=new Set;if(h===C)switch(o){case"+":{const t=e.nextElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(n){const t=this._createTreeWalker(n);let l=this._traverse(e,t);for(l=t.nextSibling();l;)this._matchLeaves(s,l,r)&&f.add(l),l=t.nextSibling()}break}case">":{const t=this._createTreeWalker(e);let l=this._traverse(e,t);for(l=t.firstChild();l;)this._matchLeaves(s,l,r)&&f.add(l),l=t.nextSibling();break}case" ":default:{const{nodes:t,pending:l}=this._findDescendantNodes(s,e);if(t.size)return t;if(l){const c=this._createTreeWalker(e);let m=this._traverse(e,c);for(m=c.nextNode();m&&e.contains(m);)this._matchLeaves(s,m,r)&&f.add(m),m=c.nextNode()}}}else switch(o){case"+":{const t=e.previousElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(n){const t=this._createTreeWalker(n);let l=this._traverse(n,t);for(l=t.firstChild();l&&l!==e;)this._matchLeaves(s,l,r)&&f.add(l),l=t.nextSibling()}break}case">":{n&&this._matchLeaves(s,n,r)&&f.add(n);break}case" ":default:{const t=[];let l=n;for(;l;)this._matchLeaves(s,l,r)&&t.push(l),l=l.parentNode;if(t.length)return new Set(t.reverse())}}return f}_findNode(i,e){const{node:r}=e;let a=this._traverse(r,this.#n),s;if(a)for(a.nodeType!==u.ELEMENT_NODE?a=this.#n.nextNode():a===r&&a!==this.#s&&(a=this.#n.nextNode());a;){if(this._matchLeaves(i,a,{warn:this.#i})){s=a;break}a=this.#n.nextNode()}return s??null}_matchSelf(i){const e=[],r=this._matchLeaves(i,this.#e,{warn:this.#i});let a=!1;return r&&(e.push(this.#e),a=!0),[e,a]}_findLineal(i,e={}){const{complex:r}=e,a=[];let s=this._matchLeaves(i,this.#e,{warn:this.#i}),o=!1;if(s&&(a.push(this.#e),o=!0),!s||r){let n=this.#e.parentNode;for(;n&&(s=this._matchLeaves(i,n,{warn:this.#i}),s&&(a.push(n),o=!0),n.parentNode);)n=n.parentNode}return[a,o]}_findFirst(i){const e=[],r=this._findNode(i,{node:this.#e});let a=!1;return r&&(e.push(r),a=!0),[e,a]}_findFromHTMLCollection(i,e={}){const{complex:r,compound:a,filterLeaves:s,targetType:o}=e;let n=[],h=!1,f=!1;const t=i.length;if(t)if(this.#e.nodeType===u.ELEMENT_NODE)for(let l=0;l<t;l++){const c=i[l];if(c!==this.#e&&(this.#e.contains(c)||c.contains(this.#e))){if(a){if(this._matchLeaves(s,c,{warn:this.#i})&&(n.push(c),h=!0,o===E))break}else if(n.push(c),h=!0,o===E)break}}else if(r)if(a)for(let l=0;l<t;l++){const c=i[l];if(this._matchLeaves(s,c,{warn:this.#i})&&(n.push(c),h=!0,o===E))break}else n=[].slice.call(i),h=!0,f=!0;else if(a)for(let l=0;l<t;l++){const c=i[l];if(this._matchLeaves(s,c,{warn:this.#i})&&(n.push(c),h=!0,o===E))break}else n=[].slice.call(i),h=!0,f=!0;return[n,h,f]}_findEntryNodes(i,e,r){const{leaves:a}=i,[s,...o]=a,n=o.length>0,{type:h}=s,f=(0,y.unescapeSelector)(s.name);s.name=f;let t=[],l=!1,c=!1,m=!1;switch(h){case u.SELECTOR_PSEUDO_ELEMENT:{(0,M.matchPseudoElementSelector)(f,{warn:this.#i});break}case u.SELECTOR_ID:{if(e===D)[t,c]=this._matchSelf(a);else if(e===R)[t,c]=this._findLineal(a,{complex:r});else if(e===E&&this.#s.nodeType!==u.ELEMENT_NODE){const p=this.#s.getElementById(f);p&&(n?this._matchLeaves(o,p,{warn:this.#i})&&(t.push(p),c=!0):(t.push(p),c=!0))}else e===E?[t,c]=this._findFirst(a):m=!0;break}case u.SELECTOR_CLASS:{if(e===D)[t,c]=this._matchSelf(a);else if(e===R)[t,c]=this._findLineal(a,{complex:r});else if(this.#s.nodeType===u.DOCUMENT_NODE){const p=this.#s.getElementsByClassName(f);p.length&&([t,c,l]=this._findFromHTMLCollection(p,{complex:r,compound:n,filterLeaves:o,targetType:e}))}else e===E?[t,c]=this._findFirst(a):m=!0;break}case u.SELECTOR_TYPE:{if(e===D)[t,c]=this._matchSelf(a);else if(e===R)[t,c]=this._findLineal(a,{complex:r});else if(this.#t.contentType==="text/html"&&this.#s.nodeType===u.DOCUMENT_NODE&&!/[*|]/.test(f)){const p=this.#s.getElementsByTagName(f);p.length&&([t,c,l]=this._findFromHTMLCollection(p,{complex:r,compound:n,filterLeaves:o,targetType:e}))}else e===E?[t,c]=this._findFirst(a):m=!0;break}default:if(e!==R&&u.REG_SHADOW_HOST.test(f)){if(this.#d&&this.#e.nodeType===u.DOCUMENT_FRAGMENT_NODE){const p=this._matchShadowHostPseudoClass(s,this.#e);p&&(t.push(p),c=!0)}}else e===D?[t,c]=this._matchSelf(a):e===R?[t,c]=this._findLineal(a,{complex:r}):e===E?[t,c]=this._findFirst(a):m=!0}return{collected:l,compound:n,filtered:c,nodes:t,pending:m}}_getEntryTwig(i,e){const r=i.length,a=r>1,s=i[0];let o,n;if(a){const{combo:h,leaves:[{name:f,type:t}]}=s,l=i[r-1],{leaves:[{name:c,type:m}]}=l;if(m===u.SELECTOR_PSEUDO_ELEMENT||m===u.SELECTOR_ID)o=O,n=l;else if(t===u.SELECTOR_PSEUDO_ELEMENT||t===u.SELECTOR_ID)o=C,n=s;else if(e===$)if(f==="*"&&t===u.SELECTOR_TYPE)o=O,n=l;else if(c==="*"&&m===u.SELECTOR_TYPE)o=C,n=s;else if(r===2){const{name:p}=h;/^[+~]$/.test(p)?(o=O,n=l):(o=C,n=s)}else o=C,n=s;else if(c==="*"&&m===u.SELECTOR_TYPE)o=C,n=s;else if(f==="*"&&t===u.SELECTOR_TYPE)o=O,n=l;else{let p;for(const{combo:b,leaves:[_]}of i){const{type:N}=_,k=(0,y.unescapeSelector)(_.name);if(_.name=k,N===u.SELECTOR_PSEUDO_CLASS&&k==="dir"){p=!1;break}if(!p&&b){const{name:d}=b;/^[+~]$/.test(d)&&(p=!0)}}p?(o=C,n=s):(o=O,n=l)}}else o=O,n=s;return{complex:a,dir:o,twig:n}}_collectNodes(i){const e=this.#a.values();if(i===$||i===E){const r=new Set;let a=0;for(const{branch:s}of e){const{complex:o,dir:n,twig:h}=this._getEntryTwig(s,i),{collected:f,compound:t,filtered:l,nodes:c,pending:m}=this._findEntryNodes(h,i,o);c.length?(this.#a[a].find=!0,this.#h[a]=c):m&&r.add(new Map([["index",a],["twig",h]])),this.#a[a].collected=f,this.#a[a].dir=n,this.#a[a].filtered=l||!t,a++}if(r.size){let s,o;this.#e!==this.#s&&this.#e.nodeType===u.ELEMENT_NODE?(s=this.#e,o=this.#n):(s=this.#s,o=this.#r);let n=this._traverse(s,o);for(;n;){let h=!1;if(this.#e.nodeType===u.ELEMENT_NODE?n===this.#e?h=!0:h=this.#e.contains(n):h=!0,h)for(const f of r){const{leaves:t}=f.get("twig");if(this._matchLeaves(t,n,{warn:this.#i})){const c=f.get("index");this.#a[c].filtered=!0,this.#a[c].find=!0,this.#h[c].push(n)}}n!==o.currentNode&&(n=this._traverse(n,o)),n=o.nextNode()}}}else{let r=0;for(const{branch:a}of e){const s=a[a.length-1],o=a.length>1,{compound:n,filtered:h,nodes:f}=this._findEntryNodes(s,i,o);f.length&&(this.#a[r].find=!0,this.#h[r]=f),this.#a[r].dir=O,this.#a[r].filtered=h||!n,r++}}return[this.#a,this.#h]}_getCombinedNodes(i,e,r){const a=[];for(const s of e){const o=this._matchCombinator(i,s,{dir:r,warn:this.#i});o.size&&a.push(...o)}return a.length?new Set(a):new Set}_matchNodeNext(i,e,r){const{combo:a,index:s}=r,{combo:o,leaves:n}=i[s],h={combo:a,leaves:n},f=this._getCombinedNodes(h,e,C);let t;if(f.size)if(s===i.length-1){const[l]=(0,L.sortNodes)(f);t=l}else t=this._matchNodeNext(i,f,{combo:o,index:s+1});return t??null}_matchNodePrev(i,e,r){const{index:a}=r,s=i[a],o=new Set([e]),n=this._getCombinedNodes(s,o,O);let h;if(n.size){if(a===0)h=e;else for(const f of n)if(this._matchNodePrev(i,f,{index:a-1}))return e}return h??null}_matchNodes(i){const[[...e],r]=this._collectNodes(i),a=e.length;let s=new Set;for(let o=0;o<a;o++){const{branch:n,collected:h,dir:f,find:t}=e[o],l=n.length;if(l&&t){const c=r[o],m=c.length,p=l-1;if(p===0)if((i===$||i===E)&&this.#e.nodeType===u.ELEMENT_NODE)for(let b=0;b<m;b++){const _=c[b];if(_!==this.#e&&this.#e.contains(_)&&(s.add(_),i!==$))break}else if(i===$)if(s.size){const b=[...s];s=new Set([...b,...c]),this.#u=!0}else s=new Set(c);else{const[b]=c;s.add(b)}else if(i===$)if(f===C){let{combo:b}=n[0];for(const _ of c){let N=new Set([_]);for(let k=1;k<l;k++){const{combo:d,leaves:w}=n[k],g={combo:b,leaves:w};if(N=this._getCombinedNodes(g,N,f),N.size)if(k===p)if(s.size){const x=[...s];s=new Set([...x,...N]),this.#u=!0}else s=N;else b=d;else break}}}else for(const b of c){let _=new Set([b]);for(let N=p-1;N>=0;N--){const k=n[N];if(_=this._getCombinedNodes(k,_,f),_.size)N===0&&(s.add(b),l>1&&s.size>1&&(this.#u=!0));else break}}else if(i===E&&f===C){const{combo:b}=n[0];let _;for(const N of c)if(_=this._matchNodeNext(n,new Set([N]),{combo:b,index:1}),_){s.add(_);break}if(!_&&!h){const{leaves:N}=n[0],[k]=c;let d=this._findNode(N,{node:k});for(;d;){if(_=this._matchNodeNext(n,new Set([d]),{combo:b,index:1}),_){s.add(_);break}d=this._findNode(N,{node:d})}}}else{let b;for(const _ of c)if(b=this._matchNodePrev(n,_,{index:p-1}),b){s.add(_);break}if(!b&&!h&&i===E){const{leaves:_}=n[p],[N]=c;let k=this._findNode(_,{node:N});for(;k;){if(b=this._matchNodePrev(n,k,{index:p-1}),b){s.add(k);break}k=this._findNode(_,{node:k})}}}}}return s}_find(i){return(i===$||i===E)&&this._prepareQuerySelectorWalker(),this._matchNodes(i)}matches(i,e,r){let a;try{if(e?.nodeType!==u.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}(0,y.filterSelector)(i)?a=this.#c.match(i,e):(this._setup(i,e,r),a=this._find(D).size)}catch(s){this._onError(s)}return!!a}closest(i,e,r){let a;try{if(e?.nodeType!==u.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}if((0,y.filterSelector)(i))a=this.#c.closest(i,e);else{this._setup(i,e,r);const s=this._find(R);if(s.size){let o=this.#e;for(;o;){if(s.has(o)){a=o;break}o=o.parentNode}}}}catch(s){this._onError(s)}return a??null}querySelector(i,e,r){let a;try{if(this._setup(i,e,r),this.#f===this.#t&&!this.#o&&(0,y.filterSelector)(i))a=this.#c.first(i,e);else{const s=this._find(E);s.delete(this.#e),s.size&&([a]=(0,L.sortNodes)(s))}}catch(s){this._onError(s)}return a??null}querySelectorAll(i,e,r){let a;try{if(this._setup(i,e,r),this.#f===this.#t&&!this.#o&&(0,y.filterSelector)(i))a=this.#c.select(i,e);else{const s=this._find($);s.delete(this.#e),s.size&&(this.#u?a=(0,L.sortNodes)(s):a=[...s])}}catch(s){this._onError(s)}return a??[]}}0&&(module.exports={Finder});
+var W=Object.create;var P=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var q=(E,i)=>{for(var e in i)P(E,e,{get:i[e],enumerable:!0})},U=(E,i,e,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of B(i))!G.call(E,a)&&a!==e&&P(E,a,{get:()=>i[a],enumerable:!(r=H(i,a))||r.enumerable});return E};var z=(E,i,e)=>(e=E!=null?W(j(E)):{},U(i||!E||!E.__esModule?P(e,"default",{value:E,enumerable:!0}):e,E)),V=E=>U(P({},"__esModule",{value:!0}),E);var Y={};q(Y,{Finder:()=>X});module.exports=V(Y);var I=z(require("is-potential-custom-element-name"),1),F=z(require("nwsapi"),1),L=require("./dom-util.js"),M=require("./matcher.js"),y=require("./parser.js"),u=require("./constant.js");const C="next",O="prev",$="all",A="first",R="lineal",D="self";class X{#a;#l;#t;#o;#f;#e;#h;#w;#c;#n;#m;#s;#d;#u;#r;#b;#i;#p;constructor(i){this.#p=i,this.#f=i.document,this.#l=new WeakMap,this.#m=new WeakMap,this.#c=(0,F.default)({document:i.document,DOMException:i.DOMException}),this.#c.configure({LOGERRORS:!1})}_onError(i){if(!this.#w)if(i instanceof DOMException||i instanceof this.#p.DOMException)if(i.name===u.NOT_SUPPORTED_ERR)this.#i&&console.warn(i.message);else throw new this.#p.DOMException(i.message,i.name);else throw i}_setup(i,e,r={}){const{noexcept:a,warn:s}=r;return this.#w=!!a,this.#i=!!s,this.#e=e,[this.#t,this.#s,this.#r]=(0,L.resolveContent)(e),this.#d=(0,L.isInShadowTree)(e),[this.#a,this.#h]=this._correspond(i),this.#b=new WeakMap,e}_correspond(i){const e=[];this.#o=!1;let r;if(this.#t){const a=this.#l.get(this.#t);if(a&&a.has(`${i}`)){const s=a.get(`${i}`);this.#o=s.descendant,r=s.ast}}if(r){const a=r.length;for(let s=0;s<a;s++)r[s].collected=!1,r[s].dir=null,r[s].filtered=!1,r[s].find=!1,e[s]=[]}else{let a;try{a=(0,y.parseSelector)(i)}catch(h){this._onError(h)}const s=(0,y.walkAST)(a);let o=!1,n=0;r=[];for(const[...h]of s){const f=[];let t=h.shift();if(t&&t.type!==u.COMBINATOR){const l=new Set;for(;t;){if(t.type===u.COMBINATOR){const[c]=h;if(c.type===u.COMBINATOR){const p=`Invalid selector ${i}`;throw new DOMException(p,u.SYNTAX_ERR)}const m=t.name;/^[\s>]$/.test(m)&&(o=!0),f.push({combo:t,leaves:(0,y.sortAST)(l)}),l.clear()}else if(t){let{name:c}=t;c&&typeof c=="string"&&(c=(0,y.unescapeSelector)(c),t.name=c,/[|:]/.test(c)&&(t.namespace=!0)),l.add(t)}if(h.length)t=h.shift();else{f.push({combo:null,leaves:(0,y.sortAST)(l)}),l.clear();break}}}r.push({branch:f,collected:!1,dir:null,filtered:!1,find:!1}),e[n]=[],n++}if(this.#t){let h;this.#l.has(this.#t)?h=this.#l.get(this.#t):h=new Map,h.set(`${i}`,{ast:r,descendant:o}),this.#l.set(this.#t,h)}this.#o=o}return[r,e]}_createTreeWalker(i){let e;return this.#b.has(i)?e=this.#b.get(i):(e=this.#f.createTreeWalker(i,u.WALKER_FILTER),this.#b.set(i,e)),e}_prepareQuerySelectorWalker(){return this.#n=this._createTreeWalker(this.#e),this.#u=!1,this.#n}_traverse(i,e=this.#r){let r=e.currentNode,a;if(r===i)a=r;else if(r.contains(i))for(r=e.nextNode();r;){if(r===i){a=r;break}r=e.nextNode()}else{if(r!==e.root)for(;r&&!(r===e.root||r===i);)r=e.parentNode();if(i?.nodeType===u.ELEMENT_NODE)for(;r;){if(r===i){a=r;break}r=e.nextNode()}else a=r}return a??null}_collectNthChild(i,e,r){const{a,b:s,reverse:o,selector:n}=i,{parentNode:h}=e,f=new Set;let t;if(n&&(this.#l.has(n)?t=this.#l.get(n):(t=(0,y.walkAST)(n),this.#l.set(n,t))),h){const l=this.#r;let c=this._traverse(h,l);c=l.firstChild();let m=0;for(;c;)m++,c=l.nextSibling();c=this._traverse(h,l);const p=new Set;if(t)for(c=l.firstChild();c;){let b;for(const _ of t)if(b=this._matchLeaves(_,c,r),!b)break;b&&p.add(c),c=l.nextSibling()}if(a===0){if(s>0&&s<=m){if(p.size){c=this._traverse(h,l),o?c=l.lastChild():c=l.firstChild();let b=0;for(;c;){if(p.has(c)){if(b===s-1){f.add(c);break}b++}o?c=l.previousSibling():c=l.nextSibling()}}else if(!n){c=this._traverse(h,l),o?c=l.lastChild():c=l.firstChild();let b=0;for(;c;){if(b===s-1){f.add(c);break}o?c=l.previousSibling():c=l.nextSibling(),b++}}}}else{let b=s-1;if(a>0)for(;b<0;)b+=a;if(b>=0&&b<m){c=this._traverse(h,l),o?c=l.lastChild():c=l.firstChild();let _=0,N=a>0?0:s-1;for(;c&&(c&&b>=0&&b<m);)p.size?p.has(c)&&(N===b&&(f.add(c),b+=a),a>0?N++:N--):_===b&&(n||f.add(c),b+=a),o?c=l.previousSibling():c=l.nextSibling(),_++}}if(o&&f.size>1){const b=[...f];return new Set(b.reverse())}}else if(e===this.#s&&a+s===1)if(t){let l;for(const c of t)if(l=this._matchLeaves(c,e,r),l)break;l&&f.add(e)}else f.add(e);return f}_collectNthOfType(i,e){const{a:r,b:a,reverse:s}=i,{localName:o,parentNode:n,prefix:h}=e,f=new Set;if(n){const t=this.#r;let l=this._traverse(n,t);l=t.firstChild();let c=0;for(;l;)c++,l=t.nextSibling();if(r===0){if(a>0&&a<=c){l=this._traverse(n,t),s?l=t.lastChild():l=t.firstChild();let m=0;for(;l;){const{localName:p,prefix:b}=l;if(p===o&&b===h){if(m===a-1){f.add(l);break}m++}s?l=t.previousSibling():l=t.nextSibling()}}}else{let m=a-1;if(r>0)for(;m<0;)m+=r;if(m>=0&&m<c){l=this._traverse(n,t),s?l=t.lastChild():l=t.firstChild();let p=r>0?0:a-1;for(;l;){const{localName:b,prefix:_}=l;if(b===o&&_===h){if(p===m&&(f.add(l),m+=r),m<0||m>=c)break;r>0?p++:p--}s?l=t.previousSibling():l=t.nextSibling()}}}if(s&&f.size>1){const m=[...f];return new Set(m.reverse())}}else e===this.#s&&r+a===1&&f.add(e);return f}_matchAnPlusB(i,e,r,a){const{nth:{a:s,b:o,name:n},selector:h}=i,f=new Map;if(n?(n==="even"?(f.set("a",2),f.set("b",0)):n==="odd"&&(f.set("a",2),f.set("b",1)),r.indexOf("last")>-1&&f.set("reverse",!0)):(typeof s=="string"&&/-?\d+/.test(s)?f.set("a",s*1):f.set("a",0),typeof o=="string"&&/-?\d+/.test(o)?f.set("b",o*1):f.set("b",0),r.indexOf("last")>-1&&f.set("reverse",!0)),/^nth-(?:last-)?child$/.test(r)){h&&f.set("selector",h);const t=Object.fromEntries(f);return this._collectNthChild(t,e,a)}else if(/^nth-(?:last-)?of-type$/.test(r)){const t=Object.fromEntries(f);return this._collectNthOfType(t,e)}return new Set}_matchDirectionPseudoClass(i,e){const r=(0,L.getDirectionality)(e);let a;return i.name===r&&(a=e),a??null}_matchLanguagePseudoClass(i,e){if(i.name===u.EMPTY)return null;const r=(0,y.unescapeSelector)(i.name);i.name=r;let a;if(r==="*")if(e.hasAttribute("lang"))e.getAttribute("lang")&&(a=e);else{let s=e.parentNode;for(;s&&s.nodeType===u.ELEMENT_NODE;){if(s.hasAttribute("lang")){s.getAttribute("lang")&&(a=e);break}s=s.parentNode}}else if(r){const s=`(?:-${u.ALPHA_NUM})*`;if(new RegExp(`^(?:\\*-)?${u.ALPHA_NUM}${s}$`,"i").test(r)){let n;if(r.indexOf("-")>-1){const[h,f,...t]=r.split("-");let l;h==="*"?l=`${u.ALPHA_NUM}${s}`:l=`${h}${s}`;const c=`-${f}${s}`,m=t.length;let p="";if(m)for(let b=0;b<m;b++)p+=`-${t[b]}${s}`;n=new RegExp(`^${l}${c}${p}$`,"i")}else n=new RegExp(`^${r}${s}$`,"i");if(e.hasAttribute("lang"))n.test(e.getAttribute("lang"))&&(a=e);else{let h=e.parentNode;for(;h&&h.nodeType===u.ELEMENT_NODE;){if(h.hasAttribute("lang")){const f=h.getAttribute("lang");n.test(f)&&(a=e);break}h=h.parentNode}}}}return a??null}_matchHasPseudoFunc(i,e,r={}){let a;if(Array.isArray(i)&&i.length){const[s]=i,{type:o}=s;let n;o===u.COMBINATOR?n=i.shift():n={name:" ",type:u.COMBINATOR};const h=[];for(;i.length;){const[l]=i,{type:c}=l;if(c===u.COMBINATOR)break;h.push(i.shift())}const f={combo:n,leaves:h};r.dir=C;const t=this._matchCombinator(f,e,r);if(t.size)if(i.length){for(const l of t)if(a=this._matchHasPseudoFunc(Object.assign([],i),l,r),a)break}else a=!0}return!!a}_matchLogicalPseudoFunc(i,e,r={}){const{astName:a="",branches:s=[],selector:o="",twigBranches:n=[]}=i;let h;if(a==="has")if(o.includes(":has("))h=null;else{let f;for(const t of s)if(f=this._matchHasPseudoFunc(Object.assign([],t),e,r),f)break;f&&(h=e)}else{const f=/^(?:is|where)$/.test(a);r.forgive=f;const t=n.length;let l;for(let c=0;c<t;c++){const m=n[c],p=m.length-1,{leaves:b}=m[p];if(l=this._matchLeaves(b,e,r),l&&p>0){let _=new Set([e]);for(let N=p-1;N>=0;N--){const k=m[N],d=[];r.dir=O;for(const w of _){const g=this._matchCombinator(k,w,r);g.size&&d.push(...g)}if(d.length)N===0?l=!0:_=new Set(d);else{l=!1;break}}}if(l)break}a==="not"?l||(h=e):l&&(h=e)}return h??null}_matchPseudoClassSelector(i,e,r={}){const{children:a,name:s}=i,{localName:o,parentNode:n}=e,{forgive:h,warn:f=this.#i}=r,t=new Set;if(u.REG_LOGICAL_PSEUDO.test(s)){let l;if(this.#l.has(i))l=this.#l.get(i);else{const m=(0,y.walkAST)(i),p=[],b=[];for(const[..._]of m){for(const w of _){const g=(0,y.generateCSS)(w);p.push(g)}const N=[],k=new Set;let d=_.shift();for(;d;)if(d.type===u.COMBINATOR?(N.push({combo:d,leaves:[...k]}),k.clear()):d&&k.add(d),_.length)d=_.shift();else{N.push({combo:null,leaves:[...k]}),k.clear();break}b.push(N)}l={astName:s,branches:m,twigBranches:b,selector:p.join(",")},this.#l.set(i,l)}const c=this._matchLogicalPseudoFunc(l,e,r);c&&t.add(c)}else if(Array.isArray(a)){const[l]=a;if(/^nth-(?:last-)?(?:child|of-type)$/.test(s))return this._matchAnPlusB(l,e,s,r);if(s==="dir"){const c=this._matchDirectionPseudoClass(l,e);c&&t.add(c)}else if(s==="lang"){const c=this._matchLanguagePseudoClass(l,e);c&&t.add(c)}else switch(s){case"current":case"nth-col":case"nth-last-col":{if(f){const c=`Unsupported pseudo-class :${s}()`;throw new DOMException(c,u.NOT_SUPPORTED_ERR)}break}case"host":case"host-context":break;default:if(!h){const c=`Unknown pseudo-class :${s}()`;throw new DOMException(c,u.SYNTAX_ERR)}}}else{const l=/^a(?:rea)?$/,c=/^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/,m=/^(?:(?:inpu|selec)t|button|form|textarea)$/,p=/^d(?:etails|ialog)$/,b=/^(?:checkbox|radio)$/,_=/^(?:date(?:time-local)?|month|time|week)$/,N=/(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/,k=/^(?:(?:emai|te|ur)l|number|password|search|text)$/;switch(s){case"any-link":case"link":{l.test(o)&&e.hasAttribute("href")&&t.add(e);break}case"local-link":{if(l.test(o)&&e.hasAttribute("href")){const{href:d,origin:w,pathname:g}=new URL(this.#t.URL),x=new URL(e.getAttribute("href"),d);x.origin===w&&x.pathname===g&&t.add(e)}break}case"visited":break;case"target":{const{hash:d}=new URL(this.#t.URL);e.id&&d===`#${e.id}`&&this.#t.contains(e)&&t.add(e);break}case"target-within":{const{hash:d}=new URL(this.#t.URL);if(d){const w=d.replace(/^#/,"");let g=this.#t.getElementById(w);for(;g;){if(g===e){t.add(e);break}g=g.parentNode}}break}case"scope":{this.#e.nodeType===u.ELEMENT_NODE?!this.#d&&e===this.#e&&t.add(e):e===this.#t.documentElement&&t.add(e);break}case"focus":{if(e===this.#t.activeElement){let d=e,w=!0;for(;d;){if(d.hasAttribute("hidden")){w=!1;break}else if(d.hasAttribute("style")){const{display:g,visibility:x}=d.style;if(w=!(g==="none"||x==="hidden"),!w)break}if(d.parentNode&&d.parentNode.nodeType===u.ELEMENT_NODE)d=d.parentNode;else break}w&&t.add(e)}break}case"focus-within":{let d=this.#t.activeElement,w;for(;d;){if(d===e){w=!0;break}d=d.parentNode}if(w){let g=e,x=!0;for(;g;){if(g.hasAttribute("hidden")){x=!1;break}else if(g.hasAttribute("style")){const{display:v,visibility:T}=g.style;if(x=!(v==="none"||T==="hidden"),!x)break}if(g.parentNode&&g.parentNode.nodeType===u.ELEMENT_NODE)g=g.parentNode;else break}x&&t.add(e)}break}case"open":{p.test(o)&&e.hasAttribute("open")&&t.add(e);break}case"closed":{p.test(o)&&!e.hasAttribute("open")&&t.add(e);break}case"disabled":{if(c.test(o)||(0,I.default)(o))if(e.disabled||e.hasAttribute("disabled"))t.add(e);else{let d=n;for(;d&&d.localName!=="fieldset";)d=d.parentNode;d&&n.localName!=="legend"&&d.hasAttribute("disabled")&&t.add(e)}break}case"enabled":{(c.test(o)||(0,I.default)(o))&&!(e.disabled&&e.hasAttribute("disabled"))&&t.add(e);break}case"read-only":{switch(o){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}case"input":{(!e.type||_.test(e.type)||k.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,L.isContentEditable)(e)||t.add(e)}break}case"read-write":{switch(o){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||t.add(e);break}case"input":{(!e.type||_.test(e.type)||k.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,L.isContentEditable)(e)&&t.add(e)}break}case"placeholder-shown":{let d;o==="textarea"?d=e:o==="input"&&(e.hasAttribute("type")?k.test(e.getAttribute("type"))&&(d=e):d=e),d&&e.value===""&&e.hasAttribute("placeholder")&&e.getAttribute("placeholder").trim().length&&t.add(e);break}case"checked":{(e.checked&&o==="input"&&e.hasAttribute("type")&&b.test(e.getAttribute("type"))||e.selected&&o==="option")&&t.add(e);break}case"indeterminate":{if(e.indeterminate&&o==="input"&&e.type==="checkbox"||o==="progress"&&!e.hasAttribute("value"))t.add(e);else if(o==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const d=e.name;let w=e.parentNode;for(;w&&w.localName!=="form";)w=w.parentNode;w||(w=this.#t.documentElement);const g=w.getElementsByTagName("input"),x=g.length;let v;for(let T=0;T<x;T++){const S=g[T];if(S.getAttribute("type")==="radio"&&(d?S.getAttribute("name")===d&&(v=!!S.checked):S.hasAttribute("name")||(v=!!S.checked),v))break}v||t.add(e)}break}case"default":{const d=/^(?:button|reset)$/,w=/^(?:image|submit)$/;if(o==="button"&&!(e.hasAttribute("type")&&d.test(e.getAttribute("type")))||o==="input"&&e.hasAttribute("type")&&w.test(e.getAttribute("type"))){let g=e.parentNode;for(;g&&g.localName!=="form";)g=g.parentNode;if(g){const x=this.#r;let v=this._traverse(g,x);for(v=x.firstChild();v&&g.contains(v);){const T=v.localName;let S;if(T==="button"?S=!(v.hasAttribute("type")&&d.test(v.getAttribute("type"))):T==="input"&&(S=v.hasAttribute("type")&&w.test(v.getAttribute("type"))),S){v===e&&t.add(e);break}v=x.nextNode()}}}else if(o==="input"&&e.hasAttribute("type")&&b.test(e.getAttribute("type"))&&(e.checked||e.hasAttribute("checked")))t.add(e);else if(o==="option"){let g=n,x=!1;for(;g&&g.localName!=="datalist";){if(g.localName==="select"){(g.multiple||g.hasAttribute("multiple"))&&(x=!0);break}g=g.parentNode}if(x)(e.selected||e.hasAttribute("selected"))&&t.add(e);else{const v=new Set,T=this.#r;let S=this._traverse(n,T);for(S=T.firstChild();S;){if(S.selected||S.hasAttribute("selected")){v.add(S);break}S=T.nextSibling()}v.size&&v.has(e)&&t.add(e)}}break}case"valid":{if(m.test(o))e.checkValidity()&&t.add(e);else if(o==="fieldset"){const d=this.#r;let w=this._traverse(e,d);w=d.firstChild();let g;for(;w&&e.contains(w)&&!(m.test(w.localName)&&(g=w.checkValidity(),!g));)w=d.nextNode();g&&t.add(e)}break}case"invalid":{if(m.test(o))e.checkValidity()||t.add(e);else if(o==="fieldset"){const d=this.#r;let w=this._traverse(e,d);w=d.firstChild();let g;for(;w&&e.contains(w)&&!(m.test(w.localName)&&(g=w.checkValidity(),!g));)w=d.nextNode();g||t.add(e)}break}case"in-range":{o==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&N.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":{o==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&N.test(e.getAttribute("type"))&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&t.add(e);break}case"required":{let d;if(/^(?:select|textarea)$/.test(o))d=e;else if(o==="input")if(e.hasAttribute("type")){const w=e.getAttribute("type");(w==="file"||b.test(w)||_.test(w)||k.test(w))&&(d=e)}else d=e;d&&(e.required||e.hasAttribute("required"))&&t.add(e);break}case"optional":{let d;if(/^(?:select|textarea)$/.test(o))d=e;else if(o==="input")if(e.hasAttribute("type")){const w=e.getAttribute("type");(w==="file"||b.test(w)||_.test(w)||k.test(w))&&(d=e)}else d=e;d&&!(e.required||e.hasAttribute("required"))&&t.add(e);break}case"root":{e===this.#t.documentElement&&t.add(e);break}case"empty":{if(e.hasChildNodes()){const d=this.#f.createTreeWalker(e,u.SHOW_ALL);let w=d.firstChild(),g;for(;w&&(g=w.nodeType!==u.ELEMENT_NODE&&w.nodeType!==u.TEXT_NODE,!!g);)w=d.nextSibling();g&&t.add(e)}else t.add(e);break}case"first-child":{(n&&e===n.firstElementChild||e===this.#s)&&t.add(e);break}case"last-child":{(n&&e===n.lastElementChild||e===this.#s)&&t.add(e);break}case"only-child":{(n&&e===n.firstElementChild&&e===n.lastElementChild||e===this.#s)&&t.add(e);break}case"first-of-type":{if(n){const[d]=this._collectNthOfType({a:0,b:1},e);d&&t.add(d)}else e===this.#s&&t.add(e);break}case"last-of-type":{if(n){const[d]=this._collectNthOfType({a:0,b:1,reverse:!0},e);d&&t.add(d)}else e===this.#s&&t.add(e);break}case"only-of-type":{if(n){const[d]=this._collectNthOfType({a:0,b:1},e);if(d===e){const[w]=this._collectNthOfType({a:0,b:1,reverse:!0},e);w===e&&t.add(e)}}else e===this.#s&&t.add(e);break}case"host":case"host-context":break;case"after":case"before":case"first-letter":case"first-line":{if(f){const d=`Unsupported pseudo-element ::${s}`;throw new DOMException(d,u.NOT_SUPPORTED_ERR)}break}case"active":case"autofill":case"blank":case"buffering":case"current":case"defined":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(f){const d=`Unsupported pseudo-class :${s}`;throw new DOMException(d,u.NOT_SUPPORTED_ERR)}break}default:if(s.startsWith("-webkit-")){if(f){const d=`Unsupported pseudo-class :${s}`;throw new DOMException(d,u.NOT_SUPPORTED_ERR)}}else if(!h){const d=`Unknown pseudo-class :${s}`;throw new DOMException(d,u.SYNTAX_ERR)}}}return t}_matchShadowHostPseudoClass(i,e){const{children:r,name:a}=i;let s;if(Array.isArray(r)){const[o]=(0,y.walkAST)(r[0]),[...n]=o,{host:h}=e;if(a==="host"){let f;for(const t of n){const{type:l}=t;if(l===u.COMBINATOR){const m=`Invalid selector ${(0,y.generateCSS)(i)}`;throw new DOMException(m,u.SYNTAX_ERR)}if(f=this._matchSelector(t,h).has(h),!f)break}f&&(s=e)}else if(a==="host-context"){let f=h,t;for(;f;){for(const l of n){const{type:c}=l;if(c===u.COMBINATOR){const p=`Invalid selector ${(0,y.generateCSS)(i)}`;throw new DOMException(p,u.SYNTAX_ERR)}if(t=this._matchSelector(l,f).has(f),!t)break}if(t)break;f=f.parentNode}t&&(s=e)}}else if(a==="host")s=e;else{const o=`Invalid selector :${a}`;throw new DOMException(o,u.SYNTAX_ERR)}return s??null}_matchSelector(i,e,r){const{type:a}=i,s=new Set;if(i.name===u.EMPTY)return s;const o=(0,y.unescapeSelector)(i.name);if(i.name=o,e.nodeType===u.ELEMENT_NODE)switch(a){case u.SELECTOR_PSEUDO_ELEMENT:{(0,M.matchPseudoElementSelector)(o,r);break}case u.SELECTOR_ID:{e.id===o&&s.add(e);break}case u.SELECTOR_CLASS:{e.classList.contains(o)&&s.add(e);break}case u.SELECTOR_PSEUDO_CLASS:return this._matchPseudoClassSelector(i,e,r);default:{const n=(0,M.matchSelector)(i,e,r);n&&s.add(n)}}else if(this.#d&&a===u.SELECTOR_PSEUDO_CLASS&&e.nodeType===u.DOCUMENT_FRAGMENT_NODE){if(o!=="has"&&u.REG_LOGICAL_PSEUDO.test(o))return this._matchPseudoClassSelector(i,e,r);if(u.REG_SHADOW_HOST.test(o)){const n=this._matchShadowHostPseudoClass(i,e,r);n&&s.add(n)}}return s}_matchLeaves(i,e,r){const{attributes:a,localName:s,nodeType:o}=e;let n=this.#m.get(i),h;if(n&&n.has(e)){const{attr:f,matched:t}=n.get(e);a?.length===f&&(h=t)}if(typeof h!="boolean"){const f=/^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;let t;o===u.ELEMENT_NODE&&f.test(s)?t=!1:t=!0;for(const l of i){const{name:c,type:m}=l,p=(0,y.unescapeSelector)(c);if(l.name=p,m===u.SELECTOR_PSEUDO_CLASS&&p==="dir"&&(t=!1),h=this._matchSelector(l,e,r).has(e),!h)break}t&&(n||(n=new WeakMap),n.set(e,{attr:a?.length,matched:h}),this.#m.set(i,n))}return!!h}_matchHTMLCollection(i,e={}){const{compound:r,filterLeaves:a}=e,s=new Set,o=i.length;if(o)if(r)for(let n=0;n<o;n++){const h=i[n];this._matchLeaves(a,h,e)&&s.add(h)}else{const n=[].slice.call(i);return new Set(n)}return s}_findDescendantNodes(i,e,r){const[a,...s]=i,o=s.length>0,{type:n}=a,h=(0,y.unescapeSelector)(a.name);a.name=h;let f=new Set,t=!1;if(this.#d)t=!0;else switch(n){case u.SELECTOR_PSEUDO_ELEMENT:{(0,M.matchPseudoElementSelector)(h,r);break}case u.SELECTOR_ID:{if(this.#s.nodeType===u.ELEMENT_NODE)t=!0;else{const l=this.#s.getElementById(h);l&&l!==e&&e.contains(l)&&(o?this._matchLeaves(s,l,r)&&f.add(l):f.add(l))}break}case u.SELECTOR_CLASS:{const l=e.getElementsByClassName(h);f=this._matchHTMLCollection(l,{compound:o,filterLeaves:s});break}case u.SELECTOR_TYPE:{if(this.#t.contentType==="text/html"&&!/[*|]/.test(h)){const l=e.getElementsByTagName(h);f=this._matchHTMLCollection(l,{compound:o,filterLeaves:s})}else t=!0;break}default:t=!0}return{nodes:f,pending:t}}_matchCombinator(i,e,r={}){const{combo:a,leaves:s}=i,{name:o}=a,{parentNode:n}=e,{dir:h}=r,f=new Set;if(h===C)switch(o){case"+":{const t=e.nextElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(n){const t=this._createTreeWalker(n);let l=this._traverse(e,t);for(l=t.nextSibling();l;)this._matchLeaves(s,l,r)&&f.add(l),l=t.nextSibling()}break}case">":{const t=this._createTreeWalker(e);let l=this._traverse(e,t);for(l=t.firstChild();l;)this._matchLeaves(s,l,r)&&f.add(l),l=t.nextSibling();break}case" ":default:{const{nodes:t,pending:l}=this._findDescendantNodes(s,e);if(t.size)return t;if(l){const c=this._createTreeWalker(e);let m=this._traverse(e,c);for(m=c.nextNode();m&&e.contains(m);)this._matchLeaves(s,m,r)&&f.add(m),m=c.nextNode()}}}else switch(o){case"+":{const t=e.previousElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(n){const t=this._createTreeWalker(n);let l=this._traverse(n,t);for(l=t.firstChild();l&&l!==e;)this._matchLeaves(s,l,r)&&f.add(l),l=t.nextSibling()}break}case">":{n&&this._matchLeaves(s,n,r)&&f.add(n);break}case" ":default:{const t=[];let l=n;for(;l;)this._matchLeaves(s,l,r)&&t.push(l),l=l.parentNode;if(t.length)return new Set(t.reverse())}}return f}_findNode(i,e){const{node:r}=e;let a=this._traverse(r,this.#n),s;if(a)for(a.nodeType!==u.ELEMENT_NODE?a=this.#n.nextNode():a===r&&a!==this.#s&&(a=this.#n.nextNode());a;){if(this._matchLeaves(i,a,{warn:this.#i})){s=a;break}a=this.#n.nextNode()}return s??null}_matchSelf(i){const e=[],r=this._matchLeaves(i,this.#e,{warn:this.#i});let a=!1;return r&&(e.push(this.#e),a=!0),[e,a]}_findLineal(i,e={}){const{complex:r}=e,a=[];let s=this._matchLeaves(i,this.#e,{warn:this.#i}),o=!1;if(s&&(a.push(this.#e),o=!0),!s||r){let n=this.#e.parentNode;for(;n&&(s=this._matchLeaves(i,n,{warn:this.#i}),s&&(a.push(n),o=!0),n.parentNode);)n=n.parentNode}return[a,o]}_findFirst(i){const e=[],r=this._findNode(i,{node:this.#e});let a=!1;return r&&(e.push(r),a=!0),[e,a]}_findFromHTMLCollection(i,e={}){const{complex:r,compound:a,filterLeaves:s,targetType:o}=e;let n=[],h=!1,f=!1;const t=i.length;if(t)if(this.#e.nodeType===u.ELEMENT_NODE)for(let l=0;l<t;l++){const c=i[l];if(c!==this.#e&&(this.#e.contains(c)||c.contains(this.#e))){if(a){if(this._matchLeaves(s,c,{warn:this.#i})&&(n.push(c),h=!0,o===A))break}else if(n.push(c),h=!0,o===A)break}}else if(r)if(a)for(let l=0;l<t;l++){const c=i[l];if(this._matchLeaves(s,c,{warn:this.#i})&&(n.push(c),h=!0,o===A))break}else n=[].slice.call(i),h=!0,f=!0;else if(a)for(let l=0;l<t;l++){const c=i[l];if(this._matchLeaves(s,c,{warn:this.#i})&&(n.push(c),h=!0,o===A))break}else n=[].slice.call(i),h=!0,f=!0;return[n,h,f]}_findEntryNodes(i,e,r){const{leaves:a}=i,[s,...o]=a,n=o.length>0,{type:h}=s,f=(0,y.unescapeSelector)(s.name);s.name=f;let t=[],l=!1,c=!1,m=!1;switch(h){case u.SELECTOR_PSEUDO_ELEMENT:{(0,M.matchPseudoElementSelector)(f,{warn:this.#i});break}case u.SELECTOR_ID:{if(e===D)[t,c]=this._matchSelf(a);else if(e===R)[t,c]=this._findLineal(a,{complex:r});else if(e===A&&this.#s.nodeType!==u.ELEMENT_NODE){const p=this.#s.getElementById(f);p&&(n?this._matchLeaves(o,p,{warn:this.#i})&&(t.push(p),c=!0):(t.push(p),c=!0))}else e===A?[t,c]=this._findFirst(a):m=!0;break}case u.SELECTOR_CLASS:{if(e===D)[t,c]=this._matchSelf(a);else if(e===R)[t,c]=this._findLineal(a,{complex:r});else if(this.#s.nodeType===u.DOCUMENT_NODE){const p=this.#s.getElementsByClassName(f);p.length&&([t,c,l]=this._findFromHTMLCollection(p,{complex:r,compound:n,filterLeaves:o,targetType:e}))}else e===A?[t,c]=this._findFirst(a):m=!0;break}case u.SELECTOR_TYPE:{if(e===D)[t,c]=this._matchSelf(a);else if(e===R)[t,c]=this._findLineal(a,{complex:r});else if(this.#t.contentType==="text/html"&&this.#s.nodeType===u.DOCUMENT_NODE&&!/[*|]/.test(f)){const p=this.#s.getElementsByTagName(f);p.length&&([t,c,l]=this._findFromHTMLCollection(p,{complex:r,compound:n,filterLeaves:o,targetType:e}))}else e===A?[t,c]=this._findFirst(a):m=!0;break}default:if(e!==R&&u.REG_SHADOW_HOST.test(f)){if(this.#d&&this.#e.nodeType===u.DOCUMENT_FRAGMENT_NODE){const p=this._matchShadowHostPseudoClass(s,this.#e);p&&(t.push(p),c=!0)}}else e===D?[t,c]=this._matchSelf(a):e===R?[t,c]=this._findLineal(a,{complex:r}):e===A?[t,c]=this._findFirst(a):m=!0}return{collected:l,compound:n,filtered:c,nodes:t,pending:m}}_getEntryTwig(i,e){const r=i.length,a=r>1,s=i[0];let o,n;if(a){const{combo:h,leaves:[{name:f,type:t}]}=s,l=i[r-1],{leaves:[{name:c,type:m}]}=l;if(m===u.SELECTOR_PSEUDO_ELEMENT||m===u.SELECTOR_ID)o=O,n=l;else if(t===u.SELECTOR_PSEUDO_ELEMENT||t===u.SELECTOR_ID)o=C,n=s;else if(e===$)if(f==="*"&&t===u.SELECTOR_TYPE)o=O,n=l;else if(c==="*"&&m===u.SELECTOR_TYPE)o=C,n=s;else if(r===2){const{name:p}=h;/^[+~]$/.test(p)?(o=O,n=l):(o=C,n=s)}else o=C,n=s;else if(c==="*"&&m===u.SELECTOR_TYPE)o=C,n=s;else if(f==="*"&&t===u.SELECTOR_TYPE)o=O,n=l;else{let p;for(const{combo:b,leaves:[_]}of i){const{type:N}=_,k=(0,y.unescapeSelector)(_.name);if(_.name=k,N===u.SELECTOR_PSEUDO_CLASS&&k==="dir"){p=!1;break}if(!p&&b){const{name:d}=b;/^[+~]$/.test(d)&&(p=!0)}}p?(o=C,n=s):(o=O,n=l)}}else o=O,n=s;return{complex:a,dir:o,twig:n}}_collectNodes(i){const e=this.#a.values();if(i===$||i===A){const r=new Set;let a=0;for(const{branch:s}of e){const{complex:o,dir:n,twig:h}=this._getEntryTwig(s,i),{collected:f,compound:t,filtered:l,nodes:c,pending:m}=this._findEntryNodes(h,i,o);c.length?(this.#a[a].find=!0,this.#h[a]=c):m&&r.add(new Map([["index",a],["twig",h]])),this.#a[a].collected=f,this.#a[a].dir=n,this.#a[a].filtered=l||!t,a++}if(r.size){let s,o;this.#e!==this.#s&&this.#e.nodeType===u.ELEMENT_NODE?(s=this.#e,o=this.#n):(s=this.#s,o=this.#r);let n=this._traverse(s,o);for(;n;){let h=!1;if(this.#e.nodeType===u.ELEMENT_NODE?n===this.#e?h=!0:h=this.#e.contains(n):h=!0,h)for(const f of r){const{leaves:t}=f.get("twig");if(this._matchLeaves(t,n,{warn:this.#i})){const c=f.get("index");this.#a[c].filtered=!0,this.#a[c].find=!0,this.#h[c].push(n)}}n!==o.currentNode&&(n=this._traverse(n,o)),n=o.nextNode()}}}else{let r=0;for(const{branch:a}of e){const s=a[a.length-1],o=a.length>1,{compound:n,filtered:h,nodes:f}=this._findEntryNodes(s,i,o);f.length&&(this.#a[r].find=!0,this.#h[r]=f),this.#a[r].dir=O,this.#a[r].filtered=h||!n,r++}}return[this.#a,this.#h]}_getCombinedNodes(i,e,r){const a=[];for(const s of e){const o=this._matchCombinator(i,s,{dir:r,warn:this.#i});o.size&&a.push(...o)}return a.length?new Set(a):new Set}_matchNodeNext(i,e,r){const{combo:a,index:s}=r,{combo:o,leaves:n}=i[s],h={combo:a,leaves:n},f=this._getCombinedNodes(h,e,C);let t;if(f.size)if(s===i.length-1){const[l]=(0,L.sortNodes)(f);t=l}else t=this._matchNodeNext(i,f,{combo:o,index:s+1});return t??null}_matchNodePrev(i,e,r){const{index:a}=r,s=i[a],o=new Set([e]),n=this._getCombinedNodes(s,o,O);let h;if(n.size){if(a===0)h=e;else for(const f of n)if(this._matchNodePrev(i,f,{index:a-1}))return e}return h??null}_matchNodes(i){const[[...e],r]=this._collectNodes(i),a=e.length;let s=new Set;for(let o=0;o<a;o++){const{branch:n,collected:h,dir:f,find:t}=e[o],l=n.length;if(l&&t){const c=r[o],m=c.length,p=l-1;if(p===0)if((i===$||i===A)&&this.#e.nodeType===u.ELEMENT_NODE)for(let b=0;b<m;b++){const _=c[b];if(_!==this.#e&&this.#e.contains(_)&&(s.add(_),i!==$))break}else if(i===$)if(s.size){const b=[...s];s=new Set([...b,...c]),this.#u=!0}else s=new Set(c);else{const[b]=c;s.add(b)}else if(i===$)if(f===C){let{combo:b}=n[0];for(const _ of c){let N=new Set([_]);for(let k=1;k<l;k++){const{combo:d,leaves:w}=n[k],g={combo:b,leaves:w};if(N=this._getCombinedNodes(g,N,f),N.size)if(k===p)if(s.size){const x=[...s];s=new Set([...x,...N]),this.#u=!0}else s=N;else b=d;else break}}}else for(const b of c){let _=new Set([b]);for(let N=p-1;N>=0;N--){const k=n[N];if(_=this._getCombinedNodes(k,_,f),_.size)N===0&&(s.add(b),l>1&&s.size>1&&(this.#u=!0));else break}}else if(i===A&&f===C){const{combo:b}=n[0];let _;for(const N of c)if(_=this._matchNodeNext(n,new Set([N]),{combo:b,index:1}),_){s.add(_);break}if(!_&&!h){const{leaves:N}=n[0],[k]=c;let d=this._findNode(N,{node:k});for(;d;){if(_=this._matchNodeNext(n,new Set([d]),{combo:b,index:1}),_){s.add(_);break}d=this._findNode(N,{node:d})}}}else{let b;for(const _ of c)if(b=this._matchNodePrev(n,_,{index:p-1}),b){s.add(_);break}if(!b&&!h&&i===A){const{leaves:_}=n[p],[N]=c;let k=this._findNode(_,{node:N});for(;k;){if(b=this._matchNodePrev(n,k,{index:p-1}),b){s.add(k);break}k=this._findNode(_,{node:k})}}}}}return s}_find(i){return(i===$||i===A)&&this._prepareQuerySelectorWalker(),this._matchNodes(i)}matches(i,e,r){let a;try{if(e?.nodeType!==u.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}(0,y.filterSelector)(i)?a=this.#c.match(i,e):(this._setup(i,e,r),a=this._find(D).size)}catch(s){this._onError(s)}return!!a}closest(i,e,r){let a;try{if(e?.nodeType!==u.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}if((0,y.filterSelector)(i))a=this.#c.closest(i,e);else{this._setup(i,e,r);const s=this._find(R);if(s.size){let o=this.#e;for(;o;){if(s.has(o)){a=o;break}o=o.parentNode}}}}catch(s){this._onError(s)}return a??null}querySelector(i,e,r){let a;try{if(this._setup(i,e,r),this.#f===this.#t&&!this.#o&&(0,y.filterSelector)(i))a=this.#c.first(i,e);else{const s=this._find(A);s.delete(this.#e),s.size&&([a]=(0,L.sortNodes)(s))}}catch(s){this._onError(s)}return a??null}querySelectorAll(i,e,r){let a;try{if(this._setup(i,e,r),this.#f===this.#t&&!this.#o&&(0,y.filterSelector)(i))a=this.#c.select(i,e);else{const s=this._find($);s.delete(this.#e),s.size&&(this.#u?a=(0,L.sortNodes)(s):a=[...s])}}catch(s){this._onError(s)}return a??[]}}0&&(module.exports={Finder});
 //# sourceMappingURL=finder.js.map
diff --git a/dist/cjs/js/finder.js.map b/dist/cjs/js/finder.js.map
index 67b3e455..402ff643 100644
--- a/dist/cjs/js/finder.js.map
+++ b/dist/cjs/js/finder.js.map
@@ -1,7 +1,7 @@
 {
   "version": 3,
   "sources": ["../../../src/js/finder.js"],
-  "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport nwsapi from 'nwsapi';\nimport {\n  getDirectionality, isContentEditable, isInShadowTree, resolveContent,\n  sortNodes\n} from './dom-util.js';\nimport { matchPseudoElementSelector, matchSelector } from './matcher.js';\nimport {\n  filterSelector, generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\n\n/* constants */\nimport {\n  ALPHA_NUM, COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE,\n  NOT_SUPPORTED_ERR, REG_LOGICAL_PSEUDO, REG_SHADOW_HOST, SELECTOR_CLASS,\n  SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE,\n  SHOW_ALL, SYNTAX_ERR, TEXT_NODE, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: [\n *   {\n *     branch: branch[],\n *     collected: boolean,\n *     dir: string|null,\n *     filtered: boolean,\n *     find: boolean\n *   },\n *   {\n *     branch: branch[],\n *     collected: boolean,\n *     dir: string|null,\n *     filtered: boolean,\n *     find: boolean\n *   }\n * ]\n * #nodes: [\n *   [node{}, node{}],\n *   [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{}: CSSTree AST object\n * node{}: Element node\n */\nexport class Finder {\n  /* private fields */\n  #ast;\n  #cache;\n  #content;\n  #descendant;\n  #document;\n  #node;\n  #nodes;\n  #noexcept;\n  #nwsapi;\n  #qswalker;\n  #results;\n  #root;\n  #shadow;\n  #sort;\n  #walker;\n  #walkers;\n  #warn;\n  #window;\n\n  /**\n   * construct\n   * @param {object} window - window\n   */\n  constructor(window) {\n    this.#window = window;\n    this.#document = window.document;\n    this.#cache = new WeakMap();\n    this.#results = new WeakMap();\n    this.#nwsapi = nwsapi({\n      document: window.document,\n      DOMException: window.DOMException\n    });\n    this.#nwsapi.configure({\n      LOGERRORS: false\n    });\n  }\n\n  /**\n   * handle error\n   * @private\n   * @param {Error} e - Error\n   * @throws Error\n   * @returns {void}\n   */\n  _onError(e) {\n    if (!this.#noexcept) {\n      if (e instanceof DOMException ||\n          e instanceof this.#window.DOMException) {\n        if (e.name === NOT_SUPPORTED_ERR) {\n          if (this.#warn) {\n            console.warn(e.message);\n          }\n        } else {\n          throw new this.#window.DOMException(e.message, e.name);\n        }\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * setup finder\n   * @private\n   * @param {string} selector - CSS selector\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} opt - options\n   * @param {boolean} [opt.noexcept] - no exception\n   * @param {boolean} [opt.warn] - console warn\n   * @returns {object} - node\n   */\n  _setup(selector, node, opt = {}) {\n    const { noexcept, warn } = opt;\n    this.#noexcept = !!noexcept;\n    this.#warn = !!warn;\n    this.#node = node;\n    [this.#content, this.#root, this.#walker] = resolveContent(node);\n    this.#shadow = isInShadowTree(node);\n    [this.#ast, this.#nodes] = this._correspond(selector);\n    this.#walkers = new WeakMap();\n    return node;\n  }\n\n  /**\n   * correspond ast and nodes\n   * @private\n   * @param {string} selector - CSS selector\n   * @returns {Array.<Array.<object|undefined>>} - array of ast and nodes\n   */\n  _correspond(selector) {\n    const nodes = [];\n    this.#descendant = false;\n    let ast;\n    if (this.#content) {\n      const cachedItem = this.#cache.get(this.#content);\n      if (cachedItem && cachedItem.has(`${selector}`)) {\n        const item = cachedItem.get(`${selector}`);\n        this.#descendant = item.descendant;\n        ast = item.ast;\n      }\n    }\n    if (ast) {\n      const l = ast.length;\n      for (let i = 0; i < l; i++) {\n        ast[i].collected = false;\n        ast[i].dir = null;\n        ast[i].filtered = false;\n        ast[i].find = false;\n        nodes[i] = [];\n      }\n    } else {\n      let cssAst;\n      try {\n        cssAst = parseSelector(selector);\n      } catch (e) {\n        this._onError(e);\n      }\n      const branches = walkAST(cssAst);\n      let descendant = false;\n      let i = 0;\n      ast = [];\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 selector ${selector}`;\n                throw new DOMException(msg, SYNTAX_ERR);\n              }\n              const itemName = item.name;\n              if (/^[\\s>]$/.test(itemName)) {\n                descendant = true;\n              }\n              branch.push({\n                combo: item,\n                leaves: sortAST(leaves)\n              });\n              leaves.clear();\n            } else if (item) {\n              let { name: itemName } = item;\n              if (itemName && typeof itemName === 'string') {\n                itemName = unescapeSelector(itemName);\n                item.name = itemName;\n                if (/[|:]/.test(itemName)) {\n                  item.namespace = true;\n                }\n              }\n              leaves.add(item);\n            }\n            if (items.length) {\n              item = items.shift();\n            } else {\n              branch.push({\n                combo: null,\n                leaves: sortAST(leaves)\n              });\n              leaves.clear();\n              break;\n            }\n          }\n        }\n        ast.push({\n          branch,\n          collected: false,\n          dir: null,\n          filtered: false,\n          find: false\n        });\n        nodes[i] = [];\n        i++;\n      }\n      if (this.#content) {\n        let cachedItem;\n        if (this.#cache.has(this.#content)) {\n          cachedItem = this.#cache.get(this.#content);\n        } else {\n          cachedItem = new Map();\n        }\n        cachedItem.set(`${selector}`, {\n          ast,\n          descendant\n        });\n        this.#cache.set(this.#content, cachedItem);\n      }\n      this.#descendant = descendant;\n    }\n    return [\n      ast,\n      nodes\n    ];\n  }\n\n  /**\n   * create tree walker\n   * @private\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @returns {object} - tree walker\n   */\n  _createTreeWalker(node) {\n    let walker;\n    if (this.#walkers.has(node)) {\n      walker = this.#walkers.get(node);\n    } else {\n      walker = this.#document.createTreeWalker(node, WALKER_FILTER);\n      this.#walkers.set(node, walker);\n    }\n    return walker;\n  }\n\n  /**\n   * prepare querySelector walker\n   * @private\n   * @returns {object} - tree walker\n   */\n  _prepareQuerySelectorWalker() {\n    this.#qswalker = this._createTreeWalker(this.#node);\n    this.#sort = false;\n    return this.#qswalker;\n  }\n\n  /**\n   * traverse tree walker\n   * @private\n   * @param {object} node - Element node\n   * @param {object} [walker] - tree walker\n   * @returns {?object} - current node\n   */\n  _traverse(node, walker = this.#walker) {\n    let refNode = walker.currentNode;\n    let current;\n    if (refNode === node) {\n      current = refNode;\n    } else if (refNode.contains(node)) {\n      refNode = walker.nextNode();\n      while (refNode) {\n        if (refNode === node) {\n          current = refNode;\n          break;\n        }\n        refNode = walker.nextNode();\n      }\n    } else {\n      if (refNode !== walker.root) {\n        while (refNode) {\n          if (refNode === walker.root || refNode === node) {\n            break;\n          }\n          refNode = walker.parentNode();\n        }\n      }\n      if (node?.nodeType === ELEMENT_NODE) {\n        while (refNode) {\n          if (refNode === node) {\n            current = refNode;\n            break;\n          }\n          refNode = walker.nextNode();\n        }\n      } else {\n        current = refNode;\n      }\n    }\n    return current ?? null;\n  }\n\n  /**\n   * collect nth child\n   * @private\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   * @param {object} opt - options\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _collectNthChild(anb, node, opt) {\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 walker = this.#walker;\n      let refNode = this._traverse(parentNode, walker);\n      refNode = walker.firstChild();\n      let l = 0;\n      while (refNode) {\n        l++;\n        refNode = walker.nextSibling();\n      }\n      refNode = this._traverse(parentNode, walker);\n      const selectorNodes = new Set();\n      if (selectorBranches) {\n        refNode = walker.firstChild();\n        while (refNode) {\n          let bool;\n          for (const leaves of selectorBranches) {\n            bool = this._matchLeaves(leaves, refNode, opt);\n            if (!bool) {\n              break;\n            }\n          }\n          if (bool) {\n            selectorNodes.add(refNode);\n          }\n          refNode = walker.nextSibling();\n        }\n      }\n      // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n      if (a === 0) {\n        if (b > 0 && b <= l) {\n          if (selectorNodes.size) {\n            refNode = this._traverse(parentNode, walker);\n            if (reverse) {\n              refNode = walker.lastChild();\n            } else {\n              refNode = walker.firstChild();\n            }\n            let i = 0;\n            while (refNode) {\n              if (selectorNodes.has(refNode)) {\n                if (i === b - 1) {\n                  matched.add(refNode);\n                  break;\n                }\n                i++;\n              }\n              if (reverse) {\n                refNode = walker.previousSibling();\n              } else {\n                refNode = walker.nextSibling();\n              }\n            }\n          } else if (!selector) {\n            refNode = this._traverse(parentNode, walker);\n            if (reverse) {\n              refNode = walker.lastChild();\n            } else {\n              refNode = walker.firstChild();\n            }\n            let i = 0;\n            while (refNode) {\n              if (i === b - 1) {\n                matched.add(refNode);\n                break;\n              }\n              if (reverse) {\n                refNode = walker.previousSibling();\n              } else {\n                refNode = walker.nextSibling();\n              }\n              i++;\n            }\n          }\n        }\n      // :nth-child()\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          refNode = this._traverse(parentNode, walker);\n          if (reverse) {\n            refNode = walker.lastChild();\n          } else {\n            refNode = walker.firstChild();\n          }\n          let i = 0;\n          let j = a > 0 ? 0 : b - 1;\n          while (refNode) {\n            if (refNode && nth >= 0 && nth < l) {\n              if (selectorNodes.size) {\n                if (selectorNodes.has(refNode)) {\n                  if (j === nth) {\n                    matched.add(refNode);\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(refNode);\n                }\n                nth += a;\n              }\n              if (reverse) {\n                refNode = walker.previousSibling();\n              } else {\n                refNode = walker.nextSibling();\n              }\n              i++;\n            } else {\n              break;\n            }\n          }\n        }\n      }\n      if (reverse && matched.size > 1) {\n        const m = [...matched];\n        return new Set(m.reverse());\n      }\n    } else if (node === this.#root && (a + b) === 1) {\n      if (selectorBranches) {\n        let bool;\n        for (const leaves of selectorBranches) {\n          bool = this._matchLeaves(leaves, node, opt);\n          if (bool) {\n            break;\n          }\n        }\n        if (bool) {\n          matched.add(node);\n        }\n      } else {\n        matched.add(node);\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * collect nth of type\n   * @private\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 {Set.<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 walker = this.#walker;\n      let refNode = this._traverse(parentNode, walker);\n      refNode = walker.firstChild();\n      let l = 0;\n      while (refNode) {\n        l++;\n        refNode = walker.nextSibling();\n      }\n      // :first-of-type, :last-of-type\n      if (a === 0) {\n        if (b > 0 && b <= l) {\n          refNode = this._traverse(parentNode, walker);\n          if (reverse) {\n            refNode = walker.lastChild();\n          } else {\n            refNode = walker.firstChild();\n          }\n          let j = 0;\n          while (refNode) {\n            const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n            if (itemLocalName === localName && itemPrefix === prefix) {\n              if (j === b - 1) {\n                matched.add(refNode);\n                break;\n              }\n              j++;\n            }\n            if (reverse) {\n              refNode = walker.previousSibling();\n            } else {\n              refNode = walker.nextSibling();\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          refNode = this._traverse(parentNode, walker);\n          if (reverse) {\n            refNode = walker.lastChild();\n          } else {\n            refNode = walker.firstChild();\n          }\n          let j = a > 0 ? 0 : b - 1;\n          while (refNode) {\n            const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n            if (itemLocalName === localName && itemPrefix === prefix) {\n              if (j === nth) {\n                matched.add(refNode);\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            if (reverse) {\n              refNode = walker.previousSibling();\n            } else {\n              refNode = walker.nextSibling();\n            }\n          }\n        }\n      }\n      if (reverse && matched.size > 1) {\n        const m = [...matched];\n        return new Set(m.reverse());\n      }\n    } else if (node === this.#root && (a + b) === 1) {\n      matched.add(node);\n    }\n    return matched;\n  }\n\n  /**\n   * match An+B\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - Element node\n   * @param {string} nthName - nth pseudo-class name\n   * @param {object} opt - options\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchAnPlusB(ast, node, nthName, opt) {\n    const {\n      nth: {\n        a,\n        b,\n        name: nthIdentName\n      },\n      selector\n    } = ast;\n    const anbMap = new Map();\n    if (nthIdentName) {\n      if (nthIdentName === 'even') {\n        anbMap.set('a', 2);\n        anbMap.set('b', 0);\n      } else if (nthIdentName === 'odd') {\n        anbMap.set('a', 2);\n        anbMap.set('b', 1);\n      }\n      if (nthName.indexOf('last') > -1) {\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 (nthName.indexOf('last') > -1) {\n        anbMap.set('reverse', true);\n      }\n    }\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, opt);\n      return nodes;\n    } else if (/^nth-(?:last-)?of-type$/.test(nthName)) {\n      const anb = Object.fromEntries(anbMap);\n      const nodes = this._collectNthOfType(anb, node);\n      return nodes;\n    }\n    return new Set();\n  }\n\n  /**\n   * match directionality pseudo-class - :dir()\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - Element node\n   * @returns {?object} - matched node\n   */\n  _matchDirectionPseudoClass(ast, node) {\n    const dir = getDirectionality(node);\n    let res;\n    if (ast.name === dir) {\n      res = node;\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match language pseudo-class - :lang()\n   * @private\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 astName = unescapeSelector(ast.name);\n    ast.name = astName;\n    let res;\n    if (astName === '*') {\n      if (node.hasAttribute('lang')) {\n        if (node.getAttribute('lang')) {\n          res = node;\n        }\n      } else {\n        let parent = node.parentNode;\n        while (parent) {\n          if (parent.nodeType === ELEMENT_NODE) {\n            if (parent.hasAttribute('lang')) {\n              if (parent.getAttribute('lang')) {\n                res = node;\n              }\n              break;\n            }\n            parent = parent.parentNode;\n          } else {\n            break;\n          }\n        }\n      }\n    } else if (astName) {\n      const langPart = `(?:-${ALPHA_NUM})*`;\n      const regLang = new RegExp(`^(?:\\\\*-)?${ALPHA_NUM}${langPart}$`, 'i');\n      if (regLang.test(astName)) {\n        let regExtendedLang;\n        if (astName.indexOf('-') > -1) {\n          const [langMain, langSub, ...langRest] = astName.split('-');\n          let extendedMain;\n          if (langMain === '*') {\n            extendedMain = `${ALPHA_NUM}${langPart}`;\n          } else {\n            extendedMain = `${langMain}${langPart}`;\n          }\n          const extendedSub = `-${langSub}${langPart}`;\n          const len = langRest.length;\n          let extendedRest = '';\n          if (len) {\n            for (let i = 0; i < len; i++) {\n              extendedRest += `-${langRest[i]}${langPart}`;\n            }\n          }\n          regExtendedLang =\n            new RegExp(`^${extendedMain}${extendedSub}${extendedRest}$`, 'i');\n        } else {\n          regExtendedLang = new RegExp(`^${astName}${langPart}$`, 'i');\n        }\n        if (node.hasAttribute('lang')) {\n          if (regExtendedLang.test(node.getAttribute('lang'))) {\n            res = node;\n          }\n        } else {\n          let parent = node.parentNode;\n          while (parent) {\n            if (parent.nodeType === ELEMENT_NODE) {\n              if (parent.hasAttribute('lang')) {\n                const value = parent.getAttribute('lang');\n                if (regExtendedLang.test(value)) {\n                  res = node;\n                }\n                break;\n              }\n              parent = parent.parentNode;\n            } else {\n              break;\n            }\n          }\n        }\n      }\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match :has() pseudo-class function\n   * @private\n   * @param {Array.<object>} leaves - AST leaves\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {boolean} - result\n   */\n  _matchHasPseudoFunc(leaves, node, opt = {}) {\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      opt.dir = DIR_NEXT;\n      const nodes = this._matchCombinator(twig, node, opt);\n      if (nodes.size) {\n        if (leaves.length) {\n          for (const nextNode of nodes) {\n            bool = this._matchHasPseudoFunc(Object.assign([], leaves),\n              nextNode, opt);\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   * @private\n   * @param {object} astData - AST data\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {?object} - matched node\n   */\n  _matchLogicalPseudoFunc(astData, node, opt = {}) {\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        for (const leaves of branches) {\n          bool = this._matchHasPseudoFunc(Object.assign([], leaves), node, opt);\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      opt.forgive = forgive;\n      const l = twigBranches.length;\n      let bool;\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, opt);\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            opt.dir = DIR_PREV;\n            for (const nextNode of nextNodes) {\n              const m = this._matchCombinator(twig, nextNode, opt);\n              if (m.size) {\n                arr.push(...m);\n              }\n            }\n            if (arr.length) {\n              if (j === 0) {\n                bool = true;\n              } else {\n                nextNodes = new Set(arr);\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   * @private\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   * @param {boolean} [opt.forgive] - forgive unknown pseudo-class\n   * @param {boolean} [opt.warn] - warn unsupported pseudo-class\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchPseudoClassSelector(ast, node, opt = {}) {\n    const { children: astChildren, name: astName } = ast;\n    const { localName, parentNode } = node;\n    const {\n      forgive,\n      warn = this.#warn\n    } = opt;\n    const matched = new Set();\n    // :has(), :is(), :not(), :where()\n    if (REG_LOGICAL_PSEUDO.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, opt);\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 (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n        const nodes = this._matchAnPlusB(branch, node, astName, opt);\n        return nodes;\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 (warn) {\n              const msg = `Unsupported pseudo-class :${astName}()`;\n              throw new DOMException(msg, NOT_SUPPORTED_ERR);\n            }\n            break;\n          }\n          case 'host':\n          case 'host-context': {\n            // ignore\n            break;\n          }\n          default: {\n            if (!forgive) {\n              const msg = `Unknown pseudo-class :${astName}()`;\n              throw new DOMException(msg, SYNTAX_ERR);\n            }\n          }\n        }\n      }\n    } else {\n      const regAnchor = /^a(?:rea)?$/;\n      const regFormCtrl =\n        /^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/;\n      const regFormValidity = /^(?:(?:inpu|selec)t|button|form|textarea)$/;\n      const regInteract = /^d(?:etails|ialog)$/;\n      const regTypeCheck = /^(?:checkbox|radio)$/;\n      const regTypeDate = /^(?:date(?:time-local)?|month|time|week)$/;\n      const regTypeRange =\n        /(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/;\n      const regTypeText = /^(?:(?:emai|te|ur)l|number|password|search|text)$/;\n      switch (astName) {\n        case 'any-link':\n        case 'link': {\n          if (regAnchor.test(localName) && node.hasAttribute('href')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'local-link': {\n          if (regAnchor.test(localName) && node.hasAttribute('href')) {\n            const { href, origin, pathname } = new URL(this.#content.URL);\n            const attrURL = new URL(node.getAttribute('href'), href);\n            if (attrURL.origin === origin && attrURL.pathname === pathname) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'visited': {\n          // prevent fingerprinting\n          break;\n        }\n        case 'target': {\n          const { hash } = new URL(this.#content.URL);\n          if (node.id && hash === `#${node.id}` &&\n              this.#content.contains(node)) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'target-within': {\n          const { hash } = new URL(this.#content.URL);\n          if (hash) {\n            const id = hash.replace(/^#/, '');\n            let current = this.#content.getElementById(id);\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 (!this.#shadow && node === this.#node) {\n              matched.add(node);\n            }\n          } else if (node === this.#content.documentElement) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'focus': {\n          if (node === this.#content.activeElement) {\n            let refNode = node;\n            let focus = true;\n            while (refNode) {\n              if (refNode.hasAttribute('hidden')) {\n                focus = false;\n                break;\n              } else if (refNode.hasAttribute('style')) {\n                const { display, visibility } = refNode.style;\n                focus = !(display === 'none' || visibility === 'hidden');\n                if (!focus) {\n                  break;\n                }\n              }\n              if (refNode.parentNode &&\n                  refNode.parentNode.nodeType === ELEMENT_NODE) {\n                refNode = refNode.parentNode;\n              } else {\n                break;\n              }\n            }\n            if (focus) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'focus-within': {\n          let current = this.#content.activeElement;\n          let active;\n          while (current) {\n            if (current === node) {\n              active = true;\n              break;\n            }\n            current = current.parentNode;\n          }\n          if (active) {\n            let refNode = node;\n            let focus = true;\n            while (refNode) {\n              if (refNode.hasAttribute('hidden')) {\n                focus = false;\n                break;\n              } else if (refNode.hasAttribute('style')) {\n                const { display, visibility } = refNode.style;\n                focus = !(display === 'none' || visibility === 'hidden');\n                if (!focus) {\n                  break;\n                }\n              }\n              if (refNode.parentNode &&\n                  refNode.parentNode.nodeType === ELEMENT_NODE) {\n                refNode = refNode.parentNode;\n              } else {\n                break;\n              }\n            }\n            if (focus) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'open': {\n          if (regInteract.test(localName) && node.hasAttribute('open')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'closed': {\n          if (regInteract.test(localName) && !node.hasAttribute('open')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'disabled': {\n          if (regFormCtrl.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 && parentNode.localName !== 'legend' &&\n                  parent.hasAttribute('disabled')) {\n                matched.add(node);\n              }\n            }\n          }\n          break;\n        }\n        case 'enabled': {\n          if ((regFormCtrl.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 || regTypeDate.test(node.type) ||\n                   regTypeText.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 || regTypeDate.test(node.type) ||\n                   regTypeText.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 (regTypeText.test(node.getAttribute('type'))) {\n                targetNode = node;\n              }\n            } else {\n              targetNode = node;\n            }\n          }\n          if (targetNode && node.value === '' &&\n              node.hasAttribute('placeholder') &&\n              node.getAttribute('placeholder').trim().length) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'checked': {\n          if ((node.checked && localName === 'input' &&\n               node.hasAttribute('type') &&\n               regTypeCheck.test(node.getAttribute('type'))) ||\n              (node.selected && localName === 'option')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'indeterminate': {\n          if ((node.indeterminate && localName === 'input' &&\n               node.type === 'checkbox') ||\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 = this.#content.documentElement;\n            }\n            const items = parent.getElementsByTagName('input');\n            const l = items.length;\n            let checked;\n            for (let i = 0; i < l; i++) {\n              const item = items[i];\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          const regTypeReset = /^(?:button|reset)$/;\n          const regTypeSubmit = /^(?:image|submit)$/;\n          // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n          if ((localName === 'button' &&\n               !(node.hasAttribute('type') &&\n                 regTypeReset.test(node.getAttribute('type')))) ||\n              (localName === 'input' && node.hasAttribute('type') &&\n               regTypeSubmit.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 walker = this.#walker;\n              let nextNode = this._traverse(form, walker);\n              nextNode = walker.firstChild();\n              while (nextNode && form.contains(nextNode)) {\n                const nodeName = nextNode.localName;\n                let m;\n                if (nodeName === 'button') {\n                  m = !(nextNode.hasAttribute('type') &&\n                    regTypeReset.test(nextNode.getAttribute('type')));\n                } else if (nodeName === 'input') {\n                  m = nextNode.hasAttribute('type') &&\n                    regTypeSubmit.test(nextNode.getAttribute('type'));\n                }\n                if (m) {\n                  if (nextNode === node) {\n                    matched.add(node);\n                  }\n                  break;\n                }\n                nextNode = walker.nextNode();\n              }\n            }\n          // input[type=\"checkbox\"], input[type=\"radio\"]\n          } else if (localName === 'input' && node.hasAttribute('type') &&\n                     regTypeCheck.test(node.getAttribute('type')) &&\n                     (node.checked || node.hasAttribute('checked'))) {\n            matched.add(node);\n          // option\n          } else if (localName === 'option') {\n            let parent = parentNode;\n            let isMultiple = false;\n            while (parent) {\n              if (parent.localName === 'datalist') {\n                break;\n              } else if (parent.localName === 'select') {\n                if (parent.multiple || parent.hasAttribute('multiple')) {\n                  isMultiple = true;\n                }\n                break;\n              }\n              parent = parent.parentNode;\n            }\n            if (isMultiple) {\n              if (node.selected || node.hasAttribute('selected')) {\n                matched.add(node);\n              }\n            } else {\n              const defaultOpt = new Set();\n              const walker = this.#walker;\n              let refNode = this._traverse(parentNode, walker);\n              refNode = walker.firstChild();\n              while (refNode) {\n                if (refNode.selected || refNode.hasAttribute('selected')) {\n                  defaultOpt.add(refNode);\n                  break;\n                }\n                refNode = walker.nextSibling();\n              }\n              if (defaultOpt.size) {\n                if (defaultOpt.has(node)) {\n                  matched.add(node);\n                }\n              }\n            }\n          }\n          break;\n        }\n        case 'valid': {\n          if (regFormValidity.test(localName)) {\n            if (node.checkValidity()) {\n              matched.add(node);\n            }\n          } else if (localName === 'fieldset') {\n            const walker = this.#walker;\n            let refNode = this._traverse(node, walker);\n            refNode = walker.firstChild();\n            let bool;\n            while (refNode && node.contains(refNode)) {\n              if (regFormValidity.test(refNode.localName)) {\n                bool = refNode.checkValidity();\n                if (!bool) {\n                  break;\n                }\n              }\n              refNode = walker.nextNode();\n            }\n            if (bool) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'invalid': {\n          if (regFormValidity.test(localName)) {\n            if (!node.checkValidity()) {\n              matched.add(node);\n            }\n          } else if (localName === 'fieldset') {\n            const walker = this.#walker;\n            let refNode = this._traverse(node, walker);\n            refNode = walker.firstChild();\n            let bool;\n            while (refNode && node.contains(refNode)) {\n              if (regFormValidity.test(refNode.localName)) {\n                bool = refNode.checkValidity();\n                if (!bool) {\n                  break;\n                }\n              }\n              refNode = walker.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              regTypeRange.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              regTypeRange.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 (inputType === 'file' || regTypeCheck.test(inputType) ||\n                  regTypeDate.test(inputType) || regTypeText.test(inputType)) {\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 (inputType === 'file' || regTypeCheck.test(inputType) ||\n                  regTypeDate.test(inputType) || regTypeText.test(inputType)) {\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 === this.#content.documentElement) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'empty': {\n          if (node.hasChildNodes()) {\n            const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n            let refNode = walker.firstChild();\n            let bool;\n            while (refNode) {\n              bool = refNode.nodeType !== ELEMENT_NODE &&\n                refNode.nodeType !== TEXT_NODE;\n              if (!bool) {\n                break;\n              }\n              refNode = walker.nextSibling();\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              node === this.#root) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'last-child': {\n          if ((parentNode && node === parentNode.lastElementChild) ||\n              node === this.#root) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'only-child': {\n          if ((parentNode && node === parentNode.firstElementChild &&\n               node === parentNode.lastElementChild) || node === this.#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 (node === this.#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 (node === this.#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 (node === this.#root) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'host':\n        case 'host-context': {\n          // ignore\n          break;\n        }\n        // legacy pseudo-elements\n        case 'after':\n        case 'before':\n        case 'first-letter':\n        case 'first-line': {\n          if (warn) {\n            const msg = `Unsupported pseudo-element ::${astName}`;\n            throw new DOMException(msg, NOT_SUPPORTED_ERR);\n          }\n          break;\n        }\n        case 'active':\n        case 'autofill':\n        case 'blank':\n        case 'buffering':\n        case 'current':\n        case 'defined':\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 (warn) {\n            const msg = `Unsupported pseudo-class :${astName}`;\n            throw new DOMException(msg, NOT_SUPPORTED_ERR);\n          }\n          break;\n        }\n        default: {\n          if (astName.startsWith('-webkit-')) {\n            if (warn) {\n              const msg = `Unsupported pseudo-class :${astName}`;\n              throw new DOMException(msg, NOT_SUPPORTED_ERR);\n            }\n          } else if (!forgive) {\n            const msg = `Unknown pseudo-class :${astName}`;\n            throw new DOMException(msg, SYNTAX_ERR);\n          }\n        }\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * match shadow host pseudo class\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - DocumentFragment node\n   * @returns {?object} - matched node\n   */\n  _matchShadowHostPseudoClass(ast, node) {\n    const { children: astChildren, name: astName } = ast;\n    let res;\n    if (Array.isArray(astChildren)) {\n      const [branch] = walkAST(astChildren[0]);\n      const [...leaves] = branch;\n      const { host } = node;\n      if (astName === 'host') {\n        let bool;\n        for (const leaf of leaves) {\n          const { type: leafType } = leaf;\n          if (leafType === COMBINATOR) {\n            const css = generateCSS(ast);\n            const msg = `Invalid selector ${css}`;\n            throw new DOMException(msg, SYNTAX_ERR);\n          }\n          bool = this._matchSelector(leaf, host).has(host);\n          if (!bool) {\n            break;\n          }\n        }\n        if (bool) {\n          res = node;\n        }\n      } else if (astName === 'host-context') {\n        let parent = host;\n        let bool;\n        while (parent) {\n          for (const leaf of leaves) {\n            const { type: leafType } = leaf;\n            if (leafType === COMBINATOR) {\n              const css = generateCSS(ast);\n              const msg = `Invalid selector ${css}`;\n              throw new DOMException(msg, SYNTAX_ERR);\n            }\n            bool = this._matchSelector(leaf, parent).has(parent);\n            if (!bool) {\n              break;\n            }\n          }\n          if (bool) {\n            break;\n          } else {\n            parent = parent.parentNode;\n          }\n        }\n        if (bool) {\n          res = node;\n        }\n      }\n    } else if (astName === 'host') {\n      res = node;\n    } else {\n      const msg = `Invalid selector :${astName}`;\n      throw new DOMException(msg, SYNTAX_ERR);\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match selector\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} [opt] - options\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchSelector(ast, node, opt) {\n    const { type: astType } = ast;\n    const astName = unescapeSelector(ast.name);\n    ast.name = astName;\n    const matched = new Set();\n    if (node.nodeType === ELEMENT_NODE) {\n      switch (astType) {\n        case SELECTOR_PSEUDO_ELEMENT: {\n          matchPseudoElementSelector(astName, opt);\n          break;\n        }\n        case SELECTOR_ID: {\n          if (node.id === astName) {\n            matched.add(node);\n          }\n          break;\n        }\n        case SELECTOR_CLASS: {\n          if (node.classList.contains(astName)) {\n            matched.add(node);\n          }\n          break;\n        }\n        case SELECTOR_PSEUDO_CLASS: {\n          const nodes = this._matchPseudoClassSelector(ast, node, opt);\n          return nodes;\n        }\n        default: {\n          const res = matchSelector(ast, node, opt);\n          if (res) {\n            matched.add(res);\n          }\n        }\n      }\n    } else if (this.#shadow && astType === SELECTOR_PSEUDO_CLASS &&\n               node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n      if (astName !== 'has' && REG_LOGICAL_PSEUDO.test(astName)) {\n        const nodes = this._matchPseudoClassSelector(ast, node, opt);\n        return nodes;\n      } else if (REG_SHADOW_HOST.test(astName)) {\n        const res = this._matchShadowHostPseudoClass(ast, node, opt);\n        if (res) {\n          matched.add(res);\n        }\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * match leaves\n   * @private\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    const { attributes, localName, nodeType } = node;\n    let result = this.#results.get(leaves);\n    let bool;\n    if (result && result.has(node)) {\n      const { attr, matched } = result.get(node);\n      if (attributes?.length === attr) {\n        bool = matched;\n      }\n    }\n    if (typeof bool !== 'boolean') {\n      const regForm = /^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;\n      let save;\n      if (nodeType === ELEMENT_NODE && regForm.test(localName)) {\n        save = false;\n      } else {\n        save = true;\n      }\n      for (const leaf of leaves) {\n        const { name, type: leafType } = leaf;\n        const leafName = unescapeSelector(name);\n        leaf.name = leafName;\n        if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n          save = false;\n        }\n        bool = this._matchSelector(leaf, node, opt).has(node);\n        if (!bool) {\n          break;\n        }\n      }\n      if (save) {\n        if (!result) {\n          result = new WeakMap();\n        }\n        result.set(node, {\n          attr: attributes?.length,\n          matched: bool\n        });\n        this.#results.set(leaves, result);\n      }\n    }\n    return !!bool;\n  }\n\n  /**\n   * match HTML collection\n   * @private\n   * @param {object} items - HTML collection\n   * @param {object} opt - options\n   * @returns {Set.<object>} - matched nodes\n   */\n  _matchHTMLCollection(items, opt = {}) {\n    const { compound, filterLeaves } = opt;\n    const nodes = new Set();\n    const l = items.length;\n    if (l) {\n      if (compound) {\n        for (let i = 0; i < l; i++) {\n          const item = items[i];\n          const bool = this._matchLeaves(filterLeaves, item, opt);\n          if (bool) {\n            nodes.add(item);\n          }\n        }\n      } else {\n        const arr = [].slice.call(items);\n        return new Set(arr);\n      }\n    }\n    return nodes;\n  }\n\n  /**\n   * find descendant nodes\n   * @private\n   * @param {Array.<object>} leaves - AST leaves\n   * @param {object} baseNode - base Element node\n   * @param {object} opt - options\n   * @returns {object} - collection of nodes and pending state\n   */\n  _findDescendantNodes(leaves, baseNode, opt) {\n    const [leaf, ...filterLeaves] = leaves;\n    const compound = filterLeaves.length > 0;\n    const { type: leafType } = leaf;\n    const leafName = unescapeSelector(leaf.name);\n    leaf.name = leafName;\n    let nodes = new Set();\n    let pending = false;\n    if (this.#shadow) {\n      pending = true;\n    } else {\n      switch (leafType) {\n        case SELECTOR_PSEUDO_ELEMENT: {\n          matchPseudoElementSelector(leafName, opt);\n          break;\n        }\n        case SELECTOR_ID: {\n          if (this.#root.nodeType === ELEMENT_NODE) {\n            pending = true;\n          } else {\n            const node = this.#root.getElementById(leafName);\n            if (node && node !== baseNode && baseNode.contains(node)) {\n              if (compound) {\n                const bool = this._matchLeaves(filterLeaves, node, opt);\n                if (bool) {\n                  nodes.add(node);\n                }\n              } else {\n                nodes.add(node);\n              }\n            }\n          }\n          break;\n        }\n        case SELECTOR_CLASS: {\n          const items = baseNode.getElementsByClassName(leafName);\n          nodes = this._matchHTMLCollection(items, {\n            compound,\n            filterLeaves\n          });\n          break;\n        }\n        case SELECTOR_TYPE: {\n          if (this.#content.contentType === 'text/html' &&\n              !/[*|]/.test(leafName)) {\n            const items = baseNode.getElementsByTagName(leafName);\n            nodes = this._matchHTMLCollection(items, {\n              compound,\n              filterLeaves\n            });\n          } else {\n            pending = true;\n          }\n          break;\n        }\n        default: {\n          pending = true;\n        }\n      }\n    }\n    return {\n      nodes,\n      pending\n    };\n  }\n\n  /**\n   * match combinator\n   * @private\n   * @param {object} twig - twig\n   * @param {object} node - Element node\n   * @param {object} opt - option\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchCombinator(twig, node, opt = {}) {\n    const { combo, leaves } = twig;\n    const { name: comboName } = combo;\n    const { parentNode } = node;\n    const { dir } = opt;\n    const matched = new Set();\n    if (dir === DIR_NEXT) {\n      switch (comboName) {\n        case '+': {\n          const refNode = node.nextElementSibling;\n          if (refNode) {\n            const bool = this._matchLeaves(leaves, refNode, opt);\n            if (bool) {\n              matched.add(refNode);\n            }\n          }\n          break;\n        }\n        case '~': {\n          if (parentNode) {\n            const walker = this._createTreeWalker(parentNode);\n            let refNode = this._traverse(node, walker);\n            refNode = walker.nextSibling();\n            while (refNode) {\n              const bool = this._matchLeaves(leaves, refNode, opt);\n              if (bool) {\n                matched.add(refNode);\n              }\n              refNode = walker.nextSibling();\n            }\n          }\n          break;\n        }\n        case '>': {\n          const walker = this._createTreeWalker(node);\n          let refNode = this._traverse(node, walker);\n          refNode = walker.firstChild();\n          while (refNode) {\n            const bool = this._matchLeaves(leaves, refNode, opt);\n            if (bool) {\n              matched.add(refNode);\n            }\n            refNode = walker.nextSibling();\n          }\n          break;\n        }\n        case ' ':\n        default: {\n          const { nodes, pending } = this._findDescendantNodes(leaves, node);\n          if (nodes.size) {\n            return nodes;\n          }\n          if (pending) {\n            const walker = this._createTreeWalker(node);\n            let refNode = this._traverse(node, walker);\n            refNode = walker.nextNode();\n            while (refNode && node.contains(refNode)) {\n              const bool = this._matchLeaves(leaves, refNode, opt);\n              if (bool) {\n                matched.add(refNode);\n              }\n              refNode = walker.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, opt);\n            if (bool) {\n              matched.add(refNode);\n            }\n          }\n          break;\n        }\n        case '~': {\n          if (parentNode) {\n            const walker = this._createTreeWalker(parentNode);\n            let refNode = this._traverse(parentNode, walker);\n            refNode = walker.firstChild();\n            while (refNode) {\n              if (refNode === node) {\n                break;\n              } else {\n                const bool = this._matchLeaves(leaves, refNode, opt);\n                if (bool) {\n                  matched.add(refNode);\n                }\n              }\n              refNode = walker.nextSibling();\n            }\n          }\n          break;\n        }\n        case '>': {\n          if (parentNode) {\n            const bool = this._matchLeaves(leaves, parentNode, opt);\n            if (bool) {\n              matched.add(parentNode);\n            }\n          }\n          break;\n        }\n        case ' ':\n        default: {\n          const arr = [];\n          let refNode = parentNode;\n          while (refNode) {\n            const bool = this._matchLeaves(leaves, refNode, opt);\n            if (bool) {\n              arr.push(refNode);\n            }\n            refNode = refNode.parentNode;\n          }\n          if (arr.length) {\n            return new Set(arr.reverse());\n          }\n        }\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * find matched node from #qswalker\n   * @private\n   * @param {Array.<object>} leaves - AST leaves\n   * @param {object} [opt] - options\n   * @param {object} [opt.node] - node to start from\n   * @returns {?object} - matched node\n   */\n  _findNode(leaves, opt) {\n    const { node } = opt;\n    let refNode = this._traverse(node, this.#qswalker);\n    let matchedNode;\n    if (refNode) {\n      if (refNode.nodeType !== ELEMENT_NODE) {\n        refNode = this.#qswalker.nextNode();\n      } else if (refNode === node) {\n        if (refNode !== this.#root) {\n          refNode = this.#qswalker.nextNode();\n        }\n      }\n      while (refNode) {\n        const matched = this._matchLeaves(leaves, refNode, {\n          warn: this.#warn\n        });\n        if (matched) {\n          matchedNode = refNode;\n          break;\n        }\n        refNode = this.#qswalker.nextNode();\n      }\n    }\n    return matchedNode ?? null;\n  }\n\n  /**\n   * match self\n   * @private\n   * @param {Array} leaves - AST leaves\n   * @returns {Array} - [nodes, filtered]\n   */\n  _matchSelf(leaves) {\n    const nodes = [];\n    const bool = this._matchLeaves(leaves, this.#node, {\n      warn: this.#warn\n    });\n    let filtered = false;\n    if (bool) {\n      nodes.push(this.#node);\n      filtered = true;\n    }\n    return [nodes, filtered];\n  }\n\n  /**\n   * find lineal\n   * @private\n   * @param {Array} leaves - AST leaves\n   * @param {object} opt - options\n   * @returns {Array} - [nodes, filtered]\n   */\n  _findLineal(leaves, opt = {}) {\n    const { complex } = opt;\n    const nodes = [];\n    let bool = this._matchLeaves(leaves, this.#node, {\n      warn: this.#warn\n    });\n    let filtered = false;\n    if (bool) {\n      nodes.push(this.#node);\n      filtered = true;\n    }\n    if (!bool || complex) {\n      let refNode = this.#node.parentNode;\n      while (refNode) {\n        bool = this._matchLeaves(leaves, refNode, {\n          warn: this.#warn\n        });\n        if (bool) {\n          nodes.push(refNode);\n          filtered = true;\n        }\n        if (refNode.parentNode) {\n          refNode = refNode.parentNode;\n        } else {\n          break;\n        }\n      }\n    }\n    return [nodes, filtered];\n  }\n\n  /**\n   * find first\n   * @private\n   * @param {Array} leaves - AST leaves\n   * @returns {Array} - [nodes, filtered]\n   */\n  _findFirst(leaves) {\n    const nodes = [];\n    const node = this._findNode(leaves, {\n      node: this.#node\n    });\n    let filtered = false;\n    if (node) {\n      nodes.push(node);\n      filtered = true;\n    }\n    return [nodes, filtered];\n  }\n\n  /**\n   * find from HTML collection\n   * @private\n   * @param {object} items - HTML collection\n   * @param {object} opt - options\n   * @param {boolean} [opt.compound] - compound selector\n   * @param {Array} [opt.filterLeaves] - filter leaves\n   * @returns {Array} - [nodes, filtered]\n   */\n  _findFromHTMLCollection(items, opt = {}) {\n    const { complex, compound, filterLeaves, targetType } = opt;\n    let nodes = [];\n    let filtered = false;\n    let collected = false;\n    const l = items.length;\n    if (l) {\n      if (this.#node.nodeType === ELEMENT_NODE) {\n        for (let i = 0; i < l; i++) {\n          const node = items[i];\n          if (node !== this.#node &&\n              (this.#node.contains(node) || node.contains(this.#node))) {\n            if (compound) {\n              const bool = this._matchLeaves(filterLeaves, node, {\n                warn: this.#warn\n              });\n              if (bool) {\n                nodes.push(node);\n                filtered = true;\n                if (targetType === TARGET_FIRST) {\n                  break;\n                }\n              }\n            } else {\n              nodes.push(node);\n              filtered = true;\n              if (targetType === TARGET_FIRST) {\n                break;\n              }\n            }\n          }\n        }\n      } else if (complex) {\n        if (compound) {\n          for (let i = 0; i < l; i++) {\n            const node = items[i];\n            const bool = this._matchLeaves(filterLeaves, node, {\n              warn: this.#warn\n            });\n            if (bool) {\n              nodes.push(node);\n              filtered = true;\n              if (targetType === TARGET_FIRST) {\n                break;\n              }\n            }\n          }\n        } else {\n          nodes = [].slice.call(items);\n          filtered = true;\n          collected = true;\n        }\n      } else if (compound) {\n        for (let i = 0; i < l; i++) {\n          const node = items[i];\n          const bool = this._matchLeaves(filterLeaves, node, {\n            warn: this.#warn\n          });\n          if (bool) {\n            nodes.push(node);\n            filtered = true;\n            if (targetType === TARGET_FIRST) {\n              break;\n            }\n          }\n        }\n      } else {\n        nodes = [].slice.call(items);\n        filtered = true;\n        collected = true;\n      }\n    }\n    return [nodes, filtered, collected];\n  }\n\n  /**\n   * find entry nodes\n   * @private\n   * @param {object} twig - twig\n   * @param {string} targetType - target type\n   * @param {boolean} complex - complex selector\n   * @returns {object} - collection of nodes etc.\n   */\n  _findEntryNodes(twig, targetType, complex) {\n    const { leaves } = twig;\n    const [leaf, ...filterLeaves] = leaves;\n    const compound = filterLeaves.length > 0;\n    const { type: leafType } = leaf;\n    const leafName = unescapeSelector(leaf.name);\n    leaf.name = leafName;\n    let nodes = [];\n    let collected = false;\n    let filtered = false;\n    let pending = false;\n    switch (leafType) {\n      case SELECTOR_PSEUDO_ELEMENT: {\n        matchPseudoElementSelector(leafName, {\n          warn: this.#warn\n        });\n        break;\n      }\n      case SELECTOR_ID: {\n        if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (targetType === TARGET_FIRST &&\n                   this.#root.nodeType !== ELEMENT_NODE) {\n          const node = this.#root.getElementById(leafName);\n          if (node) {\n            if (compound) {\n              const bool = this._matchLeaves(filterLeaves, node, {\n                warn: this.#warn\n              });\n              if (bool) {\n                nodes.push(node);\n                filtered = true;\n              }\n            } else {\n              nodes.push(node);\n              filtered = true;\n            }\n          }\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n        break;\n      }\n      case SELECTOR_CLASS: {\n        if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (this.#root.nodeType === DOCUMENT_NODE) {\n          const items = this.#root.getElementsByClassName(leafName);\n          if (items.length) {\n            [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n              complex,\n              compound,\n              filterLeaves,\n              targetType\n            });\n          }\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n        break;\n      }\n      case SELECTOR_TYPE: {\n        if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (this.#content.contentType === 'text/html' &&\n                   this.#root.nodeType === DOCUMENT_NODE &&\n                   !/[*|]/.test(leafName)) {\n          const items = this.#root.getElementsByTagName(leafName);\n          if (items.length) {\n            [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n              complex,\n              compound,\n              filterLeaves,\n              targetType\n            });\n          }\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n        break;\n      }\n      default: {\n        if (targetType !== TARGET_LINEAL && REG_SHADOW_HOST.test(leafName)) {\n          if (this.#shadow &&\n              this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n            const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n            if (node) {\n              nodes.push(node);\n              filtered = true;\n            }\n          }\n        } else if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n      }\n    }\n    return {\n      collected,\n      compound,\n      filtered,\n      nodes,\n      pending\n    };\n  }\n\n  /**\n   * get entry twig\n   * @private\n   * @param {Array.<object>} branch - AST branch\n   * @param {string} targetType - target type\n   * @returns {object} - direction and twig\n   */\n  _getEntryTwig(branch, targetType) {\n    const branchLen = branch.length;\n    const complex = branchLen > 1;\n    const firstTwig = branch[0];\n    let dir;\n    let twig;\n    if (complex) {\n      const {\n        combo: firstCombo,\n        leaves: [{\n          name: firstName,\n          type: firstType\n        }]\n      } = firstTwig;\n      const lastTwig = branch[branchLen - 1];\n      const {\n        leaves: [{\n          name: lastName,\n          type: lastType\n        }]\n      } = lastTwig;\n      if (lastType === SELECTOR_PSEUDO_ELEMENT || lastType === SELECTOR_ID) {\n        dir = DIR_PREV;\n        twig = lastTwig;\n      } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n                 firstType === SELECTOR_ID) {\n        dir = DIR_NEXT;\n        twig = firstTwig;\n      } else if (targetType === TARGET_ALL) {\n        if (firstName === '*' && firstType === SELECTOR_TYPE) {\n          dir = DIR_PREV;\n          twig = lastTwig;\n        } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n          dir = DIR_NEXT;\n          twig = firstTwig;\n        } else if (branchLen === 2) {\n          const { name: comboName } = firstCombo;\n          if (/^[+~]$/.test(comboName)) {\n            dir = DIR_PREV;\n            twig = lastTwig;\n          } else {\n            dir = DIR_NEXT;\n            twig = firstTwig;\n          }\n        } else {\n          dir = DIR_NEXT;\n          twig = firstTwig;\n        }\n      } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n        dir = DIR_NEXT;\n        twig = firstTwig;\n      } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n        dir = DIR_PREV;\n        twig = lastTwig;\n      } else {\n        let bool;\n        for (const { combo, leaves: [leaf] } of branch) {\n          const { type: leafType } = leaf;\n          const leafName = unescapeSelector(leaf.name);\n          leaf.name = leafName;\n          if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n            bool = false;\n            break;\n          }\n          if (!bool && combo) {\n            const { name: comboName } = combo;\n            if (/^[+~]$/.test(comboName)) {\n              bool = true;\n            }\n          }\n        }\n        if (bool) {\n          dir = DIR_NEXT;\n          twig = firstTwig;\n        } else {\n          dir = DIR_PREV;\n          twig = lastTwig;\n        }\n      }\n    } else {\n      dir = DIR_PREV;\n      twig = firstTwig;\n    }\n    return {\n      complex,\n      dir,\n      twig\n    };\n  }\n\n  /**\n   * collect nodes\n   * @private\n   * @param {string} targetType - target type\n   * @returns {Array.<Array.<object|undefined>>} - #ast and #nodes\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 { complex, dir, twig } = this._getEntryTwig(branch, targetType);\n        const {\n          collected, compound, filtered, nodes, pending\n        } = this._findEntryNodes(twig, targetType, complex);\n        if (nodes.length) {\n          this.#ast[i].find = true;\n          this.#nodes[i] = nodes;\n        } else if (pending) {\n          pendingItems.add(new Map([\n            ['index', i],\n            ['twig', twig]\n          ]));\n        }\n        this.#ast[i].collected = collected;\n        this.#ast[i].dir = dir;\n        this.#ast[i].filtered = filtered || !compound;\n        i++;\n      }\n      if (pendingItems.size) {\n        let node;\n        let walker;\n        if (this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE) {\n          node = this.#node;\n          walker = this.#qswalker;\n        } else {\n          node = this.#root;\n          walker = this.#walker;\n        }\n        let nextNode = this._traverse(node, walker);\n        while (nextNode) {\n          let bool = false;\n          if (this.#node.nodeType === ELEMENT_NODE) {\n            if (nextNode === this.#node) {\n              bool = true;\n            } else {\n              bool = this.#node.contains(nextNode);\n            }\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                warn: this.#warn\n              });\n              if (matched) {\n                const index = pendingItem.get('index');\n                this.#ast[index].filtered = true;\n                this.#ast[index].find = true;\n                this.#nodes[index].push(nextNode);\n              }\n            }\n          }\n          if (nextNode !== walker.currentNode) {\n            nextNode = this._traverse(nextNode, walker);\n          }\n          nextNode = walker.nextNode();\n        }\n      }\n    } else {\n      let i = 0;\n      for (const { branch } of ast) {\n        const twig = branch[branch.length - 1];\n        const complex = branch.length > 1;\n        const {\n          compound, filtered, nodes\n        } = this._findEntryNodes(twig, targetType, complex);\n        if (nodes.length) {\n          this.#ast[i].find = true;\n          this.#nodes[i] = nodes;\n        }\n        this.#ast[i].dir = DIR_PREV;\n        this.#ast[i].filtered = filtered || !compound;\n        i++;\n      }\n    }\n    return [\n      this.#ast,\n      this.#nodes\n    ];\n  }\n\n  /**\n   * get combined nodes\n   * @private\n   * @param {object} twig - twig\n   * @param {object} nodes - collection of nodes\n   * @param {string} dir - direction\n   * @returns {Array.<object>} - collection of matched nodes\n   */\n  _getCombinedNodes(twig, nodes, dir) {\n    const arr = [];\n    for (const node of nodes) {\n      const matched = this._matchCombinator(twig, node, {\n        dir,\n        warn: this.#warn\n      });\n      if (matched.size) {\n        arr.push(...matched);\n      }\n    }\n    if (arr.length) {\n      return new Set(arr);\n    }\n    return new Set();\n  }\n\n  /**\n   * match node to next direction\n   * @private\n   * @param {Array} branch - branch\n   * @param {Set.<object>} nodes - collection of Element node\n   * @param {object} opt - option\n   * @param {object} opt.combo - combo\n   * @returns {?object} - matched node\n   */\n  _matchNodeNext(branch, nodes, opt) {\n    const { combo, index } = opt;\n    const { combo: nextCombo, leaves } = branch[index];\n    const twig = {\n      combo,\n      leaves\n    };\n    const nextNodes = this._getCombinedNodes(twig, nodes, DIR_NEXT);\n    let res;\n    if (nextNodes.size) {\n      if (index === branch.length - 1) {\n        const [nextNode] = sortNodes(nextNodes);\n        res = nextNode;\n      } else {\n        res = this._matchNodeNext(branch, nextNodes, {\n          combo: nextCombo,\n          index: index + 1\n        });\n      }\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match node to previous direction\n   * @private\n   * @param {Array} branch - branch\n   * @param {object} node - Element node\n   * @param {object} opt - option\n   * @param {number} opt.index - index\n   * @returns {?object} - node\n   */\n  _matchNodePrev(branch, node, opt) {\n    const { index } = opt;\n    const twig = branch[index];\n    const nodes = new Set([node]);\n    const nextNodes = this._getCombinedNodes(twig, nodes, DIR_PREV);\n    let res;\n    if (nextNodes.size) {\n      if (index === 0) {\n        res = node;\n      } else {\n        for (const nextNode of nextNodes) {\n          const matched = this._matchNodePrev(branch, nextNode, {\n            index: index - 1\n          });\n          if (matched) {\n            return node;\n          }\n        }\n      }\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match nodes\n   * @private\n   * @param {string} targetType - target type\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchNodes(targetType) {\n    const [[...branches], nodes] = this._collectNodes(targetType);\n    const l = branches.length;\n    let res = new Set();\n    for (let i = 0; i < l; i++) {\n      const { branch, collected, dir, find } = branches[i];\n      const branchLen = branch.length;\n      if (branchLen && find) {\n        const entryNodes = nodes[i];\n        const entryNodesLen = entryNodes.length;\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 (let j = 0; j < entryNodesLen; j++) {\n              const node = entryNodes[j];\n              if (node !== this.#node && this.#node.contains(node)) {\n                res.add(node);\n                if (targetType !== TARGET_ALL) {\n                  break;\n                }\n              }\n            }\n          } else if (targetType === TARGET_ALL) {\n            if (res.size) {\n              const n = [...res];\n              res = new Set([...n, ...entryNodes]);\n              this.#sort = true;\n            } else {\n              res = new Set(entryNodes);\n            }\n          } else {\n            const [node] = entryNodes;\n            res.add(node);\n          }\n        } else if (targetType === TARGET_ALL) {\n          if (dir === DIR_NEXT) {\n            let { combo } = branch[0];\n            for (const node of entryNodes) {\n              let nextNodes = new Set([node]);\n              for (let j = 1; j < branchLen; j++) {\n                const { combo: nextCombo, leaves } = branch[j];\n                const twig = {\n                  combo,\n                  leaves\n                };\n                nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n                if (nextNodes.size) {\n                  if (j === lastIndex) {\n                    if (res.size) {\n                      const n = [...res];\n                      res = new Set([...n, ...nextNodes]);\n                      this.#sort = true;\n                    } else {\n                      res = nextNodes;\n                    }\n                  } else {\n                    combo = nextCombo;\n                  }\n                } else {\n                  break;\n                }\n              }\n            }\n          } else {\n            for (const node of entryNodes) {\n              let nextNodes = new Set([node]);\n              for (let j = lastIndex - 1; j >= 0; j--) {\n                const twig = branch[j];\n                nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n                if (nextNodes.size) {\n                  if (j === 0) {\n                    res.add(node);\n                    if (branchLen > 1 && res.size > 1) {\n                      this.#sort = true;\n                    }\n                  }\n                } else {\n                  break;\n                }\n              }\n            }\n          }\n        } else if (targetType === TARGET_FIRST && dir === DIR_NEXT) {\n          const { combo: entryCombo } = branch[0];\n          let matched;\n          for (const node of entryNodes) {\n            matched = this._matchNodeNext(branch, new Set([node]), {\n              combo: entryCombo,\n              index: 1\n            });\n            if (matched) {\n              res.add(matched);\n              break;\n            }\n          }\n          if (!matched && !collected) {\n            const { leaves: entryLeaves } = branch[0];\n            const [entryNode] = entryNodes;\n            let refNode = this._findNode(entryLeaves, {\n              node: entryNode\n            });\n            while (refNode) {\n              matched = this._matchNodeNext(branch, new Set([refNode]), {\n                combo: entryCombo,\n                index: 1\n              });\n              if (matched) {\n                res.add(matched);\n                break;\n              }\n              refNode = this._findNode(entryLeaves, {\n                node: refNode\n              });\n            }\n          }\n        } else {\n          let matched;\n          for (const node of entryNodes) {\n            matched = this._matchNodePrev(branch, node, {\n              index: lastIndex - 1\n            });\n            if (matched) {\n              res.add(node);\n              break;\n            }\n          }\n          if (!matched && !collected && targetType === TARGET_FIRST) {\n            const { leaves: entryLeaves } = branch[lastIndex];\n            const [entryNode] = entryNodes;\n            let refNode = this._findNode(entryLeaves, {\n              node: entryNode\n            });\n            while (refNode) {\n              matched = this._matchNodePrev(branch, refNode, {\n                index: lastIndex - 1\n              });\n              if (matched) {\n                res.add(refNode);\n                break;\n              }\n              refNode = this._findNode(entryLeaves, {\n                node: refNode\n              });\n            }\n          }\n        }\n      }\n    }\n    return res;\n  }\n\n  /**\n   * find matched nodes\n   * @private\n   * @param {string} targetType - target type\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _find(targetType) {\n    if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n      this._prepareQuerySelectorWalker();\n    }\n    const nodes = this._matchNodes(targetType);\n    return nodes;\n  }\n\n  /**\n   * matches\n   * @param {string} selector - CSS selector\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {boolean} - `true` if matched `false` otherwise\n   */\n  matches(selector, node, opt) {\n    let res;\n    try {\n      if (node?.nodeType !== ELEMENT_NODE) {\n        const msg = `Unexpected node ${node?.nodeName}`;\n        throw new TypeError(msg);\n      }\n      if (filterSelector(selector)) {\n        res = this.#nwsapi.match(selector, node);\n      } else {\n        this._setup(selector, node, opt);\n        const nodes = this._find(TARGET_SELF);\n        res = nodes.size;\n      }\n    } catch (e) {\n      this._onError(e);\n    }\n    return !!res;\n  }\n\n  /**\n   * closest\n   * @param {string} selector - CSS selector\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {?object} - matched node\n   */\n  closest(selector, node, opt) {\n    let res;\n    try {\n      if (node?.nodeType !== ELEMENT_NODE) {\n        const msg = `Unexpected node ${node?.nodeName}`;\n        throw new TypeError(msg);\n      }\n      if (filterSelector(selector)) {\n        res = this.#nwsapi.closest(selector, node);\n      } else {\n        this._setup(selector, node, opt);\n        const nodes = this._find(TARGET_LINEAL);\n        if (nodes.size) {\n          let refNode = this.#node;\n          while (refNode) {\n            if (nodes.has(refNode)) {\n              res = refNode;\n              break;\n            }\n            refNode = refNode.parentNode;\n          }\n        }\n      }\n    } catch (e) {\n      this._onError(e);\n    }\n    return res ?? null;\n  }\n\n  /**\n   * query selector\n   * @param {string} selector - CSS selector\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} opt - options\n   * @returns {?object} - matched node\n   */\n  querySelector(selector, node, opt) {\n    let res;\n    try {\n      this._setup(selector, node, opt);\n      if (this.#document === this.#content && !this.#descendant &&\n          filterSelector(selector)) {\n        res = this.#nwsapi.first(selector, node);\n      } else {\n        const nodes = this._find(TARGET_FIRST);\n        nodes.delete(this.#node);\n        if (nodes.size) {\n          [res] = sortNodes(nodes);\n        }\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   * @param {string} selector - CSS selector\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} opt - options\n   * @returns {Array.<object|undefined>} - collection of matched nodes\n   */\n  querySelectorAll(selector, node, opt) {\n    let res;\n    try {\n      this._setup(selector, node, opt);\n      if (this.#document === this.#content && !this.#descendant &&\n          filterSelector(selector)) {\n        res = this.#nwsapi.select(selector, node);\n      } else {\n        const nodes = this._find(TARGET_ALL);\n        nodes.delete(this.#node);\n        if (nodes.size) {\n          if (this.#sort) {\n            res = sortNodes(nodes);\n          } else {\n            res = [...nodes];\n          }\n        }\n      }\n    } catch (e) {\n      this._onError(e);\n    }\n    return res ?? [];\n  }\n};\n"],
-  "mappings": "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",
+  "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport nwsapi from 'nwsapi';\nimport {\n  getDirectionality, isContentEditable, isInShadowTree, resolveContent,\n  sortNodes\n} from './dom-util.js';\nimport { matchPseudoElementSelector, matchSelector } from './matcher.js';\nimport {\n  filterSelector, generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\n\n/* constants */\nimport {\n  ALPHA_NUM, COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE,\n  EMPTY, NOT_SUPPORTED_ERR, REG_LOGICAL_PSEUDO, REG_SHADOW_HOST, SELECTOR_CLASS,\n  SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE,\n  SHOW_ALL, SYNTAX_ERR, TEXT_NODE, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: [\n *   {\n *     branch: branch[],\n *     collected: boolean,\n *     dir: string|null,\n *     filtered: boolean,\n *     find: boolean\n *   },\n *   {\n *     branch: branch[],\n *     collected: boolean,\n *     dir: string|null,\n *     filtered: boolean,\n *     find: boolean\n *   }\n * ]\n * #nodes: [\n *   [node{}, node{}],\n *   [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{}: CSSTree AST object\n * node{}: Element node\n */\nexport class Finder {\n  /* private fields */\n  #ast;\n  #cache;\n  #content;\n  #descendant;\n  #document;\n  #node;\n  #nodes;\n  #noexcept;\n  #nwsapi;\n  #qswalker;\n  #results;\n  #root;\n  #shadow;\n  #sort;\n  #walker;\n  #walkers;\n  #warn;\n  #window;\n\n  /**\n   * construct\n   * @param {object} window - window\n   */\n  constructor(window) {\n    this.#window = window;\n    this.#document = window.document;\n    this.#cache = new WeakMap();\n    this.#results = new WeakMap();\n    this.#nwsapi = nwsapi({\n      document: window.document,\n      DOMException: window.DOMException\n    });\n    this.#nwsapi.configure({\n      LOGERRORS: false\n    });\n  }\n\n  /**\n   * handle error\n   * @private\n   * @param {Error} e - Error\n   * @throws Error\n   * @returns {void}\n   */\n  _onError(e) {\n    if (!this.#noexcept) {\n      if (e instanceof DOMException ||\n          e instanceof this.#window.DOMException) {\n        if (e.name === NOT_SUPPORTED_ERR) {\n          if (this.#warn) {\n            console.warn(e.message);\n          }\n        } else {\n          throw new this.#window.DOMException(e.message, e.name);\n        }\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * setup finder\n   * @private\n   * @param {string} selector - CSS selector\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} opt - options\n   * @param {boolean} [opt.noexcept] - no exception\n   * @param {boolean} [opt.warn] - console warn\n   * @returns {object} - node\n   */\n  _setup(selector, node, opt = {}) {\n    const { noexcept, warn } = opt;\n    this.#noexcept = !!noexcept;\n    this.#warn = !!warn;\n    this.#node = node;\n    [this.#content, this.#root, this.#walker] = resolveContent(node);\n    this.#shadow = isInShadowTree(node);\n    [this.#ast, this.#nodes] = this._correspond(selector);\n    this.#walkers = new WeakMap();\n    return node;\n  }\n\n  /**\n   * correspond ast and nodes\n   * @private\n   * @param {string} selector - CSS selector\n   * @returns {Array.<Array.<object|undefined>>} - array of ast and nodes\n   */\n  _correspond(selector) {\n    const nodes = [];\n    this.#descendant = false;\n    let ast;\n    if (this.#content) {\n      const cachedItem = this.#cache.get(this.#content);\n      if (cachedItem && cachedItem.has(`${selector}`)) {\n        const item = cachedItem.get(`${selector}`);\n        this.#descendant = item.descendant;\n        ast = item.ast;\n      }\n    }\n    if (ast) {\n      const l = ast.length;\n      for (let i = 0; i < l; i++) {\n        ast[i].collected = false;\n        ast[i].dir = null;\n        ast[i].filtered = false;\n        ast[i].find = false;\n        nodes[i] = [];\n      }\n    } else {\n      let cssAst;\n      try {\n        cssAst = parseSelector(selector);\n      } catch (e) {\n        this._onError(e);\n      }\n      const branches = walkAST(cssAst);\n      let descendant = false;\n      let i = 0;\n      ast = [];\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 selector ${selector}`;\n                throw new DOMException(msg, SYNTAX_ERR);\n              }\n              const itemName = item.name;\n              if (/^[\\s>]$/.test(itemName)) {\n                descendant = true;\n              }\n              branch.push({\n                combo: item,\n                leaves: sortAST(leaves)\n              });\n              leaves.clear();\n            } else if (item) {\n              let { name: itemName } = item;\n              if (itemName && typeof itemName === 'string') {\n                itemName = unescapeSelector(itemName);\n                item.name = itemName;\n                if (/[|:]/.test(itemName)) {\n                  item.namespace = true;\n                }\n              }\n              leaves.add(item);\n            }\n            if (items.length) {\n              item = items.shift();\n            } else {\n              branch.push({\n                combo: null,\n                leaves: sortAST(leaves)\n              });\n              leaves.clear();\n              break;\n            }\n          }\n        }\n        ast.push({\n          branch,\n          collected: false,\n          dir: null,\n          filtered: false,\n          find: false\n        });\n        nodes[i] = [];\n        i++;\n      }\n      if (this.#content) {\n        let cachedItem;\n        if (this.#cache.has(this.#content)) {\n          cachedItem = this.#cache.get(this.#content);\n        } else {\n          cachedItem = new Map();\n        }\n        cachedItem.set(`${selector}`, {\n          ast,\n          descendant\n        });\n        this.#cache.set(this.#content, cachedItem);\n      }\n      this.#descendant = descendant;\n    }\n    return [\n      ast,\n      nodes\n    ];\n  }\n\n  /**\n   * create tree walker\n   * @private\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @returns {object} - tree walker\n   */\n  _createTreeWalker(node) {\n    let walker;\n    if (this.#walkers.has(node)) {\n      walker = this.#walkers.get(node);\n    } else {\n      walker = this.#document.createTreeWalker(node, WALKER_FILTER);\n      this.#walkers.set(node, walker);\n    }\n    return walker;\n  }\n\n  /**\n   * prepare querySelector walker\n   * @private\n   * @returns {object} - tree walker\n   */\n  _prepareQuerySelectorWalker() {\n    this.#qswalker = this._createTreeWalker(this.#node);\n    this.#sort = false;\n    return this.#qswalker;\n  }\n\n  /**\n   * traverse tree walker\n   * @private\n   * @param {object} node - Element node\n   * @param {object} [walker] - tree walker\n   * @returns {?object} - current node\n   */\n  _traverse(node, walker = this.#walker) {\n    let refNode = walker.currentNode;\n    let current;\n    if (refNode === node) {\n      current = refNode;\n    } else if (refNode.contains(node)) {\n      refNode = walker.nextNode();\n      while (refNode) {\n        if (refNode === node) {\n          current = refNode;\n          break;\n        }\n        refNode = walker.nextNode();\n      }\n    } else {\n      if (refNode !== walker.root) {\n        while (refNode) {\n          if (refNode === walker.root || refNode === node) {\n            break;\n          }\n          refNode = walker.parentNode();\n        }\n      }\n      if (node?.nodeType === ELEMENT_NODE) {\n        while (refNode) {\n          if (refNode === node) {\n            current = refNode;\n            break;\n          }\n          refNode = walker.nextNode();\n        }\n      } else {\n        current = refNode;\n      }\n    }\n    return current ?? null;\n  }\n\n  /**\n   * collect nth child\n   * @private\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   * @param {object} opt - options\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _collectNthChild(anb, node, opt) {\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 walker = this.#walker;\n      let refNode = this._traverse(parentNode, walker);\n      refNode = walker.firstChild();\n      let l = 0;\n      while (refNode) {\n        l++;\n        refNode = walker.nextSibling();\n      }\n      refNode = this._traverse(parentNode, walker);\n      const selectorNodes = new Set();\n      if (selectorBranches) {\n        refNode = walker.firstChild();\n        while (refNode) {\n          let bool;\n          for (const leaves of selectorBranches) {\n            bool = this._matchLeaves(leaves, refNode, opt);\n            if (!bool) {\n              break;\n            }\n          }\n          if (bool) {\n            selectorNodes.add(refNode);\n          }\n          refNode = walker.nextSibling();\n        }\n      }\n      // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n      if (a === 0) {\n        if (b > 0 && b <= l) {\n          if (selectorNodes.size) {\n            refNode = this._traverse(parentNode, walker);\n            if (reverse) {\n              refNode = walker.lastChild();\n            } else {\n              refNode = walker.firstChild();\n            }\n            let i = 0;\n            while (refNode) {\n              if (selectorNodes.has(refNode)) {\n                if (i === b - 1) {\n                  matched.add(refNode);\n                  break;\n                }\n                i++;\n              }\n              if (reverse) {\n                refNode = walker.previousSibling();\n              } else {\n                refNode = walker.nextSibling();\n              }\n            }\n          } else if (!selector) {\n            refNode = this._traverse(parentNode, walker);\n            if (reverse) {\n              refNode = walker.lastChild();\n            } else {\n              refNode = walker.firstChild();\n            }\n            let i = 0;\n            while (refNode) {\n              if (i === b - 1) {\n                matched.add(refNode);\n                break;\n              }\n              if (reverse) {\n                refNode = walker.previousSibling();\n              } else {\n                refNode = walker.nextSibling();\n              }\n              i++;\n            }\n          }\n        }\n      // :nth-child()\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          refNode = this._traverse(parentNode, walker);\n          if (reverse) {\n            refNode = walker.lastChild();\n          } else {\n            refNode = walker.firstChild();\n          }\n          let i = 0;\n          let j = a > 0 ? 0 : b - 1;\n          while (refNode) {\n            if (refNode && nth >= 0 && nth < l) {\n              if (selectorNodes.size) {\n                if (selectorNodes.has(refNode)) {\n                  if (j === nth) {\n                    matched.add(refNode);\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(refNode);\n                }\n                nth += a;\n              }\n              if (reverse) {\n                refNode = walker.previousSibling();\n              } else {\n                refNode = walker.nextSibling();\n              }\n              i++;\n            } else {\n              break;\n            }\n          }\n        }\n      }\n      if (reverse && matched.size > 1) {\n        const m = [...matched];\n        return new Set(m.reverse());\n      }\n    } else if (node === this.#root && (a + b) === 1) {\n      if (selectorBranches) {\n        let bool;\n        for (const leaves of selectorBranches) {\n          bool = this._matchLeaves(leaves, node, opt);\n          if (bool) {\n            break;\n          }\n        }\n        if (bool) {\n          matched.add(node);\n        }\n      } else {\n        matched.add(node);\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * collect nth of type\n   * @private\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 {Set.<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 walker = this.#walker;\n      let refNode = this._traverse(parentNode, walker);\n      refNode = walker.firstChild();\n      let l = 0;\n      while (refNode) {\n        l++;\n        refNode = walker.nextSibling();\n      }\n      // :first-of-type, :last-of-type\n      if (a === 0) {\n        if (b > 0 && b <= l) {\n          refNode = this._traverse(parentNode, walker);\n          if (reverse) {\n            refNode = walker.lastChild();\n          } else {\n            refNode = walker.firstChild();\n          }\n          let j = 0;\n          while (refNode) {\n            const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n            if (itemLocalName === localName && itemPrefix === prefix) {\n              if (j === b - 1) {\n                matched.add(refNode);\n                break;\n              }\n              j++;\n            }\n            if (reverse) {\n              refNode = walker.previousSibling();\n            } else {\n              refNode = walker.nextSibling();\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          refNode = this._traverse(parentNode, walker);\n          if (reverse) {\n            refNode = walker.lastChild();\n          } else {\n            refNode = walker.firstChild();\n          }\n          let j = a > 0 ? 0 : b - 1;\n          while (refNode) {\n            const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n            if (itemLocalName === localName && itemPrefix === prefix) {\n              if (j === nth) {\n                matched.add(refNode);\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            if (reverse) {\n              refNode = walker.previousSibling();\n            } else {\n              refNode = walker.nextSibling();\n            }\n          }\n        }\n      }\n      if (reverse && matched.size > 1) {\n        const m = [...matched];\n        return new Set(m.reverse());\n      }\n    } else if (node === this.#root && (a + b) === 1) {\n      matched.add(node);\n    }\n    return matched;\n  }\n\n  /**\n   * match An+B\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - Element node\n   * @param {string} nthName - nth pseudo-class name\n   * @param {object} opt - options\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchAnPlusB(ast, node, nthName, opt) {\n    const {\n      nth: {\n        a,\n        b,\n        name: nthIdentName\n      },\n      selector\n    } = ast;\n    const anbMap = new Map();\n    if (nthIdentName) {\n      if (nthIdentName === 'even') {\n        anbMap.set('a', 2);\n        anbMap.set('b', 0);\n      } else if (nthIdentName === 'odd') {\n        anbMap.set('a', 2);\n        anbMap.set('b', 1);\n      }\n      if (nthName.indexOf('last') > -1) {\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 (nthName.indexOf('last') > -1) {\n        anbMap.set('reverse', true);\n      }\n    }\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, opt);\n      return nodes;\n    } else if (/^nth-(?:last-)?of-type$/.test(nthName)) {\n      const anb = Object.fromEntries(anbMap);\n      const nodes = this._collectNthOfType(anb, node);\n      return nodes;\n    }\n    return new Set();\n  }\n\n  /**\n   * match directionality pseudo-class - :dir()\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - Element node\n   * @returns {?object} - matched node\n   */\n  _matchDirectionPseudoClass(ast, node) {\n    const dir = getDirectionality(node);\n    let res;\n    if (ast.name === dir) {\n      res = node;\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match language pseudo-class - :lang()\n   * @private\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    if (ast.name === EMPTY) {\n      return null;\n    }\n    const astName = unescapeSelector(ast.name);\n    ast.name = astName;\n    let res;\n    if (astName === '*') {\n      if (node.hasAttribute('lang')) {\n        if (node.getAttribute('lang')) {\n          res = node;\n        }\n      } else {\n        let parent = node.parentNode;\n        while (parent) {\n          if (parent.nodeType === ELEMENT_NODE) {\n            if (parent.hasAttribute('lang')) {\n              if (parent.getAttribute('lang')) {\n                res = node;\n              }\n              break;\n            }\n            parent = parent.parentNode;\n          } else {\n            break;\n          }\n        }\n      }\n    } else if (astName) {\n      const langPart = `(?:-${ALPHA_NUM})*`;\n      const regLang = new RegExp(`^(?:\\\\*-)?${ALPHA_NUM}${langPart}$`, 'i');\n      if (regLang.test(astName)) {\n        let regExtendedLang;\n        if (astName.indexOf('-') > -1) {\n          const [langMain, langSub, ...langRest] = astName.split('-');\n          let extendedMain;\n          if (langMain === '*') {\n            extendedMain = `${ALPHA_NUM}${langPart}`;\n          } else {\n            extendedMain = `${langMain}${langPart}`;\n          }\n          const extendedSub = `-${langSub}${langPart}`;\n          const len = langRest.length;\n          let extendedRest = '';\n          if (len) {\n            for (let i = 0; i < len; i++) {\n              extendedRest += `-${langRest[i]}${langPart}`;\n            }\n          }\n          regExtendedLang =\n            new RegExp(`^${extendedMain}${extendedSub}${extendedRest}$`, 'i');\n        } else {\n          regExtendedLang = new RegExp(`^${astName}${langPart}$`, 'i');\n        }\n        if (node.hasAttribute('lang')) {\n          if (regExtendedLang.test(node.getAttribute('lang'))) {\n            res = node;\n          }\n        } else {\n          let parent = node.parentNode;\n          while (parent) {\n            if (parent.nodeType === ELEMENT_NODE) {\n              if (parent.hasAttribute('lang')) {\n                const value = parent.getAttribute('lang');\n                if (regExtendedLang.test(value)) {\n                  res = node;\n                }\n                break;\n              }\n              parent = parent.parentNode;\n            } else {\n              break;\n            }\n          }\n        }\n      }\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match :has() pseudo-class function\n   * @private\n   * @param {Array.<object>} leaves - AST leaves\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {boolean} - result\n   */\n  _matchHasPseudoFunc(leaves, node, opt = {}) {\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      opt.dir = DIR_NEXT;\n      const nodes = this._matchCombinator(twig, node, opt);\n      if (nodes.size) {\n        if (leaves.length) {\n          for (const nextNode of nodes) {\n            bool = this._matchHasPseudoFunc(Object.assign([], leaves),\n              nextNode, opt);\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   * @private\n   * @param {object} astData - AST data\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {?object} - matched node\n   */\n  _matchLogicalPseudoFunc(astData, node, opt = {}) {\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        for (const leaves of branches) {\n          bool = this._matchHasPseudoFunc(Object.assign([], leaves), node, opt);\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      opt.forgive = forgive;\n      const l = twigBranches.length;\n      let bool;\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, opt);\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            opt.dir = DIR_PREV;\n            for (const nextNode of nextNodes) {\n              const m = this._matchCombinator(twig, nextNode, opt);\n              if (m.size) {\n                arr.push(...m);\n              }\n            }\n            if (arr.length) {\n              if (j === 0) {\n                bool = true;\n              } else {\n                nextNodes = new Set(arr);\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   * @private\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   * @param {boolean} [opt.forgive] - forgive unknown pseudo-class\n   * @param {boolean} [opt.warn] - warn unsupported pseudo-class\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchPseudoClassSelector(ast, node, opt = {}) {\n    const { children: astChildren, name: astName } = ast;\n    const { localName, parentNode } = node;\n    const {\n      forgive,\n      warn = this.#warn\n    } = opt;\n    const matched = new Set();\n    // :has(), :is(), :not(), :where()\n    if (REG_LOGICAL_PSEUDO.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, opt);\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 (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n        const nodes = this._matchAnPlusB(branch, node, astName, opt);\n        return nodes;\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 (warn) {\n              const msg = `Unsupported pseudo-class :${astName}()`;\n              throw new DOMException(msg, NOT_SUPPORTED_ERR);\n            }\n            break;\n          }\n          case 'host':\n          case 'host-context': {\n            // ignore\n            break;\n          }\n          default: {\n            if (!forgive) {\n              const msg = `Unknown pseudo-class :${astName}()`;\n              throw new DOMException(msg, SYNTAX_ERR);\n            }\n          }\n        }\n      }\n    } else {\n      const regAnchor = /^a(?:rea)?$/;\n      const regFormCtrl =\n        /^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/;\n      const regFormValidity = /^(?:(?:inpu|selec)t|button|form|textarea)$/;\n      const regInteract = /^d(?:etails|ialog)$/;\n      const regTypeCheck = /^(?:checkbox|radio)$/;\n      const regTypeDate = /^(?:date(?:time-local)?|month|time|week)$/;\n      const regTypeRange =\n        /(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/;\n      const regTypeText = /^(?:(?:emai|te|ur)l|number|password|search|text)$/;\n      switch (astName) {\n        case 'any-link':\n        case 'link': {\n          if (regAnchor.test(localName) && node.hasAttribute('href')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'local-link': {\n          if (regAnchor.test(localName) && node.hasAttribute('href')) {\n            const { href, origin, pathname } = new URL(this.#content.URL);\n            const attrURL = new URL(node.getAttribute('href'), href);\n            if (attrURL.origin === origin && attrURL.pathname === pathname) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'visited': {\n          // prevent fingerprinting\n          break;\n        }\n        case 'target': {\n          const { hash } = new URL(this.#content.URL);\n          if (node.id && hash === `#${node.id}` &&\n              this.#content.contains(node)) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'target-within': {\n          const { hash } = new URL(this.#content.URL);\n          if (hash) {\n            const id = hash.replace(/^#/, '');\n            let current = this.#content.getElementById(id);\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 (!this.#shadow && node === this.#node) {\n              matched.add(node);\n            }\n          } else if (node === this.#content.documentElement) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'focus': {\n          if (node === this.#content.activeElement) {\n            let refNode = node;\n            let focus = true;\n            while (refNode) {\n              if (refNode.hasAttribute('hidden')) {\n                focus = false;\n                break;\n              } else if (refNode.hasAttribute('style')) {\n                const { display, visibility } = refNode.style;\n                focus = !(display === 'none' || visibility === 'hidden');\n                if (!focus) {\n                  break;\n                }\n              }\n              if (refNode.parentNode &&\n                  refNode.parentNode.nodeType === ELEMENT_NODE) {\n                refNode = refNode.parentNode;\n              } else {\n                break;\n              }\n            }\n            if (focus) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'focus-within': {\n          let current = this.#content.activeElement;\n          let active;\n          while (current) {\n            if (current === node) {\n              active = true;\n              break;\n            }\n            current = current.parentNode;\n          }\n          if (active) {\n            let refNode = node;\n            let focus = true;\n            while (refNode) {\n              if (refNode.hasAttribute('hidden')) {\n                focus = false;\n                break;\n              } else if (refNode.hasAttribute('style')) {\n                const { display, visibility } = refNode.style;\n                focus = !(display === 'none' || visibility === 'hidden');\n                if (!focus) {\n                  break;\n                }\n              }\n              if (refNode.parentNode &&\n                  refNode.parentNode.nodeType === ELEMENT_NODE) {\n                refNode = refNode.parentNode;\n              } else {\n                break;\n              }\n            }\n            if (focus) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'open': {\n          if (regInteract.test(localName) && node.hasAttribute('open')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'closed': {\n          if (regInteract.test(localName) && !node.hasAttribute('open')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'disabled': {\n          if (regFormCtrl.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 && parentNode.localName !== 'legend' &&\n                  parent.hasAttribute('disabled')) {\n                matched.add(node);\n              }\n            }\n          }\n          break;\n        }\n        case 'enabled': {\n          if ((regFormCtrl.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 || regTypeDate.test(node.type) ||\n                   regTypeText.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 || regTypeDate.test(node.type) ||\n                   regTypeText.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 (regTypeText.test(node.getAttribute('type'))) {\n                targetNode = node;\n              }\n            } else {\n              targetNode = node;\n            }\n          }\n          if (targetNode && node.value === '' &&\n              node.hasAttribute('placeholder') &&\n              node.getAttribute('placeholder').trim().length) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'checked': {\n          if ((node.checked && localName === 'input' &&\n               node.hasAttribute('type') &&\n               regTypeCheck.test(node.getAttribute('type'))) ||\n              (node.selected && localName === 'option')) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'indeterminate': {\n          if ((node.indeterminate && localName === 'input' &&\n               node.type === 'checkbox') ||\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 = this.#content.documentElement;\n            }\n            const items = parent.getElementsByTagName('input');\n            const l = items.length;\n            let checked;\n            for (let i = 0; i < l; i++) {\n              const item = items[i];\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          const regTypeReset = /^(?:button|reset)$/;\n          const regTypeSubmit = /^(?:image|submit)$/;\n          // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n          if ((localName === 'button' &&\n               !(node.hasAttribute('type') &&\n                 regTypeReset.test(node.getAttribute('type')))) ||\n              (localName === 'input' && node.hasAttribute('type') &&\n               regTypeSubmit.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 walker = this.#walker;\n              let nextNode = this._traverse(form, walker);\n              nextNode = walker.firstChild();\n              while (nextNode && form.contains(nextNode)) {\n                const nodeName = nextNode.localName;\n                let m;\n                if (nodeName === 'button') {\n                  m = !(nextNode.hasAttribute('type') &&\n                    regTypeReset.test(nextNode.getAttribute('type')));\n                } else if (nodeName === 'input') {\n                  m = nextNode.hasAttribute('type') &&\n                    regTypeSubmit.test(nextNode.getAttribute('type'));\n                }\n                if (m) {\n                  if (nextNode === node) {\n                    matched.add(node);\n                  }\n                  break;\n                }\n                nextNode = walker.nextNode();\n              }\n            }\n          // input[type=\"checkbox\"], input[type=\"radio\"]\n          } else if (localName === 'input' && node.hasAttribute('type') &&\n                     regTypeCheck.test(node.getAttribute('type')) &&\n                     (node.checked || node.hasAttribute('checked'))) {\n            matched.add(node);\n          // option\n          } else if (localName === 'option') {\n            let parent = parentNode;\n            let isMultiple = false;\n            while (parent) {\n              if (parent.localName === 'datalist') {\n                break;\n              } else if (parent.localName === 'select') {\n                if (parent.multiple || parent.hasAttribute('multiple')) {\n                  isMultiple = true;\n                }\n                break;\n              }\n              parent = parent.parentNode;\n            }\n            if (isMultiple) {\n              if (node.selected || node.hasAttribute('selected')) {\n                matched.add(node);\n              }\n            } else {\n              const defaultOpt = new Set();\n              const walker = this.#walker;\n              let refNode = this._traverse(parentNode, walker);\n              refNode = walker.firstChild();\n              while (refNode) {\n                if (refNode.selected || refNode.hasAttribute('selected')) {\n                  defaultOpt.add(refNode);\n                  break;\n                }\n                refNode = walker.nextSibling();\n              }\n              if (defaultOpt.size) {\n                if (defaultOpt.has(node)) {\n                  matched.add(node);\n                }\n              }\n            }\n          }\n          break;\n        }\n        case 'valid': {\n          if (regFormValidity.test(localName)) {\n            if (node.checkValidity()) {\n              matched.add(node);\n            }\n          } else if (localName === 'fieldset') {\n            const walker = this.#walker;\n            let refNode = this._traverse(node, walker);\n            refNode = walker.firstChild();\n            let bool;\n            while (refNode && node.contains(refNode)) {\n              if (regFormValidity.test(refNode.localName)) {\n                bool = refNode.checkValidity();\n                if (!bool) {\n                  break;\n                }\n              }\n              refNode = walker.nextNode();\n            }\n            if (bool) {\n              matched.add(node);\n            }\n          }\n          break;\n        }\n        case 'invalid': {\n          if (regFormValidity.test(localName)) {\n            if (!node.checkValidity()) {\n              matched.add(node);\n            }\n          } else if (localName === 'fieldset') {\n            const walker = this.#walker;\n            let refNode = this._traverse(node, walker);\n            refNode = walker.firstChild();\n            let bool;\n            while (refNode && node.contains(refNode)) {\n              if (regFormValidity.test(refNode.localName)) {\n                bool = refNode.checkValidity();\n                if (!bool) {\n                  break;\n                }\n              }\n              refNode = walker.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              regTypeRange.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              regTypeRange.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 (inputType === 'file' || regTypeCheck.test(inputType) ||\n                  regTypeDate.test(inputType) || regTypeText.test(inputType)) {\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 (inputType === 'file' || regTypeCheck.test(inputType) ||\n                  regTypeDate.test(inputType) || regTypeText.test(inputType)) {\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 === this.#content.documentElement) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'empty': {\n          if (node.hasChildNodes()) {\n            const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n            let refNode = walker.firstChild();\n            let bool;\n            while (refNode) {\n              bool = refNode.nodeType !== ELEMENT_NODE &&\n                refNode.nodeType !== TEXT_NODE;\n              if (!bool) {\n                break;\n              }\n              refNode = walker.nextSibling();\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              node === this.#root) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'last-child': {\n          if ((parentNode && node === parentNode.lastElementChild) ||\n              node === this.#root) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'only-child': {\n          if ((parentNode && node === parentNode.firstElementChild &&\n               node === parentNode.lastElementChild) || node === this.#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 (node === this.#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 (node === this.#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 (node === this.#root) {\n            matched.add(node);\n          }\n          break;\n        }\n        case 'host':\n        case 'host-context': {\n          // ignore\n          break;\n        }\n        // legacy pseudo-elements\n        case 'after':\n        case 'before':\n        case 'first-letter':\n        case 'first-line': {\n          if (warn) {\n            const msg = `Unsupported pseudo-element ::${astName}`;\n            throw new DOMException(msg, NOT_SUPPORTED_ERR);\n          }\n          break;\n        }\n        case 'active':\n        case 'autofill':\n        case 'blank':\n        case 'buffering':\n        case 'current':\n        case 'defined':\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 (warn) {\n            const msg = `Unsupported pseudo-class :${astName}`;\n            throw new DOMException(msg, NOT_SUPPORTED_ERR);\n          }\n          break;\n        }\n        default: {\n          if (astName.startsWith('-webkit-')) {\n            if (warn) {\n              const msg = `Unsupported pseudo-class :${astName}`;\n              throw new DOMException(msg, NOT_SUPPORTED_ERR);\n            }\n          } else if (!forgive) {\n            const msg = `Unknown pseudo-class :${astName}`;\n            throw new DOMException(msg, SYNTAX_ERR);\n          }\n        }\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * match shadow host pseudo class\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - DocumentFragment node\n   * @returns {?object} - matched node\n   */\n  _matchShadowHostPseudoClass(ast, node) {\n    const { children: astChildren, name: astName } = ast;\n    let res;\n    if (Array.isArray(astChildren)) {\n      const [branch] = walkAST(astChildren[0]);\n      const [...leaves] = branch;\n      const { host } = node;\n      if (astName === 'host') {\n        let bool;\n        for (const leaf of leaves) {\n          const { type: leafType } = leaf;\n          if (leafType === COMBINATOR) {\n            const css = generateCSS(ast);\n            const msg = `Invalid selector ${css}`;\n            throw new DOMException(msg, SYNTAX_ERR);\n          }\n          bool = this._matchSelector(leaf, host).has(host);\n          if (!bool) {\n            break;\n          }\n        }\n        if (bool) {\n          res = node;\n        }\n      } else if (astName === 'host-context') {\n        let parent = host;\n        let bool;\n        while (parent) {\n          for (const leaf of leaves) {\n            const { type: leafType } = leaf;\n            if (leafType === COMBINATOR) {\n              const css = generateCSS(ast);\n              const msg = `Invalid selector ${css}`;\n              throw new DOMException(msg, SYNTAX_ERR);\n            }\n            bool = this._matchSelector(leaf, parent).has(parent);\n            if (!bool) {\n              break;\n            }\n          }\n          if (bool) {\n            break;\n          } else {\n            parent = parent.parentNode;\n          }\n        }\n        if (bool) {\n          res = node;\n        }\n      }\n    } else if (astName === 'host') {\n      res = node;\n    } else {\n      const msg = `Invalid selector :${astName}`;\n      throw new DOMException(msg, SYNTAX_ERR);\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match selector\n   * @private\n   * @param {object} ast - AST\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} [opt] - options\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchSelector(ast, node, opt) {\n    const { type: astType } = ast;\n    const matched = new Set();\n    if (ast.name === EMPTY) {\n      return matched;\n    }\n    const astName = unescapeSelector(ast.name);\n    ast.name = astName;\n    if (node.nodeType === ELEMENT_NODE) {\n      switch (astType) {\n        case SELECTOR_PSEUDO_ELEMENT: {\n          matchPseudoElementSelector(astName, opt);\n          break;\n        }\n        case SELECTOR_ID: {\n          if (node.id === astName) {\n            matched.add(node);\n          }\n          break;\n        }\n        case SELECTOR_CLASS: {\n          if (node.classList.contains(astName)) {\n            matched.add(node);\n          }\n          break;\n        }\n        case SELECTOR_PSEUDO_CLASS: {\n          const nodes = this._matchPseudoClassSelector(ast, node, opt);\n          return nodes;\n        }\n        default: {\n          const res = matchSelector(ast, node, opt);\n          if (res) {\n            matched.add(res);\n          }\n        }\n      }\n    } else if (this.#shadow && astType === SELECTOR_PSEUDO_CLASS &&\n               node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n      if (astName !== 'has' && REG_LOGICAL_PSEUDO.test(astName)) {\n        const nodes = this._matchPseudoClassSelector(ast, node, opt);\n        return nodes;\n      } else if (REG_SHADOW_HOST.test(astName)) {\n        const res = this._matchShadowHostPseudoClass(ast, node, opt);\n        if (res) {\n          matched.add(res);\n        }\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * match leaves\n   * @private\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    const { attributes, localName, nodeType } = node;\n    let result = this.#results.get(leaves);\n    let bool;\n    if (result && result.has(node)) {\n      const { attr, matched } = result.get(node);\n      if (attributes?.length === attr) {\n        bool = matched;\n      }\n    }\n    if (typeof bool !== 'boolean') {\n      const regForm = /^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;\n      let save;\n      if (nodeType === ELEMENT_NODE && regForm.test(localName)) {\n        save = false;\n      } else {\n        save = true;\n      }\n      for (const leaf of leaves) {\n        const { name, type: leafType } = leaf;\n        const leafName = unescapeSelector(name);\n        leaf.name = leafName;\n        if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n          save = false;\n        }\n        bool = this._matchSelector(leaf, node, opt).has(node);\n        if (!bool) {\n          break;\n        }\n      }\n      if (save) {\n        if (!result) {\n          result = new WeakMap();\n        }\n        result.set(node, {\n          attr: attributes?.length,\n          matched: bool\n        });\n        this.#results.set(leaves, result);\n      }\n    }\n    return !!bool;\n  }\n\n  /**\n   * match HTML collection\n   * @private\n   * @param {object} items - HTML collection\n   * @param {object} opt - options\n   * @returns {Set.<object>} - matched nodes\n   */\n  _matchHTMLCollection(items, opt = {}) {\n    const { compound, filterLeaves } = opt;\n    const nodes = new Set();\n    const l = items.length;\n    if (l) {\n      if (compound) {\n        for (let i = 0; i < l; i++) {\n          const item = items[i];\n          const bool = this._matchLeaves(filterLeaves, item, opt);\n          if (bool) {\n            nodes.add(item);\n          }\n        }\n      } else {\n        const arr = [].slice.call(items);\n        return new Set(arr);\n      }\n    }\n    return nodes;\n  }\n\n  /**\n   * find descendant nodes\n   * @private\n   * @param {Array.<object>} leaves - AST leaves\n   * @param {object} baseNode - base Element node\n   * @param {object} opt - options\n   * @returns {object} - collection of nodes and pending state\n   */\n  _findDescendantNodes(leaves, baseNode, opt) {\n    const [leaf, ...filterLeaves] = leaves;\n    const compound = filterLeaves.length > 0;\n    const { type: leafType } = leaf;\n    const leafName = unescapeSelector(leaf.name);\n    leaf.name = leafName;\n    let nodes = new Set();\n    let pending = false;\n    if (this.#shadow) {\n      pending = true;\n    } else {\n      switch (leafType) {\n        case SELECTOR_PSEUDO_ELEMENT: {\n          matchPseudoElementSelector(leafName, opt);\n          break;\n        }\n        case SELECTOR_ID: {\n          if (this.#root.nodeType === ELEMENT_NODE) {\n            pending = true;\n          } else {\n            const node = this.#root.getElementById(leafName);\n            if (node && node !== baseNode && baseNode.contains(node)) {\n              if (compound) {\n                const bool = this._matchLeaves(filterLeaves, node, opt);\n                if (bool) {\n                  nodes.add(node);\n                }\n              } else {\n                nodes.add(node);\n              }\n            }\n          }\n          break;\n        }\n        case SELECTOR_CLASS: {\n          const items = baseNode.getElementsByClassName(leafName);\n          nodes = this._matchHTMLCollection(items, {\n            compound,\n            filterLeaves\n          });\n          break;\n        }\n        case SELECTOR_TYPE: {\n          if (this.#content.contentType === 'text/html' &&\n              !/[*|]/.test(leafName)) {\n            const items = baseNode.getElementsByTagName(leafName);\n            nodes = this._matchHTMLCollection(items, {\n              compound,\n              filterLeaves\n            });\n          } else {\n            pending = true;\n          }\n          break;\n        }\n        default: {\n          pending = true;\n        }\n      }\n    }\n    return {\n      nodes,\n      pending\n    };\n  }\n\n  /**\n   * match combinator\n   * @private\n   * @param {object} twig - twig\n   * @param {object} node - Element node\n   * @param {object} opt - option\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchCombinator(twig, node, opt = {}) {\n    const { combo, leaves } = twig;\n    const { name: comboName } = combo;\n    const { parentNode } = node;\n    const { dir } = opt;\n    const matched = new Set();\n    if (dir === DIR_NEXT) {\n      switch (comboName) {\n        case '+': {\n          const refNode = node.nextElementSibling;\n          if (refNode) {\n            const bool = this._matchLeaves(leaves, refNode, opt);\n            if (bool) {\n              matched.add(refNode);\n            }\n          }\n          break;\n        }\n        case '~': {\n          if (parentNode) {\n            const walker = this._createTreeWalker(parentNode);\n            let refNode = this._traverse(node, walker);\n            refNode = walker.nextSibling();\n            while (refNode) {\n              const bool = this._matchLeaves(leaves, refNode, opt);\n              if (bool) {\n                matched.add(refNode);\n              }\n              refNode = walker.nextSibling();\n            }\n          }\n          break;\n        }\n        case '>': {\n          const walker = this._createTreeWalker(node);\n          let refNode = this._traverse(node, walker);\n          refNode = walker.firstChild();\n          while (refNode) {\n            const bool = this._matchLeaves(leaves, refNode, opt);\n            if (bool) {\n              matched.add(refNode);\n            }\n            refNode = walker.nextSibling();\n          }\n          break;\n        }\n        case ' ':\n        default: {\n          const { nodes, pending } = this._findDescendantNodes(leaves, node);\n          if (nodes.size) {\n            return nodes;\n          }\n          if (pending) {\n            const walker = this._createTreeWalker(node);\n            let refNode = this._traverse(node, walker);\n            refNode = walker.nextNode();\n            while (refNode && node.contains(refNode)) {\n              const bool = this._matchLeaves(leaves, refNode, opt);\n              if (bool) {\n                matched.add(refNode);\n              }\n              refNode = walker.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, opt);\n            if (bool) {\n              matched.add(refNode);\n            }\n          }\n          break;\n        }\n        case '~': {\n          if (parentNode) {\n            const walker = this._createTreeWalker(parentNode);\n            let refNode = this._traverse(parentNode, walker);\n            refNode = walker.firstChild();\n            while (refNode) {\n              if (refNode === node) {\n                break;\n              } else {\n                const bool = this._matchLeaves(leaves, refNode, opt);\n                if (bool) {\n                  matched.add(refNode);\n                }\n              }\n              refNode = walker.nextSibling();\n            }\n          }\n          break;\n        }\n        case '>': {\n          if (parentNode) {\n            const bool = this._matchLeaves(leaves, parentNode, opt);\n            if (bool) {\n              matched.add(parentNode);\n            }\n          }\n          break;\n        }\n        case ' ':\n        default: {\n          const arr = [];\n          let refNode = parentNode;\n          while (refNode) {\n            const bool = this._matchLeaves(leaves, refNode, opt);\n            if (bool) {\n              arr.push(refNode);\n            }\n            refNode = refNode.parentNode;\n          }\n          if (arr.length) {\n            return new Set(arr.reverse());\n          }\n        }\n      }\n    }\n    return matched;\n  }\n\n  /**\n   * find matched node from #qswalker\n   * @private\n   * @param {Array.<object>} leaves - AST leaves\n   * @param {object} [opt] - options\n   * @param {object} [opt.node] - node to start from\n   * @returns {?object} - matched node\n   */\n  _findNode(leaves, opt) {\n    const { node } = opt;\n    let refNode = this._traverse(node, this.#qswalker);\n    let matchedNode;\n    if (refNode) {\n      if (refNode.nodeType !== ELEMENT_NODE) {\n        refNode = this.#qswalker.nextNode();\n      } else if (refNode === node) {\n        if (refNode !== this.#root) {\n          refNode = this.#qswalker.nextNode();\n        }\n      }\n      while (refNode) {\n        const matched = this._matchLeaves(leaves, refNode, {\n          warn: this.#warn\n        });\n        if (matched) {\n          matchedNode = refNode;\n          break;\n        }\n        refNode = this.#qswalker.nextNode();\n      }\n    }\n    return matchedNode ?? null;\n  }\n\n  /**\n   * match self\n   * @private\n   * @param {Array} leaves - AST leaves\n   * @returns {Array} - [nodes, filtered]\n   */\n  _matchSelf(leaves) {\n    const nodes = [];\n    const bool = this._matchLeaves(leaves, this.#node, {\n      warn: this.#warn\n    });\n    let filtered = false;\n    if (bool) {\n      nodes.push(this.#node);\n      filtered = true;\n    }\n    return [nodes, filtered];\n  }\n\n  /**\n   * find lineal\n   * @private\n   * @param {Array} leaves - AST leaves\n   * @param {object} opt - options\n   * @returns {Array} - [nodes, filtered]\n   */\n  _findLineal(leaves, opt = {}) {\n    const { complex } = opt;\n    const nodes = [];\n    let bool = this._matchLeaves(leaves, this.#node, {\n      warn: this.#warn\n    });\n    let filtered = false;\n    if (bool) {\n      nodes.push(this.#node);\n      filtered = true;\n    }\n    if (!bool || complex) {\n      let refNode = this.#node.parentNode;\n      while (refNode) {\n        bool = this._matchLeaves(leaves, refNode, {\n          warn: this.#warn\n        });\n        if (bool) {\n          nodes.push(refNode);\n          filtered = true;\n        }\n        if (refNode.parentNode) {\n          refNode = refNode.parentNode;\n        } else {\n          break;\n        }\n      }\n    }\n    return [nodes, filtered];\n  }\n\n  /**\n   * find first\n   * @private\n   * @param {Array} leaves - AST leaves\n   * @returns {Array} - [nodes, filtered]\n   */\n  _findFirst(leaves) {\n    const nodes = [];\n    const node = this._findNode(leaves, {\n      node: this.#node\n    });\n    let filtered = false;\n    if (node) {\n      nodes.push(node);\n      filtered = true;\n    }\n    return [nodes, filtered];\n  }\n\n  /**\n   * find from HTML collection\n   * @private\n   * @param {object} items - HTML collection\n   * @param {object} opt - options\n   * @param {boolean} [opt.compound] - compound selector\n   * @param {Array} [opt.filterLeaves] - filter leaves\n   * @returns {Array} - [nodes, filtered]\n   */\n  _findFromHTMLCollection(items, opt = {}) {\n    const { complex, compound, filterLeaves, targetType } = opt;\n    let nodes = [];\n    let filtered = false;\n    let collected = false;\n    const l = items.length;\n    if (l) {\n      if (this.#node.nodeType === ELEMENT_NODE) {\n        for (let i = 0; i < l; i++) {\n          const node = items[i];\n          if (node !== this.#node &&\n              (this.#node.contains(node) || node.contains(this.#node))) {\n            if (compound) {\n              const bool = this._matchLeaves(filterLeaves, node, {\n                warn: this.#warn\n              });\n              if (bool) {\n                nodes.push(node);\n                filtered = true;\n                if (targetType === TARGET_FIRST) {\n                  break;\n                }\n              }\n            } else {\n              nodes.push(node);\n              filtered = true;\n              if (targetType === TARGET_FIRST) {\n                break;\n              }\n            }\n          }\n        }\n      } else if (complex) {\n        if (compound) {\n          for (let i = 0; i < l; i++) {\n            const node = items[i];\n            const bool = this._matchLeaves(filterLeaves, node, {\n              warn: this.#warn\n            });\n            if (bool) {\n              nodes.push(node);\n              filtered = true;\n              if (targetType === TARGET_FIRST) {\n                break;\n              }\n            }\n          }\n        } else {\n          nodes = [].slice.call(items);\n          filtered = true;\n          collected = true;\n        }\n      } else if (compound) {\n        for (let i = 0; i < l; i++) {\n          const node = items[i];\n          const bool = this._matchLeaves(filterLeaves, node, {\n            warn: this.#warn\n          });\n          if (bool) {\n            nodes.push(node);\n            filtered = true;\n            if (targetType === TARGET_FIRST) {\n              break;\n            }\n          }\n        }\n      } else {\n        nodes = [].slice.call(items);\n        filtered = true;\n        collected = true;\n      }\n    }\n    return [nodes, filtered, collected];\n  }\n\n  /**\n   * find entry nodes\n   * @private\n   * @param {object} twig - twig\n   * @param {string} targetType - target type\n   * @param {boolean} complex - complex selector\n   * @returns {object} - collection of nodes etc.\n   */\n  _findEntryNodes(twig, targetType, complex) {\n    const { leaves } = twig;\n    const [leaf, ...filterLeaves] = leaves;\n    const compound = filterLeaves.length > 0;\n    const { type: leafType } = leaf;\n    const leafName = unescapeSelector(leaf.name);\n    leaf.name = leafName;\n    let nodes = [];\n    let collected = false;\n    let filtered = false;\n    let pending = false;\n    switch (leafType) {\n      case SELECTOR_PSEUDO_ELEMENT: {\n        matchPseudoElementSelector(leafName, {\n          warn: this.#warn\n        });\n        break;\n      }\n      case SELECTOR_ID: {\n        if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (targetType === TARGET_FIRST &&\n                   this.#root.nodeType !== ELEMENT_NODE) {\n          const node = this.#root.getElementById(leafName);\n          if (node) {\n            if (compound) {\n              const bool = this._matchLeaves(filterLeaves, node, {\n                warn: this.#warn\n              });\n              if (bool) {\n                nodes.push(node);\n                filtered = true;\n              }\n            } else {\n              nodes.push(node);\n              filtered = true;\n            }\n          }\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n        break;\n      }\n      case SELECTOR_CLASS: {\n        if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (this.#root.nodeType === DOCUMENT_NODE) {\n          const items = this.#root.getElementsByClassName(leafName);\n          if (items.length) {\n            [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n              complex,\n              compound,\n              filterLeaves,\n              targetType\n            });\n          }\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n        break;\n      }\n      case SELECTOR_TYPE: {\n        if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (this.#content.contentType === 'text/html' &&\n                   this.#root.nodeType === DOCUMENT_NODE &&\n                   !/[*|]/.test(leafName)) {\n          const items = this.#root.getElementsByTagName(leafName);\n          if (items.length) {\n            [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n              complex,\n              compound,\n              filterLeaves,\n              targetType\n            });\n          }\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n        break;\n      }\n      default: {\n        if (targetType !== TARGET_LINEAL && REG_SHADOW_HOST.test(leafName)) {\n          if (this.#shadow &&\n              this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n            const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n            if (node) {\n              nodes.push(node);\n              filtered = true;\n            }\n          }\n        } else if (targetType === TARGET_SELF) {\n          [nodes, filtered] = this._matchSelf(leaves);\n        } else if (targetType === TARGET_LINEAL) {\n          [nodes, filtered] = this._findLineal(leaves, {\n            complex\n          });\n        } else if (targetType === TARGET_FIRST) {\n          [nodes, filtered] = this._findFirst(leaves);\n        } else {\n          pending = true;\n        }\n      }\n    }\n    return {\n      collected,\n      compound,\n      filtered,\n      nodes,\n      pending\n    };\n  }\n\n  /**\n   * get entry twig\n   * @private\n   * @param {Array.<object>} branch - AST branch\n   * @param {string} targetType - target type\n   * @returns {object} - direction and twig\n   */\n  _getEntryTwig(branch, targetType) {\n    const branchLen = branch.length;\n    const complex = branchLen > 1;\n    const firstTwig = branch[0];\n    let dir;\n    let twig;\n    if (complex) {\n      const {\n        combo: firstCombo,\n        leaves: [{\n          name: firstName,\n          type: firstType\n        }]\n      } = firstTwig;\n      const lastTwig = branch[branchLen - 1];\n      const {\n        leaves: [{\n          name: lastName,\n          type: lastType\n        }]\n      } = lastTwig;\n      if (lastType === SELECTOR_PSEUDO_ELEMENT || lastType === SELECTOR_ID) {\n        dir = DIR_PREV;\n        twig = lastTwig;\n      } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n                 firstType === SELECTOR_ID) {\n        dir = DIR_NEXT;\n        twig = firstTwig;\n      } else if (targetType === TARGET_ALL) {\n        if (firstName === '*' && firstType === SELECTOR_TYPE) {\n          dir = DIR_PREV;\n          twig = lastTwig;\n        } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n          dir = DIR_NEXT;\n          twig = firstTwig;\n        } else if (branchLen === 2) {\n          const { name: comboName } = firstCombo;\n          if (/^[+~]$/.test(comboName)) {\n            dir = DIR_PREV;\n            twig = lastTwig;\n          } else {\n            dir = DIR_NEXT;\n            twig = firstTwig;\n          }\n        } else {\n          dir = DIR_NEXT;\n          twig = firstTwig;\n        }\n      } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n        dir = DIR_NEXT;\n        twig = firstTwig;\n      } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n        dir = DIR_PREV;\n        twig = lastTwig;\n      } else {\n        let bool;\n        for (const { combo, leaves: [leaf] } of branch) {\n          const { type: leafType } = leaf;\n          const leafName = unescapeSelector(leaf.name);\n          leaf.name = leafName;\n          if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n            bool = false;\n            break;\n          }\n          if (!bool && combo) {\n            const { name: comboName } = combo;\n            if (/^[+~]$/.test(comboName)) {\n              bool = true;\n            }\n          }\n        }\n        if (bool) {\n          dir = DIR_NEXT;\n          twig = firstTwig;\n        } else {\n          dir = DIR_PREV;\n          twig = lastTwig;\n        }\n      }\n    } else {\n      dir = DIR_PREV;\n      twig = firstTwig;\n    }\n    return {\n      complex,\n      dir,\n      twig\n    };\n  }\n\n  /**\n   * collect nodes\n   * @private\n   * @param {string} targetType - target type\n   * @returns {Array.<Array.<object|undefined>>} - #ast and #nodes\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 { complex, dir, twig } = this._getEntryTwig(branch, targetType);\n        const {\n          collected, compound, filtered, nodes, pending\n        } = this._findEntryNodes(twig, targetType, complex);\n        if (nodes.length) {\n          this.#ast[i].find = true;\n          this.#nodes[i] = nodes;\n        } else if (pending) {\n          pendingItems.add(new Map([\n            ['index', i],\n            ['twig', twig]\n          ]));\n        }\n        this.#ast[i].collected = collected;\n        this.#ast[i].dir = dir;\n        this.#ast[i].filtered = filtered || !compound;\n        i++;\n      }\n      if (pendingItems.size) {\n        let node;\n        let walker;\n        if (this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE) {\n          node = this.#node;\n          walker = this.#qswalker;\n        } else {\n          node = this.#root;\n          walker = this.#walker;\n        }\n        let nextNode = this._traverse(node, walker);\n        while (nextNode) {\n          let bool = false;\n          if (this.#node.nodeType === ELEMENT_NODE) {\n            if (nextNode === this.#node) {\n              bool = true;\n            } else {\n              bool = this.#node.contains(nextNode);\n            }\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                warn: this.#warn\n              });\n              if (matched) {\n                const index = pendingItem.get('index');\n                this.#ast[index].filtered = true;\n                this.#ast[index].find = true;\n                this.#nodes[index].push(nextNode);\n              }\n            }\n          }\n          if (nextNode !== walker.currentNode) {\n            nextNode = this._traverse(nextNode, walker);\n          }\n          nextNode = walker.nextNode();\n        }\n      }\n    } else {\n      let i = 0;\n      for (const { branch } of ast) {\n        const twig = branch[branch.length - 1];\n        const complex = branch.length > 1;\n        const {\n          compound, filtered, nodes\n        } = this._findEntryNodes(twig, targetType, complex);\n        if (nodes.length) {\n          this.#ast[i].find = true;\n          this.#nodes[i] = nodes;\n        }\n        this.#ast[i].dir = DIR_PREV;\n        this.#ast[i].filtered = filtered || !compound;\n        i++;\n      }\n    }\n    return [\n      this.#ast,\n      this.#nodes\n    ];\n  }\n\n  /**\n   * get combined nodes\n   * @private\n   * @param {object} twig - twig\n   * @param {object} nodes - collection of nodes\n   * @param {string} dir - direction\n   * @returns {Array.<object>} - collection of matched nodes\n   */\n  _getCombinedNodes(twig, nodes, dir) {\n    const arr = [];\n    for (const node of nodes) {\n      const matched = this._matchCombinator(twig, node, {\n        dir,\n        warn: this.#warn\n      });\n      if (matched.size) {\n        arr.push(...matched);\n      }\n    }\n    if (arr.length) {\n      return new Set(arr);\n    }\n    return new Set();\n  }\n\n  /**\n   * match node to next direction\n   * @private\n   * @param {Array} branch - branch\n   * @param {Set.<object>} nodes - collection of Element node\n   * @param {object} opt - option\n   * @param {object} opt.combo - combo\n   * @returns {?object} - matched node\n   */\n  _matchNodeNext(branch, nodes, opt) {\n    const { combo, index } = opt;\n    const { combo: nextCombo, leaves } = branch[index];\n    const twig = {\n      combo,\n      leaves\n    };\n    const nextNodes = this._getCombinedNodes(twig, nodes, DIR_NEXT);\n    let res;\n    if (nextNodes.size) {\n      if (index === branch.length - 1) {\n        const [nextNode] = sortNodes(nextNodes);\n        res = nextNode;\n      } else {\n        res = this._matchNodeNext(branch, nextNodes, {\n          combo: nextCombo,\n          index: index + 1\n        });\n      }\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match node to previous direction\n   * @private\n   * @param {Array} branch - branch\n   * @param {object} node - Element node\n   * @param {object} opt - option\n   * @param {number} opt.index - index\n   * @returns {?object} - node\n   */\n  _matchNodePrev(branch, node, opt) {\n    const { index } = opt;\n    const twig = branch[index];\n    const nodes = new Set([node]);\n    const nextNodes = this._getCombinedNodes(twig, nodes, DIR_PREV);\n    let res;\n    if (nextNodes.size) {\n      if (index === 0) {\n        res = node;\n      } else {\n        for (const nextNode of nextNodes) {\n          const matched = this._matchNodePrev(branch, nextNode, {\n            index: index - 1\n          });\n          if (matched) {\n            return node;\n          }\n        }\n      }\n    }\n    return res ?? null;\n  }\n\n  /**\n   * match nodes\n   * @private\n   * @param {string} targetType - target type\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _matchNodes(targetType) {\n    const [[...branches], nodes] = this._collectNodes(targetType);\n    const l = branches.length;\n    let res = new Set();\n    for (let i = 0; i < l; i++) {\n      const { branch, collected, dir, find } = branches[i];\n      const branchLen = branch.length;\n      if (branchLen && find) {\n        const entryNodes = nodes[i];\n        const entryNodesLen = entryNodes.length;\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 (let j = 0; j < entryNodesLen; j++) {\n              const node = entryNodes[j];\n              if (node !== this.#node && this.#node.contains(node)) {\n                res.add(node);\n                if (targetType !== TARGET_ALL) {\n                  break;\n                }\n              }\n            }\n          } else if (targetType === TARGET_ALL) {\n            if (res.size) {\n              const n = [...res];\n              res = new Set([...n, ...entryNodes]);\n              this.#sort = true;\n            } else {\n              res = new Set(entryNodes);\n            }\n          } else {\n            const [node] = entryNodes;\n            res.add(node);\n          }\n        } else if (targetType === TARGET_ALL) {\n          if (dir === DIR_NEXT) {\n            let { combo } = branch[0];\n            for (const node of entryNodes) {\n              let nextNodes = new Set([node]);\n              for (let j = 1; j < branchLen; j++) {\n                const { combo: nextCombo, leaves } = branch[j];\n                const twig = {\n                  combo,\n                  leaves\n                };\n                nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n                if (nextNodes.size) {\n                  if (j === lastIndex) {\n                    if (res.size) {\n                      const n = [...res];\n                      res = new Set([...n, ...nextNodes]);\n                      this.#sort = true;\n                    } else {\n                      res = nextNodes;\n                    }\n                  } else {\n                    combo = nextCombo;\n                  }\n                } else {\n                  break;\n                }\n              }\n            }\n          } else {\n            for (const node of entryNodes) {\n              let nextNodes = new Set([node]);\n              for (let j = lastIndex - 1; j >= 0; j--) {\n                const twig = branch[j];\n                nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n                if (nextNodes.size) {\n                  if (j === 0) {\n                    res.add(node);\n                    if (branchLen > 1 && res.size > 1) {\n                      this.#sort = true;\n                    }\n                  }\n                } else {\n                  break;\n                }\n              }\n            }\n          }\n        } else if (targetType === TARGET_FIRST && dir === DIR_NEXT) {\n          const { combo: entryCombo } = branch[0];\n          let matched;\n          for (const node of entryNodes) {\n            matched = this._matchNodeNext(branch, new Set([node]), {\n              combo: entryCombo,\n              index: 1\n            });\n            if (matched) {\n              res.add(matched);\n              break;\n            }\n          }\n          if (!matched && !collected) {\n            const { leaves: entryLeaves } = branch[0];\n            const [entryNode] = entryNodes;\n            let refNode = this._findNode(entryLeaves, {\n              node: entryNode\n            });\n            while (refNode) {\n              matched = this._matchNodeNext(branch, new Set([refNode]), {\n                combo: entryCombo,\n                index: 1\n              });\n              if (matched) {\n                res.add(matched);\n                break;\n              }\n              refNode = this._findNode(entryLeaves, {\n                node: refNode\n              });\n            }\n          }\n        } else {\n          let matched;\n          for (const node of entryNodes) {\n            matched = this._matchNodePrev(branch, node, {\n              index: lastIndex - 1\n            });\n            if (matched) {\n              res.add(node);\n              break;\n            }\n          }\n          if (!matched && !collected && targetType === TARGET_FIRST) {\n            const { leaves: entryLeaves } = branch[lastIndex];\n            const [entryNode] = entryNodes;\n            let refNode = this._findNode(entryLeaves, {\n              node: entryNode\n            });\n            while (refNode) {\n              matched = this._matchNodePrev(branch, refNode, {\n                index: lastIndex - 1\n              });\n              if (matched) {\n                res.add(refNode);\n                break;\n              }\n              refNode = this._findNode(entryLeaves, {\n                node: refNode\n              });\n            }\n          }\n        }\n      }\n    }\n    return res;\n  }\n\n  /**\n   * find matched nodes\n   * @private\n   * @param {string} targetType - target type\n   * @returns {Set.<object>} - collection of matched nodes\n   */\n  _find(targetType) {\n    if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n      this._prepareQuerySelectorWalker();\n    }\n    const nodes = this._matchNodes(targetType);\n    return nodes;\n  }\n\n  /**\n   * matches\n   * @param {string} selector - CSS selector\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {boolean} - `true` if matched `false` otherwise\n   */\n  matches(selector, node, opt) {\n    let res;\n    try {\n      if (node?.nodeType !== ELEMENT_NODE) {\n        const msg = `Unexpected node ${node?.nodeName}`;\n        throw new TypeError(msg);\n      }\n      if (filterSelector(selector)) {\n        res = this.#nwsapi.match(selector, node);\n      } else {\n        this._setup(selector, node, opt);\n        const nodes = this._find(TARGET_SELF);\n        res = nodes.size;\n      }\n    } catch (e) {\n      this._onError(e);\n    }\n    return !!res;\n  }\n\n  /**\n   * closest\n   * @param {string} selector - CSS selector\n   * @param {object} node - Element node\n   * @param {object} opt - options\n   * @returns {?object} - matched node\n   */\n  closest(selector, node, opt) {\n    let res;\n    try {\n      if (node?.nodeType !== ELEMENT_NODE) {\n        const msg = `Unexpected node ${node?.nodeName}`;\n        throw new TypeError(msg);\n      }\n      if (filterSelector(selector)) {\n        res = this.#nwsapi.closest(selector, node);\n      } else {\n        this._setup(selector, node, opt);\n        const nodes = this._find(TARGET_LINEAL);\n        if (nodes.size) {\n          let refNode = this.#node;\n          while (refNode) {\n            if (nodes.has(refNode)) {\n              res = refNode;\n              break;\n            }\n            refNode = refNode.parentNode;\n          }\n        }\n      }\n    } catch (e) {\n      this._onError(e);\n    }\n    return res ?? null;\n  }\n\n  /**\n   * query selector\n   * @param {string} selector - CSS selector\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} opt - options\n   * @returns {?object} - matched node\n   */\n  querySelector(selector, node, opt) {\n    let res;\n    try {\n      this._setup(selector, node, opt);\n      if (this.#document === this.#content && !this.#descendant &&\n          filterSelector(selector)) {\n        res = this.#nwsapi.first(selector, node);\n      } else {\n        const nodes = this._find(TARGET_FIRST);\n        nodes.delete(this.#node);\n        if (nodes.size) {\n          [res] = sortNodes(nodes);\n        }\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   * @param {string} selector - CSS selector\n   * @param {object} node - Document, DocumentFragment, Element node\n   * @param {object} opt - options\n   * @returns {Array.<object|undefined>} - collection of matched nodes\n   */\n  querySelectorAll(selector, node, opt) {\n    let res;\n    try {\n      this._setup(selector, node, opt);\n      if (this.#document === this.#content && !this.#descendant &&\n          filterSelector(selector)) {\n        res = this.#nwsapi.select(selector, node);\n      } else {\n        const nodes = this._find(TARGET_ALL);\n        nodes.delete(this.#node);\n        if (nodes.size) {\n          if (this.#sort) {\n            res = sortNodes(nodes);\n          } else {\n            res = [...nodes];\n          }\n        }\n      }\n    } catch (e) {\n      this._onError(e);\n    }\n    return res ?? [];\n  }\n};\n"],
+  "mappings": "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",
   "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_is_potential_custom_element_name", "import_nwsapi", "import_dom_util", "import_matcher", "import_parser", "import_constant", "DIR_NEXT", "DIR_PREV", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "#ast", "#cache", "#content", "#descendant", "#document", "#node", "#nodes", "#noexcept", "#nwsapi", "#qswalker", "#results", "#root", "#shadow", "#sort", "#walker", "#walkers", "#warn", "#window", "window", "nwsapi", "e", "selector", "node", "opt", "noexcept", "warn", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "descendant", "items", "branch", "leaves", "nextItem", "msg", "itemName", "walker", "refNode", "current", "anb", "b", "reverse", "parentNode", "matched", "selectorBranches", "selectorNodes", "bool", "nth", "j", "m", "a", "localName", "prefix", "itemLocalName", "itemPrefix", "nthName", "nthIdentName", "anbMap", "dir", "res", "astName", "parent", "langPart", "regExtendedLang", "langMain", "langSub", "langRest", "extendedMain", "extendedSub", "len", "extendedRest", "value", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "twigBranches", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "regAnchor", "regFormCtrl", "regFormValidity", "regInteract", "regTypeCheck", "regTypeDate", "regTypeRange", "regTypeText", "href", "origin", "pathname", "attrURL", "hash", "id", "focus", "display", "visibility", "active", "isCustomElementName", "targetNode", "nodeName", "checked", "regTypeReset", "regTypeSubmit", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "host", "astType", "attributes", "nodeType", "result", "attr", "regForm", "save", "name", "leafName", "compound", "filterLeaves", "baseNode", "pending", "comboName", "matchedNode", "filtered", "complex", "targetType", "collected", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItems", "pendingItem", "index", "nextCombo", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode"]
 }
diff --git a/dist/cjs/js/parser.js b/dist/cjs/js/parser.js
index eea13cfe..b0cf15ca 100644
--- a/dist/cjs/js/parser.js
+++ b/dist/cjs/js/parser.js
@@ -1,3 +1,3 @@
-var g=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var O=(s,t)=>{for(var r in t)g(s,r,{get:t[r],enumerable:!0})},x=(s,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of A(t))!y.call(s,n)&&n!==r&&g(s,n,{get:()=>t[n],enumerable:!(i=S(t,n))||i.enumerable});return s};var T=s=>x(g({},"__esModule",{value:!0}),s);var C={};O(C,{filterSelector:()=>L,generateCSS:()=>u.generate,parseAstName:()=>I,parseSelector:()=>h,preprocess:()=>E,sortAST:()=>$,unescapeSelector:()=>m,walkAST:()=>_});module.exports=T(C);var w=require("css-tree"),e=require("./constant.js"),u=require("css-tree");const m=(s="")=>{if(typeof s=="string"&&s.indexOf("\\",0)>=0){const t=s.split("\\"),r=t.length;for(let i=1;i<r;i++){let n=t[i];if(n===""&&i===r-1)n=e.U_FFFD;else{const c=/^([\da-f]{1,6}\s?)/i.exec(n);if(c){const[,a]=c;let l;try{const o=parseInt("D800",e.HEX),p=parseInt("DFFF",e.HEX),d=parseInt(a,e.HEX);d===0||d>=o&&d<=p?l=e.U_FFFD:l=String.fromCodePoint(d)}catch{l=e.U_FFFD}let f="";n.length>a.length&&(f=n.substring(a.length)),n=`${l}${f}`}else/^[\n\r\f]/.test(n)&&(n="\\"+n)}t[i]=n}s=t.join("")}return s},E=(...s)=>{if(!s.length)throw new TypeError("1 argument required, but only 0 present.");let[t]=s;if(typeof t=="string"){let r=0;for(;r>=0&&(r=t.indexOf("#",r),!(r<0));){const i=t.substring(0,r+1);let n=t.substring(r+1);const c=n.codePointAt(0);if(c===e.BIT_HYPHEN){if(/^\d$/.test(n.substring(1,2)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR)}else if(c>e.BIT_FFFF){const a=`\\${c.toString(e.HEX)} `;n.length===e.DUO?n=a:n=`${a}${n.substring(e.DUO)}`}t=`${i}${n}`,r++}t=t.replace(/\f|\r\n?/g,`
-`).replace(/[\0\uD800-\uDFFF]|\\$/g,e.U_FFFD)}else if(t==null)t=Object.prototype.toString.call(t).slice(e.TYPE_FROM,e.TYPE_TO).toLowerCase();else if(Array.isArray(t))t=t.join(",");else if(Object.prototype.hasOwnProperty.call(t,"toString"))t=t.toString();else throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);return t},h=s=>{if(s=E(s),/^$|^\s*>|,\s*$/.test(s))throw new DOMException(`Invalid selector ${s}`,e.SYNTAX_ERR);let t;try{const r=(0,w.parse)(s,{context:"selectorList",parseCustomProperty:!0});t=(0,w.toPlainObject)(r)}catch(r){const i=/(:lang\(\s*("[A-Za-z\d\-*]+")\s*\))/;if(r.message==="Identifier is expected"&&i.test(s)){const[,n,c]=i.exec(s),a=c.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,""),l=n.replace(c,a);t=h(s.replace(n,l))}else if(r.message==='"]" is expected'&&!s.endsWith("]"))t=h(`${s}]`);else if(r.message==='")" is expected'&&!s.endsWith(")"))t=h(`${s})`);else throw new DOMException(r.message,e.SYNTAX_ERR)}return t},_=(s={})=>{const t=new Set;let r;return(0,w.walk)(s,{enter:n=>{n.type===e.SELECTOR?t.add(n.children):(n.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(n.name)||n.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(n.name))&&(r=!0)}}),r&&(0,w.findAll)(s,(n,c,a)=>{if(a){if(n.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(n.name)){const l=a.filter(f=>{const{name:o,type:p}=f;return p===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(o)});for(const{children:f}of l)for(const{children:o}of f)for(const{children:p}of o)t.has(p)&&t.delete(p)}else if(n.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(n.name)){const l=a.filter(f=>{const{name:o,type:p}=f;return p===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(o)});for(const{children:f}of l)for(const{children:o}of f)t.has(o)&&t.delete(o)}}}),[...t]},$=s=>{const t=[...s];if(t.length>1){const r=new Map([[e.SELECTOR_PSEUDO_ELEMENT,e.BIT_01],[e.SELECTOR_ID,e.BIT_02],[e.SELECTOR_CLASS,e.BIT_04],[e.SELECTOR_TYPE,e.BIT_08],[e.SELECTOR_ATTR,e.BIT_16],[e.SELECTOR_PSEUDO_CLASS,e.BIT_32]]);t.sort((i,n)=>{const{type:c}=i,{type:a}=n,l=r.get(c),f=r.get(a);let o;return l===f?o=0:l>f?o=1:o=-1,o})}return t},I=s=>{let t,r;if(s&&typeof s=="string")s.indexOf("|")>-1?[t,r]=s.split("|"):(t="*",r=s);else throw new DOMException(`Invalid selector ${s}`,e.SYNTAX_ERR);return{prefix:t,localName:r}},L=s=>!(!s||typeof s!="string"||/\||::|\[\s*[\w$*=^|~-]+(?:\s+[\w$*=^|~-]+)+\s*\]|\[\s*[\w$*=^|~-]+["'][\w$*=^|~\s-]+['"]+\s+[\w$*=^|~-]+\s*\]/.test(s)||s.includes(":")&&/:(?!(?:first|last|only)-(?:child|of-type)|nth-(?:last-)?(?:child|of-type)\(\s*(?:even|odd|n|[+-]?(?:0|[1-9]\d*)n?|(?:[+-]?(?:0|[1-9]\d*))?n\s*[+-]\s*(?:0|[1-9]\d*))\s*\)|(?:is|not|where)\(\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+|:(?:is|not|where)\(\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+)(?:\s*,\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+))*\s*\))+)(?:\s*,\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+|:(?:is|not|where)\(\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+)(?:\s*,\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+))*\s*\))+))*\s*\))/.test(s));0&&(module.exports={filterSelector,generateCSS,parseAstName,parseSelector,preprocess,sortAST,unescapeSelector,walkAST});
+var g=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var A=(s,t)=>{for(var r in t)g(s,r,{get:t[r],enumerable:!0})},O=(s,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of x(t))!y.call(s,n)&&n!==r&&g(s,n,{get:()=>t[n],enumerable:!(i=S(t,n))||i.enumerable});return s};var T=s=>O(g({},"__esModule",{value:!0}),s);var C={};A(C,{filterSelector:()=>L,generateCSS:()=>u.generate,parseAstName:()=>I,parseSelector:()=>h,preprocess:()=>E,sortAST:()=>_,unescapeSelector:()=>$,walkAST:()=>m});module.exports=T(C);var d=require("css-tree"),e=require("./constant.js"),u=require("css-tree");const $=(s="")=>{if(typeof s=="string"&&s.indexOf("\\",0)>=0){const t=s.split("\\"),r=t.length;for(let i=1;i<r;i++){let n=t[i];if(n===""&&i===r-1)n=e.U_FFFD;else{const f=/^([\da-f]{1,6}\s?)/i.exec(n);if(f){const[,a]=f;let c;try{const o=parseInt("D800",e.HEX),p=parseInt("DFFF",e.HEX),w=parseInt(a,e.HEX);w===0||w>=o&&w<=p?c=e.U_FFFD:c=String.fromCodePoint(w)}catch{c=e.U_FFFD}let l="";n.length>a.length&&(l=n.substring(a.length)),n=`${c}${l}`}else/^[\n\r\f]/.test(n)&&(n="\\"+n)}t[i]=n}s=t.join("")}return s},E=(...s)=>{if(!s.length)throw new TypeError("1 argument required, but only 0 present.");let[t]=s;if(typeof t=="string"){let r=0;for(;r>=0&&(r=t.indexOf("#",r),!(r<0));){const i=t.substring(0,r+1);let n=t.substring(r+1);const f=n.codePointAt(0);if(f===e.BIT_HYPHEN){if(/^\d$/.test(n.substring(1,2)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR)}else if(f>e.BIT_FFFF){const a=`\\${f.toString(e.HEX)} `;n.length===e.DUO?n=a:n=`${a}${n.substring(e.DUO)}`}t=`${i}${n}`,r++}t=t.replace(/\f|\r\n?/g,`
+`).replace(/[\0\uD800-\uDFFF]|\\$/g,e.U_FFFD)}else if(t==null)t=Object.prototype.toString.call(t).slice(e.TYPE_FROM,e.TYPE_TO).toLowerCase();else if(Array.isArray(t))t=t.join(",");else if(Object.prototype.hasOwnProperty.call(t,"toString"))t=t.toString();else throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);return t},h=s=>{if(s=E(s),/^$|^\s*>|,\s*$/.test(s))throw new DOMException(`Invalid selector ${s}`,e.SYNTAX_ERR);let t;try{const r=(0,d.parse)(s,{context:"selectorList",parseCustomProperty:!0});t=(0,d.toPlainObject)(r)}catch(r){const{message:i}=r,n=/(:(is|where)\(\s*\))/,f=/(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/;if(i==="Identifier is expected"&&f.test(s)){const[,a,c]=f.exec(s),l=c.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,"");let o=a.replace(c,l);o===":lang()"&&(o=`:lang(${e.EMPTY})`),t=h(s.replace(a,o))}else if((i==="Identifier is expected"||i==="Selector is expected")&&n.test(s)){const[,a,c]=n.exec(s),l=`:${c}(${e.EMPTY})`;t=h(s.replace(a,l))}else if(i==='"]" is expected'&&!s.endsWith("]"))t=h(`${s}]`);else if(i==='")" is expected'&&!s.endsWith(")"))t=h(`${s})`);else throw new DOMException(i,e.SYNTAX_ERR)}return t},m=(s={})=>{const t=new Set;let r;return(0,d.walk)(s,{enter:n=>{n.type===e.SELECTOR?t.add(n.children):(n.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(n.name)||n.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(n.name))&&(r=!0)}}),r&&(0,d.findAll)(s,(n,f,a)=>{if(a){if(n.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(n.name)){const c=a.filter(l=>{const{name:o,type:p}=l;return p===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(o)});for(const{children:l}of c)for(const{children:o}of l)for(const{children:p}of o)t.has(p)&&t.delete(p)}else if(n.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(n.name)){const c=a.filter(l=>{const{name:o,type:p}=l;return p===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(o)});for(const{children:l}of c)for(const{children:o}of l)t.has(o)&&t.delete(o)}}}),[...t]},_=s=>{const t=[...s];if(t.length>1){const r=new Map([[e.SELECTOR_PSEUDO_ELEMENT,e.BIT_01],[e.SELECTOR_ID,e.BIT_02],[e.SELECTOR_CLASS,e.BIT_04],[e.SELECTOR_TYPE,e.BIT_08],[e.SELECTOR_ATTR,e.BIT_16],[e.SELECTOR_PSEUDO_CLASS,e.BIT_32]]);t.sort((i,n)=>{const{type:f}=i,{type:a}=n,c=r.get(f),l=r.get(a);let o;return c===l?o=0:c>l?o=1:o=-1,o})}return t},I=s=>{let t,r;if(s&&typeof s=="string")s.indexOf("|")>-1?[t,r]=s.split("|"):(t="*",r=s);else throw new DOMException(`Invalid selector ${s}`,e.SYNTAX_ERR);return{prefix:t,localName:r}},L=s=>!(!s||typeof s!="string"||/\||::|\[\s*[\w$*=^|~-]+(?:\s+[\w$*=^|~-]+)+\s*\]|\[\s*[\w$*=^|~-]+["'][\w$*=^|~\s-]+['"]+\s+[\w$*=^|~-]+\s*\]/.test(s)||s.includes(":")&&/:(?!(?:first|last|only)-(?:child|of-type)|nth-(?:last-)?(?:child|of-type)\(\s*(?:even|odd|n|[+-]?(?:0|[1-9]\d*)n?|(?:[+-]?(?:0|[1-9]\d*))?n\s*[+-]\s*(?:0|[1-9]\d*))\s*\)|(?:is|not|where)\(\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+|:(?:is|not|where)\(\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+)(?:\s*,\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+))*\s*\))+)(?:\s*,\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+|:(?:is|not|where)\(\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+)(?:\s*,\s*(?:\*|[A-Za-z][\w-]*|(?:\*|[A-Za-z][\w-]*)?(?:\[[^\]]+\]|[#.:][\w-]+)+))*\s*\))+))*\s*\))/.test(s));0&&(module.exports={filterSelector,generateCSS,parseAstName,parseSelector,preprocess,sortAST,unescapeSelector,walkAST});
 //# sourceMappingURL=parser.js.map
diff --git a/dist/cjs/js/parser.js.map b/dist/cjs/js/parser.js.map
index 2c511878..8d2922b3 100644
--- a/dist/cjs/js/parser.js.map
+++ b/dist/cjs/js/parser.js.map
@@ -1,7 +1,7 @@
 {
   "version": 3,
   "sources": ["../../../src/js/parser.js"],
-  "sourcesContent": ["/**\n * parser.js\n */\n\n/* import */\nimport { findAll, parse, toPlainObject, walk } from 'css-tree';\n\n/* constants */\nimport {\n  BIT_01, BIT_02, BIT_04, BIT_08, BIT_16, BIT_32, BIT_FFFF, BIT_HYPHEN,\n  DUO, HEX, REG_LOGICAL_PSEUDO, REG_SHADOW_PSEUDO, SELECTOR, SELECTOR_ATTR,\n  SELECTOR_CLASS, SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT,\n  SELECTOR_TYPE, SYNTAX_ERR, TYPE_FROM, TYPE_TO, U_FFFD\n} from './constant.js';\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 (item === '' && i === l - 1) {\n        item = U_FFFD;\n      } else {\n        const hexExists = /^([\\da-f]{1,6}\\s?)/i.exec(item);\n        if (hexExists) {\n          const [, hex] = hexExists;\n          let str;\n          try {\n            const low = parseInt('D800', HEX);\n            const high = parseInt('DFFF', HEX);\n            const deci = parseInt(hex, HEX);\n            if (deci === 0 || (deci >= low && deci <= high)) {\n              str = U_FFFD;\n            } else {\n              str = String.fromCodePoint(deci);\n            }\n          } catch (e) {\n            str = U_FFFD;\n          }\n          let postStr = '';\n          if (item.length > hex.length) {\n            postStr = item.substring(hex.length);\n          }\n          item = `${str}${postStr}`;\n        // whitespace\n        } else if (/^[\\n\\r\\f]/.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      // @see https://drafts.csswg.org/selectors/#id-selectors\n      // @see https://drafts.csswg.org/css-syntax-3/#ident-token-diagram\n      if (codePoint === BIT_HYPHEN) {\n        if (/^\\d$/.test(postHash.substring(1, 2))) {\n          throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n        }\n      // escape char above 0xFFFF\n      } else if (codePoint > BIT_FFFF) {\n        const str = `\\\\${codePoint.toString(HEX)} `;\n        if (postHash.length === DUO) {\n          postHash = str;\n        } else {\n          postHash = `${str}${postHash.substring(DUO)}`;\n        }\n      }\n      selector = `${preHash}${postHash}`;\n      index++;\n    }\n    selector = selector.replace(/\\f|\\r\\n?/g, '\\n')\n      .replace(/[\\0\\uD800-\\uDFFF]|\\\\$/g, U_FFFD);\n  } else if (selector === undefined || selector === null) {\n    selector = Object.prototype.toString.call(selector)\n      .slice(TYPE_FROM, TYPE_TO).toLowerCase();\n  } else if (Array.isArray(selector)) {\n    selector = selector.join(',');\n  } else if (Object.prototype.hasOwnProperty.call(selector, 'toString')) {\n    selector = selector.toString();\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    // workaround for https://github.com/csstree/csstree/issues/265\n    // NOTE: still throws on `:lang(\"\")`;\n    const regLang = /(:lang\\(\\s*(\"[A-Za-z\\d\\-*]+\")\\s*\\))/;\n    if (e.message === 'Identifier is expected' && regLang.test(selector)) {\n      const [, lang, range] = regLang.exec(selector);\n      const escapedRange =\n        range.replaceAll('*', '\\\\*').replace(/^\"/, '').replace(/\"$/, '');\n      const escapedLang = lang.replace(range, escapedRange);\n      res = parseSelector(selector.replace(lang, escapedLang));\n    } else 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 === SELECTOR_PSEUDO_CLASS &&\n                  REG_LOGICAL_PSEUDO.test(node.name)) ||\n                 (node.type === SELECTOR_PSEUDO_ELEMENT &&\n                  REG_SHADOW_PSEUDO.test(node.name))) {\n        hasPseudoFunc = true;\n      }\n    }\n  };\n  walk(ast, opt);\n  if (hasPseudoFunc) {\n    findAll(ast, (node, item, list) => {\n      if (list) {\n        if (node.type === SELECTOR_PSEUDO_CLASS &&\n            REG_LOGICAL_PSEUDO.test(node.name)) {\n          const itemList = list.filter(i => {\n            const { name, type } = i;\n            const res =\n              type === SELECTOR_PSEUDO_CLASS && REG_LOGICAL_PSEUDO.test(name);\n            return res;\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        } else if (node.type === SELECTOR_PSEUDO_ELEMENT &&\n                   REG_SHADOW_PSEUDO.test(node.name)) {\n          const itemList = list.filter(i => {\n            const { name, type } = i;\n            const res =\n              type === SELECTOR_PSEUDO_ELEMENT && REG_SHADOW_PSEUDO.test(name);\n            return res;\n          });\n          for (const { children } of itemList) {\n            // Selector\n            for (const { children: grandChildren } of children) {\n              if (branches.has(grandChildren)) {\n                branches.delete(grandChildren);\n              }\n            }\n          }\n        }\n      }\n    });\n  }\n  return [...branches];\n};\n\n/**\n * sort AST\n * @param {Array.<object>} asts - collection of AST\n * @returns {Array.<object>} - collection of sorted AST\n */\nexport const sortAST = asts => {\n  const arr = [...asts];\n  if (arr.length > 1) {\n    const order = new Map([\n      [SELECTOR_PSEUDO_ELEMENT, BIT_01],\n      [SELECTOR_ID, BIT_02],\n      [SELECTOR_CLASS, BIT_04],\n      [SELECTOR_TYPE, BIT_08],\n      [SELECTOR_ATTR, BIT_16],\n      [SELECTOR_PSEUDO_CLASS, BIT_32]\n    ]);\n    arr.sort((a, b) => {\n      const { type: typeA } = a;\n      const { type: typeB } = b;\n      const bitA = order.get(typeA);\n      const bitB = order.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 * parse AST name - e.g. ns|E -> { prefix: ns, localName: E }\n * @param {string} selector - type selector\n * @returns {object} - node properties\n */\nexport const parseAstName = selector => {\n  let prefix;\n  let localName;\n  if (selector && typeof selector === 'string') {\n    if (selector.indexOf('|') > -1) {\n      [prefix, localName] = selector.split('|');\n    } else {\n      prefix = '*';\n      localName = selector;\n    }\n  } else {\n    throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n  }\n  return {\n    prefix,\n    localName\n  };\n};\n\n/**\n * filter selector (for nwsapi)\n * @param {string} selector - selector\n * @returns {boolean} - result\n */\nexport const filterSelector = selector => {\n  if (!selector || typeof selector !== 'string') {\n    return false;\n  }\n  // filter namespaced selectors, e.g. ns|E, pseudo-element selectors\n  // and attribute selectors with case flag, i.e. [attr i], [attr s]\n  if (/\\||::|\\[\\s*[\\w$*=^|~-]+(?:\\s+[\\w$*=^|~-]+)+\\s*\\]|\\[\\s*[\\w$*=^|~-]+[\"'][\\w$*=^|~\\s-]+['\"]+\\s+[\\w$*=^|~-]+\\s*\\]/.test(selector)) {\n    return false;\n  }\n  // filter pseudo-class selectors\n  if (selector.includes(':')) {\n    // filter pseudos other than child-indexed and logical combination pseudos\n    // :(?!(?:first|last|only)-(?:child|of-type)|${nth}|${logical})\n    // nth: exclude An+B with selector list, e.g. :nth-child(2n+1 of .foo)\n    // nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${an+b})\\s*\\)\n    // an+b:\n    // n|[+-]?(?:0|[1-9]\\d*)n?|(?:[+-]?(?:0|[1-9]\\d*))?n\\s*[+-]\\s*(?:0|[1-9]\\d*)\n    // logical: exclude complex selector, e.g. :is(.foo > .bar)\n    // (?:is|not|where)\\(\\s*${compound}(?:\\s*,\\s*${compound})*\\s*\\)\n    // compound:\n    // (?:${type}|(?:${type})?(?:${subclass})+)\n    // type: *, tag\n    // \\*|[A-Za-z][\\w-]*\n    // subclass: attr, class, id, pseudo-class\n    // \\[[^\\]]+\\]|[#.:][\\w-]+|:${logical}\n    // subclass w/o logical:\n    // \\[[^\\]]+\\]|[#.:][\\w-]+\n    if (/:(?!(?:first|last|only)-(?:child|of-type)|nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|n|[+-]?(?:0|[1-9]\\d*)n?|(?:[+-]?(?:0|[1-9]\\d*))?n\\s*[+-]\\s*(?:0|[1-9]\\d*))\\s*\\)|(?:is|not|where)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+|:(?:is|not|where)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+)(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+))*\\s*\\))+)(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+|:(?:is|not|where)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+)(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+))*\\s*\\))+))*\\s*\\))/.test(selector)) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/* export */\nexport { generate as generateCSS } from 'css-tree';\n"],
-  "mappings": "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",
-  "names": ["parser_exports", "__export", "filterSelector", "parseAstName", "parseSelector", "preprocess", "sortAST", "unescapeSelector", "walkAST", "__toCommonJS", "import_css_tree", "import_constant", "selector", "arr", "l", "item", "hexExists", "hex", "str", "low", "high", "deci", "postStr", "args", "index", "preHash", "postHash", "codePoint", "res", "ast", "e", "regLang", "lang", "range", "escapedRange", "escapedLang", "branches", "hasPseudoFunc", "node", "list", "itemList", "i", "name", "type", "children", "grandChildren", "greatGrandChildren", "asts", "order", "a", "b", "typeA", "typeB", "bitA", "bitB", "prefix", "localName"]
+  "sourcesContent": ["/**\n * parser.js\n */\n\n/* import */\nimport { findAll, parse, toPlainObject, walk } from 'css-tree';\n\n/* constants */\nimport {\n  BIT_01, BIT_02, BIT_04, BIT_08, BIT_16, BIT_32, BIT_FFFF, BIT_HYPHEN,\n  DUO, EMPTY, HEX, REG_LOGICAL_PSEUDO, REG_SHADOW_PSEUDO, SELECTOR,\n  SELECTOR_ATTR, SELECTOR_CLASS, SELECTOR_ID, SELECTOR_PSEUDO_CLASS,\n  SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE, SYNTAX_ERR, TYPE_FROM, TYPE_TO, U_FFFD\n} from './constant.js';\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 (item === '' && i === l - 1) {\n        item = U_FFFD;\n      } else {\n        const hexExists = /^([\\da-f]{1,6}\\s?)/i.exec(item);\n        if (hexExists) {\n          const [, hex] = hexExists;\n          let str;\n          try {\n            const low = parseInt('D800', HEX);\n            const high = parseInt('DFFF', HEX);\n            const deci = parseInt(hex, HEX);\n            if (deci === 0 || (deci >= low && deci <= high)) {\n              str = U_FFFD;\n            } else {\n              str = String.fromCodePoint(deci);\n            }\n          } catch (e) {\n            str = U_FFFD;\n          }\n          let postStr = '';\n          if (item.length > hex.length) {\n            postStr = item.substring(hex.length);\n          }\n          item = `${str}${postStr}`;\n        // whitespace\n        } else if (/^[\\n\\r\\f]/.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      // @see https://drafts.csswg.org/selectors/#id-selectors\n      // @see https://drafts.csswg.org/css-syntax-3/#ident-token-diagram\n      if (codePoint === BIT_HYPHEN) {\n        if (/^\\d$/.test(postHash.substring(1, 2))) {\n          throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n        }\n      // escape char above 0xFFFF\n      } else if (codePoint > BIT_FFFF) {\n        const str = `\\\\${codePoint.toString(HEX)} `;\n        if (postHash.length === DUO) {\n          postHash = str;\n        } else {\n          postHash = `${str}${postHash.substring(DUO)}`;\n        }\n      }\n      selector = `${preHash}${postHash}`;\n      index++;\n    }\n    selector = selector.replace(/\\f|\\r\\n?/g, '\\n')\n      .replace(/[\\0\\uD800-\\uDFFF]|\\\\$/g, U_FFFD);\n  } else if (selector === undefined || selector === null) {\n    selector = Object.prototype.toString.call(selector)\n      .slice(TYPE_FROM, TYPE_TO).toLowerCase();\n  } else if (Array.isArray(selector)) {\n    selector = selector.join(',');\n  } else if (Object.prototype.hasOwnProperty.call(selector, 'toString')) {\n    selector = selector.toString();\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    const { message } = e;\n    const regEmptyIs = /(:(is|where)\\(\\s*\\))/;\n    // workaround for https://github.com/csstree/csstree/issues/265\n    const regLang = /(:lang\\(\\s*(\"[A-Za-z\\d\\-*]*\")\\s*\\))/;\n    if (message === 'Identifier is expected' && regLang.test(selector)) {\n      const [, lang, range] = regLang.exec(selector);\n      const escapedRange =\n        range.replaceAll('*', '\\\\*').replace(/^\"/, '').replace(/\"$/, '');\n      let escapedLang = lang.replace(range, escapedRange);\n      if (escapedLang === ':lang()') {\n        escapedLang = `:lang(${EMPTY})`;\n      }\n      res = parseSelector(selector.replace(lang, escapedLang));\n    } else if ((message === 'Identifier is expected' ||\n                message === 'Selector is expected') &&\n               regEmptyIs.test(selector)) {\n      const [, logic, name] = regEmptyIs.exec(selector);\n      const emptyIs = `:${name}(${EMPTY})`;\n      res = parseSelector(selector.replace(logic, emptyIs));\n    } else if (message === '\"]\" is expected' && !selector.endsWith(']')) {\n      res = parseSelector(`${selector}]`);\n    } else if (message === '\")\" is expected' && !selector.endsWith(')')) {\n      res = parseSelector(`${selector})`);\n    } else {\n      throw new DOMException(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 === SELECTOR_PSEUDO_CLASS &&\n                  REG_LOGICAL_PSEUDO.test(node.name)) ||\n                 (node.type === SELECTOR_PSEUDO_ELEMENT &&\n                  REG_SHADOW_PSEUDO.test(node.name))) {\n        hasPseudoFunc = true;\n      }\n    }\n  };\n  walk(ast, opt);\n  if (hasPseudoFunc) {\n    findAll(ast, (node, item, list) => {\n      if (list) {\n        if (node.type === SELECTOR_PSEUDO_CLASS &&\n            REG_LOGICAL_PSEUDO.test(node.name)) {\n          const itemList = list.filter(i => {\n            const { name, type } = i;\n            const res =\n              type === SELECTOR_PSEUDO_CLASS && REG_LOGICAL_PSEUDO.test(name);\n            return res;\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        } else if (node.type === SELECTOR_PSEUDO_ELEMENT &&\n                   REG_SHADOW_PSEUDO.test(node.name)) {\n          const itemList = list.filter(i => {\n            const { name, type } = i;\n            const res =\n              type === SELECTOR_PSEUDO_ELEMENT && REG_SHADOW_PSEUDO.test(name);\n            return res;\n          });\n          for (const { children } of itemList) {\n            // Selector\n            for (const { children: grandChildren } of children) {\n              if (branches.has(grandChildren)) {\n                branches.delete(grandChildren);\n              }\n            }\n          }\n        }\n      }\n    });\n  }\n  return [...branches];\n};\n\n/**\n * sort AST\n * @param {Array.<object>} asts - collection of AST\n * @returns {Array.<object>} - collection of sorted AST\n */\nexport const sortAST = asts => {\n  const arr = [...asts];\n  if (arr.length > 1) {\n    const order = new Map([\n      [SELECTOR_PSEUDO_ELEMENT, BIT_01],\n      [SELECTOR_ID, BIT_02],\n      [SELECTOR_CLASS, BIT_04],\n      [SELECTOR_TYPE, BIT_08],\n      [SELECTOR_ATTR, BIT_16],\n      [SELECTOR_PSEUDO_CLASS, BIT_32]\n    ]);\n    arr.sort((a, b) => {\n      const { type: typeA } = a;\n      const { type: typeB } = b;\n      const bitA = order.get(typeA);\n      const bitB = order.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 * parse AST name - e.g. ns|E -> { prefix: ns, localName: E }\n * @param {string} selector - type selector\n * @returns {object} - node properties\n */\nexport const parseAstName = selector => {\n  let prefix;\n  let localName;\n  if (selector && typeof selector === 'string') {\n    if (selector.indexOf('|') > -1) {\n      [prefix, localName] = selector.split('|');\n    } else {\n      prefix = '*';\n      localName = selector;\n    }\n  } else {\n    throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n  }\n  return {\n    prefix,\n    localName\n  };\n};\n\n/**\n * filter selector (for nwsapi)\n * @param {string} selector - selector\n * @returns {boolean} - result\n */\nexport const filterSelector = selector => {\n  if (!selector || typeof selector !== 'string') {\n    return false;\n  }\n  // filter namespaced selectors, e.g. ns|E, pseudo-element selectors\n  // and attribute selectors with case flag, i.e. [attr i], [attr s]\n  if (/\\||::|\\[\\s*[\\w$*=^|~-]+(?:\\s+[\\w$*=^|~-]+)+\\s*\\]|\\[\\s*[\\w$*=^|~-]+[\"'][\\w$*=^|~\\s-]+['\"]+\\s+[\\w$*=^|~-]+\\s*\\]/.test(selector)) {\n    return false;\n  }\n  // filter pseudo-class selectors\n  if (selector.includes(':')) {\n    // filter pseudos other than child-indexed and logical combination pseudos\n    // :(?!(?:first|last|only)-(?:child|of-type)|${nth}|${logical})\n    // nth: exclude An+B with selector list, e.g. :nth-child(2n+1 of .foo)\n    // nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${an+b})\\s*\\)\n    // an+b:\n    // n|[+-]?(?:0|[1-9]\\d*)n?|(?:[+-]?(?:0|[1-9]\\d*))?n\\s*[+-]\\s*(?:0|[1-9]\\d*)\n    // logical: exclude complex selector, e.g. :is(.foo > .bar)\n    // (?:is|not|where)\\(\\s*${compound}(?:\\s*,\\s*${compound})*\\s*\\)\n    // compound:\n    // (?:${type}|(?:${type})?(?:${subclass})+)\n    // type: *, tag\n    // \\*|[A-Za-z][\\w-]*\n    // subclass: attr, class, id, pseudo-class\n    // \\[[^\\]]+\\]|[#.:][\\w-]+|:${logical}\n    // subclass w/o logical:\n    // \\[[^\\]]+\\]|[#.:][\\w-]+\n    if (/:(?!(?:first|last|only)-(?:child|of-type)|nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|n|[+-]?(?:0|[1-9]\\d*)n?|(?:[+-]?(?:0|[1-9]\\d*))?n\\s*[+-]\\s*(?:0|[1-9]\\d*))\\s*\\)|(?:is|not|where)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+|:(?:is|not|where)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+)(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+))*\\s*\\))+)(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+|:(?:is|not|where)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+)(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^\\]]+\\]|[#.:][\\w-]+)+))*\\s*\\))+))*\\s*\\))/.test(selector)) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/* export */\nexport { generate as generateCSS } from 'css-tree';\n"],
+  "mappings": "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",
+  "names": ["parser_exports", "__export", "filterSelector", "parseAstName", "parseSelector", "preprocess", "sortAST", "unescapeSelector", "walkAST", "__toCommonJS", "import_css_tree", "import_constant", "selector", "arr", "l", "item", "hexExists", "hex", "str", "low", "high", "deci", "postStr", "args", "index", "preHash", "postHash", "codePoint", "res", "ast", "e", "message", "regEmptyIs", "regLang", "lang", "range", "escapedRange", "escapedLang", "logic", "name", "emptyIs", "branches", "hasPseudoFunc", "node", "list", "itemList", "i", "type", "children", "grandChildren", "greatGrandChildren", "asts", "order", "a", "b", "typeA", "typeB", "bitA", "bitB", "prefix", "localName"]
 }
diff --git a/package.json b/package.json
index 8ae2d7a0..f0c61a75 100644
--- a/package.json
+++ b/package.json
@@ -60,5 +60,5 @@
     "tsc": "npx tsc",
     "update-wpt": "git submodule update --init --recursive --remote"
   },
-  "version": "4.1.2"
+  "version": "4.1.3"
 }
diff --git a/types/js/constant.d.ts b/types/js/constant.d.ts
index f6c73a24..7ad5036b 100644
--- a/types/js/constant.d.ts
+++ b/types/js/constant.d.ts
@@ -1,6 +1,7 @@
 export const ALPHA_NUM: "[A-Z\\d]+";
 export const AN_PLUS_B: "AnPlusB";
 export const COMBINATOR: "Combinator";
+export const EMPTY: "__EMPTY__";
 export const IDENTIFIER: "Identifier";
 export const NOT_SUPPORTED_ERR: "NotSupportedError";
 export const NTH: "Nth";