@asamuzakjp/dom-selector 5.3.0 → 5.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- var E=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var M=(o,t)=>{for(var c in t)E(o,c,{get:t[c],enumerable:!0})},i=(o,t,c,C)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of l(t))!F.call(o,s)&&s!==c&&E(o,s,{get:()=>t[s],enumerable:!(C=R(t,s))||C.enumerable});return o};var U=o=>i(E({},"__esModule",{value:!0}),o);var Gt={};M(Gt,{ALPHA_NUM:()=>A,ANB:()=>$,AN_PLUS_B:()=>a,ATTR_SELECTOR:()=>G,BIT_01:()=>q,BIT_02:()=>J,BIT_04:()=>Q,BIT_08:()=>V,BIT_16:()=>tt,BIT_32:()=>ot,BIT_FFFF:()=>et,CHILD_IDX:()=>I,CLASS_SELECTOR:()=>d,COMBINATOR:()=>B,COMBO:()=>T,COMPLEX:()=>_,COMPLEX_L:()=>S,COMPOUND:()=>n,COMPOUND_A:()=>O,COMPOUND_B:()=>N,COMPOUND_I:()=>Ft,DESCEND:()=>lt,DIGIT:()=>x,DOCUMENT_FRAGMENT_NODE:()=>_t,DOCUMENT_NODE:()=>Tt,DOCUMENT_POSITION_CONTAINED_BY:()=>St,DOCUMENT_POSITION_CONTAINS:()=>Nt,DOCUMENT_POSITION_PRECEDING:()=>Ot,DUO:()=>st,ELEMENT_NODE:()=>Et,EMPTY:()=>Y,HEX:()=>rt,HYPHEN:()=>nt,IDENT:()=>H,ID_SELECTOR:()=>h,KEY_IS_NOT:()=>L,LANG_PART:()=>Pt,LOGICAL_COMPLEX:()=>Mt,LOGICAL_COMPOUND:()=>it,NESTED_LOGICAL_A:()=>P,NESTED_LOGICAL_B:()=>D,NOT_SUPPORTED_ERR:()=>m,NTH:()=>u,N_TH:()=>Rt,PSEUDO_CLASS:()=>Dt,PS_CLASS_SELECTOR:()=>w,PS_ELEMENT_SELECTOR:()=>y,RAW:()=>X,REG_INPUT_TYPE:()=>at,REG_LOGICAL:()=>Ut,SELECTOR:()=>f,SELECTOR_LIST:()=>W,SHOW_ALL:()=>Lt,SHOW_DOCUMENT:()=>Ct,SHOW_DOCUMENT_FRAGMENT:()=>At,SHOW_ELEMENT:()=>It,STRING:()=>b,SUB_TYPE:()=>r,SYNTAX_ERR:()=>k,TAG_TYPE:()=>e,TAG_TYPE_I:()=>p,TARGET_ALL:()=>Z,TARGET_FIRST:()=>g,TARGET_LINEAL:()=>v,TARGET_SELF:()=>K,TEXT_NODE:()=>pt,TYPE_FROM:()=>ct,TYPE_SELECTOR:()=>z,TYPE_TO:()=>xt,U_FFFD:()=>j,WALKER_FILTER:()=>$t});module.exports=U(Gt);const a="AnPlusB",G="AttributeSelector",d="ClassSelector",B="Combinator",Y="__EMPTY__",H="Identifier",h="IdSelector",m="NotSupportedError",u="Nth",w="PseudoClassSelector",y="PseudoElementSelector",X="Raw",f="Selector",W="SelectorList",b="String",k="SyntaxError",Z="all",g="first",v="lineal",K="self",z="TypeSelector",j="\uFFFD",q=1,J=2,Q=4,V=8,tt=16,ot=32,et=65535,st=2,rt=16,nt=45,ct=8,xt=-1,Et=1,pt=3,Tt=9,_t=11,Ot=2,Nt=8,St=16,Lt=4294967295,Ct=256,At=1024,It=1,$t=1281,A="[A-Z\\d]+",I="(?:first|last|only)-(?:child|of-type)",x="(?:0|[1-9]\\d*)",Pt=`(?:-${A})*`,Dt=`(?:any-)?link|${I}|checked|empty|indeterminate|root|target|visited`,$=`[+-]?(?:${x}n?|n)|(?:[+-]?${x})?n\\s*[+-]\\s*${x}`,Rt=`nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${$})\\s*\\)`,r="\\[[^|\\]]+\\]|[#.:][\\w-]+",e="\\*|[A-Za-z][\\w-]*",p="\\*|[A-Z][\\w-]*",n=`(?:${e}|(?:${e})?(?:${r})+)`,T="\\s?[\\s>~+]\\s?",_=`${n}(?:${T}${n})*`,lt="\\s?[\\s>]\\s?",P=`:is\\(\\s*${n}(?:\\s*,\\s*${n})*\\s*\\)`,D=`:is\\(\\s*${_}(?:\\s*,\\s*${_})*\\s*\\)`,O=`(?:${e}|(?:${e})?(?:${r}|${P})+)`,N=`(?:${e}|(?:${e})?(?:${r}|${D})+)`,Ft=`(?:${p}|(?:${p})?(?:${r})+)`,S=`${N}(?:${T}${N})*`,L="(?:is|not)",Mt=`${L}\\(\\s*${S}(?:\\s*,\\s*${S})*\\s*\\)`,it=`${L}\\(\\s*${O}(?:\\s*,\\s*${O})*\\s*\\)`,Ut=/^(?:has|is|not|where)$/,at=/^(?:date(?:time-local)?|email|month|number|password|search|tel|text|time|url|week)$/;0&&(module.exports={ALPHA_NUM,ANB,AN_PLUS_B,ATTR_SELECTOR,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,CHILD_IDX,CLASS_SELECTOR,COMBINATOR,COMBO,COMPLEX,COMPLEX_L,COMPOUND,COMPOUND_A,COMPOUND_B,COMPOUND_I,DESCEND,DIGIT,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,EMPTY,HEX,HYPHEN,IDENT,ID_SELECTOR,KEY_IS_NOT,LANG_PART,LOGICAL_COMPLEX,LOGICAL_COMPOUND,NESTED_LOGICAL_A,NESTED_LOGICAL_B,NOT_SUPPORTED_ERR,NTH,N_TH,PSEUDO_CLASS,PS_CLASS_SELECTOR,PS_ELEMENT_SELECTOR,RAW,REG_INPUT_TYPE,REG_LOGICAL,SELECTOR,SELECTOR_LIST,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,STRING,SUB_TYPE,SYNTAX_ERR,TAG_TYPE,TAG_TYPE_I,TARGET_ALL,TARGET_FIRST,TARGET_LINEAL,TARGET_SELF,TEXT_NODE,TYPE_FROM,TYPE_SELECTOR,TYPE_TO,U_FFFD,WALKER_FILTER});
1
+ var x=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var F=(o,t)=>{for(var c in t)x(o,c,{get:t[c],enumerable:!0})},i=(o,t,c,L)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of l(t))!M.call(o,s)&&s!==c&&x(o,s,{get:()=>t[s],enumerable:!(L=R(t,s))||L.enumerable});return o};var a=o=>i(x({},"__esModule",{value:!0}),o);var Mt={};F(Mt,{ALPHA_NUM:()=>$,ANB:()=>A,ATTR_SELECTOR:()=>G,BIT_01:()=>v,BIT_02:()=>K,BIT_04:()=>g,BIT_08:()=>z,BIT_16:()=>j,BIT_32:()=>q,BIT_FFFF:()=>J,CHILD_IDX:()=>I,CLASS_SELECTOR:()=>U,COMBINATOR:()=>d,COMBO:()=>T,COMPLEX:()=>_,COMPLEX_L:()=>S,COMPOUND:()=>n,COMPOUND_A:()=>O,COMPOUND_B:()=>N,COMPOUND_I:()=>At,DESCEND:()=>It,DIGIT:()=>E,DOCUMENT_FRAGMENT_NODE:()=>ct,DOCUMENT_NODE:()=>nt,DOCUMENT_POSITION_CONTAINED_BY:()=>pt,DOCUMENT_POSITION_CONTAINS:()=>xt,DOCUMENT_POSITION_PRECEDING:()=>Et,DUO:()=>Q,ELEMENT_NODE:()=>st,EMPTY:()=>B,HEX:()=>V,HYPHEN:()=>tt,IDENT:()=>Y,ID_SELECTOR:()=>H,KEY_IS_NOT:()=>C,LANG_PART:()=>Ct,LOGICAL_COMPLEX:()=>Pt,LOGICAL_COMPOUND:()=>Dt,NESTED_LOGICAL_A:()=>P,NESTED_LOGICAL_B:()=>D,NOT_SUPPORTED_ERR:()=>h,NTH:()=>m,N_TH:()=>$t,PSEUDO_CLASS:()=>Lt,PS_CLASS_SELECTOR:()=>y,PS_ELEMENT_SELECTOR:()=>X,REG_INPUT_TYPE:()=>lt,REG_LOGICAL:()=>Rt,SELECTOR:()=>f,SHOW_ALL:()=>Tt,SHOW_DOCUMENT:()=>_t,SHOW_DOCUMENT_FRAGMENT:()=>Ot,SHOW_ELEMENT:()=>Nt,SUB_TYPE:()=>r,SYNTAX_ERR:()=>u,TAG_TYPE:()=>e,TAG_TYPE_I:()=>p,TARGET_ALL:()=>w,TARGET_FIRST:()=>W,TARGET_LINEAL:()=>b,TARGET_SELF:()=>k,TEXT_NODE:()=>rt,TYPE_FROM:()=>ot,TYPE_SELECTOR:()=>Z,TYPE_TO:()=>et,WALKER_FILTER:()=>St});module.exports=a(Mt);const G="AttributeSelector",U="ClassSelector",d="Combinator",B="__EMPTY__",Y="Identifier",H="IdSelector",h="NotSupportedError",m="Nth",y="PseudoClassSelector",X="PseudoElementSelector",f="Selector",u="SyntaxError",w="all",W="first",b="lineal",k="self",Z="TypeSelector",v=1,K=2,g=4,z=8,j=16,q=32,J=65535,Q=2,V=16,tt=45,ot=8,et=-1,st=1,rt=3,nt=9,ct=11,Et=2,xt=8,pt=16,Tt=4294967295,_t=256,Ot=1024,Nt=1,St=1281,$="[A-Z\\d]+",I="(?:first|last|only)-(?:child|of-type)",E="(?:0|[1-9]\\d*)",Ct=`(?:-${$})*`,Lt=`(?:any-)?link|${I}|checked|empty|indeterminate|root|target|visited`,A=`[+-]?(?:${E}n?|n)|(?:[+-]?${E})?n\\s*[+-]\\s*${E}`,$t=`nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${A})\\s*\\)`,r="\\[[^|\\]]+\\]|[#.:][\\w-]+",e="\\*|[A-Za-z][\\w-]*",p="\\*|[A-Z][\\w-]*",n=`(?:${e}|(?:${e})?(?:${r})+)`,T="\\s?[\\s>~+]\\s?",_=`${n}(?:${T}${n})*`,It="\\s?[\\s>]\\s?",P=`:is\\(\\s*${n}(?:\\s*,\\s*${n})*\\s*\\)`,D=`:is\\(\\s*${_}(?:\\s*,\\s*${_})*\\s*\\)`,O=`(?:${e}|(?:${e})?(?:${r}|${P})+)`,N=`(?:${e}|(?:${e})?(?:${r}|${D})+)`,At=`(?:${p}|(?:${p})?(?:${r})+)`,S=`${N}(?:${T}${N})*`,C="(?:is|not)",Pt=`${C}\\(\\s*${S}(?:\\s*,\\s*${S})*\\s*\\)`,Dt=`${C}\\(\\s*${O}(?:\\s*,\\s*${O})*\\s*\\)`,Rt=/^(?:has|is|not|where)$/,lt=/^(?:date(?:time-local)?|email|month|number|password|search|tel|text|time|url|week)$/;0&&(module.exports={ALPHA_NUM,ANB,ATTR_SELECTOR,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,CHILD_IDX,CLASS_SELECTOR,COMBINATOR,COMBO,COMPLEX,COMPLEX_L,COMPOUND,COMPOUND_A,COMPOUND_B,COMPOUND_I,DESCEND,DIGIT,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,EMPTY,HEX,HYPHEN,IDENT,ID_SELECTOR,KEY_IS_NOT,LANG_PART,LOGICAL_COMPLEX,LOGICAL_COMPOUND,NESTED_LOGICAL_A,NESTED_LOGICAL_B,NOT_SUPPORTED_ERR,NTH,N_TH,PSEUDO_CLASS,PS_CLASS_SELECTOR,PS_ELEMENT_SELECTOR,REG_INPUT_TYPE,REG_LOGICAL,SELECTOR,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,SUB_TYPE,SYNTAX_ERR,TAG_TYPE,TAG_TYPE_I,TARGET_ALL,TARGET_FIRST,TARGET_LINEAL,TARGET_SELF,TEXT_NODE,TYPE_FROM,TYPE_SELECTOR,TYPE_TO,WALKER_FILTER});
2
2
  //# sourceMappingURL=constant.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/js/constant.js"],
4
- "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const AN_PLUS_B = 'AnPlusB';\nexport const ATTR_SELECTOR = 'AttributeSelector';\nexport const CLASS_SELECTOR = 'ClassSelector';\nexport const COMBINATOR = 'Combinator';\nexport const EMPTY = '__EMPTY__';\nexport const IDENT = 'Identifier';\nexport const ID_SELECTOR = 'IdSelector';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const PS_CLASS_SELECTOR = 'PseudoClassSelector';\nexport const PS_ELEMENT_SELECTOR = 'PseudoElementSelector';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const TARGET_ALL = 'all';\nexport const TARGET_FIRST = 'first';\nexport const TARGET_LINEAL = 'lineal';\nexport const TARGET_SELF = 'self';\nexport const TYPE_SELECTOR = 'TypeSelector';\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 DUO = 2;\nexport const HEX = 16;\nexport const HYPHEN = 0x2D;\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/* selectors */\nexport const ALPHA_NUM = '[A-Z\\\\d]+';\nexport const CHILD_IDX = '(?:first|last|only)-(?:child|of-type)';\nexport const DIGIT = '(?:0|[1-9]\\\\d*)';\nexport const LANG_PART = `(?:-${ALPHA_NUM})*`;\nexport const PSEUDO_CLASS =\n `(?:any-)?link|${CHILD_IDX}|checked|empty|indeterminate|root|target|visited`;\nexport const ANB =\n `[+-]?(?:${DIGIT}n?|n)|(?:[+-]?${DIGIT})?n\\\\s*[+-]\\\\s*${DIGIT}`;\n// N_TH: excludes An+B with selector list, e.g. :nth-child(2n+1 of .foo)\nexport const N_TH =\n `nth-(?:last-)?(?:child|of-type)\\\\(\\\\s*(?:even|odd|${ANB})\\\\s*\\\\)`;\n// SUB_TYPE: attr, id, class, pseudo-class, note that [foo|=bar] is excluded\nexport const SUB_TYPE = '\\\\[[^|\\\\]]+\\\\]|[#.:][\\\\w-]+';\n// TAG_TYPE: *, tag\nexport const TAG_TYPE = '\\\\*|[A-Za-z][\\\\w-]*';\nexport const TAG_TYPE_I = '\\\\*|[A-Z][\\\\w-]*';\nexport const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`;\nexport const COMBO = '\\\\s?[\\\\s>~+]\\\\s?';\nexport const COMPLEX = `${COMPOUND}(?:${COMBO}${COMPOUND})*`;\nexport const DESCEND = '\\\\s?[\\\\s>]\\\\s?';\nexport const NESTED_LOGICAL_A =\n `:is\\\\(\\\\s*${COMPOUND}(?:\\\\s*,\\\\s*${COMPOUND})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_B =\n `:is\\\\(\\\\s*${COMPLEX}(?:\\\\s*,\\\\s*${COMPLEX})*\\\\s*\\\\)`;\nexport const COMPOUND_A =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_A})+)`;\nexport const COMPOUND_B =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_B})+)`;\nexport const COMPOUND_I =\n `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`;\nexport const COMPLEX_L = `${COMPOUND_B}(?:${COMBO}${COMPOUND_B})*`;\nexport const KEY_IS_NOT = '(?:is|not)';\nexport const LOGICAL_COMPLEX =\n `${KEY_IS_NOT}\\\\(\\\\s*${COMPLEX_L}(?:\\\\s*,\\\\s*${COMPLEX_L})*\\\\s*\\\\)`;\nexport const LOGICAL_COMPOUND =\n `${KEY_IS_NOT}\\\\(\\\\s*${COMPOUND_A}(?:\\\\s*,\\\\s*${COMPOUND_A})*\\\\s*\\\\)`;\n\n/* regexp */\nexport const REG_LOGICAL = /^(?:has|is|not|where)$/;\nexport const REG_INPUT_TYPE =\n /^(?:date(?:time-local)?|email|month|number|password|search|tel|text|time|url|week)$/;\n"],
5
- "mappings": "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",
6
- "names": ["constant_exports", "__export", "ALPHA_NUM", "ANB", "AN_PLUS_B", "ATTR_SELECTOR", "BIT_01", "BIT_02", "BIT_04", "BIT_08", "BIT_16", "BIT_32", "BIT_FFFF", "CHILD_IDX", "CLASS_SELECTOR", "COMBINATOR", "COMBO", "COMPLEX", "COMPLEX_L", "COMPOUND", "COMPOUND_A", "COMPOUND_B", "COMPOUND_I", "DESCEND", "DIGIT", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_PRECEDING", "DUO", "ELEMENT_NODE", "EMPTY", "HEX", "HYPHEN", "IDENT", "ID_SELECTOR", "KEY_IS_NOT", "LANG_PART", "LOGICAL_COMPLEX", "LOGICAL_COMPOUND", "NESTED_LOGICAL_A", "NESTED_LOGICAL_B", "NOT_SUPPORTED_ERR", "NTH", "N_TH", "PSEUDO_CLASS", "PS_CLASS_SELECTOR", "PS_ELEMENT_SELECTOR", "RAW", "REG_INPUT_TYPE", "REG_LOGICAL", "SELECTOR", "SELECTOR_LIST", "SHOW_ALL", "SHOW_DOCUMENT", "SHOW_DOCUMENT_FRAGMENT", "SHOW_ELEMENT", "STRING", "SUB_TYPE", "SYNTAX_ERR", "TAG_TYPE", "TAG_TYPE_I", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "TEXT_NODE", "TYPE_FROM", "TYPE_SELECTOR", "TYPE_TO", "U_FFFD", "WALKER_FILTER", "__toCommonJS"]
4
+ "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const ATTR_SELECTOR = 'AttributeSelector';\nexport const CLASS_SELECTOR = 'ClassSelector';\nexport const COMBINATOR = 'Combinator';\nexport const EMPTY = '__EMPTY__';\nexport const IDENT = 'Identifier';\nexport const ID_SELECTOR = 'IdSelector';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const PS_CLASS_SELECTOR = 'PseudoClassSelector';\nexport const PS_ELEMENT_SELECTOR = 'PseudoElementSelector';\nexport const SELECTOR = 'Selector';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const TARGET_ALL = 'all';\nexport const TARGET_FIRST = 'first';\nexport const TARGET_LINEAL = 'lineal';\nexport const TARGET_SELF = 'self';\nexport const TYPE_SELECTOR = 'TypeSelector';\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 DUO = 2;\nexport const HEX = 16;\nexport const HYPHEN = 0x2D;\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/* selectors */\nexport const ALPHA_NUM = '[A-Z\\\\d]+';\nexport const CHILD_IDX = '(?:first|last|only)-(?:child|of-type)';\nexport const DIGIT = '(?:0|[1-9]\\\\d*)';\nexport const LANG_PART = `(?:-${ALPHA_NUM})*`;\nexport const PSEUDO_CLASS =\n `(?:any-)?link|${CHILD_IDX}|checked|empty|indeterminate|root|target|visited`;\nexport const ANB =\n `[+-]?(?:${DIGIT}n?|n)|(?:[+-]?${DIGIT})?n\\\\s*[+-]\\\\s*${DIGIT}`;\n// N_TH: excludes An+B with selector list, e.g. :nth-child(2n+1 of .foo)\nexport const N_TH =\n `nth-(?:last-)?(?:child|of-type)\\\\(\\\\s*(?:even|odd|${ANB})\\\\s*\\\\)`;\n// SUB_TYPE: attr, id, class, pseudo-class, note that [foo|=bar] is excluded\nexport const SUB_TYPE = '\\\\[[^|\\\\]]+\\\\]|[#.:][\\\\w-]+';\n// TAG_TYPE: *, tag\nexport const TAG_TYPE = '\\\\*|[A-Za-z][\\\\w-]*';\nexport const TAG_TYPE_I = '\\\\*|[A-Z][\\\\w-]*';\nexport const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`;\nexport const COMBO = '\\\\s?[\\\\s>~+]\\\\s?';\nexport const COMPLEX = `${COMPOUND}(?:${COMBO}${COMPOUND})*`;\nexport const DESCEND = '\\\\s?[\\\\s>]\\\\s?';\nexport const NESTED_LOGICAL_A =\n `:is\\\\(\\\\s*${COMPOUND}(?:\\\\s*,\\\\s*${COMPOUND})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_B =\n `:is\\\\(\\\\s*${COMPLEX}(?:\\\\s*,\\\\s*${COMPLEX})*\\\\s*\\\\)`;\nexport const COMPOUND_A =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_A})+)`;\nexport const COMPOUND_B =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_B})+)`;\nexport const COMPOUND_I =\n `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`;\nexport const COMPLEX_L = `${COMPOUND_B}(?:${COMBO}${COMPOUND_B})*`;\nexport const KEY_IS_NOT = '(?:is|not)';\nexport const LOGICAL_COMPLEX =\n `${KEY_IS_NOT}\\\\(\\\\s*${COMPLEX_L}(?:\\\\s*,\\\\s*${COMPLEX_L})*\\\\s*\\\\)`;\nexport const LOGICAL_COMPOUND =\n `${KEY_IS_NOT}\\\\(\\\\s*${COMPOUND_A}(?:\\\\s*,\\\\s*${COMPOUND_A})*\\\\s*\\\\)`;\n\n/* regexp */\nexport const REG_LOGICAL = /^(?:has|is|not|where)$/;\nexport const REG_INPUT_TYPE =\n /^(?:date(?:time-local)?|email|month|number|password|search|tel|text|time|url|week)$/;\n"],
5
+ "mappings": "4ZAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,eAAAE,EAAA,QAAAC,EAAA,kBAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,aAAAC,EAAA,cAAAC,EAAA,mBAAAC,EAAA,eAAAC,EAAA,UAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,eAAAC,GAAA,YAAAC,GAAA,UAAAC,EAAA,2BAAAC,GAAA,kBAAAC,GAAA,mCAAAC,GAAA,+BAAAC,GAAA,gCAAAC,GAAA,QAAAC,EAAA,iBAAAC,GAAA,UAAAC,EAAA,QAAAC,EAAA,WAAAC,GAAA,UAAAC,EAAA,gBAAAC,EAAA,eAAAC,EAAA,cAAAC,GAAA,oBAAAC,GAAA,qBAAAC,GAAA,qBAAAC,EAAA,qBAAAC,EAAA,sBAAAC,EAAA,QAAAC,EAAA,SAAAC,GAAA,iBAAAC,GAAA,sBAAAC,EAAA,wBAAAC,EAAA,mBAAAC,GAAA,gBAAAC,GAAA,aAAAC,EAAA,aAAAC,GAAA,kBAAAC,GAAA,2BAAAC,GAAA,iBAAAC,GAAA,aAAAC,EAAA,eAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,iBAAAC,EAAA,kBAAAC,EAAA,gBAAAC,EAAA,cAAAC,GAAA,cAAAC,GAAA,kBAAAC,EAAA,YAAAC,GAAA,kBAAAC,KAAA,eAAAC,EAAApE,IAKO,MAAMI,EAAgB,oBAChBS,EAAiB,gBACjBC,EAAa,aACbiB,EAAQ,YACRG,EAAQ,aACRC,EAAc,aACdO,EAAoB,oBACpBC,EAAM,MACNG,EAAoB,sBACpBC,EAAsB,wBACtBG,EAAW,WACXM,EAAa,cACbG,EAAa,MACbC,EAAe,QACfC,EAAgB,SAChBC,EAAc,OACdG,EAAgB,eAGhB5D,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,GACTC,EAAS,GACTC,EAAW,MACXkB,EAAM,EACNG,EAAM,GACNC,GAAS,GACT+B,GAAY,EACZE,GAAU,GAGVpC,GAAe,EACfiC,GAAY,EACZtC,GAAgB,EAChBD,GAAyB,GACzBI,GAA8B,EAC9BD,GAA6B,EAC7BD,GAAiC,GAGjCyB,GAAW,WACXC,GAAgB,IAChBC,GAAyB,KACzBC,GAAe,EACfa,GAAgB,KAGhBjE,EAAY,YACZU,EAAY,wCACZW,EAAQ,kBACRc,GAAY,OAAOnC,CAAS,KAC5B2C,GACX,iBAAiBjC,CAAS,mDACfT,EACX,WAAWoB,CAAK,iBAAiBA,CAAK,kBAAkBA,CAAK,GAElDqB,GACX,qDAAqDzC,CAAG,WAE7CoD,EAAW,8BAEXE,EAAW,sBACXC,EAAa,mBACbxC,EAAW,MAAMuC,CAAQ,OAAOA,CAAQ,QAAQF,CAAQ,MACxDxC,EAAQ,mBACRC,EAAU,GAAGE,CAAQ,MAAMH,CAAK,GAAGG,CAAQ,KAC3CI,GAAU,iBACVkB,EACX,aAAatB,CAAQ,eAAeA,CAAQ,YACjCuB,EACX,aAAazB,CAAO,eAAeA,CAAO,YAC/BG,EACX,MAAMsC,CAAQ,OAAOA,CAAQ,QAAQF,CAAQ,IAAIf,CAAgB,MACtDpB,EACX,MAAMqC,CAAQ,OAAOA,CAAQ,QAAQF,CAAQ,IAAId,CAAgB,MACtDpB,GACX,MAAMqC,CAAU,OAAOA,CAAU,QAAQH,CAAQ,MACtCtC,EAAY,GAAGG,CAAU,MAAML,CAAK,GAAGK,CAAU,KACjDgB,EAAa,aACbE,GACX,GAAGF,CAAU,UAAUnB,CAAS,eAAeA,CAAS,YAC7CsB,GACX,GAAGH,CAAU,UAAUjB,CAAU,eAAeA,CAAU,YAG/C8B,GAAc,yBACdD,GACX",
6
+ "names": ["constant_exports", "__export", "ALPHA_NUM", "ANB", "ATTR_SELECTOR", "BIT_01", "BIT_02", "BIT_04", "BIT_08", "BIT_16", "BIT_32", "BIT_FFFF", "CHILD_IDX", "CLASS_SELECTOR", "COMBINATOR", "COMBO", "COMPLEX", "COMPLEX_L", "COMPOUND", "COMPOUND_A", "COMPOUND_B", "COMPOUND_I", "DESCEND", "DIGIT", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_PRECEDING", "DUO", "ELEMENT_NODE", "EMPTY", "HEX", "HYPHEN", "IDENT", "ID_SELECTOR", "KEY_IS_NOT", "LANG_PART", "LOGICAL_COMPLEX", "LOGICAL_COMPOUND", "NESTED_LOGICAL_A", "NESTED_LOGICAL_B", "NOT_SUPPORTED_ERR", "NTH", "N_TH", "PSEUDO_CLASS", "PS_CLASS_SELECTOR", "PS_ELEMENT_SELECTOR", "REG_INPUT_TYPE", "REG_LOGICAL", "SELECTOR", "SHOW_ALL", "SHOW_DOCUMENT", "SHOW_DOCUMENT_FRAGMENT", "SHOW_ELEMENT", "SUB_TYPE", "SYNTAX_ERR", "TAG_TYPE", "TAG_TYPE_I", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "TEXT_NODE", "TYPE_FROM", "TYPE_SELECTOR", "TYPE_TO", "WALKER_FILTER", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var R=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var Y=(S,r)=>{for(var e in r)R(S,e,{get:r[e],enumerable:!0})},q=(S,r,e,h)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of j(r))!V.call(S,n)&&n!==e&&R(S,n,{get:()=>r[n],enumerable:!(h=B(r,n))||h.enumerable});return S};var K=S=>q(R({},"__esModule",{value:!0}),S);var Z={};Y(Z,{Finder:()=>J});module.exports=K(Z);var F=require("./matcher.js"),g=require("./parser.js"),k=require("./utility.js"),c=require("./constant.js");const v="next",x="prev",X="Tab",O=/^a(?:rea)?$/,M=/^(?:button|fieldset|input|optgroup|option|select|textarea)$/,T=/^(?:button|form|input|select|textarea)$/,I=/^(?:details|dialog)$/,P=/^host(?:-context)?$/,C=/^(?:checkbox|radio)$/,$=/^(?:date(?:time-local)?|month|number|range|time|week)$/,D=/^(?:button|reset)$/,U=/^(?:image|submit)$/,Q=/^(?:email|number|password|search|tel|text|url)$/;class J{#l;#c;#w;#t;#o;#n;#k;#f;#b;#h;#e;#d;#_;#m;#N;#s;#u;#r;#p;#i;#a;constructor(r){this.#a=r,this.#h=new F.Matcher,this.#c=new WeakMap,this.#o=new WeakMap,this.#b=new WeakMap,this.#N=new WeakMap,this.#n=null,this.#k=null,this._registerEventListeners()}onError(r,e={}){if(!(e.noexcept??this.#_))if(r instanceof DOMException||r instanceof this.#a.DOMException)if(r.name===c.NOT_SUPPORTED_ERR)this.#i&&console.warn(r.message);else throw new this.#a.DOMException(r.message,r.name);else throw r.name in this.#a?new this.#a[r.name](r.message):r}setup(r,e,h={}){const{event:n,noexcept:a,warn:l}=h;return this.#_=!!a,this.#i=!!l,this.#e=e,[this.#t,this.#s,this.#r]=(0,k.resolveContent)(e),this.#u=(0,k.isInShadowTree)(e),[this.#l,this.#d]=this._correspond(r),this.#b=new WeakMap,this.#p=new WeakMap,this._setEvent(n),e}_registerEventListeners(){const r={capture:!0,passive:!0},e=[],h=["mouseover","mousedown","mouseup","mouseout"];for(const a of h)e.push(this.#a.addEventListener(a,l=>{this.#n=l},r));const n=["keydown","keyup"];for(const a of n)e.push(this.#a.addEventListener(a,l=>{l.key===X&&(this.#n=l)},r));return e.push(this.#a.addEventListener("focusin",a=>{this.#k=a},r)),e}_setEvent(r){return(r instanceof this.#a.KeyboardEvent||r instanceof this.#a.MouseEvent)&&(this.#n=r),this.#n}_correspond(r){const e=[];this.#w=!1,this.#f=!1;let h;if(this.#o.has(this.#t)){const n=this.#o.get(this.#t);if(n&&n.has(`${r}`)){const a=n.get(`${r}`);h=a.ast,this.#w=a.descendant,this.#f=a.invalidate}}if(h){const n=h.length;for(let a=0;a<n;a++)h[a].collected=!1,h[a].dir=null,h[a].filtered=!1,h[a].find=!1,e[a]=[]}else{let n;try{n=(0,g.parseSelector)(r)}catch(s){this.onError(s)}const{branches:a,info:{hasHasPseudoFunc:l}}=(0,g.walkAST)(n);let o=!!l,u=!1,d=0;h=[];for(const[...s]of a){const t=[];let f=s.shift();if(f&&f.type!==c.COMBINATOR){const b=new Set;for(;f;){if(f.type===c.COMBINATOR){const[m]=s;if(m.type===c.COMBINATOR)throw new DOMException(`Invalid selector ${r}`,c.SYNTAX_ERR);const w=f.name;/^[\s>]$/.test(w)?u=!0:o=!0,t.push({combo:f,leaves:(0,g.sortAST)(b)}),b.clear()}else if(f){let{name:m}=f;m&&typeof m=="string"&&(m=(0,g.unescapeSelector)(m),typeof m=="string"&&m!==f.name&&(f.name=m),/[|:]/.test(m)&&(f.namespace=!0)),b.add(f)}if(s.length)f=s.shift();else{t.push({combo:null,leaves:(0,g.sortAST)(b)}),b.clear();break}}}h.push({branch:t,collected:!1,dir:null,filtered:!1,find:!1}),e[d]=[],d++}let i;this.#o.has(this.#t)?i=this.#o.get(this.#t):i=new Map,i.set(`${r}`,{ast:h,descendant:u,invalidate:o}),this.#o.set(this.#t,i),this.#w=u,this.#f=o}return[h,e]}_createTreeWalker(r){let e;return this.#p.has(r)?e=this.#p.get(r):(e=this.#t.createTreeWalker(r,c.WALKER_FILTER),this.#p.set(r,e)),e}_prepareQuerySelectorWalker(){return this.#m=this._createTreeWalker(this.#e),this.#m}_collectNthChild(r,e,h){const{a:n,b:a,reverse:l,selector:o}=r,{parentNode:u}=e,d=new Set;let i;if(o)if(this.#c.has(o))i=this.#c.get(o);else{const{branches:s,info:t}=(0,g.walkAST)(o);i=s,this.#c.set(o,i),t.hasLogicalPseudoFunc&&(this.#f=!0)}if(u){const s=this.#r;let t=(0,k.traverseNode)(u,s);t=s.firstChild();let f=0;for(;t;)f++,t=s.nextSibling();const b=new Set;if(i)for(t=(0,k.traverseNode)(u,s),t=s.firstChild();t;){if((0,k.isVisible)(t)){let m;for(const w of i)if(m=this._matchLeaves(w,t,h),!m)break;m&&b.add(t)}t=s.nextSibling()}if(n===0){if(a>0&&a<=f){if(b.size){t=(0,k.traverseNode)(u,s),l?t=s.lastChild():t=s.firstChild();let m=0;for(;t;){if(b.has(t)){if(m===a-1){d.add(t);break}m++}l?t=s.previousSibling():t=s.nextSibling()}}else if(!o){t=(0,k.traverseNode)(u,s),l?t=s.lastChild():t=s.firstChild();let m=0;for(;t;){if(m===a-1){d.add(t);break}l?t=s.previousSibling():t=s.nextSibling(),m++}}}}else{let m=a-1;if(n>0)for(;m<0;)m+=n;if(m>=0&&m<f){t=(0,k.traverseNode)(u,s),l?t=s.lastChild():t=s.firstChild();let w=0,p=n>0?0:a-1;for(;t&&(t&&m>=0&&m<f);)b.size?b.has(t)&&(p===m&&(d.add(t),m+=n),n>0?p++:p--):w===m&&(o||d.add(t),m+=n),l?t=s.previousSibling():t=s.nextSibling(),w++}}if(l&&d.size>1){const m=[...d];return new Set(m.reverse())}}else if(e===this.#s&&n+a===1)if(i){let s;for(const t of i)if(s=this._matchLeaves(t,e,h),s)break;s&&d.add(e)}else d.add(e);return d}_collectNthOfType(r,e){const{a:h,b:n,reverse:a}=r,{localName:l,namespaceURI:o,parentNode:u,prefix:d}=e,i=new Set;if(u){const s=this.#r;let t=(0,k.traverseNode)(u,s);t=s.firstChild();let f=0;for(;t;)f++,t=s.nextSibling();if(h===0){if(n>0&&n<=f){t=(0,k.traverseNode)(u,s),a?t=s.lastChild():t=s.firstChild();let b=0;for(;t;){const{localName:m,namespaceURI:w,prefix:p}=t;if(m===l&&p===d&&w===o){if(b===n-1){i.add(t);break}b++}a?t=s.previousSibling():t=s.nextSibling()}}}else{let b=n-1;if(h>0)for(;b<0;)b+=h;if(b>=0&&b<f){t=(0,k.traverseNode)(u,s),a?t=s.lastChild():t=s.firstChild();let m=h>0?0:n-1;for(;t;){const{localName:w,namespaceURI:p,prefix:N}=t;if(w===l&&N===d&&p===o){if(m===b&&(i.add(t),b+=h),b<0||b>=f)break;h>0?m++:m--}a?t=s.previousSibling():t=s.nextSibling()}}}if(a&&i.size>1){const b=[...i];return new Set(b.reverse())}}else e===this.#s&&h+n===1&&i.add(e);return i}_matchAnPlusB(r,e,h,n){const{nth:{a,b:l,name:o},selector:u}=r,d=new Map;if(o?(o==="even"?(d.set("a",2),d.set("b",0)):o==="odd"&&(d.set("a",2),d.set("b",1)),h.indexOf("last")>-1&&d.set("reverse",!0)):(typeof a=="string"&&/-?\d+/.test(a)?d.set("a",a*1):d.set("a",0),typeof l=="string"&&/-?\d+/.test(l)?d.set("b",l*1):d.set("b",0),h.indexOf("last")>-1&&d.set("reverse",!0)),/^nth-(?:last-)?child$/.test(h)){u&&d.set("selector",u);const i=Object.fromEntries(d);return this._collectNthChild(i,e,n)}else if(/^nth-(?:last-)?of-type$/.test(h)){const i=Object.fromEntries(d);return this._collectNthOfType(i,e)}return new Set}_matchHasPseudoFunc(r,e,h={}){let n;if(Array.isArray(r)&&r.length){const a=r.map(t=>t),[l]=a,{type:o}=l;let u;o===c.COMBINATOR?u=a.shift():u={name:" ",type:c.COMBINATOR};const d=[];for(;a.length;){const[t]=a,{type:f}=t;if(f===c.COMBINATOR)break;d.push(a.shift())}const i={combo:u,leaves:d};h.dir=v;const s=this._matchCombinator(i,e,h);if(s.size)if(a.length){for(const t of s)if(n=this._matchHasPseudoFunc(a,t,h),n)break}else n=!0}return!!n}_matchLogicalPseudoFunc(r,e,h={}){const{astName:n="",branches:a=[],selector:l="",twigBranches:o=[]}=r;let u;if(n==="has")if(l.includes(":has("))u=null;else{let d;for(const i of a)if(d=this._matchHasPseudoFunc(i,e,h),d)break;d&&(u=e)}else{const d=/^(?:is|where)$/.test(n);h.forgive=d;const i=o.length;let s;for(let t=0;t<i;t++){const f=o[t],b=f.length-1,{leaves:m}=f[b];if(s=this._matchLeaves(m,e,h),s&&b>0){let w=new Set([e]);for(let p=b-1;p>=0;p--){const N=f[p],_=[];h.dir=x;for(const y of w){const E=this._matchCombinator(N,y,h);E.size&&_.push(...E)}if(_.length)p===0?s=!0:w=new Set(_);else{s=!1;break}}}if(s)break}n==="not"?s||(u=e):s&&(u=e)}return u??null}_matchPseudoClassSelector(r,e,h={}){const{children:n,name:a}=r,{localName:l,parentNode:o}=e,{forgive:u,warn:d=this.#i}=h,i=new Set;if(c.REG_LOGICAL.test(a)){let s;if(this.#c.has(r))s=this.#c.get(r);else{const{branches:f}=(0,g.walkAST)(r),b=[],m=[];for(const[...w]of f){for(const y of w){const E=(0,g.generateCSS)(y);b.push(E)}const p=[],N=new Set;let _=w.shift();for(;_;)if(_.type===c.COMBINATOR?(p.push({combo:_,leaves:[...N]}),N.clear()):_&&N.add(_),w.length)_=w.shift();else{p.push({combo:null,leaves:[...N]}),N.clear();break}m.push(p)}s={astName:a,branches:f,twigBranches:m,selector:b.join(",")},this.#c.set(r,s)}const t=this._matchLogicalPseudoFunc(s,e,h);t&&i.add(t)}else if(Array.isArray(n))if(/^nth-(?:last-)?(?:child|of-type)$/.test(a)){const[s]=n;return this._matchAnPlusB(s,e,a,h)}else switch(a){case"dir":case"lang":{const s=this.#h.matchSelector(r,e,h,!0);s&&i.add(s);break}case"state":{if((0,k.isCustomElement)(e)){const[{value:s}]=n;if(s)if(e[s])i.add(e);else for(const t in e){const f=e[t];if(f instanceof this.#a.ElementInternals){f?.states?.has(s)&&i.add(e);break}}}break}case"current":case"nth-col":case"nth-last-col":{if(d)throw new DOMException(`Unsupported pseudo-class :${a}()`,c.NOT_SUPPORTED_ERR);break}case"host":case"host-context":break;case"contains":{if(d)throw new DOMException(`Unknown pseudo-class :${a}()`,c.NOT_SUPPORTED_ERR);break}default:if(!u)throw new DOMException(`Unknown pseudo-class :${a}()`,c.SYNTAX_ERR)}else switch(a){case"any-link":case"link":{O.test(l)&&e.hasAttribute("href")&&i.add(e);break}case"local-link":{if(O.test(l)&&e.hasAttribute("href")){const{href:s,origin:t,pathname:f}=new URL(this.#t.URL),b=new URL(e.getAttribute("href"),s);b.origin===t&&b.pathname===f&&i.add(e)}break}case"visited":break;case"hover":{const{target:s,type:t}=this.#n??{};/^(?:mouse|pointer)(?:down|over|up)$/.test(t)&&e.contains(s)&&i.add(e);break}case"active":{const{buttons:s,target:t,type:f}=this.#n??{};/(?:mouse|pointer)down/.test(f)&&s&c.BIT_01&&e.contains(t)&&i.add(e);break}case"target":{const{hash:s}=new URL(this.#t.URL);e.id&&s===`#${e.id}`&&this.#t.contains(e)&&i.add(e);break}case"target-within":{const{hash:s}=new URL(this.#t.URL);if(s){const t=s.replace(/^#/,"");let f=this.#t.getElementById(t);for(;f;){if(f===e){i.add(e);break}f=f.parentNode}}break}case"scope":{this.#e.nodeType===c.ELEMENT_NODE?!this.#u&&e===this.#e&&i.add(e):e===this.#t.documentElement&&i.add(e);break}case"focus":{e===this.#t.activeElement&&e.tabIndex>=0&&(0,k.isFocusable)(e)&&i.add(e);break}case"focus-visible":{if(e===this.#t.activeElement&&e.tabIndex>=0){let s;if((0,k.isFocusVisible)(e))s=!0;else{const{target:t,type:f}=this.#n??{},{target:b,relatedTarget:m}=this.#k??{};(/^key(?:down|up)$/.test(f)&&e.contains(t)||m&&(0,k.isFocusVisible)(m)&&e.contains(b))&&(s=!0)}s&&(0,k.isFocusable)(e)&&i.add(e)}break}case"focus-within":{let s,t=this.#t.activeElement;if(t.tabIndex>=0)for(;t;){if(t===e){s=!0;break}t=t.parentNode}s&&(0,k.isFocusable)(e)&&i.add(e);break}case"open":{I.test(l)&&e.hasAttribute("open")&&i.add(e);break}case"closed":{I.test(l)&&!e.hasAttribute("open")&&i.add(e);break}case"disabled":{if(M.test(l)||(0,k.isCustomElement)(e,{formAssociated:!0})){if(e.disabled||e.hasAttribute("disabled"))i.add(e);else if(e.localName==="option")o.localName==="optgroup"&&(o.disabled||o.hasAttribute("disabled"))&&i.add(e);else if(e.localName!=="optgroup"){let s,t=o;for(;t;)if(t.localName==="fieldset"&&(t.disabled||t.hasAttribute("disabled"))){const f=this.#r;let b=(0,k.traverseNode)(t,f);for(b=f.firstChild();b&&b.localName!=="legend";)b=f.nextSibling();b&&b.contains(e)||(s=!0);break}else{if(t.localName==="form")break;if(t.parentNode?.nodeType===c.ELEMENT_NODE){if(t.parentNode.localName==="form")break;t=t.parentNode}else break}s&&i.add(e)}}break}case"enabled":{if((M.test(l)||(0,k.isCustomElement)(e,{formAssociated:!0}))&&!(e.disabled&&e.hasAttribute("disabled")))if(e.localName==="optgroup")i.add(e);else if(e.localName==="option")(o.localName!=="optgroup"||!(o.disabled||o.hasAttribute("disabled")))&&i.add(e);else{let s,t=o;for(;t;)if(t.localName==="fieldset"&&(t.disabled||t.hasAttribute("disabled"))){const f=this.#r;let b=(0,k.traverseNode)(t,f);for(b=f.firstChild();b&&b.localName!=="legend";)b=f.nextSibling();b&&b.contains(e)||(s=!0);break}else{if(t.localName==="form")break;if(t.parentNode?.nodeType===c.ELEMENT_NODE){if(t.parentNode.localName==="form")break;t=t.parentNode}else break}s||i.add(e)}break}case"read-only":{switch(l){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}case"input":{(!e.type||c.REG_INPUT_TYPE.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,k.isContentEditable)(e)||i.add(e)}break}case"read-write":{switch(l){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||i.add(e);break}case"input":{(!e.type||c.REG_INPUT_TYPE.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,k.isContentEditable)(e)&&i.add(e)}break}case"placeholder-shown":{let s;if(e.placeholder?s=e.placeholder:e.hasAttribute("placeholder")&&(s=e.getAttribute("placeholder")),typeof s=="string"&&!/[\r\n]/.test(s)){let t;l==="textarea"?t=e:l==="input"&&(e.hasAttribute("type")?Q.test(e.getAttribute("type"))&&(t=e):t=e),t&&e.value===""&&i.add(e)}break}case"checked":{(e.checked&&l==="input"&&e.hasAttribute("type")&&C.test(e.getAttribute("type"))||e.selected&&l==="option")&&i.add(e);break}case"indeterminate":{if(e.indeterminate&&l==="input"&&e.type==="checkbox"||l==="progress"&&!e.hasAttribute("value"))i.add(e);else if(l==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const s=e.name;let t=e.parentNode;for(;t&&t.localName!=="form";)t=t.parentNode;t||(t=this.#t.documentElement);const f=t.getElementsByTagName("input"),b=f.length;let m;for(let w=0;w<b;w++){const p=f[w];if(p.getAttribute("type")==="radio"&&(s?p.getAttribute("name")===s&&(m=!!p.checked):p.hasAttribute("name")||(m=!!p.checked),m))break}m||i.add(e)}break}case"default":{if(l==="button"&&!(e.hasAttribute("type")&&D.test(e.getAttribute("type")))||l==="input"&&e.hasAttribute("type")&&U.test(e.getAttribute("type"))){let s=e.parentNode;for(;s&&s.localName!=="form";)s=s.parentNode;if(s){const t=this.#r;let f=(0,k.traverseNode)(s,t);for(f=t.firstChild();f&&s.contains(f);){const b=f.localName;let m;if(b==="button"?m=!(f.hasAttribute("type")&&D.test(f.getAttribute("type"))):b==="input"&&(m=f.hasAttribute("type")&&U.test(f.getAttribute("type"))),m){f===e&&i.add(e);break}f=t.nextNode()}}}else(l==="input"&&e.hasAttribute("type")&&C.test(e.getAttribute("type"))&&e.hasAttribute("checked")||l==="option"&&e.hasAttribute("selected"))&&i.add(e);break}case"valid":{if(T.test(l))e.checkValidity()&&(e.maxLength>=0?e.maxLength>=e.value.length&&i.add(e):i.add(e));else if(l==="fieldset"){const s=this.#r;let t=(0,k.traverseNode)(e,s);t=s.firstChild();let f;if(!t)f=!0;else for(;t&&e.contains(t)&&!(T.test(t.localName)&&(t.checkValidity()?t.maxLength>=0?f=t.maxLength>=t.value.length:f=!0:f=!1,!f));)t=s.nextNode();f&&i.add(e)}break}case"invalid":{if(T.test(l))e.checkValidity()?e.maxLength>=0&&e.maxLength<e.value.length&&i.add(e):i.add(e);else if(l==="fieldset"){const s=this.#r;let t=(0,k.traverseNode)(e,s);t=s.firstChild();let f;if(!t)f=!0;else for(;t&&e.contains(t)&&!(T.test(t.localName)&&(t.checkValidity()?t.maxLength>=0?f=t.maxLength>=t.value.length:f=!0:f=!1,!f));)t=s.nextNode();f||i.add(e)}break}case"in-range":{l==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&$.test(e.getAttribute("type"))&&!(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&(e.hasAttribute("min")||e.hasAttribute("max")||e.getAttribute("type")==="range")&&i.add(e);break}case"out-of-range":{l==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&$.test(e.getAttribute("type"))&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&i.add(e);break}case"required":{let s;if(/^(?:select|textarea)$/.test(l))s=e;else if(l==="input")if(e.hasAttribute("type")){const t=e.getAttribute("type");(t==="file"||C.test(t)||c.REG_INPUT_TYPE.test(t))&&(s=e)}else s=e;s&&(e.required||e.hasAttribute("required"))&&i.add(e);break}case"optional":{let s;if(/^(?:select|textarea)$/.test(l))s=e;else if(l==="input")if(e.hasAttribute("type")){const t=e.getAttribute("type");(t==="file"||C.test(t)||c.REG_INPUT_TYPE.test(t))&&(s=e)}else s=e;s&&!(e.required||e.hasAttribute("required"))&&i.add(e);break}case"root":{e===this.#t.documentElement&&i.add(e);break}case"empty":{if(e.hasChildNodes()){const s=this.#t.createTreeWalker(e,c.SHOW_ALL);let t=s.firstChild(),f;for(;t&&(f=t.nodeType!==c.ELEMENT_NODE&&t.nodeType!==c.TEXT_NODE,!!f);)t=s.nextSibling();f&&i.add(e)}else i.add(e);break}case"first-child":{(o&&e===o.firstElementChild||e===this.#s)&&i.add(e);break}case"last-child":{(o&&e===o.lastElementChild||e===this.#s)&&i.add(e);break}case"only-child":{(o&&e===o.firstElementChild&&e===o.lastElementChild||e===this.#s)&&i.add(e);break}case"first-of-type":{if(o){const[s]=this._collectNthOfType({a:0,b:1},e);s&&i.add(s)}else e===this.#s&&i.add(e);break}case"last-of-type":{if(o){const[s]=this._collectNthOfType({a:0,b:1,reverse:!0},e);s&&i.add(s)}else e===this.#s&&i.add(e);break}case"only-of-type":{if(o){const[s]=this._collectNthOfType({a:0,b:1},e);if(s===e){const[t]=this._collectNthOfType({a:0,b:1,reverse:!0},e);t===e&&i.add(e)}}else e===this.#s&&i.add(e);break}case"defined":{e.hasAttribute("is")||l.includes("-")?(0,k.isCustomElement)(e)&&i.add(e):(e instanceof this.#a.HTMLElement||e instanceof this.#a.SVGElement)&&i.add(e);break}case"popover-open":{e.popover&&(0,k.isVisible)(e)&&i.add(e);break}case"host":case"host-context":break;case"after":case"before":case"first-letter":case"first-line":{if(d)throw new DOMException(`Unsupported pseudo-element ::${a}`,c.NOT_SUPPORTED_ERR);break}case"autofill":case"blank":case"buffering":case"current":case"fullscreen":case"future":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(d)throw new DOMException(`Unsupported pseudo-class :${a}`,c.NOT_SUPPORTED_ERR);break}default:if(a.startsWith("-webkit-")){if(d)throw new DOMException(`Unsupported pseudo-class :${a}`,c.NOT_SUPPORTED_ERR)}else if(!u)throw new DOMException(`Unknown pseudo-class :${a}`,c.SYNTAX_ERR)}return i}_matchShadowHostPseudoClass(r,e){const{children:h,name:n}=r;let a;if(Array.isArray(h)){const{branches:l}=(0,g.walkAST)(h[0]),[o]=l,[...u]=o,{host:d}=e;if(n==="host"){let i;for(const s of u){const{type:t}=s;if(t===c.COMBINATOR){const f=(0,g.generateCSS)(r);throw new DOMException(`Invalid selector ${f}`,c.SYNTAX_ERR)}if(i=this._matchSelector(s,d).has(d),!i)break}i&&(a=e)}else if(n==="host-context"){let i=d,s;for(;i;){for(const t of u){const{type:f}=t;if(f===c.COMBINATOR){const b=(0,g.generateCSS)(r);throw new DOMException(`Invalid selector ${b}`,c.SYNTAX_ERR)}if(s=this._matchSelector(t,i).has(i),!s)break}if(s)break;i=i.parentNode}s&&(a=e)}}else if(n==="host")a=e;else throw new DOMException(`Invalid selector :${n}`,c.SYNTAX_ERR);return a??null}_matchSelector(r,e,h){const{type:n}=r,a=new Set;if(r.name===c.EMPTY)return a;const l=(0,g.unescapeSelector)(r.name);if(typeof l=="string"&&l!==r.name&&(r.name=l),e.nodeType===c.ELEMENT_NODE)switch(n){case c.PS_ELEMENT_SELECTOR:{this.#h.matchPseudoElementSelector(l,h);break}case c.ID_SELECTOR:{e.id===l&&a.add(e);break}case c.CLASS_SELECTOR:{e.classList.contains(l)&&a.add(e);break}case c.PS_CLASS_SELECTOR:return this._matchPseudoClassSelector(r,e,h);default:{const o=this.#h.matchSelector(r,e,h,!0);o&&a.add(o)}}else if(this.#u&&n===c.PS_CLASS_SELECTOR&&e.nodeType===c.DOCUMENT_FRAGMENT_NODE){if(l!=="has"&&c.REG_LOGICAL.test(l))return this._matchPseudoClassSelector(r,e,h);if(P.test(l)){const o=this._matchShadowHostPseudoClass(r,e,h);o&&a.add(o)}}return a}_matchLeaves(r,e,h){let n,a;if(this.#f?a=this.#b.get(r):a=this.#N.get(r),a&&a.has(e)){const{matched:l}=a.get(e);n=l}if(typeof n!="boolean"){let l=!0;e.nodeType===c.ELEMENT_NODE&&/^(?:button|fieldset|form|input|select|textarea)$/.test(e.localName)&&(l=!1);for(const o of r){switch(o.type){case c.ATTR_SELECTOR:case c.ID_SELECTOR:{l=!1;break}case c.PS_CLASS_SELECTOR:{/^(?:(?:any-)?link|defined|dir)$/.test(o.name)&&(l=!1);break}default:}if(n=this._matchSelector(o,e,h).has(e),!n)break}l&&(a||(a=new WeakMap),a.set(e,{matched:n}),this.#f?this.#b.set(r,a):this.#N.set(r,a))}return!!n}_matchHTMLCollection(r,e={}){const{compound:h,filterLeaves:n}=e,a=new Set,l=r.length;if(l)if(h)for(let o=0;o<l;o++){const u=r[o];this._matchLeaves(n,u,e)&&a.add(u)}else{const o=[].slice.call(r);return new Set(o)}return a}_findDescendantNodes(r,e,h){const[n,...a]=r,l=a.length>0,{type:o}=n,u=(0,g.unescapeSelector)(n.name);typeof u=="string"&&u!==n.name&&(n.name=u);let d=new Set,i=!1;if(this.#u)i=!0;else switch(o){case c.PS_ELEMENT_SELECTOR:{this.#h.matchPseudoElementSelector(u,h);break}case c.ID_SELECTOR:{if(this.#s.nodeType===c.ELEMENT_NODE)i=!0;else{const s=this.#s.getElementById(u);s&&s!==e&&e.contains(s)&&(l?this._matchLeaves(a,s,h)&&d.add(s):d.add(s))}break}case c.CLASS_SELECTOR:{const s=e.getElementsByClassName(u);d=this._matchHTMLCollection(s,{compound:l,filterLeaves:a});break}case c.TYPE_SELECTOR:{if(this.#t.contentType==="text/html"&&!/[*|]/.test(u)){const s=e.getElementsByTagName(u);d=this._matchHTMLCollection(s,{compound:l,filterLeaves:a})}else i=!0;break}default:i=!0}return{nodes:d,pending:i}}_matchCombinator(r,e,h={}){const{combo:n,leaves:a}=r,{name:l}=n,{parentNode:o}=e,{dir:u}=h,d=new Set;if(u===v)switch(l){case"+":{const i=e.nextElementSibling;i&&this._matchLeaves(a,i,h)&&d.add(i);break}case"~":{if(o){const i=this._createTreeWalker(o);let s=(0,k.traverseNode)(e,i);for(s=i.nextSibling();s;)this._matchLeaves(a,s,h)&&d.add(s),s=i.nextSibling()}break}case">":{const i=this._createTreeWalker(e);let s=(0,k.traverseNode)(e,i);for(s=i.firstChild();s;)this._matchLeaves(a,s,h)&&d.add(s),s=i.nextSibling();break}case" ":default:{const{nodes:i,pending:s}=this._findDescendantNodes(a,e);if(i.size)return i;if(s){const t=this._createTreeWalker(e);let f=(0,k.traverseNode)(e,t);for(f=t.nextNode();f&&e.contains(f);)this._matchLeaves(a,f,h)&&d.add(f),f=t.nextNode()}}}else switch(l){case"+":{const i=e.previousElementSibling;i&&this._matchLeaves(a,i,h)&&d.add(i);break}case"~":{if(o){const i=this._createTreeWalker(o);let s=(0,k.traverseNode)(o,i);for(s=i.firstChild();s&&s!==e;)this._matchLeaves(a,s,h)&&d.add(s),s=i.nextSibling()}break}case">":{o&&this._matchLeaves(a,o,h)&&d.add(o);break}case" ":default:{const i=[];let s=o;for(;s;)this._matchLeaves(a,s,h)&&i.push(s),s=s.parentNode;if(i.length)return new Set(i.reverse())}}return d}_findNode(r,e){const{node:h}=e,n=this.#m;let a=(0,k.traverseNode)(h,n),l;if(a)for((a.nodeType!==c.ELEMENT_NODE||a===h&&a!==this.#s)&&(a=n.nextNode());a;){if(this._matchLeaves(r,a,{warn:this.#i})){l=a;break}a=n.nextNode()}return l??null}_matchSelf(r){const e=[],h=this._matchLeaves(r,this.#e,{warn:this.#i});let n=!1;return h&&(e.push(this.#e),n=!0),[e,n]}_findLineal(r,e={}){const{complex:h}=e,n=[];let a=this._matchLeaves(r,this.#e,{warn:this.#i}),l=!1;if(a&&(n.push(this.#e),l=!0),!a||h){let o=this.#e.parentNode;for(;o&&(a=this._matchLeaves(r,o,{warn:this.#i}),a&&(n.push(o),l=!0),o.parentNode);)o=o.parentNode}return[n,l]}_findFirst(r){const e=[],h=this._findNode(r,{node:this.#e});let n=!1;return h&&(e.push(h),n=!0),[e,n]}_findFromHTMLCollection(r,e={}){const{complex:h,compound:n,filterLeaves:a,targetType:l}=e;let o=[],u=!1,d=!1;const i=r.length;if(i)if(this.#e.nodeType===c.ELEMENT_NODE)for(let s=0;s<i;s++){const t=r[s];if(t!==this.#e&&(this.#e.contains(t)||t.contains(this.#e))){if(n){if(this._matchLeaves(a,t,{warn:this.#i})&&(o.push(t),u=!0,l===c.TARGET_FIRST))break}else if(o.push(t),u=!0,l===c.TARGET_FIRST)break}}else if(h)if(n)for(let s=0;s<i;s++){const t=r[s];if(this._matchLeaves(a,t,{warn:this.#i})&&(o.push(t),u=!0,l===c.TARGET_FIRST))break}else o=[].slice.call(r),u=!0,d=!0;else if(n)for(let s=0;s<i;s++){const t=r[s];if(this._matchLeaves(a,t,{warn:this.#i})&&(o.push(t),u=!0,l===c.TARGET_FIRST))break}else o=[].slice.call(r),u=!0,d=!0;return[o,u,d]}_findEntryNodes(r,e,h){const{leaves:n}=r,[a,...l]=n,o=l.length>0,{name:u,type:d}=a;let i=[],s=!1,t=!1,f=!1;switch(d){case c.PS_ELEMENT_SELECTOR:{this.#h.matchPseudoElementSelector(u,{warn:this.#i});break}case c.ID_SELECTOR:{if(e===c.TARGET_SELF)[i,t]=this._matchSelf(n);else if(e===c.TARGET_LINEAL)[i,t]=this._findLineal(n,{complex:h});else if(e===c.TARGET_FIRST&&this.#s.nodeType!==c.ELEMENT_NODE){const b=this.#s.getElementById(u);b&&(o?this._matchLeaves(l,b,{warn:this.#i})&&(i.push(b),t=!0):(i.push(b),t=!0))}else e===c.TARGET_FIRST?[i,t]=this._findFirst(n):f=!0;break}case c.CLASS_SELECTOR:{if(e===c.TARGET_SELF)[i,t]=this._matchSelf(n);else if(e===c.TARGET_LINEAL)[i,t]=this._findLineal(n,{complex:h});else if(this.#s.nodeType===c.DOCUMENT_NODE){const b=this.#s.getElementsByClassName(u);b.length&&([i,t,s]=this._findFromHTMLCollection(b,{complex:h,compound:o,filterLeaves:l,targetType:e}))}else e===c.TARGET_FIRST?[i,t]=this._findFirst(n):f=!0;break}case c.TYPE_SELECTOR:{if(e===c.TARGET_SELF)[i,t]=this._matchSelf(n);else if(e===c.TARGET_LINEAL)[i,t]=this._findLineal(n,{complex:h});else if(this.#t.contentType==="text/html"&&this.#s.nodeType===c.DOCUMENT_NODE&&!/[*|]/.test(u)){const b=this.#s.getElementsByTagName(u);b.length&&([i,t,s]=this._findFromHTMLCollection(b,{complex:h,compound:o,filterLeaves:l,targetType:e}))}else e===c.TARGET_FIRST?[i,t]=this._findFirst(n):f=!0;break}default:if(e!==c.TARGET_LINEAL&&P.test(u)){if(this.#u&&this.#e.nodeType===c.DOCUMENT_FRAGMENT_NODE){const b=this._matchShadowHostPseudoClass(a,this.#e);b&&(i.push(b),t=!0)}}else e===c.TARGET_SELF?[i,t]=this._matchSelf(n):e===c.TARGET_LINEAL?[i,t]=this._findLineal(n,{complex:h}):e===c.TARGET_FIRST?[i,t]=this._findFirst(n):f=!0}return{collected:s,compound:o,filtered:t,nodes:i,pending:f}}_collectNodes(r){const e=this.#l.values();if(r===c.TARGET_ALL||r===c.TARGET_FIRST){const h=new Set;let n=0;for(const{branch:a}of e){const l=a.length,o=l>1,u=a[0];let d,i;if(o){const{combo:w,leaves:[{name:p,type:N}]}=u,_=a[l-1],{leaves:[{name:y,type:E}]}=_;if(E===c.PS_ELEMENT_SELECTOR||E===c.ID_SELECTOR)d=x,i=_;else if(N===c.PS_ELEMENT_SELECTOR||N===c.ID_SELECTOR)d=v,i=u;else if(r===c.TARGET_ALL)if(p==="*"&&N===c.TYPE_SELECTOR)d=x,i=_;else if(y==="*"&&E===c.TYPE_SELECTOR)d=v,i=u;else if(l===2){const{name:A}=w;/^[+~]$/.test(A)?(d=x,i=_):(d=v,i=u)}else d=v,i=u;else if(y==="*"&&E===c.TYPE_SELECTOR)d=v,i=u;else if(p==="*"&&N===c.TYPE_SELECTOR)d=x,i=_;else{let A;for(const{combo:L,leaves:[W]}of a){const{name:G,type:H}=W;if(H===c.PS_CLASS_SELECTOR&&G==="dir"){A=!1;break}if(!A&&L){const{name:z}=L;/^[+~]$/.test(z)&&(A=!0)}}A?(d=v,i=u):(d=x,i=_)}}else d=x,i=u;const{collected:s,compound:t,filtered:f,nodes:b,pending:m}=this._findEntryNodes(i,r,o);b.length?(this.#l[n].find=!0,this.#d[n]=b):m&&h.add(new Map([["index",n],["twig",i]])),this.#l[n].collected=s,this.#l[n].dir=d,this.#l[n].filtered=f||!t,n++}if(h.size){let a,l;this.#e!==this.#s&&this.#e.nodeType===c.ELEMENT_NODE?(a=this.#e,l=this.#m):(a=this.#s,l=this.#r);let o=(0,k.traverseNode)(a,l);for(;o;){let u=!1;if(this.#e.nodeType===c.ELEMENT_NODE?o===this.#e?u=!0:u=this.#e.contains(o):u=!0,u)for(const d of h){const{leaves:i}=d.get("twig");if(this._matchLeaves(i,o,{warn:this.#i})){const t=d.get("index");this.#l[t].filtered=!0,this.#l[t].find=!0,this.#d[t].push(o)}}o!==l.currentNode&&(o=(0,k.traverseNode)(o,l)),o=l.nextNode()}}}else{let h=0;for(const{branch:n}of e){const a=n[n.length-1],l=n.length>1,{compound:o,filtered:u,nodes:d}=this._findEntryNodes(a,r,l);d.length&&(this.#l[h].find=!0,this.#d[h]=d),this.#l[h].dir=x,this.#l[h].filtered=u||!o,h++}}return[this.#l,this.#d]}_getCombinedNodes(r,e,h){const n=[];for(const a of e){const l=this._matchCombinator(r,a,{dir:h,warn:this.#i});l.size&&n.push(...l)}return n.length?new Set(n):new Set}_matchNodeNext(r,e,h){const{combo:n,index:a}=h,{combo:l,leaves:o}=r[a],u={combo:n,leaves:o},d=this._getCombinedNodes(u,e,v);let i;if(d.size)if(a===r.length-1){const[s]=(0,k.sortNodes)(d);i=s}else i=this._matchNodeNext(r,d,{combo:l,index:a+1});return i??null}_matchNodePrev(r,e,h){const{index:n}=h,a=r[n],l=new Set([e]),o=this._getCombinedNodes(a,l,x);let u;if(o.size){if(n===0)u=e;else for(const d of o)if(this._matchNodePrev(r,d,{index:n-1}))return e}return u??null}find(r){(r===c.TARGET_ALL||r===c.TARGET_FIRST)&&this._prepareQuerySelectorWalker();const[[...e],h]=this._collectNodes(r),n=e.length;let a,l=new Set;for(let o=0;o<n;o++){const{branch:u,collected:d,dir:i,find:s}=e[o],t=u.length;if(t&&s){const f=h[o],b=f.length,m=t-1;if(m===0)if((r===c.TARGET_ALL||r===c.TARGET_FIRST)&&this.#e.nodeType===c.ELEMENT_NODE)for(let w=0;w<b;w++){const p=f[w];if(p!==this.#e&&this.#e.contains(p)&&(l.add(p),r!==c.TARGET_ALL))break}else if(r===c.TARGET_ALL)if(l.size){const w=[...l];l=new Set([...w,...f]),a=!0}else l=new Set(f);else{const[w]=f;l.add(w)}else if(r===c.TARGET_ALL)if(i===v){let{combo:w}=u[0];for(const p of f){let N=new Set([p]);for(let _=1;_<t;_++){const{combo:y,leaves:E}=u[_],A={combo:w,leaves:E};if(N=this._getCombinedNodes(A,N,i),N.size)if(_===m)if(l.size){const L=[...l];l=new Set([...L,...N]),a=!0}else l=N;else w=y;else break}}}else for(const w of f){let p=new Set([w]);for(let N=m-1;N>=0;N--){const _=u[N];if(p=this._getCombinedNodes(_,p,i),p.size)N===0&&(l.add(w),t>1&&l.size>1&&(a=!0));else break}}else if(r===c.TARGET_FIRST&&i===v){const{combo:w}=u[0];let p;for(const N of f)if(p=this._matchNodeNext(u,new Set([N]),{combo:w,index:1}),p){l.add(p);break}if(!p&&!d){const{leaves:N}=u[0],[_]=f;let y=this._findNode(N,{node:_});for(;y;){if(p=this._matchNodeNext(u,new Set([y]),{combo:w,index:1}),p){l.add(p);break}y=this._findNode(N,{node:y})}}}else{let w;for(const p of f)if(w=this._matchNodePrev(u,p,{index:m-1}),w){l.add(p);break}if(!w&&!d&&r===c.TARGET_FIRST){const{leaves:p}=u[m],[N]=f;let _=this._findNode(p,{node:N});for(;_;){if(w=this._matchNodePrev(u,_,{index:m-1}),w){l.add(_);break}_=this._findNode(p,{node:_})}}}}}return r===c.TARGET_FIRST?(l.delete(this.#e),l.size>1&&(l=new Set((0,k.sortNodes)(l)))):r===c.TARGET_ALL&&(l.delete(this.#e),a&&l.size>1&&(l=new Set((0,k.sortNodes)(l)))),l}}0&&(module.exports={Finder});
1
+ var R=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var Y=(S,r)=>{for(var e in r)R(S,e,{get:r[e],enumerable:!0})},q=(S,r,e,f)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of j(r))!V.call(S,n)&&n!==e&&R(S,n,{get:()=>r[n],enumerable:!(f=B(r,n))||f.enumerable});return S};var K=S=>q(R({},"__esModule",{value:!0}),S);var Z={};Y(Z,{Finder:()=>J});module.exports=K(Z);var F=require("./matcher.js"),g=require("./parser.js"),k=require("./utility.js"),c=require("./constant.js");const v="next",x="prev",X="Tab",O=/^a(?:rea)?$/,M=/^(?:button|fieldset|input|optgroup|option|select|textarea)$/,T=/^(?:button|form|input|select|textarea)$/,I=/^(?:details|dialog)$/,$=/^host(?:-context)?$/,C=/^(?:checkbox|radio)$/,P=/^(?:date(?:time-local)?|month|number|range|time|week)$/,D=/^(?:button|reset)$/,U=/^(?:image|submit)$/,Q=/^(?:email|number|password|search|tel|text|url)$/;class J{#l;#b;#w;#t;#c;#n;#k;#o;#h;#f;#e;#d;#_;#m;#N;#s;#u;#r;#p;#i;#a;constructor(r){this.#a=r,this.#f=new F.Matcher,this.#b=new WeakMap,this.#c=new WeakMap,this.#h=new WeakMap,this.#N=new WeakMap,this.#n=null,this.#k=null,this._registerEventListeners()}onError(r,e={}){if(!(e.noexcept??this.#_))if(r instanceof DOMException||r instanceof this.#a.DOMException)if(r.name===c.NOT_SUPPORTED_ERR)this.#i&&console.warn(r.message);else throw new this.#a.DOMException(r.message,r.name);else throw r.name in this.#a?new this.#a[r.name](r.message):r}setup(r,e,f={}){const{event:n,noexcept:a,warn:l}=f;return this.#_=!!a,this.#i=!!l,this.#e=e,[this.#t,this.#s,this.#r]=(0,k.resolveContent)(e),this.#u=(0,k.isInShadowTree)(e),[this.#l,this.#d]=this._correspond(r),this.#h=new WeakMap,this.#p=new WeakMap,this._setEvent(n),e}_registerEventListeners(){const r={capture:!0,passive:!0},e=[],f=["mouseover","mousedown","mouseup","mouseout"];for(const a of f)e.push(this.#a.addEventListener(a,l=>{this.#n=l},r));const n=["keydown","keyup"];for(const a of n)e.push(this.#a.addEventListener(a,l=>{l.key===X&&(this.#n=l)},r));return e.push(this.#a.addEventListener("focusin",a=>{this.#k=a},r)),e}_setEvent(r){return(r instanceof this.#a.KeyboardEvent||r instanceof this.#a.MouseEvent)&&(this.#n=r),this.#n}_correspond(r){const e=[];this.#w=!1,this.#o=!1;let f;if(this.#c.has(this.#t)){const n=this.#c.get(this.#t);if(n&&n.has(`${r}`)){const a=n.get(`${r}`);f=a.ast,this.#w=a.descendant,this.#o=a.invalidate}}if(f){const n=f.length;for(let a=0;a<n;a++)f[a].collected=!1,f[a].dir=null,f[a].filtered=!1,f[a].find=!1,e[a]=[]}else{let n;try{n=(0,g.parseSelector)(r)}catch(t){this.onError(t)}const{branches:a,info:{hasHasPseudoFunc:l,hasNthChildOfSelector:o}}=(0,g.walkAST)(n);let u=!!(l||o),d=!1,i=0;f=[];for(const[...t]of a){const h=[];let b=t.shift();if(b&&b.type!==c.COMBINATOR){const m=new Set;for(;b;){if(b.type===c.COMBINATOR){const[p]=t;if(p.type===c.COMBINATOR)throw new DOMException(`Invalid selector ${r}`,c.SYNTAX_ERR);const w=b.name;/^[\s>]$/.test(w)?d=!0:u=!0,h.push({combo:b,leaves:(0,g.sortAST)(m)}),m.clear()}else if(b){let{name:p}=b;p&&typeof p=="string"&&(p=(0,g.unescapeSelector)(p),typeof p=="string"&&p!==b.name&&(b.name=p),/[|:]/.test(p)&&(b.namespace=!0)),m.add(b)}if(t.length)b=t.shift();else{h.push({combo:null,leaves:(0,g.sortAST)(m)}),m.clear();break}}}f.push({branch:h,collected:!1,dir:null,filtered:!1,find:!1}),e[i]=[],i++}let s;this.#c.has(this.#t)?s=this.#c.get(this.#t):s=new Map,s.set(`${r}`,{ast:f,descendant:d,invalidate:u}),this.#c.set(this.#t,s),this.#w=d,this.#o=u}return[f,e]}_createTreeWalker(r){let e;return this.#p.has(r)?e=this.#p.get(r):(e=this.#t.createTreeWalker(r,c.WALKER_FILTER),this.#p.set(r,e)),e}_prepareQuerySelectorWalker(){return this.#m=this._createTreeWalker(this.#e),this.#m}_collectNthChild(r,e,f){const{a:n,b:a,reverse:l,selector:o}=r,{parentNode:u}=e,d=new Set;let i;if(o){const{branches:s}=(0,g.walkAST)(o);i=s}if(u){const s=this.#r;let t=(0,k.traverseNode)(u,s);t=s.firstChild();let h=0;for(;t;)h++,t=s.nextSibling();const b=new Set;if(i)for(t=(0,k.traverseNode)(u,s),t=s.firstChild();t;){if((0,k.isVisible)(t)){let m;for(const p of i)if(m=this._matchLeaves(p,t,f),!m)break;m&&b.add(t)}t=s.nextSibling()}if(n===0){if(a>0&&a<=h){if(b.size){t=(0,k.traverseNode)(u,s),l?t=s.lastChild():t=s.firstChild();let m=0;for(;t;){if(b.has(t)){if(m===a-1){d.add(t);break}m++}l?t=s.previousSibling():t=s.nextSibling()}}else if(!o){t=(0,k.traverseNode)(u,s),l?t=s.lastChild():t=s.firstChild();let m=0;for(;t;){if(m===a-1){d.add(t);break}l?t=s.previousSibling():t=s.nextSibling(),m++}}}}else{let m=a-1;if(n>0)for(;m<0;)m+=n;if(m>=0&&m<h){t=(0,k.traverseNode)(u,s),l?t=s.lastChild():t=s.firstChild();let p=0,w=n>0?0:a-1;for(;t&&(t&&m>=0&&m<h);)b.size?b.has(t)&&(w===m&&(d.add(t),m+=n),n>0?w++:w--):p===m&&(o||d.add(t),m+=n),l?t=s.previousSibling():t=s.nextSibling(),p++}}if(l&&d.size>1){const m=[...d];return new Set(m.reverse())}}else if(e===this.#s&&n+a===1)if(i){let s;for(const t of i)if(s=this._matchLeaves(t,e,f),s)break;s&&d.add(e)}else d.add(e);return d}_collectNthOfType(r,e){const{a:f,b:n,reverse:a}=r,{localName:l,namespaceURI:o,parentNode:u,prefix:d}=e,i=new Set;if(u){const s=this.#r;let t=(0,k.traverseNode)(u,s);t=s.firstChild();let h=0;for(;t;)h++,t=s.nextSibling();if(f===0){if(n>0&&n<=h){t=(0,k.traverseNode)(u,s),a?t=s.lastChild():t=s.firstChild();let b=0;for(;t;){const{localName:m,namespaceURI:p,prefix:w}=t;if(m===l&&w===d&&p===o){if(b===n-1){i.add(t);break}b++}a?t=s.previousSibling():t=s.nextSibling()}}}else{let b=n-1;if(f>0)for(;b<0;)b+=f;if(b>=0&&b<h){t=(0,k.traverseNode)(u,s),a?t=s.lastChild():t=s.firstChild();let m=f>0?0:n-1;for(;t;){const{localName:p,namespaceURI:w,prefix:N}=t;if(p===l&&N===d&&w===o){if(m===b&&(i.add(t),b+=f),b<0||b>=h)break;f>0?m++:m--}a?t=s.previousSibling():t=s.nextSibling()}}}if(a&&i.size>1){const b=[...i];return new Set(b.reverse())}}else e===this.#s&&f+n===1&&i.add(e);return i}_matchAnPlusB(r,e,f,n){const{nth:{a,b:l,name:o},selector:u}=r,d=new Map;if(o?(o==="even"?(d.set("a",2),d.set("b",0)):o==="odd"&&(d.set("a",2),d.set("b",1)),f.indexOf("last")>-1&&d.set("reverse",!0)):(typeof a=="string"&&/-?\d+/.test(a)?d.set("a",a*1):d.set("a",0),typeof l=="string"&&/-?\d+/.test(l)?d.set("b",l*1):d.set("b",0),f.indexOf("last")>-1&&d.set("reverse",!0)),/^nth-(?:last-)?child$/.test(f)){u&&d.set("selector",u);const i=Object.fromEntries(d);return this._collectNthChild(i,e,n)}else if(/^nth-(?:last-)?of-type$/.test(f)){const i=Object.fromEntries(d);return this._collectNthOfType(i,e)}return new Set}_matchHasPseudoFunc(r,e,f={}){let n;if(Array.isArray(r)&&r.length){const a=r.map(t=>t),[l]=a,{type:o}=l;let u;o===c.COMBINATOR?u=a.shift():u={name:" ",type:c.COMBINATOR};const d=[];for(;a.length;){const[t]=a,{type:h}=t;if(h===c.COMBINATOR)break;d.push(a.shift())}const i={combo:u,leaves:d};f.dir=v;const s=this._matchCombinator(i,e,f);if(s.size)if(a.length){for(const t of s)if(n=this._matchHasPseudoFunc(a,t,f),n)break}else n=!0}return!!n}_matchLogicalPseudoFunc(r,e,f={}){const{astName:n="",branches:a=[],selector:l="",twigBranches:o=[]}=r;let u;if(n==="has")if(l.includes(":has("))u=null;else{let d;for(const i of a)if(d=this._matchHasPseudoFunc(i,e,f),d)break;d&&(u=e)}else{const d=/^(?:is|where)$/.test(n);f.forgive=d;const i=o.length;let s;for(let t=0;t<i;t++){const h=o[t],b=h.length-1,{leaves:m}=h[b];if(s=this._matchLeaves(m,e,f),s&&b>0){let p=new Set([e]);for(let w=b-1;w>=0;w--){const N=h[w],_=[];f.dir=x;for(const y of p){const E=this._matchCombinator(N,y,f);E.size&&_.push(...E)}if(_.length)w===0?s=!0:p=new Set(_);else{s=!1;break}}}if(s)break}n==="not"?s||(u=e):s&&(u=e)}return u??null}_matchPseudoClassSelector(r,e,f={}){const{children:n,name:a}=r,{localName:l,parentNode:o}=e,{forgive:u,warn:d=this.#i}=f,i=new Set;if(c.REG_LOGICAL.test(a)){let s;if(this.#b.has(r))s=this.#b.get(r);else{const{branches:h}=(0,g.walkAST)(r),b=[],m=[];for(const[...p]of h){for(const y of p){const E=(0,g.generateCSS)(y);b.push(E)}const w=[],N=new Set;let _=p.shift();for(;_;)if(_.type===c.COMBINATOR?(w.push({combo:_,leaves:[...N]}),N.clear()):_&&N.add(_),p.length)_=p.shift();else{w.push({combo:null,leaves:[...N]}),N.clear();break}m.push(w)}s={astName:a,branches:h,twigBranches:m,selector:b.join(",")},this.#b.set(r,s)}const t=this._matchLogicalPseudoFunc(s,e,f);t&&i.add(t)}else if(Array.isArray(n))if(/^nth-(?:last-)?(?:child|of-type)$/.test(a)){const[s]=n;return this._matchAnPlusB(s,e,a,f)}else switch(a){case"dir":case"lang":{const s=this.#f.matchSelector(r,e,f,!0);s&&i.add(s);break}case"state":{if((0,k.isCustomElement)(e)){const[{value:s}]=n;if(s)if(e[s])i.add(e);else for(const t in e){const h=e[t];if(h instanceof this.#a.ElementInternals){h?.states?.has(s)&&i.add(e);break}}}break}case"current":case"nth-col":case"nth-last-col":{if(d)throw new DOMException(`Unsupported pseudo-class :${a}()`,c.NOT_SUPPORTED_ERR);break}case"host":case"host-context":break;case"contains":{if(d)throw new DOMException(`Unknown pseudo-class :${a}()`,c.NOT_SUPPORTED_ERR);break}default:if(!u)throw new DOMException(`Unknown pseudo-class :${a}()`,c.SYNTAX_ERR)}else switch(a){case"any-link":case"link":{O.test(l)&&e.hasAttribute("href")&&i.add(e);break}case"local-link":{if(O.test(l)&&e.hasAttribute("href")){const{href:s,origin:t,pathname:h}=new URL(this.#t.URL),b=new URL(e.getAttribute("href"),s);b.origin===t&&b.pathname===h&&i.add(e)}break}case"visited":break;case"hover":{const{target:s,type:t}=this.#n??{};/^(?:mouse|pointer)(?:down|over|up)$/.test(t)&&e.contains(s)&&i.add(e);break}case"active":{const{buttons:s,target:t,type:h}=this.#n??{};/(?:mouse|pointer)down/.test(h)&&s&c.BIT_01&&e.contains(t)&&i.add(e);break}case"target":{const{hash:s}=new URL(this.#t.URL);e.id&&s===`#${e.id}`&&this.#t.contains(e)&&i.add(e);break}case"target-within":{const{hash:s}=new URL(this.#t.URL);if(s){const t=s.replace(/^#/,"");let h=this.#t.getElementById(t);for(;h;){if(h===e){i.add(e);break}h=h.parentNode}}break}case"scope":{this.#e.nodeType===c.ELEMENT_NODE?!this.#u&&e===this.#e&&i.add(e):e===this.#t.documentElement&&i.add(e);break}case"focus":{e===this.#t.activeElement&&e.tabIndex>=0&&(0,k.isFocusable)(e)&&i.add(e);break}case"focus-visible":{if(e===this.#t.activeElement&&e.tabIndex>=0){let s;if((0,k.isFocusVisible)(e))s=!0;else{const{target:t,type:h}=this.#n??{},{target:b,relatedTarget:m}=this.#k??{};(/^key(?:down|up)$/.test(h)&&e.contains(t)||m&&(0,k.isFocusVisible)(m)&&e.contains(b))&&(s=!0)}s&&(0,k.isFocusable)(e)&&i.add(e)}break}case"focus-within":{let s,t=this.#t.activeElement;if(t.tabIndex>=0)for(;t;){if(t===e){s=!0;break}t=t.parentNode}s&&(0,k.isFocusable)(e)&&i.add(e);break}case"open":{I.test(l)&&e.hasAttribute("open")&&i.add(e);break}case"closed":{I.test(l)&&!e.hasAttribute("open")&&i.add(e);break}case"disabled":{if(M.test(l)||(0,k.isCustomElement)(e,{formAssociated:!0})){if(e.disabled||e.hasAttribute("disabled"))i.add(e);else if(e.localName==="option")o.localName==="optgroup"&&(o.disabled||o.hasAttribute("disabled"))&&i.add(e);else if(e.localName!=="optgroup"){let s,t=o;for(;t;)if(t.localName==="fieldset"&&(t.disabled||t.hasAttribute("disabled"))){const h=this.#r;let b=(0,k.traverseNode)(t,h);for(b=h.firstChild();b&&b.localName!=="legend";)b=h.nextSibling();b&&b.contains(e)||(s=!0);break}else{if(t.localName==="form")break;if(t.parentNode?.nodeType===c.ELEMENT_NODE){if(t.parentNode.localName==="form")break;t=t.parentNode}else break}s&&i.add(e)}}break}case"enabled":{if((M.test(l)||(0,k.isCustomElement)(e,{formAssociated:!0}))&&!(e.disabled&&e.hasAttribute("disabled")))if(e.localName==="optgroup")i.add(e);else if(e.localName==="option")(o.localName!=="optgroup"||!(o.disabled||o.hasAttribute("disabled")))&&i.add(e);else{let s,t=o;for(;t;)if(t.localName==="fieldset"&&(t.disabled||t.hasAttribute("disabled"))){const h=this.#r;let b=(0,k.traverseNode)(t,h);for(b=h.firstChild();b&&b.localName!=="legend";)b=h.nextSibling();b&&b.contains(e)||(s=!0);break}else{if(t.localName==="form")break;if(t.parentNode?.nodeType===c.ELEMENT_NODE){if(t.parentNode.localName==="form")break;t=t.parentNode}else break}s||i.add(e)}break}case"read-only":{switch(l){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}case"input":{(!e.type||c.REG_INPUT_TYPE.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,k.isContentEditable)(e)||i.add(e)}break}case"read-write":{switch(l){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||i.add(e);break}case"input":{(!e.type||c.REG_INPUT_TYPE.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,k.isContentEditable)(e)&&i.add(e)}break}case"placeholder-shown":{let s;if(e.placeholder?s=e.placeholder:e.hasAttribute("placeholder")&&(s=e.getAttribute("placeholder")),typeof s=="string"&&!/[\r\n]/.test(s)){let t;l==="textarea"?t=e:l==="input"&&(e.hasAttribute("type")?Q.test(e.getAttribute("type"))&&(t=e):t=e),t&&e.value===""&&i.add(e)}break}case"checked":{(e.checked&&l==="input"&&e.hasAttribute("type")&&C.test(e.getAttribute("type"))||e.selected&&l==="option")&&i.add(e);break}case"indeterminate":{if(e.indeterminate&&l==="input"&&e.type==="checkbox"||l==="progress"&&!e.hasAttribute("value"))i.add(e);else if(l==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const s=e.name;let t=e.parentNode;for(;t&&t.localName!=="form";)t=t.parentNode;t||(t=this.#t.documentElement);const h=t.getElementsByTagName("input"),b=h.length;let m;for(let p=0;p<b;p++){const w=h[p];if(w.getAttribute("type")==="radio"&&(s?w.getAttribute("name")===s&&(m=!!w.checked):w.hasAttribute("name")||(m=!!w.checked),m))break}m||i.add(e)}break}case"default":{if(l==="button"&&!(e.hasAttribute("type")&&D.test(e.getAttribute("type")))||l==="input"&&e.hasAttribute("type")&&U.test(e.getAttribute("type"))){let s=e.parentNode;for(;s&&s.localName!=="form";)s=s.parentNode;if(s){const t=this.#r;let h=(0,k.traverseNode)(s,t);for(h=t.firstChild();h&&s.contains(h);){const b=h.localName;let m;if(b==="button"?m=!(h.hasAttribute("type")&&D.test(h.getAttribute("type"))):b==="input"&&(m=h.hasAttribute("type")&&U.test(h.getAttribute("type"))),m){h===e&&i.add(e);break}h=t.nextNode()}}}else(l==="input"&&e.hasAttribute("type")&&C.test(e.getAttribute("type"))&&e.hasAttribute("checked")||l==="option"&&e.hasAttribute("selected"))&&i.add(e);break}case"valid":{if(T.test(l))e.checkValidity()&&(e.maxLength>=0?e.maxLength>=e.value.length&&i.add(e):i.add(e));else if(l==="fieldset"){const s=this.#r;let t=(0,k.traverseNode)(e,s);t=s.firstChild();let h;if(!t)h=!0;else for(;t&&e.contains(t)&&!(T.test(t.localName)&&(t.checkValidity()?t.maxLength>=0?h=t.maxLength>=t.value.length:h=!0:h=!1,!h));)t=s.nextNode();h&&i.add(e)}break}case"invalid":{if(T.test(l))e.checkValidity()?e.maxLength>=0&&e.maxLength<e.value.length&&i.add(e):i.add(e);else if(l==="fieldset"){const s=this.#r;let t=(0,k.traverseNode)(e,s);t=s.firstChild();let h;if(!t)h=!0;else for(;t&&e.contains(t)&&!(T.test(t.localName)&&(t.checkValidity()?t.maxLength>=0?h=t.maxLength>=t.value.length:h=!0:h=!1,!h));)t=s.nextNode();h||i.add(e)}break}case"in-range":{l==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&P.test(e.getAttribute("type"))&&!(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&(e.hasAttribute("min")||e.hasAttribute("max")||e.getAttribute("type")==="range")&&i.add(e);break}case"out-of-range":{l==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&P.test(e.getAttribute("type"))&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&i.add(e);break}case"required":{let s;if(/^(?:select|textarea)$/.test(l))s=e;else if(l==="input")if(e.hasAttribute("type")){const t=e.getAttribute("type");(t==="file"||C.test(t)||c.REG_INPUT_TYPE.test(t))&&(s=e)}else s=e;s&&(e.required||e.hasAttribute("required"))&&i.add(e);break}case"optional":{let s;if(/^(?:select|textarea)$/.test(l))s=e;else if(l==="input")if(e.hasAttribute("type")){const t=e.getAttribute("type");(t==="file"||C.test(t)||c.REG_INPUT_TYPE.test(t))&&(s=e)}else s=e;s&&!(e.required||e.hasAttribute("required"))&&i.add(e);break}case"root":{e===this.#t.documentElement&&i.add(e);break}case"empty":{if(e.hasChildNodes()){const s=this.#t.createTreeWalker(e,c.SHOW_ALL);let t=s.firstChild(),h;for(;t&&(h=t.nodeType!==c.ELEMENT_NODE&&t.nodeType!==c.TEXT_NODE,!!h);)t=s.nextSibling();h&&i.add(e)}else i.add(e);break}case"first-child":{(o&&e===o.firstElementChild||e===this.#s)&&i.add(e);break}case"last-child":{(o&&e===o.lastElementChild||e===this.#s)&&i.add(e);break}case"only-child":{(o&&e===o.firstElementChild&&e===o.lastElementChild||e===this.#s)&&i.add(e);break}case"first-of-type":{if(o){const[s]=this._collectNthOfType({a:0,b:1},e);s&&i.add(s)}else e===this.#s&&i.add(e);break}case"last-of-type":{if(o){const[s]=this._collectNthOfType({a:0,b:1,reverse:!0},e);s&&i.add(s)}else e===this.#s&&i.add(e);break}case"only-of-type":{if(o){const[s]=this._collectNthOfType({a:0,b:1},e);if(s===e){const[t]=this._collectNthOfType({a:0,b:1,reverse:!0},e);t===e&&i.add(e)}}else e===this.#s&&i.add(e);break}case"defined":{e.hasAttribute("is")||l.includes("-")?(0,k.isCustomElement)(e)&&i.add(e):(e instanceof this.#a.HTMLElement||e instanceof this.#a.SVGElement)&&i.add(e);break}case"popover-open":{e.popover&&(0,k.isVisible)(e)&&i.add(e);break}case"host":case"host-context":break;case"after":case"before":case"first-letter":case"first-line":{if(d)throw new DOMException(`Unsupported pseudo-element ::${a}`,c.NOT_SUPPORTED_ERR);break}case"autofill":case"blank":case"buffering":case"current":case"fullscreen":case"future":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(d)throw new DOMException(`Unsupported pseudo-class :${a}`,c.NOT_SUPPORTED_ERR);break}default:if(a.startsWith("-webkit-")){if(d)throw new DOMException(`Unsupported pseudo-class :${a}`,c.NOT_SUPPORTED_ERR)}else if(!u)throw new DOMException(`Unknown pseudo-class :${a}`,c.SYNTAX_ERR)}return i}_matchShadowHostPseudoClass(r,e){const{children:f,name:n}=r;let a;if(Array.isArray(f)){const{branches:l}=(0,g.walkAST)(f[0]),[o]=l,[...u]=o,{host:d}=e;if(n==="host"){let i;for(const s of u){const{type:t}=s;if(t===c.COMBINATOR){const h=(0,g.generateCSS)(r);throw new DOMException(`Invalid selector ${h}`,c.SYNTAX_ERR)}if(i=this._matchSelector(s,d).has(d),!i)break}i&&(a=e)}else if(n==="host-context"){let i=d,s;for(;i;){for(const t of u){const{type:h}=t;if(h===c.COMBINATOR){const b=(0,g.generateCSS)(r);throw new DOMException(`Invalid selector ${b}`,c.SYNTAX_ERR)}if(s=this._matchSelector(t,i).has(i),!s)break}if(s)break;i=i.parentNode}s&&(a=e)}}else if(n==="host")a=e;else throw new DOMException(`Invalid selector :${n}`,c.SYNTAX_ERR);return a??null}_matchSelector(r,e,f){const{type:n}=r,a=new Set;if(r.name===c.EMPTY)return a;const l=(0,g.unescapeSelector)(r.name);if(typeof l=="string"&&l!==r.name&&(r.name=l),e.nodeType===c.ELEMENT_NODE)switch(n){case c.PS_ELEMENT_SELECTOR:{this.#f.matchPseudoElementSelector(l,f);break}case c.ID_SELECTOR:{e.id===l&&a.add(e);break}case c.CLASS_SELECTOR:{e.classList.contains(l)&&a.add(e);break}case c.PS_CLASS_SELECTOR:return this._matchPseudoClassSelector(r,e,f);default:{const o=this.#f.matchSelector(r,e,f,!0);o&&a.add(o)}}else if(this.#u&&n===c.PS_CLASS_SELECTOR&&e.nodeType===c.DOCUMENT_FRAGMENT_NODE){if(l!=="has"&&c.REG_LOGICAL.test(l))return this._matchPseudoClassSelector(r,e,f);if($.test(l)){const o=this._matchShadowHostPseudoClass(r,e,f);o&&a.add(o)}}return a}_matchLeaves(r,e,f){let n,a;if(this.#o?a=this.#h.get(r):a=this.#N.get(r),a&&a.has(e)){const{matched:l}=a.get(e);n=l}if(typeof n!="boolean"){let l=!0;e.nodeType===c.ELEMENT_NODE&&/^(?:button|fieldset|form|input|select|textarea)$/.test(e.localName)&&(l=!1);for(const o of r){switch(o.type){case c.ATTR_SELECTOR:case c.ID_SELECTOR:{l=!1;break}case c.PS_CLASS_SELECTOR:{/^(?:(?:any-)?link|defined|dir)$/.test(o.name)&&(l=!1);break}default:}if(n=this._matchSelector(o,e,f).has(e),!n)break}l&&(a||(a=new WeakMap),a.set(e,{matched:n}),this.#o?this.#h.set(r,a):this.#N.set(r,a))}return!!n}_matchHTMLCollection(r,e={}){const{compound:f,filterLeaves:n}=e,a=new Set,l=r.length;if(l)if(f)for(let o=0;o<l;o++){const u=r[o];this._matchLeaves(n,u,e)&&a.add(u)}else{const o=[].slice.call(r);return new Set(o)}return a}_findDescendantNodes(r,e,f){const[n,...a]=r,l=a.length>0,{type:o}=n,u=(0,g.unescapeSelector)(n.name);typeof u=="string"&&u!==n.name&&(n.name=u);let d=new Set,i=!1;if(this.#u)i=!0;else switch(o){case c.PS_ELEMENT_SELECTOR:{this.#f.matchPseudoElementSelector(u,f);break}case c.ID_SELECTOR:{if(this.#s.nodeType===c.ELEMENT_NODE)i=!0;else{const s=this.#s.getElementById(u);s&&s!==e&&e.contains(s)&&(l?this._matchLeaves(a,s,f)&&d.add(s):d.add(s))}break}case c.CLASS_SELECTOR:{const s=e.getElementsByClassName(u);d=this._matchHTMLCollection(s,{compound:l,filterLeaves:a});break}case c.TYPE_SELECTOR:{if(this.#t.contentType==="text/html"&&!/[*|]/.test(u)){const s=e.getElementsByTagName(u);d=this._matchHTMLCollection(s,{compound:l,filterLeaves:a})}else i=!0;break}default:i=!0}return{nodes:d,pending:i}}_matchCombinator(r,e,f={}){const{combo:n,leaves:a}=r,{name:l}=n,{parentNode:o}=e,{dir:u}=f,d=new Set;if(u===v)switch(l){case"+":{const i=e.nextElementSibling;i&&this._matchLeaves(a,i,f)&&d.add(i);break}case"~":{if(o){const i=this._createTreeWalker(o);let s=(0,k.traverseNode)(e,i);for(s=i.nextSibling();s;)this._matchLeaves(a,s,f)&&d.add(s),s=i.nextSibling()}break}case">":{const i=this._createTreeWalker(e);let s=(0,k.traverseNode)(e,i);for(s=i.firstChild();s;)this._matchLeaves(a,s,f)&&d.add(s),s=i.nextSibling();break}case" ":default:{const{nodes:i,pending:s}=this._findDescendantNodes(a,e);if(i.size)return i;if(s){const t=this._createTreeWalker(e);let h=(0,k.traverseNode)(e,t);for(h=t.nextNode();h&&e.contains(h);)this._matchLeaves(a,h,f)&&d.add(h),h=t.nextNode()}}}else switch(l){case"+":{const i=e.previousElementSibling;i&&this._matchLeaves(a,i,f)&&d.add(i);break}case"~":{if(o){const i=this._createTreeWalker(o);let s=(0,k.traverseNode)(o,i);for(s=i.firstChild();s&&s!==e;)this._matchLeaves(a,s,f)&&d.add(s),s=i.nextSibling()}break}case">":{o&&this._matchLeaves(a,o,f)&&d.add(o);break}case" ":default:{const i=[];let s=o;for(;s;)this._matchLeaves(a,s,f)&&i.push(s),s=s.parentNode;if(i.length)return new Set(i.reverse())}}return d}_findNode(r,e){const{node:f}=e,n=this.#m;let a=(0,k.traverseNode)(f,n),l;if(a)for((a.nodeType!==c.ELEMENT_NODE||a===f&&a!==this.#s)&&(a=n.nextNode());a;){if(this._matchLeaves(r,a,{warn:this.#i})){l=a;break}a=n.nextNode()}return l??null}_matchSelf(r){const e=[],f=this._matchLeaves(r,this.#e,{warn:this.#i});let n=!1;return f&&(e.push(this.#e),n=!0),[e,n]}_findLineal(r,e={}){const{complex:f}=e,n=[];let a=this._matchLeaves(r,this.#e,{warn:this.#i}),l=!1;if(a&&(n.push(this.#e),l=!0),!a||f){let o=this.#e.parentNode;for(;o&&(a=this._matchLeaves(r,o,{warn:this.#i}),a&&(n.push(o),l=!0),o.parentNode);)o=o.parentNode}return[n,l]}_findFirst(r){const e=[],f=this._findNode(r,{node:this.#e});let n=!1;return f&&(e.push(f),n=!0),[e,n]}_findFromHTMLCollection(r,e={}){const{complex:f,compound:n,filterLeaves:a,targetType:l}=e;let o=[],u=!1,d=!1;const i=r.length;if(i)if(this.#e.nodeType===c.ELEMENT_NODE)for(let s=0;s<i;s++){const t=r[s];if(t!==this.#e&&(this.#e.contains(t)||t.contains(this.#e))){if(n){if(this._matchLeaves(a,t,{warn:this.#i})&&(o.push(t),u=!0,l===c.TARGET_FIRST))break}else if(o.push(t),u=!0,l===c.TARGET_FIRST)break}}else if(f)if(n)for(let s=0;s<i;s++){const t=r[s];if(this._matchLeaves(a,t,{warn:this.#i})&&(o.push(t),u=!0,l===c.TARGET_FIRST))break}else o=[].slice.call(r),u=!0,d=!0;else if(n)for(let s=0;s<i;s++){const t=r[s];if(this._matchLeaves(a,t,{warn:this.#i})&&(o.push(t),u=!0,l===c.TARGET_FIRST))break}else o=[].slice.call(r),u=!0,d=!0;return[o,u,d]}_findEntryNodes(r,e,f){const{leaves:n}=r,[a,...l]=n,o=l.length>0,{name:u,type:d}=a;let i=[],s=!1,t=!1,h=!1;switch(d){case c.PS_ELEMENT_SELECTOR:{this.#f.matchPseudoElementSelector(u,{warn:this.#i});break}case c.ID_SELECTOR:{if(e===c.TARGET_SELF)[i,t]=this._matchSelf(n);else if(e===c.TARGET_LINEAL)[i,t]=this._findLineal(n,{complex:f});else if(e===c.TARGET_FIRST&&this.#s.nodeType!==c.ELEMENT_NODE){const b=this.#s.getElementById(u);b&&(o?this._matchLeaves(l,b,{warn:this.#i})&&(i.push(b),t=!0):(i.push(b),t=!0))}else e===c.TARGET_FIRST?[i,t]=this._findFirst(n):h=!0;break}case c.CLASS_SELECTOR:{if(e===c.TARGET_SELF)[i,t]=this._matchSelf(n);else if(e===c.TARGET_LINEAL)[i,t]=this._findLineal(n,{complex:f});else if(this.#s.nodeType===c.DOCUMENT_NODE){const b=this.#s.getElementsByClassName(u);b.length&&([i,t,s]=this._findFromHTMLCollection(b,{complex:f,compound:o,filterLeaves:l,targetType:e}))}else e===c.TARGET_FIRST?[i,t]=this._findFirst(n):h=!0;break}case c.TYPE_SELECTOR:{if(e===c.TARGET_SELF)[i,t]=this._matchSelf(n);else if(e===c.TARGET_LINEAL)[i,t]=this._findLineal(n,{complex:f});else if(this.#t.contentType==="text/html"&&this.#s.nodeType===c.DOCUMENT_NODE&&!/[*|]/.test(u)){const b=this.#s.getElementsByTagName(u);b.length&&([i,t,s]=this._findFromHTMLCollection(b,{complex:f,compound:o,filterLeaves:l,targetType:e}))}else e===c.TARGET_FIRST?[i,t]=this._findFirst(n):h=!0;break}default:if(e!==c.TARGET_LINEAL&&$.test(u)){if(this.#u&&this.#e.nodeType===c.DOCUMENT_FRAGMENT_NODE){const b=this._matchShadowHostPseudoClass(a,this.#e);b&&(i.push(b),t=!0)}}else e===c.TARGET_SELF?[i,t]=this._matchSelf(n):e===c.TARGET_LINEAL?[i,t]=this._findLineal(n,{complex:f}):e===c.TARGET_FIRST?[i,t]=this._findFirst(n):h=!0}return{collected:s,compound:o,filtered:t,nodes:i,pending:h}}_collectNodes(r){const e=this.#l.values();if(r===c.TARGET_ALL||r===c.TARGET_FIRST){const f=new Set;let n=0;for(const{branch:a}of e){const l=a.length,o=l>1,u=a[0];let d,i;if(o){const{combo:p,leaves:[{name:w,type:N}]}=u,_=a[l-1],{leaves:[{name:y,type:E}]}=_;if(E===c.PS_ELEMENT_SELECTOR||E===c.ID_SELECTOR)d=x,i=_;else if(N===c.PS_ELEMENT_SELECTOR||N===c.ID_SELECTOR)d=v,i=u;else if(r===c.TARGET_ALL)if(w==="*"&&N===c.TYPE_SELECTOR)d=x,i=_;else if(y==="*"&&E===c.TYPE_SELECTOR)d=v,i=u;else if(l===2){const{name:A}=p;/^[+~]$/.test(A)?(d=x,i=_):(d=v,i=u)}else d=v,i=u;else if(y==="*"&&E===c.TYPE_SELECTOR)d=v,i=u;else if(w==="*"&&N===c.TYPE_SELECTOR)d=x,i=_;else{let A;for(const{combo:L,leaves:[W]}of a){const{name:G,type:H}=W;if(H===c.PS_CLASS_SELECTOR&&G==="dir"){A=!1;break}if(!A&&L){const{name:z}=L;/^[+~]$/.test(z)&&(A=!0)}}A?(d=v,i=u):(d=x,i=_)}}else d=x,i=u;const{collected:s,compound:t,filtered:h,nodes:b,pending:m}=this._findEntryNodes(i,r,o);b.length?(this.#l[n].find=!0,this.#d[n]=b):m&&f.add(new Map([["index",n],["twig",i]])),this.#l[n].collected=s,this.#l[n].dir=d,this.#l[n].filtered=h||!t,n++}if(f.size){let a,l;this.#e!==this.#s&&this.#e.nodeType===c.ELEMENT_NODE?(a=this.#e,l=this.#m):(a=this.#s,l=this.#r);let o=(0,k.traverseNode)(a,l);for(;o;){let u=!1;if(this.#e.nodeType===c.ELEMENT_NODE?o===this.#e?u=!0:u=this.#e.contains(o):u=!0,u)for(const d of f){const{leaves:i}=d.get("twig");if(this._matchLeaves(i,o,{warn:this.#i})){const t=d.get("index");this.#l[t].filtered=!0,this.#l[t].find=!0,this.#d[t].push(o)}}o!==l.currentNode&&(o=(0,k.traverseNode)(o,l)),o=l.nextNode()}}}else{let f=0;for(const{branch:n}of e){const a=n[n.length-1],l=n.length>1,{compound:o,filtered:u,nodes:d}=this._findEntryNodes(a,r,l);d.length&&(this.#l[f].find=!0,this.#d[f]=d),this.#l[f].dir=x,this.#l[f].filtered=u||!o,f++}}return[this.#l,this.#d]}_getCombinedNodes(r,e,f){const n=[];for(const a of e){const l=this._matchCombinator(r,a,{dir:f,warn:this.#i});l.size&&n.push(...l)}return n.length?new Set(n):new Set}_matchNodeNext(r,e,f){const{combo:n,index:a}=f,{combo:l,leaves:o}=r[a],u={combo:n,leaves:o},d=this._getCombinedNodes(u,e,v);let i;if(d.size)if(a===r.length-1){const[s]=(0,k.sortNodes)(d);i=s}else i=this._matchNodeNext(r,d,{combo:l,index:a+1});return i??null}_matchNodePrev(r,e,f){const{index:n}=f,a=r[n],l=new Set([e]),o=this._getCombinedNodes(a,l,x);let u;if(o.size){if(n===0)u=e;else for(const d of o)if(this._matchNodePrev(r,d,{index:n-1}))return e}return u??null}find(r){(r===c.TARGET_ALL||r===c.TARGET_FIRST)&&this._prepareQuerySelectorWalker();const[[...e],f]=this._collectNodes(r),n=e.length;let a,l=new Set;for(let o=0;o<n;o++){const{branch:u,collected:d,dir:i,find:s}=e[o],t=u.length;if(t&&s){const h=f[o],b=h.length,m=t-1;if(m===0)if((r===c.TARGET_ALL||r===c.TARGET_FIRST)&&this.#e.nodeType===c.ELEMENT_NODE)for(let p=0;p<b;p++){const w=h[p];if(w!==this.#e&&this.#e.contains(w)&&(l.add(w),r!==c.TARGET_ALL))break}else if(r===c.TARGET_ALL)if(l.size){const p=[...l];l=new Set([...p,...h]),a=!0}else l=new Set(h);else{const[p]=h;l.add(p)}else if(r===c.TARGET_ALL)if(i===v){let{combo:p}=u[0];for(const w of h){let N=new Set([w]);for(let _=1;_<t;_++){const{combo:y,leaves:E}=u[_],A={combo:p,leaves:E};if(N=this._getCombinedNodes(A,N,i),N.size)if(_===m)if(l.size){const L=[...l];l=new Set([...L,...N]),a=!0}else l=N;else p=y;else break}}}else for(const p of h){let w=new Set([p]);for(let N=m-1;N>=0;N--){const _=u[N];if(w=this._getCombinedNodes(_,w,i),w.size)N===0&&(l.add(p),t>1&&l.size>1&&(a=!0));else break}}else if(r===c.TARGET_FIRST&&i===v){const{combo:p}=u[0];let w;for(const N of h)if(w=this._matchNodeNext(u,new Set([N]),{combo:p,index:1}),w){l.add(w);break}if(!w&&!d){const{leaves:N}=u[0],[_]=h;let y=this._findNode(N,{node:_});for(;y;){if(w=this._matchNodeNext(u,new Set([y]),{combo:p,index:1}),w){l.add(w);break}y=this._findNode(N,{node:y})}}}else{let p;for(const w of h)if(p=this._matchNodePrev(u,w,{index:m-1}),p){l.add(w);break}if(!p&&!d&&r===c.TARGET_FIRST){const{leaves:w}=u[m],[N]=h;let _=this._findNode(w,{node:N});for(;_;){if(p=this._matchNodePrev(u,_,{index:m-1}),p){l.add(_);break}_=this._findNode(w,{node:_})}}}}}return r===c.TARGET_FIRST?(l.delete(this.#e),l.size>1&&(l=new Set((0,k.sortNodes)(l)))):r===c.TARGET_ALL&&(l.delete(this.#e),a&&l.size>1&&(l=new Set((0,k.sortNodes)(l)))),this.#o&&(this.#h=new WeakMap),l}}0&&(module.exports={Finder});
2
2
  //# sourceMappingURL=finder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/js/finder.js"],
4
- "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport { Matcher } from './matcher.js';\nimport {\n generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\nimport {\n isContentEditable, isCustomElement, isFocusVisible, isFocusable,\n isInShadowTree, isVisible, resolveContent, sortNodes, traverseNode\n} from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR, BIT_01, CLASS_SELECTOR, COMBINATOR, DOCUMENT_FRAGMENT_NODE,\n DOCUMENT_NODE, ELEMENT_NODE, EMPTY, ID_SELECTOR, NOT_SUPPORTED_ERR,\n PS_CLASS_SELECTOR, PS_ELEMENT_SELECTOR, REG_INPUT_TYPE, REG_LOGICAL,\n SHOW_ALL, SYNTAX_ERR, TARGET_ALL, TARGET_FIRST, TARGET_LINEAL, TARGET_SELF,\n TEXT_NODE, TYPE_SELECTOR, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst KEY_TAB = 'Tab';\nconst REG_ANCHOR = /^a(?:rea)?$/;\nconst REG_FORM_CTRL =\n /^(?:button|fieldset|input|optgroup|option|select|textarea)$/;\nconst REG_FORM_VALID = /^(?:button|form|input|select|textarea)$/;\nconst REG_INTERACT = /^(?:details|dialog)$/;\nconst REG_SHADOW_HOST = /^host(?:-context)?$/;\nconst REG_TYPE_CHECK = /^(?:checkbox|radio)$/;\nconst REG_TYPE_RANGE = /^(?:date(?:time-local)?|month|number|range|time|week)$/;\nconst REG_TYPE_RESET = /^(?:button|reset)$/;\nconst REG_TYPE_SUBMIT = /^(?:image|submit)$/;\nconst REG_TYPE_TEXT = /^(?:email|number|password|search|tel|text|url)$/;\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: Array<Ast | undefined>\n * #nodes: Array<Nodes>\n * Ast: {\n * branch: Array<Branch | undefined>,\n * collected: boolean,\n * dir: string | null,\n * filtered: boolean,\n * find: boolean\n * }\n * Branch: Array<Twig>\n * Twig: {\n * combo: Leaf | null,\n * leaves: Array<Leaf>\n * }\n * Leaf: {\n * children: Array<Leaf | undefined> | null,\n * loc: null,\n * type: string\n * }\n * Nodes: Array<HTMLElement | undefined>\n */\nexport class Finder {\n /* private fields */\n #ast;\n #astCache;\n #descendant;\n #document;\n #documentCache;\n #event;\n #focus;\n #invalidate;\n #invalidateResults;\n #matcher;\n #node;\n #nodes;\n #noexcept;\n #qswalker;\n #results;\n #root;\n #shadow;\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.#matcher = new Matcher();\n this.#astCache = new WeakMap();\n this.#documentCache = new WeakMap();\n this.#invalidateResults = new WeakMap();\n this.#results = new WeakMap();\n this.#event = null;\n this.#focus = null;\n this._registerEventListeners();\n }\n\n /**\n * handle error\n * @param {Error} e - Error\n * @param {object} opt - options\n * @throws Error\n * @returns {void}\n */\n onError(e, opt = {}) {\n const noexcept = opt.noexcept ?? this.#noexcept;\n if (!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 if (e.name in this.#window) {\n throw new this.#window[e.name](e.message);\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {object} [opt.event] - MouseEvent, KeyboardEvent\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 { event, noexcept, warn } = opt;\n this.#noexcept = !!noexcept;\n this.#warn = !!warn;\n this.#node = node;\n [this.#document, this.#root, this.#walker] = resolveContent(node);\n this.#shadow = isInShadowTree(node);\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#invalidateResults = new WeakMap();\n this.#walkers = new WeakMap();\n this._setEvent(event);\n return node;\n }\n\n /**\n * register event listeners\n * @private\n * @returns {Array.<void>} - results\n */\n _registerEventListeners() {\n const opt = {\n capture: true,\n passive: true\n };\n const func = [];\n const mouseKeys = ['mouseover', 'mousedown', 'mouseup', 'mouseout'];\n for (const key of mouseKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n this.#event = evt;\n }, opt));\n }\n const keyboardKeys = ['keydown', 'keyup'];\n for (const key of keyboardKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n if (evt.key === KEY_TAB) {\n this.#event = evt;\n }\n }, opt));\n }\n func.push(this.#window.addEventListener('focusin', evt => {\n this.#focus = evt;\n }, opt));\n return func;\n }\n\n /**\n * set event\n * @private\n * @param {object} event - instance of KeyboardEvent, MouseEvent\n * @returns {object} - event\n */\n _setEvent(event) {\n // NOTE: PointerEvent not implemented in jsdom\n if (event instanceof this.#window.KeyboardEvent ||\n event instanceof this.#window.MouseEvent) {\n this.#event = event;\n }\n return this.#event;\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 this.#invalidate = false;\n let ast;\n if (this.#documentCache.has(this.#document)) {\n const cachedItem = this.#documentCache.get(this.#document);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n ast = item.ast;\n this.#descendant = item.descendant;\n this.#invalidate = item.invalidate;\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, info: { hasHasPseudoFunc } } = walkAST(cssAst);\n let invalidate = !!hasHasPseudoFunc;\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 throw new DOMException(`Invalid selector ${selector}`,\n SYNTAX_ERR);\n }\n const itemName = item.name;\n if (/^[\\s>]$/.test(itemName)) {\n descendant = true;\n } else {\n invalidate = 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 if (typeof itemName === 'string' && itemName !== item.name) {\n item.name = itemName;\n }\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 let cachedItem;\n if (this.#documentCache.has(this.#document)) {\n cachedItem = this.#documentCache.get(this.#document);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant,\n invalidate\n });\n this.#documentCache.set(this.#document, cachedItem);\n this.#descendant = descendant;\n this.#invalidate = invalidate;\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 return this.#qswalker;\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.#astCache.has(selector)) {\n selectorBranches = this.#astCache.get(selector);\n } else {\n const { branches, info } = walkAST(selector);\n selectorBranches = branches;\n this.#astCache.set(selector, selectorBranches);\n if (info.hasLogicalPseudoFunc) {\n this.#invalidate = true;\n }\n }\n }\n if (parentNode) {\n const walker = this.#walker;\n let refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (isVisible(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 }\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 = traverseNode(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 = traverseNode(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 = traverseNode(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, namespaceURI, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const walker = this.#walker;\n let refNode = traverseNode(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 = traverseNode(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 {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\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 = traverseNode(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 {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\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 :has() pseudo-class function\n * @private\n * @param {Array.<object>} astLeaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(astLeaves, node, opt = {}) {\n let bool;\n if (Array.isArray(astLeaves) && astLeaves.length) {\n const leaves = astLeaves.map(i => i);\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(leaves, 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(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.test(astName)) {\n let astData;\n if (this.#astCache.has(ast)) {\n astData = this.#astCache.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.#astCache.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 // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n const [branch] = astChildren;\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n return nodes;\n } else {\n switch (astName) {\n // :dir(), :lang()\n case 'dir':\n case 'lang': {\n const res = this.#matcher.matchSelector(ast, node, opt, true);\n if (res) {\n matched.add(res);\n }\n break;\n }\n // :state()\n case 'state': {\n if (isCustomElement(node)) {\n const [{ value: stateValue }] = astChildren;\n if (stateValue) {\n if (node[stateValue]) {\n matched.add(node);\n } else {\n for (const i in node) {\n const prop = node[i];\n if (prop instanceof this.#window.ElementInternals) {\n if (prop?.states?.has(stateValue)) {\n matched.add(node);\n }\n break;\n }\n }\n }\n }\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // dropped from CSS Selectors 3\n case 'contains': {\n if (warn) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n switch (astName) {\n case 'any-link':\n case 'link': {\n if (REG_ANCHOR.test(localName) && node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (REG_ANCHOR.test(localName) && node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#document.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 'hover': {\n const { target, type } = this.#event ?? {};\n if (/^(?:mouse|pointer)(?:down|over|up)$/.test(type) &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'active': {\n const { buttons, target, type } = this.#event ?? {};\n if (/(?:mouse|pointer)down/.test(type) && buttons & BIT_01 &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'target': {\n const { hash } = new URL(this.#document.URL);\n if (node.id && hash === `#${node.id}` &&\n this.#document.contains(node)) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n const { hash } = new URL(this.#document.URL);\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#document.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.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus': {\n if (node === this.#document.activeElement && node.tabIndex >= 0 &&\n isFocusable(node)) {\n matched.add(node);\n }\n break;\n }\n case 'focus-visible': {\n if (node === this.#document.activeElement && node.tabIndex >= 0) {\n let bool;\n if (isFocusVisible(node)) {\n bool = true;\n } else {\n const { target: eventTarget, type } = this.#event ?? {};\n const { target: focusTarget, relatedTarget } = this.#focus ?? {};\n if (/^key(?:down|up)$/.test(type) && node.contains(eventTarget)) {\n bool = true;\n } else if (relatedTarget && isFocusVisible(relatedTarget) &&\n node.contains(focusTarget)) {\n bool = true;\n }\n }\n if (bool && isFocusable(node)) {\n matched.add(node);\n }\n }\n break;\n }\n case 'focus-within': {\n let bool;\n let current = this.#document.activeElement;\n if (current.tabIndex >= 0) {\n while (current) {\n if (current === node) {\n bool = true;\n break;\n }\n current = current.parentNode;\n }\n }\n if (bool && isFocusable(node)) {\n matched.add(node);\n }\n break;\n }\n case 'open': {\n if (REG_INTERACT.test(localName) && node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'closed': {\n if (REG_INTERACT.test(localName) && !node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'disabled': {\n if (REG_FORM_CTRL.test(localName) ||\n isCustomElement(node, { formAssociated: true })) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else if (node.localName === 'option') {\n if (parentNode.localName === 'optgroup' &&\n (parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n matched.add(node);\n }\n } else if (node.localName !== 'optgroup') {\n let bool;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n const walker = this.#walker;\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n bool = true;\n }\n } else {\n bool = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((REG_FORM_CTRL.test(localName) ||\n isCustomElement(node, { formAssociated: true })) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n if (node.localName === 'optgroup') {\n matched.add(node);\n } else if (node.localName === 'option') {\n if (parentNode.localName !== 'optgroup' ||\n !(parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n matched.add(node);\n }\n } else {\n let bool;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n const walker = this.#walker;\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n bool = true;\n }\n } else {\n bool = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n if (!bool) {\n matched.add(node);\n }\n }\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 || REG_INPUT_TYPE.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 || REG_INPUT_TYPE.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 placeholder;\n if (node.placeholder) {\n placeholder = node.placeholder;\n } else if (node.hasAttribute('placeholder')) {\n placeholder = node.getAttribute('placeholder');\n }\n if (typeof placeholder === 'string' && !/[\\r\\n]/.test(placeholder)) {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (REG_TYPE_TEXT.test(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '') {\n matched.add(node);\n }\n }\n break;\n }\n case 'checked': {\n if ((node.checked && localName === 'input' &&\n node.hasAttribute('type') &&\n REG_TYPE_CHECK.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.#document.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 // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n if ((localName === 'button' &&\n !(node.hasAttribute('type') &&\n REG_TYPE_RESET.test(node.getAttribute('type')))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n REG_TYPE_SUBMIT.test(node.getAttribute('type')))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker = this.#walker;\n let nextNode = traverseNode(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 REG_TYPE_RESET.test(nextNode.getAttribute('type')));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n REG_TYPE_SUBMIT.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 REG_TYPE_CHECK.test(node.getAttribute('type')) &&\n node.hasAttribute('checked')) {\n matched.add(node);\n // option\n } else if (localName === 'option' && node.hasAttribute('selected')) {\n matched.add(node);\n }\n break;\n }\n case 'valid': {\n if (REG_FORM_VALID.test(localName)) {\n if (node.checkValidity()) {\n if (node.maxLength >= 0) {\n if (node.maxLength >= node.value.length) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let bool;\n if (!refNode) {\n bool = true;\n } else {\n while (refNode && node.contains(refNode)) {\n if (REG_FORM_VALID.test(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n bool = refNode.maxLength >= refNode.value.length;\n } else {\n bool = true;\n }\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (REG_FORM_VALID.test(localName)) {\n if (node.checkValidity()) {\n if (node.maxLength >= 0 && node.maxLength < node.value.length) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let bool;\n if (!refNode) {\n bool = true;\n } else {\n while (refNode && node.contains(refNode)) {\n if (REG_FORM_VALID.test(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n bool = refNode.maxLength >= refNode.value.length;\n } else {\n bool = true;\n }\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\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 REG_TYPE_RANGE.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n REG_TYPE_RANGE.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || REG_TYPE_CHECK.test(inputType) ||\n REG_INPUT_TYPE.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' || REG_TYPE_CHECK.test(inputType) ||\n REG_INPUT_TYPE.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.#document.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 'defined': {\n if (node.hasAttribute('is') || localName.includes('-')) {\n if (isCustomElement(node)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case 'popover-open': {\n if (node.popover && isVisible(node)) {\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 throw new DOMException(`Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n // not supported\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'fullscreen':\n case 'future':\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 throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}`,\n SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match 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 { branches } = walkAST(astChildren[0]);\n const [branch] = branches;\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 throw new DOMException(`Invalid selector ${css}`, 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 throw new DOMException(`Invalid selector ${css}`, 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 throw new DOMException(`Invalid selector :${astName}`, 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 if (typeof astName === 'string' && astName !== ast.name) {\n ast.name = astName;\n }\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case PS_ELEMENT_SELECTOR: {\n this.#matcher.matchPseudoElementSelector(astName, opt);\n break;\n }\n case ID_SELECTOR: {\n if (node.id === astName) {\n matched.add(node);\n }\n break;\n }\n case CLASS_SELECTOR: {\n if (node.classList.contains(astName)) {\n matched.add(node);\n }\n break;\n }\n case PS_CLASS_SELECTOR: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n }\n default: {\n const res = this.#matcher.matchSelector(ast, node, opt, true);\n if (res) {\n matched.add(res);\n }\n }\n }\n } else if (this.#shadow && astType === PS_CLASS_SELECTOR &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (astName !== 'has' && REG_LOGICAL.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 let bool;\n let result;\n if (this.#invalidate) {\n result = this.#invalidateResults.get(leaves);\n } else {\n result = this.#results.get(leaves);\n }\n if (result && result.has(node)) {\n const { matched } = result.get(node);\n bool = matched;\n }\n if (typeof bool !== 'boolean') {\n let cacheable = true;\n if (node.nodeType === ELEMENT_NODE &&\n /^(?:button|fieldset|form|input|select|textarea)$/.test(node.localName)) {\n cacheable = false;\n }\n for (const leaf of leaves) {\n switch (leaf.type) {\n case ATTR_SELECTOR:\n case ID_SELECTOR: {\n cacheable = false;\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (/^(?:(?:any-)?link|defined|dir)$/.test(leaf.name)) {\n cacheable = false;\n }\n break;\n }\n default:\n }\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n if (cacheable) {\n if (!result) {\n result = new WeakMap();\n }\n result.set(node, {\n matched: bool\n });\n if (this.#invalidate) {\n this.#invalidateResults.set(leaves, result);\n } else {\n this.#results.set(leaves, result);\n }\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 if (typeof leafName === 'string' && leafName !== leaf.name) {\n leaf.name = leafName;\n }\n let nodes = new Set();\n let pending = false;\n if (this.#shadow) {\n pending = true;\n } else {\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n this.#matcher.matchPseudoElementSelector(leafName, opt);\n break;\n }\n case ID_SELECTOR: {\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 CLASS_SELECTOR: {\n const items = baseNode.getElementsByClassName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n break;\n }\n case TYPE_SELECTOR: {\n if (this.#document.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 = traverseNode(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 = traverseNode(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 = traverseNode(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 = traverseNode(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 const walker = this.#qswalker;\n let refNode = traverseNode(node, walker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = walker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = walker.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 = walker.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 { name: leafName, type: leafType } = leaf;\n let nodes = [];\n let collected = false;\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n this.#matcher.matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case ID_SELECTOR: {\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 CLASS_SELECTOR: {\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 TYPE_SELECTOR: {\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.#document.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 * 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 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 === PS_ELEMENT_SELECTOR ||\n lastType === ID_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === PS_ELEMENT_SELECTOR ||\n firstType === ID_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === TYPE_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === TYPE_SELECTOR) {\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 === TYPE_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === TYPE_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n for (const { combo, leaves: [leaf] } of branch) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === PS_CLASS_SELECTOR && 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 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 = traverseNode(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 = traverseNode(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 * find matched nodes\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 [[...branches], collectedNodes] = this._collectNodes(targetType);\n const l = branches.length;\n let sort;\n let nodes = 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 = collectedNodes[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 nodes.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...entryNodes]);\n sort = true;\n } else {\n nodes = new Set(entryNodes);\n }\n } else {\n const [node] = entryNodes;\n nodes.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 (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...nextNodes]);\n sort = true;\n } else {\n nodes = 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 nodes.add(node);\n if (branchLen > 1 && nodes.size > 1) {\n 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 nodes.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 nodes.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 nodes.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 nodes.add(refNode);\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n }\n }\n }\n }\n }\n if (targetType === TARGET_FIRST) {\n nodes.delete(this.#node);\n if (nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n } else if (targetType === TARGET_ALL) {\n nodes.delete(this.#node);\n if (sort && nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n }\n return nodes;\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_matcher", "import_parser", "import_utility", "import_constant", "DIR_NEXT", "DIR_PREV", "KEY_TAB", "REG_ANCHOR", "REG_FORM_CTRL", "REG_FORM_VALID", "REG_INTERACT", "REG_SHADOW_HOST", "REG_TYPE_CHECK", "REG_TYPE_RANGE", "REG_TYPE_RESET", "REG_TYPE_SUBMIT", "REG_TYPE_TEXT", "#ast", "#astCache", "#descendant", "#document", "#documentCache", "#event", "#focus", "#invalidate", "#invalidateResults", "#matcher", "#node", "#nodes", "#noexcept", "#qswalker", "#results", "#root", "#shadow", "#walker", "#walkers", "#warn", "#window", "window", "e", "opt", "selector", "node", "event", "noexcept", "warn", "func", "mouseKeys", "key", "evt", "keyboardKeys", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "hasHasPseudoFunc", "invalidate", "descendant", "items", "branch", "leaves", "nextItem", "itemName", "walker", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "info", "refNode", "selectorNodes", "bool", "nth", "j", "localName", "namespaceURI", "prefix", "itemLocalName", "itemNamespaceURI", "itemPrefix", "m", "nthName", "nthIdentName", "anbMap", "astLeaves", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "res", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "stateValue", "prop", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "current", "eventTarget", "focusTarget", "relatedTarget", "parent", "placeholder", "targetNode", "nodeName", "checked", "form", "inputType", "node1", "node2", "host", "astType", "result", "cacheable", "compound", "filterLeaves", "baseNode", "leafName", "pending", "comboName", "dir", "matchedNode", "filtered", "complex", "targetType", "collected", "pendingItems", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItem", "index", "nextCombo", "collectedNodes", "sort", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode"]
4
+ "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport { Matcher } from './matcher.js';\nimport {\n generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\nimport {\n isContentEditable, isCustomElement, isFocusVisible, isFocusable,\n isInShadowTree, isVisible, resolveContent, sortNodes, traverseNode\n} from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR, BIT_01, CLASS_SELECTOR, COMBINATOR, DOCUMENT_FRAGMENT_NODE,\n DOCUMENT_NODE, ELEMENT_NODE, EMPTY, ID_SELECTOR, NOT_SUPPORTED_ERR,\n PS_CLASS_SELECTOR, PS_ELEMENT_SELECTOR, REG_INPUT_TYPE, REG_LOGICAL,\n SHOW_ALL, SYNTAX_ERR, TARGET_ALL, TARGET_FIRST, TARGET_LINEAL, TARGET_SELF,\n TEXT_NODE, TYPE_SELECTOR, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst KEY_TAB = 'Tab';\nconst REG_ANCHOR = /^a(?:rea)?$/;\nconst REG_FORM_CTRL =\n /^(?:button|fieldset|input|optgroup|option|select|textarea)$/;\nconst REG_FORM_VALID = /^(?:button|form|input|select|textarea)$/;\nconst REG_INTERACT = /^(?:details|dialog)$/;\nconst REG_SHADOW_HOST = /^host(?:-context)?$/;\nconst REG_TYPE_CHECK = /^(?:checkbox|radio)$/;\nconst REG_TYPE_RANGE = /^(?:date(?:time-local)?|month|number|range|time|week)$/;\nconst REG_TYPE_RESET = /^(?:button|reset)$/;\nconst REG_TYPE_SUBMIT = /^(?:image|submit)$/;\nconst REG_TYPE_TEXT = /^(?:email|number|password|search|tel|text|url)$/;\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: Array<Ast | undefined>\n * #nodes: Array<Nodes>\n * Ast: {\n * branch: Array<Branch | undefined>,\n * collected: boolean,\n * dir: string | null,\n * filtered: boolean,\n * find: boolean\n * }\n * Branch: Array<Twig>\n * Twig: {\n * combo: Leaf | null,\n * leaves: Array<Leaf>\n * }\n * Leaf: {\n * children: Array<Leaf | undefined> | null,\n * loc: null,\n * type: string\n * }\n * Nodes: Array<HTMLElement | undefined>\n */\nexport class Finder {\n /* private fields */\n #ast;\n #astCache;\n #descendant;\n #document;\n #documentCache;\n #event;\n #focus;\n #invalidate;\n #invalidateResults;\n #matcher;\n #node;\n #nodes;\n #noexcept;\n #qswalker;\n #results;\n #root;\n #shadow;\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.#matcher = new Matcher();\n this.#astCache = new WeakMap();\n this.#documentCache = new WeakMap();\n this.#invalidateResults = new WeakMap();\n this.#results = new WeakMap();\n this.#event = null;\n this.#focus = null;\n this._registerEventListeners();\n }\n\n /**\n * handle error\n * @param {Error} e - Error\n * @param {object} opt - options\n * @throws Error\n * @returns {void}\n */\n onError(e, opt = {}) {\n const noexcept = opt.noexcept ?? this.#noexcept;\n if (!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 if (e.name in this.#window) {\n throw new this.#window[e.name](e.message);\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {object} [opt.event] - MouseEvent, KeyboardEvent\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 { event, noexcept, warn } = opt;\n this.#noexcept = !!noexcept;\n this.#warn = !!warn;\n this.#node = node;\n [this.#document, this.#root, this.#walker] = resolveContent(node);\n this.#shadow = isInShadowTree(node);\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#invalidateResults = new WeakMap();\n this.#walkers = new WeakMap();\n this._setEvent(event);\n return node;\n }\n\n /**\n * register event listeners\n * @private\n * @returns {Array.<void>} - results\n */\n _registerEventListeners() {\n const opt = {\n capture: true,\n passive: true\n };\n const func = [];\n const mouseKeys = ['mouseover', 'mousedown', 'mouseup', 'mouseout'];\n for (const key of mouseKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n this.#event = evt;\n }, opt));\n }\n const keyboardKeys = ['keydown', 'keyup'];\n for (const key of keyboardKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n if (evt.key === KEY_TAB) {\n this.#event = evt;\n }\n }, opt));\n }\n func.push(this.#window.addEventListener('focusin', evt => {\n this.#focus = evt;\n }, opt));\n return func;\n }\n\n /**\n * set event\n * @private\n * @param {object} event - instance of KeyboardEvent, MouseEvent\n * @returns {object} - event\n */\n _setEvent(event) {\n // NOTE: PointerEvent not implemented in jsdom\n if (event instanceof this.#window.KeyboardEvent ||\n event instanceof this.#window.MouseEvent) {\n this.#event = event;\n }\n return this.#event;\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 this.#invalidate = false;\n let ast;\n if (this.#documentCache.has(this.#document)) {\n const cachedItem = this.#documentCache.get(this.#document);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n ast = item.ast;\n this.#descendant = item.descendant;\n this.#invalidate = item.invalidate;\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 {\n branches, info: { hasHasPseudoFunc, hasNthChildOfSelector }\n } = walkAST(cssAst);\n let invalidate = !!(hasHasPseudoFunc || hasNthChildOfSelector);\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 throw new DOMException(`Invalid selector ${selector}`,\n SYNTAX_ERR);\n }\n const itemName = item.name;\n if (/^[\\s>]$/.test(itemName)) {\n descendant = true;\n } else {\n invalidate = 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 if (typeof itemName === 'string' && itemName !== item.name) {\n item.name = itemName;\n }\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 let cachedItem;\n if (this.#documentCache.has(this.#document)) {\n cachedItem = this.#documentCache.get(this.#document);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant,\n invalidate\n });\n this.#documentCache.set(this.#document, cachedItem);\n this.#descendant = descendant;\n this.#invalidate = invalidate;\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 return this.#qswalker;\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 const { branches } = walkAST(selector);\n selectorBranches = branches;\n }\n if (parentNode) {\n const walker = this.#walker;\n let refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (isVisible(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 }\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 = traverseNode(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 = traverseNode(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 = traverseNode(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, namespaceURI, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const walker = this.#walker;\n let refNode = traverseNode(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 = traverseNode(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 {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\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 = traverseNode(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 {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\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 :has() pseudo-class function\n * @private\n * @param {Array.<object>} astLeaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(astLeaves, node, opt = {}) {\n let bool;\n if (Array.isArray(astLeaves) && astLeaves.length) {\n const leaves = astLeaves.map(i => i);\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(leaves, 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(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.test(astName)) {\n let astData;\n if (this.#astCache.has(ast)) {\n astData = this.#astCache.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.#astCache.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 // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n const [branch] = astChildren;\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n return nodes;\n } else {\n switch (astName) {\n // :dir(), :lang()\n case 'dir':\n case 'lang': {\n const res = this.#matcher.matchSelector(ast, node, opt, true);\n if (res) {\n matched.add(res);\n }\n break;\n }\n // :state()\n case 'state': {\n if (isCustomElement(node)) {\n const [{ value: stateValue }] = astChildren;\n if (stateValue) {\n if (node[stateValue]) {\n matched.add(node);\n } else {\n for (const i in node) {\n const prop = node[i];\n if (prop instanceof this.#window.ElementInternals) {\n if (prop?.states?.has(stateValue)) {\n matched.add(node);\n }\n break;\n }\n }\n }\n }\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // dropped from CSS Selectors 3\n case 'contains': {\n if (warn) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n switch (astName) {\n case 'any-link':\n case 'link': {\n if (REG_ANCHOR.test(localName) && node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (REG_ANCHOR.test(localName) && node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#document.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 'hover': {\n const { target, type } = this.#event ?? {};\n if (/^(?:mouse|pointer)(?:down|over|up)$/.test(type) &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'active': {\n const { buttons, target, type } = this.#event ?? {};\n if (/(?:mouse|pointer)down/.test(type) && buttons & BIT_01 &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'target': {\n const { hash } = new URL(this.#document.URL);\n if (node.id && hash === `#${node.id}` &&\n this.#document.contains(node)) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n const { hash } = new URL(this.#document.URL);\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#document.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.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus': {\n if (node === this.#document.activeElement && node.tabIndex >= 0 &&\n isFocusable(node)) {\n matched.add(node);\n }\n break;\n }\n case 'focus-visible': {\n if (node === this.#document.activeElement && node.tabIndex >= 0) {\n let bool;\n if (isFocusVisible(node)) {\n bool = true;\n } else {\n const { target: eventTarget, type } = this.#event ?? {};\n const { target: focusTarget, relatedTarget } = this.#focus ?? {};\n if (/^key(?:down|up)$/.test(type) && node.contains(eventTarget)) {\n bool = true;\n } else if (relatedTarget && isFocusVisible(relatedTarget) &&\n node.contains(focusTarget)) {\n bool = true;\n }\n }\n if (bool && isFocusable(node)) {\n matched.add(node);\n }\n }\n break;\n }\n case 'focus-within': {\n let bool;\n let current = this.#document.activeElement;\n if (current.tabIndex >= 0) {\n while (current) {\n if (current === node) {\n bool = true;\n break;\n }\n current = current.parentNode;\n }\n }\n if (bool && isFocusable(node)) {\n matched.add(node);\n }\n break;\n }\n case 'open': {\n if (REG_INTERACT.test(localName) && node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'closed': {\n if (REG_INTERACT.test(localName) && !node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'disabled': {\n if (REG_FORM_CTRL.test(localName) ||\n isCustomElement(node, { formAssociated: true })) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else if (node.localName === 'option') {\n if (parentNode.localName === 'optgroup' &&\n (parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n matched.add(node);\n }\n } else if (node.localName !== 'optgroup') {\n let bool;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n const walker = this.#walker;\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n bool = true;\n }\n } else {\n bool = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((REG_FORM_CTRL.test(localName) ||\n isCustomElement(node, { formAssociated: true })) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n if (node.localName === 'optgroup') {\n matched.add(node);\n } else if (node.localName === 'option') {\n if (parentNode.localName !== 'optgroup' ||\n !(parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n matched.add(node);\n }\n } else {\n let bool;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n const walker = this.#walker;\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n bool = true;\n }\n } else {\n bool = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n if (!bool) {\n matched.add(node);\n }\n }\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 || REG_INPUT_TYPE.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 || REG_INPUT_TYPE.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 placeholder;\n if (node.placeholder) {\n placeholder = node.placeholder;\n } else if (node.hasAttribute('placeholder')) {\n placeholder = node.getAttribute('placeholder');\n }\n if (typeof placeholder === 'string' && !/[\\r\\n]/.test(placeholder)) {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (REG_TYPE_TEXT.test(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '') {\n matched.add(node);\n }\n }\n break;\n }\n case 'checked': {\n if ((node.checked && localName === 'input' &&\n node.hasAttribute('type') &&\n REG_TYPE_CHECK.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.#document.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 // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n if ((localName === 'button' &&\n !(node.hasAttribute('type') &&\n REG_TYPE_RESET.test(node.getAttribute('type')))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n REG_TYPE_SUBMIT.test(node.getAttribute('type')))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker = this.#walker;\n let nextNode = traverseNode(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 REG_TYPE_RESET.test(nextNode.getAttribute('type')));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n REG_TYPE_SUBMIT.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 REG_TYPE_CHECK.test(node.getAttribute('type')) &&\n node.hasAttribute('checked')) {\n matched.add(node);\n // option\n } else if (localName === 'option' && node.hasAttribute('selected')) {\n matched.add(node);\n }\n break;\n }\n case 'valid': {\n if (REG_FORM_VALID.test(localName)) {\n if (node.checkValidity()) {\n if (node.maxLength >= 0) {\n if (node.maxLength >= node.value.length) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let bool;\n if (!refNode) {\n bool = true;\n } else {\n while (refNode && node.contains(refNode)) {\n if (REG_FORM_VALID.test(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n bool = refNode.maxLength >= refNode.value.length;\n } else {\n bool = true;\n }\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (REG_FORM_VALID.test(localName)) {\n if (node.checkValidity()) {\n if (node.maxLength >= 0 && node.maxLength < node.value.length) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let bool;\n if (!refNode) {\n bool = true;\n } else {\n while (refNode && node.contains(refNode)) {\n if (REG_FORM_VALID.test(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n bool = refNode.maxLength >= refNode.value.length;\n } else {\n bool = true;\n }\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\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 REG_TYPE_RANGE.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n REG_TYPE_RANGE.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || REG_TYPE_CHECK.test(inputType) ||\n REG_INPUT_TYPE.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' || REG_TYPE_CHECK.test(inputType) ||\n REG_INPUT_TYPE.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.#document.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 'defined': {\n if (node.hasAttribute('is') || localName.includes('-')) {\n if (isCustomElement(node)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case 'popover-open': {\n if (node.popover && isVisible(node)) {\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 throw new DOMException(`Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n // not supported\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'fullscreen':\n case 'future':\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 throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}`,\n SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match 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 { branches } = walkAST(astChildren[0]);\n const [branch] = branches;\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 throw new DOMException(`Invalid selector ${css}`, 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 throw new DOMException(`Invalid selector ${css}`, 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 throw new DOMException(`Invalid selector :${astName}`, 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 if (typeof astName === 'string' && astName !== ast.name) {\n ast.name = astName;\n }\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case PS_ELEMENT_SELECTOR: {\n this.#matcher.matchPseudoElementSelector(astName, opt);\n break;\n }\n case ID_SELECTOR: {\n if (node.id === astName) {\n matched.add(node);\n }\n break;\n }\n case CLASS_SELECTOR: {\n if (node.classList.contains(astName)) {\n matched.add(node);\n }\n break;\n }\n case PS_CLASS_SELECTOR: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n }\n default: {\n const res = this.#matcher.matchSelector(ast, node, opt, true);\n if (res) {\n matched.add(res);\n }\n }\n }\n } else if (this.#shadow && astType === PS_CLASS_SELECTOR &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (astName !== 'has' && REG_LOGICAL.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 let bool;\n let result;\n if (this.#invalidate) {\n result = this.#invalidateResults.get(leaves);\n } else {\n result = this.#results.get(leaves);\n }\n if (result && result.has(node)) {\n const { matched } = result.get(node);\n bool = matched;\n }\n if (typeof bool !== 'boolean') {\n let cacheable = true;\n if (node.nodeType === ELEMENT_NODE &&\n /^(?:button|fieldset|form|input|select|textarea)$/.test(node.localName)) {\n cacheable = false;\n }\n for (const leaf of leaves) {\n switch (leaf.type) {\n case ATTR_SELECTOR:\n case ID_SELECTOR: {\n cacheable = false;\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (/^(?:(?:any-)?link|defined|dir)$/.test(leaf.name)) {\n cacheable = false;\n }\n break;\n }\n default:\n }\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n if (cacheable) {\n if (!result) {\n result = new WeakMap();\n }\n result.set(node, {\n matched: bool\n });\n if (this.#invalidate) {\n this.#invalidateResults.set(leaves, result);\n } else {\n this.#results.set(leaves, result);\n }\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 if (typeof leafName === 'string' && leafName !== leaf.name) {\n leaf.name = leafName;\n }\n let nodes = new Set();\n let pending = false;\n if (this.#shadow) {\n pending = true;\n } else {\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n this.#matcher.matchPseudoElementSelector(leafName, opt);\n break;\n }\n case ID_SELECTOR: {\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 CLASS_SELECTOR: {\n const items = baseNode.getElementsByClassName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n break;\n }\n case TYPE_SELECTOR: {\n if (this.#document.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 = traverseNode(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 = traverseNode(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 = traverseNode(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 = traverseNode(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 const walker = this.#qswalker;\n let refNode = traverseNode(node, walker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = walker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = walker.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 = walker.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 { name: leafName, type: leafType } = leaf;\n let nodes = [];\n let collected = false;\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n this.#matcher.matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case ID_SELECTOR: {\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 CLASS_SELECTOR: {\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 TYPE_SELECTOR: {\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.#document.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 * 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 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 === PS_ELEMENT_SELECTOR ||\n lastType === ID_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === PS_ELEMENT_SELECTOR ||\n firstType === ID_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === TYPE_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === TYPE_SELECTOR) {\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 === TYPE_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === TYPE_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n for (const { combo, leaves: [leaf] } of branch) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === PS_CLASS_SELECTOR && 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 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 = traverseNode(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 = traverseNode(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 * find matched nodes\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 [[...branches], collectedNodes] = this._collectNodes(targetType);\n const l = branches.length;\n let sort;\n let nodes = 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 = collectedNodes[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 nodes.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...entryNodes]);\n sort = true;\n } else {\n nodes = new Set(entryNodes);\n }\n } else {\n const [node] = entryNodes;\n nodes.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 (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...nextNodes]);\n sort = true;\n } else {\n nodes = 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 nodes.add(node);\n if (branchLen > 1 && nodes.size > 1) {\n 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 nodes.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 nodes.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 nodes.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 nodes.add(refNode);\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n }\n }\n }\n }\n }\n if (targetType === TARGET_FIRST) {\n nodes.delete(this.#node);\n if (nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n } else if (targetType === TARGET_ALL) {\n nodes.delete(this.#node);\n if (sort && nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n }\n if (this.#invalidate) {\n this.#invalidateResults = new WeakMap();\n }\n return nodes;\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_matcher", "import_parser", "import_utility", "import_constant", "DIR_NEXT", "DIR_PREV", "KEY_TAB", "REG_ANCHOR", "REG_FORM_CTRL", "REG_FORM_VALID", "REG_INTERACT", "REG_SHADOW_HOST", "REG_TYPE_CHECK", "REG_TYPE_RANGE", "REG_TYPE_RESET", "REG_TYPE_SUBMIT", "REG_TYPE_TEXT", "#ast", "#astCache", "#descendant", "#document", "#documentCache", "#event", "#focus", "#invalidate", "#invalidateResults", "#matcher", "#node", "#nodes", "#noexcept", "#qswalker", "#results", "#root", "#shadow", "#walker", "#walkers", "#warn", "#window", "window", "e", "opt", "selector", "node", "event", "noexcept", "warn", "func", "mouseKeys", "key", "evt", "keyboardKeys", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "hasHasPseudoFunc", "hasNthChildOfSelector", "invalidate", "descendant", "items", "branch", "leaves", "nextItem", "itemName", "walker", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "refNode", "selectorNodes", "bool", "nth", "j", "localName", "namespaceURI", "prefix", "itemLocalName", "itemNamespaceURI", "itemPrefix", "m", "nthName", "nthIdentName", "anbMap", "astLeaves", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "res", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "stateValue", "prop", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "current", "eventTarget", "focusTarget", "relatedTarget", "parent", "placeholder", "targetNode", "nodeName", "checked", "form", "inputType", "node1", "node2", "host", "astType", "result", "cacheable", "compound", "filterLeaves", "baseNode", "leafName", "pending", "comboName", "dir", "matchedNode", "filtered", "complex", "targetType", "collected", "pendingItems", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItem", "index", "nextCombo", "collectedNodes", "sort", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode"]
7
7
  }
@@ -1,3 +1,3 @@
1
- var u=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var _=(s,t)=>{for(var r in t)u(s,r,{get:t[r],enumerable:!0})},L=(s,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of w(t))!y.call(s,n)&&n!==r&&u(s,n,{get:()=>t[n],enumerable:!(o=T(t,n))||o.enumerable});return s};var b=s=>L(u({},"__esModule",{value:!0}),s);var F={};_(F,{generateCSS:()=>O.generate,parseAstName:()=>D,parseSelector:()=>g,preprocess:()=>m,sortAST:()=>C,unescapeSelector:()=>I,walkAST:()=>A});module.exports=b(F);var d=require("css-tree"),$=require("./utility.js"),e=require("./constant.js"),O=require("css-tree");const S=/(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/,x=/(:(is|where)\(\s*\))/,E=/^part|slotted$/,I=(s="")=>{if(typeof s=="string"&&s.indexOf("\\",0)>=0){const t=s.split("\\"),r=t.length;for(let o=1;o<r;o++){let n=t[o];if(n===""&&o===r-1)n=e.U_FFFD;else{const c=/^([\da-f]{1,6}\s?)/i.exec(n);if(c){const[,f]=c;let a;try{const i=parseInt("D800",e.HEX),p=parseInt("DFFF",e.HEX),h=parseInt(f,e.HEX);h===0||h>=i&&h<=p?a=e.U_FFFD:a=String.fromCodePoint(h)}catch{a=e.U_FFFD}let l="";n.length>f.length&&(l=n.substring(f.length)),n=`${a}${l}`}else/^[\n\r\f]/.test(n)&&(n="\\"+n)}t[o]=n}s=t.join("")}return s},m=(...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 o=t.substring(0,r+1);let n=t.substring(r+1);if(/^\d$/.test(n.substring(0,1)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);const c=n.codePointAt(0);if(c===e.HYPHEN){if(/^\d$/.test(n.substring(1,2)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR)}else if(c>e.BIT_FFFF){const f=`\\${c.toString(e.HEX)} `;n.length===e.DUO?n=f:n=`${f}${n.substring(e.DUO)}`}t=`${o}${n}`,r++}t=t.replace(/\f|\r\n?/g,`
2
- `).replace(/[\0\uD800-\uDFFF]|\\$/g,e.U_FFFD)}else if(t==null)t=(0,$.getType)(t).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},g=s=>{if(s=m(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:o}=r;if(o==="Identifier is expected"&&S.test(s)){const[,n,c]=S.exec(s),f=c.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,"");let a=n.replace(c,f);a===":lang()"&&(a=`:lang(${e.EMPTY})`),t=g(s.replace(n,a))}else if(/^(?:Identifier|Selector) is expected$/.test(o)&&x.test(s)){const[,n,c]=x.exec(s);t=g(s.replace(n,`:${c}(${e.EMPTY})`))}else if(/^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test(o)&&!s.endsWith("]")){const n=s.lastIndexOf("["),c=s.substring(n);c.includes('"')?c.match(/"/g).length%2?t=g(`${s}"]`):t=g(`${s}]`):t=g(`${s}]`)}else if(o==='")" is expected'&&!s.endsWith(")"))t=g(`${s})`);else throw new DOMException(o,e.SYNTAX_ERR)}return t},A=(s={})=>{const t=new Set,r=new Map;return(0,d.walk)(s,{enter:n=>{switch(n.type){case e.SELECTOR:{t.add(n.children);break}case e.PS_CLASS_SELECTOR:{e.REG_LOGICAL.test(n.name)&&(r.set("hasNestedSelector",!0),r.set("hasLogicalPseudoFunc",!0),n.name==="has"&&r.set("hasHasPseudoFunc",!0));break}case e.PS_ELEMENT_SELECTOR:{E.test(n.name)&&r.set("hasNestedSelector",!0);break}case e.NTH:{n.selector&&r.set("hasNestedSelector",!0);break}default:}}}),r.get("hasNestedSelector")&&(0,d.findAll)(s,(n,c,f)=>{if(f){if(n.type===e.PS_CLASS_SELECTOR&&e.REG_LOGICAL.test(n.name)){const a=f.filter(l=>{const{name:i,type:p}=l;return p===e.PS_CLASS_SELECTOR&&e.REG_LOGICAL.test(i)});for(const{children:l}of a)for(const{children:i}of l)for(const{children:p}of i)t.has(p)&&t.delete(p)}else if(n.type===e.PS_ELEMENT_SELECTOR&&E.test(n.name)){const a=f.filter(l=>{const{name:i,type:p}=l;return p===e.PS_ELEMENT_SELECTOR&&E.test(i)});for(const{children:l}of a)for(const{children:i}of l)t.has(i)&&t.delete(i)}else if(n.type===e.NTH&&n.selector){const a=f.filter(l=>{const{selector:i,type:p}=l;return p===e.NTH&&i});for(const{selector:l}of a){const{children:i}=l;for(const{children:p}of i)t.has(p)&&t.delete(p)}}}}),{branches:[...t],info:Object.fromEntries(r)}},C=s=>{const t=[...s];if(t.length>1){const r=new Map([[e.PS_ELEMENT_SELECTOR,e.BIT_01],[e.ID_SELECTOR,e.BIT_02],[e.CLASS_SELECTOR,e.BIT_04],[e.TYPE_SELECTOR,e.BIT_08],[e.ATTR_SELECTOR,e.BIT_16],[e.PS_CLASS_SELECTOR,e.BIT_32]]);t.sort((o,n)=>{const{type:c}=o,{type:f}=n,a=r.get(c),l=r.get(f);let i;return a===l?i=0:a>l?i=1:i=-1,i})}return t},D=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}};0&&(module.exports={generateCSS,parseAstName,parseSelector,preprocess,sortAST,unescapeSelector,walkAST});
1
+ var E=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var L=(s,e)=>{for(var r in e)E(s,r,{get:e[r],enumerable:!0})},b=(s,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of y(e))!_.call(s,n)&&n!==r&&E(s,n,{get:()=>e[n],enumerable:!(o=w(e,n))||o.enumerable});return s};var I=s=>b(E({},"__esModule",{value:!0}),s);var P={};L(P,{generateCSS:()=>T.generate,parseAstName:()=>D,parseSelector:()=>g,preprocess:()=>O,sortAST:()=>F,unescapeSelector:()=>A,walkAST:()=>C});module.exports=I(P);var h=require("css-tree"),m=require("./utility.js"),t=require("./constant.js"),T=require("css-tree");const x=/(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/,$=/(:(is|where)\(\s*\))/,S=/^part|slotted$/,u="\uFFFD",A=(s="")=>{if(typeof s=="string"&&s.indexOf("\\",0)>=0){const e=s.split("\\"),r=e.length;for(let o=1;o<r;o++){let n=e[o];if(n===""&&o===r-1)n=u;else{const c=/^([\da-f]{1,6}\s?)/i.exec(n);if(c){const[,f]=c;let a;try{const i=parseInt("D800",t.HEX),p=parseInt("DFFF",t.HEX),d=parseInt(f,t.HEX);d===0||d>=i&&d<=p?a=u:a=String.fromCodePoint(d)}catch{a=u}let l="";n.length>f.length&&(l=n.substring(f.length)),n=`${a}${l}`}else/^[\n\r\f]/.test(n)&&(n="\\"+n)}e[o]=n}s=e.join("")}return s},O=(...s)=>{if(!s.length)throw new TypeError("1 argument required, but only 0 present.");let[e]=s;if(typeof e=="string"){let r=0;for(;r>=0&&(r=e.indexOf("#",r),!(r<0));){const o=e.substring(0,r+1);let n=e.substring(r+1);if(/^\d$/.test(n.substring(0,1)))throw new DOMException(`Invalid selector ${e}`,t.SYNTAX_ERR);const c=n.codePointAt(0);if(c===t.HYPHEN){if(/^\d$/.test(n.substring(1,2)))throw new DOMException(`Invalid selector ${e}`,t.SYNTAX_ERR)}else if(c>t.BIT_FFFF){const f=`\\${c.toString(t.HEX)} `;n.length===t.DUO?n=f:n=`${f}${n.substring(t.DUO)}`}e=`${o}${n}`,r++}e=e.replace(/\f|\r\n?/g,`
2
+ `).replace(/[\0\uD800-\uDFFF]|\\$/g,u)}else if(e==null)e=(0,m.getType)(e).toLowerCase();else if(Array.isArray(e))e=e.join(",");else if(Object.prototype.hasOwnProperty.call(e,"toString"))e=e.toString();else throw new DOMException(`Invalid selector ${e}`,t.SYNTAX_ERR);return e},g=s=>{if(s=O(s),/^$|^\s*>|,\s*$/.test(s))throw new DOMException(`Invalid selector ${s}`,t.SYNTAX_ERR);let e;try{const r=(0,h.parse)(s,{context:"selectorList",parseCustomProperty:!0});e=(0,h.toPlainObject)(r)}catch(r){const{message:o}=r;if(o==="Identifier is expected"&&x.test(s)){const[,n,c]=x.exec(s),f=c.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,"");let a=n.replace(c,f);a===":lang()"&&(a=`:lang(${t.EMPTY})`),e=g(s.replace(n,a))}else if(/^(?:Identifier|Selector) is expected$/.test(o)&&$.test(s)){const[,n,c]=$.exec(s);e=g(s.replace(n,`:${c}(${t.EMPTY})`))}else if(/^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test(o)&&!s.endsWith("]")){const n=s.lastIndexOf("["),c=s.substring(n);c.includes('"')?c.match(/"/g).length%2?e=g(`${s}"]`):e=g(`${s}]`):e=g(`${s}]`)}else if(o==='")" is expected'&&!s.endsWith(")"))e=g(`${s})`);else throw new DOMException(o,t.SYNTAX_ERR)}return e},C=(s={})=>{const e=new Set,r=new Map;return(0,h.walk)(s,{enter:n=>{switch(n.type){case t.SELECTOR:{e.add(n.children);break}case t.PS_CLASS_SELECTOR:{t.REG_LOGICAL.test(n.name)&&(r.set("hasNestedSelector",!0),r.set("hasLogicalPseudoFunc",!0),n.name==="has"&&r.set("hasHasPseudoFunc",!0));break}case t.PS_ELEMENT_SELECTOR:{S.test(n.name)&&r.set("hasNestedSelector",!0);break}case t.NTH:{n.selector&&(r.set("hasNestedSelector",!0),r.set("hasNthChildOfSelector",!0));break}default:}}}),r.get("hasNestedSelector")&&(0,h.findAll)(s,(n,c,f)=>{if(f){if(n.type===t.PS_CLASS_SELECTOR&&t.REG_LOGICAL.test(n.name)){const a=f.filter(l=>{const{name:i,type:p}=l;return p===t.PS_CLASS_SELECTOR&&t.REG_LOGICAL.test(i)});for(const{children:l}of a)for(const{children:i}of l)for(const{children:p}of i)e.has(p)&&e.delete(p)}else if(n.type===t.PS_ELEMENT_SELECTOR&&S.test(n.name)){const a=f.filter(l=>{const{name:i,type:p}=l;return p===t.PS_ELEMENT_SELECTOR&&S.test(i)});for(const{children:l}of a)for(const{children:i}of l)e.has(i)&&e.delete(i)}else if(n.type===t.NTH&&n.selector){const a=f.filter(l=>{const{selector:i,type:p}=l;return p===t.NTH&&i});for(const{selector:l}of a){const{children:i}=l;for(const{children:p}of i)e.has(p)&&e.delete(p)}}}}),{branches:[...e],info:Object.fromEntries(r)}},F=s=>{const e=[...s];if(e.length>1){const r=new Map([[t.PS_ELEMENT_SELECTOR,t.BIT_01],[t.ID_SELECTOR,t.BIT_02],[t.CLASS_SELECTOR,t.BIT_04],[t.TYPE_SELECTOR,t.BIT_08],[t.ATTR_SELECTOR,t.BIT_16],[t.PS_CLASS_SELECTOR,t.BIT_32]]);e.sort((o,n)=>{const{type:c}=o,{type:f}=n,a=r.get(c),l=r.get(f);let i;return a===l?i=0:a>l?i=1:i=-1,i})}return e},D=s=>{let e,r;if(s&&typeof s=="string")s.indexOf("|")>-1?[e,r]=s.split("|"):(e="*",r=s);else throw new DOMException(`Invalid selector ${s}`,t.SYNTAX_ERR);return{prefix:e,localName:r}};0&&(module.exports={generateCSS,parseAstName,parseSelector,preprocess,sortAST,unescapeSelector,walkAST});
3
3
  //# sourceMappingURL=parser.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/js/parser.js"],
4
- "sourcesContent": ["/**\n * parser.js\n */\n\n/* import */\nimport { findAll, parse, toPlainObject, walk } from 'css-tree';\nimport { getType } from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR, BIT_01, BIT_02, BIT_04, BIT_08, BIT_16, BIT_32, BIT_FFFF,\n CLASS_SELECTOR, DUO, EMPTY, HEX, HYPHEN, ID_SELECTOR, NTH, PS_CLASS_SELECTOR,\n PS_ELEMENT_SELECTOR, REG_LOGICAL, SELECTOR, SYNTAX_ERR, TYPE_SELECTOR, U_FFFD\n} from './constant.js';\nconst REG_LANG_QUOTED = /(:lang\\(\\s*(\"[A-Za-z\\d\\-*]*\")\\s*\\))/;\nconst REG_LOGICAL_EMPTY = /(:(is|where)\\(\\s*\\))/;\nconst REG_SHADOW_PSEUDO = /^part|slotted$/;\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 // @see https://drafts.csswg.org/selectors/#id-selectors\n // @see https://drafts.csswg.org/css-syntax-3/#ident-token-diagram\n if (/^\\d$/.test(postHash.substring(0, 1))) {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n const codePoint = postHash.codePointAt(0);\n if (codePoint === 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 = getType(selector).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 // workaround for https://github.com/csstree/csstree/issues/265\n if (message === 'Identifier is expected' &&\n REG_LANG_QUOTED.test(selector)) {\n const [, lang, range] = REG_LANG_QUOTED.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 (/^(?:Identifier|Selector) is expected$/.test(message) &&\n REG_LOGICAL_EMPTY.test(selector)) {\n const [, sel, name] = REG_LOGICAL_EMPTY.exec(selector);\n res = parseSelector(selector.replace(sel, `:${name}(${EMPTY})`));\n } else if (/^(?:\"\\]\"|Attribute selector [()\\s,=~^$*|]+) is expected$/.test(message) &&\n !selector.endsWith(']')) {\n const index = selector.lastIndexOf('[');\n const sel = selector.substring(index);\n if (sel.includes('\"')) {\n const quotes = sel.match(/\"/g).length;\n if (quotes % 2) {\n res = parseSelector(`${selector}\"]`);\n } else {\n res = parseSelector(`${selector}]`);\n }\n } else {\n res = parseSelector(`${selector}]`);\n }\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 const info = new Map();\n const opt = {\n enter: node => {\n switch (node.type) {\n case SELECTOR: {\n branches.add(node.children);\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (REG_LOGICAL.test(node.name)) {\n info.set('hasNestedSelector', true);\n info.set('hasLogicalPseudoFunc', true);\n if (node.name === 'has') {\n info.set('hasHasPseudoFunc', true);\n }\n }\n break;\n }\n case PS_ELEMENT_SELECTOR: {\n if (REG_SHADOW_PSEUDO.test(node.name)) {\n info.set('hasNestedSelector', true);\n }\n break;\n }\n case NTH: {\n if (node.selector) {\n info.set('hasNestedSelector', true);\n }\n break;\n }\n default:\n }\n }\n };\n walk(ast, opt);\n if (info.get('hasNestedSelector')) {\n findAll(ast, (node, item, list) => {\n if (list) {\n if (node.type === PS_CLASS_SELECTOR && REG_LOGICAL.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === PS_CLASS_SELECTOR && REG_LOGICAL.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 === PS_ELEMENT_SELECTOR &&\n REG_SHADOW_PSEUDO.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === PS_ELEMENT_SELECTOR && 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 } else if (node.type === NTH && node.selector) {\n const itemList = list.filter(i => {\n const { selector, type } = i;\n const res = type === NTH && selector;\n return res;\n });\n for (const { selector } of itemList) {\n const { children } = selector;\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 {\n branches: [...branches],\n info: Object.fromEntries(info)\n };\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 [PS_ELEMENT_SELECTOR, BIT_01],\n [ID_SELECTOR, BIT_02],\n [CLASS_SELECTOR, BIT_04],\n [TYPE_SELECTOR, BIT_08],\n [ATTR_SELECTOR, BIT_16],\n [PS_CLASS_SELECTOR, 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/* export */\nexport { generate as generateCSS } from 'css-tree';\n"],
5
- "mappings": "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",
6
- "names": ["parser_exports", "__export", "parseAstName", "parseSelector", "preprocess", "sortAST", "unescapeSelector", "walkAST", "__toCommonJS", "import_css_tree", "import_utility", "import_constant", "REG_LANG_QUOTED", "REG_LOGICAL_EMPTY", "REG_SHADOW_PSEUDO", "selector", "arr", "l", "i", "item", "hexExists", "hex", "str", "low", "high", "deci", "postStr", "args", "index", "preHash", "postHash", "codePoint", "res", "ast", "e", "message", "lang", "range", "escapedRange", "escapedLang", "sel", "name", "branches", "info", "node", "list", "itemList", "type", "children", "grandChildren", "greatGrandChildren", "asts", "order", "a", "b", "typeA", "typeB", "bitA", "bitB", "prefix", "localName"]
4
+ "sourcesContent": ["/**\n * parser.js\n */\n\n/* import */\nimport { findAll, parse, toPlainObject, walk } from 'css-tree';\nimport { getType } from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR, BIT_01, BIT_02, BIT_04, BIT_08, BIT_16, BIT_32, BIT_FFFF,\n CLASS_SELECTOR, DUO, EMPTY, HEX, HYPHEN, ID_SELECTOR, NTH, PS_CLASS_SELECTOR,\n PS_ELEMENT_SELECTOR, REG_LOGICAL, SELECTOR, SYNTAX_ERR, TYPE_SELECTOR\n} from './constant.js';\nconst REG_LANG_QUOTED = /(:lang\\(\\s*(\"[A-Za-z\\d\\-*]*\")\\s*\\))/;\nconst REG_LOGICAL_EMPTY = /(:(is|where)\\(\\s*\\))/;\nconst REG_SHADOW_PSEUDO = /^part|slotted$/;\nconst U_FFFD = '\\uFFFD';\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 // @see https://drafts.csswg.org/selectors/#id-selectors\n // @see https://drafts.csswg.org/css-syntax-3/#ident-token-diagram\n if (/^\\d$/.test(postHash.substring(0, 1))) {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n const codePoint = postHash.codePointAt(0);\n if (codePoint === 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 = getType(selector).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 // workaround for https://github.com/csstree/csstree/issues/265\n if (message === 'Identifier is expected' &&\n REG_LANG_QUOTED.test(selector)) {\n const [, lang, range] = REG_LANG_QUOTED.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 (/^(?:Identifier|Selector) is expected$/.test(message) &&\n REG_LOGICAL_EMPTY.test(selector)) {\n const [, sel, name] = REG_LOGICAL_EMPTY.exec(selector);\n res = parseSelector(selector.replace(sel, `:${name}(${EMPTY})`));\n } else if (/^(?:\"\\]\"|Attribute selector [()\\s,=~^$*|]+) is expected$/.test(message) &&\n !selector.endsWith(']')) {\n const index = selector.lastIndexOf('[');\n const sel = selector.substring(index);\n if (sel.includes('\"')) {\n const quotes = sel.match(/\"/g).length;\n if (quotes % 2) {\n res = parseSelector(`${selector}\"]`);\n } else {\n res = parseSelector(`${selector}]`);\n }\n } else {\n res = parseSelector(`${selector}]`);\n }\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 const info = new Map();\n const opt = {\n enter: node => {\n switch (node.type) {\n case SELECTOR: {\n branches.add(node.children);\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (REG_LOGICAL.test(node.name)) {\n info.set('hasNestedSelector', true);\n info.set('hasLogicalPseudoFunc', true);\n if (node.name === 'has') {\n info.set('hasHasPseudoFunc', true);\n }\n }\n break;\n }\n case PS_ELEMENT_SELECTOR: {\n if (REG_SHADOW_PSEUDO.test(node.name)) {\n info.set('hasNestedSelector', true);\n }\n break;\n }\n case NTH: {\n if (node.selector) {\n info.set('hasNestedSelector', true);\n info.set('hasNthChildOfSelector', true);\n }\n break;\n }\n default:\n }\n }\n };\n walk(ast, opt);\n if (info.get('hasNestedSelector')) {\n findAll(ast, (node, item, list) => {\n if (list) {\n if (node.type === PS_CLASS_SELECTOR && REG_LOGICAL.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === PS_CLASS_SELECTOR && REG_LOGICAL.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 === PS_ELEMENT_SELECTOR &&\n REG_SHADOW_PSEUDO.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === PS_ELEMENT_SELECTOR && 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 } else if (node.type === NTH && node.selector) {\n const itemList = list.filter(i => {\n const { selector, type } = i;\n const res = type === NTH && selector;\n return res;\n });\n for (const { selector } of itemList) {\n const { children } = selector;\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 {\n branches: [...branches],\n info: Object.fromEntries(info)\n };\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 [PS_ELEMENT_SELECTOR, BIT_01],\n [ID_SELECTOR, BIT_02],\n [CLASS_SELECTOR, BIT_04],\n [TYPE_SELECTOR, BIT_08],\n [ATTR_SELECTOR, BIT_16],\n [PS_CLASS_SELECTOR, 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/* export */\nexport { generate as generateCSS } from 'css-tree';\n"],
5
+ "mappings": "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",
6
+ "names": ["parser_exports", "__export", "parseAstName", "parseSelector", "preprocess", "sortAST", "unescapeSelector", "walkAST", "__toCommonJS", "import_css_tree", "import_utility", "import_constant", "REG_LANG_QUOTED", "REG_LOGICAL_EMPTY", "REG_SHADOW_PSEUDO", "U_FFFD", "selector", "arr", "l", "i", "item", "hexExists", "hex", "str", "low", "high", "deci", "postStr", "args", "index", "preHash", "postHash", "codePoint", "res", "ast", "e", "message", "lang", "range", "escapedRange", "escapedLang", "sel", "name", "branches", "info", "node", "list", "itemList", "type", "children", "grandChildren", "greatGrandChildren", "asts", "order", "a", "b", "typeA", "typeB", "bitA", "bitB", "prefix", "localName"]
7
7
  }
package/package.json CHANGED
@@ -60,5 +60,5 @@
60
60
  "tsc": "node scripts/index clean --dir=types -i && npx tsc",
61
61
  "update-wpt": "git submodule update --init --recursive --remote"
62
62
  },
63
- "version": "5.3.0"
63
+ "version": "5.3.2"
64
64
  }
@@ -3,7 +3,6 @@
3
3
  */
4
4
 
5
5
  /* string */
6
- export const AN_PLUS_B = 'AnPlusB';
7
6
  export const ATTR_SELECTOR = 'AttributeSelector';
8
7
  export const CLASS_SELECTOR = 'ClassSelector';
9
8
  export const COMBINATOR = 'Combinator';
@@ -14,17 +13,13 @@ export const NOT_SUPPORTED_ERR = 'NotSupportedError';
14
13
  export const NTH = 'Nth';
15
14
  export const PS_CLASS_SELECTOR = 'PseudoClassSelector';
16
15
  export const PS_ELEMENT_SELECTOR = 'PseudoElementSelector';
17
- export const RAW = 'Raw';
18
16
  export const SELECTOR = 'Selector';
19
- export const SELECTOR_LIST = 'SelectorList';
20
- export const STRING = 'String';
21
17
  export const SYNTAX_ERR = 'SyntaxError';
22
18
  export const TARGET_ALL = 'all';
23
19
  export const TARGET_FIRST = 'first';
24
20
  export const TARGET_LINEAL = 'lineal';
25
21
  export const TARGET_SELF = 'self';
26
22
  export const TYPE_SELECTOR = 'TypeSelector';
27
- export const U_FFFD = '\uFFFD';
28
23
 
29
24
  /* numeric */
30
25
  export const BIT_01 = 1;
package/src/js/finder.js CHANGED
@@ -232,8 +232,10 @@ export class Finder {
232
232
  } catch (e) {
233
233
  this.onError(e);
234
234
  }
235
- const { branches, info: { hasHasPseudoFunc } } = walkAST(cssAst);
236
- let invalidate = !!hasHasPseudoFunc;
235
+ const {
236
+ branches, info: { hasHasPseudoFunc, hasNthChildOfSelector }
237
+ } = walkAST(cssAst);
238
+ let invalidate = !!(hasHasPseudoFunc || hasNthChildOfSelector);
237
239
  let descendant = false;
238
240
  let i = 0;
239
241
  ast = [];
@@ -361,16 +363,8 @@ export class Finder {
361
363
  const matched = new Set();
362
364
  let selectorBranches;
363
365
  if (selector) {
364
- if (this.#astCache.has(selector)) {
365
- selectorBranches = this.#astCache.get(selector);
366
- } else {
367
- const { branches, info } = walkAST(selector);
368
- selectorBranches = branches;
369
- this.#astCache.set(selector, selectorBranches);
370
- if (info.hasLogicalPseudoFunc) {
371
- this.#invalidate = true;
372
- }
373
- }
366
+ const { branches } = walkAST(selector);
367
+ selectorBranches = branches;
374
368
  }
375
369
  if (parentNode) {
376
370
  const walker = this.#walker;
@@ -2885,6 +2879,9 @@ export class Finder {
2885
2879
  nodes = new Set(sortNodes(nodes));
2886
2880
  }
2887
2881
  }
2882
+ if (this.#invalidate) {
2883
+ this.#invalidateResults = new WeakMap();
2884
+ }
2888
2885
  return nodes;
2889
2886
  }
2890
2887
  };
package/src/js/parser.js CHANGED
@@ -10,11 +10,12 @@ import { getType } from './utility.js';
10
10
  import {
11
11
  ATTR_SELECTOR, BIT_01, BIT_02, BIT_04, BIT_08, BIT_16, BIT_32, BIT_FFFF,
12
12
  CLASS_SELECTOR, DUO, EMPTY, HEX, HYPHEN, ID_SELECTOR, NTH, PS_CLASS_SELECTOR,
13
- PS_ELEMENT_SELECTOR, REG_LOGICAL, SELECTOR, SYNTAX_ERR, TYPE_SELECTOR, U_FFFD
13
+ PS_ELEMENT_SELECTOR, REG_LOGICAL, SELECTOR, SYNTAX_ERR, TYPE_SELECTOR
14
14
  } from './constant.js';
15
15
  const REG_LANG_QUOTED = /(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/;
16
16
  const REG_LOGICAL_EMPTY = /(:(is|where)\(\s*\))/;
17
17
  const REG_SHADOW_PSEUDO = /^part|slotted$/;
18
+ const U_FFFD = '\uFFFD';
18
19
 
19
20
  /**
20
21
  * unescape selector
@@ -211,6 +212,7 @@ export const walkAST = (ast = {}) => {
211
212
  case NTH: {
212
213
  if (node.selector) {
213
214
  info.set('hasNestedSelector', true);
215
+ info.set('hasNthChildOfSelector', true);
214
216
  }
215
217
  break;
216
218
  }
@@ -1,4 +1,3 @@
1
- export const AN_PLUS_B: "AnPlusB";
2
1
  export const ATTR_SELECTOR: "AttributeSelector";
3
2
  export const CLASS_SELECTOR: "ClassSelector";
4
3
  export const COMBINATOR: "Combinator";
@@ -9,17 +8,13 @@ export const NOT_SUPPORTED_ERR: "NotSupportedError";
9
8
  export const NTH: "Nth";
10
9
  export const PS_CLASS_SELECTOR: "PseudoClassSelector";
11
10
  export const PS_ELEMENT_SELECTOR: "PseudoElementSelector";
12
- export const RAW: "Raw";
13
11
  export const SELECTOR: "Selector";
14
- export const SELECTOR_LIST: "SelectorList";
15
- export const STRING: "String";
16
12
  export const SYNTAX_ERR: "SyntaxError";
17
13
  export const TARGET_ALL: "all";
18
14
  export const TARGET_FIRST: "first";
19
15
  export const TARGET_LINEAL: "lineal";
20
16
  export const TARGET_SELF: "self";
21
17
  export const TYPE_SELECTOR: "TypeSelector";
22
- export const U_FFFD: "�";
23
18
  export const BIT_01: 1;
24
19
  export const BIT_02: 2;
25
20
  export const BIT_04: 4;