diff --git a/dist/cjs/js/constant.js b/dist/cjs/js/constant.js index 01fc7aa5..2070327a 100644 --- a/dist/cjs/js/constant.js +++ b/dist/cjs/js/constant.js @@ -1,2 +1,2 @@ -var E=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var _=(o,t)=>{for(var r in t)E(o,r,{get:t[r],enumerable:!0})},T=(o,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of c(t))!n.call(o,e)&&e!==r&&E(o,e,{get:()=>t[e],enumerable:!(s=x(t,e))||s.enumerable});return o};var p=o=>T(E({},"__esModule",{value:!0}),o);var st={};_(st,{ALPHA_NUM:()=>O,AN_PLUS_B:()=>S,BIT_01:()=>Y,BIT_02:()=>a,BIT_04:()=>d,BIT_08:()=>i,BIT_16:()=>u,BIT_32:()=>h,BIT_FFFF:()=>$,BIT_HYPHEN:()=>X,COMBINATOR:()=>N,DOCUMENT_FRAGMENT_NODE:()=>j,DOCUMENT_NODE:()=>Z,DOCUMENT_POSITION_CONTAINED_BY:()=>v,DOCUMENT_POSITION_CONTAINS:()=>q,DOCUMENT_POSITION_PRECEDING:()=>k,DUO:()=>b,ELEMENT_NODE:()=>g,EMPTY:()=>R,HEX:()=>m,IDENTIFIER:()=>D,NOT_SUPPORTED_ERR:()=>I,NTH:()=>C,RAW:()=>L,REG_LOGICAL_PSEUDO:()=>ot,REG_SHADOW_HOST:()=>et,REG_SHADOW_MODE:()=>rt,REG_SHADOW_PSEUDO:()=>Et,SELECTOR:()=>A,SELECTOR_ATTR:()=>P,SELECTOR_CLASS:()=>F,SELECTOR_ID:()=>M,SELECTOR_LIST:()=>U,SELECTOR_PSEUDO_CLASS:()=>l,SELECTOR_PSEUDO_ELEMENT:()=>H,SELECTOR_TYPE:()=>B,SHOW_ALL:()=>z,SHOW_DOCUMENT:()=>J,SHOW_DOCUMENT_FRAGMENT:()=>Q,SHOW_ELEMENT:()=>V,STRING:()=>f,SYNTAX_ERR:()=>G,TEXT_NODE:()=>K,TYPE_FROM:()=>w,TYPE_TO:()=>y,U_FFFD:()=>W,WALKER_FILTER:()=>tt});module.exports=p(st);const O="[A-Z\\d]+",S="AnPlusB",N="Combinator",R="__EMPTY__",D="Identifier",I="NotSupportedError",C="Nth",L="Raw",A="Selector",P="AttributeSelector",F="ClassSelector",M="IdSelector",U="SelectorList",l="PseudoClassSelector",H="PseudoElementSelector",B="TypeSelector",f="String",G="SyntaxError",W="\uFFFD",Y=1,a=2,d=4,i=8,u=16,h=32,$=65535,X=45,b=2,m=16,w=8,y=-1,g=1,K=3,Z=9,j=11,k=2,q=8,v=16,z=4294967295,J=256,Q=1024,V=1,tt=1281,ot=/^(?:(?:ha|i)s|not|where)$/,et=/^host(?:-context)?$/,rt=/^(?:close|open)$/,Et=/^part|slotted$/;0&&(module.exports={ALPHA_NUM,AN_PLUS_B,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,BIT_HYPHEN,COMBINATOR,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,EMPTY,HEX,IDENTIFIER,NOT_SUPPORTED_ERR,NTH,RAW,REG_LOGICAL_PSEUDO,REG_SHADOW_HOST,REG_SHADOW_MODE,REG_SHADOW_PSEUDO,SELECTOR,SELECTOR_ATTR,SELECTOR_CLASS,SELECTOR_ID,SELECTOR_LIST,SELECTOR_PSEUDO_CLASS,SELECTOR_PSEUDO_ELEMENT,SELECTOR_TYPE,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,STRING,SYNTAX_ERR,TEXT_NODE,TYPE_FROM,TYPE_TO,U_FFFD,WALKER_FILTER}); +var E=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var _=(o,t)=>{for(var r in t)E(o,r,{get:t[r],enumerable:!0})},T=(o,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of c(t))!n.call(o,e)&&e!==r&&E(o,e,{get:()=>t[e],enumerable:!(s=x(t,e))||s.enumerable});return o};var p=o=>T(E({},"__esModule",{value:!0}),o);var st={};_(st,{ALPHA_NUM:()=>O,AN_PLUS_B:()=>S,BIT_01:()=>Y,BIT_02:()=>a,BIT_04:()=>d,BIT_08:()=>i,BIT_16:()=>u,BIT_32:()=>h,BIT_FFFF:()=>$,BIT_HYPHEN:()=>X,COMBINATOR:()=>N,DOCUMENT_FRAGMENT_NODE:()=>j,DOCUMENT_NODE:()=>Z,DOCUMENT_POSITION_CONTAINED_BY:()=>v,DOCUMENT_POSITION_CONTAINS:()=>q,DOCUMENT_POSITION_PRECEDING:()=>k,DUO:()=>b,ELEMENT_NODE:()=>g,EMPTY:()=>R,HEX:()=>m,IDENTIFIER:()=>D,NOT_SUPPORTED_ERR:()=>I,NTH:()=>C,RAW:()=>L,REG_LOGICAL_PSEUDO:()=>ot,REG_SHADOW_HOST:()=>et,REG_SHADOW_MODE:()=>rt,REG_SHADOW_PSEUDO:()=>Et,SELECTOR:()=>A,SELECTOR_ATTR:()=>P,SELECTOR_CLASS:()=>F,SELECTOR_ID:()=>M,SELECTOR_LIST:()=>U,SELECTOR_PSEUDO_CLASS:()=>l,SELECTOR_PSEUDO_ELEMENT:()=>H,SELECTOR_TYPE:()=>B,SHOW_ALL:()=>z,SHOW_DOCUMENT:()=>J,SHOW_DOCUMENT_FRAGMENT:()=>Q,SHOW_ELEMENT:()=>V,STRING:()=>f,SYNTAX_ERR:()=>G,TEXT_NODE:()=>K,TYPE_FROM:()=>w,TYPE_TO:()=>y,U_FFFD:()=>W,WALKER_FILTER:()=>tt});module.exports=p(st);const O="[A-Z\\d]+",S="AnPlusB",N="Combinator",R="__EMPTY__",D="Identifier",I="NotSupportedError",C="Nth",L="Raw",A="Selector",P="AttributeSelector",F="ClassSelector",M="IdSelector",U="SelectorList",l="PseudoClassSelector",H="PseudoElementSelector",B="TypeSelector",f="String",G="SyntaxError",W="\uFFFD",Y=1,a=2,d=4,i=8,u=16,h=32,$=65535,X=45,b=2,m=16,w=8,y=-1,g=1,K=3,Z=9,j=11,k=2,q=8,v=16,z=4294967295,J=256,Q=1024,V=1,tt=1281,ot=/^(?:has|is|not|where)$/,et=/^host(?:-context)?$/,rt=/^(?:close|open)$/,Et=/^part|slotted$/;0&&(module.exports={ALPHA_NUM,AN_PLUS_B,BIT_01,BIT_02,BIT_04,BIT_08,BIT_16,BIT_32,BIT_FFFF,BIT_HYPHEN,COMBINATOR,DOCUMENT_FRAGMENT_NODE,DOCUMENT_NODE,DOCUMENT_POSITION_CONTAINED_BY,DOCUMENT_POSITION_CONTAINS,DOCUMENT_POSITION_PRECEDING,DUO,ELEMENT_NODE,EMPTY,HEX,IDENTIFIER,NOT_SUPPORTED_ERR,NTH,RAW,REG_LOGICAL_PSEUDO,REG_SHADOW_HOST,REG_SHADOW_MODE,REG_SHADOW_PSEUDO,SELECTOR,SELECTOR_ATTR,SELECTOR_CLASS,SELECTOR_ID,SELECTOR_LIST,SELECTOR_PSEUDO_CLASS,SELECTOR_PSEUDO_ELEMENT,SELECTOR_TYPE,SHOW_ALL,SHOW_DOCUMENT,SHOW_DOCUMENT_FRAGMENT,SHOW_ELEMENT,STRING,SYNTAX_ERR,TEXT_NODE,TYPE_FROM,TYPE_TO,U_FFFD,WALKER_FILTER}); //# sourceMappingURL=constant.js.map diff --git a/dist/cjs/js/constant.js.map b/dist/cjs/js/constant.js.map index d56e10d1..6c849efb 100644 --- a/dist/cjs/js/constant.js.map +++ b/dist/cjs/js/constant.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/js/constant.js"], - "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const ALPHA_NUM = '[A-Z\\\\d]+';\nexport const AN_PLUS_B = 'AnPlusB';\nexport const COMBINATOR = 'Combinator';\nexport const EMPTY = '__EMPTY__';\nexport const IDENTIFIER = 'Identifier';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_ATTR = 'AttributeSelector';\nexport const SELECTOR_CLASS = 'ClassSelector';\nexport const SELECTOR_ID = 'IdSelector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const SELECTOR_PSEUDO_CLASS = 'PseudoClassSelector';\nexport const SELECTOR_PSEUDO_ELEMENT = 'PseudoElementSelector';\nexport const SELECTOR_TYPE = 'TypeSelector';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const U_FFFD = '\\uFFFD';\n\n/* numeric */\nexport const BIT_01 = 1;\nexport const BIT_02 = 2;\nexport const BIT_04 = 4;\nexport const BIT_08 = 8;\nexport const BIT_16 = 0x10;\nexport const BIT_32 = 0x20;\nexport const BIT_FFFF = 0xFFFF;\nexport const BIT_HYPHEN = 0x2D;\nexport const DUO = 2;\nexport const HEX = 16;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* Node */\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\nexport const DOCUMENT_POSITION_PRECEDING = 2;\nexport const DOCUMENT_POSITION_CONTAINS = 8;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ALL = 0xffffffff;\nexport const SHOW_DOCUMENT = 0x100;\nexport const SHOW_DOCUMENT_FRAGMENT = 0x400;\nexport const SHOW_ELEMENT = 1;\nexport const WALKER_FILTER = 0x501;\n\n/* regexp */\nexport const REG_LOGICAL_PSEUDO = /^(?:(?:ha|i)s|not|where)$/;\nexport const REG_SHADOW_HOST = /^host(?:-context)?$/;\nexport const REG_SHADOW_MODE = /^(?:close|open)$/;\nexport const REG_SHADOW_PSEUDO = /^part|slotted$/;\n"], - "mappings": "4ZAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,eAAAE,EAAA,cAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,kBAAAC,EAAA,mCAAAC,EAAA,+BAAAC,EAAA,gCAAAC,EAAA,QAAAC,EAAA,iBAAAC,EAAA,UAAAC,EAAA,QAAAC,EAAA,eAAAC,EAAA,sBAAAC,EAAA,QAAAC,EAAA,QAAAC,EAAA,uBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,sBAAAC,GAAA,aAAAC,EAAA,kBAAAC,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,kBAAAC,EAAA,0BAAAC,EAAA,4BAAAC,EAAA,kBAAAC,EAAA,aAAAC,EAAA,kBAAAC,EAAA,2BAAAC,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,cAAAC,EAAA,cAAAC,EAAA,YAAAC,EAAA,WAAAC,EAAA,kBAAAC,KAAA,eAAAC,EAAAjD,IAKO,MAAME,EAAY,YACZC,EAAY,UACZS,EAAa,aACbQ,EAAQ,YACRE,EAAa,aACbC,EAAoB,oBACpBC,EAAM,MACNC,EAAM,MACNK,EAAW,WACXC,EAAgB,oBAChBC,EAAiB,gBACjBC,EAAc,aACdC,EAAgB,eAChBC,EAAwB,sBACxBC,EAA0B,wBAC1BC,EAAgB,eAChBK,EAAS,SACTC,EAAa,cACbI,EAAS,SAGT3C,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,GACTC,EAAS,GACTC,EAAW,MACXC,EAAa,GACbO,EAAM,EACNG,EAAM,GACNwB,EAAY,EACZC,EAAU,GAGV3B,EAAe,EACfyB,EAAY,EACZ9B,EAAgB,EAChBD,EAAyB,GACzBI,EAA8B,EAC9BD,EAA6B,EAC7BD,EAAiC,GAGjCuB,EAAW,WACXC,EAAgB,IAChBC,EAAyB,KACzBC,EAAe,EACfO,GAAgB,KAGhBtB,GAAqB,4BACrBC,GAAkB,sBAClBC,GAAkB,mBAClBC,GAAoB", + "sourcesContent": ["/**\n * constant.js\n */\n\n/* string */\nexport const ALPHA_NUM = '[A-Z\\\\d]+';\nexport const AN_PLUS_B = 'AnPlusB';\nexport const COMBINATOR = 'Combinator';\nexport const EMPTY = '__EMPTY__';\nexport const IDENTIFIER = 'Identifier';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const RAW = 'Raw';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_ATTR = 'AttributeSelector';\nexport const SELECTOR_CLASS = 'ClassSelector';\nexport const SELECTOR_ID = 'IdSelector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const SELECTOR_PSEUDO_CLASS = 'PseudoClassSelector';\nexport const SELECTOR_PSEUDO_ELEMENT = 'PseudoElementSelector';\nexport const SELECTOR_TYPE = 'TypeSelector';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const U_FFFD = '\\uFFFD';\n\n/* numeric */\nexport const BIT_01 = 1;\nexport const BIT_02 = 2;\nexport const BIT_04 = 4;\nexport const BIT_08 = 8;\nexport const BIT_16 = 0x10;\nexport const BIT_32 = 0x20;\nexport const BIT_FFFF = 0xFFFF;\nexport const BIT_HYPHEN = 0x2D;\nexport const DUO = 2;\nexport const HEX = 16;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* Node */\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\nexport const DOCUMENT_POSITION_PRECEDING = 2;\nexport const DOCUMENT_POSITION_CONTAINS = 8;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ALL = 0xffffffff;\nexport const SHOW_DOCUMENT = 0x100;\nexport const SHOW_DOCUMENT_FRAGMENT = 0x400;\nexport const SHOW_ELEMENT = 1;\nexport const WALKER_FILTER = 0x501;\n\n/* regexp */\nexport const REG_LOGICAL_PSEUDO = /^(?: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$/;\n"], + "mappings": "4ZAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,eAAAE,EAAA,cAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,aAAAC,EAAA,eAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,kBAAAC,EAAA,mCAAAC,EAAA,+BAAAC,EAAA,gCAAAC,EAAA,QAAAC,EAAA,iBAAAC,EAAA,UAAAC,EAAA,QAAAC,EAAA,eAAAC,EAAA,sBAAAC,EAAA,QAAAC,EAAA,QAAAC,EAAA,uBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,sBAAAC,GAAA,aAAAC,EAAA,kBAAAC,EAAA,mBAAAC,EAAA,gBAAAC,EAAA,kBAAAC,EAAA,0BAAAC,EAAA,4BAAAC,EAAA,kBAAAC,EAAA,aAAAC,EAAA,kBAAAC,EAAA,2BAAAC,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,cAAAC,EAAA,cAAAC,EAAA,YAAAC,EAAA,WAAAC,EAAA,kBAAAC,KAAA,eAAAC,EAAAjD,IAKO,MAAME,EAAY,YACZC,EAAY,UACZS,EAAa,aACbQ,EAAQ,YACRE,EAAa,aACbC,EAAoB,oBACpBC,EAAM,MACNC,EAAM,MACNK,EAAW,WACXC,EAAgB,oBAChBC,EAAiB,gBACjBC,EAAc,aACdC,EAAgB,eAChBC,EAAwB,sBACxBC,EAA0B,wBAC1BC,EAAgB,eAChBK,EAAS,SACTC,EAAa,cACbI,EAAS,SAGT3C,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAS,GACTC,EAAS,GACTC,EAAW,MACXC,EAAa,GACbO,EAAM,EACNG,EAAM,GACNwB,EAAY,EACZC,EAAU,GAGV3B,EAAe,EACfyB,EAAY,EACZ9B,EAAgB,EAChBD,EAAyB,GACzBI,EAA8B,EAC9BD,EAA6B,EAC7BD,EAAiC,GAGjCuB,EAAW,WACXC,EAAgB,IAChBC,EAAyB,KACzBC,EAAe,EACfO,GAAgB,KAGhBtB,GAAqB,yBACrBC,GAAkB,sBAClBC,GAAkB,mBAClBC,GAAoB", "names": ["constant_exports", "__export", "ALPHA_NUM", "AN_PLUS_B", "BIT_01", "BIT_02", "BIT_04", "BIT_08", "BIT_16", "BIT_32", "BIT_FFFF", "BIT_HYPHEN", "COMBINATOR", "DOCUMENT_FRAGMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_POSITION_CONTAINED_BY", "DOCUMENT_POSITION_CONTAINS", "DOCUMENT_POSITION_PRECEDING", "DUO", "ELEMENT_NODE", "EMPTY", "HEX", "IDENTIFIER", "NOT_SUPPORTED_ERR", "NTH", "RAW", "REG_LOGICAL_PSEUDO", "REG_SHADOW_HOST", "REG_SHADOW_MODE", "REG_SHADOW_PSEUDO", "SELECTOR", "SELECTOR_ATTR", "SELECTOR_CLASS", "SELECTOR_ID", "SELECTOR_LIST", "SELECTOR_PSEUDO_CLASS", "SELECTOR_PSEUDO_ELEMENT", "SELECTOR_TYPE", "SHOW_ALL", "SHOW_DOCUMENT", "SHOW_DOCUMENT_FRAGMENT", "SHOW_ELEMENT", "STRING", "SYNTAX_ERR", "TEXT_NODE", "TYPE_FROM", "TYPE_TO", "U_FFFD", "WALKER_FILTER", "__toCommonJS"] } diff --git a/dist/cjs/js/dom-util.js b/dist/cjs/js/dom-util.js index 0ede0b8d..d7f65a00 100644 --- a/dist/cjs/js/dom-util.js +++ b/dist/cjs/js/dom-util.js @@ -1,2 +1,2 @@ -var k=Object.create;var p=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var _=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var v=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},x=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!I.call(e,o)&&o!==r&&p(e,o,{get:()=>t[o],enumerable:!(s=w(t,o))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?k(_(e)):{},x(t||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),R=e=>x(p({},"__esModule",{value:!0}),e);var S={};v(S,{getDirectionality:()=>m,getNamespaceURI:()=>D,getSlottedTextContent:()=>f,isContentEditable:()=>h,isInShadowTree:()=>g,isNamespaceDeclared:()=>$,isPreceding:()=>O,resolveContent:()=>U,sortNodes:()=>P,verifyNode:()=>d});module.exports=R(S);var E=M(require("bidi-js"),1),i=require("./constant.js");const d=e=>{if(!e||!e.nodeType||!e.nodeName){const r=`Unexpected type ${Object.prototype.toString.call(e).slice(i.TYPE_FROM,i.TYPE_TO)}`;throw new TypeError(r)}else if(!(e.nodeType===i.DOCUMENT_NODE||e.nodeType===i.DOCUMENT_FRAGMENT_NODE||e.nodeType===i.ELEMENT_NODE)){const t=`Unexpected node ${e.nodeName}`;throw new TypeError(t)}return e},U=e=>{e=d(e);let t,r;switch(e.nodeType){case i.DOCUMENT_NODE:{t=e,r=e;break}case i.DOCUMENT_FRAGMENT_NODE:{t=e.ownerDocument,r=e;break}case i.ELEMENT_NODE:default:{t=e.ownerDocument;let o=e;for(;o&&o.parentNode;)o=o.parentNode;r=o;break}}const s=t.createTreeWalker(r,i.WALKER_FILTER);return[t,r,s]},g=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE||e.nodeType===i.DOCUMENT_FRAGMENT_NODE){let r=e;for(;r;){const{host:s,mode:o,nodeType:a,parentNode:c}=r;if(s&&o&&a===i.DOCUMENT_FRAGMENT_NODE&&i.REG_SHADOW_MODE.test(o)){t=!0;break}r=c}}return!!t},f=(e={})=>{let t;if(e.localName==="slot"&&g(e)){const r=e.assignedNodes();if(r.length){for(const s of r)if(t=s.textContent.trim(),t)break}else t=e.textContent.trim()}return t??null},m=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE){const{dir:r,localName:s,parentNode:o}=e,{getEmbeddingLevels:a}=(0,E.default)(),c=/^(?:ltr|rtl)$/;if(c.test(r))t=r;else if(r==="auto"){let l;switch(s){case"input":{!e.type||/^(?:(?:butto|hidde)n|(?:emai|te|ur)l|(?:rese|submi|tex)t|password|search)$/.test(e.type)?l=e.value:/^(?:(?:ima|ran)ge|(?:dat|tim)e|c(?:olor|heckbox)|number|radio)$/.test(e.type)&&(t="ltr");break}case"slot":{l=f(e);break}case"textarea":{l=e.value;break}default:{const n=[].slice.call(e.childNodes);for(const u of n){const{dir:T,localName:N,nodeType:y,textContent:b}=u;if(y===i.TEXT_NODE?l=b.trim():y===i.ELEMENT_NODE&&!/^(?:bdi|s(?:cript|tyle)|textarea)$/.test(N)&&(!T||!c.test(T))&&(N==="slot"?l=f(u):l=b.trim()),l)break}}}if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}if(!t)if(o){const{nodeType:n}=o;n===i.ELEMENT_NODE?t=m(o):(n===i.DOCUMENT_NODE||n===i.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}else t="ltr"}else if(s==="bdi"){const l=e.textContent.trim();if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}t||o||(t="ltr")}else if(s==="input"&&e.type==="tel")t="ltr";else if(o){if(s==="slot"){const l=f(e);if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}}if(!t){const{nodeType:l}=o;l===i.ELEMENT_NODE?t=m(o):(l===i.DOCUMENT_NODE||l===i.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}}else t="ltr"}return t??null},h=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE){if(typeof e.isContentEditable=="boolean")t=e.isContentEditable;else if(e.ownerDocument.designMode==="on")t=!0;else if(e.hasAttribute("contenteditable")){const r=e.getAttribute("contenteditable");if(r===""||/^(?:plaintext-only|true)$/.test(r))t=!0;else if(r==="inherit"){let s=e.parentNode;for(;s;){if(h(s)){t=!0;break}s=s.parentNode}}}}return!!t},D=(e,t)=>{let r;if(e&&typeof e=="string"&&t?.nodeType===i.ELEMENT_NODE){const{attributes:s}=t;for(const o of s){const{name:a,namespaceURI:c,prefix:l,value:n}=o;if(a===`xmlns:${e}`){r=n;break}else if(l===e){r=c;break}}}return r??null},$=(e="",t={})=>{let r;if(e&&typeof e=="string"&&t.nodeType===i.ELEMENT_NODE&&(r=t.lookupNamespaceURI(e),!r)){const s=t.ownerDocument.documentElement;let o=t;for(;o&&(r=D(e,o),!(r||o===s));)o=o.parentNode}return!!r},O=(e={},t={})=>{let r;if(e.nodeType===i.ELEMENT_NODE&&t.nodeType===i.ELEMENT_NODE){const s=t.compareDocumentPosition(e);r=s&i.DOCUMENT_POSITION_PRECEDING||s&i.DOCUMENT_POSITION_CONTAINS}return!!r},P=(e=[])=>{const t=[...e];return t.length>1&&t.sort((r,s)=>{let o;return O(s,r)?o=1:o=-1,o}),t};0&&(module.exports={getDirectionality,getNamespaceURI,getSlottedTextContent,isContentEditable,isInShadowTree,isNamespaceDeclared,isPreceding,resolveContent,sortNodes,verifyNode}); +var k=Object.create;var p=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var _=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var v=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},x=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!I.call(e,o)&&o!==r&&p(e,o,{get:()=>t[o],enumerable:!(s=w(t,o))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?k(_(e)):{},x(t||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),R=e=>x(p({},"__esModule",{value:!0}),e);var S={};v(S,{getDirectionality:()=>m,getNamespaceURI:()=>D,getSlottedTextContent:()=>f,isContentEditable:()=>h,isInShadowTree:()=>g,isNamespaceDeclared:()=>$,isPreceding:()=>O,resolveContent:()=>U,sortNodes:()=>P,verifyNode:()=>d});module.exports=R(S);var E=M(require("bidi-js"),1),i=require("./constant.js");const d=e=>{if(!e||!e.nodeType||!e.nodeName){const r=`Unexpected type ${Object.prototype.toString.call(e).slice(i.TYPE_FROM,i.TYPE_TO)}`;throw new TypeError(r)}else if(!(e.nodeType===i.DOCUMENT_NODE||e.nodeType===i.DOCUMENT_FRAGMENT_NODE||e.nodeType===i.ELEMENT_NODE)){const t=`Unexpected node ${e.nodeName}`;throw new TypeError(t)}return e},U=e=>{e=d(e);let t,r;switch(e.nodeType){case i.DOCUMENT_NODE:{t=e,r=e;break}case i.DOCUMENT_FRAGMENT_NODE:{t=e.ownerDocument,r=e;break}case i.ELEMENT_NODE:default:{t=e.ownerDocument;let o=e;for(;o&&o.parentNode;)o=o.parentNode;r=o;break}}const s=t.createTreeWalker(r,i.WALKER_FILTER);return[t,r,s]},g=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE||e.nodeType===i.DOCUMENT_FRAGMENT_NODE){let r=e;for(;r;){const{host:s,mode:o,nodeType:a,parentNode:c}=r;if(s&&o&&a===i.DOCUMENT_FRAGMENT_NODE&&i.REG_SHADOW_MODE.test(o)){t=!0;break}r=c}}return!!t},f=(e={})=>{let t;if(e.localName==="slot"&&g(e)){const r=e.assignedNodes();if(r.length){for(const s of r)if(t=s.textContent.trim(),t)break}else t=e.textContent.trim()}return t??null},m=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE){const{dir:r,localName:s,parentNode:o}=e,{getEmbeddingLevels:a}=(0,E.default)(),c=/^(?:ltr|rtl)$/;if(c.test(r))t=r;else if(r==="auto"){let l;switch(s){case"input":{!e.type||/^(?:button|email|hidden|password|reset|search|submit|tel|text|url)$/.test(e.type)?l=e.value:/^(?:checkbox|color|date|image|number|radio|range|time)$/.test(e.type)&&(t="ltr");break}case"slot":{l=f(e);break}case"textarea":{l=e.value;break}default:{const n=[].slice.call(e.childNodes);for(const u of n){const{dir:T,localName:N,nodeType:y,textContent:b}=u;if(y===i.TEXT_NODE?l=b.trim():y===i.ELEMENT_NODE&&!/^(?:bdi|script|style|textarea)$/.test(N)&&(!T||!c.test(T))&&(N==="slot"?l=f(u):l=b.trim()),l)break}}}if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}if(!t)if(o){const{nodeType:n}=o;n===i.ELEMENT_NODE?t=m(o):(n===i.DOCUMENT_NODE||n===i.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}else t="ltr"}else if(s==="bdi"){const l=e.textContent.trim();if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}t||o||(t="ltr")}else if(s==="input"&&e.type==="tel")t="ltr";else if(o){if(s==="slot"){const l=f(e);if(l){const{paragraphs:[{level:n}]}=a(l);n%2===1?t="rtl":t="ltr"}}if(!t){const{nodeType:l}=o;l===i.ELEMENT_NODE?t=m(o):(l===i.DOCUMENT_NODE||l===i.DOCUMENT_FRAGMENT_NODE)&&(t="ltr")}}else t="ltr"}return t??null},h=(e={})=>{let t;if(e.nodeType===i.ELEMENT_NODE){if(typeof e.isContentEditable=="boolean")t=e.isContentEditable;else if(e.ownerDocument.designMode==="on")t=!0;else if(e.hasAttribute("contenteditable")){const r=e.getAttribute("contenteditable");if(r===""||/^(?:plaintext-only|true)$/.test(r))t=!0;else if(r==="inherit"){let s=e.parentNode;for(;s;){if(h(s)){t=!0;break}s=s.parentNode}}}}return!!t},D=(e,t)=>{let r;if(e&&typeof e=="string"&&t?.nodeType===i.ELEMENT_NODE){const{attributes:s}=t;for(const o of s){const{name:a,namespaceURI:c,prefix:l,value:n}=o;if(a===`xmlns:${e}`){r=n;break}else if(l===e){r=c;break}}}return r??null},$=(e="",t={})=>{let r;if(e&&typeof e=="string"&&t.nodeType===i.ELEMENT_NODE&&(r=t.lookupNamespaceURI(e),!r)){const s=t.ownerDocument.documentElement;let o=t;for(;o&&(r=D(e,o),!(r||o===s));)o=o.parentNode}return!!r},O=(e={},t={})=>{let r;if(e.nodeType===i.ELEMENT_NODE&&t.nodeType===i.ELEMENT_NODE){const s=t.compareDocumentPosition(e);r=s&i.DOCUMENT_POSITION_PRECEDING||s&i.DOCUMENT_POSITION_CONTAINS}return!!r},P=(e=[])=>{const t=[...e];return t.length>1&&t.sort((r,s)=>{let o;return O(s,r)?o=1:o=-1,o}),t};0&&(module.exports={getDirectionality,getNamespaceURI,getSlottedTextContent,isContentEditable,isInShadowTree,isNamespaceDeclared,isPreceding,resolveContent,sortNodes,verifyNode}); //# sourceMappingURL=dom-util.js.map diff --git a/dist/cjs/js/dom-util.js.map b/dist/cjs/js/dom-util.js.map index 8062d5c7..0d03f5d4 100644 --- a/dist/cjs/js/dom-util.js.map +++ b/dist/cjs/js/dom-util.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/js/dom-util.js"], - "sourcesContent": ["/**\n * dom-util.js\n */\n\n/* import */\nimport bidiFactory from 'bidi-js';\n\n/* constants */\nimport {\n DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINS,\n DOCUMENT_POSITION_PRECEDING, ELEMENT_NODE, REG_SHADOW_MODE, TEXT_NODE,\n TYPE_FROM, TYPE_TO, WALKER_FILTER\n} from './constant.js';\n\n/**\n * verify node\n * @param {*} node - node\n * @throws\n * @returns {object} - Document, DocumentFragment, Element node\n */\nexport const verifyNode = node => {\n if (!node || !node.nodeType || !node.nodeName) {\n const type = Object.prototype.toString.call(node).slice(TYPE_FROM, TYPE_TO);\n const msg = `Unexpected type ${type}`;\n throw new TypeError(msg);\n } else if (!(node.nodeType === DOCUMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE ||\n node.nodeType === ELEMENT_NODE)) {\n const msg = `Unexpected node ${node.nodeName}`;\n throw new TypeError(msg);\n }\n return node;\n};\n\n/**\n * resolve content document, root node and tree walker\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {Array.} - array of document, root node, tree walker\n */\nexport const resolveContent = node => {\n node = verifyNode(node);\n let document;\n let root;\n switch (node.nodeType) {\n case DOCUMENT_NODE: {\n document = node;\n root = node;\n break;\n }\n case DOCUMENT_FRAGMENT_NODE: {\n document = node.ownerDocument;\n root = node;\n break;\n }\n case ELEMENT_NODE:\n default: {\n document = node.ownerDocument;\n let parent = node;\n while (parent) {\n if (parent.parentNode) {\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n root = parent;\n break;\n }\n }\n const tree = document.createTreeWalker(root, WALKER_FILTER);\n return [\n document,\n root,\n tree\n ];\n};\n\n/**\n * is in shadow tree\n * @param {object} node - node\n * @returns {boolean} - result;\n */\nexport const isInShadowTree = (node = {}) => {\n let bool;\n if (node.nodeType === ELEMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n let refNode = node;\n while (refNode) {\n const { host, mode, nodeType, parentNode } = refNode;\n if (host && mode && nodeType === DOCUMENT_FRAGMENT_NODE &&\n REG_SHADOW_MODE.test(mode)) {\n bool = true;\n break;\n }\n refNode = parentNode;\n }\n }\n return !!bool;\n};\n\n/**\n * get slotted text content\n * @param {object} node - Element node\n * @returns {?string} - text content\n */\nexport const getSlottedTextContent = (node = {}) => {\n let res;\n if (node.localName === 'slot' && isInShadowTree(node)) {\n const nodes = node.assignedNodes();\n if (nodes.length) {\n for (const item of nodes) {\n res = item.textContent.trim();\n if (res) {\n break;\n }\n }\n } else {\n res = node.textContent.trim();\n }\n }\n return res ?? null;\n};\n\n/**\n * get directionality of node\n * @see https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute\n * @param {object} node - Element node\n * @returns {?string} - 'ltr' / 'rtl'\n */\nexport const getDirectionality = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n const { dir: nodeDir, localName, parentNode } = node;\n const { getEmbeddingLevels } = bidiFactory();\n const regDir = /^(?:ltr|rtl)$/;\n if (regDir.test(nodeDir)) {\n res = nodeDir;\n } else if (nodeDir === 'auto') {\n let text;\n switch (localName) {\n case 'input': {\n if (!node.type || /^(?:(?:butto|hidde)n|(?:emai|te|ur)l|(?:rese|submi|tex)t|password|search)$/.test(node.type)) {\n text = node.value;\n } else if (/^(?:(?:ima|ran)ge|(?:dat|tim)e|c(?:olor|heckbox)|number|radio)$/.test(node.type)) {\n res = 'ltr';\n }\n break;\n }\n case 'slot': {\n text = getSlottedTextContent(node);\n break;\n }\n case 'textarea': {\n text = node.value;\n break;\n }\n default: {\n const items = [].slice.call(node.childNodes);\n for (const item of items) {\n const {\n dir: itemDir, localName: itemLocalName, nodeType: itemNodeType,\n textContent: itemTextContent\n } = item;\n if (itemNodeType === TEXT_NODE) {\n text = itemTextContent.trim();\n } else if (itemNodeType === ELEMENT_NODE) {\n if (!/^(?:bdi|s(?:cript|tyle)|textarea)$/.test(itemLocalName) &&\n (!itemDir || !regDir.test(itemDir))) {\n if (itemLocalName === 'slot') {\n text = getSlottedTextContent(item);\n } else {\n text = itemTextContent.trim();\n }\n }\n }\n if (text) {\n break;\n }\n }\n }\n }\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!res) {\n if (parentNode) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n } else {\n res = 'ltr';\n }\n }\n } else if (localName === 'bdi') {\n const text = node.textContent.trim();\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!(res || parentNode)) {\n res = 'ltr';\n }\n } else if (localName === 'input' && node.type === 'tel') {\n res = 'ltr';\n } else if (parentNode) {\n if (localName === 'slot') {\n const text = getSlottedTextContent(node);\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n }\n if (!res) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n }\n } else {\n res = 'ltr';\n }\n }\n return res ?? null;\n};\n\n/**\n * is content editable\n * NOTE: not implemented in jsdom https://github.com/jsdom/jsdom/issues/1670\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isContentEditable = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n if (typeof node.isContentEditable === 'boolean') {\n res = node.isContentEditable;\n } else if (node.ownerDocument.designMode === 'on') {\n res = true;\n } else if (node.hasAttribute('contenteditable')) {\n const attr = node.getAttribute('contenteditable');\n if (attr === '' || /^(?:plaintext-only|true)$/.test(attr)) {\n res = true;\n } else if (attr === 'inherit') {\n let parent = node.parentNode;\n while (parent) {\n if (isContentEditable(parent)) {\n res = true;\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n }\n return !!res;\n};\n\n/**\n * get namespace URI\n * @param {string} ns - namespace prefix\n * @param {Array} node - Element node\n * @returns {?string} - namespace URI\n */\nexport const getNamespaceURI = (ns, node) => {\n let res;\n if (ns && typeof ns === 'string' && node?.nodeType === ELEMENT_NODE) {\n const { attributes } = node;\n for (const attr of attributes) {\n const { name, namespaceURI, prefix, value } = attr;\n if (name === `xmlns:${ns}`) {\n res = value;\n break;\n } else if (prefix === ns) {\n res = namespaceURI;\n break;\n }\n }\n }\n return res ?? null;\n};\n\n/**\n * is namespace declared\n * @param {string} ns - namespace\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isNamespaceDeclared = (ns = '', node = {}) => {\n let res;\n if (ns && typeof ns === 'string' && node.nodeType === ELEMENT_NODE) {\n res = node.lookupNamespaceURI(ns);\n if (!res) {\n const root = node.ownerDocument.documentElement;\n let parent = node;\n while (parent) {\n res = getNamespaceURI(ns, parent);\n if (res || parent === root) {\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n return !!res;\n};\n\n/**\n * is preceding - nodeA precedes and/or contains nodeB\n * @param {object} nodeA - Element node\n * @param {object} nodeB - Element node\n * @returns {boolean} - result\n */\nexport const isPreceding = (nodeA = {}, nodeB = {}) => {\n let res;\n if (nodeA.nodeType === ELEMENT_NODE && nodeB.nodeType === ELEMENT_NODE) {\n const posBit = nodeB.compareDocumentPosition(nodeA);\n res = posBit & DOCUMENT_POSITION_PRECEDING ||\n posBit & DOCUMENT_POSITION_CONTAINS;\n }\n return !!res;\n};\n\n/**\n * sort nodes\n * @param {Array.|Set.} nodes - collection of nodes\n * @returns {Array.} - collection of sorted nodes\n */\nexport const sortNodes = (nodes = []) => {\n const arr = [...nodes];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n if (isPreceding(b, a)) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n};\n"], - "mappings": "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", + "sourcesContent": ["/**\n * dom-util.js\n */\n\n/* import */\nimport bidiFactory from 'bidi-js';\n\n/* constants */\nimport {\n DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_POSITION_CONTAINS,\n DOCUMENT_POSITION_PRECEDING, ELEMENT_NODE, REG_SHADOW_MODE, TEXT_NODE,\n TYPE_FROM, TYPE_TO, WALKER_FILTER\n} from './constant.js';\n\n/**\n * verify node\n * @param {*} node - node\n * @throws\n * @returns {object} - Document, DocumentFragment, Element node\n */\nexport const verifyNode = node => {\n if (!node || !node.nodeType || !node.nodeName) {\n const type = Object.prototype.toString.call(node).slice(TYPE_FROM, TYPE_TO);\n const msg = `Unexpected type ${type}`;\n throw new TypeError(msg);\n } else if (!(node.nodeType === DOCUMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE ||\n node.nodeType === ELEMENT_NODE)) {\n const msg = `Unexpected node ${node.nodeName}`;\n throw new TypeError(msg);\n }\n return node;\n};\n\n/**\n * resolve content document, root node and tree walker\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {Array.} - array of document, root node, tree walker\n */\nexport const resolveContent = node => {\n node = verifyNode(node);\n let document;\n let root;\n switch (node.nodeType) {\n case DOCUMENT_NODE: {\n document = node;\n root = node;\n break;\n }\n case DOCUMENT_FRAGMENT_NODE: {\n document = node.ownerDocument;\n root = node;\n break;\n }\n case ELEMENT_NODE:\n default: {\n document = node.ownerDocument;\n let parent = node;\n while (parent) {\n if (parent.parentNode) {\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n root = parent;\n break;\n }\n }\n const tree = document.createTreeWalker(root, WALKER_FILTER);\n return [\n document,\n root,\n tree\n ];\n};\n\n/**\n * is in shadow tree\n * @param {object} node - node\n * @returns {boolean} - result;\n */\nexport const isInShadowTree = (node = {}) => {\n let bool;\n if (node.nodeType === ELEMENT_NODE ||\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n let refNode = node;\n while (refNode) {\n const { host, mode, nodeType, parentNode } = refNode;\n if (host && mode && nodeType === DOCUMENT_FRAGMENT_NODE &&\n REG_SHADOW_MODE.test(mode)) {\n bool = true;\n break;\n }\n refNode = parentNode;\n }\n }\n return !!bool;\n};\n\n/**\n * get slotted text content\n * @param {object} node - Element node\n * @returns {?string} - text content\n */\nexport const getSlottedTextContent = (node = {}) => {\n let res;\n if (node.localName === 'slot' && isInShadowTree(node)) {\n const nodes = node.assignedNodes();\n if (nodes.length) {\n for (const item of nodes) {\n res = item.textContent.trim();\n if (res) {\n break;\n }\n }\n } else {\n res = node.textContent.trim();\n }\n }\n return res ?? null;\n};\n\n/**\n * get directionality of node\n * @see https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute\n * @param {object} node - Element node\n * @returns {?string} - 'ltr' / 'rtl'\n */\nexport const getDirectionality = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n const { dir: nodeDir, localName, parentNode } = node;\n const { getEmbeddingLevels } = bidiFactory();\n const regDir = /^(?:ltr|rtl)$/;\n if (regDir.test(nodeDir)) {\n res = nodeDir;\n } else if (nodeDir === 'auto') {\n let text;\n switch (localName) {\n case 'input': {\n if (!node.type || /^(?:button|email|hidden|password|reset|search|submit|tel|text|url)$/.test(node.type)) {\n text = node.value;\n } else if (/^(?:checkbox|color|date|image|number|radio|range|time)$/.test(node.type)) {\n res = 'ltr';\n }\n break;\n }\n case 'slot': {\n text = getSlottedTextContent(node);\n break;\n }\n case 'textarea': {\n text = node.value;\n break;\n }\n default: {\n const items = [].slice.call(node.childNodes);\n for (const item of items) {\n const {\n dir: itemDir, localName: itemLocalName, nodeType: itemNodeType,\n textContent: itemTextContent\n } = item;\n if (itemNodeType === TEXT_NODE) {\n text = itemTextContent.trim();\n } else if (itemNodeType === ELEMENT_NODE) {\n if (!/^(?:bdi|script|style|textarea)$/.test(itemLocalName) &&\n (!itemDir || !regDir.test(itemDir))) {\n if (itemLocalName === 'slot') {\n text = getSlottedTextContent(item);\n } else {\n text = itemTextContent.trim();\n }\n }\n }\n if (text) {\n break;\n }\n }\n }\n }\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!res) {\n if (parentNode) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n } else {\n res = 'ltr';\n }\n }\n } else if (localName === 'bdi') {\n const text = node.textContent.trim();\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n if (!(res || parentNode)) {\n res = 'ltr';\n }\n } else if (localName === 'input' && node.type === 'tel') {\n res = 'ltr';\n } else if (parentNode) {\n if (localName === 'slot') {\n const text = getSlottedTextContent(node);\n if (text) {\n const { paragraphs: [{ level }] } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n res = 'rtl';\n } else {\n res = 'ltr';\n }\n }\n }\n if (!res) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n res = getDirectionality(parentNode);\n } else if (parentNodeType === DOCUMENT_NODE ||\n parentNodeType === DOCUMENT_FRAGMENT_NODE) {\n res = 'ltr';\n }\n }\n } else {\n res = 'ltr';\n }\n }\n return res ?? null;\n};\n\n/**\n * is content editable\n * NOTE: not implemented in jsdom https://github.com/jsdom/jsdom/issues/1670\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isContentEditable = (node = {}) => {\n let res;\n if (node.nodeType === ELEMENT_NODE) {\n if (typeof node.isContentEditable === 'boolean') {\n res = node.isContentEditable;\n } else if (node.ownerDocument.designMode === 'on') {\n res = true;\n } else if (node.hasAttribute('contenteditable')) {\n const attr = node.getAttribute('contenteditable');\n if (attr === '' || /^(?:plaintext-only|true)$/.test(attr)) {\n res = true;\n } else if (attr === 'inherit') {\n let parent = node.parentNode;\n while (parent) {\n if (isContentEditable(parent)) {\n res = true;\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n }\n return !!res;\n};\n\n/**\n * get namespace URI\n * @param {string} ns - namespace prefix\n * @param {Array} node - Element node\n * @returns {?string} - namespace URI\n */\nexport const getNamespaceURI = (ns, node) => {\n let res;\n if (ns && typeof ns === 'string' && node?.nodeType === ELEMENT_NODE) {\n const { attributes } = node;\n for (const attr of attributes) {\n const { name, namespaceURI, prefix, value } = attr;\n if (name === `xmlns:${ns}`) {\n res = value;\n break;\n } else if (prefix === ns) {\n res = namespaceURI;\n break;\n }\n }\n }\n return res ?? null;\n};\n\n/**\n * is namespace declared\n * @param {string} ns - namespace\n * @param {object} node - Element node\n * @returns {boolean} - result\n */\nexport const isNamespaceDeclared = (ns = '', node = {}) => {\n let res;\n if (ns && typeof ns === 'string' && node.nodeType === ELEMENT_NODE) {\n res = node.lookupNamespaceURI(ns);\n if (!res) {\n const root = node.ownerDocument.documentElement;\n let parent = node;\n while (parent) {\n res = getNamespaceURI(ns, parent);\n if (res || parent === root) {\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n return !!res;\n};\n\n/**\n * is preceding - nodeA precedes and/or contains nodeB\n * @param {object} nodeA - Element node\n * @param {object} nodeB - Element node\n * @returns {boolean} - result\n */\nexport const isPreceding = (nodeA = {}, nodeB = {}) => {\n let res;\n if (nodeA.nodeType === ELEMENT_NODE && nodeB.nodeType === ELEMENT_NODE) {\n const posBit = nodeB.compareDocumentPosition(nodeA);\n res = posBit & DOCUMENT_POSITION_PRECEDING ||\n posBit & DOCUMENT_POSITION_CONTAINS;\n }\n return !!res;\n};\n\n/**\n * sort nodes\n * @param {Array.|Set.} nodes - collection of nodes\n * @returns {Array.} - collection of sorted nodes\n */\nexport const sortNodes = (nodes = []) => {\n const arr = [...nodes];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n if (isPreceding(b, a)) {\n res = 1;\n } else {\n res = -1;\n }\n return res;\n });\n }\n return arr;\n};\n"], + "mappings": "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", "names": ["dom_util_exports", "__export", "getDirectionality", "getNamespaceURI", "getSlottedTextContent", "isContentEditable", "isInShadowTree", "isNamespaceDeclared", "isPreceding", "resolveContent", "sortNodes", "verifyNode", "__toCommonJS", "import_bidi_js", "import_constant", "node", "msg", "document", "root", "parent", "tree", "bool", "refNode", "host", "mode", "nodeType", "parentNode", "res", "nodes", "item", "nodeDir", "localName", "getEmbeddingLevels", "bidiFactory", "regDir", "text", "items", "itemDir", "itemLocalName", "itemNodeType", "itemTextContent", "level", "parentNodeType", "attr", "ns", "attributes", "name", "namespaceURI", "prefix", "value", "nodeA", "nodeB", "posBit", "arr", "a", "b"] } diff --git a/dist/cjs/js/finder.js b/dist/cjs/js/finder.js index 2f6b9759..c3bc05a8 100644 --- a/dist/cjs/js/finder.js +++ b/dist/cjs/js/finder.js @@ -1,2 +1,2 @@ -var B=Object.create;var I=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var X=(E,a)=>{for(var e in a)I(E,e,{get:a[e],enumerable:!0})},U=(E,a,e,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let l of G(a))!V.call(E,l)&&l!==e&&I(E,l,{get:()=>a[l],enumerable:!(r=j(a,l))||r.enumerable});return E};var z=(E,a,e)=>(e=E!=null?B(q(E)):{},U(a||!E||!E.__esModule?I(e,"default",{value:E,enumerable:!0}):e,E)),Y=E=>U(I({},"__esModule",{value:!0}),E);var K={};X(K,{Finder:()=>Q});module.exports=Y(K);var P=z(require("is-potential-custom-element-name"),1),F=z(require("nwsapi"),1),C=require("./dom-util.js"),$=require("./matcher.js"),S=require("./parser.js"),b=require("./constant.js");const T="next",O="prev",M="all",A="first",R="lineal",D="self";class Q{#a;#l;#t;#f;#h;#e;#d;#w;#o;#c;#p;#s;#b;#u;#r;#m;#i;#n;constructor(a){this.#n=a,this.#h=a.document,this.#l=new WeakMap,this.#p=new WeakMap,this.#o=(0,F.default)({document:a.document,DOMException:a.DOMException}),this.#o.configure({LOGERRORS:!1})}_onError(a){if(!this.#w)if(a instanceof DOMException||a instanceof this.#n.DOMException)if(a.name===b.NOT_SUPPORTED_ERR)this.#i&&console.warn(a.message);else throw new this.#n.DOMException(a.message,a.name);else throw a}_setup(a,e,r={}){const{noexcept:l,warn:s}=r;return this.#w=!!l,this.#i=!!s,this.#e=e,[this.#t,this.#s,this.#r]=(0,C.resolveContent)(e),this.#b=(0,C.isInShadowTree)(e),[this.#a,this.#d]=this._correspond(a),this.#m=new WeakMap,e}_correspond(a){const e=[];this.#f=!1;let r;if(this.#t){const l=this.#l.get(this.#t);if(l&&l.has(`${a}`)){const s=l.get(`${a}`);this.#f=s.descendant,r=s.ast}}if(r){const l=r.length;for(let s=0;s]$/.test(w)&&(o=!0),f.push({combo:t,leaves:(0,S.sortAST)(i)}),i.clear()}else if(t){let{name:c}=t;c&&typeof c=="string"&&(c=(0,S.unescapeSelector)(c),typeof c=="string"&&c!==t.name&&(t.name=c),/[|:]/.test(c)&&(t.namespace=!0)),i.add(t)}if(d.length)t=d.shift();else{f.push({combo:null,leaves:(0,S.sortAST)(i)}),i.clear();break}}}r.push({branch:f,collected:!1,dir:null,filtered:!1,find:!1}),e[n]=[],n++}if(this.#t){let d;this.#l.has(this.#t)?d=this.#l.get(this.#t):d=new Map,d.set(`${a}`,{ast:r,descendant:o}),this.#l.set(this.#t,d)}this.#f=o}return[r,e]}_createTreeWalker(a){let e;return this.#m.has(a)?e=this.#m.get(a):(e=this.#h.createTreeWalker(a,b.WALKER_FILTER),this.#m.set(a,e)),e}_prepareQuerySelectorWalker(){return this.#c=this._createTreeWalker(this.#e),this.#u=!1,this.#c}_traverse(a,e=this.#r){let r=e.currentNode,l;if(r===a)l=r;else if(r.contains(a))for(r=e.nextNode();r;){if(r===a){l=r;break}r=e.nextNode()}else{if(r!==e.root)for(;r&&!(r===e.root||r===a);)r=e.parentNode();if(a?.nodeType===b.ELEMENT_NODE)for(;r;){if(r===a){l=r;break}r=e.nextNode()}else l=r}return l??null}_collectNthChild(a,e,r){const{a:l,b:s,reverse:o,selector:n}=a,{parentNode:d}=e,f=new Set;let t;if(n&&(this.#l.has(n)?t=this.#l.get(n):(t=(0,S.walkAST)(n),this.#l.set(n,t))),d){const i=this.#r;let c=this._traverse(d,i);c=i.firstChild();let w=0;for(;c;)w++,c=i.nextSibling();c=this._traverse(d,i);const _=new Set;if(t)for(c=i.firstChild();c;){let m;for(const N of t)if(m=this._matchLeaves(N,c,r),!m)break;m&&_.add(c),c=i.nextSibling()}if(l===0){if(s>0&&s<=w){if(_.size){c=this._traverse(d,i),o?c=i.lastChild():c=i.firstChild();let m=0;for(;c;){if(_.has(c)){if(m===s-1){f.add(c);break}m++}o?c=i.previousSibling():c=i.nextSibling()}}else if(!n){c=this._traverse(d,i),o?c=i.lastChild():c=i.firstChild();let m=0;for(;c;){if(m===s-1){f.add(c);break}o?c=i.previousSibling():c=i.nextSibling(),m++}}}}else{let m=s-1;if(l>0)for(;m<0;)m+=l;if(m>=0&&m0?0:s-1;for(;c&&(c&&m>=0&&m0?k++:k--):N===m&&(n||f.add(c),m+=l),o?c=i.previousSibling():c=i.nextSibling(),N++}}if(o&&f.size>1){const m=[...f];return new Set(m.reverse())}}else if(e===this.#s&&l+s===1)if(t){let i;for(const c of t)if(i=this._matchLeaves(c,e,r),i)break;i&&f.add(e)}else f.add(e);return f}_collectNthOfType(a,e){const{a:r,b:l,reverse:s}=a,{localName:o,parentNode:n,prefix:d}=e,f=new Set;if(n){const t=this.#r;let i=this._traverse(n,t);i=t.firstChild();let c=0;for(;i;)c++,i=t.nextSibling();if(r===0){if(l>0&&l<=c){i=this._traverse(n,t),s?i=t.lastChild():i=t.firstChild();let w=0;for(;i;){const{localName:_,prefix:m}=i;if(_===o&&m===d){if(w===l-1){f.add(i);break}w++}s?i=t.previousSibling():i=t.nextSibling()}}}else{let w=l-1;if(r>0)for(;w<0;)w+=r;if(w>=0&&w0?0:l-1;for(;i;){const{localName:m,prefix:N}=i;if(m===o&&N===d){if(_===w&&(f.add(i),w+=r),w<0||w>=c)break;r>0?_++:_--}s?i=t.previousSibling():i=t.nextSibling()}}}if(s&&f.size>1){const w=[...f];return new Set(w.reverse())}}else e===this.#s&&r+l===1&&f.add(e);return f}_matchAnPlusB(a,e,r,l){const{nth:{a:s,b:o,name:n},selector:d}=a,f=new Map;if(n?(n==="even"?(f.set("a",2),f.set("b",0)):n==="odd"&&(f.set("a",2),f.set("b",1)),r.indexOf("last")>-1&&f.set("reverse",!0)):(typeof s=="string"&&/-?\d+/.test(s)?f.set("a",s*1):f.set("a",0),typeof o=="string"&&/-?\d+/.test(o)?f.set("b",o*1):f.set("b",0),r.indexOf("last")>-1&&f.set("reverse",!0)),/^nth-(?:last-)?child$/.test(r)){d&&f.set("selector",d);const t=Object.fromEntries(f);return this._collectNthChild(t,e,l)}else if(/^nth-(?:last-)?of-type$/.test(r)){const t=Object.fromEntries(f);return this._collectNthOfType(t,e)}return new Set}_matchHasPseudoFunc(a,e,r={}){let l;if(Array.isArray(a)&&a.length){const[s]=a,{type:o}=s;let n;o===b.COMBINATOR?n=a.shift():n={name:" ",type:b.COMBINATOR};const d=[];for(;a.length;){const[i]=a,{type:c}=i;if(c===b.COMBINATOR)break;d.push(a.shift())}const f={combo:n,leaves:d};r.dir=T;const t=this._matchCombinator(f,e,r);if(t.size)if(a.length){for(const i of t)if(l=this._matchHasPseudoFunc(Object.assign([],a),i,r),l)break}else l=!0}return!!l}_matchLogicalPseudoFunc(a,e,r={}){const{astName:l="",branches:s=[],selector:o="",twigBranches:n=[]}=a;let d;if(l==="has")if(o.includes(":has("))d=null;else{let f;for(const t of s)if(f=this._matchHasPseudoFunc(Object.assign([],t),e,r),f)break;f&&(d=e)}else{const f=/^(?:is|where)$/.test(l);r.forgive=f;const t=n.length;let i;for(let c=0;c0){let N=new Set([e]);for(let k=_-1;k>=0;k--){const g=w[k],h=[];r.dir=O;for(const u of N){const p=this._matchCombinator(g,u,r);p.size&&h.push(...p)}if(h.length)k===0?i=!0:N=new Set(h);else{i=!1;break}}}if(i)break}l==="not"?i||(d=e):i&&(d=e)}return d??null}_matchPseudoClassSelector(a,e,r={}){const{children:l,name:s}=a,{localName:o,parentNode:n}=e,{forgive:d,warn:f=this.#i}=r,t=new Set;if(b.REG_LOGICAL_PSEUDO.test(s)){let i;if(this.#l.has(a))i=this.#l.get(a);else{const w=(0,S.walkAST)(a),_=[],m=[];for(const[...N]of w){for(const u of N){const p=(0,S.generateCSS)(u);_.push(p)}const k=[],g=new Set;let h=N.shift();for(;h;)if(h.type===b.COMBINATOR?(k.push({combo:h,leaves:[...g]}),g.clear()):h&&g.add(h),N.length)h=N.shift();else{k.push({combo:null,leaves:[...g]}),g.clear();break}m.push(k)}i={astName:s,branches:w,twigBranches:m,selector:_.join(",")},this.#l.set(a,i)}const c=this._matchLogicalPseudoFunc(i,e,r);c&&t.add(c)}else if(Array.isArray(l))if(/^nth-(?:last-)?(?:child|of-type)$/.test(s)){const[i]=l;return this._matchAnPlusB(i,e,s,r)}else switch(s){case"dir":case"lang":{const i=$.matcher.matchSelector(a,e);i&&t.add(i);break}case"current":case"nth-col":case"nth-last-col":{if(f){const i=`Unsupported pseudo-class :${s}()`;throw new DOMException(i,b.NOT_SUPPORTED_ERR)}break}case"host":case"host-context":break;default:if(!d){const i=`Unknown pseudo-class :${s}()`;throw new DOMException(i,b.SYNTAX_ERR)}}else{const i=/^a(?:rea)?$/,c=/^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/,w=/^(?:(?:inpu|selec)t|button|form|textarea)$/,_=/^d(?:etails|ialog)$/,m=/^(?:checkbox|radio)$/,N=/^(?:date(?:time-local)?|month|time|week)$/,k=/(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/,g=/^(?:(?:emai|te|ur)l|number|password|search|text)$/;switch(s){case"any-link":case"link":{i.test(o)&&e.hasAttribute("href")&&t.add(e);break}case"local-link":{if(i.test(o)&&e.hasAttribute("href")){const{href:h,origin:u,pathname:p}=new URL(this.#t.URL),y=new URL(e.getAttribute("href"),h);y.origin===u&&y.pathname===p&&t.add(e)}break}case"visited":break;case"target":{const{hash:h}=new URL(this.#t.URL);e.id&&h===`#${e.id}`&&this.#t.contains(e)&&t.add(e);break}case"target-within":{const{hash:h}=new URL(this.#t.URL);if(h){const u=h.replace(/^#/,"");let p=this.#t.getElementById(u);for(;p;){if(p===e){t.add(e);break}p=p.parentNode}}break}case"scope":{this.#e.nodeType===b.ELEMENT_NODE?!this.#b&&e===this.#e&&t.add(e):e===this.#t.documentElement&&t.add(e);break}case"focus":{if(e===this.#t.activeElement&&e.tabIndex>=0){let h=e,u=!0;for(;h;){if(h.disabled||h.hasAttribute("disabled")||h.hidden||h.hasAttribute("hidden")){u=!1;break}else{const{display:p,visibility:y}=this.#n.getComputedStyle(h);if(u=!(p==="none"||y==="hidden"),!u)break}if(h.parentNode&&h.parentNode.nodeType===b.ELEMENT_NODE)h=h.parentNode;else break}u&&t.add(e)}break}case"focus-within":{let h,u=this.#t.activeElement;if(u.tabIndex>=0)for(;u;){if(u===e){h=!0;break}u=u.parentNode}if(h){let p=e,y=!0;for(;p;){if(p.disabled||p.hasAttribute("disabled")||p.hidden||p.hasAttribute("hidden")){y=!1;break}else{const{display:v,visibility:L}=this.#n.getComputedStyle(p);if(y=!(v==="none"||L==="hidden"),!y)break}if(p.parentNode&&p.parentNode.nodeType===b.ELEMENT_NODE)p=p.parentNode;else break}y&&t.add(e)}break}case"open":{_.test(o)&&e.hasAttribute("open")&&t.add(e);break}case"closed":{_.test(o)&&!e.hasAttribute("open")&&t.add(e);break}case"disabled":{if(c.test(o)||(0,P.default)(o))if(e.disabled||e.hasAttribute("disabled"))t.add(e);else{let h=n;for(;h&&h.localName!=="fieldset";)h=h.parentNode;h&&n.localName!=="legend"&&h.hasAttribute("disabled")&&t.add(e)}break}case"enabled":{(c.test(o)||(0,P.default)(o))&&!(e.disabled&&e.hasAttribute("disabled"))&&t.add(e);break}case"read-only":{switch(o){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}case"input":{(!e.type||N.test(e.type)||g.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,C.isContentEditable)(e)||t.add(e)}break}case"read-write":{switch(o){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||t.add(e);break}case"input":{(!e.type||N.test(e.type)||g.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,C.isContentEditable)(e)&&t.add(e)}break}case"placeholder-shown":{let h;o==="textarea"?h=e:o==="input"&&(e.hasAttribute("type")?g.test(e.getAttribute("type"))&&(h=e):h=e),h&&e.value===""&&e.hasAttribute("placeholder")&&e.getAttribute("placeholder").trim().length&&t.add(e);break}case"checked":{(e.checked&&o==="input"&&e.hasAttribute("type")&&m.test(e.getAttribute("type"))||e.selected&&o==="option")&&t.add(e);break}case"indeterminate":{if(e.indeterminate&&o==="input"&&e.type==="checkbox"||o==="progress"&&!e.hasAttribute("value"))t.add(e);else if(o==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const h=e.name;let u=e.parentNode;for(;u&&u.localName!=="form";)u=u.parentNode;u||(u=this.#t.documentElement);const p=u.getElementsByTagName("input"),y=p.length;let v;for(let L=0;L0,{type:n}=l,d=(0,S.unescapeSelector)(l.name);typeof d=="string"&&d!==l.name&&(l.name=d);let f=new Set,t=!1;if(this.#b)t=!0;else switch(n){case b.SELECTOR_PSEUDO_ELEMENT:{$.matcher.matchPseudoElementSelector(d,r);break}case b.SELECTOR_ID:{if(this.#s.nodeType===b.ELEMENT_NODE)t=!0;else{const i=this.#s.getElementById(d);i&&i!==e&&e.contains(i)&&(o?this._matchLeaves(s,i,r)&&f.add(i):f.add(i))}break}case b.SELECTOR_CLASS:{const i=e.getElementsByClassName(d);f=this._matchHTMLCollection(i,{compound:o,filterLeaves:s});break}case b.SELECTOR_TYPE:{if(this.#t.contentType==="text/html"&&!/[*|]/.test(d)){const i=e.getElementsByTagName(d);f=this._matchHTMLCollection(i,{compound:o,filterLeaves:s})}else t=!0;break}default:t=!0}return{nodes:f,pending:t}}_matchCombinator(a,e,r={}){const{combo:l,leaves:s}=a,{name:o}=l,{parentNode:n}=e,{dir:d}=r,f=new Set;if(d===T)switch(o){case"+":{const t=e.nextElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(n){const t=this._createTreeWalker(n);let i=this._traverse(e,t);for(i=t.nextSibling();i;)this._matchLeaves(s,i,r)&&f.add(i),i=t.nextSibling()}break}case">":{const t=this._createTreeWalker(e);let i=this._traverse(e,t);for(i=t.firstChild();i;)this._matchLeaves(s,i,r)&&f.add(i),i=t.nextSibling();break}case" ":default:{const{nodes:t,pending:i}=this._findDescendantNodes(s,e);if(t.size)return t;if(i){const c=this._createTreeWalker(e);let w=this._traverse(e,c);for(w=c.nextNode();w&&e.contains(w);)this._matchLeaves(s,w,r)&&f.add(w),w=c.nextNode()}}}else switch(o){case"+":{const t=e.previousElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(n){const t=this._createTreeWalker(n);let i=this._traverse(n,t);for(i=t.firstChild();i&&i!==e;)this._matchLeaves(s,i,r)&&f.add(i),i=t.nextSibling()}break}case">":{n&&this._matchLeaves(s,n,r)&&f.add(n);break}case" ":default:{const t=[];let i=n;for(;i;)this._matchLeaves(s,i,r)&&t.push(i),i=i.parentNode;if(t.length)return new Set(t.reverse())}}return f}_findNode(a,e){const{node:r}=e;let l=this._traverse(r,this.#c),s;if(l)for(l.nodeType!==b.ELEMENT_NODE?l=this.#c.nextNode():l===r&&l!==this.#s&&(l=this.#c.nextNode());l;){if(this._matchLeaves(a,l,{warn:this.#i})){s=l;break}l=this.#c.nextNode()}return s??null}_matchSelf(a){const e=[],r=this._matchLeaves(a,this.#e,{warn:this.#i});let l=!1;return r&&(e.push(this.#e),l=!0),[e,l]}_findLineal(a,e={}){const{complex:r}=e,l=[];let s=this._matchLeaves(a,this.#e,{warn:this.#i}),o=!1;if(s&&(l.push(this.#e),o=!0),!s||r){let n=this.#e.parentNode;for(;n&&(s=this._matchLeaves(a,n,{warn:this.#i}),s&&(l.push(n),o=!0),n.parentNode);)n=n.parentNode}return[l,o]}_findFirst(a){const e=[],r=this._findNode(a,{node:this.#e});let l=!1;return r&&(e.push(r),l=!0),[e,l]}_findFromHTMLCollection(a,e={}){const{complex:r,compound:l,filterLeaves:s,targetType:o}=e;let n=[],d=!1,f=!1;const t=a.length;if(t)if(this.#e.nodeType===b.ELEMENT_NODE)for(let i=0;i0,{name:d,type:f}=s;let t=[],i=!1,c=!1,w=!1;switch(f){case b.SELECTOR_PSEUDO_ELEMENT:{$.matcher.matchPseudoElementSelector(d,{warn:this.#i});break}case b.SELECTOR_ID:{if(e===D)[t,c]=this._matchSelf(l);else if(e===R)[t,c]=this._findLineal(l,{complex:r});else if(e===A&&this.#s.nodeType!==b.ELEMENT_NODE){const _=this.#s.getElementById(d);_&&(n?this._matchLeaves(o,_,{warn:this.#i})&&(t.push(_),c=!0):(t.push(_),c=!0))}else e===A?[t,c]=this._findFirst(l):w=!0;break}case b.SELECTOR_CLASS:{if(e===D)[t,c]=this._matchSelf(l);else if(e===R)[t,c]=this._findLineal(l,{complex:r});else if(this.#s.nodeType===b.DOCUMENT_NODE){const _=this.#s.getElementsByClassName(d);_.length&&([t,c,i]=this._findFromHTMLCollection(_,{complex:r,compound:n,filterLeaves:o,targetType:e}))}else e===A?[t,c]=this._findFirst(l):w=!0;break}case b.SELECTOR_TYPE:{if(e===D)[t,c]=this._matchSelf(l);else if(e===R)[t,c]=this._findLineal(l,{complex:r});else if(this.#t.contentType==="text/html"&&this.#s.nodeType===b.DOCUMENT_NODE&&!/[*|]/.test(d)){const _=this.#s.getElementsByTagName(d);_.length&&([t,c,i]=this._findFromHTMLCollection(_,{complex:r,compound:n,filterLeaves:o,targetType:e}))}else e===A?[t,c]=this._findFirst(l):w=!0;break}default:if(e!==R&&b.REG_SHADOW_HOST.test(d)){if(this.#b&&this.#e.nodeType===b.DOCUMENT_FRAGMENT_NODE){const _=this._matchShadowHostPseudoClass(s,this.#e);_&&(t.push(_),c=!0)}}else e===D?[t,c]=this._matchSelf(l):e===R?[t,c]=this._findLineal(l,{complex:r}):e===A?[t,c]=this._findFirst(l):w=!0}return{collected:i,compound:n,filtered:c,nodes:t,pending:w}}_collectNodes(a){const e=this.#a.values();if(a===M||a===A){const r=new Set;let l=0;for(const{branch:s}of e){const o=s.length,n=o>1,d=s[0];let f,t;if(n){const{combo:N,leaves:[{name:k,type:g}]}=d,h=s[o-1],{leaves:[{name:u,type:p}]}=h;if(p===b.SELECTOR_PSEUDO_ELEMENT||p===b.SELECTOR_ID)f=O,t=h;else if(g===b.SELECTOR_PSEUDO_ELEMENT||g===b.SELECTOR_ID)f=T,t=d;else if(a===M)if(k==="*"&&g===b.SELECTOR_TYPE)f=O,t=h;else if(u==="*"&&p===b.SELECTOR_TYPE)f=T,t=d;else if(o===2){const{name:y}=N;/^[+~]$/.test(y)?(f=O,t=h):(f=T,t=d)}else f=T,t=d;else if(u==="*"&&p===b.SELECTOR_TYPE)f=T,t=d;else if(k==="*"&&g===b.SELECTOR_TYPE)f=O,t=h;else{let y;for(const{combo:v,leaves:[L]}of s){const{name:x,type:W}=L;if(W===b.SELECTOR_PSEUDO_CLASS&&x==="dir"){y=!1;break}if(!y&&v){const{name:H}=v;/^[+~]$/.test(H)&&(y=!0)}}y?(f=T,t=d):(f=O,t=h)}}else f=O,t=d;const{collected:i,compound:c,filtered:w,nodes:_,pending:m}=this._findEntryNodes(t,a,n);_.length?(this.#a[l].find=!0,this.#d[l]=_):m&&r.add(new Map([["index",l],["twig",t]])),this.#a[l].collected=i,this.#a[l].dir=f,this.#a[l].filtered=w||!c,l++}if(r.size){let s,o;this.#e!==this.#s&&this.#e.nodeType===b.ELEMENT_NODE?(s=this.#e,o=this.#c):(s=this.#s,o=this.#r);let n=this._traverse(s,o);for(;n;){let d=!1;if(this.#e.nodeType===b.ELEMENT_NODE?n===this.#e?d=!0:d=this.#e.contains(n):d=!0,d)for(const f of r){const{leaves:t}=f.get("twig");if(this._matchLeaves(t,n,{warn:this.#i})){const c=f.get("index");this.#a[c].filtered=!0,this.#a[c].find=!0,this.#d[c].push(n)}}n!==o.currentNode&&(n=this._traverse(n,o)),n=o.nextNode()}}}else{let r=0;for(const{branch:l}of e){const s=l[l.length-1],o=l.length>1,{compound:n,filtered:d,nodes:f}=this._findEntryNodes(s,a,o);f.length&&(this.#a[r].find=!0,this.#d[r]=f),this.#a[r].dir=O,this.#a[r].filtered=d||!n,r++}}return[this.#a,this.#d]}_getCombinedNodes(a,e,r){const l=[];for(const s of e){const o=this._matchCombinator(a,s,{dir:r,warn:this.#i});o.size&&l.push(...o)}return l.length?new Set(l):new Set}_matchNodeNext(a,e,r){const{combo:l,index:s}=r,{combo:o,leaves:n}=a[s],d={combo:l,leaves:n},f=this._getCombinedNodes(d,e,T);let t;if(f.size)if(s===a.length-1){const[i]=(0,C.sortNodes)(f);t=i}else t=this._matchNodeNext(a,f,{combo:o,index:s+1});return t??null}_matchNodePrev(a,e,r){const{index:l}=r,s=a[l],o=new Set([e]),n=this._getCombinedNodes(s,o,O);let d;if(n.size){if(l===0)d=e;else for(const f of n)if(this._matchNodePrev(a,f,{index:l-1}))return e}return d??null}_find(a){(a===M||a===A)&&this._prepareQuerySelectorWalker();const[[...e],r]=this._collectNodes(a),l=e.length;let s=new Set;for(let o=0;o=0;k--){const g=n[k];if(N=this._getCombinedNodes(g,N,f),N.size)k===0&&(s.add(m),i>1&&s.size>1&&(this.#u=!0));else break}}else if(a===A&&f===T){const{combo:m}=n[0];let N;for(const k of c)if(N=this._matchNodeNext(n,new Set([k]),{combo:m,index:1}),N){s.add(N);break}if(!N&&!d){const{leaves:k}=n[0],[g]=c;let h=this._findNode(k,{node:g});for(;h;){if(N=this._matchNodeNext(n,new Set([h]),{combo:m,index:1}),N){s.add(N);break}h=this._findNode(k,{node:h})}}}else{let m;for(const N of c)if(m=this._matchNodePrev(n,N,{index:_-1}),m){s.add(N);break}if(!m&&!d&&a===A){const{leaves:N}=n[_],[k]=c;let g=this._findNode(N,{node:k});for(;g;){if(m=this._matchNodePrev(n,g,{index:_-1}),m){s.add(g);break}g=this._findNode(N,{node:g})}}}}}return s}matches(a,e,r){let l;try{if(e?.nodeType!==b.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}(0,S.filterSelector)(a)?l=this.#o.match(a,e):(this._setup(a,e,r),l=this._find(D).size)}catch(s){this._onError(s)}return!!l}closest(a,e,r){let l;try{if(e?.nodeType!==b.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}if((0,S.filterSelector)(a))l=this.#o.closest(a,e);else{this._setup(a,e,r);const s=this._find(R);if(s.size){let o=this.#e;for(;o;){if(s.has(o)){l=o;break}o=o.parentNode}}}}catch(s){this._onError(s)}return l??null}querySelector(a,e,r){let l;try{if(this._setup(a,e,r),this.#h===this.#t&&!this.#f&&(0,S.filterSelector)(a))l=this.#o.first(a,e);else{const s=this._find(A);s.delete(this.#e),s.size&&([l]=(0,C.sortNodes)(s))}}catch(s){this._onError(s)}return l??null}querySelectorAll(a,e,r){let l;try{if(this._setup(a,e,r),this.#h===this.#t&&!this.#f&&(0,S.filterSelector)(a))l=this.#o.select(a,e);else{const s=this._find(M);s.delete(this.#e),s.size&&(this.#u?l=(0,C.sortNodes)(s):l=[...s])}}catch(s){this._onError(s)}return l??[]}}0&&(module.exports={Finder}); +var B=Object.create;var I=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var X=(A,i)=>{for(var e in i)I(A,e,{get:i[e],enumerable:!0})},U=(A,i,e,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let l of G(i))!V.call(A,l)&&l!==e&&I(A,l,{get:()=>i[l],enumerable:!(r=j(i,l))||r.enumerable});return A};var z=(A,i,e)=>(e=A!=null?B(q(A)):{},U(i||!A||!A.__esModule?I(e,"default",{value:A,enumerable:!0}):e,A)),Y=A=>U(I({},"__esModule",{value:!0}),A);var Q={};X(Q,{Finder:()=>K});module.exports=Y(Q);var P=z(require("is-potential-custom-element-name"),1),F=z(require("nwsapi"),1),C=require("./dom-util.js"),$=require("./matcher.js"),S=require("./parser.js"),b=require("./constant.js");const T="next",O="prev",M="all",L="first",R="lineal",D="self";class K{#a;#l;#t;#f;#h;#m;#e;#d;#_;#o;#c;#w;#s;#b;#u;#n;#p;#i;#r;constructor(i){this.#r=i,this.#h=i.document,this.#l=new WeakMap,this.#w=new WeakMap,this.#o=(0,F.default)({document:i.document,DOMException:i.DOMException}),this.#o.configure({LOGERRORS:!1})}_onError(i){if(!this.#_)if(i instanceof DOMException||i instanceof this.#r.DOMException)if(i.name===b.NOT_SUPPORTED_ERR)this.#i&&console.warn(i.message);else throw new this.#r.DOMException(i.message,i.name);else throw i}_setup(i,e,r={}){const{event:l,noexcept:s,warn:n}=r;return this.#_=!!s,this.#i=!!n,this.#m=this._setEvent(l),this.#e=e,[this.#t,this.#s,this.#n]=(0,C.resolveContent)(e),this.#b=(0,C.isInShadowTree)(e),[this.#a,this.#d]=this._correspond(i),this.#p=new WeakMap,e}_setEvent(i){return i instanceof this.#r.MouseEvent||i instanceof this.#r.KeyboardEvent?i:null}_correspond(i){const e=[];this.#f=!1;let r;if(this.#t){const l=this.#l.get(this.#t);if(l&&l.has(`${i}`)){const s=l.get(`${i}`);this.#f=s.descendant,r=s.ast}}if(r){const l=r.length;for(let s=0;s]$/.test(w)&&(n=!0),f.push({combo:t,leaves:(0,S.sortAST)(a)}),a.clear()}else if(t){let{name:o}=t;o&&typeof o=="string"&&(o=(0,S.unescapeSelector)(o),typeof o=="string"&&o!==t.name&&(t.name=o),/[|:]/.test(o)&&(t.namespace=!0)),a.add(t)}if(h.length)t=h.shift();else{f.push({combo:null,leaves:(0,S.sortAST)(a)}),a.clear();break}}}r.push({branch:f,collected:!1,dir:null,filtered:!1,find:!1}),e[c]=[],c++}if(this.#t){let h;this.#l.has(this.#t)?h=this.#l.get(this.#t):h=new Map,h.set(`${i}`,{ast:r,descendant:n}),this.#l.set(this.#t,h)}this.#f=n}return[r,e]}_createTreeWalker(i){let e;return this.#p.has(i)?e=this.#p.get(i):(e=this.#h.createTreeWalker(i,b.WALKER_FILTER),this.#p.set(i,e)),e}_prepareQuerySelectorWalker(){return this.#c=this._createTreeWalker(this.#e),this.#u=!1,this.#c}_traverse(i,e=this.#n){let r=e.currentNode,l;if(r===i)l=r;else if(r.contains(i))for(r=e.nextNode();r;){if(r===i){l=r;break}r=e.nextNode()}else{if(r!==e.root)for(;r&&!(r===e.root||r===i);)r=e.parentNode();if(i?.nodeType===b.ELEMENT_NODE)for(;r;){if(r===i){l=r;break}r=e.nextNode()}else l=r}return l??null}_collectNthChild(i,e,r){const{a:l,b:s,reverse:n,selector:c}=i,{parentNode:h}=e,f=new Set;let t;if(c&&(this.#l.has(c)?t=this.#l.get(c):(t=(0,S.walkAST)(c),this.#l.set(c,t))),h){const a=this.#n;let o=this._traverse(h,a);o=a.firstChild();let w=0;for(;o;)w++,o=a.nextSibling();o=this._traverse(h,a);const _=new Set;if(t)for(o=a.firstChild();o;){let p;for(const k of t)if(p=this._matchLeaves(k,o,r),!p)break;p&&_.add(o),o=a.nextSibling()}if(l===0){if(s>0&&s<=w){if(_.size){o=this._traverse(h,a),n?o=a.lastChild():o=a.firstChild();let p=0;for(;o;){if(_.has(o)){if(p===s-1){f.add(o);break}p++}n?o=a.previousSibling():o=a.nextSibling()}}else if(!c){o=this._traverse(h,a),n?o=a.lastChild():o=a.firstChild();let p=0;for(;o;){if(p===s-1){f.add(o);break}n?o=a.previousSibling():o=a.nextSibling(),p++}}}}else{let p=s-1;if(l>0)for(;p<0;)p+=l;if(p>=0&&p0?0:s-1;for(;o&&(o&&p>=0&&p0?N++:N--):k===p&&(c||f.add(o),p+=l),n?o=a.previousSibling():o=a.nextSibling(),k++}}if(n&&f.size>1){const p=[...f];return new Set(p.reverse())}}else if(e===this.#s&&l+s===1)if(t){let a;for(const o of t)if(a=this._matchLeaves(o,e,r),a)break;a&&f.add(e)}else f.add(e);return f}_collectNthOfType(i,e){const{a:r,b:l,reverse:s}=i,{localName:n,parentNode:c,prefix:h}=e,f=new Set;if(c){const t=this.#n;let a=this._traverse(c,t);a=t.firstChild();let o=0;for(;a;)o++,a=t.nextSibling();if(r===0){if(l>0&&l<=o){a=this._traverse(c,t),s?a=t.lastChild():a=t.firstChild();let w=0;for(;a;){const{localName:_,prefix:p}=a;if(_===n&&p===h){if(w===l-1){f.add(a);break}w++}s?a=t.previousSibling():a=t.nextSibling()}}}else{let w=l-1;if(r>0)for(;w<0;)w+=r;if(w>=0&&w0?0:l-1;for(;a;){const{localName:p,prefix:k}=a;if(p===n&&k===h){if(_===w&&(f.add(a),w+=r),w<0||w>=o)break;r>0?_++:_--}s?a=t.previousSibling():a=t.nextSibling()}}}if(s&&f.size>1){const w=[...f];return new Set(w.reverse())}}else e===this.#s&&r+l===1&&f.add(e);return f}_matchAnPlusB(i,e,r,l){const{nth:{a:s,b:n,name:c},selector:h}=i,f=new Map;if(c?(c==="even"?(f.set("a",2),f.set("b",0)):c==="odd"&&(f.set("a",2),f.set("b",1)),r.indexOf("last")>-1&&f.set("reverse",!0)):(typeof s=="string"&&/-?\d+/.test(s)?f.set("a",s*1):f.set("a",0),typeof n=="string"&&/-?\d+/.test(n)?f.set("b",n*1):f.set("b",0),r.indexOf("last")>-1&&f.set("reverse",!0)),/^nth-(?:last-)?child$/.test(r)){h&&f.set("selector",h);const t=Object.fromEntries(f);return this._collectNthChild(t,e,l)}else if(/^nth-(?:last-)?of-type$/.test(r)){const t=Object.fromEntries(f);return this._collectNthOfType(t,e)}return new Set}_matchHasPseudoFunc(i,e,r={}){let l;if(Array.isArray(i)&&i.length){const[s]=i,{type:n}=s;let c;n===b.COMBINATOR?c=i.shift():c={name:" ",type:b.COMBINATOR};const h=[];for(;i.length;){const[a]=i,{type:o}=a;if(o===b.COMBINATOR)break;h.push(i.shift())}const f={combo:c,leaves:h};r.dir=T;const t=this._matchCombinator(f,e,r);if(t.size)if(i.length){for(const a of t)if(l=this._matchHasPseudoFunc(Object.assign([],i),a,r),l)break}else l=!0}return!!l}_matchLogicalPseudoFunc(i,e,r={}){const{astName:l="",branches:s=[],selector:n="",twigBranches:c=[]}=i;let h;if(l==="has")if(n.includes(":has("))h=null;else{let f;for(const t of s)if(f=this._matchHasPseudoFunc(Object.assign([],t),e,r),f)break;f&&(h=e)}else{const f=/^(?:is|where)$/.test(l);r.forgive=f;const t=c.length;let a;for(let o=0;o0){let k=new Set([e]);for(let N=_-1;N>=0;N--){const g=w[N],d=[];r.dir=O;for(const m of k){const u=this._matchCombinator(g,m,r);u.size&&d.push(...u)}if(d.length)N===0?a=!0:k=new Set(d);else{a=!1;break}}}if(a)break}l==="not"?a||(h=e):a&&(h=e)}return h??null}_matchPseudoClassSelector(i,e,r={}){const{children:l,name:s}=i,{localName:n,parentNode:c}=e,{forgive:h,warn:f=this.#i}=r,t=new Set;if(b.REG_LOGICAL_PSEUDO.test(s)){let a;if(this.#l.has(i))a=this.#l.get(i);else{const w=(0,S.walkAST)(i),_=[],p=[];for(const[...k]of w){for(const m of k){const u=(0,S.generateCSS)(m);_.push(u)}const N=[],g=new Set;let d=k.shift();for(;d;)if(d.type===b.COMBINATOR?(N.push({combo:d,leaves:[...g]}),g.clear()):d&&g.add(d),k.length)d=k.shift();else{N.push({combo:null,leaves:[...g]}),g.clear();break}p.push(N)}a={astName:s,branches:w,twigBranches:p,selector:_.join(",")},this.#l.set(i,a)}const o=this._matchLogicalPseudoFunc(a,e,r);o&&t.add(o)}else if(Array.isArray(l))if(/^nth-(?:last-)?(?:child|of-type)$/.test(s)){const[a]=l;return this._matchAnPlusB(a,e,s,r)}else switch(s){case"dir":case"lang":{const a=$.matcher.matchSelector(i,e);a&&t.add(a);break}case"current":case"nth-col":case"nth-last-col":{if(f){const a=`Unsupported pseudo-class :${s}()`;throw new DOMException(a,b.NOT_SUPPORTED_ERR)}break}case"host":case"host-context":break;default:if(!h){const a=`Unknown pseudo-class :${s}()`;throw new DOMException(a,b.SYNTAX_ERR)}}else{const a=/^a(?:rea)?$/,o=/^(?:button|fieldset|input|optgroup|option|select|textarea)$/,w=/^(?:button|form|input|select|textarea)$/,_=/^(?:details|dialog)$/,p=/^(?:checkbox|radio)$/,k=/^(?:date(?:time-local)?|month|time|week)$/,N=/(?:date(?:time-local)?|month|number|range|time|week)$/,g=/^(?:email|number|password|search|tel|text|url)$/;switch(s){case"any-link":case"link":{a.test(n)&&e.hasAttribute("href")&&t.add(e);break}case"local-link":{if(a.test(n)&&e.hasAttribute("href")){const{href:d,origin:m,pathname:u}=new URL(this.#t.URL),y=new URL(e.getAttribute("href"),d);y.origin===m&&y.pathname===u&&t.add(e)}break}case"visited":break;case"hover":{const{target:d,type:m}=this.#m??{};(m==="mouseover"||m==="pointerover")&&e.contains(d)&&t.add(e);break}case"active":{const{buttons:d,target:m,type:u}=this.#m??{};(u==="mousedown"||u==="pointerdown")&&d&b.BIT_01&&e.contains(m)&&t.add(e);break}case"target":{const{hash:d}=new URL(this.#t.URL);e.id&&d===`#${e.id}`&&this.#t.contains(e)&&t.add(e);break}case"target-within":{const{hash:d}=new URL(this.#t.URL);if(d){const m=d.replace(/^#/,"");let u=this.#t.getElementById(m);for(;u;){if(u===e){t.add(e);break}u=u.parentNode}}break}case"scope":{this.#e.nodeType===b.ELEMENT_NODE?!this.#b&&e===this.#e&&t.add(e):e===this.#t.documentElement&&t.add(e);break}case"focus":case"focus-visible":{const{target:d,type:m}=this.#m??{};if(e===this.#t.activeElement&&e.tabIndex>=0&&(s==="focus"||m==="keydown"&&e.contains(d))){let u=e,y=!0;for(;u;){if(u.disabled||u.hasAttribute("disabled")||u.hidden||u.hasAttribute("hidden")){y=!1;break}else{const{display:v,visibility:E}=this.#r.getComputedStyle(u);if(y=!(v==="none"||E==="hidden"),!y)break}if(u.parentNode&&u.parentNode.nodeType===b.ELEMENT_NODE)u=u.parentNode;else break}y&&t.add(e)}break}case"focus-within":{let d,m=this.#t.activeElement;if(m.tabIndex>=0)for(;m;){if(m===e){d=!0;break}m=m.parentNode}if(d){let u=e,y=!0;for(;u;){if(u.disabled||u.hasAttribute("disabled")||u.hidden||u.hasAttribute("hidden")){y=!1;break}else{const{display:v,visibility:E}=this.#r.getComputedStyle(u);if(y=!(v==="none"||E==="hidden"),!y)break}if(u.parentNode&&u.parentNode.nodeType===b.ELEMENT_NODE)u=u.parentNode;else break}y&&t.add(e)}break}case"open":{_.test(n)&&e.hasAttribute("open")&&t.add(e);break}case"closed":{_.test(n)&&!e.hasAttribute("open")&&t.add(e);break}case"disabled":{if(o.test(n)||(0,P.default)(n))if(e.disabled||e.hasAttribute("disabled"))t.add(e);else{let d=c;for(;d&&d.localName!=="fieldset";)d=d.parentNode;d&&c.localName!=="legend"&&d.hasAttribute("disabled")&&t.add(e)}break}case"enabled":{(o.test(n)||(0,P.default)(n))&&!(e.disabled&&e.hasAttribute("disabled"))&&t.add(e);break}case"read-only":{switch(n){case"textarea":{(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}case"input":{(!e.type||k.test(e.type)||g.test(e.type))&&(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,C.isContentEditable)(e)||t.add(e)}break}case"read-write":{switch(n){case"textarea":{e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled")||t.add(e);break}case"input":{(!e.type||k.test(e.type)||g.test(e.type))&&!(e.readonly||e.hasAttribute("readonly")||e.disabled||e.hasAttribute("disabled"))&&t.add(e);break}default:(0,C.isContentEditable)(e)&&t.add(e)}break}case"placeholder-shown":{let d;n==="textarea"?d=e:n==="input"&&(e.hasAttribute("type")?g.test(e.getAttribute("type"))&&(d=e):d=e),d&&e.value===""&&e.hasAttribute("placeholder")&&e.getAttribute("placeholder").trim().length&&t.add(e);break}case"checked":{(e.checked&&n==="input"&&e.hasAttribute("type")&&p.test(e.getAttribute("type"))||e.selected&&n==="option")&&t.add(e);break}case"indeterminate":{if(e.indeterminate&&n==="input"&&e.type==="checkbox"||n==="progress"&&!e.hasAttribute("value"))t.add(e);else if(n==="input"&&e.type==="radio"&&!e.hasAttribute("checked")){const d=e.name;let m=e.parentNode;for(;m&&m.localName!=="form";)m=m.parentNode;m||(m=this.#t.documentElement);const u=m.getElementsByTagName("input"),y=u.length;let v;for(let E=0;E0,{type:c}=l,h=(0,S.unescapeSelector)(l.name);typeof h=="string"&&h!==l.name&&(l.name=h);let f=new Set,t=!1;if(this.#b)t=!0;else switch(c){case b.SELECTOR_PSEUDO_ELEMENT:{$.matcher.matchPseudoElementSelector(h,r);break}case b.SELECTOR_ID:{if(this.#s.nodeType===b.ELEMENT_NODE)t=!0;else{const a=this.#s.getElementById(h);a&&a!==e&&e.contains(a)&&(n?this._matchLeaves(s,a,r)&&f.add(a):f.add(a))}break}case b.SELECTOR_CLASS:{const a=e.getElementsByClassName(h);f=this._matchHTMLCollection(a,{compound:n,filterLeaves:s});break}case b.SELECTOR_TYPE:{if(this.#t.contentType==="text/html"&&!/[*|]/.test(h)){const a=e.getElementsByTagName(h);f=this._matchHTMLCollection(a,{compound:n,filterLeaves:s})}else t=!0;break}default:t=!0}return{nodes:f,pending:t}}_matchCombinator(i,e,r={}){const{combo:l,leaves:s}=i,{name:n}=l,{parentNode:c}=e,{dir:h}=r,f=new Set;if(h===T)switch(n){case"+":{const t=e.nextElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(c){const t=this._createTreeWalker(c);let a=this._traverse(e,t);for(a=t.nextSibling();a;)this._matchLeaves(s,a,r)&&f.add(a),a=t.nextSibling()}break}case">":{const t=this._createTreeWalker(e);let a=this._traverse(e,t);for(a=t.firstChild();a;)this._matchLeaves(s,a,r)&&f.add(a),a=t.nextSibling();break}case" ":default:{const{nodes:t,pending:a}=this._findDescendantNodes(s,e);if(t.size)return t;if(a){const o=this._createTreeWalker(e);let w=this._traverse(e,o);for(w=o.nextNode();w&&e.contains(w);)this._matchLeaves(s,w,r)&&f.add(w),w=o.nextNode()}}}else switch(n){case"+":{const t=e.previousElementSibling;t&&this._matchLeaves(s,t,r)&&f.add(t);break}case"~":{if(c){const t=this._createTreeWalker(c);let a=this._traverse(c,t);for(a=t.firstChild();a&&a!==e;)this._matchLeaves(s,a,r)&&f.add(a),a=t.nextSibling()}break}case">":{c&&this._matchLeaves(s,c,r)&&f.add(c);break}case" ":default:{const t=[];let a=c;for(;a;)this._matchLeaves(s,a,r)&&t.push(a),a=a.parentNode;if(t.length)return new Set(t.reverse())}}return f}_findNode(i,e){const{node:r}=e;let l=this._traverse(r,this.#c),s;if(l)for(l.nodeType!==b.ELEMENT_NODE?l=this.#c.nextNode():l===r&&l!==this.#s&&(l=this.#c.nextNode());l;){if(this._matchLeaves(i,l,{warn:this.#i})){s=l;break}l=this.#c.nextNode()}return s??null}_matchSelf(i){const e=[],r=this._matchLeaves(i,this.#e,{warn:this.#i});let l=!1;return r&&(e.push(this.#e),l=!0),[e,l]}_findLineal(i,e={}){const{complex:r}=e,l=[];let s=this._matchLeaves(i,this.#e,{warn:this.#i}),n=!1;if(s&&(l.push(this.#e),n=!0),!s||r){let c=this.#e.parentNode;for(;c&&(s=this._matchLeaves(i,c,{warn:this.#i}),s&&(l.push(c),n=!0),c.parentNode);)c=c.parentNode}return[l,n]}_findFirst(i){const e=[],r=this._findNode(i,{node:this.#e});let l=!1;return r&&(e.push(r),l=!0),[e,l]}_findFromHTMLCollection(i,e={}){const{complex:r,compound:l,filterLeaves:s,targetType:n}=e;let c=[],h=!1,f=!1;const t=i.length;if(t)if(this.#e.nodeType===b.ELEMENT_NODE)for(let a=0;a0,{name:h,type:f}=s;let t=[],a=!1,o=!1,w=!1;switch(f){case b.SELECTOR_PSEUDO_ELEMENT:{$.matcher.matchPseudoElementSelector(h,{warn:this.#i});break}case b.SELECTOR_ID:{if(e===D)[t,o]=this._matchSelf(l);else if(e===R)[t,o]=this._findLineal(l,{complex:r});else if(e===L&&this.#s.nodeType!==b.ELEMENT_NODE){const _=this.#s.getElementById(h);_&&(c?this._matchLeaves(n,_,{warn:this.#i})&&(t.push(_),o=!0):(t.push(_),o=!0))}else e===L?[t,o]=this._findFirst(l):w=!0;break}case b.SELECTOR_CLASS:{if(e===D)[t,o]=this._matchSelf(l);else if(e===R)[t,o]=this._findLineal(l,{complex:r});else if(this.#s.nodeType===b.DOCUMENT_NODE){const _=this.#s.getElementsByClassName(h);_.length&&([t,o,a]=this._findFromHTMLCollection(_,{complex:r,compound:c,filterLeaves:n,targetType:e}))}else e===L?[t,o]=this._findFirst(l):w=!0;break}case b.SELECTOR_TYPE:{if(e===D)[t,o]=this._matchSelf(l);else if(e===R)[t,o]=this._findLineal(l,{complex:r});else if(this.#t.contentType==="text/html"&&this.#s.nodeType===b.DOCUMENT_NODE&&!/[*|]/.test(h)){const _=this.#s.getElementsByTagName(h);_.length&&([t,o,a]=this._findFromHTMLCollection(_,{complex:r,compound:c,filterLeaves:n,targetType:e}))}else e===L?[t,o]=this._findFirst(l):w=!0;break}default:if(e!==R&&b.REG_SHADOW_HOST.test(h)){if(this.#b&&this.#e.nodeType===b.DOCUMENT_FRAGMENT_NODE){const _=this._matchShadowHostPseudoClass(s,this.#e);_&&(t.push(_),o=!0)}}else e===D?[t,o]=this._matchSelf(l):e===R?[t,o]=this._findLineal(l,{complex:r}):e===L?[t,o]=this._findFirst(l):w=!0}return{collected:a,compound:c,filtered:o,nodes:t,pending:w}}_collectNodes(i){const e=this.#a.values();if(i===M||i===L){const r=new Set;let l=0;for(const{branch:s}of e){const n=s.length,c=n>1,h=s[0];let f,t;if(c){const{combo:k,leaves:[{name:N,type:g}]}=h,d=s[n-1],{leaves:[{name:m,type:u}]}=d;if(u===b.SELECTOR_PSEUDO_ELEMENT||u===b.SELECTOR_ID)f=O,t=d;else if(g===b.SELECTOR_PSEUDO_ELEMENT||g===b.SELECTOR_ID)f=T,t=h;else if(i===M)if(N==="*"&&g===b.SELECTOR_TYPE)f=O,t=d;else if(m==="*"&&u===b.SELECTOR_TYPE)f=T,t=h;else if(n===2){const{name:y}=k;/^[+~]$/.test(y)?(f=O,t=d):(f=T,t=h)}else f=T,t=h;else if(m==="*"&&u===b.SELECTOR_TYPE)f=T,t=h;else if(N==="*"&&g===b.SELECTOR_TYPE)f=O,t=d;else{let y;for(const{combo:v,leaves:[E]}of s){const{name:x,type:W}=E;if(W===b.SELECTOR_PSEUDO_CLASS&&x==="dir"){y=!1;break}if(!y&&v){const{name:H}=v;/^[+~]$/.test(H)&&(y=!0)}}y?(f=T,t=h):(f=O,t=d)}}else f=O,t=h;const{collected:a,compound:o,filtered:w,nodes:_,pending:p}=this._findEntryNodes(t,i,c);_.length?(this.#a[l].find=!0,this.#d[l]=_):p&&r.add(new Map([["index",l],["twig",t]])),this.#a[l].collected=a,this.#a[l].dir=f,this.#a[l].filtered=w||!o,l++}if(r.size){let s,n;this.#e!==this.#s&&this.#e.nodeType===b.ELEMENT_NODE?(s=this.#e,n=this.#c):(s=this.#s,n=this.#n);let c=this._traverse(s,n);for(;c;){let h=!1;if(this.#e.nodeType===b.ELEMENT_NODE?c===this.#e?h=!0:h=this.#e.contains(c):h=!0,h)for(const f of r){const{leaves:t}=f.get("twig");if(this._matchLeaves(t,c,{warn:this.#i})){const o=f.get("index");this.#a[o].filtered=!0,this.#a[o].find=!0,this.#d[o].push(c)}}c!==n.currentNode&&(c=this._traverse(c,n)),c=n.nextNode()}}}else{let r=0;for(const{branch:l}of e){const s=l[l.length-1],n=l.length>1,{compound:c,filtered:h,nodes:f}=this._findEntryNodes(s,i,n);f.length&&(this.#a[r].find=!0,this.#d[r]=f),this.#a[r].dir=O,this.#a[r].filtered=h||!c,r++}}return[this.#a,this.#d]}_getCombinedNodes(i,e,r){const l=[];for(const s of e){const n=this._matchCombinator(i,s,{dir:r,warn:this.#i});n.size&&l.push(...n)}return l.length?new Set(l):new Set}_matchNodeNext(i,e,r){const{combo:l,index:s}=r,{combo:n,leaves:c}=i[s],h={combo:l,leaves:c},f=this._getCombinedNodes(h,e,T);let t;if(f.size)if(s===i.length-1){const[a]=(0,C.sortNodes)(f);t=a}else t=this._matchNodeNext(i,f,{combo:n,index:s+1});return t??null}_matchNodePrev(i,e,r){const{index:l}=r,s=i[l],n=new Set([e]),c=this._getCombinedNodes(s,n,O);let h;if(c.size){if(l===0)h=e;else for(const f of c)if(this._matchNodePrev(i,f,{index:l-1}))return e}return h??null}_find(i){(i===M||i===L)&&this._prepareQuerySelectorWalker();const[[...e],r]=this._collectNodes(i),l=e.length;let s=new Set;for(let n=0;n=0;N--){const g=c[N];if(k=this._getCombinedNodes(g,k,f),k.size)N===0&&(s.add(p),a>1&&s.size>1&&(this.#u=!0));else break}}else if(i===L&&f===T){const{combo:p}=c[0];let k;for(const N of o)if(k=this._matchNodeNext(c,new Set([N]),{combo:p,index:1}),k){s.add(k);break}if(!k&&!h){const{leaves:N}=c[0],[g]=o;let d=this._findNode(N,{node:g});for(;d;){if(k=this._matchNodeNext(c,new Set([d]),{combo:p,index:1}),k){s.add(k);break}d=this._findNode(N,{node:d})}}}else{let p;for(const k of o)if(p=this._matchNodePrev(c,k,{index:_-1}),p){s.add(k);break}if(!p&&!h&&i===L){const{leaves:k}=c[_],[N]=o;let g=this._findNode(k,{node:N});for(;g;){if(p=this._matchNodePrev(c,g,{index:_-1}),p){s.add(g);break}g=this._findNode(k,{node:g})}}}}}return s}matches(i,e,r){let l;try{if(e?.nodeType!==b.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}(0,S.filterSelector)(i)?l=this.#o.match(i,e):(this._setup(i,e,r),l=this._find(D).size)}catch(s){this._onError(s)}return!!l}closest(i,e,r){let l;try{if(e?.nodeType!==b.ELEMENT_NODE){const s=`Unexpected node ${e?.nodeName}`;throw new TypeError(s)}if((0,S.filterSelector)(i))l=this.#o.closest(i,e);else{this._setup(i,e,r);const s=this._find(R);if(s.size){let n=this.#e;for(;n;){if(s.has(n)){l=n;break}n=n.parentNode}}}}catch(s){this._onError(s)}return l??null}querySelector(i,e,r){let l;try{if(this._setup(i,e,r),this.#h===this.#t&&!this.#f&&(0,S.filterSelector)(i))l=this.#o.first(i,e);else{const s=this._find(L);s.delete(this.#e),s.size&&([l]=(0,C.sortNodes)(s))}}catch(s){this._onError(s)}return l??null}querySelectorAll(i,e,r){let l;try{if(this._setup(i,e,r),this.#h===this.#t&&!this.#f&&(0,S.filterSelector)(i))l=this.#o.select(i,e);else{const s=this._find(M);s.delete(this.#e),s.size&&(this.#u?l=(0,C.sortNodes)(s):l=[...s])}}catch(s){this._onError(s)}return l??[]}}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 e60bd7c0..c04d7e0d 100644 --- a/dist/cjs/js/finder.js.map +++ b/dist/cjs/js/finder.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../src/js/finder.js"], - "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport nwsapi from 'nwsapi';\nimport {\n isContentEditable, isInShadowTree, resolveContent, sortNodes\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 COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE, EMPTY,\n NOT_SUPPORTED_ERR, REG_LOGICAL_PSEUDO, REG_SHADOW_HOST, SELECTOR_CLASS,\n SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE,\n SHOW_ALL, SYNTAX_ERR, TEXT_NODE, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: 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 #descendant;\n #document;\n #node;\n #nodes;\n #noexcept;\n #nwsapi;\n #qswalker;\n #results;\n #root;\n #shadow;\n #sort;\n #walker;\n #walkers;\n #warn;\n #window;\n\n /**\n * construct\n * @param {object} window - window\n */\n constructor(window) {\n this.#window = window;\n this.#document = window.document;\n this.#cache = new WeakMap();\n this.#results = new WeakMap();\n this.#nwsapi = nwsapi({\n document: window.document,\n DOMException: window.DOMException\n });\n this.#nwsapi.configure({\n LOGERRORS: false\n });\n }\n\n /**\n * handle error\n * @private\n * @param {Error} e - Error\n * @throws Error\n * @returns {void}\n */\n _onError(e) {\n if (!this.#noexcept) {\n if (e instanceof DOMException ||\n e instanceof this.#window.DOMException) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else {\n throw new this.#window.DOMException(e.message, e.name);\n }\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @private\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {boolean} [opt.noexcept] - no exception\n * @param {boolean} [opt.warn] - console warn\n * @returns {object} - node\n */\n _setup(selector, node, opt = {}) {\n const { noexcept, warn } = opt;\n this.#noexcept = !!noexcept;\n this.#warn = !!warn;\n this.#node = node;\n [this.#content, this.#root, this.#walker] = resolveContent(node);\n this.#shadow = isInShadowTree(node);\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#walkers = new WeakMap();\n return node;\n }\n\n /**\n * correspond ast and nodes\n * @private\n * @param {string} selector - CSS selector\n * @returns {Array.>} - array of ast and nodes\n */\n _correspond(selector) {\n const nodes = [];\n this.#descendant = false;\n let ast;\n if (this.#content) {\n const cachedItem = this.#cache.get(this.#content);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n this.#descendant = item.descendant;\n ast = item.ast;\n }\n }\n if (ast) {\n const l = ast.length;\n for (let i = 0; i < l; i++) {\n ast[i].collected = false;\n ast[i].dir = null;\n ast[i].filtered = false;\n ast[i].find = false;\n nodes[i] = [];\n }\n } else {\n let cssAst;\n try {\n cssAst = parseSelector(selector);\n } catch (e) {\n this._onError(e);\n }\n const branches = walkAST(cssAst);\n let descendant = false;\n let i = 0;\n ast = [];\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n const msg = `Invalid selector ${selector}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n const itemName = item.name;\n if (/^[\\s>]$/.test(itemName)) {\n descendant = true;\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (item) {\n let { name: itemName } = item;\n if (itemName && typeof itemName === 'string') {\n itemName = unescapeSelector(itemName);\n if (typeof itemName === 'string' && itemName !== item.name) {\n item.name = itemName;\n }\n if (/[|:]/.test(itemName)) {\n item.namespace = true;\n }\n }\n leaves.add(item);\n }\n if (items.length) {\n item = items.shift();\n } else {\n branch.push({\n combo: null,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n break;\n }\n }\n }\n ast.push({\n branch,\n collected: false,\n dir: null,\n filtered: false,\n find: false\n });\n nodes[i] = [];\n i++;\n }\n if (this.#content) {\n let cachedItem;\n if (this.#cache.has(this.#content)) {\n cachedItem = this.#cache.get(this.#content);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant\n });\n this.#cache.set(this.#content, cachedItem);\n }\n this.#descendant = descendant;\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * create tree walker\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {object} - tree walker\n */\n _createTreeWalker(node) {\n let walker;\n if (this.#walkers.has(node)) {\n walker = this.#walkers.get(node);\n } else {\n walker = this.#document.createTreeWalker(node, WALKER_FILTER);\n this.#walkers.set(node, walker);\n }\n return walker;\n }\n\n /**\n * prepare querySelector walker\n * @private\n * @returns {object} - tree walker\n */\n _prepareQuerySelectorWalker() {\n this.#qswalker = this._createTreeWalker(this.#node);\n this.#sort = false;\n return this.#qswalker;\n }\n\n /**\n * traverse tree walker\n * @private\n * @param {object} node - Element node\n * @param {object} [walker] - tree walker\n * @returns {?object} - current node\n */\n _traverse(node, walker = this.#walker) {\n let refNode = walker.currentNode;\n let current;\n if (refNode === node) {\n current = refNode;\n } else if (refNode.contains(node)) {\n refNode = walker.nextNode();\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n if (refNode !== walker.root) {\n while (refNode) {\n if (refNode === walker.root || refNode === node) {\n break;\n }\n refNode = walker.parentNode();\n }\n }\n if (node?.nodeType === ELEMENT_NODE) {\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n current = refNode;\n }\n }\n return current ?? null;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n const matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#cache.has(selector)) {\n selectorBranches = this.#cache.get(selector);\n } else {\n selectorBranches = walkAST(selector);\n this.#cache.set(selector, selectorBranches);\n }\n }\n if (parentNode) {\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n refNode = this._traverse(parentNode, walker);\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = walker.firstChild();\n while (refNode) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (selectorNodes.has(refNode)) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n i++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n } else if (!selector) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n }\n }\n }\n // :nth-child()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n if (refNode && nth >= 0 && nth < l) {\n if (selectorNodes.size) {\n if (selectorNodes.has(refNode)) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(refNode);\n }\n nth += a;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n } else {\n break;\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n // :first-of-type, :last-of-type\n if (a === 0) {\n if (b > 0 && b <= l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = 0;\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n matched.add(node);\n }\n return matched;\n }\n\n /**\n * match An+B\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {string} nthName - nth pseudo-class name\n * @param {object} opt - options\n * @returns {Set.} - 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.} leaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(leaves, node, opt = {}) {\n let bool;\n if (Array.isArray(leaves) && leaves.length) {\n const [leaf] = leaves;\n const { type: leafType } = leaf;\n let combo;\n if (leafType === COMBINATOR) {\n combo = leaves.shift();\n } else {\n combo = {\n name: ' ',\n type: COMBINATOR\n };\n }\n const twigLeaves = [];\n while (leaves.length) {\n const [item] = leaves;\n const { type: itemType } = item;\n if (itemType === COMBINATOR) {\n break;\n } else {\n twigLeaves.push(leaves.shift());\n }\n }\n const twig = {\n combo,\n leaves: twigLeaves\n };\n opt.dir = DIR_NEXT;\n const nodes = this._matchCombinator(twig, node, opt);\n if (nodes.size) {\n if (leaves.length) {\n for (const nextNode of nodes) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves),\n nextNode, opt);\n if (bool) {\n break;\n }\n }\n } else {\n bool = true;\n }\n }\n }\n return !!bool;\n }\n\n /**\n * match logical pseudo-class functions - :has(), :is(), :not(), :where()\n * @private\n * @param {object} astData - AST data\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n _matchLogicalPseudoFunc(astData, node, opt = {}) {\n const {\n astName = '', branches = [], selector = '', twigBranches = []\n } = astData;\n let res;\n if (astName === 'has') {\n if (selector.includes(':has(')) {\n res = null;\n } else {\n let bool;\n for (const leaves of branches) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves), node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else {\n const forgive = /^(?:is|where)$/.test(astName);\n opt.forgive = forgive;\n const l = twigBranches.length;\n let bool;\n for (let i = 0; i < l; i++) {\n const branch = twigBranches[i];\n const lastIndex = branch.length - 1;\n const { leaves } = branch[lastIndex];\n bool = this._matchLeaves(leaves, node, opt);\n if (bool && lastIndex > 0) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n opt.dir = DIR_PREV;\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, opt);\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n bool = true;\n } else {\n nextNodes = new Set(arr);\n }\n } else {\n bool = false;\n break;\n }\n }\n }\n if (bool) {\n break;\n }\n }\n if (astName === 'not') {\n if (!bool) {\n res = node;\n }\n } else if (bool) {\n res = node;\n }\n }\n return res ?? null;\n }\n\n /**\n * match pseudo-class selector\n * @private\n * @see https://html.spec.whatwg.org/#pseudo-classes\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @param {boolean} [opt.forgive] - forgive unknown pseudo-class\n * @param {boolean} [opt.warn] - warn unsupported pseudo-class\n * @returns {Set.} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt = {}) {\n const { children: astChildren, name: astName } = ast;\n const { localName, parentNode } = node;\n const {\n forgive,\n warn = this.#warn\n } = opt;\n const matched = new Set();\n // :has(), :is(), :not(), :where()\n if (REG_LOGICAL_PSEUDO.test(astName)) {\n let astData;\n if (this.#cache.has(ast)) {\n astData = this.#cache.get(ast);\n } else {\n const branches = walkAST(ast);\n const selectors = [];\n const twigBranches = [];\n for (const [...leaves] of branches) {\n for (const leaf of leaves) {\n const css = generateCSS(leaf);\n selectors.push(css);\n }\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches,\n selector: selectors.join(',')\n };\n this.#cache.set(ast, astData);\n }\n const res = this._matchLogicalPseudoFunc(astData, node, opt);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n const [branch] = astChildren;\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n return nodes;\n } else {\n switch (astName) {\n // :dir(), :lang()\n case 'dir':\n case 'lang': {\n const res = matcher.matchSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n default: {\n if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n const regAnchor = /^a(?:rea)?$/;\n const regFormCtrl =\n /^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/;\n const regFormValidity = /^(?:(?:inpu|selec)t|button|form|textarea)$/;\n const regInteract = /^d(?:etails|ialog)$/;\n const regTypeCheck = /^(?:checkbox|radio)$/;\n const regTypeDate = /^(?:date(?:time-local)?|month|time|week)$/;\n const regTypeRange =\n /(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/;\n const regTypeText = /^(?:(?:emai|te|ur)l|number|password|search|text)$/;\n switch (astName) {\n case 'any-link':\n case 'link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#content.URL);\n const attrURL = new URL(node.getAttribute('href'), href);\n if (attrURL.origin === origin && attrURL.pathname === pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case 'target': {\n const { hash } = new URL(this.#content.URL);\n if (node.id && hash === `#${node.id}` &&\n this.#content.contains(node)) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n const { hash } = new URL(this.#content.URL);\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#content.getElementById(id);\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n }\n break;\n }\n case 'scope': {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (!this.#shadow && node === this.#node) {\n matched.add(node);\n }\n } else if (node === this.#content.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus': {\n if (node === this.#content.activeElement && node.tabIndex >= 0) {\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 (regInteract.test(localName) && node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'closed': {\n if (regInteract.test(localName) && !node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'disabled': {\n if (regFormCtrl.test(localName) || isCustomElementName(localName)) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else {\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset') {\n break;\n }\n parent = parent.parentNode;\n }\n if (parent && parentNode.localName !== 'legend' &&\n parent.hasAttribute('disabled')) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((regFormCtrl.test(localName) || isCustomElementName(localName)) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'read-only': {\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (!isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'read-write': {\n switch (localName) {\n case 'textarea': {\n if (!(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n !(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'placeholder-shown': {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (regTypeText.test(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '' &&\n node.hasAttribute('placeholder') &&\n node.getAttribute('placeholder').trim().length) {\n matched.add(node);\n }\n break;\n }\n case 'checked': {\n if ((node.checked && localName === 'input' &&\n node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type'))) ||\n (node.selected && localName === 'option')) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if ((node.indeterminate && localName === 'input' &&\n node.type === 'checkbox') ||\n (localName === 'progress' && !node.hasAttribute('value'))) {\n matched.add(node);\n } else if (localName === 'input' && node.type === 'radio' &&\n !node.hasAttribute('checked')) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = this.#content.documentElement;\n }\n const items = parent.getElementsByTagName('input');\n const l = items.length;\n let checked;\n for (let i = 0; i < l; i++) {\n const item = items[i];\n if (item.getAttribute('type') === 'radio') {\n if (nodeName) {\n if (item.getAttribute('name') === nodeName) {\n checked = !!item.checked;\n }\n } else if (!item.hasAttribute('name')) {\n checked = !!item.checked;\n }\n if (checked) {\n break;\n }\n }\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n const regTypeReset = /^(?:button|reset)$/;\n const regTypeSubmit = /^(?:image|submit)$/;\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n if ((localName === 'button' &&\n !(node.hasAttribute('type') &&\n regTypeReset.test(node.getAttribute('type')))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n regTypeSubmit.test(node.getAttribute('type')))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker = this.#walker;\n let nextNode = this._traverse(form, walker);\n nextNode = walker.firstChild();\n while (nextNode && form.contains(nextNode)) {\n const nodeName = nextNode.localName;\n let m;\n if (nodeName === 'button') {\n m = !(nextNode.hasAttribute('type') &&\n regTypeReset.test(nextNode.getAttribute('type')));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n regTypeSubmit.test(nextNode.getAttribute('type'));\n }\n if (m) {\n if (nextNode === node) {\n matched.add(node);\n }\n break;\n }\n nextNode = walker.nextNode();\n }\n }\n // input[type=\"checkbox\"], input[type=\"radio\"]\n } else if (localName === 'input' && node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type')) &&\n (node.checked || node.hasAttribute('checked'))) {\n matched.add(node);\n // option\n } else if (localName === 'option') {\n let parent = parentNode;\n let isMultiple = false;\n while (parent) {\n if (parent.localName === 'datalist') {\n break;\n } else if (parent.localName === 'select') {\n if (parent.multiple || parent.hasAttribute('multiple')) {\n isMultiple = true;\n }\n break;\n }\n parent = parent.parentNode;\n }\n if (isMultiple) {\n if (node.selected || node.hasAttribute('selected')) {\n matched.add(node);\n }\n } else {\n const defaultOpt = new Set();\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.selected || refNode.hasAttribute('selected')) {\n defaultOpt.add(refNode);\n break;\n }\n refNode = walker.nextSibling();\n }\n if (defaultOpt.size) {\n if (defaultOpt.has(node)) {\n matched.add(node);\n }\n }\n }\n }\n break;\n }\n case 'valid': {\n if (regFormValidity.test(localName)) {\n if (node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = this._traverse(node, walker);\n refNode = walker.firstChild();\n let bool;\n while (refNode && node.contains(refNode)) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (regFormValidity.test(localName)) {\n if (!node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = this._traverse(node, walker);\n refNode = walker.firstChild();\n let bool;\n while (refNode && node.contains(refNode)) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (!bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n (node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'optional': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n !(node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === this.#content.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n let refNode = walker.firstChild();\n let bool;\n while (refNode) {\n bool = refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if ((parentNode && node === parentNode.firstElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode && node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) || node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'first-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1 === node) {\n const [node2] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node2 === node) {\n matched.add(node);\n }\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'defined': {\n const attr = node.getAttribute('is');\n if (attr) {\n if (isCustomElementName(attr) &&\n this.#window.customElements.get(attr)) {\n matched.add(node);\n }\n } else if (isCustomElementName(localName)) {\n if (this.#window.customElements.get(localName)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // legacy pseudo-elements\n case 'after':\n case 'before':\n case 'first-letter':\n case 'first-line': {\n if (warn) {\n const msg = `Unsupported pseudo-element ::${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'active':\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'focus-visible':\n case 'fullscreen':\n case 'future':\n case 'hover':\n case 'modal':\n case 'muted':\n case 'past':\n case 'paused':\n case 'picture-in-picture':\n case 'playing':\n case 'seeking':\n case 'stalled':\n case 'user-invalid':\n case 'user-valid':\n case 'volume-locked':\n case '-webkit-autofill': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match shadow host pseudo class\n * @private\n * @param {object} ast - AST\n * @param {object} node - DocumentFragment node\n * @returns {?object} - matched node\n */\n _matchShadowHostPseudoClass(ast, node) {\n const { children: astChildren, name: astName } = ast;\n let res;\n if (Array.isArray(astChildren)) {\n const [branch] = walkAST(astChildren[0]);\n const [...leaves] = branch;\n const { host } = node;\n if (astName === 'host') {\n let bool;\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n } else if (astName === 'host-context') {\n let parent = host;\n let bool;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else if (astName === 'host') {\n res = node;\n } else {\n const msg = `Invalid selector :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n return res ?? null;\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.} - 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 const regForm = /^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;\n let save;\n if (nodeType === ELEMENT_NODE && regForm.test(localName)) {\n save = false;\n } else {\n save = true;\n }\n for (const leaf of leaves) {\n const { name: 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 = this._traverse(node, walker);\n refNode = walker.nextSibling();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n const walker = this._createTreeWalker(node);\n let refNode = this._traverse(node, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n break;\n }\n case ' ':\n default: {\n const { nodes, pending } = this._findDescendantNodes(leaves, node);\n if (nodes.size) {\n return nodes;\n }\n if (pending) {\n const walker = this._createTreeWalker(node);\n let refNode = this._traverse(node, walker);\n refNode = walker.nextNode();\n while (refNode && node.contains(refNode)) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextNode();\n }\n }\n }\n }\n } else {\n switch (comboName) {\n case '+': {\n const refNode = node.previousElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode === node) {\n break;\n } else {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n if (parentNode) {\n const bool = this._matchLeaves(leaves, parentNode, opt);\n if (bool) {\n matched.add(parentNode);\n }\n }\n break;\n }\n case ' ':\n default: {\n const arr = [];\n let refNode = parentNode;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n }\n if (arr.length) {\n return new Set(arr.reverse());\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * find matched node from #qswalker\n * @private\n * @param {Array.} leaves - AST leaves\n * @param {object} [opt] - options\n * @param {object} [opt.node] - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, opt) {\n const { node } = opt;\n let refNode = this._traverse(node, this.#qswalker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = this.#qswalker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = this.#qswalker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n refNode = this.#qswalker.nextNode();\n }\n }\n return matchedNode ?? null;\n }\n\n /**\n * match self\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _matchSelf(leaves) {\n const nodes = [];\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find lineal\n * @private\n * @param {Array} leaves - AST leaves\n * @param {object} opt - options\n * @returns {Array} - [nodes, filtered]\n */\n _findLineal(leaves, opt = {}) {\n const { complex } = opt;\n const nodes = [];\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n if (!bool || complex) {\n let refNode = this.#node.parentNode;\n while (refNode) {\n bool = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(refNode);\n filtered = true;\n }\n if (refNode.parentNode) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n }\n return [nodes, filtered];\n }\n\n /**\n * find first\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFirst(leaves) {\n const nodes = [];\n const node = this._findNode(leaves, {\n node: this.#node\n });\n let filtered = false;\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find from HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @param {boolean} [opt.compound] - compound selector\n * @param {Array} [opt.filterLeaves] - filter leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFromHTMLCollection(items, opt = {}) {\n const { complex, compound, filterLeaves, targetType } = opt;\n let nodes = [];\n let filtered = false;\n let collected = false;\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node !== this.#node &&\n (this.#node.contains(node) || node.contains(this.#node))) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n } else {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n }\n } else if (complex) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n } else if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n }\n return [nodes, filtered, collected];\n }\n\n /**\n * find entry nodes\n * @private\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @param {boolean} complex - complex selector\n * @returns {object} - collection of nodes etc.\n */\n _findEntryNodes(twig, targetType, complex) {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { name: leafName, type: leafType } = leaf;\n let nodes = [];\n let collected = false;\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case SELECTOR_ID: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST &&\n this.#root.nodeType !== ELEMENT_NODE) {\n const node = this.#root.getElementById(leafName);\n if (node) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#root.nodeType === DOCUMENT_NODE) {\n const items = this.#root.getElementsByClassName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_TYPE: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#content.contentType === 'text/html' &&\n this.#root.nodeType === DOCUMENT_NODE &&\n !/[*|]/.test(leafName)) {\n const items = this.#root.getElementsByTagName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n default: {\n if (targetType !== TARGET_LINEAL && REG_SHADOW_HOST.test(leafName)) {\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n }\n }\n return {\n collected,\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * collect nodes\n * @private\n * @param {string} targetType - target type\n * @returns {Array.>} - #ast and #nodes\n */\n _collectNodes(targetType) {\n const ast = this.#ast.values();\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n const pendingItems = new Set();\n let i = 0;\n for (const { branch } of ast) {\n const branchLen = branch.length;\n const complex = branchLen > 1;\n const firstTwig = branch[0];\n let dir;\n let twig;\n if (complex) {\n const {\n combo: firstCombo,\n leaves: [{\n name: firstName,\n type: firstType\n }]\n } = firstTwig;\n const lastTwig = branch[branchLen - 1];\n const {\n leaves: [{\n name: lastName,\n type: lastType\n }]\n } = lastTwig;\n if (lastType === SELECTOR_PSEUDO_ELEMENT ||\n lastType === SELECTOR_ID) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n firstType === SELECTOR_ID) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (/^[+~]$/.test(comboName)) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n for (const { combo, leaves: [leaf] } of branch) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n bool = false;\n break;\n }\n if (!bool && combo) {\n const { name: comboName } = combo;\n if (/^[+~]$/.test(comboName)) {\n bool = true;\n }\n }\n }\n if (bool) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else {\n dir = DIR_PREV;\n twig = lastTwig;\n }\n }\n } else {\n dir = DIR_PREV;\n twig = firstTwig;\n }\n const {\n collected, compound, filtered, nodes, pending\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n } else if (pending) {\n pendingItems.add(new Map([\n ['index', i],\n ['twig', twig]\n ]));\n }\n this.#ast[i].collected = collected;\n this.#ast[i].dir = dir;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n if (pendingItems.size) {\n let node;\n let walker;\n if (this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE) {\n node = this.#node;\n walker = this.#qswalker;\n } else {\n node = this.#root;\n walker = this.#walker;\n }\n let nextNode = this._traverse(node, walker);\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (nextNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(nextNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode, {\n warn: this.#warn\n });\n if (matched) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n }\n if (nextNode !== walker.currentNode) {\n nextNode = this._traverse(nextNode, walker);\n }\n nextNode = walker.nextNode();\n }\n }\n } else {\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[branch.length - 1];\n const complex = branch.length > 1;\n const {\n compound, filtered, nodes\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n }\n this.#ast[i].dir = DIR_PREV;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n }\n return [\n this.#ast,\n this.#nodes\n ];\n }\n\n /**\n * get combined nodes\n * @private\n * @param {object} twig - twig\n * @param {object} nodes - collection of nodes\n * @param {string} dir - direction\n * @returns {Array.} - 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 if (filterSelector(selector)) {\n res = this.#nwsapi.match(selector, node);\n } else {\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_SELF);\n res = nodes.size;\n }\n } catch (e) {\n this._onError(e);\n }\n return !!res;\n }\n\n /**\n * closest\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n closest(selector, node, opt) {\n let res;\n try {\n if (node?.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node?.nodeName}`;\n throw new TypeError(msg);\n }\n if (filterSelector(selector)) {\n res = this.#nwsapi.closest(selector, node);\n } else {\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_LINEAL);\n if (nodes.size) {\n let refNode = this.#node;\n while (refNode) {\n if (nodes.has(refNode)) {\n res = refNode;\n break;\n }\n refNode = refNode.parentNode;\n }\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n querySelector(selector, node, opt) {\n let res;\n try {\n this._setup(selector, node, opt);\n if (this.#document === this.#content && !this.#descendant &&\n filterSelector(selector)) {\n res = this.#nwsapi.first(selector, node);\n } else {\n const nodes = this._find(TARGET_FIRST);\n nodes.delete(this.#node);\n if (nodes.size) {\n [res] = sortNodes(nodes);\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector all\n * NOTE: returns Array, not NodeList\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {Array.} - collection of matched nodes\n */\n querySelectorAll(selector, node, opt) {\n let res;\n try {\n this._setup(selector, node, opt);\n if (this.#document === this.#content && !this.#descendant &&\n filterSelector(selector)) {\n res = this.#nwsapi.select(selector, node);\n } else {\n const nodes = this._find(TARGET_ALL);\n nodes.delete(this.#node);\n if (nodes.size) {\n if (this.#sort) {\n res = sortNodes(nodes);\n } else {\n res = [...nodes];\n }\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? [];\n }\n};\n"], - "mappings": "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", - "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_is_potential_custom_element_name", "import_nwsapi", "import_dom_util", "import_matcher", "import_parser", "import_constant", "DIR_NEXT", "DIR_PREV", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "#ast", "#cache", "#content", "#descendant", "#document", "#node", "#nodes", "#noexcept", "#nwsapi", "#qswalker", "#results", "#root", "#shadow", "#sort", "#walker", "#walkers", "#warn", "#window", "window", "nwsapi", "e", "selector", "node", "opt", "noexcept", "warn", "nodes", "ast", "cachedItem", "item", "i", "cssAst", "branches", "descendant", "items", "branch", "leaves", "nextItem", "msg", "itemName", "walker", "refNode", "current", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "l", "selectorNodes", "bool", "nth", "j", "localName", "prefix", "itemLocalName", "itemPrefix", "m", "nthName", "nthIdentName", "anbMap", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "res", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "regAnchor", "regFormCtrl", "regFormValidity", "regInteract", "regTypeCheck", "regTypeDate", "regTypeRange", "regTypeText", "href", "origin", "pathname", "attrURL", "hash", "id", "focus", "display", "visibility", "active", "isCustomElementName", "parent", "targetNode", "nodeName", "checked", "regTypeReset", "regTypeSubmit", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "attr", "host", "astType", "attributes", "nodeType", "result", "regForm", "save", "leafName", "compound", "filterLeaves", "baseNode", "pending", "comboName", "dir", "matchedNode", "filtered", "complex", "targetType", "collected", "pendingItems", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItem", "index", "nextCombo", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode"] + "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport nwsapi from 'nwsapi';\nimport {\n isContentEditable, isInShadowTree, resolveContent, sortNodes\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_LOGICAL_PSEUDO, REG_SHADOW_HOST, SELECTOR_CLASS,\n SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE,\n SHOW_ALL, SYNTAX_ERR, TEXT_NODE, WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: 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 #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 */\n constructor(window) {\n this.#window = window;\n this.#document = window.document;\n this.#cache = new WeakMap();\n this.#results = new WeakMap();\n this.#nwsapi = nwsapi({\n document: window.document,\n DOMException: window.DOMException\n });\n this.#nwsapi.configure({\n LOGERRORS: false\n });\n }\n\n /**\n * handle error\n * @private\n * @param {Error} e - Error\n * @throws Error\n * @returns {void}\n */\n _onError(e) {\n if (!this.#noexcept) {\n if (e instanceof DOMException ||\n e instanceof this.#window.DOMException) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else {\n throw new this.#window.DOMException(e.message, e.name);\n }\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @private\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {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 * set event\n * @private\n * @param {object} event - instance of MouseEvent, KeyboardEvent\n * @returns {object} - result\n */\n _setEvent(event) {\n return (event instanceof this.#window.MouseEvent ||\n event instanceof this.#window.KeyboardEvent)\n ? event\n : null;\n }\n\n /**\n * correspond ast and nodes\n * @private\n * @param {string} selector - CSS selector\n * @returns {Array.>} - array of ast and nodes\n */\n _correspond(selector) {\n const nodes = [];\n this.#descendant = false;\n let ast;\n if (this.#content) {\n const cachedItem = this.#cache.get(this.#content);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n this.#descendant = item.descendant;\n ast = item.ast;\n }\n }\n if (ast) {\n const l = ast.length;\n for (let i = 0; i < l; i++) {\n ast[i].collected = false;\n ast[i].dir = null;\n ast[i].filtered = false;\n ast[i].find = false;\n nodes[i] = [];\n }\n } else {\n let cssAst;\n try {\n cssAst = parseSelector(selector);\n } catch (e) {\n this._onError(e);\n }\n const branches = walkAST(cssAst);\n let descendant = false;\n let i = 0;\n ast = [];\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n const msg = `Invalid selector ${selector}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n const itemName = item.name;\n if (/^[\\s>]$/.test(itemName)) {\n descendant = true;\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (item) {\n let { name: itemName } = item;\n if (itemName && typeof itemName === 'string') {\n itemName = unescapeSelector(itemName);\n if (typeof itemName === 'string' && itemName !== item.name) {\n item.name = itemName;\n }\n if (/[|:]/.test(itemName)) {\n item.namespace = true;\n }\n }\n leaves.add(item);\n }\n if (items.length) {\n item = items.shift();\n } else {\n branch.push({\n combo: null,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n break;\n }\n }\n }\n ast.push({\n branch,\n collected: false,\n dir: null,\n filtered: false,\n find: false\n });\n nodes[i] = [];\n i++;\n }\n if (this.#content) {\n let cachedItem;\n if (this.#cache.has(this.#content)) {\n cachedItem = this.#cache.get(this.#content);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant\n });\n this.#cache.set(this.#content, cachedItem);\n }\n this.#descendant = descendant;\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * create tree walker\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {object} - tree walker\n */\n _createTreeWalker(node) {\n let walker;\n if (this.#walkers.has(node)) {\n walker = this.#walkers.get(node);\n } else {\n walker = this.#document.createTreeWalker(node, WALKER_FILTER);\n this.#walkers.set(node, walker);\n }\n return walker;\n }\n\n /**\n * prepare querySelector walker\n * @private\n * @returns {object} - tree walker\n */\n _prepareQuerySelectorWalker() {\n this.#qswalker = this._createTreeWalker(this.#node);\n this.#sort = false;\n return this.#qswalker;\n }\n\n /**\n * traverse tree walker\n * @private\n * @param {object} node - Element node\n * @param {object} [walker] - tree walker\n * @returns {?object} - current node\n */\n _traverse(node, walker = this.#walker) {\n let refNode = walker.currentNode;\n let current;\n if (refNode === node) {\n current = refNode;\n } else if (refNode.contains(node)) {\n refNode = walker.nextNode();\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n if (refNode !== walker.root) {\n while (refNode) {\n if (refNode === walker.root || refNode === node) {\n break;\n }\n refNode = walker.parentNode();\n }\n }\n if (node?.nodeType === ELEMENT_NODE) {\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n current = refNode;\n }\n }\n return current ?? null;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n const matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#cache.has(selector)) {\n selectorBranches = this.#cache.get(selector);\n } else {\n selectorBranches = walkAST(selector);\n this.#cache.set(selector, selectorBranches);\n }\n }\n if (parentNode) {\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n refNode = this._traverse(parentNode, walker);\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = walker.firstChild();\n while (refNode) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (selectorNodes.has(refNode)) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n i++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n } else if (!selector) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n }\n }\n }\n // :nth-child()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n if (refNode && nth >= 0 && nth < l) {\n if (selectorNodes.size) {\n if (selectorNodes.has(refNode)) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(refNode);\n }\n nth += a;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n } else {\n break;\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n // :first-of-type, :last-of-type\n if (a === 0) {\n if (b > 0 && b <= l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = 0;\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n matched.add(node);\n }\n return matched;\n }\n\n /**\n * match An+B\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {string} nthName - nth pseudo-class name\n * @param {object} opt - options\n * @returns {Set.} - 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.} leaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(leaves, node, opt = {}) {\n let bool;\n if (Array.isArray(leaves) && leaves.length) {\n const [leaf] = leaves;\n const { type: leafType } = leaf;\n let combo;\n if (leafType === COMBINATOR) {\n combo = leaves.shift();\n } else {\n combo = {\n name: ' ',\n type: COMBINATOR\n };\n }\n const twigLeaves = [];\n while (leaves.length) {\n const [item] = leaves;\n const { type: itemType } = item;\n if (itemType === COMBINATOR) {\n break;\n } else {\n twigLeaves.push(leaves.shift());\n }\n }\n const twig = {\n combo,\n leaves: twigLeaves\n };\n opt.dir = DIR_NEXT;\n const nodes = this._matchCombinator(twig, node, opt);\n if (nodes.size) {\n if (leaves.length) {\n for (const nextNode of nodes) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves),\n nextNode, opt);\n if (bool) {\n break;\n }\n }\n } else {\n bool = true;\n }\n }\n }\n return !!bool;\n }\n\n /**\n * match logical pseudo-class functions - :has(), :is(), :not(), :where()\n * @private\n * @param {object} astData - AST data\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n _matchLogicalPseudoFunc(astData, node, opt = {}) {\n const {\n astName = '', branches = [], selector = '', twigBranches = []\n } = astData;\n let res;\n if (astName === 'has') {\n if (selector.includes(':has(')) {\n res = null;\n } else {\n let bool;\n for (const leaves of branches) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves), node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else {\n const forgive = /^(?:is|where)$/.test(astName);\n opt.forgive = forgive;\n const l = twigBranches.length;\n let bool;\n for (let i = 0; i < l; i++) {\n const branch = twigBranches[i];\n const lastIndex = branch.length - 1;\n const { leaves } = branch[lastIndex];\n bool = this._matchLeaves(leaves, node, opt);\n if (bool && lastIndex > 0) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n opt.dir = DIR_PREV;\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, opt);\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n bool = true;\n } else {\n nextNodes = new Set(arr);\n }\n } else {\n bool = false;\n break;\n }\n }\n }\n if (bool) {\n break;\n }\n }\n if (astName === 'not') {\n if (!bool) {\n res = node;\n }\n } else if (bool) {\n res = node;\n }\n }\n return res ?? null;\n }\n\n /**\n * match pseudo-class selector\n * @private\n * @see https://html.spec.whatwg.org/#pseudo-classes\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @param {boolean} [opt.forgive] - forgive unknown pseudo-class\n * @param {boolean} [opt.warn] - warn unsupported pseudo-class\n * @returns {Set.} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt = {}) {\n const { children: astChildren, name: astName } = ast;\n const { localName, parentNode } = node;\n const {\n forgive,\n warn = this.#warn\n } = opt;\n const matched = new Set();\n // :has(), :is(), :not(), :where()\n if (REG_LOGICAL_PSEUDO.test(astName)) {\n let astData;\n if (this.#cache.has(ast)) {\n astData = this.#cache.get(ast);\n } else {\n const branches = walkAST(ast);\n const selectors = [];\n const twigBranches = [];\n for (const [...leaves] of branches) {\n for (const leaf of leaves) {\n const css = generateCSS(leaf);\n selectors.push(css);\n }\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches,\n selector: selectors.join(',')\n };\n this.#cache.set(ast, astData);\n }\n const res = this._matchLogicalPseudoFunc(astData, node, opt);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n const [branch] = astChildren;\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n return nodes;\n } else {\n switch (astName) {\n // :dir(), :lang()\n case 'dir':\n case 'lang': {\n const res = matcher.matchSelector(ast, node);\n if (res) {\n matched.add(res);\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n default: {\n if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n const regAnchor = /^a(?:rea)?$/;\n const regFormCtrl =\n /^(?:button|fieldset|input|optgroup|option|select|textarea)$/;\n const regFormValidity = /^(?:button|form|input|select|textarea)$/;\n const regInteract = /^(?:details|dialog)$/;\n const regTypeCheck = /^(?:checkbox|radio)$/;\n const regTypeDate = /^(?:date(?:time-local)?|month|time|week)$/;\n const regTypeRange =\n /(?:date(?:time-local)?|month|number|range|time|week)$/;\n const regTypeText = /^(?:email|number|password|search|tel|text|url)$/;\n switch (astName) {\n case 'any-link':\n case 'link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#content.URL);\n const attrURL = new URL(node.getAttribute('href'), href);\n if (attrURL.origin === origin && attrURL.pathname === pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case '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 (regInteract.test(localName) && node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'closed': {\n if (regInteract.test(localName) && !node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'disabled': {\n if (regFormCtrl.test(localName) || isCustomElementName(localName)) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else {\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset') {\n break;\n }\n parent = parent.parentNode;\n }\n if (parent && parentNode.localName !== 'legend' &&\n parent.hasAttribute('disabled')) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((regFormCtrl.test(localName) || isCustomElementName(localName)) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'read-only': {\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (!isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'read-write': {\n switch (localName) {\n case 'textarea': {\n if (!(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n !(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'placeholder-shown': {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (regTypeText.test(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '' &&\n node.hasAttribute('placeholder') &&\n node.getAttribute('placeholder').trim().length) {\n matched.add(node);\n }\n break;\n }\n case 'checked': {\n if ((node.checked && localName === 'input' &&\n node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type'))) ||\n (node.selected && localName === 'option')) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if ((node.indeterminate && localName === 'input' &&\n node.type === 'checkbox') ||\n (localName === 'progress' && !node.hasAttribute('value'))) {\n matched.add(node);\n } else if (localName === 'input' && node.type === 'radio' &&\n !node.hasAttribute('checked')) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = this.#content.documentElement;\n }\n const items = parent.getElementsByTagName('input');\n const l = items.length;\n let checked;\n for (let i = 0; i < l; i++) {\n const item = items[i];\n if (item.getAttribute('type') === 'radio') {\n if (nodeName) {\n if (item.getAttribute('name') === nodeName) {\n checked = !!item.checked;\n }\n } else if (!item.hasAttribute('name')) {\n checked = !!item.checked;\n }\n if (checked) {\n break;\n }\n }\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n const regTypeReset = /^(?:button|reset)$/;\n const regTypeSubmit = /^(?:image|submit)$/;\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n if ((localName === 'button' &&\n !(node.hasAttribute('type') &&\n regTypeReset.test(node.getAttribute('type')))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n regTypeSubmit.test(node.getAttribute('type')))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker = this.#walker;\n let nextNode = this._traverse(form, walker);\n nextNode = walker.firstChild();\n while (nextNode && form.contains(nextNode)) {\n const nodeName = nextNode.localName;\n let m;\n if (nodeName === 'button') {\n m = !(nextNode.hasAttribute('type') &&\n regTypeReset.test(nextNode.getAttribute('type')));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n regTypeSubmit.test(nextNode.getAttribute('type'));\n }\n if (m) {\n if (nextNode === node) {\n matched.add(node);\n }\n break;\n }\n nextNode = walker.nextNode();\n }\n }\n // input[type=\"checkbox\"], input[type=\"radio\"]\n } else if (localName === 'input' && node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type')) &&\n (node.checked || node.hasAttribute('checked'))) {\n matched.add(node);\n // option\n } else if (localName === 'option') {\n let parent = parentNode;\n let isMultiple = false;\n while (parent) {\n if (parent.localName === 'datalist') {\n break;\n } else if (parent.localName === 'select') {\n if (parent.multiple || parent.hasAttribute('multiple')) {\n isMultiple = true;\n }\n break;\n }\n parent = parent.parentNode;\n }\n if (isMultiple) {\n if (node.selected || node.hasAttribute('selected')) {\n matched.add(node);\n }\n } else {\n const defaultOpt = new Set();\n const walker = this.#walker;\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.selected || refNode.hasAttribute('selected')) {\n defaultOpt.add(refNode);\n break;\n }\n refNode = walker.nextSibling();\n }\n if (defaultOpt.size) {\n if (defaultOpt.has(node)) {\n matched.add(node);\n }\n }\n }\n }\n break;\n }\n case 'valid': {\n if (regFormValidity.test(localName)) {\n if (node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = this._traverse(node, walker);\n refNode = walker.firstChild();\n let bool;\n while (refNode && node.contains(refNode)) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (regFormValidity.test(localName)) {\n if (!node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = this._traverse(node, walker);\n refNode = walker.firstChild();\n let bool;\n while (refNode && node.contains(refNode)) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (!bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n (node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'optional': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n !(node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === this.#content.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n let refNode = walker.firstChild();\n let bool;\n while (refNode) {\n bool = refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if ((parentNode && node === parentNode.firstElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode && node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) || node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'first-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1 === node) {\n const [node2] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node2 === node) {\n matched.add(node);\n }\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'defined': {\n const attr = node.getAttribute('is');\n if (attr) {\n if (isCustomElementName(attr) &&\n this.#window.customElements.get(attr)) {\n matched.add(node);\n }\n } else if (isCustomElementName(localName)) {\n if (this.#window.customElements.get(localName)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case '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 [branch] = walkAST(astChildren[0]);\n const [...leaves] = branch;\n const { host } = node;\n if (astName === 'host') {\n let bool;\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n } else if (astName === 'host-context') {\n let parent = host;\n let bool;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else if (astName === 'host') {\n res = node;\n } else {\n const msg = `Invalid selector :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n return res ?? null;\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.} - 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 const regForm = /^(?:(?:fieldse|inpu|selec)t|button|form|textarea)$/;\n let save;\n if (nodeType === ELEMENT_NODE && regForm.test(localName)) {\n save = false;\n } else {\n save = true;\n }\n for (const leaf of leaves) {\n const { name: 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 = this._traverse(node, walker);\n refNode = walker.nextSibling();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n const walker = this._createTreeWalker(node);\n let refNode = this._traverse(node, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n break;\n }\n case ' ':\n default: {\n const { nodes, pending } = this._findDescendantNodes(leaves, node);\n if (nodes.size) {\n return nodes;\n }\n if (pending) {\n const walker = this._createTreeWalker(node);\n let refNode = this._traverse(node, walker);\n refNode = walker.nextNode();\n while (refNode && node.contains(refNode)) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextNode();\n }\n }\n }\n }\n } else {\n switch (comboName) {\n case '+': {\n const refNode = node.previousElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode === node) {\n break;\n } else {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n if (parentNode) {\n const bool = this._matchLeaves(leaves, parentNode, opt);\n if (bool) {\n matched.add(parentNode);\n }\n }\n break;\n }\n case ' ':\n default: {\n const arr = [];\n let refNode = parentNode;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n }\n if (arr.length) {\n return new Set(arr.reverse());\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * find matched node from #qswalker\n * @private\n * @param {Array.} leaves - AST leaves\n * @param {object} [opt] - options\n * @param {object} [opt.node] - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, opt) {\n const { node } = opt;\n let refNode = this._traverse(node, this.#qswalker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = this.#qswalker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = this.#qswalker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n refNode = this.#qswalker.nextNode();\n }\n }\n return matchedNode ?? null;\n }\n\n /**\n * match self\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _matchSelf(leaves) {\n const nodes = [];\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find lineal\n * @private\n * @param {Array} leaves - AST leaves\n * @param {object} opt - options\n * @returns {Array} - [nodes, filtered]\n */\n _findLineal(leaves, opt = {}) {\n const { complex } = opt;\n const nodes = [];\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\n let filtered = false;\n if (bool) {\n nodes.push(this.#node);\n filtered = true;\n }\n if (!bool || complex) {\n let refNode = this.#node.parentNode;\n while (refNode) {\n bool = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(refNode);\n filtered = true;\n }\n if (refNode.parentNode) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n }\n return [nodes, filtered];\n }\n\n /**\n * find first\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFirst(leaves) {\n const nodes = [];\n const node = this._findNode(leaves, {\n node: this.#node\n });\n let filtered = false;\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n return [nodes, filtered];\n }\n\n /**\n * find from HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @param {boolean} [opt.compound] - compound selector\n * @param {Array} [opt.filterLeaves] - filter leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFromHTMLCollection(items, opt = {}) {\n const { complex, compound, filterLeaves, targetType } = opt;\n let nodes = [];\n let filtered = false;\n let collected = false;\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node !== this.#node &&\n (this.#node.contains(node) || node.contains(this.#node))) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n } else {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n }\n } else if (complex) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n } else if (compound) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n }\n return [nodes, filtered, collected];\n }\n\n /**\n * find entry nodes\n * @private\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @param {boolean} complex - complex selector\n * @returns {object} - collection of nodes etc.\n */\n _findEntryNodes(twig, targetType, complex) {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { name: leafName, type: leafType } = leaf;\n let nodes = [];\n let collected = false;\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case SELECTOR_PSEUDO_ELEMENT: {\n matcher.matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case SELECTOR_ID: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST &&\n this.#root.nodeType !== ELEMENT_NODE) {\n const node = this.#root.getElementById(leafName);\n if (node) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#root.nodeType === DOCUMENT_NODE) {\n const items = this.#root.getElementsByClassName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_TYPE: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#content.contentType === 'text/html' &&\n this.#root.nodeType === DOCUMENT_NODE &&\n !/[*|]/.test(leafName)) {\n const items = this.#root.getElementsByTagName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n default: {\n if (targetType !== TARGET_LINEAL && REG_SHADOW_HOST.test(leafName)) {\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n }\n }\n return {\n collected,\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * collect nodes\n * @private\n * @param {string} targetType - target type\n * @returns {Array.>} - #ast and #nodes\n */\n _collectNodes(targetType) {\n const ast = this.#ast.values();\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n const pendingItems = new Set();\n let i = 0;\n for (const { branch } of ast) {\n const branchLen = branch.length;\n const complex = branchLen > 1;\n const firstTwig = branch[0];\n let dir;\n let twig;\n if (complex) {\n const {\n combo: firstCombo,\n leaves: [{\n name: firstName,\n type: firstType\n }]\n } = firstTwig;\n const lastTwig = branch[branchLen - 1];\n const {\n leaves: [{\n name: lastName,\n type: lastType\n }]\n } = lastTwig;\n if (lastType === SELECTOR_PSEUDO_ELEMENT ||\n lastType === SELECTOR_ID) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n firstType === SELECTOR_ID) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (/^[+~]$/.test(comboName)) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n for (const { combo, leaves: [leaf] } of branch) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n bool = false;\n break;\n }\n if (!bool && combo) {\n const { name: comboName } = combo;\n if (/^[+~]$/.test(comboName)) {\n bool = true;\n }\n }\n }\n if (bool) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else {\n dir = DIR_PREV;\n twig = lastTwig;\n }\n }\n } else {\n dir = DIR_PREV;\n twig = firstTwig;\n }\n const {\n collected, compound, filtered, nodes, pending\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n } else if (pending) {\n pendingItems.add(new Map([\n ['index', i],\n ['twig', twig]\n ]));\n }\n this.#ast[i].collected = collected;\n this.#ast[i].dir = dir;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n if (pendingItems.size) {\n let node;\n let walker;\n if (this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE) {\n node = this.#node;\n walker = this.#qswalker;\n } else {\n node = this.#root;\n walker = this.#walker;\n }\n let nextNode = this._traverse(node, walker);\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (nextNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(nextNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode, {\n warn: this.#warn\n });\n if (matched) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n }\n if (nextNode !== walker.currentNode) {\n nextNode = this._traverse(nextNode, walker);\n }\n nextNode = walker.nextNode();\n }\n }\n } else {\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[branch.length - 1];\n const complex = branch.length > 1;\n const {\n compound, filtered, nodes\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n }\n this.#ast[i].dir = DIR_PREV;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n }\n return [\n this.#ast,\n this.#nodes\n ];\n }\n\n /**\n * get combined nodes\n * @private\n * @param {object} twig - twig\n * @param {object} nodes - collection of nodes\n * @param {string} dir - direction\n * @returns {Array.} - 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 if (filterSelector(selector)) {\n res = this.#nwsapi.match(selector, node);\n } else {\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_SELF);\n res = nodes.size;\n }\n } catch (e) {\n this._onError(e);\n }\n return !!res;\n }\n\n /**\n * closest\n * @param {string} selector - CSS selector\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n closest(selector, node, opt) {\n let res;\n try {\n if (node?.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node?.nodeName}`;\n throw new TypeError(msg);\n }\n if (filterSelector(selector)) {\n res = this.#nwsapi.closest(selector, node);\n } else {\n this._setup(selector, node, opt);\n const nodes = this._find(TARGET_LINEAL);\n if (nodes.size) {\n let refNode = this.#node;\n while (refNode) {\n if (nodes.has(refNode)) {\n res = refNode;\n break;\n }\n refNode = refNode.parentNode;\n }\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n querySelector(selector, node, opt) {\n let res;\n try {\n this._setup(selector, node, opt);\n if (this.#document === this.#content && !this.#descendant &&\n filterSelector(selector)) {\n res = this.#nwsapi.first(selector, node);\n } else {\n const nodes = this._find(TARGET_FIRST);\n nodes.delete(this.#node);\n if (nodes.size) {\n [res] = sortNodes(nodes);\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector all\n * NOTE: returns Array, not NodeList\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @returns {Array.} - collection of matched nodes\n */\n querySelectorAll(selector, node, opt) {\n let res;\n try {\n this._setup(selector, node, opt);\n if (this.#document === this.#content && !this.#descendant &&\n filterSelector(selector)) {\n res = this.#nwsapi.select(selector, node);\n } else {\n const nodes = this._find(TARGET_ALL);\n nodes.delete(this.#node);\n if (nodes.size) {\n if (this.#sort) {\n res = sortNodes(nodes);\n } else {\n res = [...nodes];\n }\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? [];\n }\n};\n"], + "mappings": "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", + "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_is_potential_custom_element_name", "import_nwsapi", "import_dom_util", "import_matcher", "import_parser", "import_constant", "DIR_NEXT", "DIR_PREV", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "#ast", "#cache", "#content", "#descendant", "#document", "#event", "#node", "#nodes", "#noexcept", "#nwsapi", "#qswalker", "#results", "#root", "#shadow", "#sort", "#walker", "#walkers", "#warn", "#window", "window", "nwsapi", "e", "selector", "node", "opt", "event", "noexcept", "warn", "nodes", "ast", "cachedItem", "item", "i", "cssAst", "branches", "descendant", "items", "branch", "leaves", "nextItem", "msg", "itemName", "walker", "refNode", "current", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "l", "selectorNodes", "bool", "nth", "j", "m", "localName", "prefix", "itemLocalName", "itemPrefix", "nthName", "nthIdentName", "anbMap", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "res", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "regAnchor", "regFormCtrl", "regFormValidity", "regInteract", "regTypeCheck", "regTypeDate", "regTypeRange", "regTypeText", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "focus", "display", "visibility", "active", "isCustomElementName", "parent", "targetNode", "nodeName", "checked", "regTypeReset", "regTypeSubmit", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "attr", "host", "astType", "attributes", "nodeType", "result", "regForm", "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"] } diff --git a/package.json b/package.json index 79e32cdc..59491b1f 100644 --- a/package.json +++ b/package.json @@ -60,5 +60,5 @@ "tsc": "node scripts/index clean --dir=types -i && npx tsc", "update-wpt": "git submodule update --init --recursive --remote" }, - "version": "4.2.2" + "version": "4.3.0" }