From d9b6dd1e45f7fc630bf3a083fd632dd08bfd8358 Mon Sep 17 00:00:00 2001 From: "asamuzaK (Kazz)" Date: Sat, 20 Jul 2024 11:05:21 +0900 Subject: [PATCH] v4.6.4 --- dist/cjs/js/constant.js | 2 +- dist/cjs/js/constant.js.map | 6 +++--- dist/cjs/js/finder.js | 2 +- dist/cjs/js/finder.js.map | 6 +++--- dist/cjs/js/parser.js | 4 ++-- dist/cjs/js/parser.js.map | 4 ++-- package.json | 4 ++-- types/js/constant.d.ts | 1 - 8 files changed, 14 insertions(+), 15 deletions(-) diff --git a/dist/cjs/js/constant.js b/dist/cjs/js/constant.js index 1e9bb7ca..a23afbd2 100644 --- a/dist/cjs/js/constant.js +++ b/dist/cjs/js/constant.js @@ -1,2 +1,2 @@ -var T=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var Y=(o,t)=>{for(var n in t)T(o,n,{get:t[n],enumerable:!0})},u=(o,t,n,I)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of U(t))!d.call(o,s)&&s!==n&&T(o,s,{get:()=>t[s],enumerable:!(I=F(t,s))||I.enumerable});return o};var H=o=>u(T({},"__esModule",{value:!0}),o);var Vt={};Y(Vt,{ALPHA_NUM:()=>R,ANB:()=>D,AN_PLUS_B:()=>B,BIT_01:()=>q,BIT_02:()=>J,BIT_04:()=>tt,BIT_08:()=>ot,BIT_16:()=>et,BIT_32:()=>st,BIT_FFFF:()=>rt,BIT_HYPHEN:()=>Et,CHILD_IDX:()=>A,COMBINATOR:()=>m,COMBO:()=>O,COMPLEX:()=>L,COMPLEX_L:()=>N,COMPOUND:()=>E,COMPOUND_A:()=>C,COMPOUND_B:()=>S,COMPOUND_I:()=>l,DIGIT:()=>c,DOCUMENT_FRAGMENT_NODE:()=>Rt,DOCUMENT_NODE:()=>Tt,DOCUMENT_POSITION_CONTAINED_BY:()=>Ct,DOCUMENT_POSITION_CONTAINS:()=>Lt,DOCUMENT_POSITION_PRECEDING:()=>$t,DUO:()=>nt,ELEMENT_NODE:()=>xt,EMPTY:()=>w,HEX:()=>ct,IDENTIFIER:()=>g,LANG_PART:()=>G,LOGICAL_COMPLEX:()=>a,LOGICAL_COMPOUND:()=>M,LOGICAL_KEY:()=>x,NESTED_LOGICAL_A:()=>P,NESTED_LOGICAL_B:()=>i,NOT_SUPPORTED_ERR:()=>h,NTH:()=>X,N_TH:()=>_,PSEUDO_CLASSES:()=>p,RAW:()=>b,REG_ANCHOR:()=>Dt,REG_CHILD_INDEXED:()=>Pt,REG_COMPLEX:()=>it,REG_DIR:()=>lt,REG_FORM:()=>at,REG_FORM_CTRL:()=>Mt,REG_FORM_GROUP:()=>Ft,REG_FORM_VALID:()=>Ut,REG_HEX:()=>dt,REG_INTERACT:()=>Yt,REG_INVALID_SELECTOR:()=>ut,REG_LANG:()=>Ht,REG_LANG_QUOTED:()=>Bt,REG_LOGICAL_COMPLEX:()=>mt,REG_LOGICAL_COMPOUND:()=>wt,REG_LOGICAL_EMPTY:()=>gt,REG_LOGICAL_KEY:()=>ht,REG_LOGICAL_PSEUDO:()=>Xt,REG_SHADOW_HOST:()=>bt,REG_SHADOW_MODE:()=>ft,REG_SHADOW_PSEUDO:()=>Wt,REG_TYPE_CHECK:()=>yt,REG_TYPE_DATE:()=>kt,REG_TYPE_RANGE:()=>Kt,REG_TYPE_RESET:()=>Zt,REG_TYPE_SUBMIT:()=>vt,REG_TYPE_TEXT:()=>zt,SELECTOR:()=>f,SELECTOR_ATTR:()=>W,SELECTOR_CLASS:()=>y,SELECTOR_ID:()=>k,SELECTOR_LIST:()=>K,SELECTOR_PSEUDO_CLASS:()=>Z,SELECTOR_PSEUDO_ELEMENT:()=>v,SELECTOR_TYPE:()=>z,SHOW_ALL:()=>St,SHOW_DOCUMENT:()=>Nt,SHOW_DOCUMENT_FRAGMENT:()=>It,SHOW_ELEMENT:()=>At,STRING:()=>V,SUB_TYPE:()=>r,SYNTAX_ERR:()=>Q,TAG_TYPE:()=>e,TAG_TYPE_I:()=>$,TEXT_NODE:()=>Ot,TYPE_FROM:()=>pt,TYPE_TO:()=>_t,U_FFFD:()=>j,WALKER_FILTER:()=>Gt});module.exports=H(Vt);const B="AnPlusB",m="Combinator",w="__EMPTY__",g="Identifier",h="NotSupportedError",X="Nth",b="Raw",f="Selector",W="AttributeSelector",y="ClassSelector",k="IdSelector",K="SelectorList",Z="PseudoClassSelector",v="PseudoElementSelector",z="TypeSelector",V="String",Q="SyntaxError",j="\uFFFD",q=1,J=2,tt=4,ot=8,et=16,st=32,rt=65535,Et=45,nt=2,ct=16,pt=8,_t=-1,xt=1,Ot=3,Tt=9,Rt=11,$t=2,Lt=8,Ct=16,St=4294967295,Nt=256,It=1024,At=1,Gt=1281,R="[A-Z\\d]+",A="(?:first|last|only)-(?:child|of-type)",c="(?:0|[1-9]\\d*)",G=`(?:-${R})*`,p=`(?:any-)?link|${A}|checked|empty|indeterminate|root|target|visited`,D=`[+-]?(?:${c}n?|n)|(?:[+-]?${c})?n\\s*[+-]\\s*${c}`,_=`nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${D})\\s*\\)`,r="\\[[^|\\]]+\\]|[#.:][\\w-]+",e="\\*|[A-Za-z][\\w-]*",$="\\*|[A-Z][\\w-]*",x="(?:is|not)",E=`(?:${e}|(?:${e})?(?:${r})+)`,O="\\s?[\\s>~+]\\s?",L=`${E}(?:${O}${E})*`,P=`:is\\(\\s*${E}(?:\\s*,\\s*${E})*\\s*\\)`,i=`:is\\(\\s*${L}(?:\\s*,\\s*${L})*\\s*\\)`,C=`(?:${e}|(?:${e})?(?:${r}|${P})+)`,S=`(?:${e}|(?:${e})?(?:${r}|${i})+)`,l=`(?:${$}|(?:${$})?(?:${r})+)`,N=`${S}(?:${O}${S})*`,a=`${x}\\(\\s*${N}(?:\\s*,\\s*${N})*\\s*\\)`,M=`${x}\\(\\s*${C}(?:\\s*,\\s*${C})*\\s*\\)`,Dt=/^a(?:rea)?$/,Pt=new RegExp(`:(?!${p}|${_})`),it=new RegExp(`${O}${l}`,"i"),lt=/^(?:ltr|rtl)$/,at=/^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/,Mt=/^(?:button|fieldset|input|optgroup|option|select|textarea)$/,Ft=/^(?:fieldset|optgroup|select)$/,Ut=/^(?:button|form|input|select|textarea)$/,dt=/^([\da-f]{1,6}\s?)/i,Yt=/^(?:details|dialog)$/,ut=/^$|^\s*>|,\s*$/,Ht=new RegExp(`^(?:\\*-)?${R}${G}$`,"i"),Bt=/(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/,mt=new RegExp(`:(?!${p}|${_}|${a})`),wt=new RegExp(`:(?!${p}|${_}|${M})`),gt=/(:(is|where)\(\s*\))/,ht=new RegExp(`:${x}\\(`),Xt=/^(?:has|is|not|where)$/,bt=/^host(?:-context)?$/,ft=/^(?:close|open)$/,Wt=/^part|slotted$/,yt=/^(?:checkbox|radio)$/,kt=/^(?:date(?:time-local)?|month|time|week)$/,Kt=/(?:date(?:time-local)?|month|number|range|time|week)$/,Zt=/^(?:button|reset)$/,vt=/^(?:image|submit)$/,zt=/^(?: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,COMPLEX,COMPLEX_L,COMPOUND,COMPOUND_A,COMPOUND_B,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,LOGICAL_COMPOUND,LOGICAL_KEY,NESTED_LOGICAL_A,NESTED_LOGICAL_B,NOT_SUPPORTED_ERR,NTH,N_TH,PSEUDO_CLASSES,RAW,REG_ANCHOR,REG_CHILD_INDEXED,REG_COMPLEX,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,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 F=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var Y=(o,t)=>{for(var n in t)T(o,n,{get:t[n],enumerable:!0})},H=(o,t,n,I)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of U(t))!d.call(o,s)&&s!==n&&T(o,s,{get:()=>t[s],enumerable:!(I=F(t,s))||I.enumerable});return o};var u=o=>H(T({},"__esModule",{value:!0}),o);var zt={};Y(zt,{ALPHA_NUM:()=>R,ANB:()=>G,AN_PLUS_B:()=>B,BIT_01:()=>q,BIT_02:()=>J,BIT_04:()=>tt,BIT_08:()=>ot,BIT_16:()=>et,BIT_32:()=>st,BIT_FFFF:()=>rt,BIT_HYPHEN:()=>Et,CHILD_IDX:()=>A,COMBINATOR:()=>m,COMBO:()=>O,COMPLEX:()=>L,COMPLEX_L:()=>N,COMPOUND:()=>E,COMPOUND_A:()=>C,COMPOUND_B:()=>S,COMPOUND_I:()=>l,DIGIT:()=>c,DOCUMENT_FRAGMENT_NODE:()=>Rt,DOCUMENT_NODE:()=>Tt,DOCUMENT_POSITION_CONTAINED_BY:()=>Ct,DOCUMENT_POSITION_CONTAINS:()=>Lt,DOCUMENT_POSITION_PRECEDING:()=>$t,DUO:()=>nt,ELEMENT_NODE:()=>pt,EMPTY:()=>w,HEX:()=>ct,IDENTIFIER:()=>g,LANG_PART:()=>D,LOGICAL_COMPLEX:()=>a,LOGICAL_COMPOUND:()=>M,LOGICAL_KEY:()=>p,NESTED_LOGICAL_A:()=>P,NESTED_LOGICAL_B:()=>i,NOT_SUPPORTED_ERR:()=>h,NTH:()=>X,N_TH:()=>_,PSEUDO_CLASSES:()=>x,RAW:()=>b,REG_ANCHOR:()=>Gt,REG_CHILD_INDEXED:()=>Pt,REG_COMPLEX:()=>it,REG_DIR:()=>lt,REG_FORM:()=>at,REG_FORM_CTRL:()=>Mt,REG_FORM_VALID:()=>Ft,REG_HEX:()=>Ut,REG_INTERACT:()=>dt,REG_INVALID_SELECTOR:()=>Yt,REG_LANG:()=>Ht,REG_LANG_QUOTED:()=>ut,REG_LOGICAL_COMPLEX:()=>Bt,REG_LOGICAL_COMPOUND:()=>mt,REG_LOGICAL_EMPTY:()=>wt,REG_LOGICAL_KEY:()=>gt,REG_LOGICAL_PSEUDO:()=>ht,REG_SHADOW_HOST:()=>Xt,REG_SHADOW_MODE:()=>bt,REG_SHADOW_PSEUDO:()=>ft,REG_TYPE_CHECK:()=>Wt,REG_TYPE_DATE:()=>yt,REG_TYPE_RANGE:()=>kt,REG_TYPE_RESET:()=>Kt,REG_TYPE_SUBMIT:()=>Zt,REG_TYPE_TEXT:()=>vt,SELECTOR:()=>f,SELECTOR_ATTR:()=>W,SELECTOR_CLASS:()=>y,SELECTOR_ID:()=>k,SELECTOR_LIST:()=>K,SELECTOR_PSEUDO_CLASS:()=>Z,SELECTOR_PSEUDO_ELEMENT:()=>v,SELECTOR_TYPE:()=>z,SHOW_ALL:()=>St,SHOW_DOCUMENT:()=>Nt,SHOW_DOCUMENT_FRAGMENT:()=>It,SHOW_ELEMENT:()=>At,STRING:()=>V,SUB_TYPE:()=>r,SYNTAX_ERR:()=>Q,TAG_TYPE:()=>e,TAG_TYPE_I:()=>$,TEXT_NODE:()=>Ot,TYPE_FROM:()=>xt,TYPE_TO:()=>_t,U_FFFD:()=>j,WALKER_FILTER:()=>Dt});module.exports=u(zt);const B="AnPlusB",m="Combinator",w="__EMPTY__",g="Identifier",h="NotSupportedError",X="Nth",b="Raw",f="Selector",W="AttributeSelector",y="ClassSelector",k="IdSelector",K="SelectorList",Z="PseudoClassSelector",v="PseudoElementSelector",z="TypeSelector",V="String",Q="SyntaxError",j="\uFFFD",q=1,J=2,tt=4,ot=8,et=16,st=32,rt=65535,Et=45,nt=2,ct=16,xt=8,_t=-1,pt=1,Ot=3,Tt=9,Rt=11,$t=2,Lt=8,Ct=16,St=4294967295,Nt=256,It=1024,At=1,Dt=1281,R="[A-Z\\d]+",A="(?:first|last|only)-(?:child|of-type)",c="(?:0|[1-9]\\d*)",D=`(?:-${R})*`,x=`(?:any-)?link|${A}|checked|empty|indeterminate|root|target|visited`,G=`[+-]?(?:${c}n?|n)|(?:[+-]?${c})?n\\s*[+-]\\s*${c}`,_=`nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${G})\\s*\\)`,r="\\[[^|\\]]+\\]|[#.:][\\w-]+",e="\\*|[A-Za-z][\\w-]*",$="\\*|[A-Z][\\w-]*",p="(?:is|not)",E=`(?:${e}|(?:${e})?(?:${r})+)`,O="\\s?[\\s>~+]\\s?",L=`${E}(?:${O}${E})*`,P=`:is\\(\\s*${E}(?:\\s*,\\s*${E})*\\s*\\)`,i=`:is\\(\\s*${L}(?:\\s*,\\s*${L})*\\s*\\)`,C=`(?:${e}|(?:${e})?(?:${r}|${P})+)`,S=`(?:${e}|(?:${e})?(?:${r}|${i})+)`,l=`(?:${$}|(?:${$})?(?:${r})+)`,N=`${S}(?:${O}${S})*`,a=`${p}\\(\\s*${N}(?:\\s*,\\s*${N})*\\s*\\)`,M=`${p}\\(\\s*${C}(?:\\s*,\\s*${C})*\\s*\\)`,Gt=/^a(?:rea)?$/,Pt=new RegExp(`:(?!${x}|${_})`),it=new RegExp(`${O}${l}`,"i"),lt=/^(?:ltr|rtl)$/,at=/^(?:button|fieldset|form|input|select|textarea)$/,Mt=/^(?:button|fieldset|input|optgroup|option|select|textarea)$/,Ft=/^(?:button|form|input|select|textarea)$/,Ut=/^([\da-f]{1,6}\s?)/i,dt=/^(?:details|dialog)$/,Yt=/^$|^\s*>|,\s*$/,Ht=new RegExp(`^(?:\\*-)?${R}${D}$`,"i"),ut=/(:lang\(\s*("[A-Za-z\d\-*]*")\s*\))/,Bt=new RegExp(`:(?!${x}|${_}|${a})`),mt=new RegExp(`:(?!${x}|${_}|${M})`),wt=/(:(is|where)\(\s*\))/,gt=new RegExp(`:${p}\\(`),ht=/^(?:has|is|not|where)$/,Xt=/^host(?:-context)?$/,bt=/^(?:close|open)$/,ft=/^part|slotted$/,Wt=/^(?:checkbox|radio)$/,yt=/^(?:date(?:time-local)?|month|time|week)$/,kt=/(?:date(?:time-local)?|month|number|range|time|week)$/,Kt=/^(?:button|reset)$/,Zt=/^(?:image|submit)$/,vt=/^(?: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,COMPLEX,COMPLEX_L,COMPOUND,COMPOUND_A,COMPOUND_B,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,LOGICAL_COMPOUND,LOGICAL_KEY,NESTED_LOGICAL_A,NESTED_LOGICAL_B,NOT_SUPPORTED_ERR,NTH,N_TH,PSEUDO_CLASSES,RAW,REG_ANCHOR,REG_CHILD_INDEXED,REG_COMPLEX,REG_DIR,REG_FORM,REG_FORM_CTRL,REG_FORM_VALID,REG_HEX,REG_INTERACT,REG_INVALID_SELECTOR,REG_LANG,REG_LANG_QUOTED,REG_LOGICAL_COMPLEX,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 b80ad0f6..05ab8ebb 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, note that [foo|=bar] is excluded\nexport const SUB_TYPE = '\\\\[[^|\\\\]]+\\\\]|[#.:][\\\\w-]+';\n// TAG_TYPE: *, tag\nexport const TAG_TYPE = '\\\\*|[A-Za-z][\\\\w-]*';\nexport const TAG_TYPE_I = '\\\\*|[A-Z][\\\\w-]*';\n// LOGICAL_KEY: :has() and :where() are excluded\nexport const LOGICAL_KEY = '(?:is|not)';\nexport const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`;\nexport const COMBO = '\\\\s?[\\\\s>~+]\\\\s?';\nexport const COMPLEX = `${COMPOUND}(?:${COMBO}${COMPOUND})*`;\nexport const NESTED_LOGICAL_A =\n `:is\\\\(\\\\s*${COMPOUND}(?:\\\\s*,\\\\s*${COMPOUND})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_B =\n `:is\\\\(\\\\s*${COMPLEX}(?:\\\\s*,\\\\s*${COMPLEX})*\\\\s*\\\\)`;\nexport const COMPOUND_A =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_A})+)`;\nexport const COMPOUND_B =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_B})+)`;\nexport const COMPOUND_I =\n `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`;\nexport const COMPLEX_L = `${COMPOUND_B}(?:${COMBO}${COMPOUND_B})*`;\nexport const LOGICAL_COMPLEX =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPLEX_L}(?:\\\\s*,\\\\s*${COMPLEX_L})*\\\\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 = new RegExp(`${COMBO}${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 =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPLEX})`);\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": "4ZAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,eAAAE,EAAA,QAAAC,EAAA,cAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,GAAA,WAAAC,GAAA,WAAAC,GAAA,WAAAC,GAAA,aAAAC,GAAA,eAAAC,GAAA,cAAAC,EAAA,eAAAC,EAAA,UAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,UAAAC,EAAA,2BAAAC,GAAA,kBAAAC,GAAA,mCAAAC,GAAA,+BAAAC,GAAA,gCAAAC,GAAA,QAAAC,GAAA,iBAAAC,GAAA,UAAAC,EAAA,QAAAC,GAAA,eAAAC,EAAA,cAAAC,EAAA,oBAAAC,EAAA,qBAAAC,EAAA,gBAAAC,EAAA,qBAAAC,EAAA,qBAAAC,EAAA,sBAAAC,EAAA,QAAAC,EAAA,SAAAC,EAAA,mBAAAC,EAAA,QAAAC,EAAA,eAAAC,GAAA,sBAAAC,GAAA,gBAAAC,GAAA,YAAAC,GAAA,aAAAC,GAAA,kBAAAC,GAAA,mBAAAC,GAAA,mBAAAC,GAAA,YAAAC,GAAA,iBAAAC,GAAA,yBAAAC,GAAA,aAAAC,GAAA,oBAAAC,GAAA,wBAAAC,GAAA,yBAAAC,GAAA,sBAAAC,GAAA,oBAAAC,GAAA,uBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,sBAAAC,GAAA,mBAAAC,GAAA,kBAAAC,GAAA,mBAAAC,GAAA,mBAAAC,GAAA,oBAAAC,GAAA,kBAAAC,GAAA,aAAAC,EAAA,kBAAAC,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,kBAAAC,EAAA,0BAAAC,EAAA,4BAAAC,EAAA,kBAAAC,EAAA,aAAAC,GAAA,kBAAAC,GAAA,2BAAAC,GAAA,iBAAAC,GAAA,WAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,cAAAC,GAAA,cAAAC,GAAA,YAAAC,GAAA,WAAAC,EAAA,kBAAAC,KAAA,eAAAC,EAAA7F,IAKO,MAAMI,EAAY,UACZU,EAAa,aACbgB,EAAQ,YACRE,EAAa,aACbO,EAAoB,oBACpBC,EAAM,MACNG,EAAM,MACN4B,EAAW,WACXC,EAAgB,oBAChBC,EAAiB,gBACjBC,EAAc,aACdC,EAAgB,eAChBC,EAAwB,sBACxBC,EAA0B,wBAC1BC,EAAgB,eAChBK,EAAS,SACTE,EAAa,cACbM,EAAS,SAGTtF,EAAS,EACTC,EAAS,EACTC,GAAS,EACTC,GAAS,EACTC,GAAS,GACTC,GAAS,GACTC,GAAW,MACXC,GAAa,GACbgB,GAAM,EACNG,GAAM,GACN0D,GAAY,EACZC,GAAU,GAGV7D,GAAe,EACf2D,GAAY,EACZhE,GAAgB,EAChBD,GAAyB,GACzBI,GAA8B,EAC9BD,GAA6B,EAC7BD,GAAiC,GAGjCsD,GAAW,WACXC,GAAgB,IAChBC,GAAyB,KACzBC,GAAe,EACfU,GAAgB,KAGhB1F,EAAY,YACZW,EAAY,wCACZS,EAAQ,kBACRW,EAAY,OAAO/B,CAAS,KAC5BwC,EACX,iBAAiB7B,CAAS,mDACfV,EACX,WAAWmB,CAAK,iBAAiBA,CAAK,kBAAkBA,CAAK,GAElDmB,EACX,qDAAqDtC,CAAG,WAE7CiF,EAAW,8BAEXE,EAAW,sBACXC,EAAa,mBAEbnD,EAAc,aACdlB,EAAW,MAAMoE,CAAQ,OAAOA,CAAQ,QAAQF,CAAQ,MACxDrE,EAAQ,mBACRC,EAAU,GAAGE,CAAQ,MAAMH,CAAK,GAAGG,CAAQ,KAC3CmB,EACX,aAAanB,CAAQ,eAAeA,CAAQ,YACjCoB,EACX,aAAatB,CAAO,eAAeA,CAAO,YAC/BG,EACX,MAAMmE,CAAQ,OAAOA,CAAQ,QAAQF,CAAQ,IAAI/C,CAAgB,MACtDjB,EACX,MAAMkE,CAAQ,OAAOA,CAAQ,QAAQF,CAAQ,IAAI9C,CAAgB,MACtDjB,EACX,MAAMkE,CAAU,OAAOA,CAAU,QAAQH,CAAQ,MACtCnE,EAAY,GAAGG,CAAU,MAAML,CAAK,GAAGK,CAAU,KACjDc,EACX,GAAGE,CAAW,UAAUnB,CAAS,eAAeA,CAAS,YAC9CkB,EACX,GAAGC,CAAW,UAAUjB,CAAU,eAAeA,CAAU,YAGhDyB,GAAa,cACbC,GAAoB,IAAI,OAAO,OAAOH,CAAc,IAAID,CAAI,GAAG,EAC/DK,GAAc,IAAI,OAAO,GAAG/B,CAAK,GAAGM,CAAU,GAAI,GAAG,EACrD0B,GAAU,gBACVC,GAAW,qDACXC,GACX,8DACWC,GAAiB,iCACjBC,GAAiB,0CACjBC,GAAU,sBACVC,GAAe,uBACfC,GAAuB,iBACvBC,GAAW,IAAI,OAAO,aAAarD,CAAS,GAAG+B,CAAS,IAAK,GAAG,EAChEuB,GAAkB,sCAClBC,GACX,IAAI,OAAO,OAAOf,CAAc,IAAID,CAAI,IAAIP,CAAe,GAAG,EACnDwB,GACX,IAAI,OAAO,OAAOhB,CAAc,IAAID,CAAI,IAAIN,CAAgB,GAAG,EACpDwB,GAAoB,uBACpBC,GAAkB,IAAI,OAAO,IAAIxB,CAAW,KAAK,EACjDyB,GAAqB,yBACrBC,GAAkB,sBAClBC,GAAkB,mBAClBC,GAAoB,iBACpBC,GAAiB,uBACjBC,GAAgB,4CAChBC,GACX,wDACWC,GAAiB,qBACjBC,GAAkB,qBAClBC,GAAgB", - "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", "COMPLEX", "COMPLEX_L", "COMPOUND", "COMPOUND_A", "COMPOUND_B", "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", "LOGICAL_COMPOUND", "LOGICAL_KEY", "NESTED_LOGICAL_A", "NESTED_LOGICAL_B", "NOT_SUPPORTED_ERR", "NTH", "N_TH", "PSEUDO_CLASSES", "RAW", "REG_ANCHOR", "REG_CHILD_INDEXED", "REG_COMPLEX", "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", "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"] + "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, note that [foo|=bar] is excluded\nexport const SUB_TYPE = '\\\\[[^|\\\\]]+\\\\]|[#.:][\\\\w-]+';\n// TAG_TYPE: *, tag\nexport const TAG_TYPE = '\\\\*|[A-Za-z][\\\\w-]*';\nexport const TAG_TYPE_I = '\\\\*|[A-Z][\\\\w-]*';\n// LOGICAL_KEY: :has() and :where() are excluded\nexport const LOGICAL_KEY = '(?:is|not)';\nexport const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`;\nexport const COMBO = '\\\\s?[\\\\s>~+]\\\\s?';\nexport const COMPLEX = `${COMPOUND}(?:${COMBO}${COMPOUND})*`;\nexport const NESTED_LOGICAL_A =\n `:is\\\\(\\\\s*${COMPOUND}(?:\\\\s*,\\\\s*${COMPOUND})*\\\\s*\\\\)`;\nexport const NESTED_LOGICAL_B =\n `:is\\\\(\\\\s*${COMPLEX}(?:\\\\s*,\\\\s*${COMPLEX})*\\\\s*\\\\)`;\nexport const COMPOUND_A =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_A})+)`;\nexport const COMPOUND_B =\n `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${NESTED_LOGICAL_B})+)`;\nexport const COMPOUND_I =\n `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`;\nexport const COMPLEX_L = `${COMPOUND_B}(?:${COMBO}${COMPOUND_B})*`;\nexport const LOGICAL_COMPLEX =\n `${LOGICAL_KEY}\\\\(\\\\s*${COMPLEX_L}(?:\\\\s*,\\\\s*${COMPLEX_L})*\\\\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 = new RegExp(`${COMBO}${COMPOUND_I}`, 'i');\nexport const REG_DIR = /^(?:ltr|rtl)$/;\nexport const REG_FORM = /^(?:button|fieldset|form|input|select|textarea)$/;\nexport const REG_FORM_CTRL =\n /^(?:button|fieldset|input|optgroup|option|select|textarea)$/;\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 =\n new RegExp(`:(?!${PSEUDO_CLASSES}|${N_TH}|${LOGICAL_COMPLEX})`);\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", "COMPLEX", "COMPLEX_L", "COMPOUND", "COMPOUND_A", "COMPOUND_B", "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", "LOGICAL_COMPOUND", "LOGICAL_KEY", "NESTED_LOGICAL_A", "NESTED_LOGICAL_B", "NOT_SUPPORTED_ERR", "NTH", "N_TH", "PSEUDO_CLASSES", "RAW", "REG_ANCHOR", "REG_CHILD_INDEXED", "REG_COMPLEX", "REG_DIR", "REG_FORM", "REG_FORM_CTRL", "REG_FORM_VALID", "REG_HEX", "REG_INTERACT", "REG_INVALID_SELECTOR", "REG_LANG", "REG_LANG_QUOTED", "REG_LOGICAL_COMPLEX", "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/finder.js b/dist/cjs/js/finder.js index ce7c3064..c3def994 100644 --- a/dist/cjs/js/finder.js +++ b/dist/cjs/js/finder.js @@ -1,2 +1,2 @@ -var z=Object.create;var M=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var q=(g,l)=>{for(var e in l)M(g,e,{get:l[e],enumerable:!0})},D=(g,l,e,h)=>{if(l&&typeof l=="object"||typeof l=="function")for(let c of W(l))!j.call(g,c)&&c!==e&&M(g,c,{get:()=>l[c],enumerable:!(h=H(l,c))||h.enumerable});return g};var Y=(g,l,e)=>(e=g!=null?z(B(g)):{},D(l||!g||!g.__esModule?M(e,"default",{value:g,enumerable:!0}):e,g)),V=g=>D(M({},"__esModule",{value:!0}),g);var K={};q(K,{Finder:()=>X});module.exports=V(K);var I=Y(require("@asamuzakjp/nwsapi"),1),_=require("./dom-util.js"),O=require("./matcher.js"),y=require("./parser.js"),n=require("./constant.js");const x="next",S="prev",L="all",E="first",C="lineal",R="self";class X{#a;#c;#s;#o;#w;#r;#b;#e;#f;#k;#h;#m;#_;#t;#d;#u;#n;#p;#i;#l;constructor(l,e){this.#l=l,this.#r=e??l.document,this.#c=new WeakMap,this.#o=new WeakMap,this.#_=new WeakMap,this.#h=this._initNwsapi(l,e)}_onError(l){if(!this.#k)if(l instanceof DOMException||l instanceof this.#l.DOMException)if(l.name===n.NOT_SUPPORTED_ERR)this.#i&&console.warn(l.message);else throw new this.#l.DOMException(l.message,l.name);else throw l}_setup(l,e,h={}){const{event:c,noexcept:a,warn:o}=h;return this.#k=!!a,this.#i=!!o,this.#b=this._setEvent(c),this.#e=e,[this.#s,this.#t,this.#n]=(0,_.resolveContent)(e),this.#d=(0,_.isInShadowTree)(e),[this.#a,this.#f]=this._correspond(l),this.#p=new WeakMap,e}_initNwsapi(){const l=(0,I.default)({DOMException:this.#l.DOMException,document:this.#r});return l.configure({LOGERRORS:!1}),l}_setEvent(l){return l instanceof this.#l.KeyboardEvent||l instanceof this.#l.MouseEvent?l:null}_correspond(l){const e=[];this.#w=!1;let h;if(this.#o.has(this.#s)){const c=this.#o.get(this.#s);if(c&&c.has(`${l}`)){const a=c.get(`${l}`);this.#w=a.descendant,h=a.ast}}if(h){const c=h.length;for(let a=0;a]$/.test(k)&&(t=!0),m.push({combo:u,leaves:(0,y.sortAST)(p)}),p.clear()}else if(u){let{name:w}=u;w&&typeof w=="string"&&(w=(0,y.unescapeSelector)(w),typeof w=="string"&&w!==u.name&&(u.name=w),/[|:]/.test(w)&&(u.namespace=!0)),p.add(u)}if(f.length)u=f.shift();else{m.push({combo:null,leaves:(0,y.sortAST)(p)}),p.clear();break}}}h.push({branch:m,collected:!1,dir:null,filtered:!1,find:!1}),e[s]=[],s++}if(i){let f;this.#o.has(this.#s)?f=this.#o.get(this.#s):f=new Map,f.set(`${l}`,{ast:h,descendant:t}),this.#o.set(this.#s,f)}this.#w=t}return[h,e]}_createTreeWalker(l){let e;return this.#p.has(l)?e=this.#p.get(l):(e=this.#r.createTreeWalker(l,n.WALKER_FILTER),this.#p.set(l,e)),e}_prepareQuerySelectorWalker(){return this.#m=this._createTreeWalker(this.#e),this.#u=!1,this.#m}_collectNthChild(l,e,h){const{a:c,b:a,reverse:o,selector:r}=l,{parentNode:b}=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(b){const t=this.#n;let s=(0,_.traverseNode)(b,t);s=t.firstChild();let f=0;for(;s;)f++,s=t.nextSibling();const m=new Set;if(i)for(s=(0,_.traverseNode)(b,t),s=t.firstChild();s;){const{display:u,visibility:p}=this.#l.getComputedStyle(s);if(u!=="none"&&p!=="hidden"){let w;for(const k of i)if(w=this._matchLeaves(k,s,h),!w)break;w&&m.add(s)}s=t.nextSibling()}if(c===0){if(a>0&&a<=f){if(m.size){s=(0,_.traverseNode)(b,t),o?s=t.lastChild():s=t.firstChild();let u=0;for(;s;){if(m.has(s)){if(u===a-1){d.add(s);break}u++}o?s=t.previousSibling():s=t.nextSibling()}}else if(!r){s=(0,_.traverseNode)(b,t),o?s=t.lastChild():s=t.firstChild();let u=0;for(;s;){if(u===a-1){d.add(s);break}o?s=t.previousSibling():s=t.nextSibling(),u++}}}}else{let u=a-1;if(c>0)for(;u<0;)u+=c;if(u>=0&&u0?0:a-1;for(;s&&(s&&u>=0&&u0?w++:w--):p===u&&(r||d.add(s),u+=c),o?s=t.previousSibling():s=t.nextSibling(),p++}}if(o&&d.size>1){const u=[...d];return new Set(u.reverse())}}else if(e===this.#t&&c+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:c,reverse:a}=l,{localName:o,parentNode:r,prefix:b}=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(c>0&&c<=s){t=(0,_.traverseNode)(r,i),a?t=i.lastChild():t=i.firstChild();let f=0;for(;t;){const{localName:m,prefix:u}=t;if(m===o&&u===b){if(f===c-1){d.add(t);break}f++}a?t=i.previousSibling():t=i.nextSibling()}}}else{let f=c-1;if(h>0)for(;f<0;)f+=h;if(f>=0&&f0?0:c-1;for(;t;){const{localName:u,prefix:p}=t;if(u===o&&p===b){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+c===1&&d.add(e);return d}_matchAnPlusB(l,e,h,c){const{nth:{a,b:o,name:r},selector:b}=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)){b&&d.set("selector",b);const i=Object.fromEntries(d);return this._collectNthChild(i,e,c)}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 c;if(Array.isArray(l)&&l.length){const a=l.map(s=>s),[o]=a,{type:r}=o;let b;r===n.COMBINATOR?b=a.shift():b={name:" ",type:n.COMBINATOR};const d=[];for(;a.length;){const[s]=a,{type:f}=s;if(f===n.COMBINATOR)break;d.push(a.shift())}const i={combo:b,leaves:d};h.dir=x;const t=this._matchCombinator(i,e,h);if(t.size)if(a.length){for(const s of t)if(c=this._matchHasPseudoFunc(a,s,h),c)break}else c=!0}return!!c}_matchLogicalPseudoFunc(l,e,h={}){const{astName:c="",branches:a=[],selector:o="",twigBranches:r=[]}=l;let b;if(c==="has")if(o.includes(":has("))b=null;else{let d;for(const i of a)if(d=this._matchHasPseudoFunc(i,e,h),d)break;d&&(b=e)}else{const d=/^(?:is|where)$/.test(c);h.forgive=d;const i=r.length;let t;for(let s=0;s0){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}c==="not"?t||(b=e):t&&(b=e)}return b??null}_matchPseudoClassSelector(l,e,h={}){const{children:c,name:a}=l,{localName:o,parentNode:r}=e,{forgive:b,warn:d=this.#i}=h,i=new Set;if(n.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=[],u=[];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===n.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}u.push(w)}t={astName:a,branches:f,twigBranches:u,selector:m.join(",")},this.#c.set(l,t)}const s=this._matchLogicalPseudoFunc(t,e,h);s&&i.add(s)}else if(Array.isArray(c))if(/^nth-(?:last-)?(?:child|of-type)$/.test(a)){const[t]=c;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"state":{if((0,_.isCustomElement)(e)){const[{value:t}]=c;t&&e[t]&&i.add(e)}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(!b){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(o)&&e.hasAttribute("href")&&i.add(e);break}case"local-link":{if(n.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.#b??{};(s==="mouseover"||s==="pointerover")&&e.contains(t)&&i.add(e);break}case"active":{const{buttons:t,target:s,type:f}=this.#b??{};(f==="mousedown"||f==="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 f=this.#s.getElementById(s);for(;f;){if(f===e){i.add(e);break}f=f.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 f=e,m=!0;for(;f;){if(f.disabled||f.hasAttribute("disabled")||f.hidden||f.hasAttribute("hidden")){m=!1;break}else{const{display:u,visibility:p}=this.#l.getComputedStyle(f);if(m=!(u==="none"||p==="hidden"),!m)break}if(f.parentNode&&f.parentNode.nodeType===n.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:u,visibility:p}=this.#l.getComputedStyle(f);if(m=!(u==="none"||p==="hidden"),!m)break}if(f.parentNode&&f.parentNode.nodeType===n.ELEMENT_NODE)f=f.parentNode;else break}m&&i.add(e)}break}case"open":{n.REG_INTERACT.test(o)&&e.hasAttribute("open")&&i.add(e);break}case"closed":{n.REG_INTERACT.test(o)&&!e.hasAttribute("open")&&i.add(e);break}case"disabled":{if(n.REG_FORM_CTRL.test(o)||(0,_.isCustomElement)(e,{formAssociated:!0}))if(e.disabled||e.hasAttribute("disabled"))i.add(e);else{let t=r;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&&r.localName!=="legend"&&(t.disabled||t.hasAttribute("disabled"))&&i.add(e)}break}case"enabled":{(n.REG_FORM_CTRL.test(o)||(0,_.isCustomElement)(e,{formAssociated:!0}))&&!(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||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,_.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||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,_.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")?n.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")&&n.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 u;for(let p=0;p=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)&&!(n.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(n.REG_FORM_VALID.test(o))e.checkValidity()?e.maxLength>=0&&e.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")&&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":{o==="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(o))t=e;else if(o==="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(o))t=e;else if(o==="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.#r.createTreeWalker(e,n.SHOW_ALL);let s=t.firstChild(),f;for(;s&&(f=s.nodeType!==n.ELEMENT_NODE&&s.nodeType!==n.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":{e.hasAttribute("is")||o.includes("-")?(0,_.isCustomElement)(e)&&i.add(e):(e instanceof this.#l.HTMLElement||e instanceof this.#l.SVGElement)&&i.add(e);break}case"popover-open":{if(e.popover){const{display:t}=this.#l.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(!b){const t=`Unknown pseudo-class :${a}`;throw new DOMException(t,n.SYNTAX_ERR)}}return i}_matchShadowHostPseudoClass(l,e){const{children:h,name:c}=l;let a;if(Array.isArray(h)){const{branches:o}=(0,y.walkAST)(h[0]),[r]=o,[...b]=r,{host:d}=e;if(c==="host"){let i;for(const t of b){const{type:s}=t;if(s===n.COMBINATOR){const m=`Invalid selector ${(0,y.generateCSS)(l)}`;throw new DOMException(m,n.SYNTAX_ERR)}if(i=this._matchSelector(t,d).has(d),!i)break}i&&(a=e)}else if(c==="host-context"){let i=d,t;for(;i;){for(const s of b){const{type:f}=s;if(f===n.COMBINATOR){const u=`Invalid selector ${(0,y.generateCSS)(l)}`;throw new DOMException(u,n.SYNTAX_ERR)}if(t=this._matchSelector(s,i).has(i),!t)break}if(t)break;i=i.parentNode}t&&(a=e)}}else if(c==="host")a=e;else{const o=`Invalid selector :${c}`;throw new DOMException(o,n.SYNTAX_ERR)}return a??null}_matchSelector(l,e,h){const{type:c}=l,a=new Set;if(l.name===n.EMPTY)return a;const o=(0,y.unescapeSelector)(l.name);if(typeof o=="string"&&o!==l.name&&(l.name=o),e.nodeType===n.ELEMENT_NODE)switch(c){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(o,h);break}case n.SELECTOR_ID:{e.id===o&&a.add(e);break}case n.SELECTOR_CLASS:{e.classList.contains(o)&&a.add(e);break}case n.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.#d&&c===n.SELECTOR_PSEUDO_CLASS&&e.nodeType===n.DOCUMENT_FRAGMENT_NODE){if(o!=="has"&&n.REG_LOGICAL_PSEUDO.test(o))return this._matchPseudoClassSelector(l,e,h);if(n.REG_SHADOW_HOST.test(o)){const r=this._matchShadowHostPseudoClass(l,e,h);r&&a.add(r)}}return a}_matchLeaves(l,e,h){const{attributes:c,localName:a,nodeType:o}=e;let r=this.#_.get(l),b;if(r&&r.has(e)){const{attr:d,matched:i}=r.get(e);c?.length===d&&(b=i)}if(typeof b!="boolean"){let d;o===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),b=this._matchSelector(i,e,h).has(e),!b)break}d&&(r||(r=new WeakMap),r.set(e,{attr:c?.length,matched:b}),this.#_.set(l,r))}return!!b}_matchHTMLCollection(l,e={}){const{compound:h,filterLeaves:c}=e,a=new Set,o=l.length;if(o)if(h)for(let r=0;r0,{type:r}=c,b=(0,y.unescapeSelector)(c.name);typeof b=="string"&&b!==c.name&&(c.name=b);let d=new Set,i=!1;if(this.#d)i=!0;else switch(r){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(b,h);break}case n.SELECTOR_ID:{if(this.#t.nodeType===n.ELEMENT_NODE)i=!0;else{const t=this.#t.getElementById(b);t&&t!==e&&e.contains(t)&&(o?this._matchLeaves(a,t,h)&&d.add(t):d.add(t))}break}case n.SELECTOR_CLASS:{const t=e.getElementsByClassName(b);d=this._matchHTMLCollection(t,{compound:o,filterLeaves:a});break}case n.SELECTOR_TYPE:{if(this.#s.contentType==="text/html"&&!/[*|]/.test(b)){const t=e.getElementsByTagName(b);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:c,leaves:a}=l,{name:o}=c,{parentNode:r}=e,{dir:b}=h,d=new Set;if(b===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,c=this.#m;let a=(0,_.traverseNode)(h,c),o;if(a)for((a.nodeType!==n.ELEMENT_NODE||a===h&&a!==this.#t)&&(a=c.nextNode());a;){if(this._matchLeaves(l,a,{warn:this.#i})){o=a;break}a=c.nextNode()}return o??null}_matchSelf(l){const e=[],h=this._matchLeaves(l,this.#e,{warn:this.#i});let c=!1;return h&&(e.push(this.#e),c=!0),[e,c]}_findLineal(l,e={}){const{complex:h}=e,c=[];let a=this._matchLeaves(l,this.#e,{warn:this.#i}),o=!1;if(a&&(c.push(this.#e),o=!0),!a||h){let r=this.#e.parentNode;for(;r&&(a=this._matchLeaves(l,r,{warn:this.#i}),a&&(c.push(r),o=!0),r.parentNode);)r=r.parentNode}return[c,o]}_findFirst(l){const e=[],h=this._findNode(l,{node:this.#e});let c=!1;return h&&(e.push(h),c=!0),[e,c]}_findFromHTMLCollection(l,e={}){const{complex:h,compound:c,filterLeaves:a,targetType:o}=e;let r=[],b=!1,d=!1;const i=l.length;if(i)if(this.#e.nodeType===n.ELEMENT_NODE)for(let t=0;t0,{name:b,type:d}=a;let i=[],t=!1,s=!1,f=!1;switch(d){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(b,{warn:this.#i});break}case n.SELECTOR_ID:{if(e===R)[i,s]=this._matchSelf(c);else if(e===C)[i,s]=this._findLineal(c,{complex:h});else if(e===E&&this.#t.nodeType!==n.ELEMENT_NODE){const m=this.#t.getElementById(b);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(c):f=!0;break}case n.SELECTOR_CLASS:{if(e===R)[i,s]=this._matchSelf(c);else if(e===C)[i,s]=this._findLineal(c,{complex:h});else if(this.#t.nodeType===n.DOCUMENT_NODE){const m=this.#t.getElementsByClassName(b);m.length&&([i,s,t]=this._findFromHTMLCollection(m,{complex:h,compound:r,filterLeaves:o,targetType:e}))}else e===E?[i,s]=this._findFirst(c):f=!0;break}case n.SELECTOR_TYPE:{if(e===R)[i,s]=this._matchSelf(c);else if(e===C)[i,s]=this._findLineal(c,{complex:h});else if(this.#s.contentType==="text/html"&&this.#t.nodeType===n.DOCUMENT_NODE&&!/[*|]/.test(b)){const m=this.#t.getElementsByTagName(b);m.length&&([i,s,t]=this._findFromHTMLCollection(m,{complex:h,compound:r,filterLeaves:o,targetType:e}))}else e===E?[i,s]=this._findFirst(c):f=!0;break}default:if(e!==C&&n.REG_SHADOW_HOST.test(b)){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(c):e===C?[i,s]=this._findLineal(c,{complex:h}):e===E?[i,s]=this._findFirst(c):f=!0}return{collected:t,compound:r,filtered:s,nodes:i,pending:f}}_collectNodes(l){const e=this.#a.values();if(l===L||l===E){const h=new Set;let c=0;for(const{branch:a}of e){const o=a.length,r=o>1,b=a[0];let d,i;if(r){const{combo:p,leaves:[{name:w,type:k}]}=b,N=a[o-1],{leaves:[{name:A,type:v}]}=N;if(v===n.SELECTOR_PSEUDO_ELEMENT||v===n.SELECTOR_ID)d=S,i=N;else if(k===n.SELECTOR_PSEUDO_ELEMENT||k===n.SELECTOR_ID)d=x,i=b;else if(l===L)if(w==="*"&&k===n.SELECTOR_TYPE)d=S,i=N;else if(A==="*"&&v===n.SELECTOR_TYPE)d=x,i=b;else if(o===2){const{name:T}=p;/^[+~]$/.test(T)?(d=S,i=N):(d=x,i=b)}else d=x,i=b;else if(A==="*"&&v===n.SELECTOR_TYPE)d=x,i=b;else if(w==="*"&&k===n.SELECTOR_TYPE)d=S,i=N;else{let T;for(const{combo:P,leaves:[U]}of a){const{name:$,type:G}=U;if(G===n.SELECTOR_PSEUDO_CLASS&&$==="dir"){T=!1;break}if(!T&&P){const{name:F}=P;/^[+~]$/.test(F)&&(T=!0)}}T?(d=x,i=b):(d=S,i=N)}}else d=S,i=b;const{collected:t,compound:s,filtered:f,nodes:m,pending:u}=this._findEntryNodes(i,l,r);m.length?(this.#a[c].find=!0,this.#f[c]=m):u&&h.add(new Map([["index",c],["twig",i]])),this.#a[c].collected=t,this.#a[c].dir=d,this.#a[c].filtered=f||!s,c++}if(h.size){let a,o;this.#e!==this.#t&&this.#e.nodeType===n.ELEMENT_NODE?(a=this.#e,o=this.#m):(a=this.#t,o=this.#n);let r=(0,_.traverseNode)(a,o);for(;r;){let b=!1;if(this.#e.nodeType===n.ELEMENT_NODE?r===this.#e?b=!0:b=this.#e.contains(r):b=!0,b)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.#a[s].filtered=!0,this.#a[s].find=!0,this.#f[s].push(r)}}r!==o.currentNode&&(r=(0,_.traverseNode)(r,o)),r=o.nextNode()}}}else{let h=0;for(const{branch:c}of e){const a=c[c.length-1],o=c.length>1,{compound:r,filtered:b,nodes:d}=this._findEntryNodes(a,l,o);d.length&&(this.#a[h].find=!0,this.#f[h]=d),this.#a[h].dir=S,this.#a[h].filtered=b||!r,h++}}return[this.#a,this.#f]}_getCombinedNodes(l,e,h){const c=[];for(const a of e){const o=this._matchCombinator(l,a,{dir:h,warn:this.#i});o.size&&c.push(...o)}return c.length?new Set(c):new Set}_matchNodeNext(l,e,h){const{combo:c,index:a}=h,{combo:o,leaves:r}=l[a],b={combo:c,leaves:r},d=this._getCombinedNodes(b,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:c}=h,a=l[c],o=new Set([e]),r=this._getCombinedNodes(a,o,S);let b;if(r.size){if(c===0)b=e;else for(const d of r)if(this._matchNodePrev(l,d,{index:c-1}))return e}return b??null}_find(l){(l===L||l===E)&&this._prepareQuerySelectorWalker();const[[...e],h]=this._collectNodes(l),c=e.length;let a=new Set;for(let o=0;o=0;w--){const k=r[w];if(p=this._getCombinedNodes(k,p,d),p.size)w===0&&(a.add(u),t>1&&a.size>1&&(this.#u=!0));else break}}else if(l===E&&d===x){const{combo:u}=r[0];let p;for(const w of s)if(p=this._matchNodeNext(r,new Set([w]),{combo:u,index:1}),p){a.add(p);break}if(!p&&!b){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:u,index:1}),p){a.add(p);break}N=this._findNode(w,{node:N})}}}else{let u;for(const p of s)if(u=this._matchNodePrev(r,p,{index:m-1}),u){a.add(p);break}if(!u&&!b&&l===E){const{leaves:p}=r[m],[w]=s;let k=this._findNode(p,{node:w});for(;k;){if(u=this._matchNodePrev(r,k,{index:m-1}),u){a.add(k);break}k=this._findNode(p,{node:k})}}}}}return a}matches(l,e,h){let c;try{if(e?.nodeType!==n.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:n.REG_COMPLEX.test(l),descendant:!0};if((0,y.filterSelector)(l,r))return this.#h.match(l,e)}this._setup(l,e,h),c=this._find(R).size}catch(a){this._onError(a)}return!!c}closest(l,e,h){let c;try{if(e?.nodeType!==n.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:n.REG_COMPLEX.test(l),descendant:!0};if((0,y.filterSelector)(l,r))return this.#h.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)){c=r;break}r=r.parentNode}}}catch(a){this._onError(a)}return c??null}querySelector(l,e,h){let c;try{(0,_.verifyNode)(e);let a;if(e.nodeType===n.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#r&&a.contentType==="text/html"&&(0,y.filterSelector)(l,{complex:!1,descendant:!1}))return this.#h.first(l,e);this._setup(l,e,h);const o=this._find(E);o.delete(this.#e),o.size&&([c]=(0,_.sortNodes)(o))}catch(a){this._onError(a)}return c??null}querySelectorAll(l,e,h){let c;try{(0,_.verifyNode)(e);let a;if(e.nodeType===n.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#r&&a.contentType==="text/html"&&(0,y.filterSelector)(l,{complex:!1,descendant:!0,qsa:!0}))return this.#h.select(l,e);this._setup(l,e,h);const o=this._find(L);o.delete(this.#e),o.size&&(this.#u?c=(0,_.sortNodes)(o):c=[...o])}catch(a){this._onError(a)}return c??[]}}0&&(module.exports={Finder}); +var z=Object.create;var M=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var q=(g,l)=>{for(var e in l)M(g,e,{get:l[e],enumerable:!0})},P=(g,l,e,h)=>{if(l&&typeof l=="object"||typeof l=="function")for(let c of W(l))!j.call(g,c)&&c!==e&&M(g,c,{get:()=>l[c],enumerable:!(h=H(l,c))||h.enumerable});return g};var Y=(g,l,e)=>(e=g!=null?z(B(g)):{},P(l||!g||!g.__esModule?M(e,"default",{value:g,enumerable:!0}):e,g)),V=g=>P(M({},"__esModule",{value:!0}),g);var K={};q(K,{Finder:()=>X});module.exports=V(K);var I=Y(require("@asamuzakjp/nwsapi"),1),N=require("./dom-util.js"),O=require("./matcher.js"),y=require("./parser.js"),n=require("./constant.js");const x="next",S="prev",L="all",E="first",C="lineal",R="self";class X{#a;#c;#s;#o;#w;#n;#b;#e;#f;#k;#h;#m;#N;#t;#d;#u;#r;#p;#i;#l;constructor(l,e){this.#l=l,this.#n=e??l.document,this.#c=new WeakMap,this.#o=new WeakMap,this.#N=new WeakMap,this.#h=this._initNwsapi(l,e)}_onError(l){if(!this.#k)if(l instanceof DOMException||l instanceof this.#l.DOMException)if(l.name===n.NOT_SUPPORTED_ERR)this.#i&&console.warn(l.message);else throw new this.#l.DOMException(l.message,l.name);else throw l}_setup(l,e,h={}){const{event:c,noexcept:a,warn:o}=h;return this.#k=!!a,this.#i=!!o,this.#b=this._setEvent(c),this.#e=e,[this.#s,this.#t,this.#r]=(0,N.resolveContent)(e),this.#d=(0,N.isInShadowTree)(e),[this.#a,this.#f]=this._correspond(l),this.#p=new WeakMap,e}_initNwsapi(){const l=(0,I.default)({DOMException:this.#l.DOMException,document:this.#n});return l.configure({LOGERRORS:!1}),l}_setEvent(l){return l instanceof this.#l.KeyboardEvent||l instanceof this.#l.MouseEvent?l:null}_correspond(l){const e=[];this.#w=!1;let h;if(this.#o.has(this.#s)){const c=this.#o.get(this.#s);if(c&&c.has(`${l}`)){const a=c.get(`${l}`);this.#w=a.descendant,h=a.ast}}if(h){const c=h.length;for(let a=0;a]$/.test(k)&&(t=!0),m.push({combo:b,leaves:(0,y.sortAST)(p)}),p.clear()}else if(b){let{name:w}=b;w&&typeof w=="string"&&(w=(0,y.unescapeSelector)(w),typeof w=="string"&&w!==b.name&&(b.name=w),/[|:]/.test(w)&&(b.namespace=!0)),p.add(b)}if(f.length)b=f.shift();else{m.push({combo:null,leaves:(0,y.sortAST)(p)}),p.clear();break}}}h.push({branch:m,collected:!1,dir:null,filtered:!1,find:!1}),e[s]=[],s++}if(i){let f;this.#o.has(this.#s)?f=this.#o.get(this.#s):f=new Map,f.set(`${l}`,{ast:h,descendant:t}),this.#o.set(this.#s,f)}this.#w=t}return[h,e]}_createTreeWalker(l){let e;return this.#p.has(l)?e=this.#p.get(l):(e=this.#n.createTreeWalker(l,n.WALKER_FILTER),this.#p.set(l,e)),e}_prepareQuerySelectorWalker(){return this.#m=this._createTreeWalker(this.#e),this.#u=!1,this.#m}_collectNthChild(l,e,h){const{a:c,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.#r;let s=(0,N.traverseNode)(u,t);s=t.firstChild();let f=0;for(;s;)f++,s=t.nextSibling();const m=new Set;if(i)for(s=(0,N.traverseNode)(u,t),s=t.firstChild();s;){const{display:b,visibility:p}=this.#l.getComputedStyle(s);if(b!=="none"&&p!=="hidden"){let w;for(const k of i)if(w=this._matchLeaves(k,s,h),!w)break;w&&m.add(s)}s=t.nextSibling()}if(c===0){if(a>0&&a<=f){if(m.size){s=(0,N.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,N.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(c>0)for(;b<0;)b+=c;if(b>=0&&b0?0:a-1;for(;s&&(s&&b>=0&&b0?w++:w--):p===b&&(r||d.add(s),b+=c),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&&c+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:c,reverse:a}=l,{localName:o,parentNode:r,prefix:u}=e,d=new Set;if(r){const i=this.#r;let t=(0,N.traverseNode)(r,i);t=i.firstChild();let s=0;for(;t;)s++,t=i.nextSibling();if(h===0){if(c>0&&c<=s){t=(0,N.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===c-1){d.add(t);break}f++}a?t=i.previousSibling():t=i.nextSibling()}}}else{let f=c-1;if(h>0)for(;f<0;)f+=h;if(f>=0&&f0?0:c-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+c===1&&d.add(e);return d}_matchAnPlusB(l,e,h,c){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,c)}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 c;if(Array.isArray(l)&&l.length){const a=l.map(s=>s),[o]=a,{type:r}=o;let u;r===n.COMBINATOR?u=a.shift():u={name:" ",type:n.COMBINATOR};const d=[];for(;a.length;){const[s]=a,{type:f}=s;if(f===n.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(c=this._matchHasPseudoFunc(a,s,h),c)break}else c=!0}return!!c}_matchLogicalPseudoFunc(l,e,h={}){const{astName:c="",branches:a=[],selector:o="",twigBranches:r=[]}=l;let u;if(c==="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(c);h.forgive=d;const i=r.length;let t;for(let s=0;s0){let p=new Set([e]);for(let w=m-1;w>=0;w--){const k=f[w],_=[];h.dir=S;for(const A of p){const v=this._matchCombinator(k,A,h);v.size&&_.push(...v)}if(_.length)w===0?t=!0:p=new Set(_);else{t=!1;break}}}if(t)break}c==="not"?t||(u=e):t&&(u=e)}return u??null}_matchPseudoClassSelector(l,e,h={}){const{children:c,name:a}=l,{localName:o,parentNode:r}=e,{forgive:u,warn:d=this.#i}=h,i=new Set;if(n.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 _=p.shift();for(;_;)if(_.type===n.COMBINATOR?(w.push({combo:_,leaves:[...k]}),k.clear()):_&&k.add(_),p.length)_=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(c))if(/^nth-(?:last-)?(?:child|of-type)$/.test(a)){const[t]=c;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"state":{if((0,N.isCustomElement)(e)){const[{value:t}]=c;t&&e[t]&&i.add(e)}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(o)&&e.hasAttribute("href")&&i.add(e);break}case"local-link":{if(n.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.#b??{};(s==="mouseover"||s==="pointerover")&&e.contains(t)&&i.add(e);break}case"active":{const{buttons:t,target:s,type:f}=this.#b??{};(f==="mousedown"||f==="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 f=this.#s.getElementById(s);for(;f;){if(f===e){i.add(e);break}f=f.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 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.#l.getComputedStyle(f);if(m=!(b==="none"||p==="hidden"),!m)break}if(f.parentNode&&f.parentNode.nodeType===n.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.#l.getComputedStyle(f);if(m=!(b==="none"||p==="hidden"),!m)break}if(f.parentNode&&f.parentNode.nodeType===n.ELEMENT_NODE)f=f.parentNode;else break}m&&i.add(e)}break}case"open":{n.REG_INTERACT.test(o)&&e.hasAttribute("open")&&i.add(e);break}case"closed":{n.REG_INTERACT.test(o)&&!e.hasAttribute("open")&&i.add(e);break}case"disabled":{if(n.REG_FORM_CTRL.test(o)||(0,N.isCustomElement)(e,{formAssociated:!0})){if(e.disabled||e.hasAttribute("disabled"))i.add(e);else if(e.localName==="option")r.localName==="optgroup"&&(r.disabled||r.hasAttribute("disabled"))&&i.add(e);else if(e.localName!=="optgroup"){let t,s=r;for(;s;)if(s.localName==="fieldset"&&(s.disabled||s.hasAttribute("disabled"))){const f=this.#r;let m=(0,N.traverseNode)(s,f);for(m=f.firstChild();m&&m.localName!=="legend";)m=f.nextSibling();m&&m.contains(e)||(t=!0);break}else{if(s.localName==="form")break;if(s.parentNode?.nodeType===n.ELEMENT_NODE){if(s.parentNode.localName==="form")break;s=s.parentNode}else break}t&&i.add(e)}}break}case"enabled":{if((n.REG_FORM_CTRL.test(o)||(0,N.isCustomElement)(e,{formAssociated:!0}))&&!(e.disabled&&e.hasAttribute("disabled"))){if(e.localName==="option")(r.localName!=="optgroup"||!(r.disabled||r.hasAttribute("disabled")))&&i.add(e);else if(e.localName!=="optgroup"){let t,s=r;for(;s;)if(s.localName==="fieldset"&&(s.disabled||s.hasAttribute("disabled"))){const f=this.#r;let m=(0,N.traverseNode)(s,f);for(m=f.firstChild();m&&m.localName!=="legend";)m=f.nextSibling();m&&m.contains(e)||(t=!0);break}else{if(s.localName==="form")break;if(s.parentNode?.nodeType===n.ELEMENT_NODE){if(s.parentNode.localName==="form")break;s=s.parentNode}else break}t||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||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,N.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||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,N.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")?n.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")&&n.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=0?e.maxLength>=e.value.length&&i.add(e):i.add(e));else if(o==="fieldset"){const t=this.#r;let s=(0,N.traverseNode)(e,t);s=t.firstChild();let f;if(!s)f=!0;else for(;s&&e.contains(s)&&!(n.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(n.REG_FORM_VALID.test(o))e.checkValidity()?e.maxLength>=0&&e.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")&&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":{o==="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(o))t=e;else if(o==="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(o))t=e;else if(o==="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.#n.createTreeWalker(e,n.SHOW_ALL);let s=t.firstChild(),f;for(;s&&(f=s.nodeType!==n.ELEMENT_NODE&&s.nodeType!==n.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":{e.hasAttribute("is")||o.includes("-")?(0,N.isCustomElement)(e)&&i.add(e):(e instanceof this.#l.HTMLElement||e instanceof this.#l.SVGElement)&&i.add(e);break}case"popover-open":{if(e.popover){const{display:t}=this.#l.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:h,name:c}=l;let a;if(Array.isArray(h)){const{branches:o}=(0,y.walkAST)(h[0]),[r]=o,[...u]=r,{host:d}=e;if(c==="host"){let i;for(const t of u){const{type:s}=t;if(s===n.COMBINATOR){const m=`Invalid selector ${(0,y.generateCSS)(l)}`;throw new DOMException(m,n.SYNTAX_ERR)}if(i=this._matchSelector(t,d).has(d),!i)break}i&&(a=e)}else if(c==="host-context"){let i=d,t;for(;i;){for(const s of u){const{type:f}=s;if(f===n.COMBINATOR){const b=`Invalid selector ${(0,y.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(c==="host")a=e;else{const o=`Invalid selector :${c}`;throw new DOMException(o,n.SYNTAX_ERR)}return a??null}_matchSelector(l,e,h){const{type:c}=l,a=new Set;if(l.name===n.EMPTY)return a;const o=(0,y.unescapeSelector)(l.name);if(typeof o=="string"&&o!==l.name&&(l.name=o),e.nodeType===n.ELEMENT_NODE)switch(c){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(o,h);break}case n.SELECTOR_ID:{e.id===o&&a.add(e);break}case n.SELECTOR_CLASS:{e.classList.contains(o)&&a.add(e);break}case n.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.#d&&c===n.SELECTOR_PSEUDO_CLASS&&e.nodeType===n.DOCUMENT_FRAGMENT_NODE){if(o!=="has"&&n.REG_LOGICAL_PSEUDO.test(o))return this._matchPseudoClassSelector(l,e,h);if(n.REG_SHADOW_HOST.test(o)){const r=this._matchShadowHostPseudoClass(l,e,h);r&&a.add(r)}}return a}_matchLeaves(l,e,h){const{attributes:c,localName:a,nodeType:o}=e;let r=this.#N.get(l),u;if(r&&r.has(e)){const{attr:d,matched:i}=r.get(e);c?.length===d&&(u=i)}if(typeof u!="boolean"){let d;o===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,h).has(e),!u)break}d&&(r||(r=new WeakMap),r.set(e,{attr:c?.length,matched:u}),this.#N.set(l,r))}return!!u}_matchHTMLCollection(l,e={}){const{compound:h,filterLeaves:c}=e,a=new Set,o=l.length;if(o)if(h)for(let r=0;r0,{type:r}=c,u=(0,y.unescapeSelector)(c.name);typeof u=="string"&&u!==c.name&&(c.name=u);let d=new Set,i=!1;if(this.#d)i=!0;else switch(r){case n.SELECTOR_PSEUDO_ELEMENT:{O.matcher.matchPseudoElementSelector(u,h);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)&&(o?this._matchLeaves(a,t,h)&&d.add(t):d.add(t))}break}case n.SELECTOR_CLASS:{const t=e.getElementsByClassName(u);d=this._matchHTMLCollection(t,{compound:o,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:o,filterLeaves:a})}else i=!0;break}default:i=!0}return{nodes:d,pending:i}}_matchCombinator(l,e,h={}){const{combo:c,leaves:a}=l,{name:o}=c,{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,N.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,N.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,N.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,N.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,c=this.#m;let a=(0,N.traverseNode)(h,c),o;if(a)for((a.nodeType!==n.ELEMENT_NODE||a===h&&a!==this.#t)&&(a=c.nextNode());a;){if(this._matchLeaves(l,a,{warn:this.#i})){o=a;break}a=c.nextNode()}return o??null}_matchSelf(l){const e=[],h=this._matchLeaves(l,this.#e,{warn:this.#i});let c=!1;return h&&(e.push(this.#e),c=!0),[e,c]}_findLineal(l,e={}){const{complex:h}=e,c=[];let a=this._matchLeaves(l,this.#e,{warn:this.#i}),o=!1;if(a&&(c.push(this.#e),o=!0),!a||h){let r=this.#e.parentNode;for(;r&&(a=this._matchLeaves(l,r,{warn:this.#i}),a&&(c.push(r),o=!0),r.parentNode);)r=r.parentNode}return[c,o]}_findFirst(l){const e=[],h=this._findNode(l,{node:this.#e});let c=!1;return h&&(e.push(h),c=!0),[e,c]}_findFromHTMLCollection(l,e={}){const{complex:h,compound:c,filterLeaves:a,targetType:o}=e;let r=[],u=!1,d=!1;const i=l.length;if(i)if(this.#e.nodeType===n.ELEMENT_NODE)for(let t=0;t0,{name:u,type:d}=a;let i=[],t=!1,s=!1,f=!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(c);else if(e===C)[i,s]=this._findLineal(c,{complex:h});else if(e===E&&this.#t.nodeType!==n.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(c):f=!0;break}case n.SELECTOR_CLASS:{if(e===R)[i,s]=this._matchSelf(c);else if(e===C)[i,s]=this._findLineal(c,{complex:h});else if(this.#t.nodeType===n.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(c):f=!0;break}case n.SELECTOR_TYPE:{if(e===R)[i,s]=this._matchSelf(c);else if(e===C)[i,s]=this._findLineal(c,{complex:h});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:h,compound:r,filterLeaves:o,targetType:e}))}else e===E?[i,s]=this._findFirst(c):f=!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(c):e===C?[i,s]=this._findLineal(c,{complex:h}):e===E?[i,s]=this._findFirst(c):f=!0}return{collected:t,compound:r,filtered:s,nodes:i,pending:f}}_collectNodes(l){const e=this.#a.values();if(l===L||l===E){const h=new Set;let c=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,_=a[o-1],{leaves:[{name:A,type:v}]}=_;if(v===n.SELECTOR_PSEUDO_ELEMENT||v===n.SELECTOR_ID)d=S,i=_;else if(k===n.SELECTOR_PSEUDO_ELEMENT||k===n.SELECTOR_ID)d=x,i=u;else if(l===L)if(w==="*"&&k===n.SELECTOR_TYPE)d=S,i=_;else if(A==="*"&&v===n.SELECTOR_TYPE)d=x,i=u;else if(o===2){const{name:T}=p;/^[+~]$/.test(T)?(d=S,i=_):(d=x,i=u)}else d=x,i=u;else if(A==="*"&&v===n.SELECTOR_TYPE)d=x,i=u;else if(w==="*"&&k===n.SELECTOR_TYPE)d=S,i=_;else{let T;for(const{combo:D,leaves:[U]}of a){const{name:$,type:F}=U;if(F===n.SELECTOR_PSEUDO_CLASS&&$==="dir"){T=!1;break}if(!T&&D){const{name:G}=D;/^[+~]$/.test(G)&&(T=!0)}}T?(d=x,i=u):(d=S,i=_)}}else d=S,i=u;const{collected:t,compound:s,filtered:f,nodes:m,pending:b}=this._findEntryNodes(i,l,r);m.length?(this.#a[c].find=!0,this.#f[c]=m):b&&h.add(new Map([["index",c],["twig",i]])),this.#a[c].collected=t,this.#a[c].dir=d,this.#a[c].filtered=f||!s,c++}if(h.size){let a,o;this.#e!==this.#t&&this.#e.nodeType===n.ELEMENT_NODE?(a=this.#e,o=this.#m):(a=this.#t,o=this.#r);let r=(0,N.traverseNode)(a,o);for(;r;){let u=!1;if(this.#e.nodeType===n.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.#a[s].filtered=!0,this.#a[s].find=!0,this.#f[s].push(r)}}r!==o.currentNode&&(r=(0,N.traverseNode)(r,o)),r=o.nextNode()}}}else{let h=0;for(const{branch:c}of e){const a=c[c.length-1],o=c.length>1,{compound:r,filtered:u,nodes:d}=this._findEntryNodes(a,l,o);d.length&&(this.#a[h].find=!0,this.#f[h]=d),this.#a[h].dir=S,this.#a[h].filtered=u||!r,h++}}return[this.#a,this.#f]}_getCombinedNodes(l,e,h){const c=[];for(const a of e){const o=this._matchCombinator(l,a,{dir:h,warn:this.#i});o.size&&c.push(...o)}return c.length?new Set(c):new Set}_matchNodeNext(l,e,h){const{combo:c,index:a}=h,{combo:o,leaves:r}=l[a],u={combo:c,leaves:r},d=this._getCombinedNodes(u,e,x);let i;if(d.size)if(a===l.length-1){const[t]=(0,N.sortNodes)(d);i=t}else i=this._matchNodeNext(l,d,{combo:o,index:a+1});return i??null}_matchNodePrev(l,e,h){const{index:c}=h,a=l[c],o=new Set([e]),r=this._getCombinedNodes(a,o,S);let u;if(r.size){if(c===0)u=e;else for(const d of r)if(this._matchNodePrev(l,d,{index:c-1}))return e}return u??null}_find(l){(l===L||l===E)&&this._prepareQuerySelectorWalker();const[[...e],h]=this._collectNodes(l),c=e.length;let a=new Set;for(let o=0;o=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.#u=!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 _=this._findNode(w,{node:k});for(;_;){if(p=this._matchNodeNext(r,new Set([_]),{combo:b,index:1}),p){a.add(p);break}_=this._findNode(w,{node:_})}}}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 c;try{if(e?.nodeType!==n.ELEMENT_NODE){const r=`Unexpected node ${e?.nodeName}`;throw new TypeError(r)}const a=e.ownerDocument;if(a===this.#n&&a.contentType==="text/html"){const r={complex:n.REG_COMPLEX.test(l),descendant:!0};if((0,y.filterSelector)(l,r))return this.#h.match(l,e)}this._setup(l,e,h),c=this._find(R).size}catch(a){this._onError(a)}return!!c}closest(l,e,h){let c;try{if(e?.nodeType!==n.ELEMENT_NODE){const r=`Unexpected node ${e?.nodeName}`;throw new TypeError(r)}const a=e.ownerDocument;if(a===this.#n&&a.contentType==="text/html"){const r={complex:n.REG_COMPLEX.test(l),descendant:!0};if((0,y.filterSelector)(l,r))return this.#h.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)){c=r;break}r=r.parentNode}}}catch(a){this._onError(a)}return c??null}querySelector(l,e,h){let c;try{(0,N.verifyNode)(e);let a;if(e.nodeType===n.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#n&&a.contentType==="text/html"&&(0,y.filterSelector)(l,{complex:!1,descendant:!1}))return this.#h.first(l,e);this._setup(l,e,h);const o=this._find(E);o.delete(this.#e),o.size&&([c]=(0,N.sortNodes)(o))}catch(a){this._onError(a)}return c??null}querySelectorAll(l,e,h){let c;try{(0,N.verifyNode)(e);let a;if(e.nodeType===n.DOCUMENT_NODE?a=e:a=e.ownerDocument,a===this.#n&&a.contentType==="text/html"&&(0,y.filterSelector)(l,{complex:!1,descendant:!0,qsa:!0}))return this.#h.select(l,e);this._setup(l,e,h);const o=this._find(L);o.delete(this.#e),o.size&&(this.#u?c=(0,N.sortNodes)(o):c=[...o])}catch(a){this._onError(a)}return c??[]}}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 d4114e0f..21b34488 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 nwsapi from '@asamuzakjp/nwsapi';\nimport {\n isContentEditable, isCustomElement, isInShadowTree, resolveContent,\n sortNodes, traverseNode, 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, REG_FORM, REG_FORM_CTRL,\n REG_FORM_GROUP, REG_FORM_VALID, REG_INTERACT, REG_LOGICAL_PSEUDO,\n REG_SHADOW_HOST, REG_TYPE_CHECK, REG_TYPE_DATE, REG_TYPE_RANGE,\n REG_TYPE_RESET, REG_TYPE_SUBMIT, REG_TYPE_TEXT, SELECTOR_CLASS, SELECTOR_ID,\n SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE, SHOW_ALL,\n 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\n * #nodes: Array\n * Ast: {\n * branch: Array,\n * collected: boolean,\n * dir: string | null,\n * filtered: boolean,\n * find: boolean\n * }\n * Branch: Array\n * Twig: {\n * combo: Leaf | null,\n * leaves: Array\n * }\n * Leaf: {\n * children: Array | null,\n * loc: null,\n * type: string\n * }\n * Nodes: Array\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.#nwsapi = this._initNwsapi(window, document);\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 const nw = nwsapi({\n DOMException: this.#window.DOMException,\n document: this.#document\n });\n nw.configure({\n LOGERRORS: false\n });\n return nw;\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 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 hasNthChildOfSelector,\n hasPseudoFunc\n }\n } = walkAST(cssAst);\n let cacheable;\n if (hasHasPseudoFunc || hasHyphenSepAttr ||\n (hasNthChildOfSelector && hasPseudoFunc)) {\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.} - 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 const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const { display, visibility } =\n this.#window.getComputedStyle(refNode);\n if (display !== 'none' && visibility !== 'hidden') {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (selectorNodes.has(refNode)) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n i++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n } else if (!selector) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n }\n }\n }\n // :nth-child()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n if (refNode && nth >= 0 && nth < l) {\n if (selectorNodes.size) {\n if (selectorNodes.has(refNode)) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(refNode);\n }\n nth += a;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n } else {\n break;\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.} - 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.} - 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.} 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.} - 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 'state': {\n if (isCustomElement(node)) {\n const [{ value: stateValue }] = astChildren;\n if (stateValue && node[stateValue]) {\n matched.add(node);\n }\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) ||\n isCustomElement(node, { formAssociated: true })) {\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 isCustomElement(node, { formAssociated: true })) &&\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 if (node.hasAttribute('is') || localName.includes('-')) {\n if (isCustomElement(node)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case 'popover-open': {\n if (node.popover) {\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.} - 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.} 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.} - 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.} 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.} - 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.} leaves - AST leaves\n * @param {object} [opt] - options\n * @param {object} [opt.node] - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, opt) {\n const { node } = opt;\n const walker = this.#qswalker;\n let refNode = traverseNode(node, walker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = walker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = walker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n }\n return matchedNode ?? null;\n }\n\n /**\n * match self\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _matchSelf(leaves) {\n const nodes = [];\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find lineal\n * @private\n * @param {Array} leaves - AST leaves\n * @param {object} opt - options\n * @returns {Array} - [nodes, filtered]\n */\n _findLineal(leaves, opt = {}) {\n const { complex } = opt;\n const nodes = [];\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n if (!bool || complex) {\n let refNode = this.#node.parentNode;\n while (refNode) {\n bool = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(refNode);\n filtered = true;\n }\n if (refNode.parentNode) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n }\n return [nodes, filtered];\n }\n\n /**\n * find first\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFirst(leaves) {\n const nodes = [];\n const node = this._findNode(leaves, {\n node: this.#node\n });\n let filtered = false;\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find from HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @param {boolean} [opt.compound] - compound selector\n * @param {Array} [opt.filterLeaves] - filter leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFromHTMLCollection(items, opt = {}) {\n const { complex, compound, filterLeaves, targetType } = opt;\n let nodes = [];\n let filtered = false;\n let collected = false;\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node !== this.#node &&\n (this.#node.contains(node) || node.contains(this.#node))) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n } else {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n }\n } else if (complex) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n } else if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n }\n return [nodes, filtered, collected];\n }\n\n /**\n * find entry nodes\n * @private\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @param {boolean} complex - complex selector\n * @returns {object} - collection of nodes etc.\n */\n _findEntryNodes(twig, targetType, complex) {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { name: leafName, type: leafType } = leaf;\n let nodes = [];\n let collected = false;\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case 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.>} - #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.} - 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.} 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.} - 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.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.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: false,\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.} - 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: false,\n descendant: true,\n qsa: 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_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", "nw", "nwsapi", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "hasHasPseudoFunc", "hasHyphenSepAttr", "hasNthChildOfSelector", "hasPseudoFunc", "cacheable", "descendant", "items", "branch", "leaves", "nextItem", "msg", "itemName", "walker", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "refNode", "selectorNodes", "display", "visibility", "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", "stateValue", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "current", "focus", "active", "parent", "placeholder", "targetNode", "nodeName", "checked", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "host", "astType", "attributes", "nodeType", "result", "attr", "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"] + "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport nwsapi from '@asamuzakjp/nwsapi';\nimport {\n isContentEditable, isCustomElement, isInShadowTree, resolveContent,\n sortNodes, traverseNode, 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, REG_FORM, REG_FORM_CTRL,\n REG_FORM_VALID, REG_INTERACT, REG_LOGICAL_PSEUDO, REG_SHADOW_HOST,\n REG_TYPE_CHECK, REG_TYPE_DATE, REG_TYPE_RANGE, REG_TYPE_RESET,\n REG_TYPE_SUBMIT, REG_TYPE_TEXT, SELECTOR_CLASS, SELECTOR_ID,\n SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE, SHOW_ALL,\n 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\n * #nodes: Array\n * Ast: {\n * branch: Array,\n * collected: boolean,\n * dir: string | null,\n * filtered: boolean,\n * find: boolean\n * }\n * Branch: Array\n * Twig: {\n * combo: Leaf | null,\n * leaves: Array\n * }\n * Leaf: {\n * children: Array | null,\n * loc: null,\n * type: string\n * }\n * Nodes: Array\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.#nwsapi = this._initNwsapi(window, document);\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 const nw = nwsapi({\n DOMException: this.#window.DOMException,\n document: this.#document\n });\n nw.configure({\n LOGERRORS: false\n });\n return nw;\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 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 hasDefinedPseudo,\n hasHasPseudoFunc,\n hasNthChildOfSelector,\n hasPseudoFunc\n }\n } = walkAST(cssAst);\n let cacheable;\n if (hasDefinedPseudo || hasHasPseudoFunc ||\n (hasNthChildOfSelector && hasPseudoFunc)) {\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.} - 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 const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const { display, visibility } =\n this.#window.getComputedStyle(refNode);\n if (display !== 'none' && visibility !== 'hidden') {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (selectorNodes.has(refNode)) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n i++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n } else if (!selector) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n }\n }\n }\n // :nth-child()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n if (refNode && nth >= 0 && nth < l) {\n if (selectorNodes.size) {\n if (selectorNodes.has(refNode)) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(refNode);\n }\n nth += a;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n } else {\n break;\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.} - 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.} - 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.} 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.} - 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 'state': {\n if (isCustomElement(node)) {\n const [{ value: stateValue }] = astChildren;\n if (stateValue && node[stateValue]) {\n matched.add(node);\n }\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) ||\n isCustomElement(node, { formAssociated: true })) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else if (node.localName === 'option') {\n if (parentNode.localName === 'optgroup' &&\n (parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n matched.add(node);\n }\n } else if (node.localName !== 'optgroup') {\n let bool;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n const walker = this.#walker;\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n bool = true;\n }\n } else {\n bool = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((REG_FORM_CTRL.test(localName) ||\n isCustomElement(node, { formAssociated: true })) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n if (node.localName === 'option') {\n if (parentNode.localName !== 'optgroup' ||\n !(parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n matched.add(node);\n }\n } else if (node.localName !== 'optgroup') {\n let bool;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n const walker = this.#walker;\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n bool = true;\n }\n } else {\n bool = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n if (!bool) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case '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.hasAttribute('checked')) {\n matched.add(node);\n // option\n } else if (localName === 'option' && node.hasAttribute('selected')) {\n matched.add(node);\n }\n break;\n }\n case 'valid': {\n if (REG_FORM_VALID.test(localName)) {\n if (node.checkValidity()) {\n if (node.maxLength >= 0) {\n if (node.maxLength >= node.value.length) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let bool;\n if (!refNode) {\n bool = true;\n } else {\n while (refNode && node.contains(refNode)) {\n if (REG_FORM_VALID.test(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n bool = refNode.maxLength >= refNode.value.length;\n } else {\n bool = true;\n }\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (REG_FORM_VALID.test(localName)) {\n if (node.checkValidity()) {\n if (node.maxLength >= 0 && node.maxLength < node.value.length) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let bool;\n if (!refNode) {\n bool = true;\n } else {\n while (refNode && node.contains(refNode)) {\n if (REG_FORM_VALID.test(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n bool = refNode.maxLength >= refNode.value.length;\n } else {\n bool = true;\n }\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n if (!bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n REG_TYPE_RANGE.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n REG_TYPE_RANGE.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || REG_TYPE_CHECK.test(inputType) ||\n REG_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 if (node.hasAttribute('is') || localName.includes('-')) {\n if (isCustomElement(node)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case 'popover-open': {\n if (node.popover) {\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.} - 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.} 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.} - 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.} 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.} - 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.} leaves - AST leaves\n * @param {object} [opt] - options\n * @param {object} [opt.node] - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, opt) {\n const { node } = opt;\n const walker = this.#qswalker;\n let refNode = traverseNode(node, walker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = walker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = walker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n }\n return matchedNode ?? null;\n }\n\n /**\n * match self\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _matchSelf(leaves) {\n const nodes = [];\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find lineal\n * @private\n * @param {Array} leaves - AST leaves\n * @param {object} opt - options\n * @returns {Array} - [nodes, filtered]\n */\n _findLineal(leaves, opt = {}) {\n const { complex } = opt;\n const nodes = [];\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n if (!bool || complex) {\n let refNode = this.#node.parentNode;\n while (refNode) {\n bool = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(refNode);\n filtered = true;\n }\n if (refNode.parentNode) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n }\n return [nodes, filtered];\n }\n\n /**\n * find first\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFirst(leaves) {\n const nodes = [];\n const node = this._findNode(leaves, {\n node: this.#node\n });\n let filtered = false;\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find from HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @param {boolean} [opt.compound] - compound selector\n * @param {Array} [opt.filterLeaves] - filter leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFromHTMLCollection(items, opt = {}) {\n const { complex, compound, filterLeaves, targetType } = opt;\n let nodes = [];\n let filtered = false;\n let collected = false;\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node !== this.#node &&\n (this.#node.contains(node) || node.contains(this.#node))) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n } else {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n }\n } else if (complex) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n } else if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n }\n return [nodes, filtered, collected];\n }\n\n /**\n * find entry nodes\n * @private\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @param {boolean} complex - complex selector\n * @returns {object} - collection of nodes etc.\n */\n _findEntryNodes(twig, targetType, complex) {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { name: leafName, type: leafType } = leaf;\n let nodes = [];\n let collected = false;\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case 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.>} - #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.} - 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.} 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.} - 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.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.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: false,\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.} - 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: false,\n descendant: true,\n qsa: 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_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", "nw", "nwsapi", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "hasDefinedPseudo", "hasHasPseudoFunc", "hasNthChildOfSelector", "hasPseudoFunc", "cacheable", "descendant", "items", "branch", "leaves", "nextItem", "msg", "itemName", "walker", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "refNode", "selectorNodes", "display", "visibility", "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", "stateValue", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "current", "focus", "active", "parent", "placeholder", "targetNode", "nodeName", "checked", "form", "inputType", "node1", "node2", "host", "astType", "attributes", "nodeType", "result", "attr", "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 91b1ee8b..4fa68028 100644 --- a/dist/cjs/js/parser.js +++ b/dist/cjs/js/parser.js @@ -1,3 +1,3 @@ -var d=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var I=(s,t)=>{for(var r in t)d(s,r,{get:t[r],enumerable:!0})},L=(s,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of x(t))!S.call(s,n)&&n!==r&&d(s,n,{get:()=>t[n],enumerable:!(i=_(t,n))||i.enumerable});return s};var T=s=>L(d({},"__esModule",{value:!0}),s);var A={};I(A,{filterSelector:()=>C,generateCSS:()=>O.generate,parseAstName:()=>w,parseSelector:()=>E,preprocess:()=>g,sortAST:()=>m,unescapeSelector:()=>y,walkAST:()=>$});module.exports=T(A);var h=require("css-tree"),e=require("./constant.js"),O=require("css-tree");const y=(s="")=>{if(typeof s=="string"&&s.indexOf("\\",0)>=0){const t=s.split("\\"),r=t.length;for(let i=1;i=o&&u<=p?l=e.U_FFFD:l=String.fromCodePoint(u)}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 f=n.codePointAt(0);if(f===e.BIT_HYPHEN){if(/^\d$/.test(n.substring(1,2)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR)}else if(f>e.BIT_FFFF){const a=`\\${f.toString(e.HEX)} `;n.length===e.DUO?n=a:n=`${a}${n.substring(e.DUO)}`}t=`${i}${n}`,r++}t=t.replace(/\f|\r\n?/g,` -`).replace(/[\0\uD800-\uDFFF]|\\$/g,e.U_FFFD)}else if(t==null)t=Object.prototype.toString.call(t).slice(e.TYPE_FROM,e.TYPE_TO).toLowerCase();else if(Array.isArray(t))t=t.join(",");else if(Object.prototype.hasOwnProperty.call(t,"toString"))t=t.toString();else throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);return t},E=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,h.parse)(s,{context:"selectorList",parseCustomProperty:!0});t=(0,h.toPlainObject)(r)}catch(r){const{message:i}=r;if(i==="Identifier is expected"&&e.REG_LANG_QUOTED.test(s)){const[,n,f]=e.REG_LANG_QUOTED.exec(s),a=f.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,"");let l=n.replace(f,a);l===":lang()"&&(l=`:lang(${e.EMPTY})`),t=E(s.replace(n,l))}else if(/^(?:Identifier|Selector) is expected$/.test(i)&&e.REG_LOGICAL_EMPTY.test(s)){const[,n,f]=e.REG_LOGICAL_EMPTY.exec(s);t=E(s.replace(n,`:${f}(${e.EMPTY})`))}else if(/^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test(i)&&!s.endsWith("]")){const n=s.lastIndexOf("["),f=s.substring(n);f.includes('"')?f.match(/"/g).length%2?t=E(`${s}"]`):t=E(`${s}]`):t=E(`${s}]`)}else if(i==='")" is expected'&&!s.endsWith(")"))t=E(`${s})`);else throw new DOMException(i,e.SYNTAX_ERR)}return t},$=(s={})=>{const t=new Set,r=new Map;return(0,h.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):n.type===e.NTH&&n.selector&&r.set("hasNthChildOfSelector",!0)}}),r.get("hasPseudoFunc")&&(0,h.findAll)(s,(n,f,a)=>{if(a){if(n.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(n.name)){const l=a.filter(c=>{const{name:o,type:p}=c;return p===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(o)});for(const{children:c}of l)for(const{children:o}of c)for(const{children:p}of o)t.has(p)&&t.delete(p)}else if(n.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(n.name)){const l=a.filter(c=>{const{name:o,type:p}=c;return p===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(o)});for(const{children:c}of l)for(const{children:o}of c)t.has(o)&&t.delete(o)}else if(n.type===e.NTH&&n.selector){const l=a.filter(c=>{const{selector:o,type:p}=c;return p===e.NTH&&o});for(const{selector:c}of l){const{children:o}=c;for(const{children:p}of o)t.has(p)&&t.delete(p)}}}}),{branches:[...t],info:Object.fromEntries(r)}},m=s=>{const t=[...s];if(t.length>1){const r=new Map([[e.SELECTOR_PSEUDO_ELEMENT,e.BIT_01],[e.SELECTOR_ID,e.BIT_02],[e.SELECTOR_CLASS,e.BIT_04],[e.SELECTOR_TYPE,e.BIT_08],[e.SELECTOR_ATTR,e.BIT_16],[e.SELECTOR_PSEUDO_CLASS,e.BIT_32]]);t.sort((i,n)=>{const{type:f}=i,{type:a}=n,l=r.get(f),c=r.get(a);let o;return l===c?o=0:l>c?o=1:o=-1,o})}return t},w=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,qsa:f}=t;i&&n||f?r=e.REG_LOGICAL_COMPLEX: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}); +var h=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var I=(s,t)=>{for(var r in t)h(s,r,{get:t[r],enumerable:!0})},L=(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=>L(h({},"__esModule",{value:!0}),s);var D={};I(D,{filterSelector:()=>C,generateCSS:()=>O.generate,parseAstName:()=>w,parseSelector:()=>u,preprocess:()=>g,sortAST:()=>y,unescapeSelector:()=>$,walkAST:()=>m});module.exports=T(D);var d=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=o&&E<=p?l=e.U_FFFD:l=String.fromCodePoint(E)}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 f=n.codePointAt(0);if(f===e.BIT_HYPHEN){if(/^\d$/.test(n.substring(1,2)))throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR)}else if(f>e.BIT_FFFF){const a=`\\${f.toString(e.HEX)} `;n.length===e.DUO?n=a:n=`${a}${n.substring(e.DUO)}`}t=`${i}${n}`,r++}t=t.replace(/\f|\r\n?/g,` +`).replace(/[\0\uD800-\uDFFF]|\\$/g,e.U_FFFD)}else if(t==null)t=Object.prototype.toString.call(t).slice(e.TYPE_FROM,e.TYPE_TO).toLowerCase();else if(Array.isArray(t))t=t.join(",");else if(Object.prototype.hasOwnProperty.call(t,"toString"))t=t.toString();else throw new DOMException(`Invalid selector ${t}`,e.SYNTAX_ERR);return t},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,d.parse)(s,{context:"selectorList",parseCustomProperty:!0});t=(0,d.toPlainObject)(r)}catch(r){const{message:i}=r;if(i==="Identifier is expected"&&e.REG_LANG_QUOTED.test(s)){const[,n,f]=e.REG_LANG_QUOTED.exec(s),a=f.replaceAll("*","\\*").replace(/^"/,"").replace(/"$/,"");let l=n.replace(f,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,f]=e.REG_LOGICAL_EMPTY.exec(s);t=u(s.replace(n,`:${f}(${e.EMPTY})`))}else if(/^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test(i)&&!s.endsWith("]")){const n=s.lastIndexOf("["),f=s.substring(n);f.includes('"')?f.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,d.walk)(s,{enter:n=>{n.type===e.SELECTOR?t.add(n.children):n.type===e.SELECTOR_PSEUDO_CLASS?e.REG_LOGICAL_PSEUDO.test(n.name)?(r.set("hasPseudoFunc",!0),n.name==="has"&&r.set("hasHasPseudoFunc",!0)):n.name==="defined"&&r.set("hasDefinedPseudo",!0):n.type===e.SELECTOR_PSEUDO_ELEMENT?e.REG_SHADOW_PSEUDO.test(n.name)&&r.set("hasPseudoFunc",!0):n.type===e.NTH&&n.selector&&r.set("hasNthChildOfSelector",!0)}}),r.get("hasPseudoFunc")&&(0,d.findAll)(s,(n,f,a)=>{if(a){if(n.type===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(n.name)){const l=a.filter(c=>{const{name:o,type:p}=c;return p===e.SELECTOR_PSEUDO_CLASS&&e.REG_LOGICAL_PSEUDO.test(o)});for(const{children:c}of l)for(const{children:o}of c)for(const{children:p}of o)t.has(p)&&t.delete(p)}else if(n.type===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(n.name)){const l=a.filter(c=>{const{name:o,type:p}=c;return p===e.SELECTOR_PSEUDO_ELEMENT&&e.REG_SHADOW_PSEUDO.test(o)});for(const{children:c}of l)for(const{children:o}of c)t.has(o)&&t.delete(o)}else if(n.type===e.NTH&&n.selector){const l=a.filter(c=>{const{selector:o,type:p}=c;return p===e.NTH&&o});for(const{selector:c}of l){const{children:o}=c;for(const{children:p}of o)t.has(p)&&t.delete(p)}}}}),{branches:[...t],info:Object.fromEntries(r)}},y=s=>{const t=[...s];if(t.length>1){const r=new Map([[e.SELECTOR_PSEUDO_ELEMENT,e.BIT_01],[e.SELECTOR_ID,e.BIT_02],[e.SELECTOR_CLASS,e.BIT_04],[e.SELECTOR_TYPE,e.BIT_08],[e.SELECTOR_ATTR,e.BIT_16],[e.SELECTOR_PSEUDO_CLASS,e.BIT_32]]);t.sort((i,n)=>{const{type:f}=i,{type:a}=n,l=r.get(f),c=r.get(a);let o;return l===c?o=0:l>c?o=1:o=-1,o})}return t},w=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,qsa:f}=t;i&&n||f?r=e.REG_LOGICAL_COMPLEX: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 287200f4..5d96a0ac 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, NTH, REG_CHILD_INDEXED, REG_HEX, REG_INVALID_SELECTOR,\n REG_LANG_QUOTED, REG_LOGICAL_COMPLEX, REG_LOGICAL_COMPOUND,\n REG_LOGICAL_EMPTY, REG_LOGICAL_KEY, REG_LOGICAL_PSEUDO, REG_SHADOW_PSEUDO,\n SELECTOR, SELECTOR_ATTR, SELECTOR_CLASS, SELECTOR_ID, SELECTOR_PSEUDO_CLASS,\n SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE, SYNTAX_ERR, TYPE_FROM, TYPE_TO, U_FFFD\n} from './constant.js';\n\n/**\n * unescape selector\n * @param {string} selector - CSS selector\n * @returns {?string} - unescaped selector\n */\nexport const unescapeSelector = (selector = '') => {\n if (typeof selector === 'string' && selector.indexOf('\\\\', 0) >= 0) {\n const arr = selector.split('\\\\');\n const l = arr.length;\n for (let i = 1; i < l; i++) {\n let item = arr[i];\n if (item === '' && i === l - 1) {\n item = U_FFFD;\n } else {\n const hexExists = 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.} - 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 } else if (node.type === NTH && node.selector) {\n info.set('hasNthChildOfSelector', 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 } else if (node.type === NTH && node.selector) {\n const itemList = list.filter(i => {\n const { selector, type } = i;\n const res = type === NTH && selector;\n return res;\n });\n for (const { selector } of itemList) {\n const { children } = selector;\n // Selector\n for (const { children: grandChildren } of children) {\n if (branches.has(grandChildren)) {\n branches.delete(grandChildren);\n }\n }\n }\n }\n }\n });\n }\n return {\n branches: [...branches],\n info: Object.fromEntries(info)\n };\n};\n\n/**\n * sort AST\n * @param {Array.} asts - collection of AST\n * @returns {Array.} - 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\n // filter pseudo-element selectors\n // filter attribute selectors with case flag, e.g. [attr i]\n // filter 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, qsa } = opt;\n if ((complex && descendant) || qsa) {\n reg = REG_LOGICAL_COMPLEX;\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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", + "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, NTH, REG_CHILD_INDEXED, REG_HEX, REG_INVALID_SELECTOR,\n REG_LANG_QUOTED, REG_LOGICAL_COMPLEX, REG_LOGICAL_COMPOUND,\n REG_LOGICAL_EMPTY, REG_LOGICAL_KEY, REG_LOGICAL_PSEUDO, REG_SHADOW_PSEUDO,\n SELECTOR, SELECTOR_ATTR, SELECTOR_CLASS, SELECTOR_ID, SELECTOR_PSEUDO_CLASS,\n SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE, SYNTAX_ERR, TYPE_FROM, TYPE_TO, U_FFFD\n} from './constant.js';\n\n/**\n * unescape selector\n * @param {string} selector - CSS selector\n * @returns {?string} - unescaped selector\n */\nexport const unescapeSelector = (selector = '') => {\n if (typeof selector === 'string' && selector.indexOf('\\\\', 0) >= 0) {\n const arr = selector.split('\\\\');\n const l = arr.length;\n for (let i = 1; i < l; i++) {\n let item = arr[i];\n if (item === '' && i === l - 1) {\n item = U_FFFD;\n } else {\n const hexExists = 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.} - 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 if (REG_LOGICAL_PSEUDO.test(node.name)) {\n info.set('hasPseudoFunc', true);\n if (node.name === 'has') {\n info.set('hasHasPseudoFunc', true);\n }\n } else if (node.name === 'defined') {\n info.set('hasDefinedPseudo', true);\n }\n } else if (node.type === SELECTOR_PSEUDO_ELEMENT) {\n if (REG_SHADOW_PSEUDO.test(node.name)) {\n info.set('hasPseudoFunc', true);\n }\n } else if (node.type === NTH && node.selector) {\n info.set('hasNthChildOfSelector', 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 } else if (node.type === NTH && node.selector) {\n const itemList = list.filter(i => {\n const { selector, type } = i;\n const res = type === NTH && selector;\n return res;\n });\n for (const { selector } of itemList) {\n const { children } = selector;\n // Selector\n for (const { children: grandChildren } of children) {\n if (branches.has(grandChildren)) {\n branches.delete(grandChildren);\n }\n }\n }\n }\n }\n });\n }\n return {\n branches: [...branches],\n info: Object.fromEntries(info)\n };\n};\n\n/**\n * sort AST\n * @param {Array.} asts - collection of AST\n * @returns {Array.} - 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\n // filter pseudo-element selectors\n // filter attribute selectors with case flag, e.g. [attr i]\n // filter 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, qsa } = opt;\n if ((complex && descendant) || qsa) {\n reg = REG_LOGICAL_COMPLEX;\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", "qsa"] } diff --git a/package.json b/package.json index 8e4cc71e..fc26bc7f 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.7.0", + "eslint-plugin-jsdoc": "^48.8.1", "eslint-plugin-regexp": "^2.6.0", "eslint-plugin-unicorn": "^54.0.0", "happy-dom": "^14.12.3", @@ -60,5 +60,5 @@ "tsc": "node scripts/index clean --dir=types -i && npx tsc", "update-wpt": "git submodule update --init --recursive --remote" }, - "version": "4.6.3" + "version": "4.6.4" } diff --git a/types/js/constant.d.ts b/types/js/constant.d.ts index 17279ae0..bb7f02fa 100644 --- a/types/js/constant.d.ts +++ b/types/js/constant.d.ts @@ -68,7 +68,6 @@ export const REG_COMPLEX: RegExp; export const REG_DIR: RegExp; export const REG_FORM: RegExp; export const REG_FORM_CTRL: RegExp; -export const REG_FORM_GROUP: RegExp; export const REG_FORM_VALID: RegExp; export const REG_HEX: RegExp; export const REG_INTERACT: RegExp;