diff --git a/dist/cjs/js/constant.js b/dist/cjs/js/constant.js index 197dcd38..45e3dc50 100644 --- a/dist/cjs/js/constant.js +++ b/dist/cjs/js/constant.js @@ -1,2 +1,2 @@ -var T=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var w=(e,t)=>{for(var x in t)T(e,x,{get:t[x],enumerable:!0})},X=(e,t,x,M)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of f(t))!m.call(e,r)&&r!==x&&T(e,r,{get:()=>t[r],enumerable:!(M=H(t,r))||M.enumerable});return e};var g=e=>X(T({},"__esModule",{value:!0}),e);var so={};w(so,{ALPHA_NUM:()=>R,ANB:()=>a,AN_PLUS_B:()=>h,BIT_01:()=>Et,BIT_02:()=>rt,BIT_04:()=>nt,BIT_08:()=>_t,BIT_16:()=>pt,BIT_32:()=>xt,BIT_FFFF:()=>ct,BIT_HYPHEN:()=>Ot,CHILD_IDX:()=>i,COMBINATOR:()=>b,COMBO_A:()=>O,COMBO_B:()=>$,COMPLEX_A:()=>L,COMPLEX_B:()=>A,COMPLEX_C:()=>D,COMPLEX_D:()=>P,COMPOUND:()=>s,COMPOUND_A:()=>N,COMPOUND_B:()=>S,COMPOUND_C:()=>G,COMPOUND_I:()=>I,DIGIT:()=>c,DOCUMENT_FRAGMENT_NODE:()=>St,DOCUMENT_NODE:()=>Nt,DOCUMENT_POSITION_CONTAINED_BY:()=>Dt,DOCUMENT_POSITION_CONTAINS:()=>It,DOCUMENT_POSITION_PRECEDING:()=>Gt,DUO:()=>$t,ELEMENT_NODE:()=>Lt,EMPTY:()=>W,HEX:()=>Tt,IDENTIFIER:()=>y,LANG_PART:()=>l,LOGICAL_COMPLEX_A:()=>F,LOGICAL_COMPLEX_B:()=>Y,LOGICAL_COMPOUND:()=>u,LOGICAL_KEY:()=>p,NESTED_LOGICAL_A:()=>U,NESTED_LOGICAL_B:()=>d,NESTED_LOGICAL_C:()=>B,NOT_SUPPORTED_ERR:()=>k,NTH:()=>K,N_TH:()=>_,PSEUDO_CLASSES:()=>n,RAW:()=>Z,REG_ANCHOR:()=>Ut,REG_CHILD_INDEXED:()=>dt,REG_COMPLEX_A:()=>Bt,REG_COMPLEX_B:()=>Ft,REG_DIR:()=>Yt,REG_FORM:()=>ut,REG_FORM_CTRL:()=>Ht,REG_FORM_GROUP:()=>ft,REG_FORM_VALID:()=>mt,REG_HEX:()=>wt,REG_INTERACT:()=>Xt,REG_INVALID_SELECTOR:()=>gt,REG_LANG:()=>ht,REG_LANG_QUOTED:()=>bt,REG_LOGICAL_COMPLEX_A:()=>Wt,REG_LOGICAL_COMPLEX_B:()=>yt,REG_LOGICAL_COMPOUND:()=>kt,REG_LOGICAL_EMPTY:()=>Kt,REG_LOGICAL_KEY:()=>Zt,REG_LOGICAL_PSEUDO:()=>vt,REG_SHADOW_HOST:()=>zt,REG_SHADOW_MODE:()=>Vt,REG_SHADOW_PSEUDO:()=>Qt,REG_TYPE_CHECK:()=>jt,REG_TYPE_DATE:()=>qt,REG_TYPE_RANGE:()=>Jt,REG_TYPE_RESET:()=>to,REG_TYPE_SUBMIT:()=>oo,REG_TYPE_TEXT:()=>eo,SELECTOR:()=>v,SELECTOR_ATTR:()=>z,SELECTOR_CLASS:()=>V,SELECTOR_ID:()=>Q,SELECTOR_LIST:()=>j,SELECTOR_PSEUDO_CLASS:()=>q,SELECTOR_PSEUDO_ELEMENT:()=>J,SELECTOR_TYPE:()=>tt,SHOW_ALL:()=>Pt,SHOW_DOCUMENT:()=>Mt,SHOW_DOCUMENT_FRAGMENT:()=>it,SHOW_ELEMENT:()=>lt,STRING:()=>ot,SUB_TYPE:()=>E,SYNTAX_ERR:()=>et,TAG_TYPE:()=>o,TAG_TYPE_I:()=>C,TEXT_NODE:()=>At,TYPE_FROM:()=>Rt,TYPE_TO:()=>Ct,U_FFFD:()=>st,WALKER_FILTER:()=>at});module.exports=g(so);const h="AnPlusB",b="Combinator",W="__EMPTY__",y="Identifier",k="NotSupportedError",K="Nth",Z="Raw",v="Selector",z="AttributeSelector",V="ClassSelector",Q="IdSelector",j="SelectorList",q="PseudoClassSelector",J="PseudoElementSelector",tt="TypeSelector",ot="String",et="SyntaxError",st="\uFFFD",Et=1,rt=2,nt=4,_t=8,pt=16,xt=32,ct=65535,Ot=45,$t=2,Tt=16,Rt=8,Ct=-1,Lt=1,At=3,Nt=9,St=11,Gt=2,It=8,Dt=16,Pt=4294967295,Mt=256,it=1024,lt=1,at=1281,R="[A-Z\\d]+",i="(?:first|last|only)-(?:child|of-type)",c="(?:0|[1-9]\\d*)",l=`(?:-${R})*`,n=`(?:any-)?link|${i}|checked|empty|indeterminate|root|target|visited`,a=`[+-]?(?:${c}n?|n)|(?:[+-]?${c})?n\\s*[+-]\\s*${c}`,_=`nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${a})\\s*\\)`,E="\\[[^\\]]+\\]|[#.:][\\w-]+",o="\\*|[A-Za-z][\\w-]*",C="\\*|[A-Z][\\w-]*",p="(?:is|not)",s=`(?:${o}|(?:${o})?(?:${E})+)`,O="\\s?[\\s>~+]\\s?",$="\\s?[~+]\\s?",L=`${s}(?:${O}${s})*`,A=`${s}(?:${$}${s})*`,U=`:is\\(\\s*${s}(?:\\s*,\\s*${s})*\\s*\\)`,d=`:is\\(\\s*${L}(?:\\s*,\\s*${L})*\\s*\\)`,B=`:is\\(\\s*${A}(?:\\s*,\\s*${A})*\\s*\\)`,N=`(?:${o}|(?:${o})?(?:${E}|${U})+)`,S=`(?:${o}|(?:${o})?(?:${E}|${d})+)`,G=`(?:${o}|(?:${o})?(?:${E}|${B})+)`,I=`(?:${C}|(?:${C})?(?:${E})+)`,D=`${S}(?:${O}${S})*`,P=`${G}(?:${$}${G})*`,F=`${p}\\(\\s*${D}(?:\\s*,\\s*${D})*\\s*\\)`,Y=`${p}\\(\\s*${P}(?:\\s*,\\s*${P})*\\s*\\)`,u=`${p}\\(\\s*${N}(?:\\s*,\\s*${N})*\\s*\\)`,Ut=/^a(?:rea)?$/,dt=new RegExp(`:(?!${n}|${_})`),Bt=new RegExp(`${O}${I}`,"i"),Ft=new RegExp(`${$}${I}`,"i"),Yt=/^(?:ltr|rtl)$/,ut=/^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/,Ht=/^(?:button|fieldset|input|optgroup|option|select|textarea)$/,ft=/^(?:fieldset|optgroup|select)$/,mt=/^(?:button|form|input|select|textarea)$/,wt=/^([\da-f]{1,6}\s?)/i,Xt=/^(?:details|dialog)$/,gt=/^$|^\s*>|,\s*$/,ht=new RegExp(`^(?:\\*-)?${R}${l}$`,"i"),bt=/(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/,Wt=new RegExp(`:(?!${n}|${_}|${F})`),yt=new RegExp(`:(?!${n}|${_}|${Y})`),kt=new RegExp(`:(?!${n}|${_}|${u})`),Kt=/(:(is|where)\(\s*\))/,Zt=new RegExp(`:${p}\\(`),vt=/^(?:has|is|not|where)$/,zt=/^host(?:-context)?$/,Vt=/^(?:close|open)$/,Qt=/^part|slotted$/,jt=/^(?:checkbox|radio)$/,qt=/^(?:date(?:time-local)?|month|time|week)$/,Jt=/(?:date(?:time-local)?|month|number|range|time|week)$/,to=/^(?:button|reset)$/,oo=/^(?:image|submit)$/,eo=/^(?:email|number|password|search|tel|text|url)$/;0&&(module.exports={ALPHA_NUM,ANB,AN_PLUS_B,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,BIT_HYPHEN,CHILD_IDX,COMBINATOR,COMBO_A,COMBO_B,COMPLEX_A,COMPLEX_B,COMPLEX_C,COMPLEX_D,COMPOUND,COMPOUND_A,COMPOUND_B,COMPOUND_C,COMPOUND_I,DIGIT,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,EMPTY,HEX,IDENTIFIER,LANG_PART,LOGICAL_COMPLEX_A,LOGICAL_COMPLEX_B,LOGICAL_COMPOUND,LOGICAL_KEY,NESTED_LOGICAL_A,NESTED_LOGICAL_B,NESTED_LOGICAL_C,NOT_SUPPORTED_ERR,NTH,N_TH,PSEUDO_CLASSES,RAW,REG_ANCHOR,REG_CHILD_INDEXED,REG_COMPLEX_A,REG_COMPLEX_B,REG_DIR,REG_FORM,REG_FORM_CTRL,REG_FORM_GROUP,REG_FORM_VALID,REG_HEX,REG_INTERACT,REG_INVALID_SELECTOR,REG_LANG,REG_LANG_QUOTED,REG_LOGICAL_COMPLEX_A,REG_LOGICAL_COMPLEX_B,REG_LOGICAL_COMPOUND,REG_LOGICAL_EMPTY,REG_LOGICAL_KEY,REG_LOGICAL_PSEUDO,REG_SHADOW_HOST,REG_SHADOW_MODE,REG_SHADOW_PSEUDO,REG_TYPE_CHECK,REG_TYPE_DATE,REG_TYPE_RANGE,REG_TYPE_RESET,REG_TYPE_SUBMIT,REG_TYPE_TEXT,SELECTOR,SELECTOR_ATTR,SELECTOR_CLASS,SELECTOR_ID,SELECTOR_LIST,SELECTOR_PSEUDO_CLASS,SELECTOR_PSEUDO_ELEMENT,SELECTOR_TYPE,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,STRING,SUB_TYPE,SYNTAX_ERR,TAG_TYPE,TAG_TYPE_I,TEXT_NODE,TYPE_FROM,TYPE_TO,U_FFFD,WALKER_FILTER}); +var T=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var w=(e,t)=>{for(var x in t)T(e,x,{get:t[x],enumerable:!0})},X=(e,t,x,M)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of f(t))!m.call(e,r)&&r!==x&&T(e,r,{get:()=>t[r],enumerable:!(M=H(t,r))||M.enumerable});return e};var g=e=>X(T({},"__esModule",{value:!0}),e);var so={};w(so,{ALPHA_NUM:()=>R,ANB:()=>a,AN_PLUS_B:()=>h,BIT_01:()=>Et,BIT_02:()=>rt,BIT_04:()=>nt,BIT_08:()=>_t,BIT_16:()=>pt,BIT_32:()=>xt,BIT_FFFF:()=>ct,BIT_HYPHEN:()=>Ot,CHILD_IDX:()=>i,COMBINATOR:()=>b,COMBO_A:()=>O,COMBO_B:()=>$,COMPLEX_A:()=>L,COMPLEX_B:()=>A,COMPLEX_C:()=>D,COMPLEX_D:()=>P,COMPOUND:()=>s,COMPOUND_A:()=>N,COMPOUND_B:()=>S,COMPOUND_C:()=>G,COMPOUND_I:()=>I,DIGIT:()=>c,DOCUMENT_FRAGMENT_NODE:()=>St,DOCUMENT_NODE:()=>Nt,DOCUMENT_POSITION_CONTAINED_BY:()=>Dt,DOCUMENT_POSITION_CONTAINS:()=>It,DOCUMENT_POSITION_PRECEDING:()=>Gt,DUO:()=>$t,ELEMENT_NODE:()=>Lt,EMPTY:()=>W,HEX:()=>Tt,IDENTIFIER:()=>y,LANG_PART:()=>l,LOGICAL_COMPLEX_A:()=>F,LOGICAL_COMPLEX_B:()=>Y,LOGICAL_COMPOUND:()=>u,LOGICAL_KEY:()=>p,NESTED_LOGICAL_A:()=>U,NESTED_LOGICAL_B:()=>d,NESTED_LOGICAL_C:()=>B,NOT_SUPPORTED_ERR:()=>k,NTH:()=>K,N_TH:()=>_,PSEUDO_CLASSES:()=>n,RAW:()=>Z,REG_ANCHOR:()=>Ut,REG_CHILD_INDEXED:()=>dt,REG_COMPLEX_A:()=>Bt,REG_COMPLEX_B:()=>Ft,REG_DIR:()=>Yt,REG_FORM:()=>ut,REG_FORM_CTRL:()=>Ht,REG_FORM_GROUP:()=>ft,REG_FORM_VALID:()=>mt,REG_HEX:()=>wt,REG_INTERACT:()=>Xt,REG_INVALID_SELECTOR:()=>gt,REG_LANG:()=>ht,REG_LANG_QUOTED:()=>bt,REG_LOGICAL_COMPLEX_A:()=>Wt,REG_LOGICAL_COMPLEX_B:()=>yt,REG_LOGICAL_COMPOUND:()=>kt,REG_LOGICAL_EMPTY:()=>Kt,REG_LOGICAL_KEY:()=>Zt,REG_LOGICAL_PSEUDO:()=>vt,REG_SHADOW_HOST:()=>zt,REG_SHADOW_MODE:()=>Vt,REG_SHADOW_PSEUDO:()=>Qt,REG_TYPE_CHECK:()=>jt,REG_TYPE_DATE:()=>qt,REG_TYPE_RANGE:()=>Jt,REG_TYPE_RESET:()=>to,REG_TYPE_SUBMIT:()=>oo,REG_TYPE_TEXT:()=>eo,SELECTOR:()=>v,SELECTOR_ATTR:()=>z,SELECTOR_CLASS:()=>V,SELECTOR_ID:()=>Q,SELECTOR_LIST:()=>j,SELECTOR_PSEUDO_CLASS:()=>q,SELECTOR_PSEUDO_ELEMENT:()=>J,SELECTOR_TYPE:()=>tt,SHOW_ALL:()=>Pt,SHOW_DOCUMENT:()=>Mt,SHOW_DOCUMENT_FRAGMENT:()=>it,SHOW_ELEMENT:()=>lt,STRING:()=>ot,SUB_TYPE:()=>E,SYNTAX_ERR:()=>et,TAG_TYPE:()=>o,TAG_TYPE_I:()=>C,TEXT_NODE:()=>At,TYPE_FROM:()=>Rt,TYPE_TO:()=>Ct,U_FFFD:()=>st,WALKER_FILTER:()=>at});module.exports=g(so);const h="AnPlusB",b="Combinator",W="__EMPTY__",y="Identifier",k="NotSupportedError",K="Nth",Z="Raw",v="Selector",z="AttributeSelector",V="ClassSelector",Q="IdSelector",j="SelectorList",q="PseudoClassSelector",J="PseudoElementSelector",tt="TypeSelector",ot="String",et="SyntaxError",st="\uFFFD",Et=1,rt=2,nt=4,_t=8,pt=16,xt=32,ct=65535,Ot=45,$t=2,Tt=16,Rt=8,Ct=-1,Lt=1,At=3,Nt=9,St=11,Gt=2,It=8,Dt=16,Pt=4294967295,Mt=256,it=1024,lt=1,at=1281,R="[A-Z\\d]+",i="(?:first|last|only)-(?:child|of-type)",c="(?:0|[1-9]\\d*)",l=`(?:-${R})*`,n=`(?:any-)?link|${i}|checked|empty|indeterminate|root|target|visited`,a=`[+-]?(?:${c}n?|n)|(?:[+-]?${c})?n\\s*[+-]\\s*${c}`,_=`nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${a})\\s*\\)`,E="\\[[^|\\]]+\\]|[#.:][\\w-]+",o="\\*|[A-Za-z][\\w-]*",C="\\*|[A-Z][\\w-]*",p="(?:is|not)",s=`(?:${o}|(?:${o})?(?:${E})+)`,O="\\s?[\\s>~+]\\s?",$="\\s?[~+]\\s?",L=`${s}(?:${O}${s})*`,A=`${s}(?:${$}${s})*`,U=`:is\\(\\s*${s}(?:\\s*,\\s*${s})*\\s*\\)`,d=`:is\\(\\s*${L}(?:\\s*,\\s*${L})*\\s*\\)`,B=`:is\\(\\s*${A}(?:\\s*,\\s*${A})*\\s*\\)`,N=`(?:${o}|(?:${o})?(?:${E}|${U})+)`,S=`(?:${o}|(?:${o})?(?:${E}|${d})+)`,G=`(?:${o}|(?:${o})?(?:${E}|${B})+)`,I=`(?:${C}|(?:${C})?(?:${E})+)`,D=`${S}(?:${O}${S})*`,P=`${G}(?:${$}${G})*`,F=`${p}\\(\\s*${D}(?:\\s*,\\s*${D})*\\s*\\)`,Y=`${p}\\(\\s*${P}(?:\\s*,\\s*${P})*\\s*\\)`,u=`${p}\\(\\s*${N}(?:\\s*,\\s*${N})*\\s*\\)`,Ut=/^a(?:rea)?$/,dt=new RegExp(`:(?!${n}|${_})`),Bt=new RegExp(`${O}${I}`,"i"),Ft=new RegExp(`${$}${I}`,"i"),Yt=/^(?:ltr|rtl)$/,ut=/^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/,Ht=/^(?:button|fieldset|input|optgroup|option|select|textarea)$/,ft=/^(?:fieldset|optgroup|select)$/,mt=/^(?:button|form|input|select|textarea)$/,wt=/^([\da-f]{1,6}\s?)/i,Xt=/^(?:details|dialog)$/,gt=/^$|^\s*>|,\s*$/,ht=new RegExp(`^(?:\\*-)?${R}${l}$`,"i"),bt=/(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/,Wt=new RegExp(`:(?!${n}|${_}|${F})`),yt=new RegExp(`:(?!${n}|${_}|${Y})`),kt=new RegExp(`:(?!${n}|${_}|${u})`),Kt=/(:(is|where)\(\s*\))/,Zt=new RegExp(`:${p}\\(`),vt=/^(?:has|is|not|where)$/,zt=/^host(?:-context)?$/,Vt=/^(?:close|open)$/,Qt=/^part|slotted$/,jt=/^(?:checkbox|radio)$/,qt=/^(?:date(?:time-local)?|month|time|week)$/,Jt=/(?:date(?:time-local)?|month|number|range|time|week)$/,to=/^(?:button|reset)$/,oo=/^(?:image|submit)$/,eo=/^(?:email|number|password|search|tel|text|url)$/;0&&(module.exports={ALPHA_NUM,ANB,AN_PLUS_B,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,BIT_HYPHEN,CHILD_IDX,COMBINATOR,COMBO_A,COMBO_B,COMPLEX_A,COMPLEX_B,COMPLEX_C,COMPLEX_D,COMPOUND,COMPOUND_A,COMPOUND_B,COMPOUND_C,COMPOUND_I,DIGIT,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,EMPTY,HEX,IDENTIFIER,LANG_PART,LOGICAL_COMPLEX_A,LOGICAL_COMPLEX_B,LOGICAL_COMPOUND,LOGICAL_KEY,NESTED_LOGICAL_A,NESTED_LOGICAL_B,NESTED_LOGICAL_C,NOT_SUPPORTED_ERR,NTH,N_TH,PSEUDO_CLASSES,RAW,REG_ANCHOR,REG_CHILD_INDEXED,REG_COMPLEX_A,REG_COMPLEX_B,REG_DIR,REG_FORM,REG_FORM_CTRL,REG_FORM_GROUP,REG_FORM_VALID,REG_HEX,REG_INTERACT,REG_INVALID_SELECTOR,REG_LANG,REG_LANG_QUOTED,REG_LOGICAL_COMPLEX_A,REG_LOGICAL_COMPLEX_B,REG_LOGICAL_COMPOUND,REG_LOGICAL_EMPTY,REG_LOGICAL_KEY,REG_LOGICAL_PSEUDO,REG_SHADOW_HOST,REG_SHADOW_MODE,REG_SHADOW_PSEUDO,REG_TYPE_CHECK,REG_TYPE_DATE,REG_TYPE_RANGE,REG_TYPE_RESET,REG_TYPE_SUBMIT,REG_TYPE_TEXT,SELECTOR,SELECTOR_ATTR,SELECTOR_CLASS,SELECTOR_ID,SELECTOR_LIST,SELECTOR_PSEUDO_CLASS,SELECTOR_PSEUDO_ELEMENT,SELECTOR_TYPE,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,STRING,SUB_TYPE,SYNTAX_ERR,TAG_TYPE,TAG_TYPE_I,TEXT_NODE,TYPE_FROM,TYPE_TO,U_FFFD,WALKER_FILTER}); //# sourceMappingURL=constant.js.map diff --git a/dist/cjs/js/constant.js.map b/dist/cjs/js/constant.js.map index c52dc9d1..f4d1f8cd 100644 --- a/dist/cjs/js/constant.js.map +++ b/dist/cjs/js/constant.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/js/constant.js"], - "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const AN_PLUS_B = 'AnPlusB';\nexport const COMBINATOR = 'Combinator';\nexport const EMPTY = '__EMPTY__';\nexport const IDENTIFIER = 'Identifier';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_ATTR = 'AttributeSelector';\nexport const SELECTOR_CLASS = 'ClassSelector';\nexport const SELECTOR_ID = 'IdSelector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const SELECTOR_PSEUDO_CLASS = 'PseudoClassSelector';\nexport const SELECTOR_PSEUDO_ELEMENT = 'PseudoElementSelector';\nexport const SELECTOR_TYPE = 'TypeSelector';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const U_FFFD = '\\uFFFD';\n\n/* numeric */\nexport const BIT_01 = 1;\nexport const BIT_02 = 2;\nexport const BIT_04 = 4;\nexport const BIT_08 = 8;\nexport const BIT_16 = 0x10;\nexport const BIT_32 = 0x20;\nexport const BIT_FFFF = 0xFFFF;\nexport const BIT_HYPHEN = 0x2D;\nexport const DUO = 2;\nexport const HEX = 16;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* Node */\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\nexport const DOCUMENT_POSITION_PRECEDING = 2;\nexport const DOCUMENT_POSITION_CONTAINS = 8;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ALL = 0xffffffff;\nexport const SHOW_DOCUMENT = 0x100;\nexport const SHOW_DOCUMENT_FRAGMENT = 0x400;\nexport const SHOW_ELEMENT = 1;\nexport const WALKER_FILTER = 0x501;\n\n/* 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_CLASSES =\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\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-]*';\n// LOGICAL_KEY: excludes :has()\nexport const LOGICAL_KEY = '(?:is|not)';\nexport const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`;\nexport const COMBO_A = '\\\\s?[\\\\s>~+]\\\\s?';\nexport const COMBO_B = '\\\\s?[~+]\\\\s?';\nexport const COMPLEX_A = `${COMPOUND}(?:${COMBO_A}${COMPOUND})*`;\nexport const COMPLEX_B = `${COMPOUND}(?:${COMBO_B}${COMPOUND})*`;\nexport const NESTED_LOGICAL_A =\n `:is\\\\(\\\\s*${COMPOUND}(?:\\\\s*,\\\\s*${COMPOUND})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_B =\n `:is\\\\(\\\\s*${COMPLEX_A}(?:\\\\s*,\\\\s*${COMPLEX_A})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_C =\n `:is\\\\(\\\\s*${COMPLEX_B}(?:\\\\s*,\\\\s*${COMPLEX_B})*\\\\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_C =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_C})+)`;\nexport const COMPOUND_I =\n `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`;\nexport const COMPLEX_C = `${COMPOUND_B}(?:${COMBO_A}${COMPOUND_B})*`;\nexport const COMPLEX_D = `${COMPOUND_C}(?:${COMBO_B}${COMPOUND_C})*`;\nexport const LOGICAL_COMPLEX_A =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPLEX_C}(?:\\\\s*,\\\\s*${COMPLEX_C})*\\\\s*\\\\)`;\nexport const LOGICAL_COMPLEX_B =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPLEX_D}(?:\\\\s*,\\\\s*${COMPLEX_D})*\\\\s*\\\\)`;\nexport const LOGICAL_COMPOUND =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPOUND_A}(?:\\\\s*,\\\\s*${COMPOUND_A})*\\\\s*\\\\)`;\n\n/* regexp */\nexport const REG_ANCHOR = /^a(?:rea)?$/;\nexport const REG_CHILD_INDEXED = new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH})`);\nexport const REG_COMPLEX_A = new RegExp(`${COMBO_A}${COMPOUND_I}`, 'i');\nexport const REG_COMPLEX_B = new RegExp(`${COMBO_B}${COMPOUND_I}`, 'i');\nexport const REG_DIR = /^(?:ltr|rtl)$/;\nexport const REG_FORM = /^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;\nexport const REG_FORM_CTRL =\n /^(?:button|fieldset|input|optgroup|option|select|textarea)$/;\nexport const REG_FORM_GROUP = /^(?:fieldset|optgroup|select)$/;\nexport const REG_FORM_VALID = /^(?:button|form|input|select|textarea)$/;\nexport const REG_HEX = /^([\\da-f]{1,6}\\s?)/i;\nexport const REG_INTERACT = /^(?:details|dialog)$/;\nexport const REG_INVALID_SELECTOR = /^$|^\\s*>|,\\s*$/;\nexport const REG_LANG = new RegExp(`^(?:\\\\*-)?${ALPHA_NUM}${LANG_PART}$`, 'i');\nexport const REG_LANG_QUOTED = /(:lang\\(\\s*(\"[A-Za-z\\d\\-*]*\")\\s*\\))/;\nexport const REG_LOGICAL_COMPLEX_A =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPLEX_A})`);\nexport const REG_LOGICAL_COMPLEX_B =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPLEX_B})`);\nexport const REG_LOGICAL_COMPOUND =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPOUND})`);\nexport const REG_LOGICAL_EMPTY = /(:(is|where)\\(\\s*\\))/;\nexport const REG_LOGICAL_KEY = new RegExp(`:${LOGICAL_KEY}\\\\(`);\nexport const REG_LOGICAL_PSEUDO = /^(?:has|is|not|where)$/;\nexport const REG_SHADOW_HOST = /^host(?:-context)?$/;\nexport const REG_SHADOW_MODE = /^(?:close|open)$/;\nexport const REG_SHADOW_PSEUDO = /^part|slotted$/;\nexport const REG_TYPE_CHECK = /^(?:checkbox|radio)$/;\nexport const REG_TYPE_DATE = /^(?:date(?:time-local)?|month|time|week)$/;\nexport const REG_TYPE_RANGE =\n /(?:date(?:time-local)?|month|number|range|time|week)$/;\nexport const REG_TYPE_RESET = /^(?:button|reset)$/;\nexport const REG_TYPE_SUBMIT = /^(?:image|submit)$/;\nexport const REG_TYPE_TEXT = /^(?:email|number|password|search|tel|text|url)$/;\n"], - "mappings": "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", + "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const AN_PLUS_B = 'AnPlusB';\nexport const COMBINATOR = 'Combinator';\nexport const EMPTY = '__EMPTY__';\nexport const IDENTIFIER = 'Identifier';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_ATTR = 'AttributeSelector';\nexport const SELECTOR_CLASS = 'ClassSelector';\nexport const SELECTOR_ID = 'IdSelector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const SELECTOR_PSEUDO_CLASS = 'PseudoClassSelector';\nexport const SELECTOR_PSEUDO_ELEMENT = 'PseudoElementSelector';\nexport const SELECTOR_TYPE = 'TypeSelector';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const U_FFFD = '\\uFFFD';\n\n/* numeric */\nexport const BIT_01 = 1;\nexport const BIT_02 = 2;\nexport const BIT_04 = 4;\nexport const BIT_08 = 8;\nexport const BIT_16 = 0x10;\nexport const BIT_32 = 0x20;\nexport const BIT_FFFF = 0xFFFF;\nexport const BIT_HYPHEN = 0x2D;\nexport const DUO = 2;\nexport const HEX = 16;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* Node */\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\nexport const DOCUMENT_POSITION_PRECEDING = 2;\nexport const DOCUMENT_POSITION_CONTAINS = 8;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ALL = 0xffffffff;\nexport const SHOW_DOCUMENT = 0x100;\nexport const SHOW_DOCUMENT_FRAGMENT = 0x400;\nexport const SHOW_ELEMENT = 1;\nexport const WALKER_FILTER = 0x501;\n\n/* 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_CLASSES =\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\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-]*';\n// LOGICAL_KEY: excludes :has()\nexport const LOGICAL_KEY = '(?:is|not)';\nexport const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`;\nexport const COMBO_A = '\\\\s?[\\\\s>~+]\\\\s?';\nexport const COMBO_B = '\\\\s?[~+]\\\\s?';\nexport const COMPLEX_A = `${COMPOUND}(?:${COMBO_A}${COMPOUND})*`;\nexport const COMPLEX_B = `${COMPOUND}(?:${COMBO_B}${COMPOUND})*`;\nexport const NESTED_LOGICAL_A =\n `:is\\\\(\\\\s*${COMPOUND}(?:\\\\s*,\\\\s*${COMPOUND})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_B =\n `:is\\\\(\\\\s*${COMPLEX_A}(?:\\\\s*,\\\\s*${COMPLEX_A})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_C =\n `:is\\\\(\\\\s*${COMPLEX_B}(?:\\\\s*,\\\\s*${COMPLEX_B})*\\\\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_C =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_C})+)`;\nexport const COMPOUND_I =\n `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`;\nexport const COMPLEX_C = `${COMPOUND_B}(?:${COMBO_A}${COMPOUND_B})*`;\nexport const COMPLEX_D = `${COMPOUND_C}(?:${COMBO_B}${COMPOUND_C})*`;\nexport const LOGICAL_COMPLEX_A =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPLEX_C}(?:\\\\s*,\\\\s*${COMPLEX_C})*\\\\s*\\\\)`;\nexport const LOGICAL_COMPLEX_B =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPLEX_D}(?:\\\\s*,\\\\s*${COMPLEX_D})*\\\\s*\\\\)`;\nexport const LOGICAL_COMPOUND =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPOUND_A}(?:\\\\s*,\\\\s*${COMPOUND_A})*\\\\s*\\\\)`;\n\n/* regexp */\nexport const REG_ANCHOR = /^a(?:rea)?$/;\nexport const REG_CHILD_INDEXED = new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH})`);\nexport const REG_COMPLEX_A = new RegExp(`${COMBO_A}${COMPOUND_I}`, 'i');\nexport const REG_COMPLEX_B = new RegExp(`${COMBO_B}${COMPOUND_I}`, 'i');\nexport const REG_DIR = /^(?:ltr|rtl)$/;\nexport const REG_FORM = /^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;\nexport const REG_FORM_CTRL =\n /^(?:button|fieldset|input|optgroup|option|select|textarea)$/;\nexport const REG_FORM_GROUP = /^(?:fieldset|optgroup|select)$/;\nexport const REG_FORM_VALID = /^(?:button|form|input|select|textarea)$/;\nexport const REG_HEX = /^([\\da-f]{1,6}\\s?)/i;\nexport const REG_INTERACT = /^(?:details|dialog)$/;\nexport const REG_INVALID_SELECTOR = /^$|^\\s*>|,\\s*$/;\nexport const REG_LANG = new RegExp(`^(?:\\\\*-)?${ALPHA_NUM}${LANG_PART}$`, 'i');\nexport const REG_LANG_QUOTED = /(:lang\\(\\s*(\"[A-Za-z\\d\\-*]*\")\\s*\\))/;\nexport const REG_LOGICAL_COMPLEX_A =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPLEX_A})`);\nexport const REG_LOGICAL_COMPLEX_B =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPLEX_B})`);\nexport const REG_LOGICAL_COMPOUND =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPOUND})`);\nexport const REG_LOGICAL_EMPTY = /(:(is|where)\\(\\s*\\))/;\nexport const REG_LOGICAL_KEY = new RegExp(`:${LOGICAL_KEY}\\\\(`);\nexport const REG_LOGICAL_PSEUDO = /^(?:has|is|not|where)$/;\nexport const REG_SHADOW_HOST = /^host(?:-context)?$/;\nexport const REG_SHADOW_MODE = /^(?:close|open)$/;\nexport const REG_SHADOW_PSEUDO = /^part|slotted$/;\nexport const REG_TYPE_CHECK = /^(?:checkbox|radio)$/;\nexport const REG_TYPE_DATE = /^(?:date(?:time-local)?|month|time|week)$/;\nexport const REG_TYPE_RANGE =\n /(?:date(?:time-local)?|month|number|range|time|week)$/;\nexport const REG_TYPE_RESET = /^(?:button|reset)$/;\nexport const REG_TYPE_SUBMIT = /^(?:image|submit)$/;\nexport const REG_TYPE_TEXT = /^(?:email|number|password|search|tel|text|url)$/;\n"], + "mappings": "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", "names": ["constant_exports", "__export", "ALPHA_NUM", "ANB", "AN_PLUS_B", "BIT_01", "BIT_02", "BIT_04", "BIT_08", "BIT_16", "BIT_32", "BIT_FFFF", "BIT_HYPHEN", "CHILD_IDX", "COMBINATOR", "COMBO_A", "COMBO_B", "COMPLEX_A", "COMPLEX_B", "COMPLEX_C", "COMPLEX_D", "COMPOUND", "COMPOUND_A", "COMPOUND_B", "COMPOUND_C", "COMPOUND_I", "DIGIT", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_PRECEDING", "DUO", "ELEMENT_NODE", "EMPTY", "HEX", "IDENTIFIER", "LANG_PART", "LOGICAL_COMPLEX_A", "LOGICAL_COMPLEX_B", "LOGICAL_COMPOUND", "LOGICAL_KEY", "NESTED_LOGICAL_A", "NESTED_LOGICAL_B", "NESTED_LOGICAL_C", "NOT_SUPPORTED_ERR", "NTH", "N_TH", "PSEUDO_CLASSES", "RAW", "REG_ANCHOR", "REG_CHILD_INDEXED", "REG_COMPLEX_A", "REG_COMPLEX_B", "REG_DIR", "REG_FORM", "REG_FORM_CTRL", "REG_FORM_GROUP", "REG_FORM_VALID", "REG_HEX", "REG_INTERACT", "REG_INVALID_SELECTOR", "REG_LANG", "REG_LANG_QUOTED", "REG_LOGICAL_COMPLEX_A", "REG_LOGICAL_COMPLEX_B", "REG_LOGICAL_COMPOUND", "REG_LOGICAL_EMPTY", "REG_LOGICAL_KEY", "REG_LOGICAL_PSEUDO", "REG_SHADOW_HOST", "REG_SHADOW_MODE", "REG_SHADOW_PSEUDO", "REG_TYPE_CHECK", "REG_TYPE_DATE", "REG_TYPE_RANGE", "REG_TYPE_RESET", "REG_TYPE_SUBMIT", "REG_TYPE_TEXT", "SELECTOR", "SELECTOR_ATTR", "SELECTOR_CLASS", "SELECTOR_ID", "SELECTOR_LIST", "SELECTOR_PSEUDO_CLASS", "SELECTOR_PSEUDO_ELEMENT", "SELECTOR_TYPE", "SHOW_ALL", "SHOW_DOCUMENT", "SHOW_DOCUMENT_FRAGMENT", "SHOW_ELEMENT", "STRING", "SUB_TYPE", "SYNTAX_ERR", "TAG_TYPE", "TAG_TYPE_I", "TEXT_NODE", "TYPE_FROM", "TYPE_TO", "U_FFFD", "WALKER_FILTER", "__toCommonJS"] } diff --git a/dist/cjs/js/dom-util.js b/dist/cjs/js/dom-util.js index a661c39c..bc25946e 100644 --- a/dist/cjs/js/dom-util.js +++ b/dist/cjs/js/dom-util.js @@ -1,2 +1,2 @@ -var O=Object.create;var p=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var I=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},b=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of w(t))!_.call(e,o)&&o!==r&&p(e,o,{get:()=>t[o],enumerable:!(s=k(t,o))||s.enumerable});return e};var R=(e,t,r)=>(r=e!=null?O(C(e)):{},b(t||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>b(p({},"__esModule",{value:!0}),e);var S={};I(S,{getDirectionality:()=>m,getNamespaceURI:()=>h,getSlottedTextContent:()=>f,isContentEditable:()=>g,isInShadowTree:()=>d,isNamespaceDeclared:()=>U,isPreceding:()=>D,resolveContent:()=>M,sortNodes:()=>P,verifyNode:()=>x});module.exports=v(S);var E=R(require("bidi-js"),1),i=require("./constant.js");const x=e=>{if(!e||!e.nodeType||!e.nodeName){const r=`Unexpected type ${Object.prototype.toString.call(e).slice(i.TYPE_FROM,i.TYPE_TO)}`;throw new TypeError(r)}else if(!(e.nodeType===i.DOCUMENT_NODE||e.nodeType===i.DOCUMENT_FRAGMENT_NODE||e.nodeType===i.ELEMENT_NODE)){const t=`Unexpected node ${e.nodeName}`;throw new TypeError(t)}return e},M=e=>{e=x(e);let t,r;switch(e.nodeType){case i.DOCUMENT_NODE:{t=e,r=e;break}case i.DOCUMENT_FRAGMENT_NODE:{t=e.ownerDocument,r=e;break}case i.ELEMENT_NODE:default:{t=e.ownerDocument;let o=e;for(;o&&o.parentNode;)o=o.parentNode;r=o;break}}const s=t.createTreeWalker(r,i.WALKER_FILTER);return[t,r,s]},d=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE||e.nodeType===i.DOCUMENT_FRAGMENT_NODE){let r=e;for(;r;){const{host:s,mode:o,nodeType:a,parentNode:l}=r;if(s&&o&&a===i.DOCUMENT_FRAGMENT_NODE&&i.REG_SHADOW_MODE.test(o)){t=!0;break}r=l}}return!!t},f=(e={})=>{let t;if(e.localName==="slot"&&d(e)){const r=e.assignedNodes();if(r.length){for(const s of r)if(t=s.textContent.trim(),t)break}else t=e.textContent.trim()}return t??null},m=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE){const{dir:r,localName:s,parentNode:o}=e,{getEmbeddingLevels:a}=(0,E.default)();if(i.REG_DIR.test(r))t=r;else if(r==="auto"){let l;switch(s){case"input":{!e.type||/^(?:button|email|hidden|password|reset|search|submit|tel|text|url)$/.test(e.type)?l=e.value:/^(?:checkbox|color|date|image|number|radio|range|time)$/.test(e.type)&&(t="ltr");break}case"slot":{l=f(e);break}case"textarea":{l=e.value;break}default:{const n=[].slice.call(e.childNodes);for(const c of n){const{dir:u,localName:T,nodeType:N,textContent:y}=c;if(N===i.TEXT_NODE?l=y.trim():N===i.ELEMENT_NODE&&!/^(?:bdi|script|style|textarea)$/.test(T)&&(!u||!i.REG_DIR.test(u))&&(T==="slot"?l=f(c):l=y.trim()),l)break}}}if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}if(!t)if(o){const{nodeType:n}=o;n===i.ELEMENT_NODE?t=m(o):(n===i.DOCUMENT_NODE||n===i.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}else t="ltr"}else if(s==="bdi"){const l=e.textContent.trim();if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}t||o||(t="ltr")}else if(s==="input"&&e.type==="tel")t="ltr";else if(o){if(s==="slot"){const l=f(e);if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}}if(!t){const{nodeType:l}=o;l===i.ELEMENT_NODE?t=m(o):(l===i.DOCUMENT_NODE||l===i.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}}else t="ltr"}return t??null},g=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE){if(typeof e.isContentEditable=="boolean")t=e.isContentEditable;else if(e.ownerDocument.designMode==="on")t=!0;else if(e.hasAttribute("contenteditable")){const r=e.getAttribute("contenteditable");if(r===""||/^(?:plaintext-only|true)$/.test(r))t=!0;else if(r==="inherit"){let s=e.parentNode;for(;s;){if(g(s)){t=!0;break}s=s.parentNode}}}}return!!t},h=(e,t)=>{let r;if(e&&typeof e=="string"&&t?.nodeType===i.ELEMENT_NODE){const{attributes:s}=t;for(const o of s){const{name:a,namespaceURI:l,prefix:n,value:c}=o;if(a===`xmlns:${e}`){r=c;break}else if(n===e){r=l;break}}}return r??null},U=(e="",t={})=>{let r;if(e&&typeof e=="string"&&t.nodeType===i.ELEMENT_NODE&&(r=t.lookupNamespaceURI(e),!r)){const s=t.ownerDocument.documentElement;let o=t;for(;o&&(r=h(e,o),!(r||o===s));)o=o.parentNode}return!!r},D=(e={},t={})=>{let r;if(e.nodeType===i.ELEMENT_NODE&&t.nodeType===i.ELEMENT_NODE){const s=t.compareDocumentPosition(e);r=s&i.DOCUMENT_POSITION_PRECEDING||s&i.DOCUMENT_POSITION_CONTAINS}return!!r},P=(e=[])=>{const t=[...e];return t.length>1&&t.sort((r,s)=>{let o;return D(s,r)?o=1:o=-1,o}),t};0&&(module.exports={getDirectionality,getNamespaceURI,getSlottedTextContent,isContentEditable,isInShadowTree,isNamespaceDeclared,isPreceding,resolveContent,sortNodes,verifyNode}); +var C=Object.create;var f=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty;var I=(e,t)=>{for(var r in t)f(e,r,{get:t[r],enumerable:!0})},x=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of k(t))!d.call(e,l)&&l!==r&&f(e,l,{get:()=>t[l],enumerable:!(i=_(t,l))||i.enumerable});return e};var R=(e,t,r)=>(r=e!=null?C(w(e)):{},x(t||!e||!e.__esModule?f(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>x(f({},"__esModule",{value:!0}),e);var $={};I($,{getDirectionality:()=>u,getNamespaceURI:()=>D,getSlottedTextContent:()=>T,isContentEditable:()=>g,isInShadowTree:()=>h,isNamespaceDeclared:()=>P,isPreceding:()=>O,resolveContent:()=>M,sortNodes:()=>S,traverseNode:()=>U,verifyNode:()=>n});module.exports=v($);var E=R(require("bidi-js"),1),s=require("./constant.js");const n=e=>{if(!e||!e.nodeType||!e.nodeName){const r=`Unexpected type ${Object.prototype.toString.call(e).slice(s.TYPE_FROM,s.TYPE_TO)}`;throw new TypeError(r)}else if(!(e.nodeType===s.DOCUMENT_NODE||e.nodeType===s.DOCUMENT_FRAGMENT_NODE||e.nodeType===s.ELEMENT_NODE)){const t=`Unexpected node ${e.nodeName}`;throw new TypeError(t)}return e},M=e=>{e=n(e);let t,r;switch(e.nodeType){case s.DOCUMENT_NODE:{t=e,r=e;break}case s.DOCUMENT_FRAGMENT_NODE:{t=e.ownerDocument,r=e;break}case s.ELEMENT_NODE:default:{t=e.ownerDocument;let l=e;for(;l&&l.parentNode;)l=l.parentNode;r=l;break}}const i=t.createTreeWalker(r,s.WALKER_FILTER);return[t,r,i]},U=(e,t)=>{(!e||!e.nodeType)&&n(e);let r;if(t?.currentNode){let i=t.currentNode;if(i===e)r=i;else if(i.contains(e))for(i=t.nextNode();i;){if(i===e){r=i;break}i=t.nextNode()}else{if(i!==t.root)for(;i&&!(i===t.root||i===e);)i=t.parentNode();if(e.nodeType===s.ELEMENT_NODE)for(;i;){if(i===e){r=i;break}i=t.nextNode()}else r=i}}return r??null},h=e=>{(!e||!e.type)&&n(e);let t;if(e.nodeType===s.ELEMENT_NODE||e.nodeType===s.DOCUMENT_FRAGMENT_NODE){let r=e;for(;r;){const{host:i,mode:l,nodeType:p,parentNode:o}=r;if(i&&l&&p===s.DOCUMENT_FRAGMENT_NODE&&s.REG_SHADOW_MODE.test(l)){t=!0;break}r=o}}return!!t},T=e=>{(!e||!e.nodeType)&&n(e);let t;if(e.localName==="slot"&&h(e)){const r=e.assignedNodes();if(r.length){for(const i of r)if(t=i.textContent.trim(),t)break}else t=e.textContent.trim()}return t??null},u=e=>{(!e||!e.nodeType)&&n(e);let t;if(e.nodeType===s.ELEMENT_NODE){const{dir:r,localName:i,parentNode:l}=e,{getEmbeddingLevels:p}=(0,E.default)();if(s.REG_DIR.test(r))t=r;else if(r==="auto"){let o;switch(i){case"input":{!e.type||/^(?:button|email|hidden|password|reset|search|submit|tel|text|url)$/.test(e.type)?o=e.value:/^(?:checkbox|color|date|image|number|radio|range|time)$/.test(e.type)&&(t="ltr");break}case"slot":{o=T(e);break}case"textarea":{o=e.value;break}default:{const a=[].slice.call(e.childNodes);for(const c of a){const{dir:y,localName:N,nodeType:m,textContent:b}=c;if(m===s.TEXT_NODE?o=b.trim():m===s.ELEMENT_NODE&&!/^(?:bdi|script|style|textarea)$/.test(N)&&(!y||!s.REG_DIR.test(y))&&(N==="slot"?o=T(c):o=b.trim()),o)break}}}if(o){const{paragraphs:[{level:a}]}=p(o);a%2===1?t="rtl":t="ltr"}if(!t)if(l){const{nodeType:a}=l;a===s.ELEMENT_NODE?t=u(l):(a===s.DOCUMENT_NODE||a===s.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}else t="ltr"}else if(i==="bdi"){const o=e.textContent.trim();if(o){const{paragraphs:[{level:a}]}=p(o);a%2===1?t="rtl":t="ltr"}t||l||(t="ltr")}else if(i==="input"&&e.type==="tel")t="ltr";else if(l){if(i==="slot"){const o=T(e);if(o){const{paragraphs:[{level:a}]}=p(o);a%2===1?t="rtl":t="ltr"}}if(!t){const{nodeType:o}=l;o===s.ELEMENT_NODE?t=u(l):(o===s.DOCUMENT_NODE||o===s.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}}else t="ltr"}return t??null},g=e=>{(!e||!e.nodeType)&&n(e);let t;if(e.nodeType===s.ELEMENT_NODE){if(typeof e.isContentEditable=="boolean")t=e.isContentEditable;else if(e.ownerDocument.designMode==="on")t=!0;else if(e.hasAttribute("contenteditable")){const r=e.getAttribute("contenteditable");if(r===""||/^(?:plaintext-only|true)$/.test(r))t=!0;else if(r==="inherit"){let i=e.parentNode;for(;i;){if(g(i)){t=!0;break}i=i.parentNode}}}}return!!t},D=(e,t)=>{(!t||!t.nodeType)&&n(t);let r;if(e&&typeof e=="string"&&t.nodeType===s.ELEMENT_NODE){const{attributes:i}=t;for(const l of i){const{name:p,namespaceURI:o,prefix:a,value:c}=l;if(p===`xmlns:${e}`){r=c;break}else if(a===e){r=o;break}}}return r??null},P=(e="",t={})=>{let r;if(e&&typeof e=="string"&&t.nodeType===s.ELEMENT_NODE&&(r=t.lookupNamespaceURI(e),!r)){const i=t.ownerDocument.documentElement;let l=t;for(;l&&(r=D(e,l),!(r||l===i));)l=l.parentNode}return!!r},O=(e,t)=>{!e||!e.nodeType?n(e):(!t||!t.nodeType)&&n(t);let r;if(e.nodeType===s.ELEMENT_NODE&&t.nodeType===s.ELEMENT_NODE){const i=t.compareDocumentPosition(e);r=i&s.DOCUMENT_POSITION_PRECEDING||i&s.DOCUMENT_POSITION_CONTAINS}return!!r},S=(e=[])=>{const t=[...e];return t.length>1&&t.sort((r,i)=>{let l;return O(i,r)?l=1:l=-1,l}),t};0&&(module.exports={getDirectionality,getNamespaceURI,getSlottedTextContent,isContentEditable,isInShadowTree,isNamespaceDeclared,isPreceding,resolveContent,sortNodes,traverseNode,verifyNode}); //# sourceMappingURL=dom-util.js.map diff --git a/dist/cjs/js/dom-util.js.map b/dist/cjs/js/dom-util.js.map index 34ad53e1..0b1d045f 100644 --- a/dist/cjs/js/dom-util.js.map +++ b/dist/cjs/js/dom-util.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/js/dom-util.js"], - "sourcesContent": ["/**\n * dom-util.js\n */\n\n/* import */\nimport bidiFactory from 'bidi-js';\n\n/* constants */\nimport {\n DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINS,\n DOCUMENT_POSITION_PRECEDING, ELEMENT_NODE, REG_DIR, REG_SHADOW_MODE,\n TEXT_NODE, TYPE_FROM, TYPE_TO, WALKER_FILTER\n} from './constant.js';\n\n/**\n * verify node\n * @param {*} node - node\n * @throws\n * @returns {object} - Document, DocumentFragment, Element node\n */\nexport const verifyNode = node => {\n if (!node || !node.nodeType || !node.nodeName) {\n const type = Object.prototype.toString.call(node).slice(TYPE_FROM, TYPE_TO);\n const msg = `Unexpected type ${type}`;\n throw new TypeError(msg);\n } else if (!(node.nodeType === DOCUMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE ||\n node.nodeType === ELEMENT_NODE)) {\n const msg = `Unexpected node ${node.nodeName}`;\n throw new TypeError(msg);\n }\n return node;\n};\n\n/**\n * resolve content document, root node and tree walker\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {Array.<object>} - array of document, root node, tree walker\n */\nexport const resolveContent = node => {\n node = verifyNode(node);\n let document;\n let root;\n switch (node.nodeType) {\n case DOCUMENT_NODE: {\n document = node;\n root = node;\n break;\n }\n case DOCUMENT_FRAGMENT_NODE: {\n document = node.ownerDocument;\n root = node;\n break;\n }\n case ELEMENT_NODE:\n default: {\n document = node.ownerDocument;\n let parent = node;\n while (parent) {\n if (parent.parentNode) {\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n root = parent;\n break;\n }\n }\n const tree = document.createTreeWalker(root, WALKER_FILTER);\n return [\n document,\n root,\n tree\n ];\n};\n\n/**\n * is in shadow tree\n * @param {object} node - node\n * @returns {boolean} - result;\n */\nexport const isInShadowTree = (node = {}) => {\n let bool;\n if (node.nodeType === ELEMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n let refNode = node;\n while (refNode) {\n const { host, mode, nodeType, parentNode } = refNode;\n if (host && mode && nodeType === DOCUMENT_FRAGMENT_NODE &&\n REG_SHADOW_MODE.test(mode)) {\n bool = true;\n break;\n }\n refNode = parentNode;\n }\n }\n return !!bool;\n};\n\n/**\n * get slotted text content\n * @param {object} node - Element node\n * @returns {?string} - text content\n */\nexport const getSlottedTextContent = (node = {}) => {\n let res;\n if (node.localName === 'slot' && isInShadowTree(node)) {\n const nodes = node.assignedNodes();\n if (nodes.length) {\n for (const item of nodes) {\n res = item.textContent.trim();\n if (res) {\n break;\n }\n }\n } else {\n res = node.textContent.trim();\n }\n }\n return res ?? null;\n};\n\n/**\n * get directionality of node\n * @see https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute\n * @param {object} node - Element node\n * @returns {?string} - 'ltr' / 'rtl'\n */\nexport const getDirectionality = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n const { dir: nodeDir, localName, parentNode } = node;\n const { getEmbeddingLevels } = bidiFactory();\n if (REG_DIR.test(nodeDir)) {\n res = nodeDir;\n } else if (nodeDir === 'auto') {\n let text;\n switch (localName) {\n case 'input': {\n if (!node.type || /^(?:button|email|hidden|password|reset|search|submit|tel|text|url)$/.test(node.type)) {\n text = node.value;\n } else if (/^(?:checkbox|color|date|image|number|radio|range|time)$/.test(node.type)) {\n res = 'ltr';\n }\n break;\n }\n case 'slot': {\n text = getSlottedTextContent(node);\n break;\n }\n case 'textarea': {\n text = node.value;\n break;\n }\n default: {\n const items = [].slice.call(node.childNodes);\n for (const item of items) {\n const {\n dir: itemDir, localName: itemLocalName, nodeType: itemNodeType,\n textContent: itemTextContent\n } = item;\n if (itemNodeType === TEXT_NODE) {\n text = itemTextContent.trim();\n } else if (itemNodeType === ELEMENT_NODE) {\n if (!/^(?:bdi|script|style|textarea)$/.test(itemLocalName) &&\n (!itemDir || !REG_DIR.test(itemDir))) {\n if (itemLocalName === 'slot') {\n text = getSlottedTextContent(item);\n } else {\n text = itemTextContent.trim();\n }\n }\n }\n if (text) {\n break;\n }\n }\n }\n }\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!res) {\n if (parentNode) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n } else {\n res = 'ltr';\n }\n }\n } else if (localName === 'bdi') {\n const text = node.textContent.trim();\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!(res || parentNode)) {\n res = 'ltr';\n }\n } else if (localName === 'input' && node.type === 'tel') {\n res = 'ltr';\n } else if (parentNode) {\n if (localName === 'slot') {\n const text = getSlottedTextContent(node);\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n }\n if (!res) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n }\n } else {\n res = 'ltr';\n }\n }\n return res ?? null;\n};\n\n/**\n * is content editable\n * NOTE: not implemented in jsdom https://github.com/jsdom/jsdom/issues/1670\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isContentEditable = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n if (typeof node.isContentEditable === 'boolean') {\n res = node.isContentEditable;\n } else if (node.ownerDocument.designMode === 'on') {\n res = true;\n } else if (node.hasAttribute('contenteditable')) {\n const attr = node.getAttribute('contenteditable');\n if (attr === '' || /^(?:plaintext-only|true)$/.test(attr)) {\n res = true;\n } else if (attr === 'inherit') {\n let parent = node.parentNode;\n while (parent) {\n if (isContentEditable(parent)) {\n res = true;\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n }\n return !!res;\n};\n\n/**\n * get namespace URI\n * @param {string} ns - namespace prefix\n * @param {Array} node - Element node\n * @returns {?string} - namespace URI\n */\nexport const getNamespaceURI = (ns, node) => {\n let res;\n if (ns && typeof ns === 'string' && node?.nodeType === ELEMENT_NODE) {\n const { attributes } = node;\n for (const attr of attributes) {\n const { name, namespaceURI, prefix, value } = attr;\n if (name === `xmlns:${ns}`) {\n res = value;\n break;\n } else if (prefix === ns) {\n res = namespaceURI;\n break;\n }\n }\n }\n return res ?? null;\n};\n\n/**\n * is namespace declared\n * @param {string} ns - namespace\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isNamespaceDeclared = (ns = '', node = {}) => {\n let res;\n if (ns && typeof ns === 'string' && node.nodeType === ELEMENT_NODE) {\n res = node.lookupNamespaceURI(ns);\n if (!res) {\n const root = node.ownerDocument.documentElement;\n let parent = node;\n while (parent) {\n res = getNamespaceURI(ns, parent);\n if (res || parent === root) {\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n return !!res;\n};\n\n/**\n * is preceding - nodeA precedes and/or contains nodeB\n * @param {object} nodeA - Element node\n * @param {object} nodeB - Element node\n * @returns {boolean} - result\n */\nexport const isPreceding = (nodeA = {}, nodeB = {}) => {\n let res;\n if (nodeA.nodeType === ELEMENT_NODE && nodeB.nodeType === ELEMENT_NODE) {\n const posBit = nodeB.compareDocumentPosition(nodeA);\n res = posBit & DOCUMENT_POSITION_PRECEDING ||\n posBit & DOCUMENT_POSITION_CONTAINS;\n }\n return !!res;\n};\n\n/**\n * sort nodes\n * @param {Array.<object>|Set.<object>} nodes - collection of nodes\n * @returns {Array.<object|undefined>} - collection of sorted nodes\n */\nexport const sortNodes = (nodes = []) => {\n const arr = [...nodes];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n if (isPreceding(b, a)) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n};\n"], - "mappings": "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", - "names": ["dom_util_exports", "__export", "getDirectionality", "getNamespaceURI", "getSlottedTextContent", "isContentEditable", "isInShadowTree", "isNamespaceDeclared", "isPreceding", "resolveContent", "sortNodes", "verifyNode", "__toCommonJS", "import_bidi_js", "import_constant", "node", "msg", "document", "root", "parent", "tree", "bool", "refNode", "host", "mode", "nodeType", "parentNode", "res", "nodes", "item", "nodeDir", "localName", "getEmbeddingLevels", "bidiFactory", "text", "items", "itemDir", "itemLocalName", "itemNodeType", "itemTextContent", "level", "parentNodeType", "attr", "ns", "attributes", "name", "namespaceURI", "prefix", "value", "nodeA", "nodeB", "posBit", "arr", "a", "b"] + "sourcesContent": ["/**\n * dom-util.js\n */\n\n/* import */\nimport bidiFactory from 'bidi-js';\n\n/* constants */\nimport {\n DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINS,\n DOCUMENT_POSITION_PRECEDING, ELEMENT_NODE, REG_DIR, REG_SHADOW_MODE,\n TEXT_NODE, TYPE_FROM, TYPE_TO, WALKER_FILTER\n} from './constant.js';\n\n/**\n * verify node\n * @param {*} node - node\n * @throws\n * @returns {object} - Document, DocumentFragment, Element node\n */\nexport const verifyNode = node => {\n if (!node || !node.nodeType || !node.nodeName) {\n const type = Object.prototype.toString.call(node).slice(TYPE_FROM, TYPE_TO);\n const msg = `Unexpected type ${type}`;\n throw new TypeError(msg);\n } else if (!(node.nodeType === DOCUMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE ||\n node.nodeType === ELEMENT_NODE)) {\n const msg = `Unexpected node ${node.nodeName}`;\n throw new TypeError(msg);\n }\n return node;\n};\n\n/**\n * resolve content document, root node and tree walker\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {Array.<object>} - array of document, root node, tree walker\n */\nexport const resolveContent = node => {\n node = verifyNode(node);\n let document;\n let root;\n switch (node.nodeType) {\n case DOCUMENT_NODE: {\n document = node;\n root = node;\n break;\n }\n case DOCUMENT_FRAGMENT_NODE: {\n document = node.ownerDocument;\n root = node;\n break;\n }\n case ELEMENT_NODE:\n default: {\n document = node.ownerDocument;\n let parent = node;\n while (parent) {\n if (parent.parentNode) {\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n root = parent;\n break;\n }\n }\n const walker = document.createTreeWalker(root, WALKER_FILTER);\n return [\n document,\n root,\n walker\n ];\n};\n\n/**\n * traverse node tree\n * @private\n * @param {object} node - node\n * @param {object} walker - tree walker\n * @returns {?object} - current node\n */\nexport const traverseNode = (node, walker) => {\n if (!node || !node.nodeType) {\n // throws\n verifyNode(node);\n }\n let current;\n if (walker?.currentNode) {\n let refNode = walker.currentNode;\n if (refNode === node) {\n current = refNode;\n } else if (refNode.contains(node)) {\n refNode = walker.nextNode();\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n if (refNode !== walker.root) {\n while (refNode) {\n if (refNode === walker.root || refNode === node) {\n break;\n }\n refNode = walker.parentNode();\n }\n }\n if (node.nodeType === ELEMENT_NODE) {\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n current = refNode;\n }\n }\n }\n return current ?? null;\n};\n\n/**\n * is in shadow tree\n * @param {object} node - node\n * @returns {boolean} - result;\n */\nexport const isInShadowTree = node => {\n if (!node || !node.type) {\n // throws\n verifyNode(node);\n }\n let bool;\n if (node.nodeType === ELEMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n let refNode = node;\n while (refNode) {\n const { host, mode, nodeType, parentNode } = refNode;\n if (host && mode && nodeType === DOCUMENT_FRAGMENT_NODE &&\n REG_SHADOW_MODE.test(mode)) {\n bool = true;\n break;\n }\n refNode = parentNode;\n }\n }\n return !!bool;\n};\n\n/**\n * get slotted text content\n * @param {object} node - Element node\n * @returns {?string} - text content\n */\nexport const getSlottedTextContent = node => {\n if (!node || !node.nodeType) {\n // throws\n verifyNode(node);\n }\n let res;\n if (node.localName === 'slot' && isInShadowTree(node)) {\n const nodes = node.assignedNodes();\n if (nodes.length) {\n for (const item of nodes) {\n res = item.textContent.trim();\n if (res) {\n break;\n }\n }\n } else {\n res = node.textContent.trim();\n }\n }\n return res ?? null;\n};\n\n/**\n * get directionality of node\n * @see https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute\n * @param {object} node - Element node\n * @returns {?string} - 'ltr' / 'rtl'\n */\nexport const getDirectionality = node => {\n if (!node || !node.nodeType) {\n // throws\n verifyNode(node);\n }\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n const { dir: nodeDir, localName, parentNode } = node;\n const { getEmbeddingLevels } = bidiFactory();\n if (REG_DIR.test(nodeDir)) {\n res = nodeDir;\n } else if (nodeDir === 'auto') {\n let text;\n switch (localName) {\n case 'input': {\n if (!node.type || /^(?:button|email|hidden|password|reset|search|submit|tel|text|url)$/.test(node.type)) {\n text = node.value;\n } else if (/^(?:checkbox|color|date|image|number|radio|range|time)$/.test(node.type)) {\n res = 'ltr';\n }\n break;\n }\n case 'slot': {\n text = getSlottedTextContent(node);\n break;\n }\n case 'textarea': {\n text = node.value;\n break;\n }\n default: {\n const items = [].slice.call(node.childNodes);\n for (const item of items) {\n const {\n dir: itemDir, localName: itemLocalName, nodeType: itemNodeType,\n textContent: itemTextContent\n } = item;\n if (itemNodeType === TEXT_NODE) {\n text = itemTextContent.trim();\n } else if (itemNodeType === ELEMENT_NODE) {\n if (!/^(?:bdi|script|style|textarea)$/.test(itemLocalName) &&\n (!itemDir || !REG_DIR.test(itemDir))) {\n if (itemLocalName === 'slot') {\n text = getSlottedTextContent(item);\n } else {\n text = itemTextContent.trim();\n }\n }\n }\n if (text) {\n break;\n }\n }\n }\n }\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!res) {\n if (parentNode) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n } else {\n res = 'ltr';\n }\n }\n } else if (localName === 'bdi') {\n const text = node.textContent.trim();\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!(res || parentNode)) {\n res = 'ltr';\n }\n } else if (localName === 'input' && node.type === 'tel') {\n res = 'ltr';\n } else if (parentNode) {\n if (localName === 'slot') {\n const text = getSlottedTextContent(node);\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n }\n if (!res) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n }\n } else {\n res = 'ltr';\n }\n }\n return res ?? null;\n};\n\n/**\n * is content editable\n * NOTE: not implemented in jsdom https://github.com/jsdom/jsdom/issues/1670\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isContentEditable = node => {\n if (!node || !node.nodeType) {\n // throws\n verifyNode(node);\n }\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n if (typeof node.isContentEditable === 'boolean') {\n res = node.isContentEditable;\n } else if (node.ownerDocument.designMode === 'on') {\n res = true;\n } else if (node.hasAttribute('contenteditable')) {\n const attr = node.getAttribute('contenteditable');\n if (attr === '' || /^(?:plaintext-only|true)$/.test(attr)) {\n res = true;\n } else if (attr === 'inherit') {\n let parent = node.parentNode;\n while (parent) {\n if (isContentEditable(parent)) {\n res = true;\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n }\n return !!res;\n};\n\n/**\n * get namespace URI\n * @param {string} ns - namespace prefix\n * @param {Array} node - Element node\n * @returns {?string} - namespace URI\n */\nexport const getNamespaceURI = (ns, node) => {\n if (!node || !node.nodeType) {\n // throws\n verifyNode(node);\n }\n let res;\n if (ns && typeof ns === 'string' && node.nodeType === ELEMENT_NODE) {\n const { attributes } = node;\n for (const attr of attributes) {\n const { name, namespaceURI, prefix, value } = attr;\n if (name === `xmlns:${ns}`) {\n res = value;\n break;\n } else if (prefix === ns) {\n res = namespaceURI;\n break;\n }\n }\n }\n return res ?? null;\n};\n\n/**\n * is namespace declared\n * @param {string} ns - namespace\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isNamespaceDeclared = (ns = '', node = {}) => {\n let res;\n if (ns && typeof ns === 'string' && node.nodeType === ELEMENT_NODE) {\n res = node.lookupNamespaceURI(ns);\n if (!res) {\n const root = node.ownerDocument.documentElement;\n let parent = node;\n while (parent) {\n res = getNamespaceURI(ns, parent);\n if (res || parent === root) {\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n return !!res;\n};\n\n/**\n * is preceding - nodeA precedes and/or contains nodeB\n * @param {object} nodeA - Element node\n * @param {object} nodeB - Element node\n * @returns {boolean} - result\n */\nexport const isPreceding = (nodeA, nodeB) => {\n if (!nodeA || !nodeA.nodeType) {\n // throws\n verifyNode(nodeA);\n } else if (!nodeB || !nodeB.nodeType) {\n // throws\n verifyNode(nodeB);\n }\n let res;\n if (nodeA.nodeType === ELEMENT_NODE && nodeB.nodeType === ELEMENT_NODE) {\n const posBit = nodeB.compareDocumentPosition(nodeA);\n res = posBit & DOCUMENT_POSITION_PRECEDING ||\n posBit & DOCUMENT_POSITION_CONTAINS;\n }\n return !!res;\n};\n\n/**\n * sort nodes\n * @param {Array.<object>|Set.<object>} nodes - collection of nodes\n * @returns {Array.<object|undefined>} - collection of sorted nodes\n */\nexport const sortNodes = (nodes = []) => {\n const arr = [...nodes];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n if (isPreceding(b, a)) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n};\n"], + "mappings": "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", + "names": ["dom_util_exports", "__export", "getDirectionality", "getNamespaceURI", "getSlottedTextContent", "isContentEditable", "isInShadowTree", "isNamespaceDeclared", "isPreceding", "resolveContent", "sortNodes", "traverseNode", "verifyNode", "__toCommonJS", "import_bidi_js", "import_constant", "node", "msg", "document", "root", "parent", "walker", "current", "refNode", "bool", "host", "mode", "nodeType", "parentNode", "res", "nodes", "item", "nodeDir", "localName", "getEmbeddingLevels", "bidiFactory", "text", "items", "itemDir", "itemLocalName", "itemNodeType", "itemTextContent", "level", "parentNodeType", "attr", "ns", "attributes", "name", "namespaceURI", "prefix", "value", "nodeA", "nodeB", "posBit", "arr", "a", "b"] } diff --git a/dist/cjs/js/finder.js b/dist/cjs/js/finder.js index ca3febe6..c8012d05 100644 --- a/dist/cjs/js/finder.js +++ b/dist/cjs/js/finder.js @@ -1,2 +1,2 @@ -var H=Object.create;var P=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var Y=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var V=(y,l)=>{for(var e in l)P(y,e,{get:l[e],enumerable:!0})},I=(y,l,e,o)=>{if(l&&typeof l=="object"||typeof l=="function")for(let r of j(l))!q.call(y,r)&&r!==e&&P(y,r,{get:()=>l[r],enumerable:!(o=B(l,r))||o.enumerable});return y};var U=(y,l,e)=>(e=y!=null?H(Y(y)):{},I(l||!y||!y.__esModule?P(e,"default",{value:y,enumerable:!0}):e,y)),X=y=>I(P({},"__esModule",{value:!0}),y);var Q={};V(Q,{Finder:()=>K});module.exports=X(Q);var M=U(require("is-potential-custom-element-name"),1),G=U(require("@asamuzakjp/nwsapi"),1),v=require("./dom-util.js"),O=require("./matcher.js"),k=require("./parser.js"),n=require("./constant.js");const x="next",S="prev",L="all",g="first",C="lineal",R="self";class K{#l;#r;#s;#p;#c;#b;#e;#h;#w;#o;#f;#_;#t;#d;#u;#n;#m;#i;#a;constructor(l,e){this.#a=l,this.#c=e??l.document,this.#r=new WeakMap,this.#_=new WeakMap,this._initNwsapi()}_onError(l){if(!this.#w)if(l instanceof DOMException||l instanceof this.#a.DOMException)if(l.name===n.NOT_SUPPORTED_ERR)this.#i&&console.warn(l.message);else throw new this.#a.DOMException(l.message,l.name);else throw l}_setup(l,e,o={}){const{event:r,invalidate:a,noexcept:f,warn:c}=o;return a&&e.nodeType===n.ELEMENT_NODE&&(this.#r=new WeakMap),this.#w=!!f,this.#i=!!c,this.#b=this._setEvent(r),this.#e=e,[this.#s,this.#t,this.#n]=(0,v.resolveContent)(e),this.#d=(0,v.isInShadowTree)(e),[this.#l,this.#h]=this._correspond(l),this.#m=new WeakMap,e}_initNwsapi(){return this.#o=(0,G.default)({DOMException:this.#a.DOMException,document:this.#c}),this.#o.configure({LOGERRORS:!1}),this.#o}_setEvent(l){return l instanceof this.#a.MouseEvent||l instanceof this.#a.KeyboardEvent?l:null}_correspond(l){const e=[];this.#p=!1;let o;if(this.#s){const r=this.#r.get(this.#s);if(r&&r.has(`${l}`)){const a=r.get(`${l}`);this.#p=a.descendant,o=a.ast}}if(o){const r=o.length;for(let a=0;a<r;a++)o[a].collected=!1,o[a].dir=null,o[a].filtered=!1,o[a].find=!1,e[a]=[]}else{let r;try{r=(0,k.parseSelector)(l)}catch(d){this._onError(d)}const{branches:a,info:{hasPseudo:f}}=(0,k.walkAST)(r);let c=!1,u=0;o=[];for(const[...d]of a){const i=[];let t=d.shift();if(t&&t.type!==n.COMBINATOR){const s=new Set;for(;t;){if(t.type===n.COMBINATOR){const[h]=d;if(h.type===n.COMBINATOR){const b=`Invalid selector ${l}`;throw new DOMException(b,n.SYNTAX_ERR)}const m=t.name;/^[\s>]$/.test(m)&&(c=!0),i.push({combo:t,leaves:(0,k.sortAST)(s)}),s.clear()}else if(t){let{name:h}=t;h&&typeof h=="string"&&(h=(0,k.unescapeSelector)(h),typeof h=="string"&&h!==t.name&&(t.name=h),/[|:]/.test(h)&&(t.namespace=!0)),s.add(t)}if(d.length)t=d.shift();else{i.push({combo:null,leaves:(0,k.sortAST)(s)}),s.clear();break}}}o.push({branch:i,collected:!1,dir:null,filtered:!1,find:!1}),e[u]=[],u++}if(this.#s&&!f){let d;this.#r.has(this.#s)?d=this.#r.get(this.#s):d=new Map,d.set(`${l}`,{ast:o,descendant:c}),this.#r.set(this.#s,d)}this.#p=c}return[o,e]}_createTreeWalker(l){let e;return this.#m.has(l)?e=this.#m.get(l):(e=this.#c.createTreeWalker(l,n.WALKER_FILTER),this.#m.set(l,e)),e}_prepareQuerySelectorWalker(){return this.#f=this._createTreeWalker(this.#e),this.#u=!1,this.#f}_traverse(l,e=this.#n){let o=e.currentNode,r;if(o===l)r=o;else if(o.contains(l))for(o=e.nextNode();o;){if(o===l){r=o;break}o=e.nextNode()}else{if(o!==e.root)for(;o&&!(o===e.root||o===l);)o=e.parentNode();if(l?.nodeType===n.ELEMENT_NODE)for(;o;){if(o===l){r=o;break}o=e.nextNode()}else r=o}return r??null}_collectNthChild(l,e,o){const{a:r,b:a,reverse:f,selector:c}=l,{parentNode:u}=e,d=new Set;let i;if(c)if(this.#r.has(c))i=this.#r.get(c);else{const{branches:t}=(0,k.walkAST)(c);i=t,this.#r.set(c,i)}if(u){const t=this.#n;let s=this._traverse(u,t);s=t.firstChild();let h=0;for(;s;)h++,s=t.nextSibling();s=this._traverse(u,t);const m=new Set;if(i)for(s=t.firstChild();s;){let b;for(const p of i)if(b=this._matchLeaves(p,s,o),!b)break;b&&m.add(s),s=t.nextSibling()}if(r===0){if(a>0&&a<=h){if(m.size){s=this._traverse(u,t),f?s=t.lastChild():s=t.firstChild();let b=0;for(;s;){if(m.has(s)){if(b===a-1){d.add(s);break}b++}f?s=t.previousSibling():s=t.nextSibling()}}else if(!c){s=this._traverse(u,t),f?s=t.lastChild():s=t.firstChild();let b=0;for(;s;){if(b===a-1){d.add(s);break}f?s=t.previousSibling():s=t.nextSibling(),b++}}}}else{let b=a-1;if(r>0)for(;b<0;)b+=r;if(b>=0&&b<h){s=this._traverse(u,t),f?s=t.lastChild():s=t.firstChild();let p=0,_=r>0?0:a-1;for(;s&&(s&&b>=0&&b<h);)m.size?m.has(s)&&(_===b&&(d.add(s),b+=r),r>0?_++:_--):p===b&&(c||d.add(s),b+=r),f?s=t.previousSibling():s=t.nextSibling(),p++}}if(f&&d.size>1){const b=[...d];return new Set(b.reverse())}}else if(e===this.#t&&r+a===1)if(i){let t;for(const s of i)if(t=this._matchLeaves(s,e,o),t)break;t&&d.add(e)}else d.add(e);return d}_collectNthOfType(l,e){const{a:o,b:r,reverse:a}=l,{localName:f,parentNode:c,prefix:u}=e,d=new Set;if(c){const i=this.#n;let t=this._traverse(c,i);t=i.firstChild();let s=0;for(;t;)s++,t=i.nextSibling();if(o===0){if(r>0&&r<=s){t=this._traverse(c,i),a?t=i.lastChild():t=i.firstChild();let h=0;for(;t;){const{localName:m,prefix:b}=t;if(m===f&&b===u){if(h===r-1){d.add(t);break}h++}a?t=i.previousSibling():t=i.nextSibling()}}}else{let h=r-1;if(o>0)for(;h<0;)h+=o;if(h>=0&&h<s){t=this._traverse(c,i),a?t=i.lastChild():t=i.firstChild();let m=o>0?0:r-1;for(;t;){const{localName:b,prefix:p}=t;if(b===f&&p===u){if(m===h&&(d.add(t),h+=o),h<0||h>=s)break;o>0?m++:m--}a?t=i.previousSibling():t=i.nextSibling()}}}if(a&&d.size>1){const h=[...d];return new Set(h.reverse())}}else e===this.#t&&o+r===1&&d.add(e);return d}_matchAnPlusB(l,e,o,r){const{nth:{a,b:f,name:c},selector:u}=l,d=new Map;if(c?(c==="even"?(d.set("a",2),d.set("b",0)):c==="odd"&&(d.set("a",2),d.set("b",1)),o.indexOf("last")>-1&&d.set("reverse",!0)):(typeof a=="string"&&/-?\d+/.test(a)?d.set("a",a*1):d.set("a",0),typeof f=="string"&&/-?\d+/.test(f)?d.set("b",f*1):d.set("b",0),o.indexOf("last")>-1&&d.set("reverse",!0)),/^nth-(?:last-)?child$/.test(o)){u&&d.set("selector",u);const i=Object.fromEntries(d);return this._collectNthChild(i,e,r)}else if(/^nth-(?:last-)?of-type$/.test(o)){const i=Object.fromEntries(d);return this._collectNthOfType(i,e)}return new Set}_matchHasPseudoFunc(l,e,o={}){let r;if(Array.isArray(l)&&l.length){const a=l.map(s=>s),[f]=a,{type:c}=f;let u;c===n.COMBINATOR?u=a.shift():u={name:" ",type:n.COMBINATOR};const d=[];for(;a.length;){const[s]=a,{type:h}=s;if(h===n.COMBINATOR)break;d.push(a.shift())}const i={combo:u,leaves:d};o.dir=x;const t=this._matchCombinator(i,e,o);if(t.size)if(a.length){for(const s of t)if(r=this._matchHasPseudoFunc(a,s,o),r)break}else r=!0}return!!r}_matchLogicalPseudoFunc(l,e,o={}){const{astName:r="",branches:a=[],selector:f="",twigBranches:c=[]}=l;let u;if(r==="has")if(f.includes(":has("))u=null;else{let d;for(const i of a)if(d=this._matchHasPseudoFunc(i,e,o),d)break;d&&(u=e)}else{const d=/^(?:is|where)$/.test(r);o.forgive=d;const i=c.length;let t;for(let s=0;s<i;s++){const h=c[s],m=h.length-1,{leaves:b}=h[m];if(t=this._matchLeaves(b,e,o),t&&m>0){let p=new Set([e]);for(let _=m-1;_>=0;_--){const w=h[_],N=[];o.dir=S;for(const A of p){const E=this._matchCombinator(w,A,o);E.size&&N.push(...E)}if(N.length)_===0?t=!0:p=new Set(N);else{t=!1;break}}}if(t)break}r==="not"?t||(u=e):t&&(u=e)}return u??null}_matchPseudoClassSelector(l,e,o={}){const{children:r,name:a}=l,{localName:f,parentNode:c}=e,{forgive:u,warn:d=this.#i}=o,i=new Set;if(n.REG_LOGICAL_PSEUDO.test(a)){let t;if(this.#r.has(l))t=this.#r.get(l);else{const{branches:h}=(0,k.walkAST)(l),m=[],b=[];for(const[...p]of h){for(const A of p){const E=(0,k.generateCSS)(A);m.push(E)}const _=[],w=new Set;let N=p.shift();for(;N;)if(N.type===n.COMBINATOR?(_.push({combo:N,leaves:[...w]}),w.clear()):N&&w.add(N),p.length)N=p.shift();else{_.push({combo:null,leaves:[...w]}),w.clear();break}b.push(_)}t={astName:a,branches:h,twigBranches:b,selector:m.join(",")},this.#r.set(l,t)}const s=this._matchLogicalPseudoFunc(t,e,o);s&&i.add(s)}else if(Array.isArray(r))if(/^nth-(?:last-)?(?:child|of-type)$/.test(a)){const[t]=r;return this._matchAnPlusB(t,e,a,o)}else switch(a){case"dir":case"lang":{const t=O.matcher.matchSelector(l,e);t&&i.add(t);break}case"current":case"nth-col":case"nth-last-col":{if(d){const t=`Unsupported pseudo-class :${a}()`;throw new DOMException(t,n.NOT_SUPPORTED_ERR)}break}case"host":case"host-context":break;case"contains":{if(d){const t=`Unknown pseudo-class :${a}()`;throw new DOMException(t,n.NOT_SUPPORTED_ERR)}break}default:if(!u){const t=`Unknown pseudo-class :${a}()`;throw new DOMException(t,n.SYNTAX_ERR)}}else switch(a){case"any-link":case"link":{n.REG_ANCHOR.test(f)&&e.hasAttribute("href")&&i.add(e);break}case"local-link":{if(n.REG_ANCHOR.test(f)&&e.hasAttribute("href")){const{href:t,origin:s,pathname:h}=new URL(this.#s.URL),m=new URL(e.getAttribute("href"),t);m.origin===s&&m.pathname===h&&i.add(e)}break}case"visited":break;case"hover":{const{target:t,type:s}=this.#b??{};(s==="mouseover"||s==="pointerover")&&e.contains(t)&&i.add(e);break}case"active":{const{buttons:t,target:s,type:h}=this.#b??{};(h==="mousedown"||h==="pointerdown")&&t&n.BIT_01&&e.contains(s)&&i.add(e);break}case"target":{const{hash:t}=new URL(this.#s.URL);e.id&&t===`#${e.id}`&&this.#s.contains(e)&&i.add(e);break}case"target-within":{const{hash:t}=new URL(this.#s.URL);if(t){const s=t.replace(/^#/,"");let h=this.#s.getElementById(s);for(;h;){if(h===e){i.add(e);break}h=h.parentNode}}break}case"scope":{this.#e.nodeType===n.ELEMENT_NODE?!this.#d&&e===this.#e&&i.add(e):e===this.#s.documentElement&&i.add(e);break}case"focus":case"focus-visible":{const{target:t,type:s}=this.#b??{};if(e===this.#s.activeElement&&e.tabIndex>=0&&(a==="focus"||s==="keydown"&&e.contains(t))){let h=e,m=!0;for(;h;){if(h.disabled||h.hasAttribute("disabled")||h.hidden||h.hasAttribute("hidden")){m=!1;break}else{const{display:b,visibility:p}=this.#a.getComputedStyle(h);if(m=!(b==="none"||p==="hidden"),!m)break}if(h.parentNode&&h.parentNode.nodeType===n.ELEMENT_NODE)h=h.parentNode;else break}m&&i.add(e)}break}case"focus-within":{let t,s=this.#s.activeElement;if(s.tabIndex>=0)for(;s;){if(s===e){t=!0;break}s=s.parentNode}if(t){let h=e,m=!0;for(;h;){if(h.disabled||h.hasAttribute("disabled")||h.hidden||h.hasAttribute("hidden")){m=!1;break}else{const{display:b,visibility:p}=this.#a.getComputedStyle(h);if(m=!(b==="none"||p==="hidden"),!m)break}if(h.parentNode&&h.parentNode.nodeType===n.ELEMENT_NODE)h=h.parentNode;else break}m&&i.add(e)}break}case"open":{n.REG_INTERACT.test(f)&&e.hasAttribute("open")&&i.add(e);break}case"closed":{n.REG_INTERACT.test(f)&&!e.hasAttribute("open")&&i.add(e);break}case"disabled":{if(n.REG_FORM_CTRL.test(f)||(0,M.default)(f))if(e.disabled||e.hasAttribute("disabled"))i.add(e);else{let t=c;for(;t;){if(n.REG_FORM_GROUP.test(t.localName))if(t.localName==="fieldset"){if(t.disabled&&t.hasAttribute("disabled"))break}else break;t=t.parentNode}t&&c.localName!=="legend"&&(t.disabled||t.hasAttribute("disabled"))&&i.add(e)}break}case"enabled":{(n.REG_FORM_CTRL.test(f)||(0,M.default)(f))&&!(e.disabled&&e.hasAttribute("disabled"))&&i.add(e);break}case"read-only":{switch(f){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}case"input":{(!e.type||n.REG_TYPE_DATE.test(e.type)||n.REG_TYPE_TEXT.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,v.isContentEditable)(e)||i.add(e)}break}case"read-write":{switch(f){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||i.add(e);break}case"input":{(!e.type||n.REG_TYPE_DATE.test(e.type)||n.REG_TYPE_TEXT.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,v.isContentEditable)(e)&&i.add(e)}break}case"placeholder-shown":{let t;if(e.placeholder?t=e.placeholder:e.hasAttribute("placeholder")&&(t=e.getAttribute("placeholder")),typeof t=="string"&&!/[\r\n]/.test(t)){let s;f==="textarea"?s=e:f==="input"&&(e.hasAttribute("type")?n.REG_TYPE_TEXT.test(e.getAttribute("type"))&&(s=e):s=e),s&&e.value===""&&i.add(e)}break}case"checked":{(e.checked&&f==="input"&&e.hasAttribute("type")&&n.REG_TYPE_CHECK.test(e.getAttribute("type"))||e.selected&&f==="option")&&i.add(e);break}case"indeterminate":{if(e.indeterminate&&f==="input"&&e.type==="checkbox"||f==="progress"&&!e.hasAttribute("value"))i.add(e);else if(f==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const t=e.name;let s=e.parentNode;for(;s&&s.localName!=="form";)s=s.parentNode;s||(s=this.#s.documentElement);const h=s.getElementsByTagName("input"),m=h.length;let b;for(let p=0;p<m;p++){const _=h[p];if(_.getAttribute("type")==="radio"&&(t?_.getAttribute("name")===t&&(b=!!_.checked):_.hasAttribute("name")||(b=!!_.checked),b))break}b||i.add(e)}break}case"default":{if(f==="button"&&!(e.hasAttribute("type")&&n.REG_TYPE_RESET.test(e.getAttribute("type")))||f==="input"&&e.hasAttribute("type")&&n.REG_TYPE_SUBMIT.test(e.getAttribute("type"))){let t=e.parentNode;for(;t&&t.localName!=="form";)t=t.parentNode;if(t){const s=this.#n;let h=this._traverse(t,s);for(h=s.firstChild();h&&t.contains(h);){const m=h.localName;let b;if(m==="button"?b=!(h.hasAttribute("type")&&n.REG_TYPE_RESET.test(h.getAttribute("type"))):m==="input"&&(b=h.hasAttribute("type")&&n.REG_TYPE_SUBMIT.test(h.getAttribute("type"))),b){h===e&&i.add(e);break}h=s.nextNode()}}}else if(f==="input"&&e.hasAttribute("type")&&n.REG_TYPE_CHECK.test(e.getAttribute("type"))&&(e.checked||e.hasAttribute("checked")))i.add(e);else if(f==="option"){let t=c,s=!1;for(;t&&t.localName!=="datalist";){if(t.localName==="select"){(t.multiple||t.hasAttribute("multiple"))&&(s=!0);break}t=t.parentNode}if(s)(e.selected||e.hasAttribute("selected"))&&i.add(e);else{const h=new Set,m=this.#n;let b=this._traverse(c,m);for(b=m.firstChild();b;){if(b.selected||b.hasAttribute("selected")){h.add(b);break}b=m.nextSibling()}h.size&&h.has(e)&&i.add(e)}}break}case"valid":{if(n.REG_FORM_VALID.test(f))e.checkValidity()&&(e.maxLength>=0?e.maxLength>=e.value.length&&i.add(e):i.add(e));else if(f==="fieldset"){const t=this.#n;let s=this._traverse(e,t);s=t.firstChild();let h;if(!s)h=!0;else for(;s&&e.contains(s)&&!(n.REG_FORM_VALID.test(s.localName)&&(s.checkValidity()?s.maxLength>=0?h=s.maxLength>=s.value.length:h=!0:h=!1,!h));)s=t.nextNode();h&&i.add(e)}break}case"invalid":{if(n.REG_FORM_VALID.test(f))e.checkValidity()?e.maxLength>=0&&e.maxLength<e.value.length&&i.add(e):i.add(e);else if(f==="fieldset"){const t=this.#n;let s=this._traverse(e,t);s=t.firstChild();let h;if(!s)h=!0;else for(;s&&e.contains(s)&&!(n.REG_FORM_VALID.test(s.localName)&&(s.checkValidity()?s.maxLength>=0?h=s.maxLength>=s.value.length:h=!0:h=!1,!h));)s=t.nextNode();h||i.add(e)}break}case"in-range":{f==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&n.REG_TYPE_RANGE.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":{f==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&n.REG_TYPE_RANGE.test(e.getAttribute("type"))&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&i.add(e);break}case"required":{let t;if(/^(?:select|textarea)$/.test(f))t=e;else if(f==="input")if(e.hasAttribute("type")){const s=e.getAttribute("type");(s==="file"||n.REG_TYPE_CHECK.test(s)||n.REG_TYPE_DATE.test(s)||n.REG_TYPE_TEXT.test(s))&&(t=e)}else t=e;t&&(e.required||e.hasAttribute("required"))&&i.add(e);break}case"optional":{let t;if(/^(?:select|textarea)$/.test(f))t=e;else if(f==="input")if(e.hasAttribute("type")){const s=e.getAttribute("type");(s==="file"||n.REG_TYPE_CHECK.test(s)||n.REG_TYPE_DATE.test(s)||n.REG_TYPE_TEXT.test(s))&&(t=e)}else t=e;t&&!(e.required||e.hasAttribute("required"))&&i.add(e);break}case"root":{e===this.#s.documentElement&&i.add(e);break}case"empty":{if(e.hasChildNodes()){const t=this.#c.createTreeWalker(e,n.SHOW_ALL);let s=t.firstChild(),h;for(;s&&(h=s.nodeType!==n.ELEMENT_NODE&&s.nodeType!==n.TEXT_NODE,!!h);)s=t.nextSibling();h&&i.add(e)}else i.add(e);break}case"first-child":{(c&&e===c.firstElementChild||e===this.#t)&&i.add(e);break}case"last-child":{(c&&e===c.lastElementChild||e===this.#t)&&i.add(e);break}case"only-child":{(c&&e===c.firstElementChild&&e===c.lastElementChild||e===this.#t)&&i.add(e);break}case"first-of-type":{if(c){const[t]=this._collectNthOfType({a:0,b:1},e);t&&i.add(t)}else e===this.#t&&i.add(e);break}case"last-of-type":{if(c){const[t]=this._collectNthOfType({a:0,b:1,reverse:!0},e);t&&i.add(t)}else e===this.#t&&i.add(e);break}case"only-of-type":{if(c){const[t]=this._collectNthOfType({a:0,b:1},e);if(t===e){const[s]=this._collectNthOfType({a:0,b:1,reverse:!0},e);s===e&&i.add(e)}}else e===this.#t&&i.add(e);break}case"defined":{const t=e.getAttribute("is");t?(0,M.default)(t)&&this.#a.customElements.get(t)&&i.add(e):(0,M.default)(f)?this.#a.customElements.get(f)&&i.add(e):(e instanceof this.#a.HTMLElement||e instanceof this.#a.SVGElement)&&i.add(e);break}case"popover-open":{if(e.popover){const{display:t}=this.#a.getComputedStyle(e);t!=="none"&&i.add(e)}break}case"host":case"host-context":break;case"after":case"before":case"first-letter":case"first-line":{if(d){const t=`Unsupported pseudo-element ::${a}`;throw new DOMException(t,n.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){const t=`Unsupported pseudo-class :${a}`;throw new DOMException(t,n.NOT_SUPPORTED_ERR)}break}default:if(a.startsWith("-webkit-")){if(d){const t=`Unsupported pseudo-class :${a}`;throw new DOMException(t,n.NOT_SUPPORTED_ERR)}}else if(!u){const t=`Unknown pseudo-class :${a}`;throw new DOMException(t,n.SYNTAX_ERR)}}return i}_matchShadowHostPseudoClass(l,e){const{children:o,name:r}=l;let a;if(Array.isArray(o)){const{branches:f}=(0,k.walkAST)(o[0]),[c]=f,[...u]=c,{host:d}=e;if(r==="host"){let i;for(const t of u){const{type:s}=t;if(s===n.COMBINATOR){const m=`Invalid selector ${(0,k.generateCSS)(l)}`;throw new DOMException(m,n.SYNTAX_ERR)}if(i=this._matchSelector(t,d).has(d),!i)break}i&&(a=e)}else if(r==="host-context"){let i=d,t;for(;i;){for(const s of u){const{type:h}=s;if(h===n.COMBINATOR){const b=`Invalid selector ${(0,k.generateCSS)(l)}`;throw new DOMException(b,n.SYNTAX_ERR)}if(t=this._matchSelector(s,i).has(i),!t)break}if(t)break;i=i.parentNode}t&&(a=e)}}else if(r==="host")a=e;else{const f=`Invalid selector :${r}`;throw new DOMException(f,n.SYNTAX_ERR)}return a??null}_matchSelector(l,e,o){const{type:r}=l,a=new Set;if(l.name===n.EMPTY)return a;const f=(0,k.unescapeSelector)(l.name);if(typeof f=="string"&&f!==l.name&&(l.name=f),e.nodeType===n.ELEMENT_NODE)switch(r){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(f,o);break}case n.SELECTOR_ID:{e.id===f&&a.add(e);break}case n.SELECTOR_CLASS:{e.classList.contains(f)&&a.add(e);break}case n.SELECTOR_PSEUDO_CLASS:return this._matchPseudoClassSelector(l,e,o);default:{const c=O.matcher.matchSelector(l,e,o);c&&a.add(c)}}else if(this.#d&&r===n.SELECTOR_PSEUDO_CLASS&&e.nodeType===n.DOCUMENT_FRAGMENT_NODE){if(f!=="has"&&n.REG_LOGICAL_PSEUDO.test(f))return this._matchPseudoClassSelector(l,e,o);if(n.REG_SHADOW_HOST.test(f)){const c=this._matchShadowHostPseudoClass(l,e,o);c&&a.add(c)}}return a}_matchLeaves(l,e,o){const{attributes:r,localName:a,nodeType:f}=e;let c=this.#_.get(l),u;if(c&&c.has(e)){const{attr:d,matched:i}=c.get(e);r?.length===d&&(u=i)}if(typeof u!="boolean"){let d;f===n.ELEMENT_NODE&&n.REG_FORM.test(a)?d=!1:d=!0;for(const i of l){const{name:t,type:s}=i;if(s===n.SELECTOR_PSEUDO_CLASS&&t==="dir"&&(d=!1),u=this._matchSelector(i,e,o).has(e),!u)break}d&&(c||(c=new WeakMap),c.set(e,{attr:r?.length,matched:u}),this.#_.set(l,c))}return!!u}_matchHTMLCollection(l,e={}){const{compound:o,filterLeaves:r}=e,a=new Set,f=l.length;if(f)if(o)for(let c=0;c<f;c++){const u=l[c];this._matchLeaves(r,u,e)&&a.add(u)}else{const c=[].slice.call(l);return new Set(c)}return a}_findDescendantNodes(l,e,o){const[r,...a]=l,f=a.length>0,{type:c}=r,u=(0,k.unescapeSelector)(r.name);typeof u=="string"&&u!==r.name&&(r.name=u);let d=new Set,i=!1;if(this.#d)i=!0;else switch(c){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(u,o);break}case n.SELECTOR_ID:{if(this.#t.nodeType===n.ELEMENT_NODE)i=!0;else{const t=this.#t.getElementById(u);t&&t!==e&&e.contains(t)&&(f?this._matchLeaves(a,t,o)&&d.add(t):d.add(t))}break}case n.SELECTOR_CLASS:{const t=e.getElementsByClassName(u);d=this._matchHTMLCollection(t,{compound:f,filterLeaves:a});break}case n.SELECTOR_TYPE:{if(this.#s.contentType==="text/html"&&!/[*|]/.test(u)){const t=e.getElementsByTagName(u);d=this._matchHTMLCollection(t,{compound:f,filterLeaves:a})}else i=!0;break}default:i=!0}return{nodes:d,pending:i}}_matchCombinator(l,e,o={}){const{combo:r,leaves:a}=l,{name:f}=r,{parentNode:c}=e,{dir:u}=o,d=new Set;if(u===x)switch(f){case"+":{const i=e.nextElementSibling;i&&this._matchLeaves(a,i,o)&&d.add(i);break}case"~":{if(c){const i=this._createTreeWalker(c);let t=this._traverse(e,i);for(t=i.nextSibling();t;)this._matchLeaves(a,t,o)&&d.add(t),t=i.nextSibling()}break}case">":{const i=this._createTreeWalker(e);let t=this._traverse(e,i);for(t=i.firstChild();t;)this._matchLeaves(a,t,o)&&d.add(t),t=i.nextSibling();break}case" ":default:{const{nodes:i,pending:t}=this._findDescendantNodes(a,e);if(i.size)return i;if(t){const s=this._createTreeWalker(e);let h=this._traverse(e,s);for(h=s.nextNode();h&&e.contains(h);)this._matchLeaves(a,h,o)&&d.add(h),h=s.nextNode()}}}else switch(f){case"+":{const i=e.previousElementSibling;i&&this._matchLeaves(a,i,o)&&d.add(i);break}case"~":{if(c){const i=this._createTreeWalker(c);let t=this._traverse(c,i);for(t=i.firstChild();t&&t!==e;)this._matchLeaves(a,t,o)&&d.add(t),t=i.nextSibling()}break}case">":{c&&this._matchLeaves(a,c,o)&&d.add(c);break}case" ":default:{const i=[];let t=c;for(;t;)this._matchLeaves(a,t,o)&&i.push(t),t=t.parentNode;if(i.length)return new Set(i.reverse())}}return d}_findNode(l,e){const{node:o}=e;let r=this._traverse(o,this.#f),a;if(r)for(r.nodeType!==n.ELEMENT_NODE?r=this.#f.nextNode():r===o&&r!==this.#t&&(r=this.#f.nextNode());r;){if(this._matchLeaves(l,r,{warn:this.#i})){a=r;break}r=this.#f.nextNode()}return a??null}_matchSelf(l){const e=[],o=this._matchLeaves(l,this.#e,{warn:this.#i});let r=!1;return o&&(e.push(this.#e),r=!0),[e,r]}_findLineal(l,e={}){const{complex:o}=e,r=[];let a=this._matchLeaves(l,this.#e,{warn:this.#i}),f=!1;if(a&&(r.push(this.#e),f=!0),!a||o){let c=this.#e.parentNode;for(;c&&(a=this._matchLeaves(l,c,{warn:this.#i}),a&&(r.push(c),f=!0),c.parentNode);)c=c.parentNode}return[r,f]}_findFirst(l){const e=[],o=this._findNode(l,{node:this.#e});let r=!1;return o&&(e.push(o),r=!0),[e,r]}_findFromHTMLCollection(l,e={}){const{complex:o,compound:r,filterLeaves:a,targetType:f}=e;let c=[],u=!1,d=!1;const i=l.length;if(i)if(this.#e.nodeType===n.ELEMENT_NODE)for(let t=0;t<i;t++){const s=l[t];if(s!==this.#e&&(this.#e.contains(s)||s.contains(this.#e))){if(r){if(this._matchLeaves(a,s,{warn:this.#i})&&(c.push(s),u=!0,f===g))break}else if(c.push(s),u=!0,f===g)break}}else if(o)if(r)for(let t=0;t<i;t++){const s=l[t];if(this._matchLeaves(a,s,{warn:this.#i})&&(c.push(s),u=!0,f===g))break}else c=[].slice.call(l),u=!0,d=!0;else if(r)for(let t=0;t<i;t++){const s=l[t];if(this._matchLeaves(a,s,{warn:this.#i})&&(c.push(s),u=!0,f===g))break}else c=[].slice.call(l),u=!0,d=!0;return[c,u,d]}_findEntryNodes(l,e,o){const{leaves:r}=l,[a,...f]=r,c=f.length>0,{name:u,type:d}=a;let i=[],t=!1,s=!1,h=!1;switch(d){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(u,{warn:this.#i});break}case n.SELECTOR_ID:{if(e===R)[i,s]=this._matchSelf(r);else if(e===C)[i,s]=this._findLineal(r,{complex:o});else if(e===g&&this.#t.nodeType!==n.ELEMENT_NODE){const m=this.#t.getElementById(u);m&&(c?this._matchLeaves(f,m,{warn:this.#i})&&(i.push(m),s=!0):(i.push(m),s=!0))}else e===g?[i,s]=this._findFirst(r):h=!0;break}case n.SELECTOR_CLASS:{if(e===R)[i,s]=this._matchSelf(r);else if(e===C)[i,s]=this._findLineal(r,{complex:o});else if(this.#t.nodeType===n.DOCUMENT_NODE){const m=this.#t.getElementsByClassName(u);m.length&&([i,s,t]=this._findFromHTMLCollection(m,{complex:o,compound:c,filterLeaves:f,targetType:e}))}else e===g?[i,s]=this._findFirst(r):h=!0;break}case n.SELECTOR_TYPE:{if(e===R)[i,s]=this._matchSelf(r);else if(e===C)[i,s]=this._findLineal(r,{complex:o});else if(this.#s.contentType==="text/html"&&this.#t.nodeType===n.DOCUMENT_NODE&&!/[*|]/.test(u)){const m=this.#t.getElementsByTagName(u);m.length&&([i,s,t]=this._findFromHTMLCollection(m,{complex:o,compound:c,filterLeaves:f,targetType:e}))}else e===g?[i,s]=this._findFirst(r):h=!0;break}default:if(e!==C&&n.REG_SHADOW_HOST.test(u)){if(this.#d&&this.#e.nodeType===n.DOCUMENT_FRAGMENT_NODE){const m=this._matchShadowHostPseudoClass(a,this.#e);m&&(i.push(m),s=!0)}}else e===R?[i,s]=this._matchSelf(r):e===C?[i,s]=this._findLineal(r,{complex:o}):e===g?[i,s]=this._findFirst(r):h=!0}return{collected:t,compound:c,filtered:s,nodes:i,pending:h}}_collectNodes(l){const e=this.#l.values();if(l===L||l===g){const o=new Set;let r=0;for(const{branch:a}of e){const f=a.length,c=f>1,u=a[0];let d,i;if(c){const{combo:p,leaves:[{name:_,type:w}]}=u,N=a[f-1],{leaves:[{name:A,type:E}]}=N;if(E===n.SELECTOR_PSEUDO_ELEMENT||E===n.SELECTOR_ID)d=S,i=N;else if(w===n.SELECTOR_PSEUDO_ELEMENT||w===n.SELECTOR_ID)d=x,i=u;else if(l===L)if(_==="*"&&w===n.SELECTOR_TYPE)d=S,i=N;else if(A==="*"&&E===n.SELECTOR_TYPE)d=x,i=u;else if(f===2){const{name:T}=p;/^[+~]$/.test(T)?(d=S,i=N):(d=x,i=u)}else d=x,i=u;else if(A==="*"&&E===n.SELECTOR_TYPE)d=x,i=u;else if(_==="*"&&w===n.SELECTOR_TYPE)d=S,i=N;else{let T;for(const{combo:D,leaves:[$]}of a){const{name:F,type:z}=$;if(z===n.SELECTOR_PSEUDO_CLASS&&F==="dir"){T=!1;break}if(!T&&D){const{name:W}=D;/^[+~]$/.test(W)&&(T=!0)}}T?(d=x,i=u):(d=S,i=N)}}else d=S,i=u;const{collected:t,compound:s,filtered:h,nodes:m,pending:b}=this._findEntryNodes(i,l,c);m.length?(this.#l[r].find=!0,this.#h[r]=m):b&&o.add(new Map([["index",r],["twig",i]])),this.#l[r].collected=t,this.#l[r].dir=d,this.#l[r].filtered=h||!s,r++}if(o.size){let a,f;this.#e!==this.#t&&this.#e.nodeType===n.ELEMENT_NODE?(a=this.#e,f=this.#f):(a=this.#t,f=this.#n);let c=this._traverse(a,f);for(;c;){let u=!1;if(this.#e.nodeType===n.ELEMENT_NODE?c===this.#e?u=!0:u=this.#e.contains(c):u=!0,u)for(const d of o){const{leaves:i}=d.get("twig");if(this._matchLeaves(i,c,{warn:this.#i})){const s=d.get("index");this.#l[s].filtered=!0,this.#l[s].find=!0,this.#h[s].push(c)}}c!==f.currentNode&&(c=this._traverse(c,f)),c=f.nextNode()}}}else{let o=0;for(const{branch:r}of e){const a=r[r.length-1],f=r.length>1,{compound:c,filtered:u,nodes:d}=this._findEntryNodes(a,l,f);d.length&&(this.#l[o].find=!0,this.#h[o]=d),this.#l[o].dir=S,this.#l[o].filtered=u||!c,o++}}return[this.#l,this.#h]}_getCombinedNodes(l,e,o){const r=[];for(const a of e){const f=this._matchCombinator(l,a,{dir:o,warn:this.#i});f.size&&r.push(...f)}return r.length?new Set(r):new Set}_matchNodeNext(l,e,o){const{combo:r,index:a}=o,{combo:f,leaves:c}=l[a],u={combo:r,leaves:c},d=this._getCombinedNodes(u,e,x);let i;if(d.size)if(a===l.length-1){const[t]=(0,v.sortNodes)(d);i=t}else i=this._matchNodeNext(l,d,{combo:f,index:a+1});return i??null}_matchNodePrev(l,e,o){const{index:r}=o,a=l[r],f=new Set([e]),c=this._getCombinedNodes(a,f,S);let u;if(c.size){if(r===0)u=e;else for(const d of c)if(this._matchNodePrev(l,d,{index:r-1}))return e}return u??null}_find(l){(l===L||l===g)&&this._prepareQuerySelectorWalker();const[[...e],o]=this._collectNodes(l),r=e.length;let a=new Set;for(let f=0;f<r;f++){const{branch:c,collected:u,dir:d,find:i}=e[f],t=c.length;if(t&&i){const s=o[f],h=s.length,m=t-1;if(m===0)if((l===L||l===g)&&this.#e.nodeType===n.ELEMENT_NODE)for(let b=0;b<h;b++){const p=s[b];if(p!==this.#e&&this.#e.contains(p)&&(a.add(p),l!==L))break}else if(l===L)if(a.size){const b=[...a];a=new Set([...b,...s]),this.#u=!0}else a=new Set(s);else{const[b]=s;a.add(b)}else if(l===L)if(d===x){let{combo:b}=c[0];for(const p of s){let _=new Set([p]);for(let w=1;w<t;w++){const{combo:N,leaves:A}=c[w],E={combo:b,leaves:A};if(_=this._getCombinedNodes(E,_,d),_.size)if(w===m)if(a.size){const T=[...a];a=new Set([...T,..._]),this.#u=!0}else a=_;else b=N;else break}}}else for(const b of s){let p=new Set([b]);for(let _=m-1;_>=0;_--){const w=c[_];if(p=this._getCombinedNodes(w,p,d),p.size)_===0&&(a.add(b),t>1&&a.size>1&&(this.#u=!0));else break}}else if(l===g&&d===x){const{combo:b}=c[0];let p;for(const _ of s)if(p=this._matchNodeNext(c,new Set([_]),{combo:b,index:1}),p){a.add(p);break}if(!p&&!u){const{leaves:_}=c[0],[w]=s;let N=this._findNode(_,{node:w});for(;N;){if(p=this._matchNodeNext(c,new Set([N]),{combo:b,index:1}),p){a.add(p);break}N=this._findNode(_,{node:N})}}}else{let b;for(const p of s)if(b=this._matchNodePrev(c,p,{index:m-1}),b){a.add(p);break}if(!b&&!u&&l===g){const{leaves:p}=c[m],[_]=s;let w=this._findNode(p,{node:_});for(;w;){if(b=this._matchNodePrev(c,w,{index:m-1}),b){a.add(w);break}w=this._findNode(p,{node:w})}}}}}return a}matches(l,e,o){let r;try{if(e?.nodeType!==n.ELEMENT_NODE){const c=`Unexpected node ${e?.nodeName}`;throw new TypeError(c)}const a=e.ownerDocument;if(a===this.#c&&a.contentType==="text/html"&&(0,k.filterSelector)(l,{complex:n.REG_COMPLEX_A.test(l),descendant:!0}))return this.#o.match(l,e);this._setup(l,e,o),r=this._find(R).size}catch(a){this._onError(a)}return!!r}closest(l,e,o){let r;try{if(e?.nodeType!==n.ELEMENT_NODE){const c=`Unexpected node ${e?.nodeName}`;throw new TypeError(c)}const a=e.ownerDocument;if(a===this.#c&&a.contentType==="text/html"&&(0,k.filterSelector)(l,{complex:n.REG_COMPLEX_A.test(l),descendant:!0}))return this.#o.closest(l,e);this._setup(l,e,o);const f=this._find(C);if(f.size){let c=this.#e;for(;c;){if(f.has(c)){r=c;break}c=c.parentNode}}}catch(a){this._onError(a)}return r??null}querySelector(l,e,o){let r;try{(0,v.verifyNode)(e);let a;if(e.nodeType===n.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#c&&a.contentType==="text/html"&&(0,k.filterSelector)(l,{complex:n.REG_COMPLEX_B.test(l),descendant:!1}))return this.#o.first(l,e);this._setup(l,e,o);const f=this._find(g);f.delete(this.#e),f.size&&([r]=(0,v.sortNodes)(f))}catch(a){this._onError(a)}return r??null}querySelectorAll(l,e,o){let r;try{(0,v.verifyNode)(e);let a;if(e.nodeType===n.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#c&&a.contentType==="text/html"&&(0,k.filterSelector)(l,{complex:n.REG_COMPLEX_B.test(l),descendant:!0}))return this.#o.select(l,e);this._setup(l,e,o);const f=this._find(L);f.delete(this.#e),f.size&&(this.#u?r=(0,v.sortNodes)(f):r=[...f])}catch(a){this._onError(a)}return r??[]}}0&&(module.exports={Finder}); +var W=Object.create;var P=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var Y=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var V=(g,l)=>{for(var e in l)P(g,e,{get:l[e],enumerable:!0})},I=(g,l,e,h)=>{if(l&&typeof l=="object"||typeof l=="function")for(let n of j(l))!q.call(g,n)&&n!==e&&P(g,n,{get:()=>l[n],enumerable:!(h=B(l,n))||h.enumerable});return g};var U=(g,l,e)=>(e=g!=null?W(Y(g)):{},I(l||!g||!g.__esModule?P(e,"default",{value:g,enumerable:!0}):e,g)),X=g=>I(P({},"__esModule",{value:!0}),g);var Q={};V(Q,{Finder:()=>K});module.exports=X(Q);var M=U(require("is-potential-custom-element-name"),1),G=U(require("@asamuzakjp/nwsapi"),1),_=require("./dom-util.js"),O=require("./matcher.js"),y=require("./parser.js"),c=require("./constant.js");const x="next",S="prev",L="all",E="first",C="lineal",R="self";class K{#l;#c;#s;#h;#w;#r;#m;#e;#d;#k;#o;#f;#_;#t;#u;#b;#n;#p;#i;#a;constructor(l,e){this.#a=l,this.#r=e??l.document,this.#c=new WeakMap,this.#h=new WeakMap,this.#_=new WeakMap,this._initNwsapi()}_onError(l){if(!this.#k)if(l instanceof DOMException||l instanceof this.#a.DOMException)if(l.name===c.NOT_SUPPORTED_ERR)this.#i&&console.warn(l.message);else throw new this.#a.DOMException(l.message,l.name);else throw l}_setup(l,e,h={}){const{event:n,noexcept:a,warn:o}=h;return this.#k=!!a,this.#i=!!o,this.#m=this._setEvent(n),this.#e=e,[this.#s,this.#t,this.#n]=(0,_.resolveContent)(e),this.#u=(0,_.isInShadowTree)(e),[this.#l,this.#d]=this._correspond(l),this.#p=new WeakMap,e}_initNwsapi(){return this.#o=(0,G.default)({DOMException:this.#a.DOMException,document:this.#r}),this.#o.configure({LOGERRORS:!1}),this.#o}_setEvent(l){return l instanceof this.#a.KeyboardEvent||l instanceof this.#a.MouseEvent?l:null}_correspond(l){const e=[];this.#w=!1;let h;if(this.#h.has(this.#s)){const n=this.#h.get(this.#s);if(n&&n.has(`${l}`)){const a=n.get(`${l}`);this.#w=a.descendant,h=a.ast}}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,y.parseSelector)(l)}catch(t){this._onError(t)}const{branches:a,info:{hasHasPseudoFunc:o,hasHyphenSepAttr:r}}=(0,y.walkAST)(n);let u;o||r?u=!1:u=!0;let d=!1,i=0;h=[];for(const[...t]of a){const s=[];let f=t.shift();if(f&&f.type!==c.COMBINATOR){const m=new Set;for(;f;){if(f.type===c.COMBINATOR){const[b]=t;if(b.type===c.COMBINATOR){const w=`Invalid selector ${l}`;throw new DOMException(w,c.SYNTAX_ERR)}const p=f.name;/^[\s>]$/.test(p)&&(d=!0),s.push({combo:f,leaves:(0,y.sortAST)(m)}),m.clear()}else if(f){let{name:b}=f;b&&typeof b=="string"&&(b=(0,y.unescapeSelector)(b),typeof b=="string"&&b!==f.name&&(f.name=b),/[|:]/.test(b)&&(f.namespace=!0)),m.add(f)}if(t.length)f=t.shift();else{s.push({combo:null,leaves:(0,y.sortAST)(m)}),m.clear();break}}}h.push({branch:s,collected:!1,dir:null,filtered:!1,find:!1}),e[i]=[],i++}if(u){let t;this.#h.has(this.#s)?t=this.#h.get(this.#s):t=new Map,t.set(`${l}`,{ast:h,descendant:d}),this.#h.set(this.#s,t)}this.#w=d}return[h,e]}_createTreeWalker(l){let e;return this.#p.has(l)?e=this.#p.get(l):(e=this.#r.createTreeWalker(l,c.WALKER_FILTER),this.#p.set(l,e)),e}_prepareQuerySelectorWalker(){return this.#f=this._createTreeWalker(this.#e),this.#b=!1,this.#f}_collectNthChild(l,e,h){const{a:n,b:a,reverse:o,selector:r}=l,{parentNode:u}=e,d=new Set;let i;if(r)if(this.#c.has(r))i=this.#c.get(r);else{const{branches:t}=(0,y.walkAST)(r);i=t,this.#c.set(r,i)}if(u){const t=this.#n;let s=(0,_.traverseNode)(u,t);s=t.firstChild();let f=0;for(;s;)f++,s=t.nextSibling();s=(0,_.traverseNode)(u,t);const m=new Set;if(i)for(s=t.firstChild();s;){let b;for(const p of i)if(b=this._matchLeaves(p,s,h),!b)break;b&&m.add(s),s=t.nextSibling()}if(n===0){if(a>0&&a<=f){if(m.size){s=(0,_.traverseNode)(u,t),o?s=t.lastChild():s=t.firstChild();let b=0;for(;s;){if(m.has(s)){if(b===a-1){d.add(s);break}b++}o?s=t.previousSibling():s=t.nextSibling()}}else if(!r){s=(0,_.traverseNode)(u,t),o?s=t.lastChild():s=t.firstChild();let b=0;for(;s;){if(b===a-1){d.add(s);break}o?s=t.previousSibling():s=t.nextSibling(),b++}}}}else{let b=a-1;if(n>0)for(;b<0;)b+=n;if(b>=0&&b<f){s=(0,_.traverseNode)(u,t),o?s=t.lastChild():s=t.firstChild();let p=0,w=n>0?0:a-1;for(;s&&(s&&b>=0&&b<f);)m.size?m.has(s)&&(w===b&&(d.add(s),b+=n),n>0?w++:w--):p===b&&(r||d.add(s),b+=n),o?s=t.previousSibling():s=t.nextSibling(),p++}}if(o&&d.size>1){const b=[...d];return new Set(b.reverse())}}else if(e===this.#t&&n+a===1)if(i){let t;for(const s of i)if(t=this._matchLeaves(s,e,h),t)break;t&&d.add(e)}else d.add(e);return d}_collectNthOfType(l,e){const{a:h,b:n,reverse:a}=l,{localName:o,parentNode:r,prefix:u}=e,d=new Set;if(r){const i=this.#n;let t=(0,_.traverseNode)(r,i);t=i.firstChild();let s=0;for(;t;)s++,t=i.nextSibling();if(h===0){if(n>0&&n<=s){t=(0,_.traverseNode)(r,i),a?t=i.lastChild():t=i.firstChild();let f=0;for(;t;){const{localName:m,prefix:b}=t;if(m===o&&b===u){if(f===n-1){d.add(t);break}f++}a?t=i.previousSibling():t=i.nextSibling()}}}else{let f=n-1;if(h>0)for(;f<0;)f+=h;if(f>=0&&f<s){t=(0,_.traverseNode)(r,i),a?t=i.lastChild():t=i.firstChild();let m=h>0?0:n-1;for(;t;){const{localName:b,prefix:p}=t;if(b===o&&p===u){if(m===f&&(d.add(t),f+=h),f<0||f>=s)break;h>0?m++:m--}a?t=i.previousSibling():t=i.nextSibling()}}}if(a&&d.size>1){const f=[...d];return new Set(f.reverse())}}else e===this.#t&&h+n===1&&d.add(e);return d}_matchAnPlusB(l,e,h,n){const{nth:{a,b:o,name:r},selector:u}=l,d=new Map;if(r?(r==="even"?(d.set("a",2),d.set("b",0)):r==="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 o=="string"&&/-?\d+/.test(o)?d.set("b",o*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(l,e,h={}){let n;if(Array.isArray(l)&&l.length){const a=l.map(s=>s),[o]=a,{type:r}=o;let u;r===c.COMBINATOR?u=a.shift():u={name:" ",type:c.COMBINATOR};const d=[];for(;a.length;){const[s]=a,{type:f}=s;if(f===c.COMBINATOR)break;d.push(a.shift())}const i={combo:u,leaves:d};h.dir=x;const t=this._matchCombinator(i,e,h);if(t.size)if(a.length){for(const s of t)if(n=this._matchHasPseudoFunc(a,s,h),n)break}else n=!0}return!!n}_matchLogicalPseudoFunc(l,e,h={}){const{astName:n="",branches:a=[],selector:o="",twigBranches:r=[]}=l;let u;if(n==="has")if(o.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=r.length;let t;for(let s=0;s<i;s++){const f=r[s],m=f.length-1,{leaves:b}=f[m];if(t=this._matchLeaves(b,e,h),t&&m>0){let p=new Set([e]);for(let w=m-1;w>=0;w--){const k=f[w],N=[];h.dir=S;for(const A of p){const v=this._matchCombinator(k,A,h);v.size&&N.push(...v)}if(N.length)w===0?t=!0:p=new Set(N);else{t=!1;break}}}if(t)break}n==="not"?t||(u=e):t&&(u=e)}return u??null}_matchPseudoClassSelector(l,e,h={}){const{children:n,name:a}=l,{localName:o,parentNode:r}=e,{forgive:u,warn:d=this.#i}=h,i=new Set;if(c.REG_LOGICAL_PSEUDO.test(a)){let t;if(this.#c.has(l))t=this.#c.get(l);else{const{branches:f}=(0,y.walkAST)(l),m=[],b=[];for(const[...p]of f){for(const A of p){const v=(0,y.generateCSS)(A);m.push(v)}const w=[],k=new Set;let N=p.shift();for(;N;)if(N.type===c.COMBINATOR?(w.push({combo:N,leaves:[...k]}),k.clear()):N&&k.add(N),p.length)N=p.shift();else{w.push({combo:null,leaves:[...k]}),k.clear();break}b.push(w)}t={astName:a,branches:f,twigBranches:b,selector:m.join(",")},this.#c.set(l,t)}const s=this._matchLogicalPseudoFunc(t,e,h);s&&i.add(s)}else if(Array.isArray(n))if(/^nth-(?:last-)?(?:child|of-type)$/.test(a)){const[t]=n;return this._matchAnPlusB(t,e,a,h)}else switch(a){case"dir":case"lang":{const t=O.matcher.matchSelector(l,e);t&&i.add(t);break}case"current":case"nth-col":case"nth-last-col":{if(d){const t=`Unsupported pseudo-class :${a}()`;throw new DOMException(t,c.NOT_SUPPORTED_ERR)}break}case"host":case"host-context":break;case"contains":{if(d){const t=`Unknown pseudo-class :${a}()`;throw new DOMException(t,c.NOT_SUPPORTED_ERR)}break}default:if(!u){const t=`Unknown pseudo-class :${a}()`;throw new DOMException(t,c.SYNTAX_ERR)}}else switch(a){case"any-link":case"link":{c.REG_ANCHOR.test(o)&&e.hasAttribute("href")&&i.add(e);break}case"local-link":{if(c.REG_ANCHOR.test(o)&&e.hasAttribute("href")){const{href:t,origin:s,pathname:f}=new URL(this.#s.URL),m=new URL(e.getAttribute("href"),t);m.origin===s&&m.pathname===f&&i.add(e)}break}case"visited":break;case"hover":{const{target:t,type:s}=this.#m??{};(s==="mouseover"||s==="pointerover")&&e.contains(t)&&i.add(e);break}case"active":{const{buttons:t,target:s,type:f}=this.#m??{};(f==="mousedown"||f==="pointerdown")&&t&c.BIT_01&&e.contains(s)&&i.add(e);break}case"target":{const{hash:t}=new URL(this.#s.URL);e.id&&t===`#${e.id}`&&this.#s.contains(e)&&i.add(e);break}case"target-within":{const{hash:t}=new URL(this.#s.URL);if(t){const s=t.replace(/^#/,"");let f=this.#s.getElementById(s);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.#s.documentElement&&i.add(e);break}case"focus":case"focus-visible":{const{target:t,type:s}=this.#m??{};if(e===this.#s.activeElement&&e.tabIndex>=0&&(a==="focus"||s==="keydown"&&e.contains(t))){let f=e,m=!0;for(;f;){if(f.disabled||f.hasAttribute("disabled")||f.hidden||f.hasAttribute("hidden")){m=!1;break}else{const{display:b,visibility:p}=this.#a.getComputedStyle(f);if(m=!(b==="none"||p==="hidden"),!m)break}if(f.parentNode&&f.parentNode.nodeType===c.ELEMENT_NODE)f=f.parentNode;else break}m&&i.add(e)}break}case"focus-within":{let t,s=this.#s.activeElement;if(s.tabIndex>=0)for(;s;){if(s===e){t=!0;break}s=s.parentNode}if(t){let f=e,m=!0;for(;f;){if(f.disabled||f.hasAttribute("disabled")||f.hidden||f.hasAttribute("hidden")){m=!1;break}else{const{display:b,visibility:p}=this.#a.getComputedStyle(f);if(m=!(b==="none"||p==="hidden"),!m)break}if(f.parentNode&&f.parentNode.nodeType===c.ELEMENT_NODE)f=f.parentNode;else break}m&&i.add(e)}break}case"open":{c.REG_INTERACT.test(o)&&e.hasAttribute("open")&&i.add(e);break}case"closed":{c.REG_INTERACT.test(o)&&!e.hasAttribute("open")&&i.add(e);break}case"disabled":{if(c.REG_FORM_CTRL.test(o)||(0,M.default)(o))if(e.disabled||e.hasAttribute("disabled"))i.add(e);else{let t=r;for(;t;){if(c.REG_FORM_GROUP.test(t.localName))if(t.localName==="fieldset"){if(t.disabled&&t.hasAttribute("disabled"))break}else break;t=t.parentNode}t&&r.localName!=="legend"&&(t.disabled||t.hasAttribute("disabled"))&&i.add(e)}break}case"enabled":{(c.REG_FORM_CTRL.test(o)||(0,M.default)(o))&&!(e.disabled&&e.hasAttribute("disabled"))&&i.add(e);break}case"read-only":{switch(o){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}case"input":{(!e.type||c.REG_TYPE_DATE.test(e.type)||c.REG_TYPE_TEXT.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,_.isContentEditable)(e)||i.add(e)}break}case"read-write":{switch(o){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||i.add(e);break}case"input":{(!e.type||c.REG_TYPE_DATE.test(e.type)||c.REG_TYPE_TEXT.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&i.add(e);break}default:(0,_.isContentEditable)(e)&&i.add(e)}break}case"placeholder-shown":{let t;if(e.placeholder?t=e.placeholder:e.hasAttribute("placeholder")&&(t=e.getAttribute("placeholder")),typeof t=="string"&&!/[\r\n]/.test(t)){let s;o==="textarea"?s=e:o==="input"&&(e.hasAttribute("type")?c.REG_TYPE_TEXT.test(e.getAttribute("type"))&&(s=e):s=e),s&&e.value===""&&i.add(e)}break}case"checked":{(e.checked&&o==="input"&&e.hasAttribute("type")&&c.REG_TYPE_CHECK.test(e.getAttribute("type"))||e.selected&&o==="option")&&i.add(e);break}case"indeterminate":{if(e.indeterminate&&o==="input"&&e.type==="checkbox"||o==="progress"&&!e.hasAttribute("value"))i.add(e);else if(o==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const t=e.name;let s=e.parentNode;for(;s&&s.localName!=="form";)s=s.parentNode;s||(s=this.#s.documentElement);const f=s.getElementsByTagName("input"),m=f.length;let b;for(let p=0;p<m;p++){const w=f[p];if(w.getAttribute("type")==="radio"&&(t?w.getAttribute("name")===t&&(b=!!w.checked):w.hasAttribute("name")||(b=!!w.checked),b))break}b||i.add(e)}break}case"default":{if(o==="button"&&!(e.hasAttribute("type")&&c.REG_TYPE_RESET.test(e.getAttribute("type")))||o==="input"&&e.hasAttribute("type")&&c.REG_TYPE_SUBMIT.test(e.getAttribute("type"))){let t=e.parentNode;for(;t&&t.localName!=="form";)t=t.parentNode;if(t){const s=this.#n;let f=(0,_.traverseNode)(t,s);for(f=s.firstChild();f&&t.contains(f);){const m=f.localName;let b;if(m==="button"?b=!(f.hasAttribute("type")&&c.REG_TYPE_RESET.test(f.getAttribute("type"))):m==="input"&&(b=f.hasAttribute("type")&&c.REG_TYPE_SUBMIT.test(f.getAttribute("type"))),b){f===e&&i.add(e);break}f=s.nextNode()}}}else if(o==="input"&&e.hasAttribute("type")&&c.REG_TYPE_CHECK.test(e.getAttribute("type"))&&(e.checked||e.hasAttribute("checked")))i.add(e);else if(o==="option"){let t=r,s=!1;for(;t&&t.localName!=="datalist";){if(t.localName==="select"){(t.multiple||t.hasAttribute("multiple"))&&(s=!0);break}t=t.parentNode}if(s)(e.selected||e.hasAttribute("selected"))&&i.add(e);else{const f=new Set,m=this.#n;let b=(0,_.traverseNode)(r,m);for(b=m.firstChild();b;){if(b.selected||b.hasAttribute("selected")){f.add(b);break}b=m.nextSibling()}f.size&&f.has(e)&&i.add(e)}}break}case"valid":{if(c.REG_FORM_VALID.test(o))e.checkValidity()&&(e.maxLength>=0?e.maxLength>=e.value.length&&i.add(e):i.add(e));else if(o==="fieldset"){const t=this.#n;let s=(0,_.traverseNode)(e,t);s=t.firstChild();let f;if(!s)f=!0;else for(;s&&e.contains(s)&&!(c.REG_FORM_VALID.test(s.localName)&&(s.checkValidity()?s.maxLength>=0?f=s.maxLength>=s.value.length:f=!0:f=!1,!f));)s=t.nextNode();f&&i.add(e)}break}case"invalid":{if(c.REG_FORM_VALID.test(o))e.checkValidity()?e.maxLength>=0&&e.maxLength<e.value.length&&i.add(e):i.add(e);else if(o==="fieldset"){const t=this.#n;let s=(0,_.traverseNode)(e,t);s=t.firstChild();let f;if(!s)f=!0;else for(;s&&e.contains(s)&&!(c.REG_FORM_VALID.test(s.localName)&&(s.checkValidity()?s.maxLength>=0?f=s.maxLength>=s.value.length:f=!0:f=!1,!f));)s=t.nextNode();f||i.add(e)}break}case"in-range":{o==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&c.REG_TYPE_RANGE.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":{o==="input"&&!(e.readonly||e.hasAttribute("readonly"))&&!(e.disabled||e.hasAttribute("disabled"))&&e.hasAttribute("type")&&c.REG_TYPE_RANGE.test(e.getAttribute("type"))&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&i.add(e);break}case"required":{let t;if(/^(?:select|textarea)$/.test(o))t=e;else if(o==="input")if(e.hasAttribute("type")){const s=e.getAttribute("type");(s==="file"||c.REG_TYPE_CHECK.test(s)||c.REG_TYPE_DATE.test(s)||c.REG_TYPE_TEXT.test(s))&&(t=e)}else t=e;t&&(e.required||e.hasAttribute("required"))&&i.add(e);break}case"optional":{let t;if(/^(?:select|textarea)$/.test(o))t=e;else if(o==="input")if(e.hasAttribute("type")){const s=e.getAttribute("type");(s==="file"||c.REG_TYPE_CHECK.test(s)||c.REG_TYPE_DATE.test(s)||c.REG_TYPE_TEXT.test(s))&&(t=e)}else t=e;t&&!(e.required||e.hasAttribute("required"))&&i.add(e);break}case"root":{e===this.#s.documentElement&&i.add(e);break}case"empty":{if(e.hasChildNodes()){const t=this.#r.createTreeWalker(e,c.SHOW_ALL);let s=t.firstChild(),f;for(;s&&(f=s.nodeType!==c.ELEMENT_NODE&&s.nodeType!==c.TEXT_NODE,!!f);)s=t.nextSibling();f&&i.add(e)}else i.add(e);break}case"first-child":{(r&&e===r.firstElementChild||e===this.#t)&&i.add(e);break}case"last-child":{(r&&e===r.lastElementChild||e===this.#t)&&i.add(e);break}case"only-child":{(r&&e===r.firstElementChild&&e===r.lastElementChild||e===this.#t)&&i.add(e);break}case"first-of-type":{if(r){const[t]=this._collectNthOfType({a:0,b:1},e);t&&i.add(t)}else e===this.#t&&i.add(e);break}case"last-of-type":{if(r){const[t]=this._collectNthOfType({a:0,b:1,reverse:!0},e);t&&i.add(t)}else e===this.#t&&i.add(e);break}case"only-of-type":{if(r){const[t]=this._collectNthOfType({a:0,b:1},e);if(t===e){const[s]=this._collectNthOfType({a:0,b:1,reverse:!0},e);s===e&&i.add(e)}}else e===this.#t&&i.add(e);break}case"defined":{const t=e.getAttribute("is");t?(0,M.default)(t)&&this.#a.customElements.get(t)&&i.add(e):(0,M.default)(o)?this.#a.customElements.get(o)&&i.add(e):(e instanceof this.#a.HTMLElement||e instanceof this.#a.SVGElement)&&i.add(e);break}case"popover-open":{if(e.popover){const{display:t}=this.#a.getComputedStyle(e);t!=="none"&&i.add(e)}break}case"host":case"host-context":break;case"after":case"before":case"first-letter":case"first-line":{if(d){const t=`Unsupported pseudo-element ::${a}`;throw new DOMException(t,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){const t=`Unsupported pseudo-class :${a}`;throw new DOMException(t,c.NOT_SUPPORTED_ERR)}break}default:if(a.startsWith("-webkit-")){if(d){const t=`Unsupported pseudo-class :${a}`;throw new DOMException(t,c.NOT_SUPPORTED_ERR)}}else if(!u){const t=`Unknown pseudo-class :${a}`;throw new DOMException(t,c.SYNTAX_ERR)}}return i}_matchShadowHostPseudoClass(l,e){const{children:h,name:n}=l;let a;if(Array.isArray(h)){const{branches:o}=(0,y.walkAST)(h[0]),[r]=o,[...u]=r,{host:d}=e;if(n==="host"){let i;for(const t of u){const{type:s}=t;if(s===c.COMBINATOR){const m=`Invalid selector ${(0,y.generateCSS)(l)}`;throw new DOMException(m,c.SYNTAX_ERR)}if(i=this._matchSelector(t,d).has(d),!i)break}i&&(a=e)}else if(n==="host-context"){let i=d,t;for(;i;){for(const s of u){const{type:f}=s;if(f===c.COMBINATOR){const b=`Invalid selector ${(0,y.generateCSS)(l)}`;throw new DOMException(b,c.SYNTAX_ERR)}if(t=this._matchSelector(s,i).has(i),!t)break}if(t)break;i=i.parentNode}t&&(a=e)}}else if(n==="host")a=e;else{const o=`Invalid selector :${n}`;throw new DOMException(o,c.SYNTAX_ERR)}return a??null}_matchSelector(l,e,h){const{type:n}=l,a=new Set;if(l.name===c.EMPTY)return a;const o=(0,y.unescapeSelector)(l.name);if(typeof o=="string"&&o!==l.name&&(l.name=o),e.nodeType===c.ELEMENT_NODE)switch(n){case c.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(o,h);break}case c.SELECTOR_ID:{e.id===o&&a.add(e);break}case c.SELECTOR_CLASS:{e.classList.contains(o)&&a.add(e);break}case c.SELECTOR_PSEUDO_CLASS:return this._matchPseudoClassSelector(l,e,h);default:{const r=O.matcher.matchSelector(l,e,h);r&&a.add(r)}}else if(this.#u&&n===c.SELECTOR_PSEUDO_CLASS&&e.nodeType===c.DOCUMENT_FRAGMENT_NODE){if(o!=="has"&&c.REG_LOGICAL_PSEUDO.test(o))return this._matchPseudoClassSelector(l,e,h);if(c.REG_SHADOW_HOST.test(o)){const r=this._matchShadowHostPseudoClass(l,e,h);r&&a.add(r)}}return a}_matchLeaves(l,e,h){const{attributes:n,localName:a,nodeType:o}=e;let r=this.#_.get(l),u;if(r&&r.has(e)){const{attr:d,matched:i}=r.get(e);n?.length===d&&(u=i)}if(typeof u!="boolean"){let d;o===c.ELEMENT_NODE&&c.REG_FORM.test(a)?d=!1:d=!0;for(const i of l){const{name:t,type:s}=i;if(s===c.SELECTOR_PSEUDO_CLASS&&t==="dir"&&(d=!1),u=this._matchSelector(i,e,h).has(e),!u)break}d&&(r||(r=new WeakMap),r.set(e,{attr:n?.length,matched:u}),this.#_.set(l,r))}return!!u}_matchHTMLCollection(l,e={}){const{compound:h,filterLeaves:n}=e,a=new Set,o=l.length;if(o)if(h)for(let r=0;r<o;r++){const u=l[r];this._matchLeaves(n,u,e)&&a.add(u)}else{const r=[].slice.call(l);return new Set(r)}return a}_findDescendantNodes(l,e,h){const[n,...a]=l,o=a.length>0,{type:r}=n,u=(0,y.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(r){case c.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(u,h);break}case c.SELECTOR_ID:{if(this.#t.nodeType===c.ELEMENT_NODE)i=!0;else{const t=this.#t.getElementById(u);t&&t!==e&&e.contains(t)&&(o?this._matchLeaves(a,t,h)&&d.add(t):d.add(t))}break}case c.SELECTOR_CLASS:{const t=e.getElementsByClassName(u);d=this._matchHTMLCollection(t,{compound:o,filterLeaves:a});break}case c.SELECTOR_TYPE:{if(this.#s.contentType==="text/html"&&!/[*|]/.test(u)){const t=e.getElementsByTagName(u);d=this._matchHTMLCollection(t,{compound:o,filterLeaves:a})}else i=!0;break}default:i=!0}return{nodes:d,pending:i}}_matchCombinator(l,e,h={}){const{combo:n,leaves:a}=l,{name:o}=n,{parentNode:r}=e,{dir:u}=h,d=new Set;if(u===x)switch(o){case"+":{const i=e.nextElementSibling;i&&this._matchLeaves(a,i,h)&&d.add(i);break}case"~":{if(r){const i=this._createTreeWalker(r);let t=(0,_.traverseNode)(e,i);for(t=i.nextSibling();t;)this._matchLeaves(a,t,h)&&d.add(t),t=i.nextSibling()}break}case">":{const i=this._createTreeWalker(e);let t=(0,_.traverseNode)(e,i);for(t=i.firstChild();t;)this._matchLeaves(a,t,h)&&d.add(t),t=i.nextSibling();break}case" ":default:{const{nodes:i,pending:t}=this._findDescendantNodes(a,e);if(i.size)return i;if(t){const s=this._createTreeWalker(e);let f=(0,_.traverseNode)(e,s);for(f=s.nextNode();f&&e.contains(f);)this._matchLeaves(a,f,h)&&d.add(f),f=s.nextNode()}}}else switch(o){case"+":{const i=e.previousElementSibling;i&&this._matchLeaves(a,i,h)&&d.add(i);break}case"~":{if(r){const i=this._createTreeWalker(r);let t=(0,_.traverseNode)(r,i);for(t=i.firstChild();t&&t!==e;)this._matchLeaves(a,t,h)&&d.add(t),t=i.nextSibling()}break}case">":{r&&this._matchLeaves(a,r,h)&&d.add(r);break}case" ":default:{const i=[];let t=r;for(;t;)this._matchLeaves(a,t,h)&&i.push(t),t=t.parentNode;if(i.length)return new Set(i.reverse())}}return d}_findNode(l,e){const{node:h}=e;let n=(0,_.traverseNode)(h,this.#f),a;if(n)for(n.nodeType!==c.ELEMENT_NODE?n=this.#f.nextNode():n===h&&n!==this.#t&&(n=this.#f.nextNode());n;){if(this._matchLeaves(l,n,{warn:this.#i})){a=n;break}n=this.#f.nextNode()}return a??null}_matchSelf(l){const e=[],h=this._matchLeaves(l,this.#e,{warn:this.#i});let n=!1;return h&&(e.push(this.#e),n=!0),[e,n]}_findLineal(l,e={}){const{complex:h}=e,n=[];let a=this._matchLeaves(l,this.#e,{warn:this.#i}),o=!1;if(a&&(n.push(this.#e),o=!0),!a||h){let r=this.#e.parentNode;for(;r&&(a=this._matchLeaves(l,r,{warn:this.#i}),a&&(n.push(r),o=!0),r.parentNode);)r=r.parentNode}return[n,o]}_findFirst(l){const e=[],h=this._findNode(l,{node:this.#e});let n=!1;return h&&(e.push(h),n=!0),[e,n]}_findFromHTMLCollection(l,e={}){const{complex:h,compound:n,filterLeaves:a,targetType:o}=e;let r=[],u=!1,d=!1;const i=l.length;if(i)if(this.#e.nodeType===c.ELEMENT_NODE)for(let t=0;t<i;t++){const s=l[t];if(s!==this.#e&&(this.#e.contains(s)||s.contains(this.#e))){if(n){if(this._matchLeaves(a,s,{warn:this.#i})&&(r.push(s),u=!0,o===E))break}else if(r.push(s),u=!0,o===E)break}}else if(h)if(n)for(let t=0;t<i;t++){const s=l[t];if(this._matchLeaves(a,s,{warn:this.#i})&&(r.push(s),u=!0,o===E))break}else r=[].slice.call(l),u=!0,d=!0;else if(n)for(let t=0;t<i;t++){const s=l[t];if(this._matchLeaves(a,s,{warn:this.#i})&&(r.push(s),u=!0,o===E))break}else r=[].slice.call(l),u=!0,d=!0;return[r,u,d]}_findEntryNodes(l,e,h){const{leaves:n}=l,[a,...o]=n,r=o.length>0,{name:u,type:d}=a;let i=[],t=!1,s=!1,f=!1;switch(d){case c.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(u,{warn:this.#i});break}case c.SELECTOR_ID:{if(e===R)[i,s]=this._matchSelf(n);else if(e===C)[i,s]=this._findLineal(n,{complex:h});else if(e===E&&this.#t.nodeType!==c.ELEMENT_NODE){const m=this.#t.getElementById(u);m&&(r?this._matchLeaves(o,m,{warn:this.#i})&&(i.push(m),s=!0):(i.push(m),s=!0))}else e===E?[i,s]=this._findFirst(n):f=!0;break}case c.SELECTOR_CLASS:{if(e===R)[i,s]=this._matchSelf(n);else if(e===C)[i,s]=this._findLineal(n,{complex:h});else if(this.#t.nodeType===c.DOCUMENT_NODE){const m=this.#t.getElementsByClassName(u);m.length&&([i,s,t]=this._findFromHTMLCollection(m,{complex:h,compound:r,filterLeaves:o,targetType:e}))}else e===E?[i,s]=this._findFirst(n):f=!0;break}case c.SELECTOR_TYPE:{if(e===R)[i,s]=this._matchSelf(n);else if(e===C)[i,s]=this._findLineal(n,{complex:h});else if(this.#s.contentType==="text/html"&&this.#t.nodeType===c.DOCUMENT_NODE&&!/[*|]/.test(u)){const m=this.#t.getElementsByTagName(u);m.length&&([i,s,t]=this._findFromHTMLCollection(m,{complex:h,compound:r,filterLeaves:o,targetType:e}))}else e===E?[i,s]=this._findFirst(n):f=!0;break}default:if(e!==C&&c.REG_SHADOW_HOST.test(u)){if(this.#u&&this.#e.nodeType===c.DOCUMENT_FRAGMENT_NODE){const m=this._matchShadowHostPseudoClass(a,this.#e);m&&(i.push(m),s=!0)}}else e===R?[i,s]=this._matchSelf(n):e===C?[i,s]=this._findLineal(n,{complex:h}):e===E?[i,s]=this._findFirst(n):f=!0}return{collected:t,compound:r,filtered:s,nodes:i,pending:f}}_collectNodes(l){const e=this.#l.values();if(l===L||l===E){const h=new Set;let n=0;for(const{branch:a}of e){const o=a.length,r=o>1,u=a[0];let d,i;if(r){const{combo:p,leaves:[{name:w,type:k}]}=u,N=a[o-1],{leaves:[{name:A,type:v}]}=N;if(v===c.SELECTOR_PSEUDO_ELEMENT||v===c.SELECTOR_ID)d=S,i=N;else if(k===c.SELECTOR_PSEUDO_ELEMENT||k===c.SELECTOR_ID)d=x,i=u;else if(l===L)if(w==="*"&&k===c.SELECTOR_TYPE)d=S,i=N;else if(A==="*"&&v===c.SELECTOR_TYPE)d=x,i=u;else if(o===2){const{name:T}=p;/^[+~]$/.test(T)?(d=S,i=N):(d=x,i=u)}else d=x,i=u;else if(A==="*"&&v===c.SELECTOR_TYPE)d=x,i=u;else if(w==="*"&&k===c.SELECTOR_TYPE)d=S,i=N;else{let T;for(const{combo:D,leaves:[$]}of a){const{name:F,type:z}=$;if(z===c.SELECTOR_PSEUDO_CLASS&&F==="dir"){T=!1;break}if(!T&&D){const{name:H}=D;/^[+~]$/.test(H)&&(T=!0)}}T?(d=x,i=u):(d=S,i=N)}}else d=S,i=u;const{collected:t,compound:s,filtered:f,nodes:m,pending:b}=this._findEntryNodes(i,l,r);m.length?(this.#l[n].find=!0,this.#d[n]=m):b&&h.add(new Map([["index",n],["twig",i]])),this.#l[n].collected=t,this.#l[n].dir=d,this.#l[n].filtered=f||!s,n++}if(h.size){let a,o;this.#e!==this.#t&&this.#e.nodeType===c.ELEMENT_NODE?(a=this.#e,o=this.#f):(a=this.#t,o=this.#n);let r=(0,_.traverseNode)(a,o);for(;r;){let u=!1;if(this.#e.nodeType===c.ELEMENT_NODE?r===this.#e?u=!0:u=this.#e.contains(r):u=!0,u)for(const d of h){const{leaves:i}=d.get("twig");if(this._matchLeaves(i,r,{warn:this.#i})){const s=d.get("index");this.#l[s].filtered=!0,this.#l[s].find=!0,this.#d[s].push(r)}}r!==o.currentNode&&(r=(0,_.traverseNode)(r,o)),r=o.nextNode()}}}else{let h=0;for(const{branch:n}of e){const a=n[n.length-1],o=n.length>1,{compound:r,filtered:u,nodes:d}=this._findEntryNodes(a,l,o);d.length&&(this.#l[h].find=!0,this.#d[h]=d),this.#l[h].dir=S,this.#l[h].filtered=u||!r,h++}}return[this.#l,this.#d]}_getCombinedNodes(l,e,h){const n=[];for(const a of e){const o=this._matchCombinator(l,a,{dir:h,warn:this.#i});o.size&&n.push(...o)}return n.length?new Set(n):new Set}_matchNodeNext(l,e,h){const{combo:n,index:a}=h,{combo:o,leaves:r}=l[a],u={combo:n,leaves:r},d=this._getCombinedNodes(u,e,x);let i;if(d.size)if(a===l.length-1){const[t]=(0,_.sortNodes)(d);i=t}else i=this._matchNodeNext(l,d,{combo:o,index:a+1});return i??null}_matchNodePrev(l,e,h){const{index:n}=h,a=l[n],o=new Set([e]),r=this._getCombinedNodes(a,o,S);let u;if(r.size){if(n===0)u=e;else for(const d of r)if(this._matchNodePrev(l,d,{index:n-1}))return e}return u??null}_find(l){(l===L||l===E)&&this._prepareQuerySelectorWalker();const[[...e],h]=this._collectNodes(l),n=e.length;let a=new Set;for(let o=0;o<n;o++){const{branch:r,collected:u,dir:d,find:i}=e[o],t=r.length;if(t&&i){const s=h[o],f=s.length,m=t-1;if(m===0)if((l===L||l===E)&&this.#e.nodeType===c.ELEMENT_NODE)for(let b=0;b<f;b++){const p=s[b];if(p!==this.#e&&this.#e.contains(p)&&(a.add(p),l!==L))break}else if(l===L)if(a.size){const b=[...a];a=new Set([...b,...s]),this.#b=!0}else a=new Set(s);else{const[b]=s;a.add(b)}else if(l===L)if(d===x){let{combo:b}=r[0];for(const p of s){let w=new Set([p]);for(let k=1;k<t;k++){const{combo:N,leaves:A}=r[k],v={combo:b,leaves:A};if(w=this._getCombinedNodes(v,w,d),w.size)if(k===m)if(a.size){const T=[...a];a=new Set([...T,...w]),this.#b=!0}else a=w;else b=N;else break}}}else for(const b of s){let p=new Set([b]);for(let w=m-1;w>=0;w--){const k=r[w];if(p=this._getCombinedNodes(k,p,d),p.size)w===0&&(a.add(b),t>1&&a.size>1&&(this.#b=!0));else break}}else if(l===E&&d===x){const{combo:b}=r[0];let p;for(const w of s)if(p=this._matchNodeNext(r,new Set([w]),{combo:b,index:1}),p){a.add(p);break}if(!p&&!u){const{leaves:w}=r[0],[k]=s;let N=this._findNode(w,{node:k});for(;N;){if(p=this._matchNodeNext(r,new Set([N]),{combo:b,index:1}),p){a.add(p);break}N=this._findNode(w,{node:N})}}}else{let b;for(const p of s)if(b=this._matchNodePrev(r,p,{index:m-1}),b){a.add(p);break}if(!b&&!u&&l===E){const{leaves:p}=r[m],[w]=s;let k=this._findNode(p,{node:w});for(;k;){if(b=this._matchNodePrev(r,k,{index:m-1}),b){a.add(k);break}k=this._findNode(p,{node:k})}}}}}return a}matches(l,e,h){let n;try{if(e?.nodeType!==c.ELEMENT_NODE){const r=`Unexpected node ${e?.nodeName}`;throw new TypeError(r)}const a=e.ownerDocument;if(a===this.#r&&a.contentType==="text/html"){const r={complex:c.REG_COMPLEX_A.test(l),descendant:!0};if((0,y.filterSelector)(l,r))return this.#o.match(l,e)}this._setup(l,e,h),n=this._find(R).size}catch(a){this._onError(a)}return!!n}closest(l,e,h){let n;try{if(e?.nodeType!==c.ELEMENT_NODE){const r=`Unexpected node ${e?.nodeName}`;throw new TypeError(r)}const a=e.ownerDocument;if(a===this.#r&&a.contentType==="text/html"){const r={complex:c.REG_COMPLEX_A.test(l),descendant:!0};if((0,y.filterSelector)(l,r))return this.#o.closest(l,e)}this._setup(l,e,h);const o=this._find(C);if(o.size){let r=this.#e;for(;r;){if(o.has(r)){n=r;break}r=r.parentNode}}}catch(a){this._onError(a)}return n??null}querySelector(l,e,h){let n;try{(0,_.verifyNode)(e);let a;if(e.nodeType===c.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#r&&a.contentType==="text/html"){const r={complex:c.REG_COMPLEX_B.test(l),descendant:!1};if((0,y.filterSelector)(l,r))return this.#o.first(l,e)}this._setup(l,e,h);const o=this._find(E);o.delete(this.#e),o.size&&([n]=(0,_.sortNodes)(o))}catch(a){this._onError(a)}return n??null}querySelectorAll(l,e,h){let n;try{(0,_.verifyNode)(e);let a;if(e.nodeType===c.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#r&&a.contentType==="text/html"){const r={complex:c.REG_COMPLEX_B.test(l),descendant:!0};if((0,y.filterSelector)(l,r))return this.#o.select(l,e)}this._setup(l,e,h);const o=this._find(L);o.delete(this.#e),o.size&&(this.#b?n=(0,_.sortNodes)(o):n=[...o])}catch(a){this._onError(a)}return n??[]}}0&&(module.exports={Finder}); //# sourceMappingURL=finder.js.map diff --git a/dist/cjs/js/finder.js.map b/dist/cjs/js/finder.js.map index d36a50ff..c4dcf193 100644 --- a/dist/cjs/js/finder.js.map +++ b/dist/cjs/js/finder.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/js/finder.js"], - "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport nwsapi from '@asamuzakjp/nwsapi';\nimport {\n isContentEditable, isInShadowTree, resolveContent, sortNodes, verifyNode\n} from './dom-util.js';\nimport { matcher } from './matcher.js';\nimport {\n filterSelector, generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\n\n/* constants */\nimport {\n BIT_01, COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE,\n EMPTY, NOT_SUPPORTED_ERR, REG_ANCHOR, REG_COMPLEX_A, REG_COMPLEX_B,\n REG_FORM, REG_FORM_CTRL, REG_FORM_GROUP, REG_FORM_VALID, REG_INTERACT,\n REG_LOGICAL_PSEUDO, REG_SHADOW_HOST, REG_TYPE_CHECK, REG_TYPE_DATE,\n REG_TYPE_RANGE, REG_TYPE_RESET, REG_TYPE_SUBMIT, REG_TYPE_TEXT,\n SELECTOR_CLASS, SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT,\n SELECTOR_TYPE, SHOW_ALL, SYNTAX_ERR, TEXT_NODE, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: 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 #cache;\n #content;\n #descendant;\n #document;\n #event;\n #node;\n #nodes;\n #noexcept;\n #nwsapi;\n #qswalker;\n #results;\n #root;\n #shadow;\n #sort;\n #walker;\n #walkers;\n #warn;\n #window;\n\n /**\n * construct\n * @param {object} window - window\n * @param {object} document - document\n */\n constructor(window, document) {\n this.#window = window;\n this.#document = document ?? window.document;\n this.#cache = new WeakMap();\n this.#results = new WeakMap();\n this._initNwsapi();\n }\n\n /**\n * handle error\n * @private\n * @param {Error} e - Error\n * @throws Error\n * @returns {void}\n */\n _onError(e) {\n if (!this.#noexcept) {\n if (e instanceof DOMException ||\n e instanceof this.#window.DOMException) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else {\n throw new this.#window.DOMException(e.message, e.name);\n }\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @private\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {object} [opt.event] - MouseEvent, KeyboardEvent\n * @param {boolean} [opt.invalidate] - invalidate (for jsdom)\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, invalidate, noexcept, warn } = opt;\n // clear cache in jsdom internal process\n if (invalidate && node.nodeType === ELEMENT_NODE) {\n this.#cache = new WeakMap();\n }\n this.#noexcept = !!noexcept;\n this.#warn = !!warn;\n this.#event = this._setEvent(event);\n this.#node = node;\n [this.#content, this.#root, this.#walker] = resolveContent(node);\n this.#shadow = isInShadowTree(node);\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#walkers = new WeakMap();\n return node;\n }\n\n /**\n * init nwsapi\n * @private\n * @returns {object} - nwsapi\n */\n _initNwsapi() {\n this.#nwsapi = nwsapi({\n DOMException: this.#window.DOMException,\n document: this.#document\n });\n this.#nwsapi.configure({\n LOGERRORS: false\n });\n return this.#nwsapi;\n };\n\n /**\n * set event\n * @private\n * @param {object} event - instance of MouseEvent, KeyboardEvent\n * @returns {object} - result\n */\n _setEvent(event) {\n return (event instanceof this.#window.MouseEvent ||\n event instanceof this.#window.KeyboardEvent)\n ? event\n : null;\n }\n\n /**\n * correspond ast and nodes\n * @private\n * @param {string} selector - CSS selector\n * @returns {Array.<Array.<object|undefined>>} - array of ast and nodes\n */\n _correspond(selector) {\n const nodes = [];\n this.#descendant = false;\n let ast;\n if (this.#content) {\n const cachedItem = this.#cache.get(this.#content);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n this.#descendant = item.descendant;\n ast = item.ast;\n }\n }\n if (ast) {\n const l = ast.length;\n for (let i = 0; i < l; i++) {\n ast[i].collected = false;\n ast[i].dir = null;\n ast[i].filtered = false;\n ast[i].find = false;\n nodes[i] = [];\n }\n } else {\n let cssAst;\n try {\n cssAst = parseSelector(selector);\n } catch (e) {\n this._onError(e);\n }\n const { branches, info: { hasPseudo } } = walkAST(cssAst);\n let descendant = false;\n let i = 0;\n ast = [];\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n const msg = `Invalid selector ${selector}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n const itemName = item.name;\n if (/^[\\s>]$/.test(itemName)) {\n descendant = true;\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (item) {\n let { name: itemName } = item;\n if (itemName && typeof itemName === 'string') {\n itemName = unescapeSelector(itemName);\n 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 if (this.#content && !hasPseudo) {\n let cachedItem;\n if (this.#cache.has(this.#content)) {\n cachedItem = this.#cache.get(this.#content);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant\n });\n this.#cache.set(this.#content, cachedItem);\n }\n this.#descendant = descendant;\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * create tree walker\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {object} - tree walker\n */\n _createTreeWalker(node) {\n let walker;\n if (this.#walkers.has(node)) {\n walker = this.#walkers.get(node);\n } else {\n walker = this.#document.createTreeWalker(node, WALKER_FILTER);\n this.#walkers.set(node, walker);\n }\n return walker;\n }\n\n /**\n * prepare querySelector walker\n * @private\n * @returns {object} - tree walker\n */\n _prepareQuerySelectorWalker() {\n this.#qswalker = this._createTreeWalker(this.#node);\n this.#sort = false;\n return this.#qswalker;\n }\n\n /**\n * traverse tree walker\n * @private\n * @param {object} node - Element node\n * @param {object} [walker] - tree walker\n * @returns {?object} - current node\n */\n _traverse(node, walker = this.#walker) {\n let refNode = walker.currentNode;\n let current;\n if (refNode === node) {\n current = refNode;\n } else if (refNode.contains(node)) {\n refNode = walker.nextNode();\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n if (refNode !== walker.root) {\n while (refNode) {\n if (refNode === walker.root || refNode === node) {\n break;\n }\n refNode = walker.parentNode();\n }\n }\n if (node?.nodeType === ELEMENT_NODE) {\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n current = refNode;\n }\n }\n return current ?? null;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n const matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#cache.has(selector)) {\n selectorBranches = this.#cache.get(selector);\n } else {\n const { branches } = walkAST(selector);\n selectorBranches = branches;\n this.#cache.set(selector, selectorBranches);\n }\n }\n if (parentNode) {\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n refNode = this._traverse(parentNode, walker);\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = walker.firstChild();\n while (refNode) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (selectorNodes.has(refNode)) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n i++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n } else if (!selector) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n }\n }\n }\n // :nth-child()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n if (refNode && nth >= 0 && nth < l) {\n if (selectorNodes.size) {\n if (selectorNodes.has(refNode)) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(refNode);\n }\n nth += a;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n } else {\n break;\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n // :first-of-type, :last-of-type\n if (a === 0) {\n if (b > 0 && b <= l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = 0;\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n matched.add(node);\n }\n return matched;\n }\n\n /**\n * match An+B\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {string} nthName - nth pseudo-class name\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchAnPlusB(ast, node, nthName, opt) {\n const {\n nth: {\n a,\n b,\n name: nthIdentName\n },\n selector\n } = ast;\n const anbMap = new Map();\n if (nthIdentName) {\n if (nthIdentName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (nthIdentName === 'odd') {\n anbMap.set('a', 2);\n anbMap.set('b', 1);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n } else {\n if (typeof a === 'string' && /-?\\d+/.test(a)) {\n anbMap.set('a', a * 1);\n } else {\n anbMap.set('a', 0);\n }\n if (typeof b === 'string' && /-?\\d+/.test(b)) {\n anbMap.set('b', b * 1);\n } else {\n anbMap.set('b', 0);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n }\n if (/^nth-(?:last-)?child$/.test(nthName)) {\n if (selector) {\n anbMap.set('selector', selector);\n }\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthChild(anb, node, opt);\n return nodes;\n } else if (/^nth-(?:last-)?of-type$/.test(nthName)) {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n return nodes;\n }\n return new Set();\n }\n\n /**\n * match :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_PSEUDO.test(astName)) {\n let astData;\n if (this.#cache.has(ast)) {\n astData = this.#cache.get(ast);\n } else {\n const { branches } = walkAST(ast);\n const selectors = [];\n const twigBranches = [];\n for (const [...leaves] of branches) {\n for (const leaf of leaves) {\n const css = generateCSS(leaf);\n selectors.push(css);\n }\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches,\n selector: selectors.join(',')\n };\n this.#cache.set(ast, astData);\n }\n const res = this._matchLogicalPseudoFunc(astData, node, opt);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n // :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 = matcher.matchSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // dropped from CSS Selectors 3\n case 'contains': {\n if (warn) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n 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.#content.URL);\n const attrURL = new URL(node.getAttribute('href'), href);\n if (attrURL.origin === origin && attrURL.pathname === pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case 'hover': {\n const { target, type } = this.#event ?? {};\n if ((type === 'mouseover' || type === 'pointerover') &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'active': {\n const { buttons, target, type } = this.#event ?? {};\n if ((type === 'mousedown' || type === 'pointerdown') &&\n buttons & BIT_01 && node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'target': {\n const { hash } = new URL(this.#content.URL);\n if (node.id && hash === `#${node.id}` &&\n this.#content.contains(node)) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n const { hash } = new URL(this.#content.URL);\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#content.getElementById(id);\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n }\n break;\n }\n case 'scope': {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (!this.#shadow && node === this.#node) {\n matched.add(node);\n }\n } else if (node === this.#content.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus':\n case 'focus-visible': {\n const { target, type } = this.#event ?? {};\n if (node === this.#content.activeElement && node.tabIndex >= 0 &&\n (astName === 'focus' ||\n (type === 'keydown' && node.contains(target)))) {\n let refNode = node;\n let focus = true;\n while (refNode) {\n if (refNode.disabled || refNode.hasAttribute('disabled') ||\n refNode.hidden || refNode.hasAttribute('hidden')) {\n focus = false;\n break;\n } else {\n const { display, visibility } =\n this.#window.getComputedStyle(refNode);\n focus = !(display === 'none' || visibility === 'hidden');\n if (!focus) {\n break;\n }\n }\n if (refNode.parentNode &&\n refNode.parentNode.nodeType === ELEMENT_NODE) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n if (focus) {\n matched.add(node);\n }\n }\n break;\n }\n case 'focus-within': {\n let active;\n let current = this.#content.activeElement;\n if (current.tabIndex >= 0) {\n while (current) {\n if (current === node) {\n active = true;\n break;\n }\n current = current.parentNode;\n }\n }\n if (active) {\n let refNode = node;\n let focus = true;\n while (refNode) {\n if (refNode.disabled || refNode.hasAttribute('disabled') ||\n refNode.hidden || refNode.hasAttribute('hidden')) {\n focus = false;\n break;\n } else {\n const { display, visibility } =\n this.#window.getComputedStyle(refNode);\n focus = !(display === 'none' || visibility === 'hidden');\n if (!focus) {\n break;\n }\n }\n if (refNode.parentNode &&\n refNode.parentNode.nodeType === ELEMENT_NODE) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n if (focus) {\n matched.add(node);\n }\n }\n break;\n }\n case 'open': {\n if (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) || isCustomElementName(localName)) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else {\n let parent = parentNode;\n while (parent) {\n if (REG_FORM_GROUP.test(parent.localName)) {\n if (parent.localName === 'fieldset') {\n if (parent.disabled && parent.hasAttribute('disabled')) {\n break;\n }\n } else {\n break;\n }\n }\n parent = parent.parentNode;\n }\n if (parent && parentNode.localName !== 'legend' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((REG_FORM_CTRL.test(localName) ||\n isCustomElementName(localName)) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'read-only': {\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || REG_TYPE_DATE.test(node.type) ||\n REG_TYPE_TEXT.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_TYPE_DATE.test(node.type) ||\n REG_TYPE_TEXT.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.#content.documentElement;\n }\n const items = parent.getElementsByTagName('input');\n const l = items.length;\n let checked;\n for (let i = 0; i < l; i++) {\n const item = items[i];\n if (item.getAttribute('type') === 'radio') {\n if (nodeName) {\n if (item.getAttribute('name') === nodeName) {\n checked = !!item.checked;\n }\n } else if (!item.hasAttribute('name')) {\n checked = !!item.checked;\n }\n if (checked) {\n break;\n }\n }\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n // 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 = this._traverse(form, walker);\n nextNode = walker.firstChild();\n while (nextNode && form.contains(nextNode)) {\n const nodeName = nextNode.localName;\n let m;\n if (nodeName === 'button') {\n m = !(nextNode.hasAttribute('type') &&\n 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.checked || node.hasAttribute('checked'))) {\n matched.add(node);\n // option\n } else if (localName === 'option') {\n let parent = parentNode;\n let isMultiple = false;\n while (parent) {\n if (parent.localName === 'datalist') {\n break;\n } else if (parent.localName === 'select') {\n if (parent.multiple || parent.hasAttribute('multiple')) {\n isMultiple = true;\n }\n break;\n }\n parent = parent.parentNode;\n }\n if (isMultiple) {\n if (node.selected || node.hasAttribute('selected')) {\n matched.add(node);\n }\n } else {\n const defaultOpt = new Set();\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.selected || refNode.hasAttribute('selected')) {\n defaultOpt.add(refNode);\n break;\n }\n refNode = walker.nextSibling();\n }\n if (defaultOpt.size) {\n if (defaultOpt.has(node)) {\n matched.add(node);\n }\n }\n }\n }\n break;\n }\n case 'valid': {\n if (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 = this._traverse(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 = this._traverse(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_TYPE_DATE.test(inputType) ||\n REG_TYPE_TEXT.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_TYPE_DATE.test(inputType) ||\n REG_TYPE_TEXT.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n !(node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === this.#content.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n let refNode = walker.firstChild();\n let bool;\n while (refNode) {\n bool = refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if ((parentNode && node === parentNode.firstElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode && node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) || node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'first-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1 === node) {\n const [node2] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node2 === node) {\n matched.add(node);\n }\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'defined': {\n const attr = node.getAttribute('is');\n if (attr) {\n if (isCustomElementName(attr) &&\n this.#window.customElements.get(attr)) {\n matched.add(node);\n }\n } else if (isCustomElementName(localName)) {\n if (this.#window.customElements.get(localName)) {\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) {\n const { display } = this.#window.getComputedStyle(node);\n if (display !== 'none') {\n matched.add(node);\n }\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // legacy pseudo-elements\n case 'after':\n case 'before':\n case 'first-letter':\n case 'first-line': {\n if (warn) {\n const msg = `Unsupported pseudo-element ::${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n // 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 const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match shadow host pseudo class\n * @private\n * @param {object} ast - AST\n * @param {object} node - DocumentFragment node\n * @returns {?object} - matched node\n */\n _matchShadowHostPseudoClass(ast, node) {\n const { children: astChildren, name: astName } = ast;\n let res;\n if (Array.isArray(astChildren)) {\n const { 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 const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n } else if (astName === 'host-context') {\n let parent = host;\n let bool;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else if (astName === 'host') {\n res = node;\n } else {\n const msg = `Invalid selector :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n return res ?? null;\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchSelector(ast, node, opt) {\n const { type: astType } = ast;\n const matched = new Set();\n if (ast.name === EMPTY) {\n return matched;\n }\n const astName = unescapeSelector(ast.name);\n if (typeof astName === 'string' && astName !== ast.name) {\n ast.name = astName;\n }\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(astName, opt);\n break;\n }\n case SELECTOR_ID: {\n if (node.id === astName) {\n matched.add(node);\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (node.classList.contains(astName)) {\n matched.add(node);\n }\n break;\n }\n case SELECTOR_PSEUDO_CLASS: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n }\n default: {\n const res = matcher.matchSelector(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n } else if (this.#shadow && astType === SELECTOR_PSEUDO_CLASS &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (astName !== 'has' && REG_LOGICAL_PSEUDO.test(astName)) {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n } else if (REG_SHADOW_HOST.test(astName)) {\n const res = this._matchShadowHostPseudoClass(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n return matched;\n }\n\n /**\n * match leaves\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchLeaves(leaves, node, opt) {\n const { attributes, localName, nodeType } = node;\n let result = this.#results.get(leaves);\n let bool;\n if (result && result.has(node)) {\n const { attr, matched } = result.get(node);\n if (attributes?.length === attr) {\n bool = matched;\n }\n }\n if (typeof bool !== 'boolean') {\n let save;\n if (nodeType === ELEMENT_NODE && REG_FORM.test(localName)) {\n save = false;\n } else {\n save = true;\n }\n for (const leaf of leaves) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n save = false;\n }\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n if (save) {\n if (!result) {\n result = new WeakMap();\n }\n result.set(node, {\n attr: attributes?.length,\n matched: bool\n });\n this.#results.set(leaves, result);\n }\n }\n return !!bool;\n }\n\n /**\n * match HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @returns {Set.<object>} - matched nodes\n */\n _matchHTMLCollection(items, opt = {}) {\n const { compound, filterLeaves } = opt;\n const nodes = new Set();\n const l = items.length;\n if (l) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const item = items[i];\n const bool = this._matchLeaves(filterLeaves, item, opt);\n if (bool) {\n nodes.add(item);\n }\n }\n } else {\n const arr = [].slice.call(items);\n return new Set(arr);\n }\n }\n return nodes;\n }\n\n /**\n * find descendant nodes\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} baseNode - base Element node\n * @param {object} opt - options\n * @returns {object} - collection of nodes and pending state\n */\n _findDescendantNodes(leaves, baseNode, opt) {\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n 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 SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(leafName, opt);\n break;\n }\n case SELECTOR_ID: {\n if (this.#root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n const node = this.#root.getElementById(leafName);\n if (node && node !== baseNode && baseNode.contains(node)) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, opt);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n }\n break;\n }\n case SELECTOR_CLASS: {\n const items = baseNode.getElementsByClassName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n break;\n }\n case SELECTOR_TYPE: {\n if (this.#content.contentType === 'text/html' &&\n !/[*|]/.test(leafName)) {\n const items = baseNode.getElementsByTagName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n } else {\n pending = true;\n }\n break;\n }\n default: {\n pending = true;\n }\n }\n }\n return {\n nodes,\n pending\n };\n }\n\n /**\n * match combinator\n * @private\n * @param {object} twig - twig\n * @param {object} node - Element node\n * @param {object} opt - option\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchCombinator(twig, node, opt = {}) {\n const { combo, leaves } = twig;\n const { name: comboName } = combo;\n const { parentNode } = node;\n const { dir } = opt;\n const matched = new Set();\n if (dir === DIR_NEXT) {\n switch (comboName) {\n case '+': {\n const refNode = node.nextElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = this._traverse(node, walker);\n refNode = walker.nextSibling();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n const walker = this._createTreeWalker(node);\n let refNode = this._traverse(node, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n break;\n }\n case ' ':\n default: {\n const { nodes, pending } = this._findDescendantNodes(leaves, node);\n if (nodes.size) {\n return nodes;\n }\n if (pending) {\n const walker = this._createTreeWalker(node);\n let refNode = this._traverse(node, walker);\n refNode = walker.nextNode();\n while (refNode && node.contains(refNode)) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextNode();\n }\n }\n }\n }\n } else {\n switch (comboName) {\n case '+': {\n const refNode = node.previousElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode === node) {\n break;\n } else {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n if (parentNode) {\n const bool = this._matchLeaves(leaves, parentNode, opt);\n if (bool) {\n matched.add(parentNode);\n }\n }\n break;\n }\n case ' ':\n default: {\n const arr = [];\n let refNode = parentNode;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n }\n if (arr.length) {\n return new Set(arr.reverse());\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * find matched node from #qswalker\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} [opt] - options\n * @param {object} [opt.node] - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, opt) {\n const { node } = opt;\n let refNode = this._traverse(node, this.#qswalker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = this.#qswalker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = this.#qswalker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n refNode = this.#qswalker.nextNode();\n }\n }\n return matchedNode ?? null;\n }\n\n /**\n * match self\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _matchSelf(leaves) {\n const nodes = [];\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find lineal\n * @private\n * @param {Array} leaves - AST leaves\n * @param {object} opt - options\n * @returns {Array} - [nodes, filtered]\n */\n _findLineal(leaves, opt = {}) {\n const { complex } = opt;\n const nodes = [];\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n if (!bool || complex) {\n let refNode = this.#node.parentNode;\n while (refNode) {\n bool = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(refNode);\n filtered = true;\n }\n if (refNode.parentNode) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n }\n return [nodes, filtered];\n }\n\n /**\n * find first\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFirst(leaves) {\n const nodes = [];\n const node = this._findNode(leaves, {\n node: this.#node\n });\n let filtered = false;\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find from HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @param {boolean} [opt.compound] - compound selector\n * @param {Array} [opt.filterLeaves] - filter leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFromHTMLCollection(items, opt = {}) {\n const { complex, compound, filterLeaves, targetType } = opt;\n let nodes = [];\n let filtered = false;\n let collected = false;\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node !== this.#node &&\n (this.#node.contains(node) || node.contains(this.#node))) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n } else {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n }\n } else if (complex) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n } else if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n }\n return [nodes, filtered, collected];\n }\n\n /**\n * find entry nodes\n * @private\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @param {boolean} complex - complex selector\n * @returns {object} - collection of nodes etc.\n */\n _findEntryNodes(twig, targetType, complex) {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { 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 SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case SELECTOR_ID: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST &&\n this.#root.nodeType !== ELEMENT_NODE) {\n const node = this.#root.getElementById(leafName);\n if (node) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#root.nodeType === DOCUMENT_NODE) {\n const items = this.#root.getElementsByClassName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_TYPE: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#content.contentType === 'text/html' &&\n this.#root.nodeType === DOCUMENT_NODE &&\n !/[*|]/.test(leafName)) {\n const items = this.#root.getElementsByTagName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n default: {\n if (targetType !== TARGET_LINEAL && REG_SHADOW_HOST.test(leafName)) {\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n }\n }\n return {\n collected,\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * 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 === SELECTOR_PSEUDO_ELEMENT ||\n lastType === SELECTOR_ID) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n firstType === SELECTOR_ID) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (/^[+~]$/.test(comboName)) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n for (const { combo, leaves: [leaf] } of branch) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n bool = false;\n break;\n }\n if (!bool && combo) {\n const { name: comboName } = combo;\n if (/^[+~]$/.test(comboName)) {\n bool = true;\n }\n }\n }\n if (bool) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else {\n dir = DIR_PREV;\n twig = lastTwig;\n }\n }\n } else {\n dir = DIR_PREV;\n twig = firstTwig;\n }\n const {\n collected, compound, filtered, nodes, pending\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n } else if (pending) {\n pendingItems.add(new Map([\n ['index', i],\n ['twig', twig]\n ]));\n }\n this.#ast[i].collected = collected;\n this.#ast[i].dir = dir;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n if (pendingItems.size) {\n let node;\n let walker;\n if (this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE) {\n node = this.#node;\n walker = this.#qswalker;\n } else {\n node = this.#root;\n walker = this.#walker;\n }\n let nextNode = this._traverse(node, walker);\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (nextNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(nextNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode, {\n warn: this.#warn\n });\n if (matched) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n }\n if (nextNode !== walker.currentNode) {\n nextNode = this._traverse(nextNode, walker);\n }\n nextNode = walker.nextNode();\n }\n }\n } else {\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[branch.length - 1];\n const complex = branch.length > 1;\n const {\n compound, filtered, nodes\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n }\n this.#ast[i].dir = DIR_PREV;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n }\n return [\n this.#ast,\n this.#nodes\n ];\n }\n\n /**\n * get combined nodes\n * @private\n * @param {object} twig - twig\n * @param {object} nodes - collection of nodes\n * @param {string} dir - direction\n * @returns {Array.<object>} - collection of matched nodes\n */\n _getCombinedNodes(twig, nodes, dir) {\n const arr = [];\n for (const node of nodes) {\n const matched = this._matchCombinator(twig, node, {\n dir,\n warn: this.#warn\n });\n if (matched.size) {\n arr.push(...matched);\n }\n }\n if (arr.length) {\n return new Set(arr);\n }\n return new Set();\n }\n\n /**\n * match node to next direction\n * @private\n * @param {Array} branch - branch\n * @param {Set.<object>} nodes - collection of Element node\n * @param {object} opt - option\n * @param {object} opt.combo - combo\n * @returns {?object} - matched node\n */\n _matchNodeNext(branch, nodes, opt) {\n const { combo, index } = opt;\n const { combo: nextCombo, leaves } = branch[index];\n const twig = {\n combo,\n leaves\n };\n const nextNodes = this._getCombinedNodes(twig, nodes, DIR_NEXT);\n let res;\n if (nextNodes.size) {\n if (index === branch.length - 1) {\n const [nextNode] = sortNodes(nextNodes);\n res = nextNode;\n } else {\n res = this._matchNodeNext(branch, nextNodes, {\n combo: nextCombo,\n index: index + 1\n });\n }\n }\n return res ?? null;\n }\n\n /**\n * match node to previous direction\n * @private\n * @param {Array} branch - branch\n * @param {object} node - Element node\n * @param {object} opt - option\n * @param {number} opt.index - index\n * @returns {?object} - node\n */\n _matchNodePrev(branch, node, opt) {\n const { index } = opt;\n const twig = branch[index];\n const nodes = new Set([node]);\n const nextNodes = this._getCombinedNodes(twig, nodes, DIR_PREV);\n let res;\n if (nextNodes.size) {\n if (index === 0) {\n res = node;\n } else {\n for (const nextNode of nextNodes) {\n const matched = this._matchNodePrev(branch, nextNode, {\n index: index - 1\n });\n if (matched) {\n return node;\n }\n }\n }\n }\n return res ?? null;\n }\n\n /**\n * find matched nodes\n * @private\n * @param {string} targetType - target type\n * @returns {Set.<object>} - collection of matched nodes\n */\n _find(targetType) {\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n this._prepareQuerySelectorWalker();\n }\n const [[...branches], nodes] = this._collectNodes(targetType);\n const l = branches.length;\n let res = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, collected, dir, find } = branches[i];\n const branchLen = branch.length;\n if (branchLen && find) {\n const entryNodes = nodes[i];\n const entryNodesLen = entryNodes.length;\n const lastIndex = branchLen - 1;\n if (lastIndex === 0) {\n if ((targetType === TARGET_ALL || targetType === TARGET_FIRST) &&\n this.#node.nodeType === ELEMENT_NODE) {\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n if (node !== this.#node && this.#node.contains(node)) {\n res.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (res.size) {\n const n = [...res];\n res = new Set([...n, ...entryNodes]);\n this.#sort = true;\n } else {\n res = new Set(entryNodes);\n }\n } else {\n const [node] = entryNodes;\n res.add(node);\n }\n } else if (targetType === TARGET_ALL) {\n if (dir === DIR_NEXT) {\n let { combo } = branch[0];\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const twig = {\n combo,\n leaves\n };\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === lastIndex) {\n if (res.size) {\n const n = [...res];\n res = new Set([...n, ...nextNodes]);\n this.#sort = true;\n } else {\n res = nextNodes;\n }\n } else {\n combo = nextCombo;\n }\n } else {\n break;\n }\n }\n }\n } else {\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === 0) {\n res.add(node);\n if (branchLen > 1 && res.size > 1) {\n this.#sort = true;\n }\n }\n } else {\n break;\n }\n }\n }\n }\n } else if (targetType === TARGET_FIRST && dir === DIR_NEXT) {\n const { combo: entryCombo } = branch[0];\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodeNext(branch, new Set([node]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n res.add(matched);\n break;\n }\n }\n if (!matched && !collected) {\n const { leaves: entryLeaves } = branch[0];\n const [entryNode] = entryNodes;\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n matched = this._matchNodeNext(branch, new Set([refNode]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n res.add(matched);\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n }\n }\n } else {\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodePrev(branch, node, {\n index: lastIndex - 1\n });\n if (matched) {\n res.add(node);\n break;\n }\n }\n if (!matched && !collected && targetType === TARGET_FIRST) {\n const { leaves: entryLeaves } = branch[lastIndex];\n const [entryNode] = entryNodes;\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n matched = this._matchNodePrev(branch, refNode, {\n index: lastIndex - 1\n });\n if (matched) {\n res.add(refNode);\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n }\n }\n }\n }\n }\n return res;\n }\n\n /**\n * matches\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - `true` if matched `false` otherwise\n */\n matches(selector, node, opt) {\n let res;\n try {\n if (node?.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node?.nodeName}`;\n throw new TypeError(msg);\n }\n const document = node.ownerDocument;\n if (document === this.#document && document.contentType === 'text/html') {\n if (filterSelector(selector, {\n complex: REG_COMPLEX_A.test(selector),\n descendant: true\n })) {\n return this.#nwsapi.match(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_SELF);\n res = nodes.size;\n } catch (e) {\n this._onError(e);\n }\n return !!res;\n }\n\n /**\n * closest\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n closest(selector, node, opt) {\n let res;\n try {\n if (node?.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node?.nodeName}`;\n throw new TypeError(msg);\n }\n const document = node.ownerDocument;\n if (document === this.#document && document.contentType === 'text/html') {\n if (filterSelector(selector, {\n complex: REG_COMPLEX_A.test(selector),\n descendant: true\n })) {\n return this.#nwsapi.closest(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_LINEAL);\n if (nodes.size) {\n let refNode = this.#node;\n while (refNode) {\n if (nodes.has(refNode)) {\n res = refNode;\n break;\n }\n refNode = refNode.parentNode;\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n querySelector(selector, node, opt) {\n let res;\n try {\n verifyNode(node);\n let document;\n if (node.nodeType === DOCUMENT_NODE) {\n document = node;\n } else {\n document = node.ownerDocument;\n }\n if (document === this.#document && document.contentType === 'text/html') {\n if (filterSelector(selector, {\n complex: REG_COMPLEX_B.test(selector),\n descendant: false\n })) {\n return this.#nwsapi.first(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_FIRST);\n nodes.delete(this.#node);\n if (nodes.size) {\n [res] = sortNodes(nodes);\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector all\n * NOTE: returns Array, not NodeList\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {Array.<object|undefined>} - collection of matched nodes\n */\n querySelectorAll(selector, node, opt) {\n let res;\n try {\n verifyNode(node);\n let document;\n if (node.nodeType === DOCUMENT_NODE) {\n document = node;\n } else {\n document = node.ownerDocument;\n }\n if (document === this.#document && document.contentType === 'text/html') {\n if (filterSelector(selector, {\n complex: REG_COMPLEX_B.test(selector),\n descendant: true\n })) {\n return this.#nwsapi.select(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_ALL);\n nodes.delete(this.#node);\n if (nodes.size) {\n if (this.#sort) {\n res = sortNodes(nodes);\n } else {\n res = [...nodes];\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? [];\n }\n};\n"], - "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAAgC,iDAChCC,EAAmB,mCACnBC,EAEO,yBACPC,EAAwB,wBACxBC,EAEO,uBAGPC,EAQO,yBACP,MAAMC,EAAW,OACXC,EAAW,OACXC,EAAa,MACbC,EAAe,QACfC,EAAgB,SAChBC,EAAc,OA0Bb,MAAMb,CAAO,CAElBc,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAOA,YAAYC,EAAQC,EAAU,CAC5B,KAAKF,GAAUC,EACf,KAAKf,GAAYgB,GAAYD,EAAO,SACpC,KAAKlB,GAAS,IAAI,QAClB,KAAKU,GAAW,IAAI,QACpB,KAAK,YAAY,CACnB,CASA,SAASU,EAAG,CACV,GAAI,CAAC,KAAKb,GACR,GAAIa,aAAa,cACbA,aAAa,KAAKH,GAAQ,aAC5B,GAAIG,EAAE,OAAS,oBACT,KAAKJ,IACP,QAAQ,KAAKI,EAAE,OAAO,MAGxB,OAAM,IAAI,KAAKH,GAAQ,aAAaG,EAAE,QAASA,EAAE,IAAI,MAGvD,OAAMA,CAGZ,CAcA,OAAOC,EAAUC,EAAMC,EAAM,CAAC,EAAG,CAC/B,KAAM,CAAE,MAAAC,EAAO,WAAAC,EAAY,SAAAC,EAAU,KAAAC,CAAK,EAAIJ,EAE9C,OAAIE,GAAcH,EAAK,WAAa,iBAClC,KAAKtB,GAAS,IAAI,SAEpB,KAAKO,GAAY,CAAC,CAACmB,EACnB,KAAKV,GAAQ,CAAC,CAACW,EACf,KAAKvB,GAAS,KAAK,UAAUoB,CAAK,EAClC,KAAKnB,GAAQiB,EACb,CAAC,KAAKrB,GAAU,KAAKU,GAAO,KAAKG,EAAO,KAAI,kBAAeQ,CAAI,EAC/D,KAAKV,MAAU,kBAAeU,CAAI,EAClC,CAAC,KAAKvB,GAAM,KAAKO,EAAM,EAAI,KAAK,YAAYe,CAAQ,EACpD,KAAKN,GAAW,IAAI,QACbO,CACT,CAOA,aAAc,CACZ,YAAKd,MAAU,EAAAoB,SAAO,CACpB,aAAc,KAAKX,GAAQ,aAC3B,SAAU,KAAKd,EACjB,CAAC,EACD,KAAKK,GAAQ,UAAU,CACrB,UAAW,EACb,CAAC,EACM,KAAKA,EACd,CAQA,UAAUgB,EAAO,CACf,OAAQA,aAAiB,KAAKP,GAAQ,YAC9BO,aAAiB,KAAKP,GAAQ,cAClCO,EACA,IACN,CAQA,YAAYH,EAAU,CACpB,MAAMQ,EAAQ,CAAC,EACf,KAAK3B,GAAc,GACnB,IAAI4B,EACJ,GAAI,KAAK7B,GAAU,CACjB,MAAM8B,EAAa,KAAK/B,GAAO,IAAI,KAAKC,EAAQ,EAChD,GAAI8B,GAAcA,EAAW,IAAI,GAAGV,CAAQ,EAAE,EAAG,CAC/C,MAAMW,EAAOD,EAAW,IAAI,GAAGV,CAAQ,EAAE,EACzC,KAAKnB,GAAc8B,EAAK,WACxBF,EAAME,EAAK,GACb,CACF,CACA,GAAIF,EAAK,CACP,MAAMG,EAAIH,EAAI,OACd,QAASI,EAAI,EAAGA,EAAID,EAAGC,IACrBJ,EAAII,CAAC,EAAE,UAAY,GACnBJ,EAAII,CAAC,EAAE,IAAM,KACbJ,EAAII,CAAC,EAAE,SAAW,GAClBJ,EAAII,CAAC,EAAE,KAAO,GACdL,EAAMK,CAAC,EAAI,CAAC,CAEhB,KAAO,CACL,IAAIC,EACJ,GAAI,CACFA,KAAS,iBAAcd,CAAQ,CACjC,OAASD,EAAG,CACV,KAAK,SAASA,CAAC,CACjB,CACA,KAAM,CAAE,SAAAgB,EAAU,KAAM,CAAE,UAAAC,CAAU,CAAE,KAAI,WAAQF,CAAM,EACxD,IAAIG,EAAa,GACbJ,EAAI,EACRJ,EAAM,CAAC,EACP,SAAW,CAAC,GAAGS,CAAK,IAAKH,EAAU,CACjC,MAAMI,EAAS,CAAC,EAChB,IAAIR,EAAOO,EAAM,MAAM,EACvB,GAAIP,GAAQA,EAAK,OAAS,aAAY,CACpC,MAAMS,EAAS,IAAI,IACnB,KAAOT,GAAM,CACX,GAAIA,EAAK,OAAS,aAAY,CAC5B,KAAM,CAACU,CAAQ,EAAIH,EACnB,GAAIG,EAAS,OAAS,aAAY,CAChC,MAAMC,EAAM,oBAAoBtB,CAAQ,GACxC,MAAM,IAAI,aAAasB,EAAK,YAAU,CACxC,CACA,MAAMC,EAAWZ,EAAK,KAClB,UAAU,KAAKY,CAAQ,IACzBN,EAAa,IAEfE,EAAO,KAAK,CACV,MAAOR,EACP,UAAQ,WAAQS,CAAM,CACxB,CAAC,EACDA,EAAO,MAAM,CACf,SAAWT,EAAM,CACf,GAAI,CAAE,KAAMY,CAAS,EAAIZ,EACrBY,GAAY,OAAOA,GAAa,WAClCA,KAAW,oBAAiBA,CAAQ,EAChC,OAAOA,GAAa,UAAYA,IAAaZ,EAAK,OACpDA,EAAK,KAAOY,GAEV,OAAO,KAAKA,CAAQ,IACtBZ,EAAK,UAAY,KAGrBS,EAAO,IAAIT,CAAI,CACjB,CACA,GAAIO,EAAM,OACRP,EAAOO,EAAM,MAAM,MACd,CACLC,EAAO,KAAK,CACV,MAAO,KACP,UAAQ,WAAQC,CAAM,CACxB,CAAC,EACDA,EAAO,MAAM,EACb,KACF,CACF,CACF,CACAX,EAAI,KAAK,CACP,OAAAU,EACA,UAAW,GACX,IAAK,KACL,SAAU,GACV,KAAM,EACR,CAAC,EACDX,EAAMK,CAAC,EAAI,CAAC,EACZA,GACF,CACA,GAAI,KAAKjC,IAAY,CAACoC,EAAW,CAC/B,IAAIN,EACA,KAAK/B,GAAO,IAAI,KAAKC,EAAQ,EAC/B8B,EAAa,KAAK/B,GAAO,IAAI,KAAKC,EAAQ,EAE1C8B,EAAa,IAAI,IAEnBA,EAAW,IAAI,GAAGV,CAAQ,GAAI,CAC5B,IAAAS,EACA,WAAAQ,CACF,CAAC,EACD,KAAKtC,GAAO,IAAI,KAAKC,GAAU8B,CAAU,CAC3C,CACA,KAAK7B,GAAcoC,CACrB,CACA,MAAO,CACLR,EACAD,CACF,CACF,CAQA,kBAAkBP,EAAM,CACtB,IAAIuB,EACJ,OAAI,KAAK9B,GAAS,IAAIO,CAAI,EACxBuB,EAAS,KAAK9B,GAAS,IAAIO,CAAI,GAE/BuB,EAAS,KAAK1C,GAAU,iBAAiBmB,EAAM,eAAa,EAC5D,KAAKP,GAAS,IAAIO,EAAMuB,CAAM,GAEzBA,CACT,CAOA,6BAA8B,CAC5B,YAAKpC,GAAY,KAAK,kBAAkB,KAAKJ,EAAK,EAClD,KAAKQ,GAAQ,GACN,KAAKJ,EACd,CASA,UAAUa,EAAMuB,EAAS,KAAK/B,GAAS,CACrC,IAAIgC,EAAUD,EAAO,YACjBE,EACJ,GAAID,IAAYxB,EACdyB,EAAUD,UACDA,EAAQ,SAASxB,CAAI,EAE9B,IADAwB,EAAUD,EAAO,SAAS,EACnBC,GAAS,CACd,GAAIA,IAAYxB,EAAM,CACpByB,EAAUD,EACV,KACF,CACAA,EAAUD,EAAO,SAAS,CAC5B,KACK,CACL,GAAIC,IAAYD,EAAO,KACrB,KAAOC,GACD,EAAAA,IAAYD,EAAO,MAAQC,IAAYxB,IAG3CwB,EAAUD,EAAO,WAAW,EAGhC,GAAIvB,GAAM,WAAa,eACrB,KAAOwB,GAAS,CACd,GAAIA,IAAYxB,EAAM,CACpByB,EAAUD,EACV,KACF,CACAA,EAAUD,EAAO,SAAS,CAC5B,MAEAE,EAAUD,CAEd,CACA,OAAOC,GAAW,IACpB,CAcA,iBAAiBC,EAAK1B,EAAMC,EAAK,CAC/B,KAAM,CAAE,EAAA0B,EAAG,EAAAC,EAAG,QAAAC,EAAS,SAAA9B,CAAS,EAAI2B,EAC9B,CAAE,WAAAI,CAAW,EAAI9B,EACjB+B,EAAU,IAAI,IACpB,IAAIC,EACJ,GAAIjC,EACF,GAAI,KAAKrB,GAAO,IAAIqB,CAAQ,EAC1BiC,EAAmB,KAAKtD,GAAO,IAAIqB,CAAQ,MACtC,CACL,KAAM,CAAE,SAAAe,CAAS,KAAI,WAAQf,CAAQ,EACrCiC,EAAmBlB,EACnB,KAAKpC,GAAO,IAAIqB,EAAUiC,CAAgB,CAC5C,CAEF,GAAIF,EAAY,CACd,MAAMP,EAAS,KAAK/B,GACpB,IAAIgC,EAAU,KAAK,UAAUM,EAAYP,CAAM,EAC/CC,EAAUD,EAAO,WAAW,EAC5B,IAAIZ,EAAI,EACR,KAAOa,GACLb,IACAa,EAAUD,EAAO,YAAY,EAE/BC,EAAU,KAAK,UAAUM,EAAYP,CAAM,EAC3C,MAAMU,EAAgB,IAAI,IAC1B,GAAID,EAEF,IADAR,EAAUD,EAAO,WAAW,EACrBC,GAAS,CACd,IAAIU,EACJ,UAAWf,KAAUa,EAEnB,GADAE,EAAO,KAAK,aAAaf,EAAQK,EAASvB,CAAG,EACzC,CAACiC,EACH,MAGAA,GACFD,EAAc,IAAIT,CAAO,EAE3BA,EAAUD,EAAO,YAAY,CAC/B,CAGF,GAAII,IAAM,GACR,GAAIC,EAAI,GAAKA,GAAKjB,GAChB,GAAIsB,EAAc,KAAM,CACtBT,EAAU,KAAK,UAAUM,EAAYP,CAAM,EACvCM,EACFL,EAAUD,EAAO,UAAU,EAE3BC,EAAUD,EAAO,WAAW,EAE9B,IAAIX,EAAI,EACR,KAAOY,GAAS,CACd,GAAIS,EAAc,IAAIT,CAAO,EAAG,CAC9B,GAAIZ,IAAMgB,EAAI,EAAG,CACfG,EAAQ,IAAIP,CAAO,EACnB,KACF,CACAZ,GACF,CACIiB,EACFL,EAAUD,EAAO,gBAAgB,EAEjCC,EAAUD,EAAO,YAAY,CAEjC,CACF,SAAW,CAACxB,EAAU,CACpByB,EAAU,KAAK,UAAUM,EAAYP,CAAM,EACvCM,EACFL,EAAUD,EAAO,UAAU,EAE3BC,EAAUD,EAAO,WAAW,EAE9B,IAAIX,EAAI,EACR,KAAOY,GAAS,CACd,GAAIZ,IAAMgB,EAAI,EAAG,CACfG,EAAQ,IAAIP,CAAO,EACnB,KACF,CACIK,EACFL,EAAUD,EAAO,gBAAgB,EAEjCC,EAAUD,EAAO,YAAY,EAE/BX,GACF,CACF,OAGG,CACL,IAAIuB,EAAMP,EAAI,EACd,GAAID,EAAI,EACN,KAAOQ,EAAM,GACXA,GAAOR,EAGX,GAAIQ,GAAO,GAAKA,EAAMxB,EAAG,CACvBa,EAAU,KAAK,UAAUM,EAAYP,CAAM,EACvCM,EACFL,EAAUD,EAAO,UAAU,EAE3BC,EAAUD,EAAO,WAAW,EAE9B,IAAIX,EAAI,EACJwB,EAAIT,EAAI,EAAI,EAAIC,EAAI,EACxB,KAAOJ,IACDA,GAAWW,GAAO,GAAKA,EAAMxB,IAC3BsB,EAAc,KACZA,EAAc,IAAIT,CAAO,IACvBY,IAAMD,IACRJ,EAAQ,IAAIP,CAAO,EACnBW,GAAOR,GAELA,EAAI,EACNS,IAEAA,KAGKxB,IAAMuB,IACVpC,GACHgC,EAAQ,IAAIP,CAAO,EAErBW,GAAOR,GAELE,EACFL,EAAUD,EAAO,gBAAgB,EAEjCC,EAAUD,EAAO,YAAY,EAE/BX,GAKN,CACF,CACA,GAAIiB,GAAWE,EAAQ,KAAO,EAAG,CAC/B,MAAMM,EAAI,CAAC,GAAGN,CAAO,EACrB,OAAO,IAAI,IAAIM,EAAE,QAAQ,CAAC,CAC5B,CACF,SAAWrC,IAAS,KAAKX,IAAUsC,EAAIC,IAAO,EAC5C,GAAII,EAAkB,CACpB,IAAIE,EACJ,UAAWf,KAAUa,EAEnB,GADAE,EAAO,KAAK,aAAaf,EAAQnB,EAAMC,CAAG,EACtCiC,EACF,MAGAA,GACFH,EAAQ,IAAI/B,CAAI,CAEpB,MACE+B,EAAQ,IAAI/B,CAAI,EAGpB,OAAO+B,CACT,CAYA,kBAAkBL,EAAK1B,EAAM,CAC3B,KAAM,CAAE,EAAA2B,EAAG,EAAAC,EAAG,QAAAC,CAAQ,EAAIH,EACpB,CAAE,UAAAY,EAAW,WAAAR,EAAY,OAAAS,CAAO,EAAIvC,EACpC+B,EAAU,IAAI,IACpB,GAAID,EAAY,CACd,MAAMP,EAAS,KAAK/B,GACpB,IAAIgC,EAAU,KAAK,UAAUM,EAAYP,CAAM,EAC/CC,EAAUD,EAAO,WAAW,EAC5B,IAAIZ,EAAI,EACR,KAAOa,GACLb,IACAa,EAAUD,EAAO,YAAY,EAG/B,GAAII,IAAM,GACR,GAAIC,EAAI,GAAKA,GAAKjB,EAAG,CACnBa,EAAU,KAAK,UAAUM,EAAYP,CAAM,EACvCM,EACFL,EAAUD,EAAO,UAAU,EAE3BC,EAAUD,EAAO,WAAW,EAE9B,IAAIa,EAAI,EACR,KAAOZ,GAAS,CACd,KAAM,CAAE,UAAWgB,EAAe,OAAQC,CAAW,EAAIjB,EACzD,GAAIgB,IAAkBF,GAAaG,IAAeF,EAAQ,CACxD,GAAIH,IAAMR,EAAI,EAAG,CACfG,EAAQ,IAAIP,CAAO,EACnB,KACF,CACAY,GACF,CACIP,EACFL,EAAUD,EAAO,gBAAgB,EAEjCC,EAAUD,EAAO,YAAY,CAEjC,CACF,MAEK,CACL,IAAIY,EAAMP,EAAI,EACd,GAAID,EAAI,EACN,KAAOQ,EAAM,GACXA,GAAOR,EAGX,GAAIQ,GAAO,GAAKA,EAAMxB,EAAG,CACvBa,EAAU,KAAK,UAAUM,EAAYP,CAAM,EACvCM,EACFL,EAAUD,EAAO,UAAU,EAE3BC,EAAUD,EAAO,WAAW,EAE9B,IAAIa,EAAIT,EAAI,EAAI,EAAIC,EAAI,EACxB,KAAOJ,GAAS,CACd,KAAM,CAAE,UAAWgB,EAAe,OAAQC,CAAW,EAAIjB,EACzD,GAAIgB,IAAkBF,GAAaG,IAAeF,EAAQ,CAKxD,GAJIH,IAAMD,IACRJ,EAAQ,IAAIP,CAAO,EACnBW,GAAOR,GAELQ,EAAM,GAAKA,GAAOxB,EACpB,MACSgB,EAAI,EACbS,IAEAA,GAEJ,CACIP,EACFL,EAAUD,EAAO,gBAAgB,EAEjCC,EAAUD,EAAO,YAAY,CAEjC,CACF,CACF,CACA,GAAIM,GAAWE,EAAQ,KAAO,EAAG,CAC/B,MAAMM,EAAI,CAAC,GAAGN,CAAO,EACrB,OAAO,IAAI,IAAIM,EAAE,QAAQ,CAAC,CAC5B,CACF,MAAWrC,IAAS,KAAKX,IAAUsC,EAAIC,IAAO,GAC5CG,EAAQ,IAAI/B,CAAI,EAElB,OAAO+B,CACT,CAWA,cAAcvB,EAAKR,EAAM0C,EAASzC,EAAK,CACrC,KAAM,CACJ,IAAK,CACH,EACA,EAAA2B,EACA,KAAMe,CACR,EACA,SAAA5C,CACF,EAAIS,EACEoC,EAAS,IAAI,IA2BnB,GA1BID,GACEA,IAAiB,QACnBC,EAAO,IAAI,IAAK,CAAC,EACjBA,EAAO,IAAI,IAAK,CAAC,GACRD,IAAiB,QAC1BC,EAAO,IAAI,IAAK,CAAC,EACjBA,EAAO,IAAI,IAAK,CAAC,GAEfF,EAAQ,QAAQ,MAAM,EAAI,IAC5BE,EAAO,IAAI,UAAW,EAAI,IAGxB,OAAO,GAAM,UAAY,QAAQ,KAAK,CAAC,EACzCA,EAAO,IAAI,IAAK,EAAI,CAAC,EAErBA,EAAO,IAAI,IAAK,CAAC,EAEf,OAAOhB,GAAM,UAAY,QAAQ,KAAKA,CAAC,EACzCgB,EAAO,IAAI,IAAKhB,EAAI,CAAC,EAErBgB,EAAO,IAAI,IAAK,CAAC,EAEfF,EAAQ,QAAQ,MAAM,EAAI,IAC5BE,EAAO,IAAI,UAAW,EAAI,GAG1B,wBAAwB,KAAKF,CAAO,EAAG,CACrC3C,GACF6C,EAAO,IAAI,WAAY7C,CAAQ,EAEjC,MAAM2B,EAAM,OAAO,YAAYkB,CAAM,EAErC,OADc,KAAK,iBAAiBlB,EAAK1B,EAAMC,CAAG,CAEpD,SAAW,0BAA0B,KAAKyC,CAAO,EAAG,CAClD,MAAMhB,EAAM,OAAO,YAAYkB,CAAM,EAErC,OADc,KAAK,kBAAkBlB,EAAK1B,CAAI,CAEhD,CACA,OAAO,IAAI,GACb,CAUA,oBAAoB6C,EAAW7C,EAAMC,EAAM,CAAC,EAAG,CAC7C,IAAIiC,EACJ,GAAI,MAAM,QAAQW,CAAS,GAAKA,EAAU,OAAQ,CAChD,MAAM1B,EAAS0B,EAAU,IAAIjC,GAAKA,CAAC,EAC7B,CAACkC,CAAI,EAAI3B,EACT,CAAE,KAAM4B,CAAS,EAAID,EAC3B,IAAIE,EACAD,IAAa,aACfC,EAAQ7B,EAAO,MAAM,EAErB6B,EAAQ,CACN,KAAM,IACN,KAAM,YACR,EAEF,MAAMC,EAAa,CAAC,EACpB,KAAO9B,EAAO,QAAQ,CACpB,KAAM,CAACT,CAAI,EAAIS,EACT,CAAE,KAAM+B,CAAS,EAAIxC,EAC3B,GAAIwC,IAAa,aACf,MAEAD,EAAW,KAAK9B,EAAO,MAAM,CAAC,CAElC,CACA,MAAMgC,EAAO,CACX,MAAAH,EACA,OAAQC,CACV,EACAhD,EAAI,IAAM9B,EACV,MAAMoC,EAAQ,KAAK,iBAAiB4C,EAAMnD,EAAMC,CAAG,EACnD,GAAIM,EAAM,KACR,GAAIY,EAAO,QACT,UAAWiC,KAAY7C,EAErB,GADA2B,EAAO,KAAK,oBAAoBf,EAAQiC,EAAUnD,CAAG,EACjDiC,EACF,WAIJA,EAAO,EAGb,CACA,MAAO,CAAC,CAACA,CACX,CAUA,wBAAwBmB,EAASrD,EAAMC,EAAM,CAAC,EAAG,CAC/C,KAAM,CACJ,QAAAqD,EAAU,GAAI,SAAAxC,EAAW,CAAC,EAAG,SAAAf,EAAW,GAAI,aAAAwD,EAAe,CAAC,CAC9D,EAAIF,EACJ,IAAIG,EACJ,GAAIF,IAAY,MACd,GAAIvD,EAAS,SAAS,OAAO,EAC3ByD,EAAM,SACD,CACL,IAAItB,EACJ,UAAWf,KAAUL,EAEnB,GADAoB,EAAO,KAAK,oBAAoBf,EAAQnB,EAAMC,CAAG,EAC7CiC,EACF,MAGAA,IACFsB,EAAMxD,EAEV,KACK,CACL,MAAMyD,EAAU,iBAAiB,KAAKH,CAAO,EAC7CrD,EAAI,QAAUwD,EACd,MAAM9C,EAAI4C,EAAa,OACvB,IAAIrB,EACJ,QAAStB,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAC1B,MAAMM,EAASqC,EAAa3C,CAAC,EACvB8C,EAAYxC,EAAO,OAAS,EAC5B,CAAE,OAAAC,CAAO,EAAID,EAAOwC,CAAS,EAEnC,GADAxB,EAAO,KAAK,aAAaf,EAAQnB,EAAMC,CAAG,EACtCiC,GAAQwB,EAAY,EAAG,CACzB,IAAIC,EAAY,IAAI,IAAI,CAAC3D,CAAI,CAAC,EAC9B,QAASoC,EAAIsB,EAAY,EAAGtB,GAAK,EAAGA,IAAK,CACvC,MAAMe,EAAOjC,EAAOkB,CAAC,EACfwB,EAAM,CAAC,EACb3D,EAAI,IAAM7B,EACV,UAAWgF,KAAYO,EAAW,CAChC,MAAMtB,EAAI,KAAK,iBAAiBc,EAAMC,EAAUnD,CAAG,EAC/CoC,EAAE,MACJuB,EAAI,KAAK,GAAGvB,CAAC,CAEjB,CACA,GAAIuB,EAAI,OACFxB,IAAM,EACRF,EAAO,GAEPyB,EAAY,IAAI,IAAIC,CAAG,MAEpB,CACL1B,EAAO,GACP,KACF,CACF,CACF,CACA,GAAIA,EACF,KAEJ,CACIoB,IAAY,MACTpB,IACHsB,EAAMxD,GAECkC,IACTsB,EAAMxD,EAEV,CACA,OAAOwD,GAAO,IAChB,CAaA,0BAA0BhD,EAAKR,EAAMC,EAAM,CAAC,EAAG,CAC7C,KAAM,CAAE,SAAU4D,EAAa,KAAMP,CAAQ,EAAI9C,EAC3C,CAAE,UAAA8B,EAAW,WAAAR,CAAW,EAAI9B,EAC5B,CACJ,QAAAyD,EACA,KAAApD,EAAO,KAAKX,EACd,EAAIO,EACE8B,EAAU,IAAI,IAEpB,GAAI,qBAAmB,KAAKuB,CAAO,EAAG,CACpC,IAAID,EACJ,GAAI,KAAK3E,GAAO,IAAI8B,CAAG,EACrB6C,EAAU,KAAK3E,GAAO,IAAI8B,CAAG,MACxB,CACL,KAAM,CAAE,SAAAM,CAAS,KAAI,WAAQN,CAAG,EAC1BsD,EAAY,CAAC,EACbP,EAAe,CAAC,EACtB,SAAW,CAAC,GAAGpC,CAAM,IAAKL,EAAU,CAClC,UAAWgC,KAAQ3B,EAAQ,CACzB,MAAM4C,KAAM,eAAYjB,CAAI,EAC5BgB,EAAU,KAAKC,CAAG,CACpB,CACA,MAAM7C,EAAS,CAAC,EACV8C,EAAY,IAAI,IACtB,IAAItD,EAAOS,EAAO,MAAM,EACxB,KAAOT,GAUL,GATIA,EAAK,OAAS,cAChBQ,EAAO,KAAK,CACV,MAAOR,EACP,OAAQ,CAAC,GAAGsD,CAAS,CACvB,CAAC,EACDA,EAAU,MAAM,GACPtD,GACTsD,EAAU,IAAItD,CAAI,EAEhBS,EAAO,OACTT,EAAOS,EAAO,MAAM,MACf,CACLD,EAAO,KAAK,CACV,MAAO,KACP,OAAQ,CAAC,GAAG8C,CAAS,CACvB,CAAC,EACDA,EAAU,MAAM,EAChB,KACF,CAEFT,EAAa,KAAKrC,CAAM,CAC1B,CACAmC,EAAU,CACR,QAAAC,EACA,SAAAxC,EACA,aAAAyC,EACA,SAAUO,EAAU,KAAK,GAAG,CAC9B,EACA,KAAKpF,GAAO,IAAI8B,EAAK6C,CAAO,CAC9B,CACA,MAAMG,EAAM,KAAK,wBAAwBH,EAASrD,EAAMC,CAAG,EACvDuD,GACFzB,EAAQ,IAAIyB,CAAG,CAEnB,SAAW,MAAM,QAAQK,CAAW,EAElC,GAAI,oCAAoC,KAAKP,CAAO,EAAG,CACrD,KAAM,CAACpC,CAAM,EAAI2C,EAEjB,OADc,KAAK,cAAc3C,EAAQlB,EAAMsD,EAASrD,CAAG,CAE7D,KACE,QAAQqD,EAAS,CAEf,IAAK,MACL,IAAK,OAAQ,CACX,MAAME,EAAM,UAAQ,cAAchD,EAAKR,CAAI,EACvCwD,GACFzB,EAAQ,IAAIyB,CAAG,EAEjB,KACF,CACA,IAAK,UACL,IAAK,UACL,IAAK,eAAgB,CACnB,GAAInD,EAAM,CACR,MAAMgB,EAAM,6BAA6BiC,CAAO,KAChD,MAAM,IAAI,aAAajC,EAAK,mBAAiB,CAC/C,CACA,KACF,CACA,IAAK,OACL,IAAK,eAEH,MAGF,IAAK,WAAY,CACf,GAAIhB,EAAM,CACR,MAAMgB,EAAM,yBAAyBiC,CAAO,KAC5C,MAAM,IAAI,aAAajC,EAAK,mBAAiB,CAC/C,CACA,KACF,CACA,QACE,GAAI,CAACoC,EAAS,CACZ,MAAMpC,EAAM,yBAAyBiC,CAAO,KAC5C,MAAM,IAAI,aAAajC,EAAK,YAAU,CACxC,CAEJ,KAGF,QAAQiC,EAAS,CACf,IAAK,WACL,IAAK,OAAQ,CACP,aAAW,KAAKhB,CAAS,GAAKtC,EAAK,aAAa,MAAM,GACxD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,aAAc,CACjB,GAAI,aAAW,KAAKsC,CAAS,GAAKtC,EAAK,aAAa,MAAM,EAAG,CAC3D,KAAM,CAAE,KAAAiE,EAAM,OAAAC,EAAQ,SAAAC,CAAS,EAAI,IAAI,IAAI,KAAKxF,GAAS,GAAG,EACtDyF,EAAU,IAAI,IAAIpE,EAAK,aAAa,MAAM,EAAGiE,CAAI,EACnDG,EAAQ,SAAWF,GAAUE,EAAQ,WAAaD,GACpDpC,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,UAEH,MAEF,IAAK,QAAS,CACZ,KAAM,CAAE,OAAAqE,EAAQ,KAAAC,CAAK,EAAI,KAAKxF,IAAU,CAAC,GACpCwF,IAAS,aAAeA,IAAS,gBAClCtE,EAAK,SAASqE,CAAM,GACtBtC,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,SAAU,CACb,KAAM,CAAE,QAAAuE,EAAS,OAAAF,EAAQ,KAAAC,CAAK,EAAI,KAAKxF,IAAU,CAAC,GAC7CwF,IAAS,aAAeA,IAAS,gBAClCC,EAAU,UAAUvE,EAAK,SAASqE,CAAM,GAC1CtC,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,SAAU,CACb,KAAM,CAAE,KAAAwE,CAAK,EAAI,IAAI,IAAI,KAAK7F,GAAS,GAAG,EACtCqB,EAAK,IAAMwE,IAAS,IAAIxE,EAAK,EAAE,IAC/B,KAAKrB,GAAS,SAASqB,CAAI,GAC7B+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,gBAAiB,CACpB,KAAM,CAAE,KAAAwE,CAAK,EAAI,IAAI,IAAI,KAAK7F,GAAS,GAAG,EAC1C,GAAI6F,EAAM,CACR,MAAMC,EAAKD,EAAK,QAAQ,KAAM,EAAE,EAChC,IAAI/C,EAAU,KAAK9C,GAAS,eAAe8F,CAAE,EAC7C,KAAOhD,GAAS,CACd,GAAIA,IAAYzB,EAAM,CACpB+B,EAAQ,IAAI/B,CAAI,EAChB,KACF,CACAyB,EAAUA,EAAQ,UACpB,CACF,CACA,KACF,CACA,IAAK,QAAS,CACR,KAAK1C,GAAM,WAAa,eACtB,CAAC,KAAKO,IAAWU,IAAS,KAAKjB,IACjCgD,EAAQ,IAAI/B,CAAI,EAETA,IAAS,KAAKrB,GAAS,iBAChCoD,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,QACL,IAAK,gBAAiB,CACpB,KAAM,CAAE,OAAAqE,EAAQ,KAAAC,CAAK,EAAI,KAAKxF,IAAU,CAAC,EACzC,GAAIkB,IAAS,KAAKrB,GAAS,eAAiBqB,EAAK,UAAY,IACxDsD,IAAY,SACXgB,IAAS,WAAatE,EAAK,SAASqE,CAAM,GAAK,CACnD,IAAI7C,EAAUxB,EACV0E,EAAQ,GACZ,KAAOlD,GAAS,CACd,GAAIA,EAAQ,UAAYA,EAAQ,aAAa,UAAU,GACnDA,EAAQ,QAAUA,EAAQ,aAAa,QAAQ,EAAG,CACpDkD,EAAQ,GACR,KACF,KAAO,CACL,KAAM,CAAE,QAAAC,EAAS,WAAAC,CAAW,EAC1B,KAAKjF,GAAQ,iBAAiB6B,CAAO,EAEvC,GADAkD,EAAQ,EAAEC,IAAY,QAAUC,IAAe,UAC3C,CAACF,EACH,KAEJ,CACA,GAAIlD,EAAQ,YACRA,EAAQ,WAAW,WAAa,eAClCA,EAAUA,EAAQ,eAElB,MAEJ,CACIkD,GACF3C,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,eAAgB,CACnB,IAAI6E,EACApD,EAAU,KAAK9C,GAAS,cAC5B,GAAI8C,EAAQ,UAAY,EACtB,KAAOA,GAAS,CACd,GAAIA,IAAYzB,EAAM,CACpB6E,EAAS,GACT,KACF,CACApD,EAAUA,EAAQ,UACpB,CAEF,GAAIoD,EAAQ,CACV,IAAIrD,EAAUxB,EACV0E,EAAQ,GACZ,KAAOlD,GAAS,CACd,GAAIA,EAAQ,UAAYA,EAAQ,aAAa,UAAU,GACnDA,EAAQ,QAAUA,EAAQ,aAAa,QAAQ,EAAG,CACpDkD,EAAQ,GACR,KACF,KAAO,CACL,KAAM,CAAE,QAAAC,EAAS,WAAAC,CAAW,EAC1B,KAAKjF,GAAQ,iBAAiB6B,CAAO,EAEvC,GADAkD,EAAQ,EAAEC,IAAY,QAAUC,IAAe,UAC3C,CAACF,EACH,KAEJ,CACA,GAAIlD,EAAQ,YACRA,EAAQ,WAAW,WAAa,eAClCA,EAAUA,EAAQ,eAElB,MAEJ,CACIkD,GACF3C,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,OAAQ,CACP,eAAa,KAAKsC,CAAS,GAAKtC,EAAK,aAAa,MAAM,GAC1D+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,SAAU,CACT,eAAa,KAAKsC,CAAS,GAAK,CAACtC,EAAK,aAAa,MAAM,GAC3D+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,WAAY,CACf,GAAI,gBAAc,KAAKsC,CAAS,MAAK,EAAAwC,SAAoBxC,CAAS,EAChE,GAAItC,EAAK,UAAYA,EAAK,aAAa,UAAU,EAC/C+B,EAAQ,IAAI/B,CAAI,MACX,CACL,IAAI+E,EAASjD,EACb,KAAOiD,GAAQ,CACb,GAAI,iBAAe,KAAKA,EAAO,SAAS,EACtC,GAAIA,EAAO,YAAc,YACvB,GAAIA,EAAO,UAAYA,EAAO,aAAa,UAAU,EACnD,UAGF,OAGJA,EAASA,EAAO,UAClB,CACIA,GAAUjD,EAAW,YAAc,WAClCiD,EAAO,UAAYA,EAAO,aAAa,UAAU,IACpDhD,EAAQ,IAAI/B,CAAI,CAEpB,CAEF,KACF,CACA,IAAK,UAAW,EACT,gBAAc,KAAKsC,CAAS,MAC5B,EAAAwC,SAAoBxC,CAAS,IAC9B,EAAEtC,EAAK,UAAYA,EAAK,aAAa,UAAU,IACjD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,YAAa,CAChB,OAAQsC,EAAW,CACjB,IAAK,WAAY,EACXtC,EAAK,UAAYA,EAAK,aAAa,UAAU,GAC7CA,EAAK,UAAYA,EAAK,aAAa,UAAU,IAC/C+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,QAAS,EACP,CAACA,EAAK,MAAQ,gBAAc,KAAKA,EAAK,IAAI,GAC1C,gBAAc,KAAKA,EAAK,IAAI,KAC5BA,EAAK,UAAYA,EAAK,aAAa,UAAU,GAC7CA,EAAK,UAAYA,EAAK,aAAa,UAAU,IAChD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,WACO,qBAAkBA,CAAI,GACzB+B,EAAQ,IAAI/B,CAAI,CAGtB,CACA,KACF,CACA,IAAK,aAAc,CACjB,OAAQsC,EAAW,CACjB,IAAK,WAAY,CACTtC,EAAK,UAAYA,EAAK,aAAa,UAAU,GAC7CA,EAAK,UAAYA,EAAK,aAAa,UAAU,GACjD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,QAAS,EACP,CAACA,EAAK,MAAQ,gBAAc,KAAKA,EAAK,IAAI,GAC1C,gBAAc,KAAKA,EAAK,IAAI,IAC7B,EAAEA,EAAK,UAAYA,EAAK,aAAa,UAAU,GAC7CA,EAAK,UAAYA,EAAK,aAAa,UAAU,IACjD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,WACM,qBAAkBA,CAAI,GACxB+B,EAAQ,IAAI/B,CAAI,CAGtB,CACA,KACF,CACA,IAAK,oBAAqB,CACxB,IAAIgF,EAMJ,GALIhF,EAAK,YACPgF,EAAchF,EAAK,YACVA,EAAK,aAAa,aAAa,IACxCgF,EAAchF,EAAK,aAAa,aAAa,GAE3C,OAAOgF,GAAgB,UAAY,CAAC,SAAS,KAAKA,CAAW,EAAG,CAClE,IAAIC,EACA3C,IAAc,WAChB2C,EAAajF,EACJsC,IAAc,UACnBtC,EAAK,aAAa,MAAM,EACtB,gBAAc,KAAKA,EAAK,aAAa,MAAM,CAAC,IAC9CiF,EAAajF,GAGfiF,EAAajF,GAGbiF,GAAcjF,EAAK,QAAU,IAC/B+B,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,UAAW,EACTA,EAAK,SAAWsC,IAAc,SAC9BtC,EAAK,aAAa,MAAM,GACxB,iBAAe,KAAKA,EAAK,aAAa,MAAM,CAAC,GAC7CA,EAAK,UAAYsC,IAAc,WAClCP,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,gBAAiB,CACpB,GAAKA,EAAK,eAAiBsC,IAAc,SACpCtC,EAAK,OAAS,YACdsC,IAAc,YAAc,CAACtC,EAAK,aAAa,OAAO,EACzD+B,EAAQ,IAAI/B,CAAI,UACPsC,IAAc,SAAWtC,EAAK,OAAS,SACvC,CAACA,EAAK,aAAa,SAAS,EAAG,CACxC,MAAMkF,EAAWlF,EAAK,KACtB,IAAI+E,EAAS/E,EAAK,WAClB,KAAO+E,GACDA,EAAO,YAAc,QAGzBA,EAASA,EAAO,WAEbA,IACHA,EAAS,KAAKpG,GAAS,iBAEzB,MAAMsC,EAAQ8D,EAAO,qBAAqB,OAAO,EAC3CpE,EAAIM,EAAM,OAChB,IAAIkE,EACJ,QAASvE,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAC1B,MAAMF,EAAOO,EAAML,CAAC,EACpB,GAAIF,EAAK,aAAa,MAAM,IAAM,UAC5BwE,EACExE,EAAK,aAAa,MAAM,IAAMwE,IAChCC,EAAU,CAAC,CAACzE,EAAK,SAETA,EAAK,aAAa,MAAM,IAClCyE,EAAU,CAAC,CAACzE,EAAK,SAEfyE,GACF,KAGN,CACKA,GACHpD,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,UAAW,CAEd,GAAKsC,IAAc,UACd,EAAEtC,EAAK,aAAa,MAAM,GACxB,iBAAe,KAAKA,EAAK,aAAa,MAAM,CAAC,IAC/CsC,IAAc,SAAWtC,EAAK,aAAa,MAAM,GACjD,kBAAgB,KAAKA,EAAK,aAAa,MAAM,CAAC,EAAI,CACrD,IAAIoF,EAAOpF,EAAK,WAChB,KAAOoF,GACDA,EAAK,YAAc,QAGvBA,EAAOA,EAAK,WAEd,GAAIA,EAAM,CACR,MAAM7D,EAAS,KAAK/B,GACpB,IAAI4D,EAAW,KAAK,UAAUgC,EAAM7D,CAAM,EAE1C,IADA6B,EAAW7B,EAAO,WAAW,EACtB6B,GAAYgC,EAAK,SAAShC,CAAQ,GAAG,CAC1C,MAAM8B,EAAW9B,EAAS,UAC1B,IAAIf,EAQJ,GAPI6C,IAAa,SACf7C,EAAI,EAAEe,EAAS,aAAa,MAAM,GAChC,iBAAe,KAAKA,EAAS,aAAa,MAAM,CAAC,GAC1C8B,IAAa,UACtB7C,EAAIe,EAAS,aAAa,MAAM,GAC9B,kBAAgB,KAAKA,EAAS,aAAa,MAAM,CAAC,GAElDf,EAAG,CACDe,IAAapD,GACf+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACAoD,EAAW7B,EAAO,SAAS,CAC7B,CACF,CAEF,SAAWe,IAAc,SAAWtC,EAAK,aAAa,MAAM,GACjD,iBAAe,KAAKA,EAAK,aAAa,MAAM,CAAC,IAC5CA,EAAK,SAAWA,EAAK,aAAa,SAAS,GACrD+B,EAAQ,IAAI/B,CAAI,UAEPsC,IAAc,SAAU,CACjC,IAAIyC,EAASjD,EACTuD,EAAa,GACjB,KAAON,GACDA,EAAO,YAAc,YADZ,CAGN,GAAIA,EAAO,YAAc,SAAU,EACpCA,EAAO,UAAYA,EAAO,aAAa,UAAU,KACnDM,EAAa,IAEf,KACF,CACAN,EAASA,EAAO,UAClB,CACA,GAAIM,GACErF,EAAK,UAAYA,EAAK,aAAa,UAAU,IAC/C+B,EAAQ,IAAI/B,CAAI,MAEb,CACL,MAAMsF,EAAa,IAAI,IACjB/D,EAAS,KAAK/B,GACpB,IAAIgC,EAAU,KAAK,UAAUM,EAAYP,CAAM,EAE/C,IADAC,EAAUD,EAAO,WAAW,EACrBC,GAAS,CACd,GAAIA,EAAQ,UAAYA,EAAQ,aAAa,UAAU,EAAG,CACxD8D,EAAW,IAAI9D,CAAO,EACtB,KACF,CACAA,EAAUD,EAAO,YAAY,CAC/B,CACI+D,EAAW,MACTA,EAAW,IAAItF,CAAI,GACrB+B,EAAQ,IAAI/B,CAAI,CAGtB,CACF,CACA,KACF,CACA,IAAK,QAAS,CACZ,GAAI,iBAAe,KAAKsC,CAAS,EAC3BtC,EAAK,cAAc,IACjBA,EAAK,WAAa,EAChBA,EAAK,WAAaA,EAAK,MAAM,QAC/B+B,EAAQ,IAAI/B,CAAI,EAGlB+B,EAAQ,IAAI/B,CAAI,WAGXsC,IAAc,WAAY,CACnC,MAAMf,EAAS,KAAK/B,GACpB,IAAIgC,EAAU,KAAK,UAAUxB,EAAMuB,CAAM,EACzCC,EAAUD,EAAO,WAAW,EAC5B,IAAIW,EACJ,GAAI,CAACV,EACHU,EAAO,OAEP,MAAOV,GAAWxB,EAAK,SAASwB,CAAO,GACjC,mBAAe,KAAKA,EAAQ,SAAS,IACnCA,EAAQ,cAAc,EACpBA,EAAQ,WAAa,EACvBU,EAAOV,EAAQ,WAAaA,EAAQ,MAAM,OAE1CU,EAAO,GAGTA,EAAO,GAEL,CAACA,KAIPV,EAAUD,EAAO,SAAS,EAG1BW,GACFH,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,UAAW,CACd,GAAI,iBAAe,KAAKsC,CAAS,EAC3BtC,EAAK,cAAc,EACjBA,EAAK,WAAa,GAAKA,EAAK,UAAYA,EAAK,MAAM,QACrD+B,EAAQ,IAAI/B,CAAI,EAGlB+B,EAAQ,IAAI/B,CAAI,UAETsC,IAAc,WAAY,CACnC,MAAMf,EAAS,KAAK/B,GACpB,IAAIgC,EAAU,KAAK,UAAUxB,EAAMuB,CAAM,EACzCC,EAAUD,EAAO,WAAW,EAC5B,IAAIW,EACJ,GAAI,CAACV,EACHU,EAAO,OAEP,MAAOV,GAAWxB,EAAK,SAASwB,CAAO,GACjC,mBAAe,KAAKA,EAAQ,SAAS,IACnCA,EAAQ,cAAc,EACpBA,EAAQ,WAAa,EACvBU,EAAOV,EAAQ,WAAaA,EAAQ,MAAM,OAE1CU,EAAO,GAGTA,EAAO,GAEL,CAACA,KAIPV,EAAUD,EAAO,SAAS,EAGzBW,GACHH,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,WAAY,CACXsC,IAAc,SACd,EAAEtC,EAAK,UAAYA,EAAK,aAAa,UAAU,IAC/C,EAAEA,EAAK,UAAYA,EAAK,aAAa,UAAU,IAC/CA,EAAK,aAAa,MAAM,GACxB,iBAAe,KAAKA,EAAK,aAAa,MAAM,CAAC,GAC7C,EAAEA,EAAK,SAAS,gBACdA,EAAK,SAAS,iBACfA,EAAK,aAAa,KAAK,GAAKA,EAAK,aAAa,KAAK,GACnDA,EAAK,aAAa,MAAM,IAAM,UACjC+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,eAAgB,CACfsC,IAAc,SACd,EAAEtC,EAAK,UAAYA,EAAK,aAAa,UAAU,IAC/C,EAAEA,EAAK,UAAYA,EAAK,aAAa,UAAU,IAC/CA,EAAK,aAAa,MAAM,GACxB,iBAAe,KAAKA,EAAK,aAAa,MAAM,CAAC,IAC5CA,EAAK,SAAS,gBAAkBA,EAAK,SAAS,gBACjD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,WAAY,CACf,IAAIiF,EACJ,GAAI,wBAAwB,KAAK3C,CAAS,EACxC2C,EAAajF,UACJsC,IAAc,QACvB,GAAItC,EAAK,aAAa,MAAM,EAAG,CAC7B,MAAMuF,EAAYvF,EAAK,aAAa,MAAM,GACtCuF,IAAc,QAAU,iBAAe,KAAKA,CAAS,GACrD,gBAAc,KAAKA,CAAS,GAC5B,gBAAc,KAAKA,CAAS,KAC9BN,EAAajF,EAEjB,MACEiF,EAAajF,EAGbiF,IACCjF,EAAK,UAAYA,EAAK,aAAa,UAAU,IAChD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,WAAY,CACf,IAAIiF,EACJ,GAAI,wBAAwB,KAAK3C,CAAS,EACxC2C,EAAajF,UACJsC,IAAc,QACvB,GAAItC,EAAK,aAAa,MAAM,EAAG,CAC7B,MAAMuF,EAAYvF,EAAK,aAAa,MAAM,GACtCuF,IAAc,QAAU,iBAAe,KAAKA,CAAS,GACrD,gBAAc,KAAKA,CAAS,GAC5B,gBAAc,KAAKA,CAAS,KAC9BN,EAAajF,EAEjB,MACEiF,EAAajF,EAGbiF,GACA,EAAEjF,EAAK,UAAYA,EAAK,aAAa,UAAU,IACjD+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,OAAQ,CACPA,IAAS,KAAKrB,GAAS,iBACzBoD,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,QAAS,CACZ,GAAIA,EAAK,cAAc,EAAG,CACxB,MAAMuB,EAAS,KAAK1C,GAAU,iBAAiBmB,EAAM,UAAQ,EAC7D,IAAIwB,EAAUD,EAAO,WAAW,EAC5BW,EACJ,KAAOV,IACLU,EAAOV,EAAQ,WAAa,gBAC1BA,EAAQ,WAAa,YACnB,EAACU,IAGLV,EAAUD,EAAO,YAAY,EAE3BW,GACFH,EAAQ,IAAI/B,CAAI,CAEpB,MACE+B,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,cAAe,EACb8B,GAAc9B,IAAS8B,EAAW,mBACnC9B,IAAS,KAAKX,KAChB0C,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,aAAc,EACZ8B,GAAc9B,IAAS8B,EAAW,kBACnC9B,IAAS,KAAKX,KAChB0C,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,aAAc,EACZ8B,GAAc9B,IAAS8B,EAAW,mBAClC9B,IAAS8B,EAAW,kBAAqB9B,IAAS,KAAKX,KAC1D0C,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,gBAAiB,CACpB,GAAI8B,EAAY,CACd,KAAM,CAAC0D,CAAK,EAAI,KAAK,kBAAkB,CACrC,EAAG,EACH,EAAG,CACL,EAAGxF,CAAI,EACHwF,GACFzD,EAAQ,IAAIyD,CAAK,CAErB,MAAWxF,IAAS,KAAKX,IACvB0C,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,eAAgB,CACnB,GAAI8B,EAAY,CACd,KAAM,CAAC0D,CAAK,EAAI,KAAK,kBAAkB,CACrC,EAAG,EACH,EAAG,EACH,QAAS,EACX,EAAGxF,CAAI,EACHwF,GACFzD,EAAQ,IAAIyD,CAAK,CAErB,MAAWxF,IAAS,KAAKX,IACvB0C,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,eAAgB,CACnB,GAAI8B,EAAY,CACd,KAAM,CAAC0D,CAAK,EAAI,KAAK,kBAAkB,CACrC,EAAG,EACH,EAAG,CACL,EAAGxF,CAAI,EACP,GAAIwF,IAAUxF,EAAM,CAClB,KAAM,CAACyF,CAAK,EAAI,KAAK,kBAAkB,CACrC,EAAG,EACH,EAAG,EACH,QAAS,EACX,EAAGzF,CAAI,EACHyF,IAAUzF,GACZ+B,EAAQ,IAAI/B,CAAI,CAEpB,CACF,MAAWA,IAAS,KAAKX,IACvB0C,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,UAAW,CACd,MAAM0F,EAAO1F,EAAK,aAAa,IAAI,EAC/B0F,KACE,EAAAZ,SAAoBY,CAAI,GACxB,KAAK/F,GAAQ,eAAe,IAAI+F,CAAI,GACtC3D,EAAQ,IAAI/B,CAAI,KAET,EAAA8E,SAAoBxC,CAAS,EAClC,KAAK3C,GAAQ,eAAe,IAAI2C,CAAS,GAC3CP,EAAQ,IAAI/B,CAAI,GAGTA,aAAgB,KAAKL,GAAQ,aAC7BK,aAAgB,KAAKL,GAAQ,aACtCoC,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,IAAK,eAAgB,CACnB,GAAIA,EAAK,QAAS,CAChB,KAAM,CAAE,QAAA2E,CAAQ,EAAI,KAAKhF,GAAQ,iBAAiBK,CAAI,EAClD2E,IAAY,QACd5C,EAAQ,IAAI/B,CAAI,CAEpB,CACA,KACF,CACA,IAAK,OACL,IAAK,eAEH,MAGF,IAAK,QACL,IAAK,SACL,IAAK,eACL,IAAK,aAAc,CACjB,GAAIK,EAAM,CACR,MAAMgB,EAAM,gCAAgCiC,CAAO,GACnD,MAAM,IAAI,aAAajC,EAAK,mBAAiB,CAC/C,CACA,KACF,CAEA,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,qBACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,eACL,IAAK,aACL,IAAK,gBACL,IAAK,mBAAoB,CACvB,GAAIhB,EAAM,CACR,MAAMgB,EAAM,6BAA6BiC,CAAO,GAChD,MAAM,IAAI,aAAajC,EAAK,mBAAiB,CAC/C,CACA,KACF,CACA,QACE,GAAIiC,EAAQ,WAAW,UAAU,GAC/B,GAAIjD,EAAM,CACR,MAAMgB,EAAM,6BAA6BiC,CAAO,GAChD,MAAM,IAAI,aAAajC,EAAK,mBAAiB,CAC/C,UACS,CAACoC,EAAS,CACnB,MAAMpC,EAAM,yBAAyBiC,CAAO,GAC5C,MAAM,IAAI,aAAajC,EAAK,YAAU,CACxC,CAEJ,CAEF,OAAOU,CACT,CASA,4BAA4BvB,EAAKR,EAAM,CACrC,KAAM,CAAE,SAAU6D,EAAa,KAAMP,CAAQ,EAAI9C,EACjD,IAAIgD,EACJ,GAAI,MAAM,QAAQK,CAAW,EAAG,CAC9B,KAAM,CAAE,SAAA/C,CAAS,KAAI,WAAQ+C,EAAY,CAAC,CAAC,EACrC,CAAC3C,CAAM,EAAIJ,EACX,CAAC,GAAGK,CAAM,EAAID,EACd,CAAE,KAAAyE,CAAK,EAAI3F,EACjB,GAAIsD,IAAY,OAAQ,CACtB,IAAIpB,EACJ,UAAWY,KAAQ3B,EAAQ,CACzB,KAAM,CAAE,KAAM4B,CAAS,EAAID,EAC3B,GAAIC,IAAa,aAAY,CAE3B,MAAM1B,EAAM,uBADA,eAAYb,CAAG,CACQ,GACnC,MAAM,IAAI,aAAaa,EAAK,YAAU,CACxC,CAEA,GADAa,EAAO,KAAK,eAAeY,EAAM6C,CAAI,EAAE,IAAIA,CAAI,EAC3C,CAACzD,EACH,KAEJ,CACIA,IACFsB,EAAMxD,EAEV,SAAWsD,IAAY,eAAgB,CACrC,IAAIyB,EAASY,EACTzD,EACJ,KAAO6C,GAAQ,CACb,UAAWjC,KAAQ3B,EAAQ,CACzB,KAAM,CAAE,KAAM4B,CAAS,EAAID,EAC3B,GAAIC,IAAa,aAAY,CAE3B,MAAM1B,EAAM,uBADA,eAAYb,CAAG,CACQ,GACnC,MAAM,IAAI,aAAaa,EAAK,YAAU,CACxC,CAEA,GADAa,EAAO,KAAK,eAAeY,EAAMiC,CAAM,EAAE,IAAIA,CAAM,EAC/C,CAAC7C,EACH,KAEJ,CACA,GAAIA,EACF,MAEA6C,EAASA,EAAO,UAEpB,CACI7C,IACFsB,EAAMxD,EAEV,CACF,SAAWsD,IAAY,OACrBE,EAAMxD,MACD,CACL,MAAMqB,EAAM,qBAAqBiC,CAAO,GACxC,MAAM,IAAI,aAAajC,EAAK,YAAU,CACxC,CACA,OAAOmC,GAAO,IAChB,CAUA,eAAehD,EAAKR,EAAMC,EAAK,CAC7B,KAAM,CAAE,KAAM2F,CAAQ,EAAIpF,EACpBuB,EAAU,IAAI,IACpB,GAAIvB,EAAI,OAAS,QACf,OAAOuB,EAET,MAAMuB,KAAU,oBAAiB9C,EAAI,IAAI,EAIzC,GAHI,OAAO8C,GAAY,UAAYA,IAAY9C,EAAI,OACjDA,EAAI,KAAO8C,GAETtD,EAAK,WAAa,eACpB,OAAQ4F,EAAS,CACf,KAAK,0BAAyB,CAC5B,UAAQ,2BAA2BtC,EAASrD,CAAG,EAC/C,KACF,CACA,KAAK,cAAa,CACZD,EAAK,KAAOsD,GACdvB,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,KAAK,iBAAgB,CACfA,EAAK,UAAU,SAASsD,CAAO,GACjCvB,EAAQ,IAAI/B,CAAI,EAElB,KACF,CACA,KAAK,wBAEH,OADc,KAAK,0BAA0BQ,EAAKR,EAAMC,CAAG,EAG7D,QAAS,CACP,MAAMuD,EAAM,UAAQ,cAAchD,EAAKR,EAAMC,CAAG,EAC5CuD,GACFzB,EAAQ,IAAIyB,CAAG,CAEnB,CACF,SACS,KAAKlE,IAAWsG,IAAY,yBAC5B5F,EAAK,WAAa,yBAAwB,CACnD,GAAIsD,IAAY,OAAS,qBAAmB,KAAKA,CAAO,EAEtD,OADc,KAAK,0BAA0B9C,EAAKR,EAAMC,CAAG,EAEtD,GAAI,kBAAgB,KAAKqD,CAAO,EAAG,CACxC,MAAME,EAAM,KAAK,4BAA4BhD,EAAKR,EAAMC,CAAG,EACvDuD,GACFzB,EAAQ,IAAIyB,CAAG,CAEnB,CACF,CACA,OAAOzB,CACT,CAUA,aAAaZ,EAAQnB,EAAMC,EAAK,CAC9B,KAAM,CAAE,WAAA4F,EAAY,UAAAvD,EAAW,SAAAwD,CAAS,EAAI9F,EAC5C,IAAI+F,EAAS,KAAK3G,GAAS,IAAI+B,CAAM,EACjCe,EACJ,GAAI6D,GAAUA,EAAO,IAAI/F,CAAI,EAAG,CAC9B,KAAM,CAAE,KAAA0F,EAAM,QAAA3D,CAAQ,EAAIgE,EAAO,IAAI/F,CAAI,EACrC6F,GAAY,SAAWH,IACzBxD,EAAOH,EAEX,CACA,GAAI,OAAOG,GAAS,UAAW,CAC7B,IAAI8D,EACAF,IAAa,gBAAgB,WAAS,KAAKxD,CAAS,EACtD0D,EAAO,GAEPA,EAAO,GAET,UAAWlD,KAAQ3B,EAAQ,CACzB,KAAM,CAAE,KAAM8E,EAAU,KAAMlD,CAAS,EAAID,EAK3C,GAJIC,IAAa,yBAAyBkD,IAAa,QACrDD,EAAO,IAET9D,EAAO,KAAK,eAAeY,EAAM9C,EAAMC,CAAG,EAAE,IAAID,CAAI,EAChD,CAACkC,EACH,KAEJ,CACI8D,IACGD,IACHA,EAAS,IAAI,SAEfA,EAAO,IAAI/F,EAAM,CACf,KAAM6F,GAAY,OAClB,QAAS3D,CACX,CAAC,EACD,KAAK9C,GAAS,IAAI+B,EAAQ4E,CAAM,EAEpC,CACA,MAAO,CAAC,CAAC7D,CACX,CASA,qBAAqBjB,EAAOhB,EAAM,CAAC,EAAG,CACpC,KAAM,CAAE,SAAAiG,EAAU,aAAAC,CAAa,EAAIlG,EAC7BM,EAAQ,IAAI,IACZI,EAAIM,EAAM,OAChB,GAAIN,EACF,GAAIuF,EACF,QAAStF,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAC1B,MAAMF,EAAOO,EAAML,CAAC,EACP,KAAK,aAAauF,EAAczF,EAAMT,CAAG,GAEpDM,EAAM,IAAIG,CAAI,CAElB,KACK,CACL,MAAMkD,EAAM,CAAC,EAAE,MAAM,KAAK3C,CAAK,EAC/B,OAAO,IAAI,IAAI2C,CAAG,CACpB,CAEF,OAAOrD,CACT,CAUA,qBAAqBY,EAAQiF,EAAUnG,EAAK,CAC1C,KAAM,CAAC6C,EAAM,GAAGqD,CAAY,EAAIhF,EAC1B+E,EAAWC,EAAa,OAAS,EACjC,CAAE,KAAMpD,CAAS,EAAID,EACrBmD,KAAW,oBAAiBnD,EAAK,IAAI,EACvC,OAAOmD,GAAa,UAAYA,IAAanD,EAAK,OACpDA,EAAK,KAAOmD,GAEd,IAAI1F,EAAQ,IAAI,IACZ8F,EAAU,GACd,GAAI,KAAK/G,GACP+G,EAAU,OAEV,QAAQtD,EAAU,CAChB,KAAK,0BAAyB,CAC5B,UAAQ,2BAA2BkD,EAAUhG,CAAG,EAChD,KACF,CACA,KAAK,cAAa,CAChB,GAAI,KAAKZ,GAAM,WAAa,eAC1BgH,EAAU,OACL,CACL,MAAMrG,EAAO,KAAKX,GAAM,eAAe4G,CAAQ,EAC3CjG,GAAQA,IAASoG,GAAYA,EAAS,SAASpG,CAAI,IACjDkG,EACW,KAAK,aAAaC,EAAcnG,EAAMC,CAAG,GAEpDM,EAAM,IAAIP,CAAI,EAGhBO,EAAM,IAAIP,CAAI,EAGpB,CACA,KACF,CACA,KAAK,iBAAgB,CACnB,MAAMiB,EAAQmF,EAAS,uBAAuBH,CAAQ,EACtD1F,EAAQ,KAAK,qBAAqBU,EAAO,CACvC,SAAAiF,EACA,aAAAC,CACF,CAAC,EACD,KACF,CACA,KAAK,gBAAe,CAClB,GAAI,KAAKxH,GAAS,cAAgB,aAC9B,CAAC,OAAO,KAAKsH,CAAQ,EAAG,CAC1B,MAAMhF,EAAQmF,EAAS,qBAAqBH,CAAQ,EACpD1F,EAAQ,KAAK,qBAAqBU,EAAO,CACvC,SAAAiF,EACA,aAAAC,CACF,CAAC,CACH,MACEE,EAAU,GAEZ,KACF,CACA,QACEA,EAAU,EAEd,CAEF,MAAO,CACL,MAAA9F,EACA,QAAA8F,CACF,CACF,CAUA,iBAAiBlD,EAAMnD,EAAMC,EAAM,CAAC,EAAG,CACrC,KAAM,CAAE,MAAA+C,EAAO,OAAA7B,CAAO,EAAIgC,EACpB,CAAE,KAAMmD,CAAU,EAAItD,EACtB,CAAE,WAAAlB,CAAW,EAAI9B,EACjB,CAAE,IAAAuG,CAAI,EAAItG,EACV8B,EAAU,IAAI,IACpB,GAAIwE,IAAQpI,EACV,OAAQmI,EAAW,CACjB,IAAK,IAAK,CACR,MAAM9E,EAAUxB,EAAK,mBACjBwB,GACW,KAAK,aAAaL,EAAQK,EAASvB,CAAG,GAEjD8B,EAAQ,IAAIP,CAAO,EAGvB,KACF,CACA,IAAK,IAAK,CACR,GAAIM,EAAY,CACd,MAAMP,EAAS,KAAK,kBAAkBO,CAAU,EAChD,IAAIN,EAAU,KAAK,UAAUxB,EAAMuB,CAAM,EAEzC,IADAC,EAAUD,EAAO,YAAY,EACtBC,GACQ,KAAK,aAAaL,EAAQK,EAASvB,CAAG,GAEjD8B,EAAQ,IAAIP,CAAO,EAErBA,EAAUD,EAAO,YAAY,CAEjC,CACA,KACF,CACA,IAAK,IAAK,CACR,MAAMA,EAAS,KAAK,kBAAkBvB,CAAI,EAC1C,IAAIwB,EAAU,KAAK,UAAUxB,EAAMuB,CAAM,EAEzC,IADAC,EAAUD,EAAO,WAAW,EACrBC,GACQ,KAAK,aAAaL,EAAQK,EAASvB,CAAG,GAEjD8B,EAAQ,IAAIP,CAAO,EAErBA,EAAUD,EAAO,YAAY,EAE/B,KACF,CACA,IAAK,IACL,QAAS,CACP,KAAM,CAAE,MAAAhB,EAAO,QAAA8F,CAAQ,EAAI,KAAK,qBAAqBlF,EAAQnB,CAAI,EACjE,GAAIO,EAAM,KACR,OAAOA,EAET,GAAI8F,EAAS,CACX,MAAM9E,EAAS,KAAK,kBAAkBvB,CAAI,EAC1C,IAAIwB,EAAU,KAAK,UAAUxB,EAAMuB,CAAM,EAEzC,IADAC,EAAUD,EAAO,SAAS,EACnBC,GAAWxB,EAAK,SAASwB,CAAO,GACxB,KAAK,aAAaL,EAAQK,EAASvB,CAAG,GAEjD8B,EAAQ,IAAIP,CAAO,EAErBA,EAAUD,EAAO,SAAS,CAE9B,CACF,CACF,KAEA,QAAQ+E,EAAW,CACjB,IAAK,IAAK,CACR,MAAM9E,EAAUxB,EAAK,uBACjBwB,GACW,KAAK,aAAaL,EAAQK,EAASvB,CAAG,GAEjD8B,EAAQ,IAAIP,CAAO,EAGvB,KACF,CACA,IAAK,IAAK,CACR,GAAIM,EAAY,CACd,MAAMP,EAAS,KAAK,kBAAkBO,CAAU,EAChD,IAAIN,EAAU,KAAK,UAAUM,EAAYP,CAAM,EAE/C,IADAC,EAAUD,EAAO,WAAW,EACrBC,GACDA,IAAYxB,GAGD,KAAK,aAAamB,EAAQK,EAASvB,CAAG,GAEjD8B,EAAQ,IAAIP,CAAO,EAGvBA,EAAUD,EAAO,YAAY,CAEjC,CACA,KACF,CACA,IAAK,IAAK,CACJO,GACW,KAAK,aAAaX,EAAQW,EAAY7B,CAAG,GAEpD8B,EAAQ,IAAID,CAAU,EAG1B,KACF,CACA,IAAK,IACL,QAAS,CACP,MAAM8B,EAAM,CAAC,EACb,IAAIpC,EAAUM,EACd,KAAON,GACQ,KAAK,aAAaL,EAAQK,EAASvB,CAAG,GAEjD2D,EAAI,KAAKpC,CAAO,EAElBA,EAAUA,EAAQ,WAEpB,GAAIoC,EAAI,OACN,OAAO,IAAI,IAAIA,EAAI,QAAQ,CAAC,CAEhC,CACF,CAEF,OAAO7B,CACT,CAUA,UAAUZ,EAAQlB,EAAK,CACrB,KAAM,CAAE,KAAAD,CAAK,EAAIC,EACjB,IAAIuB,EAAU,KAAK,UAAUxB,EAAM,KAAKb,EAAS,EAC7CqH,EACJ,GAAIhF,EAQF,IAPIA,EAAQ,WAAa,eACvBA,EAAU,KAAKrC,GAAU,SAAS,EACzBqC,IAAYxB,GACjBwB,IAAY,KAAKnC,KACnBmC,EAAU,KAAKrC,GAAU,SAAS,GAG/BqC,GAAS,CAId,GAHgB,KAAK,aAAaL,EAAQK,EAAS,CACjD,KAAM,KAAK9B,EACb,CAAC,EACY,CACX8G,EAAchF,EACd,KACF,CACAA,EAAU,KAAKrC,GAAU,SAAS,CACpC,CAEF,OAAOqH,GAAe,IACxB,CAQA,WAAWrF,EAAQ,CACjB,MAAMZ,EAAQ,CAAC,EACT2B,EAAO,KAAK,aAAaf,EAAQ,KAAKpC,GAAO,CACjD,KAAM,KAAKW,EACb,CAAC,EACD,IAAI+G,EAAW,GACf,OAAIvE,IACF3B,EAAM,KAAK,KAAKxB,EAAK,EACrB0H,EAAW,IAEN,CAAClG,EAAOkG,CAAQ,CACzB,CASA,YAAYtF,EAAQlB,EAAM,CAAC,EAAG,CAC5B,KAAM,CAAE,QAAAyG,CAAQ,EAAIzG,EACdM,EAAQ,CAAC,EACf,IAAI2B,EAAO,KAAK,aAAaf,EAAQ,KAAKpC,GAAO,CAC/C,KAAM,KAAKW,EACb,CAAC,EACG+G,EAAW,GAKf,GAJIvE,IACF3B,EAAM,KAAK,KAAKxB,EAAK,EACrB0H,EAAW,IAET,CAACvE,GAAQwE,EAAS,CACpB,IAAIlF,EAAU,KAAKzC,GAAM,WACzB,KAAOyC,IACLU,EAAO,KAAK,aAAaf,EAAQK,EAAS,CACxC,KAAM,KAAK9B,EACb,CAAC,EACGwC,IACF3B,EAAM,KAAKiB,CAAO,EAClBiF,EAAW,IAETjF,EAAQ,aACVA,EAAUA,EAAQ,UAKxB,CACA,MAAO,CAACjB,EAAOkG,CAAQ,CACzB,CAQA,WAAWtF,EAAQ,CACjB,MAAMZ,EAAQ,CAAC,EACTP,EAAO,KAAK,UAAUmB,EAAQ,CAClC,KAAM,KAAKpC,EACb,CAAC,EACD,IAAI0H,EAAW,GACf,OAAIzG,IACFO,EAAM,KAAKP,CAAI,EACfyG,EAAW,IAEN,CAAClG,EAAOkG,CAAQ,CACzB,CAWA,wBAAwBxF,EAAOhB,EAAM,CAAC,EAAG,CACvC,KAAM,CAAE,QAAAyG,EAAS,SAAAR,EAAU,aAAAC,EAAc,WAAAQ,CAAW,EAAI1G,EACxD,IAAIM,EAAQ,CAAC,EACTkG,EAAW,GACXG,EAAY,GAChB,MAAMjG,EAAIM,EAAM,OAChB,GAAIN,EACF,GAAI,KAAK5B,GAAM,WAAa,eAC1B,QAAS6B,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAC1B,MAAMZ,EAAOiB,EAAML,CAAC,EACpB,GAAIZ,IAAS,KAAKjB,KACb,KAAKA,GAAM,SAASiB,CAAI,GAAKA,EAAK,SAAS,KAAKjB,EAAK,IACxD,GAAImH,GAIF,GAHa,KAAK,aAAaC,EAAcnG,EAAM,CACjD,KAAM,KAAKN,EACb,CAAC,IAECa,EAAM,KAAKP,CAAI,EACfyG,EAAW,GACPE,IAAerI,GACjB,cAIJiC,EAAM,KAAKP,CAAI,EACfyG,EAAW,GACPE,IAAerI,EACjB,MAIR,SACSoI,EACT,GAAIR,EACF,QAAStF,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAC1B,MAAMZ,EAAOiB,EAAML,CAAC,EAIpB,GAHa,KAAK,aAAauF,EAAcnG,EAAM,CACjD,KAAM,KAAKN,EACb,CAAC,IAECa,EAAM,KAAKP,CAAI,EACfyG,EAAW,GACPE,IAAerI,GACjB,KAGN,MAEAiC,EAAQ,CAAC,EAAE,MAAM,KAAKU,CAAK,EAC3BwF,EAAW,GACXG,EAAY,WAELV,EACT,QAAStF,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAC1B,MAAMZ,EAAOiB,EAAML,CAAC,EAIpB,GAHa,KAAK,aAAauF,EAAcnG,EAAM,CACjD,KAAM,KAAKN,EACb,CAAC,IAECa,EAAM,KAAKP,CAAI,EACfyG,EAAW,GACPE,IAAerI,GACjB,KAGN,MAEAiC,EAAQ,CAAC,EAAE,MAAM,KAAKU,CAAK,EAC3BwF,EAAW,GACXG,EAAY,GAGhB,MAAO,CAACrG,EAAOkG,EAAUG,CAAS,CACpC,CAUA,gBAAgBzD,EAAMwD,EAAYD,EAAS,CACzC,KAAM,CAAE,OAAAvF,CAAO,EAAIgC,EACb,CAACL,EAAM,GAAGqD,CAAY,EAAIhF,EAC1B+E,EAAWC,EAAa,OAAS,EACjC,CAAE,KAAMF,EAAU,KAAMlD,CAAS,EAAID,EAC3C,IAAIvC,EAAQ,CAAC,EACTqG,EAAY,GACZH,EAAW,GACXJ,EAAU,GACd,OAAQtD,EAAU,CAChB,KAAK,0BAAyB,CAC5B,UAAQ,2BAA2BkD,EAAU,CAC3C,KAAM,KAAKvG,EACb,CAAC,EACD,KACF,CACA,KAAK,cAAa,CAChB,GAAIiH,IAAenI,EACjB,CAAC+B,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,UACjCwF,IAAepI,EACxB,CAACgC,EAAOkG,CAAQ,EAAI,KAAK,YAAYtF,EAAQ,CAC3C,QAAAuF,CACF,CAAC,UACQC,IAAerI,GACf,KAAKe,GAAM,WAAa,eAAc,CAC/C,MAAMW,EAAO,KAAKX,GAAM,eAAe4G,CAAQ,EAC3CjG,IACEkG,EACW,KAAK,aAAaC,EAAcnG,EAAM,CACjD,KAAM,KAAKN,EACb,CAAC,IAECa,EAAM,KAAKP,CAAI,EACfyG,EAAW,KAGblG,EAAM,KAAKP,CAAI,EACfyG,EAAW,IAGjB,MAAWE,IAAerI,EACxB,CAACiC,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,EAE1CkF,EAAU,GAEZ,KACF,CACA,KAAK,iBAAgB,CACnB,GAAIM,IAAenI,EACjB,CAAC+B,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,UACjCwF,IAAepI,EACxB,CAACgC,EAAOkG,CAAQ,EAAI,KAAK,YAAYtF,EAAQ,CAC3C,QAAAuF,CACF,CAAC,UACQ,KAAKrH,GAAM,WAAa,gBAAe,CAChD,MAAM4B,EAAQ,KAAK5B,GAAM,uBAAuB4G,CAAQ,EACpDhF,EAAM,SACR,CAACV,EAAOkG,EAAUG,CAAS,EAAI,KAAK,wBAAwB3F,EAAO,CACjE,QAAAyF,EACA,SAAAR,EACA,aAAAC,EACA,WAAAQ,CACF,CAAC,EAEL,MAAWA,IAAerI,EACxB,CAACiC,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,EAE1CkF,EAAU,GAEZ,KACF,CACA,KAAK,gBAAe,CAClB,GAAIM,IAAenI,EACjB,CAAC+B,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,UACjCwF,IAAepI,EACxB,CAACgC,EAAOkG,CAAQ,EAAI,KAAK,YAAYtF,EAAQ,CAC3C,QAAAuF,CACF,CAAC,UACQ,KAAK/H,GAAS,cAAgB,aAC9B,KAAKU,GAAM,WAAa,iBACxB,CAAC,OAAO,KAAK4G,CAAQ,EAAG,CACjC,MAAMhF,EAAQ,KAAK5B,GAAM,qBAAqB4G,CAAQ,EAClDhF,EAAM,SACR,CAACV,EAAOkG,EAAUG,CAAS,EAAI,KAAK,wBAAwB3F,EAAO,CACjE,QAAAyF,EACA,SAAAR,EACA,aAAAC,EACA,WAAAQ,CACF,CAAC,EAEL,MAAWA,IAAerI,EACxB,CAACiC,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,EAE1CkF,EAAU,GAEZ,KACF,CACA,QACE,GAAIM,IAAepI,GAAiB,kBAAgB,KAAK0H,CAAQ,GAC/D,GAAI,KAAK3G,IACL,KAAKP,GAAM,WAAa,yBAAwB,CAClD,MAAMiB,EAAO,KAAK,4BAA4B8C,EAAM,KAAK/D,EAAK,EAC1DiB,IACFO,EAAM,KAAKP,CAAI,EACfyG,EAAW,GAEf,OACSE,IAAenI,EACxB,CAAC+B,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,EACjCwF,IAAepI,EACxB,CAACgC,EAAOkG,CAAQ,EAAI,KAAK,YAAYtF,EAAQ,CAC3C,QAAAuF,CACF,CAAC,EACQC,IAAerI,EACxB,CAACiC,EAAOkG,CAAQ,EAAI,KAAK,WAAWtF,CAAM,EAE1CkF,EAAU,EAGhB,CACA,MAAO,CACL,UAAAO,EACA,SAAAV,EACA,SAAAO,EACA,MAAAlG,EACA,QAAA8F,CACF,CACF,CAQA,cAAcM,EAAY,CACxB,MAAMnG,EAAM,KAAK/B,GAAK,OAAO,EAC7B,GAAIkI,IAAetI,GAAcsI,IAAerI,EAAc,CAC5D,MAAMuI,EAAe,IAAI,IACzB,IAAIjG,EAAI,EACR,SAAW,CAAE,OAAAM,CAAO,IAAKV,EAAK,CAC5B,MAAMsG,EAAY5F,EAAO,OACnBwF,EAAUI,EAAY,EACtBC,EAAY7F,EAAO,CAAC,EAC1B,IAAIqF,EACApD,EACJ,GAAIuD,EAAS,CACX,KAAM,CACJ,MAAOM,EACP,OAAQ,CAAC,CACP,KAAMC,EACN,KAAMC,CACR,CAAC,CACH,EAAIH,EACEI,EAAWjG,EAAO4F,EAAY,CAAC,EAC/B,CACJ,OAAQ,CAAC,CACP,KAAMM,EACN,KAAMC,CACR,CAAC,CACH,EAAIF,EACJ,GAAIE,IAAa,2BACbA,IAAa,cACfd,EAAMnI,EACN+E,EAAOgE,UACED,IAAc,2BACdA,IAAc,cACvBX,EAAMpI,EACNgF,EAAO4D,UACEJ,IAAetI,EACxB,GAAI4I,IAAc,KAAOC,IAAc,gBACrCX,EAAMnI,EACN+E,EAAOgE,UACEC,IAAa,KAAOC,IAAa,gBAC1Cd,EAAMpI,EACNgF,EAAO4D,UACED,IAAc,EAAG,CAC1B,KAAM,CAAE,KAAMR,CAAU,EAAIU,EACxB,SAAS,KAAKV,CAAS,GACzBC,EAAMnI,EACN+E,EAAOgE,IAEPZ,EAAMpI,EACNgF,EAAO4D,EAEX,MACER,EAAMpI,EACNgF,EAAO4D,UAEAK,IAAa,KAAOC,IAAa,gBAC1Cd,EAAMpI,EACNgF,EAAO4D,UACEE,IAAc,KAAOC,IAAc,gBAC5CX,EAAMnI,EACN+E,EAAOgE,MACF,CACL,IAAIjF,EACJ,SAAW,CAAE,MAAAc,EAAO,OAAQ,CAACF,CAAI,CAAE,IAAK5B,EAAQ,CAC9C,KAAM,CAAE,KAAM+E,EAAU,KAAMlD,CAAS,EAAID,EAC3C,GAAIC,IAAa,yBAAyBkD,IAAa,MAAO,CAC5D/D,EAAO,GACP,KACF,CACA,GAAI,CAACA,GAAQc,EAAO,CAClB,KAAM,CAAE,KAAMsD,CAAU,EAAItD,EACxB,SAAS,KAAKsD,CAAS,IACzBpE,EAAO,GAEX,CACF,CACIA,GACFqE,EAAMpI,EACNgF,EAAO4D,IAEPR,EAAMnI,EACN+E,EAAOgE,EAEX,CACF,MACEZ,EAAMnI,EACN+E,EAAO4D,EAET,KAAM,CACJ,UAAAH,EAAW,SAAAV,EAAU,SAAAO,EAAU,MAAAlG,EAAO,QAAA8F,CACxC,EAAI,KAAK,gBAAgBlD,EAAMwD,EAAYD,CAAO,EAC9CnG,EAAM,QACR,KAAK9B,GAAKmC,CAAC,EAAE,KAAO,GACpB,KAAK5B,GAAO4B,CAAC,EAAIL,GACR8F,GACTQ,EAAa,IAAI,IAAI,IAAI,CACvB,CAAC,QAASjG,CAAC,EACX,CAAC,OAAQuC,CAAI,CACf,CAAC,CAAC,EAEJ,KAAK1E,GAAKmC,CAAC,EAAE,UAAYgG,EACzB,KAAKnI,GAAKmC,CAAC,EAAE,IAAM2F,EACnB,KAAK9H,GAAKmC,CAAC,EAAE,SAAW6F,GAAY,CAACP,EACrCtF,GACF,CACA,GAAIiG,EAAa,KAAM,CACrB,IAAI7G,EACAuB,EACA,KAAKxC,KAAU,KAAKM,IAAS,KAAKN,GAAM,WAAa,gBACvDiB,EAAO,KAAKjB,GACZwC,EAAS,KAAKpC,KAEda,EAAO,KAAKX,GACZkC,EAAS,KAAK/B,IAEhB,IAAI4D,EAAW,KAAK,UAAUpD,EAAMuB,CAAM,EAC1C,KAAO6B,GAAU,CACf,IAAIlB,EAAO,GAUX,GATI,KAAKnD,GAAM,WAAa,eACtBqE,IAAa,KAAKrE,GACpBmD,EAAO,GAEPA,EAAO,KAAKnD,GAAM,SAASqE,CAAQ,EAGrClB,EAAO,GAELA,EACF,UAAWoF,KAAeT,EAAc,CACtC,KAAM,CAAE,OAAA1F,CAAO,EAAImG,EAAY,IAAI,MAAM,EAIzC,GAHgB,KAAK,aAAanG,EAAQiC,EAAU,CAClD,KAAM,KAAK1D,EACb,CAAC,EACY,CACX,MAAM6H,EAAQD,EAAY,IAAI,OAAO,EACrC,KAAK7I,GAAK8I,CAAK,EAAE,SAAW,GAC5B,KAAK9I,GAAK8I,CAAK,EAAE,KAAO,GACxB,KAAKvI,GAAOuI,CAAK,EAAE,KAAKnE,CAAQ,CAClC,CACF,CAEEA,IAAa7B,EAAO,cACtB6B,EAAW,KAAK,UAAUA,EAAU7B,CAAM,GAE5C6B,EAAW7B,EAAO,SAAS,CAC7B,CACF,CACF,KAAO,CACL,IAAIX,EAAI,EACR,SAAW,CAAE,OAAAM,CAAO,IAAKV,EAAK,CAC5B,MAAM2C,EAAOjC,EAAOA,EAAO,OAAS,CAAC,EAC/BwF,EAAUxF,EAAO,OAAS,EAC1B,CACJ,SAAAgF,EAAU,SAAAO,EAAU,MAAAlG,CACtB,EAAI,KAAK,gBAAgB4C,EAAMwD,EAAYD,CAAO,EAC9CnG,EAAM,SACR,KAAK9B,GAAKmC,CAAC,EAAE,KAAO,GACpB,KAAK5B,GAAO4B,CAAC,EAAIL,GAEnB,KAAK9B,GAAKmC,CAAC,EAAE,IAAMxC,EACnB,KAAKK,GAAKmC,CAAC,EAAE,SAAW6F,GAAY,CAACP,EACrCtF,GACF,CACF,CACA,MAAO,CACL,KAAKnC,GACL,KAAKO,EACP,CACF,CAUA,kBAAkBmE,EAAM5C,EAAOgG,EAAK,CAClC,MAAM3C,EAAM,CAAC,EACb,UAAW5D,KAAQO,EAAO,CACxB,MAAMwB,EAAU,KAAK,iBAAiBoB,EAAMnD,EAAM,CAChD,IAAAuG,EACA,KAAM,KAAK7G,EACb,CAAC,EACGqC,EAAQ,MACV6B,EAAI,KAAK,GAAG7B,CAAO,CAEvB,CACA,OAAI6B,EAAI,OACC,IAAI,IAAIA,CAAG,EAEb,IAAI,GACb,CAWA,eAAe1C,EAAQX,EAAON,EAAK,CACjC,KAAM,CAAE,MAAA+C,EAAO,MAAAuE,CAAM,EAAItH,EACnB,CAAE,MAAOuH,EAAW,OAAArG,CAAO,EAAID,EAAOqG,CAAK,EAC3CpE,EAAO,CACX,MAAAH,EACA,OAAA7B,CACF,EACMwC,EAAY,KAAK,kBAAkBR,EAAM5C,EAAOpC,CAAQ,EAC9D,IAAIqF,EACJ,GAAIG,EAAU,KACZ,GAAI4D,IAAUrG,EAAO,OAAS,EAAG,CAC/B,KAAM,CAACkC,CAAQ,KAAI,aAAUO,CAAS,EACtCH,EAAMJ,CACR,MACEI,EAAM,KAAK,eAAetC,EAAQyC,EAAW,CAC3C,MAAO6D,EACP,MAAOD,EAAQ,CACjB,CAAC,EAGL,OAAO/D,GAAO,IAChB,CAWA,eAAetC,EAAQlB,EAAMC,EAAK,CAChC,KAAM,CAAE,MAAAsH,CAAM,EAAItH,EACZkD,EAAOjC,EAAOqG,CAAK,EACnBhH,EAAQ,IAAI,IAAI,CAACP,CAAI,CAAC,EACtB2D,EAAY,KAAK,kBAAkBR,EAAM5C,EAAOnC,CAAQ,EAC9D,IAAIoF,EACJ,GAAIG,EAAU,MACZ,GAAI4D,IAAU,EACZ/D,EAAMxD,MAEN,WAAWoD,KAAYO,EAIrB,GAHgB,KAAK,eAAezC,EAAQkC,EAAU,CACpD,MAAOmE,EAAQ,CACjB,CAAC,EAEC,OAAOvH,EAKf,OAAOwD,GAAO,IAChB,CAQA,MAAMmD,EAAY,EACZA,IAAetI,GAAcsI,IAAerI,IAC9C,KAAK,4BAA4B,EAEnC,KAAM,CAAC,CAAC,GAAGwC,CAAQ,EAAGP,CAAK,EAAI,KAAK,cAAcoG,CAAU,EACtDhG,EAAIG,EAAS,OACnB,IAAI0C,EAAM,IAAI,IACd,QAAS5C,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAC1B,KAAM,CAAE,OAAAM,EAAQ,UAAA0F,EAAW,IAAAL,EAAK,KAAAkB,CAAK,EAAI3G,EAASF,CAAC,EAC7CkG,EAAY5F,EAAO,OACzB,GAAI4F,GAAaW,EAAM,CACrB,MAAMC,EAAanH,EAAMK,CAAC,EACpB+G,EAAgBD,EAAW,OAC3BhE,EAAYoD,EAAY,EAC9B,GAAIpD,IAAc,EAChB,IAAKiD,IAAetI,GAAcsI,IAAerI,IAC7C,KAAKS,GAAM,WAAa,eAC1B,QAASqD,EAAI,EAAGA,EAAIuF,EAAevF,IAAK,CACtC,MAAMpC,EAAO0H,EAAWtF,CAAC,EACzB,GAAIpC,IAAS,KAAKjB,IAAS,KAAKA,GAAM,SAASiB,CAAI,IACjDwD,EAAI,IAAIxD,CAAI,EACR2G,IAAetI,GACjB,KAGN,SACSsI,IAAetI,EACxB,GAAImF,EAAI,KAAM,CACZ,MAAMoE,EAAI,CAAC,GAAGpE,CAAG,EACjBA,EAAM,IAAI,IAAI,CAAC,GAAGoE,EAAG,GAAGF,CAAU,CAAC,EACnC,KAAKnI,GAAQ,EACf,MACEiE,EAAM,IAAI,IAAIkE,CAAU,MAErB,CACL,KAAM,CAAC1H,CAAI,EAAI0H,EACflE,EAAI,IAAIxD,CAAI,CACd,SACS2G,IAAetI,EACxB,GAAIkI,IAAQpI,EAAU,CACpB,GAAI,CAAE,MAAA6E,CAAM,EAAI9B,EAAO,CAAC,EACxB,UAAWlB,KAAQ0H,EAAY,CAC7B,IAAI/D,EAAY,IAAI,IAAI,CAAC3D,CAAI,CAAC,EAC9B,QAASoC,EAAI,EAAGA,EAAI0E,EAAW1E,IAAK,CAClC,KAAM,CAAE,MAAOoF,EAAW,OAAArG,CAAO,EAAID,EAAOkB,CAAC,EACvCe,EAAO,CACX,MAAAH,EACA,OAAA7B,CACF,EAEA,GADAwC,EAAY,KAAK,kBAAkBR,EAAMQ,EAAW4C,CAAG,EACnD5C,EAAU,KACZ,GAAIvB,IAAMsB,EACR,GAAIF,EAAI,KAAM,CACZ,MAAMoE,EAAI,CAAC,GAAGpE,CAAG,EACjBA,EAAM,IAAI,IAAI,CAAC,GAAGoE,EAAG,GAAGjE,CAAS,CAAC,EAClC,KAAKpE,GAAQ,EACf,MACEiE,EAAMG,OAGRX,EAAQwE,MAGV,MAEJ,CACF,CACF,KACE,WAAWxH,KAAQ0H,EAAY,CAC7B,IAAI/D,EAAY,IAAI,IAAI,CAAC3D,CAAI,CAAC,EAC9B,QAASoC,EAAIsB,EAAY,EAAGtB,GAAK,EAAGA,IAAK,CACvC,MAAMe,EAAOjC,EAAOkB,CAAC,EAErB,GADAuB,EAAY,KAAK,kBAAkBR,EAAMQ,EAAW4C,CAAG,EACnD5C,EAAU,KACRvB,IAAM,IACRoB,EAAI,IAAIxD,CAAI,EACR8G,EAAY,GAAKtD,EAAI,KAAO,IAC9B,KAAKjE,GAAQ,SAIjB,MAEJ,CACF,SAEOoH,IAAerI,GAAgBiI,IAAQpI,EAAU,CAC1D,KAAM,CAAE,MAAO0J,CAAW,EAAI3G,EAAO,CAAC,EACtC,IAAIa,EACJ,UAAW/B,KAAQ0H,EAKjB,GAJA3F,EAAU,KAAK,eAAeb,EAAQ,IAAI,IAAI,CAAClB,CAAI,CAAC,EAAG,CACrD,MAAO6H,EACP,MAAO,CACT,CAAC,EACG9F,EAAS,CACXyB,EAAI,IAAIzB,CAAO,EACf,KACF,CAEF,GAAI,CAACA,GAAW,CAAC6E,EAAW,CAC1B,KAAM,CAAE,OAAQkB,CAAY,EAAI5G,EAAO,CAAC,EAClC,CAAC6G,CAAS,EAAIL,EACpB,IAAIlG,EAAU,KAAK,UAAUsG,EAAa,CACxC,KAAMC,CACR,CAAC,EACD,KAAOvG,GAAS,CAKd,GAJAO,EAAU,KAAK,eAAeb,EAAQ,IAAI,IAAI,CAACM,CAAO,CAAC,EAAG,CACxD,MAAOqG,EACP,MAAO,CACT,CAAC,EACG9F,EAAS,CACXyB,EAAI,IAAIzB,CAAO,EACf,KACF,CACAP,EAAU,KAAK,UAAUsG,EAAa,CACpC,KAAMtG,CACR,CAAC,CACH,CACF,CACF,KAAO,CACL,IAAIO,EACJ,UAAW/B,KAAQ0H,EAIjB,GAHA3F,EAAU,KAAK,eAAeb,EAAQlB,EAAM,CAC1C,MAAO0D,EAAY,CACrB,CAAC,EACG3B,EAAS,CACXyB,EAAI,IAAIxD,CAAI,EACZ,KACF,CAEF,GAAI,CAAC+B,GAAW,CAAC6E,GAAaD,IAAerI,EAAc,CACzD,KAAM,CAAE,OAAQwJ,CAAY,EAAI5G,EAAOwC,CAAS,EAC1C,CAACqE,CAAS,EAAIL,EACpB,IAAIlG,EAAU,KAAK,UAAUsG,EAAa,CACxC,KAAMC,CACR,CAAC,EACD,KAAOvG,GAAS,CAId,GAHAO,EAAU,KAAK,eAAeb,EAAQM,EAAS,CAC7C,MAAOkC,EAAY,CACrB,CAAC,EACG3B,EAAS,CACXyB,EAAI,IAAIhC,CAAO,EACf,KACF,CACAA,EAAU,KAAK,UAAUsG,EAAa,CACpC,KAAMtG,CACR,CAAC,CACH,CACF,CACF,CACF,CACF,CACA,OAAOgC,CACT,CASA,QAAQzD,EAAUC,EAAMC,EAAK,CAC3B,IAAIuD,EACJ,GAAI,CACF,GAAIxD,GAAM,WAAa,eAAc,CACnC,MAAMqB,EAAM,mBAAmBrB,GAAM,QAAQ,GAC7C,MAAM,IAAI,UAAUqB,CAAG,CACzB,CACA,MAAMxB,EAAWG,EAAK,cACtB,GAAIH,IAAa,KAAKhB,IAAagB,EAAS,cAAgB,gBACtD,kBAAeE,EAAU,CAC3B,QAAS,gBAAc,KAAKA,CAAQ,EACpC,WAAY,EACd,CAAC,EACC,OAAO,KAAKb,GAAQ,MAAMa,EAAUC,CAAI,EAG5C,KAAK,OAAOD,EAAUC,EAAMC,CAAG,EAE/BuD,EADc,KAAK,MAAMhF,CAAW,EACxB,IACd,OAASsB,EAAG,CACV,KAAK,SAASA,CAAC,CACjB,CACA,MAAO,CAAC,CAAC0D,CACX,CASA,QAAQzD,EAAUC,EAAMC,EAAK,CAC3B,IAAIuD,EACJ,GAAI,CACF,GAAIxD,GAAM,WAAa,eAAc,CACnC,MAAMqB,EAAM,mBAAmBrB,GAAM,QAAQ,GAC7C,MAAM,IAAI,UAAUqB,CAAG,CACzB,CACA,MAAMxB,EAAWG,EAAK,cACtB,GAAIH,IAAa,KAAKhB,IAAagB,EAAS,cAAgB,gBACtD,kBAAeE,EAAU,CAC3B,QAAS,gBAAc,KAAKA,CAAQ,EACpC,WAAY,EACd,CAAC,EACC,OAAO,KAAKb,GAAQ,QAAQa,EAAUC,CAAI,EAG9C,KAAK,OAAOD,EAAUC,EAAMC,CAAG,EAC/B,MAAMM,EAAQ,KAAK,MAAMhC,CAAa,EACtC,GAAIgC,EAAM,KAAM,CACd,IAAIiB,EAAU,KAAKzC,GACnB,KAAOyC,GAAS,CACd,GAAIjB,EAAM,IAAIiB,CAAO,EAAG,CACtBgC,EAAMhC,EACN,KACF,CACAA,EAAUA,EAAQ,UACpB,CACF,CACF,OAAS1B,EAAG,CACV,KAAK,SAASA,CAAC,CACjB,CACA,OAAO0D,GAAO,IAChB,CASA,cAAczD,EAAUC,EAAMC,EAAK,CACjC,IAAIuD,EACJ,GAAI,IACF,cAAWxD,CAAI,EACf,IAAIH,EAMJ,GALIG,EAAK,WAAa,gBACpBH,EAAWG,EAEXH,EAAWG,EAAK,cAEdH,IAAa,KAAKhB,IAAagB,EAAS,cAAgB,gBACtD,kBAAeE,EAAU,CAC3B,QAAS,gBAAc,KAAKA,CAAQ,EACpC,WAAY,EACd,CAAC,EACC,OAAO,KAAKb,GAAQ,MAAMa,EAAUC,CAAI,EAG5C,KAAK,OAAOD,EAAUC,EAAMC,CAAG,EAC/B,MAAMM,EAAQ,KAAK,MAAMjC,CAAY,EACrCiC,EAAM,OAAO,KAAKxB,EAAK,EACnBwB,EAAM,OACR,CAACiD,CAAG,KAAI,aAAUjD,CAAK,EAE3B,OAAST,EAAG,CACV,KAAK,SAASA,CAAC,CACjB,CACA,OAAO0D,GAAO,IAChB,CAUA,iBAAiBzD,EAAUC,EAAMC,EAAK,CACpC,IAAIuD,EACJ,GAAI,IACF,cAAWxD,CAAI,EACf,IAAIH,EAMJ,GALIG,EAAK,WAAa,gBACpBH,EAAWG,EAEXH,EAAWG,EAAK,cAEdH,IAAa,KAAKhB,IAAagB,EAAS,cAAgB,gBACtD,kBAAeE,EAAU,CAC3B,QAAS,gBAAc,KAAKA,CAAQ,EACpC,WAAY,EACd,CAAC,EACC,OAAO,KAAKb,GAAQ,OAAOa,EAAUC,CAAI,EAG7C,KAAK,OAAOD,EAAUC,EAAMC,CAAG,EAC/B,MAAMM,EAAQ,KAAK,MAAMlC,CAAU,EACnCkC,EAAM,OAAO,KAAKxB,EAAK,EACnBwB,EAAM,OACJ,KAAKhB,GACPiE,KAAM,aAAUjD,CAAK,EAErBiD,EAAM,CAAC,GAAGjD,CAAK,EAGrB,OAAST,EAAG,CACV,KAAK,SAASA,CAAC,CACjB,CACA,OAAO0D,GAAO,CAAC,CACjB,CACF", - "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_is_potential_custom_element_name", "import_nwsapi", "import_dom_util", "import_matcher", "import_parser", "import_constant", "DIR_NEXT", "DIR_PREV", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "#ast", "#cache", "#content", "#descendant", "#document", "#event", "#node", "#nodes", "#noexcept", "#nwsapi", "#qswalker", "#results", "#root", "#shadow", "#sort", "#walker", "#walkers", "#warn", "#window", "window", "document", "e", "selector", "node", "opt", "event", "invalidate", "noexcept", "warn", "nwsapi", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "hasPseudo", "descendant", "items", "branch", "leaves", "nextItem", "msg", "itemName", "walker", "refNode", "current", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "selectorNodes", "bool", "nth", "j", "m", "localName", "prefix", "itemLocalName", "itemPrefix", "nthName", "nthIdentName", "anbMap", "astLeaves", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "res", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "focus", "display", "visibility", "active", "isCustomElementName", "parent", "placeholder", "targetNode", "nodeName", "checked", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "attr", "host", "astType", "attributes", "nodeType", "result", "save", "leafName", "compound", "filterLeaves", "baseNode", "pending", "comboName", "dir", "matchedNode", "filtered", "complex", "targetType", "collected", "pendingItems", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItem", "index", "nextCombo", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode"] + "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport nwsapi from '@asamuzakjp/nwsapi';\nimport {\n isContentEditable, isInShadowTree, resolveContent, sortNodes, traverseNode,\n verifyNode\n} from './dom-util.js';\nimport { matcher } from './matcher.js';\nimport {\n filterSelector, generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\n\n/* constants */\nimport {\n BIT_01, COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE,\n EMPTY, NOT_SUPPORTED_ERR, REG_ANCHOR, REG_COMPLEX_A, REG_COMPLEX_B,\n REG_FORM, REG_FORM_CTRL, REG_FORM_GROUP, REG_FORM_VALID, REG_INTERACT,\n REG_LOGICAL_PSEUDO, REG_SHADOW_HOST, REG_TYPE_CHECK, REG_TYPE_DATE,\n REG_TYPE_RANGE, REG_TYPE_RESET, REG_TYPE_SUBMIT, REG_TYPE_TEXT,\n SELECTOR_CLASS, SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT,\n SELECTOR_TYPE, SHOW_ALL, SYNTAX_ERR, TEXT_NODE, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: 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 #cache;\n #content;\n #contentCache;\n #descendant;\n #document;\n #event;\n #node;\n #nodes;\n #noexcept;\n #nwsapi;\n #qswalker;\n #results;\n #root;\n #shadow;\n #sort;\n #walker;\n #walkers;\n #warn;\n #window;\n\n /**\n * construct\n * @param {object} window - window\n * @param {object} document - document\n */\n constructor(window, document) {\n this.#window = window;\n this.#document = document ?? window.document;\n this.#cache = new WeakMap();\n this.#contentCache = new WeakMap();\n this.#results = new WeakMap();\n this._initNwsapi();\n }\n\n /**\n * handle error\n * @private\n * @param {Error} e - Error\n * @throws Error\n * @returns {void}\n */\n _onError(e) {\n if (!this.#noexcept) {\n if (e instanceof DOMException ||\n e instanceof this.#window.DOMException) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else {\n throw new this.#window.DOMException(e.message, e.name);\n }\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @private\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {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.#event = this._setEvent(event);\n this.#node = node;\n [this.#content, this.#root, this.#walker] = resolveContent(node);\n this.#shadow = isInShadowTree(node);\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#walkers = new WeakMap();\n return node;\n }\n\n /**\n * init nwsapi\n * @private\n * @returns {object} - nwsapi\n */\n _initNwsapi() {\n this.#nwsapi = nwsapi({\n DOMException: this.#window.DOMException,\n document: this.#document\n });\n this.#nwsapi.configure({\n LOGERRORS: false\n });\n return this.#nwsapi;\n };\n\n /**\n * set event\n * @private\n * @param {object} event - instance of KeyboardEvent, MouseEvent\n * @returns {object} - result\n */\n _setEvent(event) {\n // NOTE: PointerEvent not implemented in jsdom\n return (event instanceof this.#window.KeyboardEvent ||\n event instanceof this.#window.MouseEvent)\n ? event\n : null;\n }\n\n /**\n * correspond ast and nodes\n * @private\n * @param {string} selector - CSS selector\n * @returns {Array.<Array.<object|undefined>>} - array of ast and nodes\n */\n _correspond(selector) {\n const nodes = [];\n this.#descendant = false;\n let ast;\n if (this.#contentCache.has(this.#content)) {\n const cachedItem = this.#contentCache.get(this.#content);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n this.#descendant = item.descendant;\n ast = item.ast;\n }\n }\n if (ast) {\n const l = ast.length;\n for (let i = 0; i < l; i++) {\n ast[i].collected = false;\n ast[i].dir = null;\n ast[i].filtered = false;\n ast[i].find = false;\n nodes[i] = [];\n }\n } else {\n let cssAst;\n try {\n cssAst = parseSelector(selector);\n } catch (e) {\n this._onError(e);\n }\n const {\n branches,\n info: {\n hasHasPseudoFunc,\n hasHyphenSepAttr\n }\n } = walkAST(cssAst);\n let cacheable;\n if (hasHasPseudoFunc || hasHyphenSepAttr) {\n cacheable = false;\n } else {\n cacheable = true;\n }\n let descendant = false;\n let i = 0;\n ast = [];\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n const msg = `Invalid selector ${selector}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n const itemName = item.name;\n if (/^[\\s>]$/.test(itemName)) {\n descendant = true;\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (item) {\n let { name: itemName } = item;\n if (itemName && typeof itemName === 'string') {\n itemName = unescapeSelector(itemName);\n 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 if (cacheable) {\n let cachedItem;\n if (this.#contentCache.has(this.#content)) {\n cachedItem = this.#contentCache.get(this.#content);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant\n });\n this.#contentCache.set(this.#content, cachedItem);\n }\n this.#descendant = descendant;\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * create tree walker\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {object} - tree walker\n */\n _createTreeWalker(node) {\n let walker;\n if (this.#walkers.has(node)) {\n walker = this.#walkers.get(node);\n } else {\n walker = this.#document.createTreeWalker(node, WALKER_FILTER);\n this.#walkers.set(node, walker);\n }\n return walker;\n }\n\n /**\n * prepare querySelector walker\n * @private\n * @returns {object} - tree walker\n */\n _prepareQuerySelectorWalker() {\n this.#qswalker = this._createTreeWalker(this.#node);\n this.#sort = false;\n return this.#qswalker;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n const matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#cache.has(selector)) {\n selectorBranches = this.#cache.get(selector);\n } else {\n const { branches } = walkAST(selector);\n selectorBranches = branches;\n this.#cache.set(selector, selectorBranches);\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 refNode = traverseNode(parentNode, walker);\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = walker.firstChild();\n while (refNode) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = 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, 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 { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = 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 { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n matched.add(node);\n }\n return matched;\n }\n\n /**\n * match An+B\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {string} nthName - nth pseudo-class name\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchAnPlusB(ast, node, nthName, opt) {\n const {\n nth: {\n a,\n b,\n name: nthIdentName\n },\n selector\n } = ast;\n const anbMap = new Map();\n if (nthIdentName) {\n if (nthIdentName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (nthIdentName === 'odd') {\n anbMap.set('a', 2);\n anbMap.set('b', 1);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n } else {\n if (typeof a === 'string' && /-?\\d+/.test(a)) {\n anbMap.set('a', a * 1);\n } else {\n anbMap.set('a', 0);\n }\n if (typeof b === 'string' && /-?\\d+/.test(b)) {\n anbMap.set('b', b * 1);\n } else {\n anbMap.set('b', 0);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n }\n if (/^nth-(?:last-)?child$/.test(nthName)) {\n if (selector) {\n anbMap.set('selector', selector);\n }\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthChild(anb, node, opt);\n return nodes;\n } else if (/^nth-(?:last-)?of-type$/.test(nthName)) {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n return nodes;\n }\n return new Set();\n }\n\n /**\n * match :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_PSEUDO.test(astName)) {\n let astData;\n if (this.#cache.has(ast)) {\n astData = this.#cache.get(ast);\n } else {\n const { branches } = walkAST(ast);\n const selectors = [];\n const twigBranches = [];\n for (const [...leaves] of branches) {\n for (const leaf of leaves) {\n const css = generateCSS(leaf);\n selectors.push(css);\n }\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches,\n selector: selectors.join(',')\n };\n this.#cache.set(ast, astData);\n }\n const res = this._matchLogicalPseudoFunc(astData, node, opt);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n // :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 = matcher.matchSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // dropped from CSS Selectors 3\n case 'contains': {\n if (warn) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n 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.#content.URL);\n const attrURL = new URL(node.getAttribute('href'), href);\n if (attrURL.origin === origin && attrURL.pathname === pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case 'hover': {\n const { target, type } = this.#event ?? {};\n if ((type === 'mouseover' || type === 'pointerover') &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'active': {\n const { buttons, target, type } = this.#event ?? {};\n if ((type === 'mousedown' || type === 'pointerdown') &&\n buttons & BIT_01 && node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'target': {\n const { hash } = new URL(this.#content.URL);\n if (node.id && hash === `#${node.id}` &&\n this.#content.contains(node)) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n const { hash } = new URL(this.#content.URL);\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#content.getElementById(id);\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n }\n break;\n }\n case 'scope': {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (!this.#shadow && node === this.#node) {\n matched.add(node);\n }\n } else if (node === this.#content.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus':\n case 'focus-visible': {\n const { target, type } = this.#event ?? {};\n if (node === this.#content.activeElement && node.tabIndex >= 0 &&\n (astName === 'focus' ||\n (type === 'keydown' && node.contains(target)))) {\n let refNode = node;\n let focus = true;\n while (refNode) {\n if (refNode.disabled || refNode.hasAttribute('disabled') ||\n refNode.hidden || refNode.hasAttribute('hidden')) {\n focus = false;\n break;\n } else {\n const { display, visibility } =\n this.#window.getComputedStyle(refNode);\n focus = !(display === 'none' || visibility === 'hidden');\n if (!focus) {\n break;\n }\n }\n if (refNode.parentNode &&\n refNode.parentNode.nodeType === ELEMENT_NODE) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n if (focus) {\n matched.add(node);\n }\n }\n break;\n }\n case 'focus-within': {\n let active;\n let current = this.#content.activeElement;\n if (current.tabIndex >= 0) {\n while (current) {\n if (current === node) {\n active = true;\n break;\n }\n current = current.parentNode;\n }\n }\n if (active) {\n let refNode = node;\n let focus = true;\n while (refNode) {\n if (refNode.disabled || refNode.hasAttribute('disabled') ||\n refNode.hidden || refNode.hasAttribute('hidden')) {\n focus = false;\n break;\n } else {\n const { display, visibility } =\n this.#window.getComputedStyle(refNode);\n focus = !(display === 'none' || visibility === 'hidden');\n if (!focus) {\n break;\n }\n }\n if (refNode.parentNode &&\n refNode.parentNode.nodeType === ELEMENT_NODE) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n if (focus) {\n matched.add(node);\n }\n }\n break;\n }\n case 'open': {\n if (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) || isCustomElementName(localName)) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else {\n let parent = parentNode;\n while (parent) {\n if (REG_FORM_GROUP.test(parent.localName)) {\n if (parent.localName === 'fieldset') {\n if (parent.disabled && parent.hasAttribute('disabled')) {\n break;\n }\n } else {\n break;\n }\n }\n parent = parent.parentNode;\n }\n if (parent && parentNode.localName !== 'legend' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((REG_FORM_CTRL.test(localName) ||\n isCustomElementName(localName)) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'read-only': {\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || REG_TYPE_DATE.test(node.type) ||\n REG_TYPE_TEXT.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_TYPE_DATE.test(node.type) ||\n REG_TYPE_TEXT.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.#content.documentElement;\n }\n const items = parent.getElementsByTagName('input');\n const l = items.length;\n let checked;\n for (let i = 0; i < l; i++) {\n const item = items[i];\n if (item.getAttribute('type') === 'radio') {\n if (nodeName) {\n if (item.getAttribute('name') === nodeName) {\n checked = !!item.checked;\n }\n } else if (!item.hasAttribute('name')) {\n checked = !!item.checked;\n }\n if (checked) {\n break;\n }\n }\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n // 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.checked || node.hasAttribute('checked'))) {\n matched.add(node);\n // option\n } else if (localName === 'option') {\n let parent = parentNode;\n let isMultiple = false;\n while (parent) {\n if (parent.localName === 'datalist') {\n break;\n } else if (parent.localName === 'select') {\n if (parent.multiple || parent.hasAttribute('multiple')) {\n isMultiple = true;\n }\n break;\n }\n parent = parent.parentNode;\n }\n if (isMultiple) {\n if (node.selected || node.hasAttribute('selected')) {\n matched.add(node);\n }\n } else {\n const defaultOpt = new Set();\n const walker = this.#walker;\n let refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.selected || refNode.hasAttribute('selected')) {\n defaultOpt.add(refNode);\n break;\n }\n refNode = walker.nextSibling();\n }\n if (defaultOpt.size) {\n if (defaultOpt.has(node)) {\n matched.add(node);\n }\n }\n }\n }\n break;\n }\n case 'valid': {\n if (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_TYPE_DATE.test(inputType) ||\n REG_TYPE_TEXT.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_TYPE_DATE.test(inputType) ||\n REG_TYPE_TEXT.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n !(node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === this.#content.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n let refNode = walker.firstChild();\n let bool;\n while (refNode) {\n bool = refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if ((parentNode && node === parentNode.firstElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode && node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) || node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'first-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1 === node) {\n const [node2] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node2 === node) {\n matched.add(node);\n }\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'defined': {\n const attr = node.getAttribute('is');\n if (attr) {\n if (isCustomElementName(attr) &&\n this.#window.customElements.get(attr)) {\n matched.add(node);\n }\n } else if (isCustomElementName(localName)) {\n if (this.#window.customElements.get(localName)) {\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) {\n const { display } = this.#window.getComputedStyle(node);\n if (display !== 'none') {\n matched.add(node);\n }\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // legacy pseudo-elements\n case 'after':\n case 'before':\n case 'first-letter':\n case 'first-line': {\n if (warn) {\n const msg = `Unsupported pseudo-element ::${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n // 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 const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match shadow host pseudo class\n * @private\n * @param {object} ast - AST\n * @param {object} node - DocumentFragment node\n * @returns {?object} - matched node\n */\n _matchShadowHostPseudoClass(ast, node) {\n const { children: astChildren, name: astName } = ast;\n let res;\n if (Array.isArray(astChildren)) {\n const { 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 const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n } else if (astName === 'host-context') {\n let parent = host;\n let bool;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else if (astName === 'host') {\n res = node;\n } else {\n const msg = `Invalid selector :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n return res ?? null;\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchSelector(ast, node, opt) {\n const { type: astType } = ast;\n const matched = new Set();\n if (ast.name === EMPTY) {\n return matched;\n }\n const astName = unescapeSelector(ast.name);\n if (typeof astName === 'string' && astName !== ast.name) {\n ast.name = astName;\n }\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(astName, opt);\n break;\n }\n case SELECTOR_ID: {\n if (node.id === astName) {\n matched.add(node);\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (node.classList.contains(astName)) {\n matched.add(node);\n }\n break;\n }\n case SELECTOR_PSEUDO_CLASS: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n }\n default: {\n const res = matcher.matchSelector(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n } else if (this.#shadow && astType === SELECTOR_PSEUDO_CLASS &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (astName !== 'has' && REG_LOGICAL_PSEUDO.test(astName)) {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n } else if (REG_SHADOW_HOST.test(astName)) {\n const res = this._matchShadowHostPseudoClass(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n return matched;\n }\n\n /**\n * match leaves\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchLeaves(leaves, node, opt) {\n const { attributes, localName, nodeType } = node;\n let result = this.#results.get(leaves);\n let bool;\n if (result && result.has(node)) {\n const { attr, matched } = result.get(node);\n if (attributes?.length === attr) {\n bool = matched;\n }\n }\n if (typeof bool !== 'boolean') {\n let save;\n if (nodeType === ELEMENT_NODE && REG_FORM.test(localName)) {\n save = false;\n } else {\n save = true;\n }\n for (const leaf of leaves) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n save = false;\n }\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n if (save) {\n if (!result) {\n result = new WeakMap();\n }\n result.set(node, {\n attr: attributes?.length,\n matched: bool\n });\n this.#results.set(leaves, result);\n }\n }\n return !!bool;\n }\n\n /**\n * match HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @returns {Set.<object>} - matched nodes\n */\n _matchHTMLCollection(items, opt = {}) {\n const { compound, filterLeaves } = opt;\n const nodes = new Set();\n const l = items.length;\n if (l) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const item = items[i];\n const bool = this._matchLeaves(filterLeaves, item, opt);\n if (bool) {\n nodes.add(item);\n }\n }\n } else {\n const arr = [].slice.call(items);\n return new Set(arr);\n }\n }\n return nodes;\n }\n\n /**\n * find descendant nodes\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} baseNode - base Element node\n * @param {object} opt - options\n * @returns {object} - collection of nodes and pending state\n */\n _findDescendantNodes(leaves, baseNode, opt) {\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n 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 SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(leafName, opt);\n break;\n }\n case SELECTOR_ID: {\n if (this.#root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n const node = this.#root.getElementById(leafName);\n if (node && node !== baseNode && baseNode.contains(node)) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, opt);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n }\n break;\n }\n case SELECTOR_CLASS: {\n const items = baseNode.getElementsByClassName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n break;\n }\n case SELECTOR_TYPE: {\n if (this.#content.contentType === 'text/html' &&\n !/[*|]/.test(leafName)) {\n const items = baseNode.getElementsByTagName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n } else {\n pending = true;\n }\n break;\n }\n default: {\n pending = true;\n }\n }\n }\n return {\n nodes,\n pending\n };\n }\n\n /**\n * match combinator\n * @private\n * @param {object} twig - twig\n * @param {object} node - Element node\n * @param {object} opt - option\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchCombinator(twig, node, opt = {}) {\n const { combo, leaves } = twig;\n const { name: comboName } = combo;\n const { parentNode } = node;\n const { dir } = opt;\n const matched = new Set();\n if (dir === DIR_NEXT) {\n switch (comboName) {\n case '+': {\n const refNode = node.nextElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = 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 let refNode = traverseNode(node, this.#qswalker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = this.#qswalker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = this.#qswalker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n refNode = this.#qswalker.nextNode();\n }\n }\n return matchedNode ?? null;\n }\n\n /**\n * match self\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _matchSelf(leaves) {\n const nodes = [];\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find lineal\n * @private\n * @param {Array} leaves - AST leaves\n * @param {object} opt - options\n * @returns {Array} - [nodes, filtered]\n */\n _findLineal(leaves, opt = {}) {\n const { complex } = opt;\n const nodes = [];\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n if (!bool || complex) {\n let refNode = this.#node.parentNode;\n while (refNode) {\n bool = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(refNode);\n filtered = true;\n }\n if (refNode.parentNode) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n }\n return [nodes, filtered];\n }\n\n /**\n * find first\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFirst(leaves) {\n const nodes = [];\n const node = this._findNode(leaves, {\n node: this.#node\n });\n let filtered = false;\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find from HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @param {boolean} [opt.compound] - compound selector\n * @param {Array} [opt.filterLeaves] - filter leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFromHTMLCollection(items, opt = {}) {\n const { complex, compound, filterLeaves, targetType } = opt;\n let nodes = [];\n let filtered = false;\n let collected = false;\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node !== this.#node &&\n (this.#node.contains(node) || node.contains(this.#node))) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n } else {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n }\n } else if (complex) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n } else if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n }\n return [nodes, filtered, collected];\n }\n\n /**\n * find entry nodes\n * @private\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @param {boolean} complex - complex selector\n * @returns {object} - collection of nodes etc.\n */\n _findEntryNodes(twig, targetType, complex) {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { 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 SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case SELECTOR_ID: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST &&\n this.#root.nodeType !== ELEMENT_NODE) {\n const node = this.#root.getElementById(leafName);\n if (node) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#root.nodeType === DOCUMENT_NODE) {\n const items = this.#root.getElementsByClassName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_TYPE: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#content.contentType === 'text/html' &&\n this.#root.nodeType === DOCUMENT_NODE &&\n !/[*|]/.test(leafName)) {\n const items = this.#root.getElementsByTagName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n default: {\n if (targetType !== TARGET_LINEAL && REG_SHADOW_HOST.test(leafName)) {\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n }\n }\n return {\n collected,\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * 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 === SELECTOR_PSEUDO_ELEMENT ||\n lastType === SELECTOR_ID) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n firstType === SELECTOR_ID) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (/^[+~]$/.test(comboName)) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n for (const { combo, leaves: [leaf] } of branch) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n bool = false;\n break;\n }\n if (!bool && combo) {\n const { name: comboName } = combo;\n if (/^[+~]$/.test(comboName)) {\n bool = true;\n }\n }\n }\n if (bool) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else {\n dir = DIR_PREV;\n twig = lastTwig;\n }\n }\n } else {\n dir = DIR_PREV;\n twig = firstTwig;\n }\n 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 * @private\n * @param {string} targetType - target type\n * @returns {Set.<object>} - collection of matched nodes\n */\n _find(targetType) {\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n this._prepareQuerySelectorWalker();\n }\n const [[...branches], nodes] = this._collectNodes(targetType);\n const l = branches.length;\n let res = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, collected, dir, find } = branches[i];\n const branchLen = branch.length;\n if (branchLen && find) {\n const entryNodes = nodes[i];\n const entryNodesLen = entryNodes.length;\n const lastIndex = branchLen - 1;\n if (lastIndex === 0) {\n if ((targetType === TARGET_ALL || targetType === TARGET_FIRST) &&\n this.#node.nodeType === ELEMENT_NODE) {\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n if (node !== this.#node && this.#node.contains(node)) {\n res.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (res.size) {\n const n = [...res];\n res = new Set([...n, ...entryNodes]);\n this.#sort = true;\n } else {\n res = new Set(entryNodes);\n }\n } else {\n const [node] = entryNodes;\n res.add(node);\n }\n } else if (targetType === TARGET_ALL) {\n if (dir === DIR_NEXT) {\n let { combo } = branch[0];\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const twig = {\n combo,\n leaves\n };\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === lastIndex) {\n if (res.size) {\n const n = [...res];\n res = new Set([...n, ...nextNodes]);\n this.#sort = true;\n } else {\n res = nextNodes;\n }\n } else {\n combo = nextCombo;\n }\n } else {\n break;\n }\n }\n }\n } else {\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === 0) {\n res.add(node);\n if (branchLen > 1 && res.size > 1) {\n this.#sort = true;\n }\n }\n } else {\n break;\n }\n }\n }\n }\n } else if (targetType === TARGET_FIRST && dir === DIR_NEXT) {\n const { combo: entryCombo } = branch[0];\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodeNext(branch, new Set([node]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n res.add(matched);\n break;\n }\n }\n if (!matched && !collected) {\n const { leaves: entryLeaves } = branch[0];\n const [entryNode] = entryNodes;\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n matched = this._matchNodeNext(branch, new Set([refNode]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n res.add(matched);\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n }\n }\n } else {\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodePrev(branch, node, {\n index: lastIndex - 1\n });\n if (matched) {\n res.add(node);\n break;\n }\n }\n if (!matched && !collected && targetType === TARGET_FIRST) {\n const { leaves: entryLeaves } = branch[lastIndex];\n const [entryNode] = entryNodes;\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n matched = this._matchNodePrev(branch, refNode, {\n index: lastIndex - 1\n });\n if (matched) {\n res.add(refNode);\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n }\n }\n }\n }\n }\n return res;\n }\n\n /**\n * matches\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - `true` if matched `false` otherwise\n */\n matches(selector, node, opt) {\n let res;\n try {\n if (node?.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node?.nodeName}`;\n throw new TypeError(msg);\n }\n const document = node.ownerDocument;\n if (document === this.#document && document.contentType === 'text/html') {\n const filterOpt = {\n complex: REG_COMPLEX_A.test(selector),\n descendant: true\n };\n if (filterSelector(selector, filterOpt)) {\n return this.#nwsapi.match(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_SELF);\n res = nodes.size;\n } catch (e) {\n this._onError(e);\n }\n return !!res;\n }\n\n /**\n * closest\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n closest(selector, node, opt) {\n let res;\n try {\n if (node?.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node?.nodeName}`;\n throw new TypeError(msg);\n }\n const document = node.ownerDocument;\n if (document === this.#document && document.contentType === 'text/html') {\n const filterOpt = {\n complex: REG_COMPLEX_A.test(selector),\n descendant: true\n };\n if (filterSelector(selector, filterOpt)) {\n return this.#nwsapi.closest(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_LINEAL);\n if (nodes.size) {\n let refNode = this.#node;\n while (refNode) {\n if (nodes.has(refNode)) {\n res = refNode;\n break;\n }\n refNode = refNode.parentNode;\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n querySelector(selector, node, opt) {\n let res;\n try {\n verifyNode(node);\n let document;\n if (node.nodeType === DOCUMENT_NODE) {\n document = node;\n } else {\n document = node.ownerDocument;\n }\n if (document === this.#document && document.contentType === 'text/html') {\n const filterOpt = {\n complex: REG_COMPLEX_B.test(selector),\n descendant: false\n };\n if (filterSelector(selector, filterOpt)) {\n return this.#nwsapi.first(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_FIRST);\n nodes.delete(this.#node);\n if (nodes.size) {\n [res] = sortNodes(nodes);\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector all\n * NOTE: returns Array, not NodeList\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {Array.<object|undefined>} - collection of matched nodes\n */\n querySelectorAll(selector, node, opt) {\n let res;\n try {\n verifyNode(node);\n let document;\n if (node.nodeType === DOCUMENT_NODE) {\n document = node;\n } else {\n document = node.ownerDocument;\n }\n if (document === this.#document && document.contentType === 'text/html') {\n const filterOpt = {\n complex: REG_COMPLEX_B.test(selector),\n descendant: true\n };\n if (filterSelector(selector, filterOpt)) {\n return this.#nwsapi.select(selector, node);\n }\n }\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_ALL);\n nodes.delete(this.#node);\n if (nodes.size) {\n if (this.#sort) {\n res = sortNodes(nodes);\n } else {\n res = [...nodes];\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? [];\n }\n};\n"], + "mappings": "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", + "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_is_potential_custom_element_name", "import_nwsapi", "import_dom_util", "import_matcher", "import_parser", "import_constant", "DIR_NEXT", "DIR_PREV", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "#ast", "#cache", "#content", "#contentCache", "#descendant", "#document", "#event", "#node", "#nodes", "#noexcept", "#nwsapi", "#qswalker", "#results", "#root", "#shadow", "#sort", "#walker", "#walkers", "#warn", "#window", "window", "document", "e", "selector", "node", "opt", "event", "noexcept", "warn", "nwsapi", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "hasHasPseudoFunc", "hasHyphenSepAttr", "cacheable", "descendant", "items", "branch", "leaves", "nextItem", "msg", "itemName", "walker", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "refNode", "selectorNodes", "bool", "nth", "j", "m", "localName", "prefix", "itemLocalName", "itemPrefix", "nthName", "nthIdentName", "anbMap", "astLeaves", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "res", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "current", "focus", "display", "visibility", "active", "isCustomElementName", "parent", "placeholder", "targetNode", "nodeName", "checked", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "attr", "host", "astType", "attributes", "nodeType", "result", "save", "leafName", "compound", "filterLeaves", "baseNode", "pending", "comboName", "dir", "matchedNode", "filtered", "complex", "targetType", "collected", "pendingItems", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItem", "index", "nextCombo", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode", "filterOpt"] } diff --git a/dist/cjs/js/parser.js b/dist/cjs/js/parser.js index d75b7206..56e52718 100644 --- a/dist/cjs/js/parser.js +++ b/dist/cjs/js/parser.js @@ -1,3 +1,3 @@ -var g=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var T=(n,t)=>{for(var s in t)g(n,s,{get:t[s],enumerable:!0})},$=(n,t,s,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of S(t))!I.call(n,i)&&i!==s&&g(n,i,{get:()=>t[i],enumerable:!(r=L(t,i))||r.enumerable});return n};var C=n=>$(g({},"__esModule",{value:!0}),n);var R={};T(R,{filterSelector:()=>D,generateCSS:()=>_.generate,parseAstName:()=>m,parseSelector:()=>u,preprocess:()=>O,sortAST:()=>A,unescapeSelector:()=>w,walkAST:()=>y});module.exports=C(R);var d=require("css-tree"),e=require("./constant.js"),_=require("css-tree");const w=(n="")=>{if(typeof n=="string"&&n.indexOf("\\",0)>=0){const t=n.split("\\"),s=t.length;for(let r=1;r<s;r++){let i=t[r];if(i===""&&r===s-1)i=e.U_FFFD;else{const f=e.REG_HEX.exec(i);if(f){const[,o]=f;let a;try{const c=parseInt("D800",e.HEX),E=parseInt("DFFF",e.HEX),l=parseInt(o,e.HEX);l===0||l>=c&&l<=E?a=e.U_FFFD:a=String.fromCodePoint(l)}catch{a=e.U_FFFD}let p="";i.length>o.length&&(p=i.substring(o.length)),i=`${a}${p}`}else/^[\n\r\f]/.test(i)&&(i="\\"+i)}t[r]=i}n=t.join("")}return n},O=(...n)=>{if(!n.length)throw new TypeError("1 argument required, but only 0 present.");let[t]=n;if(typeof t=="string"){let s=0;for(;s>=0&&(s=t.indexOf("#",s),!(s<0));){const r=t.substring(0,s+1);let i=t.substring(s+1);if(/^\d$/.test(i.substring(0,1)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);const f=i.codePointAt(0);if(f===e.BIT_HYPHEN){if(/^\d$/.test(i.substring(1,2)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR)}else if(f>e.BIT_FFFF){const o=`\\${f.toString(e.HEX)} `;i.length===e.DUO?i=o:i=`${o}${i.substring(e.DUO)}`}t=`${r}${i}`,s++}t=t.replace(/\f|\r\n?/g,` -`).replace(/[\0\uD800-\uDFFF]|\\$/g,e.U_FFFD)}else if(t==null)t=Object.prototype.toString.call(t).slice(e.TYPE_FROM,e.TYPE_TO).toLowerCase();else if(Array.isArray(t))t=t.join(",");else if(Object.prototype.hasOwnProperty.call(t,"toString"))t=t.toString();else throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);return t},u=n=>{if(n=O(n),e.REG_INVALID_SELECTOR.test(n))throw new DOMException(`Invalid selector ${n}`,e.SYNTAX_ERR);let t;try{const s=(0,d.parse)(n,{context:"selectorList",parseCustomProperty:!0});t=(0,d.toPlainObject)(s)}catch(s){const{message:r}=s;if(r==="Identifier is expected"&&e.REG_LANG_QUOTED.test(n)){const[,i,f]=e.REG_LANG_QUOTED.exec(n),o=f.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,"");let a=i.replace(f,o);a===":lang()"&&(a=`:lang(${e.EMPTY})`),t=u(n.replace(i,a))}else if(/^(?:Identifier|Selector) is expected$/.test(r)&&e.REG_LOGICAL_EMPTY.test(n)){const[,i,f]=e.REG_LOGICAL_EMPTY.exec(n);t=u(n.replace(i,`:${f}(${e.EMPTY})`))}else if(/^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test(r)&&!n.endsWith("]")){const i=n.lastIndexOf("["),f=n.substring(i);f.includes('"')?f.match(/"/g).length%2?t=u(`${n}"]`):t=u(`${n}]`):t=u(`${n}]`)}else if(r==='")" is expected'&&!n.endsWith(")"))t=u(`${n})`);else throw new DOMException(r,e.SYNTAX_ERR)}return t},y=(n={})=>{const t=new Set;let s,r;(0,d.walk)(n,{enter:o=>{o.type===e.SELECTOR?t.add(o.children):o.type===e.SELECTOR_PSEUDO_CLASS?(s=!0,e.REG_LOGICAL_PSEUDO.test(o.name)&&(r=!0)):o.type===e.SELECTOR_PSEUDO_ELEMENT&&(s=!0,e.REG_SHADOW_PSEUDO.test(o.name)&&(r=!0))}}),r&&(0,d.findAll)(n,(o,a,p)=>{if(p){if(o.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(o.name)){const c=p.filter(E=>{const{name:l,type:h}=E;return h===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(l)});for(const{children:E}of c)for(const{children:l}of E)for(const{children:h}of l)t.has(h)&&t.delete(h)}else if(o.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(o.name)){const c=p.filter(E=>{const{name:l,type:h}=E;return h===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(l)});for(const{children:E}of c)for(const{children:l}of E)t.has(l)&&t.delete(l)}}});const f={};return s&&(f.hasPseudo=s),r&&(f.hasPseudoFunc=r),{info:f,branches:[...t]}},A=n=>{const t=[...n];if(t.length>1){const s=new Map([[e.SELECTOR_PSEUDO_ELEMENT,e.BIT_01],[e.SELECTOR_ID,e.BIT_02],[e.SELECTOR_CLASS,e.BIT_04],[e.SELECTOR_TYPE,e.BIT_08],[e.SELECTOR_ATTR,e.BIT_16],[e.SELECTOR_PSEUDO_CLASS,e.BIT_32]]);t.sort((r,i)=>{const{type:f}=r,{type:o}=i,a=s.get(f),p=s.get(o);let c;return a===p?c=0:a>p?c=1:c=-1,c})}return t},m=n=>{let t,s;if(n&&typeof n=="string")n.indexOf("|")>-1?[t,s]=n.split("|"):(t="*",s=n);else throw new DOMException(`Invalid selector ${n}`,e.SYNTAX_ERR);return{prefix:t,localName:s}},D=(n,t={})=>{if(!n||typeof n!="string")return!1;if(n.includes("[")){const s=n.lastIndexOf("[");if(n.substring(s).lastIndexOf("]")<0)return!1}if(/\||::|\[\s*[\w$*=^|~-]+(?:(?:"[\w$*=^|~\s'-]+"|'[\w$*=^|~\s"-]+')?(?:\s+[\w$*=^|~-]+)+|"[^"\]]{1,255}|'[^'\]]{1,255})\s*\]/.test(n))return!1;if(n.includes(":")){let s;if(e.REG_LOGICAL_KEY.test(n)){if(e.REG_LOGICAL_EMPTY.test(n))return!1;const{complex:r,descendant:i}=t;r&&i?s=e.REG_LOGICAL_COMPLEX_A:r?s=e.REG_LOGICAL_COMPLEX_B:s=e.REG_LOGICAL_COMPOUND}else s=e.REG_CHILD_INDEXED;if(s.test(n))return!1}return!0};0&&(module.exports={filterSelector,generateCSS,parseAstName,parseSelector,preprocess,sortAST,unescapeSelector,walkAST}); +var h=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var L=(s,t)=>{for(var r in t)h(s,r,{get:t[r],enumerable:!0})},I=(s,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of x(t))!S.call(s,n)&&n!==r&&h(s,n,{get:()=>t[n],enumerable:!(i=_(t,n))||i.enumerable});return s};var T=s=>I(h({},"__esModule",{value:!0}),s);var A={};L(A,{filterSelector:()=>C,generateCSS:()=>O.generate,parseAstName:()=>y,parseSelector:()=>u,preprocess:()=>g,sortAST:()=>w,unescapeSelector:()=>$,walkAST:()=>m});module.exports=T(A);var E=require("css-tree"),e=require("./constant.js"),O=require("css-tree");const $=(s="")=>{if(typeof s=="string"&&s.indexOf("\\",0)>=0){const t=s.split("\\"),r=t.length;for(let i=1;i<r;i++){let n=t[i];if(n===""&&i===r-1)n=e.U_FFFD;else{const o=e.REG_HEX.exec(n);if(o){const[,a]=o;let l;try{const f=parseInt("D800",e.HEX),p=parseInt("DFFF",e.HEX),d=parseInt(a,e.HEX);d===0||d>=f&&d<=p?l=e.U_FFFD:l=String.fromCodePoint(d)}catch{l=e.U_FFFD}let c="";n.length>a.length&&(c=n.substring(a.length)),n=`${l}${c}`}else/^[\n\r\f]/.test(n)&&(n="\\"+n)}t[i]=n}s=t.join("")}return s},g=(...s)=>{if(!s.length)throw new TypeError("1 argument required, but only 0 present.");let[t]=s;if(typeof t=="string"){let r=0;for(;r>=0&&(r=t.indexOf("#",r),!(r<0));){const i=t.substring(0,r+1);let n=t.substring(r+1);if(/^\d$/.test(n.substring(0,1)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);const o=n.codePointAt(0);if(o===e.BIT_HYPHEN){if(/^\d$/.test(n.substring(1,2)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR)}else if(o>e.BIT_FFFF){const a=`\\${o.toString(e.HEX)} `;n.length===e.DUO?n=a:n=`${a}${n.substring(e.DUO)}`}t=`${i}${n}`,r++}t=t.replace(/\f|\r\n?/g,` +`).replace(/[\0\uD800-\uDFFF]|\\$/g,e.U_FFFD)}else if(t==null)t=Object.prototype.toString.call(t).slice(e.TYPE_FROM,e.TYPE_TO).toLowerCase();else if(Array.isArray(t))t=t.join(",");else if(Object.prototype.hasOwnProperty.call(t,"toString"))t=t.toString();else throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);return t},u=s=>{if(s=g(s),e.REG_INVALID_SELECTOR.test(s))throw new DOMException(`Invalid selector ${s}`,e.SYNTAX_ERR);let t;try{const r=(0,E.parse)(s,{context:"selectorList",parseCustomProperty:!0});t=(0,E.toPlainObject)(r)}catch(r){const{message:i}=r;if(i==="Identifier is expected"&&e.REG_LANG_QUOTED.test(s)){const[,n,o]=e.REG_LANG_QUOTED.exec(s),a=o.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,"");let l=n.replace(o,a);l===":lang()"&&(l=`:lang(${e.EMPTY})`),t=u(s.replace(n,l))}else if(/^(?:Identifier|Selector) is expected$/.test(i)&&e.REG_LOGICAL_EMPTY.test(s)){const[,n,o]=e.REG_LOGICAL_EMPTY.exec(s);t=u(s.replace(n,`:${o}(${e.EMPTY})`))}else if(/^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test(i)&&!s.endsWith("]")){const n=s.lastIndexOf("["),o=s.substring(n);o.includes('"')?o.match(/"/g).length%2?t=u(`${s}"]`):t=u(`${s}]`):t=u(`${s}]`)}else if(i==='")" is expected'&&!s.endsWith(")"))t=u(`${s})`);else throw new DOMException(i,e.SYNTAX_ERR)}return t},m=(s={})=>{const t=new Set,r=new Map;return(0,E.walk)(s,{enter:n=>{n.type===e.SELECTOR?t.add(n.children):n.type===e.SELECTOR_PSEUDO_CLASS?(r.set("hasPseudo",!0),e.REG_LOGICAL_PSEUDO.test(n.name)&&(r.set("hasPseudoFunc",!0),n.name==="has"&&r.set("hasHasPseudoFunc",!0))):n.type===e.SELECTOR_PSEUDO_ELEMENT?(r.set("hasPseudo",!0),e.REG_SHADOW_PSEUDO.test(n.name)&&r.set("hasPseudoFunc",!0)):n.type===e.SELECTOR_ATTR&&n.matcher==="|="&&r.set("hasHyphenSepAttr",!0)}}),r.get("hasPseudoFunc")&&(0,E.findAll)(s,(n,o,a)=>{if(a){if(n.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(n.name)){const l=a.filter(c=>{const{name:f,type:p}=c;return p===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(f)});for(const{children:c}of l)for(const{children:f}of c)for(const{children:p}of f)t.has(p)&&t.delete(p)}else if(n.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(n.name)){const l=a.filter(c=>{const{name:f,type:p}=c;return p===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(f)});for(const{children:c}of l)for(const{children:f}of c)t.has(f)&&t.delete(f)}}}),{branches:[...t],info:Object.fromEntries(r)}},w=s=>{const t=[...s];if(t.length>1){const r=new Map([[e.SELECTOR_PSEUDO_ELEMENT,e.BIT_01],[e.SELECTOR_ID,e.BIT_02],[e.SELECTOR_CLASS,e.BIT_04],[e.SELECTOR_TYPE,e.BIT_08],[e.SELECTOR_ATTR,e.BIT_16],[e.SELECTOR_PSEUDO_CLASS,e.BIT_32]]);t.sort((i,n)=>{const{type:o}=i,{type:a}=n,l=r.get(o),c=r.get(a);let f;return l===c?f=0:l>c?f=1:f=-1,f})}return t},y=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}},C=(s,t={})=>{if(!s||typeof s!="string")return!1;if(s.includes("[")){const r=s.lastIndexOf("[");if(s.substring(r).lastIndexOf("]")<0)return!1}if(/\||::|\[\s*[\w$*=^|~-]+(?:(?:"[\w$*=^|~\s'-]+"|'[\w$*=^|~\s"-]+')?(?:\s+[\w$*=^|~-]+)+|"[^"\]]{1,255}|'[^'\]]{1,255})\s*\]/.test(s))return!1;if(s.includes(":")){let r;if(e.REG_LOGICAL_KEY.test(s)){if(e.REG_LOGICAL_EMPTY.test(s))return!1;const{complex:i,descendant:n}=t;i&&n?r=e.REG_LOGICAL_COMPLEX_A:i?r=e.REG_LOGICAL_COMPLEX_B:r=e.REG_LOGICAL_COMPOUND}else r=e.REG_CHILD_INDEXED;if(r.test(s))return!1}return!0};0&&(module.exports={filterSelector,generateCSS,parseAstName,parseSelector,preprocess,sortAST,unescapeSelector,walkAST}); //# sourceMappingURL=parser.js.map diff --git a/dist/cjs/js/parser.js.map b/dist/cjs/js/parser.js.map index ded8209a..2325c292 100644 --- a/dist/cjs/js/parser.js.map +++ b/dist/cjs/js/parser.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/js/parser.js"], - "sourcesContent": ["/**\n * parser.js\n */\n\n/* import */\nimport { findAll, parse, toPlainObject, walk } from 'css-tree';\n\n/* constants */\nimport {\n BIT_01, BIT_02, BIT_04, BIT_08, BIT_16, BIT_32, BIT_FFFF, BIT_HYPHEN,\n DUO, EMPTY, HEX, REG_CHILD_INDEXED, REG_HEX, REG_INVALID_SELECTOR,\n REG_LANG_QUOTED, REG_LOGICAL_COMPLEX_A, REG_LOGICAL_COMPLEX_B,\n REG_LOGICAL_COMPOUND, REG_LOGICAL_EMPTY, REG_LOGICAL_KEY, REG_LOGICAL_PSEUDO,\n REG_SHADOW_PSEUDO, SELECTOR, SELECTOR_ATTR, SELECTOR_CLASS, SELECTOR_ID,\n SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE, SYNTAX_ERR,\n TYPE_FROM, TYPE_TO, U_FFFD\n} from './constant.js';\n\n/**\n * unescape selector\n * @param {string} selector - CSS selector\n * @returns {?string} - unescaped selector\n */\nexport const unescapeSelector = (selector = '') => {\n if (typeof selector === 'string' && selector.indexOf('\\\\', 0) >= 0) {\n const arr = selector.split('\\\\');\n const l = arr.length;\n for (let i = 1; i < l; i++) {\n let item = arr[i];\n if (item === '' && i === l - 1) {\n item = U_FFFD;\n } else {\n const hexExists = REG_HEX.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 === BIT_HYPHEN) {\n if (/^\\d$/.test(postHash.substring(1, 2))) {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n // escape char above 0xFFFF\n } else if (codePoint > BIT_FFFF) {\n const str = `\\\\${codePoint.toString(HEX)} `;\n if (postHash.length === DUO) {\n postHash = str;\n } else {\n postHash = `${str}${postHash.substring(DUO)}`;\n }\n }\n selector = `${preHash}${postHash}`;\n index++;\n }\n selector = selector.replace(/\\f|\\r\\n?/g, '\\n')\n .replace(/[\\0\\uD800-\\uDFFF]|\\\\$/g, U_FFFD);\n } else if (selector === undefined || selector === null) {\n selector = Object.prototype.toString.call(selector)\n .slice(TYPE_FROM, TYPE_TO).toLowerCase();\n } else if (Array.isArray(selector)) {\n selector = selector.join(',');\n } else if (Object.prototype.hasOwnProperty.call(selector, 'toString')) {\n selector = selector.toString();\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n return selector;\n};\n\n/**\n * create AST from CSS selector\n * @param {string} selector - CSS selector\n * @returns {object} - AST\n */\nexport const parseSelector = selector => {\n selector = preprocess(selector);\n // invalid selectors\n if (REG_INVALID_SELECTOR.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 let hasPseudo;\n let hasPseudoFunc;\n const opt = {\n enter: node => {\n if (node.type === SELECTOR) {\n branches.add(node.children);\n } else if (node.type === SELECTOR_PSEUDO_CLASS) {\n hasPseudo = true;\n if (REG_LOGICAL_PSEUDO.test(node.name)) {\n hasPseudoFunc = true;\n }\n } else if (node.type === SELECTOR_PSEUDO_ELEMENT) {\n hasPseudo = true;\n if (REG_SHADOW_PSEUDO.test(node.name)) {\n hasPseudoFunc = true;\n }\n }\n }\n };\n walk(ast, opt);\n if (hasPseudoFunc) {\n findAll(ast, (node, item, list) => {\n if (list) {\n if (node.type === SELECTOR_PSEUDO_CLASS &&\n REG_LOGICAL_PSEUDO.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === SELECTOR_PSEUDO_CLASS && REG_LOGICAL_PSEUDO.test(name);\n return res;\n });\n for (const { children } of itemList) {\n // SelectorList\n for (const { children: grandChildren } of children) {\n // Selector\n for (const { children: greatGrandChildren } of grandChildren) {\n if (branches.has(greatGrandChildren)) {\n branches.delete(greatGrandChildren);\n }\n }\n }\n }\n } else if (node.type === SELECTOR_PSEUDO_ELEMENT &&\n REG_SHADOW_PSEUDO.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === SELECTOR_PSEUDO_ELEMENT && REG_SHADOW_PSEUDO.test(name);\n return res;\n });\n for (const { children } of itemList) {\n // Selector\n for (const { children: grandChildren } of children) {\n if (branches.has(grandChildren)) {\n branches.delete(grandChildren);\n }\n }\n }\n }\n }\n });\n }\n const info = {};\n if (hasPseudo) {\n info.hasPseudo = hasPseudo;\n }\n if (hasPseudoFunc) {\n info.hasPseudoFunc = hasPseudoFunc;\n }\n return {\n info,\n branches: [...branches]\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 [SELECTOR_PSEUDO_ELEMENT, BIT_01],\n [SELECTOR_ID, BIT_02],\n [SELECTOR_CLASS, BIT_04],\n [SELECTOR_TYPE, BIT_08],\n [SELECTOR_ATTR, BIT_16],\n [SELECTOR_PSEUDO_CLASS, BIT_32]\n ]);\n arr.sort((a, b) => {\n const { type: typeA } = a;\n const { type: typeB } = b;\n const bitA = order.get(typeA);\n const bitB = order.get(typeB);\n let res;\n if (bitA === bitB) {\n res = 0;\n } else if (bitA > bitB) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n};\n\n/**\n * parse AST name - e.g. ns|E -> { prefix: ns, localName: E }\n * @param {string} selector - type selector\n * @returns {object} - node properties\n */\nexport const parseAstName = selector => {\n let prefix;\n let localName;\n if (selector && typeof selector === 'string') {\n if (selector.indexOf('|') > -1) {\n [prefix, localName] = selector.split('|');\n } else {\n prefix = '*';\n localName = selector;\n }\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n return {\n prefix,\n localName\n };\n};\n\n/**\n * filter selector (for nwsapi)\n * @param {string} selector - selector\n * @param {object} opt - options\n * @returns {boolean} - result\n */\nexport const filterSelector = (selector, opt = {}) => {\n if (!selector || typeof selector !== 'string') {\n return false;\n }\n // filter missing close square bracket\n if (selector.includes('[')) {\n const index = selector.lastIndexOf('[');\n const sel = selector.substring(index);\n if (sel.lastIndexOf(']') < 0) {\n return false;\n }\n }\n // filter namespaced selectors, e.g. ns|E, pseudo-element selectors and\n // attribute selectors with case flag, e.g. [attr i], and unclosed quotes\n if (/\\||::|\\[\\s*[\\w$*=^|~-]+(?:(?:\"[\\w$*=^|~\\s'-]+\"|'[\\w$*=^|~\\s\"-]+')?(?:\\s+[\\w$*=^|~-]+)+|\"[^\"\\]]{1,255}|'[^'\\]]{1,255})\\s*\\]/.test(selector)) {\n return false;\n }\n // filter pseudo-classes\n if (selector.includes(':')) {\n let reg;\n if (REG_LOGICAL_KEY.test(selector)) {\n // filter empty :is() and :where()\n if (REG_LOGICAL_EMPTY.test(selector)) {\n return false;\n }\n const { complex, descendant } = opt;\n if (complex && descendant) {\n reg = REG_LOGICAL_COMPLEX_A;\n } else if (complex) {\n reg = REG_LOGICAL_COMPLEX_B;\n } else {\n reg = REG_LOGICAL_COMPOUND;\n }\n } else {\n reg = REG_CHILD_INDEXED;\n }\n if (reg.test(selector)) {\n return false;\n }\n }\n return true;\n};\n\n/* export */\nexport { generate as generateCSS } from 'css-tree';\n"], - "mappings": "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", - "names": ["parser_exports", "__export", "filterSelector", "parseAstName", "parseSelector", "preprocess", "sortAST", "unescapeSelector", "walkAST", "__toCommonJS", "import_css_tree", "import_constant", "selector", "arr", "l", "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", "hasPseudo", "hasPseudoFunc", "node", "list", "itemList", "type", "children", "grandChildren", "greatGrandChildren", "info", "asts", "order", "a", "b", "typeA", "typeB", "bitA", "bitB", "prefix", "localName", "opt", "reg", "complex", "descendant"] + "sourcesContent": ["/**\n * parser.js\n */\n\n/* import */\nimport { findAll, parse, toPlainObject, walk } from 'css-tree';\n\n/* constants */\nimport {\n BIT_01, BIT_02, BIT_04, BIT_08, BIT_16, BIT_32, BIT_FFFF, BIT_HYPHEN,\n DUO, EMPTY, HEX, REG_CHILD_INDEXED, REG_HEX, REG_INVALID_SELECTOR,\n REG_LANG_QUOTED, REG_LOGICAL_COMPLEX_A, REG_LOGICAL_COMPLEX_B,\n REG_LOGICAL_COMPOUND, REG_LOGICAL_EMPTY, REG_LOGICAL_KEY, REG_LOGICAL_PSEUDO,\n REG_SHADOW_PSEUDO, SELECTOR, SELECTOR_ATTR, SELECTOR_CLASS, SELECTOR_ID,\n SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE, SYNTAX_ERR,\n TYPE_FROM, TYPE_TO, U_FFFD\n} from './constant.js';\n\n/**\n * unescape selector\n * @param {string} selector - CSS selector\n * @returns {?string} - unescaped selector\n */\nexport const unescapeSelector = (selector = '') => {\n if (typeof selector === 'string' && selector.indexOf('\\\\', 0) >= 0) {\n const arr = selector.split('\\\\');\n const l = arr.length;\n for (let i = 1; i < l; i++) {\n let item = arr[i];\n if (item === '' && i === l - 1) {\n item = U_FFFD;\n } else {\n const hexExists = REG_HEX.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 === BIT_HYPHEN) {\n if (/^\\d$/.test(postHash.substring(1, 2))) {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n // escape char above 0xFFFF\n } else if (codePoint > BIT_FFFF) {\n const str = `\\\\${codePoint.toString(HEX)} `;\n if (postHash.length === DUO) {\n postHash = str;\n } else {\n postHash = `${str}${postHash.substring(DUO)}`;\n }\n }\n selector = `${preHash}${postHash}`;\n index++;\n }\n selector = selector.replace(/\\f|\\r\\n?/g, '\\n')\n .replace(/[\\0\\uD800-\\uDFFF]|\\\\$/g, U_FFFD);\n } else if (selector === undefined || selector === null) {\n selector = Object.prototype.toString.call(selector)\n .slice(TYPE_FROM, TYPE_TO).toLowerCase();\n } else if (Array.isArray(selector)) {\n selector = selector.join(',');\n } else if (Object.prototype.hasOwnProperty.call(selector, 'toString')) {\n selector = selector.toString();\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n return selector;\n};\n\n/**\n * create AST from CSS selector\n * @param {string} selector - CSS selector\n * @returns {object} - AST\n */\nexport const parseSelector = selector => {\n selector = preprocess(selector);\n // invalid selectors\n if (REG_INVALID_SELECTOR.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 if (node.type === SELECTOR) {\n branches.add(node.children);\n } else if (node.type === SELECTOR_PSEUDO_CLASS) {\n info.set('hasPseudo', true);\n if (REG_LOGICAL_PSEUDO.test(node.name)) {\n info.set('hasPseudoFunc', true);\n if (node.name === 'has') {\n info.set('hasHasPseudoFunc', true);\n }\n }\n } else if (node.type === SELECTOR_PSEUDO_ELEMENT) {\n info.set('hasPseudo', true);\n if (REG_SHADOW_PSEUDO.test(node.name)) {\n info.set('hasPseudoFunc', true);\n }\n } else if (node.type === SELECTOR_ATTR && node.matcher === '|=') {\n info.set('hasHyphenSepAttr', true);\n }\n }\n };\n walk(ast, opt);\n if (info.get('hasPseudoFunc')) {\n findAll(ast, (node, item, list) => {\n if (list) {\n if (node.type === SELECTOR_PSEUDO_CLASS &&\n REG_LOGICAL_PSEUDO.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === SELECTOR_PSEUDO_CLASS && REG_LOGICAL_PSEUDO.test(name);\n return res;\n });\n for (const { children } of itemList) {\n // SelectorList\n for (const { children: grandChildren } of children) {\n // Selector\n for (const { children: greatGrandChildren } of grandChildren) {\n if (branches.has(greatGrandChildren)) {\n branches.delete(greatGrandChildren);\n }\n }\n }\n }\n } else if (node.type === SELECTOR_PSEUDO_ELEMENT &&\n REG_SHADOW_PSEUDO.test(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === SELECTOR_PSEUDO_ELEMENT && REG_SHADOW_PSEUDO.test(name);\n return res;\n });\n for (const { children } of itemList) {\n // Selector\n for (const { children: grandChildren } of children) {\n if (branches.has(grandChildren)) {\n branches.delete(grandChildren);\n }\n }\n }\n }\n }\n });\n }\n return {\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 [SELECTOR_PSEUDO_ELEMENT, BIT_01],\n [SELECTOR_ID, BIT_02],\n [SELECTOR_CLASS, BIT_04],\n [SELECTOR_TYPE, BIT_08],\n [SELECTOR_ATTR, BIT_16],\n [SELECTOR_PSEUDO_CLASS, BIT_32]\n ]);\n arr.sort((a, b) => {\n const { type: typeA } = a;\n const { type: typeB } = b;\n const bitA = order.get(typeA);\n const bitB = order.get(typeB);\n let res;\n if (bitA === bitB) {\n res = 0;\n } else if (bitA > bitB) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n};\n\n/**\n * parse AST name - e.g. ns|E -> { prefix: ns, localName: E }\n * @param {string} selector - type selector\n * @returns {object} - node properties\n */\nexport const parseAstName = selector => {\n let prefix;\n let localName;\n if (selector && typeof selector === 'string') {\n if (selector.indexOf('|') > -1) {\n [prefix, localName] = selector.split('|');\n } else {\n prefix = '*';\n localName = selector;\n }\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n return {\n prefix,\n localName\n };\n};\n\n/**\n * filter selector (for nwsapi)\n * @param {string} selector - selector\n * @param {object} opt - options\n * @returns {boolean} - result\n */\nexport const filterSelector = (selector, opt = {}) => {\n if (!selector || typeof selector !== 'string') {\n return false;\n }\n // filter missing close square bracket\n if (selector.includes('[')) {\n const index = selector.lastIndexOf('[');\n const sel = selector.substring(index);\n if (sel.lastIndexOf(']') < 0) {\n return false;\n }\n }\n // filter namespaced selectors, e.g. ns|E, pseudo-element selectors and\n // attribute selectors with case flag, e.g. [attr i], and unclosed quotes\n if (/\\||::|\\[\\s*[\\w$*=^|~-]+(?:(?:\"[\\w$*=^|~\\s'-]+\"|'[\\w$*=^|~\\s\"-]+')?(?:\\s+[\\w$*=^|~-]+)+|\"[^\"\\]]{1,255}|'[^'\\]]{1,255})\\s*\\]/.test(selector)) {\n return false;\n }\n // filter pseudo-classes\n if (selector.includes(':')) {\n let reg;\n if (REG_LOGICAL_KEY.test(selector)) {\n // filter empty :is() and :where()\n if (REG_LOGICAL_EMPTY.test(selector)) {\n return false;\n }\n const { complex, descendant } = opt;\n if (complex && descendant) {\n reg = REG_LOGICAL_COMPLEX_A;\n } else if (complex) {\n reg = REG_LOGICAL_COMPLEX_B;\n } else {\n reg = REG_LOGICAL_COMPOUND;\n }\n } else {\n reg = REG_CHILD_INDEXED;\n }\n if (reg.test(selector)) {\n return false;\n }\n }\n return true;\n};\n\n/* export */\nexport { generate as generateCSS } from 'css-tree';\n"], + "mappings": "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", + "names": ["parser_exports", "__export", "filterSelector", "parseAstName", "parseSelector", "preprocess", "sortAST", "unescapeSelector", "walkAST", "__toCommonJS", "import_css_tree", "import_constant", "selector", "arr", "l", "item", "hexExists", "hex", "str", "low", "high", "deci", "postStr", "args", "index", "preHash", "postHash", "codePoint", "res", "ast", "e", "message", "lang", "range", "escapedRange", "escapedLang", "sel", "name", "branches", "info", "node", "list", "itemList", "i", "type", "children", "grandChildren", "greatGrandChildren", "asts", "order", "a", "b", "typeA", "typeB", "bitA", "bitB", "prefix", "localName", "opt", "reg", "complex", "descendant"] } diff --git a/package.json b/package.json index def4189b..05ff1b17 100644 --- a/package.json +++ b/package.json @@ -34,19 +34,19 @@ "c8": "^10.1.2", "chai": "^5.1.1", "commander": "^12.1.0", - "esbuild": "^0.21.5", + "esbuild": "^0.23.0", "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.2.12", + "eslint-plugin-jsdoc": "^48.5.0", "eslint-plugin-regexp": "^2.6.0", "eslint-plugin-unicorn": "^54.0.0", - "happy-dom": "^14.12.0", + "happy-dom": "^14.12.3", "jsdom": "^24.1.0", - "linkedom": "^0.18.3", - "mocha": "^10.4.0", + "linkedom": "^0.18.4", + "mocha": "^10.6.0", "sinon": "^18.0.0", - "typescript": "^5.4.5", + "typescript": "^5.5.3", "wpt-runner": "^5.0.0" }, "scripts": { @@ -60,5 +60,5 @@ "tsc": "node scripts/index clean --dir=types -i && npx tsc", "update-wpt": "git submodule update --init --recursive --remote" }, - "version": "4.4.13" + "version": "4.5.0" }