@asamuzakjp/dom-selector 6.2.2 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/js/finder.js"],
4
- "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport {\n matchAttributeSelector, matchDirectionPseudoClass, matchLanguagePseudoClass,\n matchPseudoElementSelector, matchTypeSelector\n} from './matcher.js';\nimport {\n findAST, generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\nimport {\n isContentEditable, isCustomElement, isFocusVisible, isFocusableArea,\n isVisible, resolveContent, sortNodes, traverseNode\n} from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR, BIT_01, CLASS_SELECTOR, COMBINATOR, DOCUMENT_FRAGMENT_NODE,\n DOCUMENT_NODE, ELEMENT_NODE, ID_SELECTOR, KEY_FORM_FOCUS, KEY_INPUT_DATE,\n KEY_INPUT_EDIT, KEY_INPUT_TEXT, KEY_LOGICAL, KEY_MODIFIER, NOT_SUPPORTED_ERR,\n PS_CLASS_SELECTOR, PS_ELEMENT_SELECTOR, SHOW_ALL, SYNTAX_ERR, TARGET_ALL,\n TARGET_FIRST, TARGET_LINEAL, TARGET_SELF, TEXT_NODE, TYPE_SELECTOR,\n WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: Array<Ast | undefined>\n * #nodes: Array<Nodes>\n * Ast: {\n * branch: Array<Branch | undefined>,\n * collected: boolean,\n * dir: string | null,\n * filtered: boolean,\n * find: boolean\n * }\n * Branch: Array<Twig>\n * Twig: {\n * combo: Leaf | null,\n * leaves: Array<Leaf>\n * }\n * Leaf: {\n * children: Array<Leaf | undefined> | null,\n * loc: null,\n * type: string\n * }\n * Nodes: Array<HTMLElement | undefined>\n */\nexport class Finder {\n /* private fields */\n #ast;\n #astCache;\n #descendant;\n #document;\n #documentCache;\n #event;\n #focus;\n #invalidate;\n #invalidateResults;\n #lastFocusVisible;\n #node;\n #nodes;\n #noexcept;\n #qswalker;\n #results;\n #root;\n #shadow;\n #verifyShadowHost;\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.#astCache = new WeakMap();\n this.#documentCache = new WeakMap();\n this.#invalidateResults = new WeakMap();\n this.#results = new WeakMap();\n this.#event = null;\n this.#focus = null;\n this.#lastFocusVisible = null;\n this._registerEventListeners();\n }\n\n /**\n * handle error\n * @param {Error} e - Error\n * @param {object} opt - options\n * @throws Error\n * @returns {void}\n */\n onError(e, opt) {\n const noexcept = opt?.noexcept ?? this.#noexcept;\n if (!noexcept) {\n if (e instanceof DOMException ||\n e instanceof this.#window.DOMException) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else {\n throw new this.#window.DOMException(e.message, e.name);\n }\n } else if (e.name in this.#window) {\n throw new this.#window[e.name](e.message);\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {object} [opt.event] - MouseEvent, KeyboardEvent\n * @param {boolean} [opt.noexcept] - no exception\n * @param {boolean} [opt.warn] - console warn\n * @returns {object} - finder\n */\n setup(selector, node, opt = {}) {\n const { noexcept, warn } = opt;\n this.#noexcept = !!noexcept;\n this.#warn = !!warn;\n this.#node = node;\n [\n this.#document,\n this.#root,\n this.#walker,\n this.#shadow\n ] = resolveContent(node);\n [\n this.#ast,\n this.#nodes\n ] = this._correspond(selector);\n this.#invalidateResults = new WeakMap();\n this.#walkers = new WeakMap();\n this.#verifyShadowHost = null;\n return this;\n }\n\n /**\n * register event listeners\n * @private\n * @returns {Array.<void>} - results\n */\n _registerEventListeners() {\n const opt = {\n capture: true,\n passive: true\n };\n const func = [];\n const focusKeys = ['focus', 'focusin'];\n for (const key of focusKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n this.#focus = evt;\n }, opt));\n }\n const keyboardKeys = ['keydown', 'keyup'];\n for (const key of keyboardKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n const { key } = evt;\n if (!KEY_MODIFIER.includes(key)) {\n this.#event = evt;\n }\n }, opt));\n }\n const mouseKeys = [\n 'mouseover', 'mousedown', 'mouseup', 'click', 'mouseout'\n ];\n for (const key of mouseKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n this.#event = evt;\n }, opt));\n }\n return func;\n }\n\n /**\n * correspond ast and nodes\n * @private\n * @param {string} selector - CSS selector\n * @returns {Array.<Array.<object|undefined>>} - array of ast and nodes\n */\n _correspond(selector) {\n const nodes = [];\n this.#descendant = false;\n this.#invalidate = false;\n let ast;\n if (this.#documentCache.has(this.#document)) {\n const cachedItem = this.#documentCache.get(this.#document);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n ast = item.ast;\n this.#descendant = item.descendant;\n this.#invalidate = item.invalidate;\n }\n }\n if (ast) {\n const l = ast.length;\n for (let i = 0; i < l; i++) {\n ast[i].collected = false;\n ast[i].dir = null;\n ast[i].filtered = false;\n ast[i].find = false;\n nodes[i] = [];\n }\n } else {\n let cssAst;\n try {\n cssAst = parseSelector(selector);\n } catch (e) {\n this.onError(e);\n }\n const { branches, info } = walkAST(cssAst);\n const {\n hasHasPseudoFunc, hasLogicalPseudoFunc, hasNthChildOfSelector\n } = info;\n let invalidate =\n hasHasPseudoFunc || !!(hasLogicalPseudoFunc && hasNthChildOfSelector);\n let descendant = false;\n let i = 0;\n ast = [];\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n let itemName = item.name;\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n throw new DOMException(`Invalid selector ${selector}`,\n SYNTAX_ERR);\n }\n if (itemName === '+' || itemName === '~') {\n invalidate = true;\n } else {\n descendant = true;\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (item) {\n if (itemName && typeof itemName === 'string') {\n itemName = unescapeSelector(itemName);\n if (typeof itemName === 'string' && itemName !== item.name) {\n item.name = itemName;\n }\n if (/[|:]/.test(itemName)) {\n item.namespace = true;\n }\n }\n leaves.add(item);\n }\n if (items.length) {\n item = items.shift();\n } else {\n branch.push({\n combo: null,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n break;\n }\n }\n }\n ast.push({\n branch,\n collected: false,\n dir: null,\n filtered: false,\n find: false\n });\n nodes[i] = [];\n i++;\n }\n let cachedItem;\n if (this.#documentCache.has(this.#document)) {\n cachedItem = this.#documentCache.get(this.#document);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant,\n invalidate\n });\n this.#documentCache.set(this.#document, cachedItem);\n this.#descendant = descendant;\n this.#invalidate = invalidate;\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * create tree walker\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @returns {object} - tree walker\n */\n _createTreeWalker(node) {\n let walker;\n if (this.#walkers.has(node)) {\n walker = this.#walkers.get(node);\n } else {\n walker = this.#document.createTreeWalker(node, WALKER_FILTER);\n this.#walkers.set(node, walker);\n }\n return walker;\n }\n\n /**\n * prepare querySelector walker\n * @private\n * @returns {object} - tree walker\n */\n _prepareQuerySelectorWalker() {\n this.#qswalker = this._createTreeWalker(this.#node);\n return this.#qswalker;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n const matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#astCache.has(selector)) {\n selectorBranches = this.#astCache.get(selector);\n } else {\n const { branches } = walkAST(selector);\n selectorBranches = branches;\n if (!this.#invalidate) {\n this.#astCache.set(selector, selectorBranches);\n }\n }\n const { branches } = walkAST(selector);\n selectorBranches = branches;\n }\n if (parentNode) {\n const walker = this.#walker;\n let refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (isVisible(refNode)) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (selectorNodes.has(refNode)) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n i++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n } else if (!selector) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n }\n }\n }\n // :nth-child()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n if (refNode && nth >= 0 && nth < l) {\n if (selectorNodes.size) {\n if (selectorNodes.has(refNode)) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(refNode);\n }\n nth += a;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n } else {\n break;\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, namespaceURI, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const walker = this.#walker;\n let refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n // :first-of-type, :last-of-type\n if (a === 0) {\n if (b > 0 && b <= l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = 0;\n while (refNode) {\n const {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n const {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n matched.add(node);\n }\n return matched;\n }\n\n /**\n * match An+B\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {string} nthName - nth pseudo-class name\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchAnPlusB(ast, node, nthName, opt) {\n const {\n nth: {\n a,\n b,\n name: nthIdentName\n },\n selector\n } = ast;\n const anbMap = new Map();\n if (nthIdentName) {\n if (nthIdentName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (nthIdentName === 'odd') {\n anbMap.set('a', 2);\n anbMap.set('b', 1);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n } else {\n if (typeof a === 'string' && /-?\\d+/.test(a)) {\n anbMap.set('a', a * 1);\n } else {\n anbMap.set('a', 0);\n }\n if (typeof b === 'string' && /-?\\d+/.test(b)) {\n anbMap.set('b', b * 1);\n } else {\n anbMap.set('b', 0);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n }\n if (nthName === 'nth-child' || nthName === 'nth-last-child') {\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 (nthName === 'nth-of-type' || nthName === 'nth-last-of-type') {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n return nodes;\n }\n return new Set();\n }\n\n /**\n * match :has() pseudo-class function\n * @private\n * @param {Array.<object>} astLeaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(astLeaves, node, opt) {\n if (Array.isArray(astLeaves) && astLeaves.length) {\n const leaves = [...astLeaves];\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 let bool = false;\n for (const nextNode of nodes) {\n bool = this._matchHasPseudoFunc(leaves, nextNode, opt);\n if (bool) {\n break;\n }\n }\n return bool;\n }\n return true;\n }\n }\n return false;\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 { astName, branches, twigBranches } = astData;\n const isShadowRoot = (opt.isShadowRoot || this.#shadow) &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE;\n if (astName === 'has') {\n let bool;\n for (const leaves of branches) {\n bool = this._matchHasPseudoFunc(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n if (isShadowRoot) {\n if (this.#verifyShadowHost) {\n return node;\n }\n } else {\n return node;\n }\n }\n } else {\n // check for invalid shadow root\n if (isShadowRoot) {\n let invalid;\n for (const branch of branches) {\n if (branch.length > 1) {\n invalid = true;\n break;\n } else if (astName === 'not') {\n const [{ type: childAstType }] = branch;\n if (childAstType !== PS_CLASS_SELECTOR) {\n invalid = true;\n break;\n }\n }\n }\n if (invalid) {\n return null;\n }\n }\n opt.forgive = astName === 'is' || astName === 'where';\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 return null;\n }\n return node;\n } else if (bool) {\n return node;\n }\n }\n return 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 * @returns {Set.<object>} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt) {\n const { children: astChildren, name: astName } = ast;\n const { localName, parentNode } = node;\n const {\n forgive,\n warn = this.#warn\n } = opt;\n const matched = new Set();\n // :has(), :is(), :not(), :where()\n if (Array.isArray(astChildren) && KEY_LOGICAL.includes(astName)) {\n if (!astChildren.length && astName !== 'is' && astName !== 'where') {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n let astData;\n if (this.#astCache.has(ast)) {\n astData = this.#astCache.get(ast);\n } else {\n const { branches } = walkAST(ast);\n if (astName === 'has') {\n // check for nested :has()\n let forgiven;\n for (const child of astChildren) {\n const item = findAST(child, leaf => {\n if (KEY_LOGICAL.includes(leaf.name) &&\n findAST(leaf, nestedLeaf => nestedLeaf.name === 'has')) {\n return leaf;\n }\n return null;\n });\n if (item) {\n const itemName = item.name;\n if (itemName === 'is' || itemName === 'where') {\n forgiven = true;\n break;\n } else {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n }\n }\n if (forgiven) {\n return matched;\n }\n astData = {\n astName,\n branches\n };\n } else {\n const twigBranches = [];\n for (const [...leaves] of branches) {\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 };\n if (!this.#invalidate) {\n this.#astCache.set(ast, astData);\n }\n }\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 if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n const [branch] = astChildren;\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n return nodes;\n } else {\n switch (astName) {\n // :dir()\n case 'dir': {\n if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n const [astChild] = astChildren;\n const res = matchDirectionPseudoClass(astChild, node);\n if (res) {\n matched.add(node);\n }\n break;\n }\n // :lang()\n case 'lang': {\n if (!astChildren.length) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n let bool;\n for (const astChild of astChildren) {\n bool = matchLanguagePseudoClass(astChild, node);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n break;\n }\n // :state()\n case 'state': {\n if (isCustomElement(node)) {\n const [{ value: stateValue }] = astChildren;\n if (stateValue) {\n if (node[stateValue]) {\n matched.add(node);\n } else {\n for (const i in node) {\n const prop = node[i];\n if (prop instanceof this.#window.ElementInternals) {\n if (prop?.states?.has(stateValue)) {\n matched.add(node);\n }\n break;\n }\n }\n }\n }\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // dropped from CSS Selectors 3\n case 'contains': {\n if (warn) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n switch (astName) {\n case 'any-link':\n case 'link': {\n if ((localName === 'a' || localName === 'area') &&\n node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if ((localName === 'a' || localName === 'area') &&\n node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#document.URL);\n const attrURL = new URL(node.getAttribute('href'), href);\n if (attrURL.origin === origin && attrURL.pathname === pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case 'hover': {\n const { target, type } = this.#event ?? {};\n if (/^(?:click|mouse(?:down|over|up))$/.test(type) &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'active': {\n const { buttons, target, type } = this.#event ?? {};\n if (type === 'mousedown' && buttons & BIT_01 &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'target': {\n const { hash } = new URL(this.#document.URL);\n if (node.id && hash === `#${node.id}` &&\n this.#document.contains(node)) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n const { hash } = new URL(this.#document.URL);\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#document.getElementById(id);\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n }\n break;\n }\n case 'scope': {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (!this.#shadow && node === this.#node) {\n matched.add(node);\n }\n } else if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus': {\n if (node === this.#document.activeElement && isFocusableArea(node)) {\n matched.add(node);\n }\n break;\n }\n case 'focus-visible': {\n if (node === this.#document.activeElement && isFocusableArea(node)) {\n let bool;\n if (isFocusVisible(node)) {\n bool = true;\n } else if (this.#focus) {\n const { relatedTarget, target: focusTarget } = this.#focus;\n if (focusTarget === node) {\n if (isFocusVisible(relatedTarget)) {\n bool = true;\n } else if (this.#event) {\n const {\n key: eventKey, target: eventTarget, type: eventType\n } = this.#event;\n // this.#event is irrelevant if eventTarget === relatedTarget\n if (eventTarget === relatedTarget) {\n if (this.#lastFocusVisible === null) {\n bool = true;\n } else if (focusTarget === this.#lastFocusVisible) {\n bool = true;\n }\n } else if (eventKey === 'Tab') {\n if ((eventType === 'keydown' && eventTarget !== node) ||\n (eventType === 'keyup' && eventTarget === node)) {\n if (eventTarget === focusTarget) {\n if (this.#lastFocusVisible === null) {\n bool = true;\n } else if (eventTarget === this.#lastFocusVisible &&\n relatedTarget === null) {\n bool = true;\n }\n } else {\n bool = true;\n }\n }\n } else if (eventKey) {\n if ((eventType === 'keydown' || eventType === 'keyup') &&\n eventTarget === node) {\n bool = true;\n }\n }\n } else if (relatedTarget === null ||\n relatedTarget === this.#lastFocusVisible) {\n bool = true;\n }\n }\n }\n if (bool) {\n this.#lastFocusVisible = node;\n matched.add(node);\n } else if (this.#lastFocusVisible === node) {\n this.#lastFocusVisible = null;\n }\n }\n break;\n }\n case 'focus-within': {\n let bool;\n let current = this.#document.activeElement;\n if (isFocusableArea(current)) {\n while (current) {\n if (current === node) {\n bool = true;\n break;\n }\n current = current.parentNode;\n }\n }\n if (bool) {\n matched.add(node);\n }\n break;\n }\n case 'open':\n case 'closed': {\n if (localName === 'details' || localName === 'dialog') {\n if (node.hasAttribute('open')) {\n if (astName === 'open') {\n matched.add(node);\n }\n } else if (astName === 'closed') {\n matched.add(node);\n }\n }\n break;\n }\n case 'disabled':\n case 'enabled': {\n const keys = [...KEY_FORM_FOCUS, 'fieldset', 'optgroup', 'option'];\n if (keys.includes(localName) ||\n isCustomElement(node, { formAssociated: true })) {\n let disabled;\n if (node.disabled || node.hasAttribute('disabled')) {\n disabled = true;\n } else if (node.localName === 'option') {\n if (parentNode.localName === 'optgroup' &&\n (parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n disabled = true;\n }\n } else if (node.localName !== 'optgroup') {\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n const walker = this.#walker;\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n disabled = true;\n }\n } else {\n disabled = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n }\n if (disabled) {\n if (astName === 'disabled') {\n matched.add(node);\n }\n } else if (astName === 'enabled') {\n matched.add(node);\n }\n }\n break;\n }\n case 'read-only':\n case 'read-write': {\n let readonly;\n let writable;\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n readonly = true;\n } else {\n writable = true;\n }\n break;\n }\n case 'input': {\n if (!node.type || KEY_INPUT_EDIT.includes(node.type)) {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n readonly = true;\n } else {\n writable = true;\n }\n }\n break;\n }\n default: {\n if (isContentEditable(node)) {\n writable = true;\n } else {\n readonly = true;\n }\n }\n }\n if (readonly) {\n if (astName === 'read-only') {\n matched.add(node);\n }\n } else if (astName === 'read-write' && writable) {\n matched.add(node);\n }\n break;\n }\n case 'placeholder-shown': {\n let placeholder;\n if (node.placeholder) {\n placeholder = node.placeholder;\n } else if (node.hasAttribute('placeholder')) {\n placeholder = node.getAttribute('placeholder');\n }\n if (typeof placeholder === 'string' && !/[\\r\\n]/.test(placeholder)) {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const keys = [...KEY_INPUT_TEXT, 'number'];\n if (keys.includes(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '') {\n matched.add(node);\n }\n }\n break;\n }\n case 'checked': {\n const attrType = node.getAttribute('type');\n if ((node.checked && localName === 'input' &&\n (attrType === 'checkbox' || attrType === 'radio')) ||\n (node.selected && localName === 'option')) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if ((node.indeterminate && localName === 'input' &&\n node.type === 'checkbox') ||\n (localName === 'progress' && !node.hasAttribute('value'))) {\n matched.add(node);\n } else if (localName === 'input' && node.type === 'radio' &&\n !node.hasAttribute('checked')) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = this.#document.documentElement;\n }\n const items = parent.getElementsByTagName('input');\n const l = items.length;\n let checked;\n for (let i = 0; i < l; i++) {\n const item = items[i];\n if (item.getAttribute('type') === 'radio') {\n if (nodeName) {\n if (item.getAttribute('name') === nodeName) {\n checked = !!item.checked;\n }\n } else if (!item.hasAttribute('name')) {\n checked = !!item.checked;\n }\n if (checked) {\n break;\n }\n }\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n const chekcKeys = ['checkbox', 'radio'];\n const resetKeys = ['button', 'reset'];\n const submitKeys = ['image', 'submit'];\n const attrType = node.getAttribute('type');\n if ((localName === 'button' &&\n !(node.hasAttribute('type') && resetKeys.includes(attrType))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n submitKeys.includes(attrType))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker = this.#walker;\n let nextNode = traverseNode(form, walker);\n nextNode = walker.firstChild();\n while (nextNode && form.contains(nextNode)) {\n const nodeName = nextNode.localName;\n const nodeAttrType = nextNode.getAttribute('type');\n let m;\n if (nodeName === 'button') {\n m = !(nextNode.hasAttribute('type') &&\n resetKeys.includes(nodeAttrType));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n submitKeys.includes(nodeAttrType);\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 chekcKeys.includes(attrType) &&\n node.hasAttribute('checked')) {\n matched.add(node);\n // option\n } else if (localName === 'option' && node.hasAttribute('selected')) {\n matched.add(node);\n }\n break;\n }\n case 'valid':\n case 'invalid': {\n const keys = [...KEY_FORM_FOCUS, 'form'];\n if (keys.includes(localName)) {\n let valid;\n if (node.checkValidity()) {\n if (node.maxLength >= 0) {\n if (node.maxLength >= node.value.length) {\n valid = true;\n }\n } else {\n valid = true;\n }\n }\n if (valid) {\n if (astName === 'valid') {\n matched.add(node);\n }\n } else if (astName === 'invalid') {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this.#walker;\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let valid;\n if (!refNode) {\n valid = true;\n } else {\n while (refNode && node.contains(refNode)) {\n if (keys.includes(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n valid = refNode.maxLength >= refNode.value.length;\n } else {\n valid = true;\n }\n } else {\n valid = false;\n }\n if (!valid) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n if (valid) {\n if (astName === 'valid') {\n matched.add(node);\n }\n } else if (astName === 'invalid') {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range':\n case 'out-of-range': {\n const keys = [...KEY_INPUT_DATE, 'number', 'range'];\n const attrType = node.getAttribute('type');\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n keys.includes(attrType)) {\n const flowed =\n node.validity.rangeUnderflow || node.validity.rangeOverflow;\n if (astName === 'out-of-range' && flowed) {\n matched.add(node);\n } else if (astName === 'in-range' && !flowed &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n attrType === 'range')) {\n matched.add(node);\n }\n }\n break;\n }\n case 'required':\n case 'optional': {\n let targetNode;\n if (localName === 'select' || localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const keys = [...KEY_INPUT_EDIT, 'checkbox', 'file', 'radio'];\n const attrType = node.getAttribute('type');\n if (keys.includes(attrType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode) {\n if (node.required || node.hasAttribute('required')) {\n if (astName === 'required') {\n matched.add(node);\n }\n } else if (astName === 'optional') {\n matched.add(node);\n }\n }\n break;\n }\n case 'root': {\n if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n let refNode = walker.firstChild();\n let bool;\n while (refNode) {\n bool = refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if ((parentNode && node === parentNode.firstElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode && node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) || node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'first-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1 === node) {\n const [node2] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node2 === node) {\n matched.add(node);\n }\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'defined': {\n if (node.hasAttribute('is') || localName.includes('-')) {\n if (isCustomElement(node)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case 'popover-open': {\n if (node.popover && isVisible(node)) {\n matched.add(node);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // legacy pseudo-elements\n case 'after':\n case 'before':\n case 'first-letter':\n case 'first-line': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n // not supported\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'fullscreen':\n case 'future':\n case 'modal':\n case 'muted':\n case 'past':\n case 'paused':\n case 'picture-in-picture':\n case 'playing':\n case 'seeking':\n case 'stalled':\n case 'user-invalid':\n case 'user-valid':\n case 'volume-locked':\n case '-webkit-autofill': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}`,\n SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match shadow host pseudo class\n * @private\n * @param {object} ast - AST\n * @param {object} node - DocumentFragment node\n * @returns {?object} - matched node\n */\n _matchShadowHostPseudoClass(ast, node) {\n const { children: astChildren, name: astName } = ast;\n if (Array.isArray(astChildren)) {\n if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n const { branches } = walkAST(astChildren[0]);\n const [branch] = branches;\n const [...leaves] = branch;\n const { host } = node;\n if (astName === 'host') {\n let bool;\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n return node;\n }\n return null;\n } else if (astName === 'host-context') {\n let parent = host;\n let bool;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n return node;\n }\n return null;\n }\n throw new DOMException(`Invalid selector :${astName}`, SYNTAX_ERR);\n } else if (astName === 'host') {\n return node;\n } else {\n throw new DOMException(`Invalid selector :${astName}`, SYNTAX_ERR);\n }\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchSelector(ast, node, opt = {}) {\n const { type: astType } = ast;\n const astName = unescapeSelector(ast.name);\n const matched = new Set();\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case ATTR_SELECTOR: {\n const res = matchAttributeSelector(ast, node);\n if (res) {\n matched.add(node);\n }\n break;\n }\n case ID_SELECTOR: {\n if (node.id === astName) {\n matched.add(node);\n }\n break;\n }\n case CLASS_SELECTOR: {\n if (node.classList.contains(astName)) {\n matched.add(node);\n }\n break;\n }\n case PS_CLASS_SELECTOR: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n }\n case TYPE_SELECTOR: {\n const res = matchTypeSelector(ast, node, opt);\n if (res) {\n matched.add(node);\n }\n break;\n }\n case PS_ELEMENT_SELECTOR:\n default: {\n matchPseudoElementSelector(astName, astType, opt);\n }\n }\n } else if (this.#shadow && astType === PS_CLASS_SELECTOR &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (KEY_LOGICAL.includes(astName)) {\n opt.isShadowRoot = true;\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n } else if (astName === 'host' || astName === 'host-context') {\n const res = this._matchShadowHostPseudoClass(ast, node, opt);\n if (res) {\n this.#verifyShadowHost = true;\n matched.add(res);\n }\n }\n }\n return matched;\n }\n\n /**\n * match leaves\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchLeaves(leaves, node, opt) {\n let result;\n if (this.#invalidate) {\n result = this.#invalidateResults.get(leaves);\n } else {\n result = this.#results.get(leaves);\n }\n if (result && result.has(node)) {\n const { matched } = result.get(node);\n return matched;\n } else {\n let cacheable = true;\n const formKeys = [...KEY_FORM_FOCUS, 'fieldset', 'form'];\n const pseudoKeys = ['any-link', 'defined', 'dir', 'link'];\n if (node.nodeType === ELEMENT_NODE && formKeys.includes(node.localName)) {\n cacheable = false;\n }\n let bool;\n for (const leaf of leaves) {\n switch (leaf.type) {\n case ATTR_SELECTOR:\n case ID_SELECTOR: {\n cacheable = false;\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (pseudoKeys.includes(leaf.name)) {\n cacheable = false;\n }\n break;\n }\n default:\n }\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n if (cacheable) {\n if (!result) {\n result = new WeakMap();\n }\n result.set(node, {\n matched: bool\n });\n if (this.#invalidate) {\n this.#invalidateResults.set(leaves, result);\n } else {\n this.#results.set(leaves, result);\n }\n }\n return bool;\n }\n }\n\n /**\n * match HTML collection\n * @private\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @returns {Set.<object>} - matched nodes\n */\n _matchHTMLCollection(items, opt) {\n if (items.length) {\n const { compound, filterLeaves } = opt;\n if (compound) {\n const nodes = new Set();\n for (const item of items) {\n const bool = this._matchLeaves(filterLeaves, item, opt);\n if (bool) {\n nodes.add(item);\n }\n }\n return nodes;\n } else {\n const arr = [].slice.call(items);\n return new Set(arr);\n }\n }\n return new Set();\n }\n\n /**\n * find descendant nodes\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} baseNode - base Element node or Element.shadowRoot\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 let nodes = new Set();\n let pending = false;\n if (this.#shadow || baseNode.nodeType !== ELEMENT_NODE) {\n pending = true;\n } else {\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n matchPseudoElementSelector(leafName, leafType, opt);\n break;\n }\n case ID_SELECTOR: {\n if (this.#root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n const node = this.#root.getElementById(leafName);\n if (node && node !== baseNode && baseNode.contains(node)) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, opt);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n }\n break;\n }\n case CLASS_SELECTOR: {\n const items = baseNode.getElementsByClassName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n break;\n }\n case TYPE_SELECTOR: {\n if (this.#document.contentType === 'text/html' &&\n !/[*|]/.test(leafName)) {\n const items = baseNode.getElementsByTagName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n } else {\n pending = true;\n }\n break;\n }\n default: {\n pending = true;\n }\n }\n }\n return {\n nodes,\n pending\n };\n }\n\n /**\n * match combinator\n * @private\n * @param {object} twig - twig\n * @param {object} node - Element node\n * @param {object} opt - option\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchCombinator(twig, node, opt) {\n const { combo, leaves } = twig;\n const { name: comboName } = combo;\n const { parentNode } = node;\n const { dir } = opt;\n const matched = new Set();\n if (dir === DIR_NEXT) {\n switch (comboName) {\n case '+': {\n const refNode = node.nextElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = traverseNode(node, walker);\n refNode = walker.nextSibling();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n const walker = this._createTreeWalker(node);\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n break;\n }\n case ' ':\n default: {\n const { nodes, pending } = this._findDescendantNodes(leaves, node);\n if (nodes.size) {\n return nodes;\n }\n if (pending) {\n const walker = this._createTreeWalker(node);\n let refNode = traverseNode(node, walker);\n refNode = walker.nextNode();\n while (refNode && node.contains(refNode)) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = walker.nextNode();\n }\n }\n }\n }\n } else {\n switch (comboName) {\n case '+': {\n const refNode = node.previousElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n if (refNode === node) {\n break;\n } else {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n refNode = walker.nextSibling();\n }\n }\n break;\n }\n case '>': {\n if (parentNode) {\n const bool = this._matchLeaves(leaves, parentNode, opt);\n if (bool) {\n matched.add(parentNode);\n }\n }\n break;\n }\n case ' ':\n default: {\n const arr = [];\n let refNode = parentNode;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n arr.push(refNode);\n }\n refNode = refNode.parentNode;\n }\n if (arr.length) {\n return new Set(arr.reverse());\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * find matched node from #qswalker\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, node) {\n const walker = this.#qswalker;\n let refNode = traverseNode(node, walker);\n let matchedNode;\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = walker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = walker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n }\n return matchedNode ?? null;\n }\n\n /**\n * match self\n * @private\n * @param {Array} leaves - AST leaves\n * @returns {Array} - [nodes, filtered]\n */\n _matchSelf(leaves) {\n const nodes = [];\n let filtered = false;\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\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 filtered = false;\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\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 let filtered = false;\n const node = this._findNode(leaves, this.#node);\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 * @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 if (items.length) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (const node of items) {\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 (const node of items) {\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 (const node of items) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n filtered = true;\n collected = true;\n }\n }\n return [nodes, filtered, collected];\n }\n\n /**\n * find entry nodes\n * @private\n * @param {object} twig - twig\n * @param {string} targetType - target type\n * @param {boolean} complex - complex selector\n * @returns {object} - collection of nodes etc.\n */\n _findEntryNodes(twig, targetType, complex) {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const compound = filterLeaves.length > 0;\n const { name: leafName, type: leafType } = leaf;\n let nodes = [];\n let collected = false;\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n matchPseudoElementSelector(leafName, leafType, {\n warn: this.#warn\n });\n break;\n }\n case ID_SELECTOR: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST &&\n this.#root.nodeType !== ELEMENT_NODE) {\n const node = this.#root.getElementById(leafName);\n if (node) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case CLASS_SELECTOR: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#root.nodeType === DOCUMENT_NODE) {\n const items = this.#root.getElementsByClassName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n case TYPE_SELECTOR: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (this.#document.contentType === 'text/html' &&\n this.#root.nodeType === DOCUMENT_NODE &&\n !/[*|]/.test(leafName)) {\n const items = this.#root.getElementsByTagName(leafName);\n if (items.length) {\n [nodes, filtered, collected] = this._findFromHTMLCollection(items, {\n complex,\n compound,\n filterLeaves,\n targetType\n });\n }\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n break;\n }\n default: {\n if (targetType !== TARGET_LINEAL &&\n (leafName === 'host' || leafName === 'host-context')) {\n let shadowRoot;\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n shadowRoot = this._matchShadowHostPseudoClass(leaf, this.#node);\n } else if (compound && this.#node.nodeType === ELEMENT_NODE) {\n shadowRoot =\n this._matchShadowHostPseudoClass(leaf, this.#node.shadowRoot);\n }\n if (shadowRoot) {\n let bool;\n if (compound) {\n for (const item of filterLeaves) {\n if (/^host(?:-context)?$/.test(item.name)) {\n const node =\n this._matchShadowHostPseudoClass(item, shadowRoot);\n bool = node === shadowRoot;\n } else if (item.name === 'has') {\n bool = this._matchPseudoClassSelector(item, shadowRoot, {})\n .has(shadowRoot);\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n } else {\n bool = true;\n }\n if (bool) {\n nodes.push(shadowRoot);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n }\n }\n return {\n collected,\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * collect nodes\n * @private\n * @param {string} targetType - target type\n * @returns {Array.<Array.<object|undefined>>} - #ast and #nodes\n */\n _collectNodes(targetType) {\n const ast = this.#ast.values();\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n const pendingItems = new Set();\n let i = 0;\n for (const { branch } of ast) {\n const branchLen = branch.length;\n const complex = branchLen > 1;\n const firstTwig = branch[0];\n let dir;\n let twig;\n if (complex) {\n const {\n combo: firstCombo,\n leaves: [{\n name: firstName,\n type: firstType\n }]\n } = firstTwig;\n const lastTwig = branch[branchLen - 1];\n const {\n leaves: [{\n name: lastName,\n type: lastType\n }]\n } = lastTwig;\n if (lastType === PS_ELEMENT_SELECTOR ||\n lastType === ID_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === PS_ELEMENT_SELECTOR ||\n firstType === ID_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === TYPE_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === TYPE_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (comboName === '+' || 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 (firstName === '*' && firstType === TYPE_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === TYPE_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else {\n let bool;\n for (const { combo, leaves: [leaf] } of branch) {\n const { name: leafName, type: leafType } = leaf;\n if (leafType === PS_CLASS_SELECTOR && leafName === 'dir') {\n bool = false;\n break;\n }\n if (!bool && combo) {\n const { name: comboName } = combo;\n if (comboName === '+' || comboName === '~') {\n bool = true;\n }\n }\n }\n if (bool) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else {\n dir = DIR_PREV;\n twig = lastTwig;\n }\n }\n } else {\n dir = DIR_PREV;\n twig = firstTwig;\n }\n const {\n collected, compound, filtered, nodes, pending\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n } else if (pending) {\n pendingItems.add(new Map([\n ['index', i],\n ['twig', twig]\n ]));\n }\n this.#ast[i].collected = collected;\n this.#ast[i].dir = dir;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n if (pendingItems.size) {\n let node;\n let walker;\n if (this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE) {\n node = this.#node;\n walker = this.#qswalker;\n } else {\n node = this.#root;\n walker = this.#walker;\n }\n let nextNode = traverseNode(node, walker);\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (nextNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(nextNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode, {\n warn: this.#warn\n });\n if (matched) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n }\n if (nextNode !== walker.currentNode) {\n nextNode = traverseNode(nextNode, walker);\n }\n nextNode = walker.nextNode();\n }\n }\n } else {\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[branch.length - 1];\n const complex = branch.length > 1;\n const {\n compound, filtered, nodes\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n }\n this.#ast[i].dir = DIR_PREV;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n }\n return [\n this.#ast,\n this.#nodes\n ];\n }\n\n /**\n * get combined nodes\n * @private\n * @param {object} twig - twig\n * @param {object} nodes - collection of nodes\n * @param {string} dir - direction\n * @returns {Array.<object>} - collection of matched nodes\n */\n _getCombinedNodes(twig, nodes, dir) {\n const arr = [];\n for (const node of nodes) {\n const matched = this._matchCombinator(twig, node, {\n dir,\n warn: this.#warn\n });\n if (matched.size) {\n arr.push(...matched);\n }\n }\n if (arr.length) {\n return new Set(arr);\n }\n return new Set();\n }\n\n /**\n * match node to next direction\n * @private\n * @param {Array} branch - branch\n * @param {Set.<object>} nodes - collection of Element node\n * @param {object} opt - option\n * @param {object} opt.combo - combo\n * @returns {?object} - matched node\n */\n _matchNodeNext(branch, nodes, opt) {\n const { combo, index } = opt;\n const { combo: nextCombo, leaves } = branch[index];\n const twig = {\n combo,\n leaves\n };\n const nextNodes = this._getCombinedNodes(twig, nodes, DIR_NEXT);\n if (nextNodes.size) {\n if (index === branch.length - 1) {\n const [nextNode] = sortNodes(nextNodes);\n return nextNode;\n } else {\n return this._matchNodeNext(branch, nextNodes, {\n combo: nextCombo,\n index: index + 1\n });\n }\n }\n return 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 if (nextNodes.size) {\n if (index === 0) {\n return node;\n } else {\n let matched;\n for (const nextNode of nextNodes) {\n matched = this._matchNodePrev(branch, nextNode, {\n index: index - 1\n });\n if (matched) {\n break;\n }\n }\n if (matched) {\n return node;\n }\n }\n }\n return null;\n }\n\n /**\n * find matched nodes\n * @param {string} targetType - target type\n * @returns {Set.<object>} - collection of matched nodes\n */\n find(targetType) {\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n this._prepareQuerySelectorWalker();\n }\n const [[...branches], collectedNodes] = this._collectNodes(targetType);\n const l = branches.length;\n let sort;\n let nodes = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, collected, dir, find } = branches[i];\n const branchLen = branch.length;\n if (branchLen && find) {\n const entryNodes = collectedNodes[i];\n const entryNodesLen = entryNodes.length;\n const lastIndex = branchLen - 1;\n if (lastIndex === 0) {\n if ((targetType === TARGET_ALL || targetType === TARGET_FIRST) &&\n this.#node.nodeType === ELEMENT_NODE) {\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n if (node !== this.#node && this.#node.contains(node)) {\n nodes.add(node);\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...entryNodes]);\n sort = true;\n } else {\n nodes = new Set(entryNodes);\n }\n } else {\n const [node] = entryNodes;\n nodes.add(node);\n }\n } else if (targetType === TARGET_ALL) {\n if (dir === DIR_NEXT) {\n let { combo } = branch[0];\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const twig = {\n combo,\n leaves\n };\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === lastIndex) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...nextNodes]);\n sort = true;\n } else {\n nodes = nextNodes;\n }\n } else {\n combo = nextCombo;\n }\n } else {\n break;\n }\n }\n }\n } else {\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === 0) {\n nodes.add(node);\n if (branchLen > 1 && nodes.size > 1) {\n sort = true;\n }\n }\n } else {\n break;\n }\n }\n }\n }\n } else if (targetType === TARGET_FIRST && dir === DIR_NEXT) {\n const { combo: entryCombo } = branch[0];\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodeNext(branch, new Set([node]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n nodes.add(matched);\n break;\n }\n }\n if (!matched && !collected) {\n const { leaves: entryLeaves } = branch[0];\n const [entryNode] = entryNodes;\n let refNode = this._findNode(entryLeaves, entryNode);\n while (refNode) {\n matched = this._matchNodeNext(branch, new Set([refNode]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n nodes.add(matched);\n break;\n }\n refNode = this._findNode(entryLeaves, refNode);\n }\n }\n } else {\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodePrev(branch, node, {\n index: lastIndex - 1\n });\n if (matched) {\n nodes.add(node);\n break;\n }\n }\n if (!matched && !collected && targetType === TARGET_FIRST) {\n const { leaves: entryLeaves } = branch[lastIndex];\n const [entryNode] = entryNodes;\n let refNode = this._findNode(entryLeaves, entryNode);\n while (refNode) {\n matched = this._matchNodePrev(branch, refNode, {\n index: lastIndex - 1\n });\n if (matched) {\n nodes.add(refNode);\n break;\n }\n refNode = this._findNode(entryLeaves, refNode);\n }\n }\n }\n }\n }\n if (targetType === TARGET_FIRST) {\n nodes.delete(this.#node);\n if (nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n } else if (targetType === TARGET_ALL) {\n nodes.delete(this.#node);\n if (sort && nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n }\n return nodes;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_matcher", "import_parser", "import_utility", "import_constant", "DIR_NEXT", "DIR_PREV", "#ast", "#astCache", "#descendant", "#document", "#documentCache", "#event", "#focus", "#invalidate", "#invalidateResults", "#lastFocusVisible", "#node", "#nodes", "#noexcept", "#qswalker", "#results", "#root", "#shadow", "#verifyShadowHost", "#walker", "#walkers", "#warn", "#window", "window", "e", "opt", "selector", "node", "noexcept", "warn", "func", "focusKeys", "key", "evt", "keyboardKeys", "mouseKeys", "nodes", "ast", "cachedItem", "item", "l", "i", "cssAst", "branches", "info", "hasHasPseudoFunc", "hasLogicalPseudoFunc", "hasNthChildOfSelector", "invalidate", "descendant", "items", "branch", "leaves", "itemName", "nextItem", "walker", "anb", "b", "reverse", "parentNode", "matched", "selectorBranches", "refNode", "selectorNodes", "bool", "nth", "j", "m", "a", "localName", "namespaceURI", "prefix", "itemLocalName", "itemNamespaceURI", "itemPrefix", "nthName", "nthIdentName", "anbMap", "astLeaves", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "isShadowRoot", "invalid", "childAstType", "lastIndex", "nextNodes", "arr", "astChildren", "forgive", "css", "forgiven", "child", "nestedLeaf", "leavesSet", "res", "astChild", "stateValue", "prop", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "current", "relatedTarget", "focusTarget", "eventKey", "eventTarget", "eventType", "disabled", "parent", "readonly", "writable", "placeholder", "targetNode", "attrType", "nodeName", "checked", "chekcKeys", "resetKeys", "submitKeys", "form", "nodeAttrType", "keys", "valid", "flowed", "node1", "node2", "host", "astType", "result", "cacheable", "formKeys", "pseudoKeys", "compound", "filterLeaves", "baseNode", "leafName", "pending", "comboName", "dir", "matchedNode", "filtered", "complex", "targetType", "collected", "shadowRoot", "pendingItems", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItem", "index", "nextCombo", "collectedNodes", "sort", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode"]
4
+ "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport {\n matchAttributeSelector, matchDirectionPseudoClass, matchLanguagePseudoClass,\n matchPseudoElementSelector, matchTypeSelector\n} from './matcher.js';\nimport {\n findAST, generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\nimport {\n isContentEditable, isCustomElement, isFocusVisible, isFocusableArea,\n isVisible, resolveContent, sortNodes, traverseNode\n} from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR, BIT_01, CLASS_SELECTOR, COMBINATOR, DOCUMENT_FRAGMENT_NODE,\n ELEMENT_NODE, ID_SELECTOR, KEY_FORM_FOCUS, KEY_INPUT_DATE, KEY_INPUT_EDIT,\n KEY_INPUT_TEXT, KEY_LOGICAL, KEY_MODIFIER, NOT_SUPPORTED_ERR,\n PS_CLASS_SELECTOR, PS_ELEMENT_SELECTOR, SHOW_ALL, SYNTAX_ERR, TARGET_ALL,\n TARGET_FIRST, TARGET_LINEAL, TARGET_SELF, TEXT_NODE, TYPE_SELECTOR,\n WALKER_FILTER\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: Array<Ast | undefined>\n * #nodes: Array<Nodes>\n * Ast: {\n * branch: Array<Branch | undefined>,\n * dir: string | null,\n * filtered: boolean,\n * find: boolean\n * }\n * Branch: Array<Twig>\n * Twig: {\n * combo: Leaf | null,\n * leaves: Array<Leaf>\n * }\n * Leaf: {\n * children: Array<Leaf | undefined> | null,\n * loc: null,\n * type: string\n * }\n * Nodes: Array<HTMLElement | undefined>\n */\nexport class Finder {\n /* private fields */\n #ast;\n #astCache;\n #descendant;\n #document;\n #documentCache;\n #event;\n #focus;\n #invalidate;\n #invalidateResults;\n #lastFocusVisible;\n #node;\n #nodes;\n #noexcept;\n #qswalker;\n #results;\n #root;\n #selector;\n #shadow;\n #verifyShadowHost;\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.#astCache = new WeakMap();\n this.#documentCache = new WeakMap();\n this.#invalidateResults = new WeakMap();\n this.#results = new WeakMap();\n this.#event = null;\n this.#focus = null;\n this.#lastFocusVisible = null;\n this._registerEventListeners();\n }\n\n /**\n * handle error\n * @param {Error} e - Error\n * @param {object} opt - options\n * @throws Error\n * @returns {void}\n */\n onError(e, opt) {\n const noexcept = opt?.noexcept ?? this.#noexcept;\n if (!noexcept) {\n if (e instanceof DOMException ||\n e instanceof this.#window.DOMException) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else {\n throw new this.#window.DOMException(e.message, e.name);\n }\n } else if (e.name in this.#window) {\n throw new this.#window[e.name](e.message);\n } else {\n throw e;\n }\n }\n }\n\n /**\n * setup finder\n * @param {string} selector - CSS selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {object} [opt.event] - MouseEvent, KeyboardEvent\n * @param {boolean} [opt.noexcept] - no exception\n * @param {boolean} [opt.warn] - console warn\n * @returns {object} - finder\n */\n setup(selector, node, opt = {}) {\n const { noexcept, warn } = opt;\n this.#noexcept = !!noexcept;\n this.#warn = !!warn;\n this.#node = node;\n [\n this.#document,\n this.#root,\n this.#shadow\n ] = resolveContent(node);\n this.#selector = selector;\n [\n this.#ast,\n this.#nodes\n ] = this._correspond(selector);\n this.#invalidateResults = new WeakMap();\n this.#walkers = new WeakMap();\n this.#verifyShadowHost = null;\n return this;\n }\n\n /**\n * register event listeners\n * @private\n * @returns {Array.<void>} - results\n */\n _registerEventListeners() {\n const opt = {\n capture: true,\n passive: true\n };\n const func = [];\n const focusKeys = ['focus', 'focusin'];\n for (const key of focusKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n this.#focus = evt;\n }, opt));\n }\n const keyboardKeys = ['keydown', 'keyup'];\n for (const key of keyboardKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n const { key } = evt;\n if (!KEY_MODIFIER.includes(key)) {\n this.#event = evt;\n }\n }, opt));\n }\n const mouseKeys = [\n 'mouseover', 'mousedown', 'mouseup', 'click', 'mouseout'\n ];\n for (const key of mouseKeys) {\n func.push(this.#window.addEventListener(key, evt => {\n this.#event = evt;\n }, opt));\n }\n return func;\n }\n\n /**\n * correspond ast and nodes\n * @private\n * @param {string} selector - CSS selector\n * @returns {Array.<Array.<object|undefined>>} - array of ast and nodes\n */\n _correspond(selector) {\n const nodes = [];\n this.#descendant = false;\n this.#invalidate = false;\n let ast;\n if (this.#documentCache.has(this.#document)) {\n const cachedItem = this.#documentCache.get(this.#document);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n ast = item.ast;\n this.#descendant = item.descendant;\n this.#invalidate = item.invalidate;\n }\n }\n if (ast) {\n const l = ast.length;\n for (let i = 0; i < l; i++) {\n ast[i].dir = null;\n ast[i].filtered = false;\n ast[i].find = false;\n nodes[i] = [];\n }\n } else {\n let cssAst;\n try {\n cssAst = parseSelector(selector);\n } catch (e) {\n this.onError(e);\n }\n const { branches, info } = walkAST(cssAst);\n const {\n hasHasPseudoFunc, hasLogicalPseudoFunc, hasNthChildOfSelector\n } = info;\n let invalidate =\n hasHasPseudoFunc || !!(hasLogicalPseudoFunc && hasNthChildOfSelector);\n let descendant = false;\n let i = 0;\n ast = [];\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n let itemName = item.name;\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n throw new DOMException(`Invalid selector ${selector}`,\n SYNTAX_ERR);\n }\n if (itemName === '+' || itemName === '~') {\n invalidate = true;\n } else {\n descendant = true;\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (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 dir: null,\n filtered: false,\n find: false\n });\n nodes[i] = [];\n i++;\n }\n let cachedItem;\n if (this.#documentCache.has(this.#document)) {\n cachedItem = this.#documentCache.get(this.#document);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant,\n invalidate\n });\n this.#documentCache.set(this.#document, cachedItem);\n this.#descendant = descendant;\n this.#invalidate = invalidate;\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * create tree walker\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} opt - options\n * @param {boolean} [opt.force] - force new tree walker\n * @param {number} [opt.whatToShow] - NodeFilter whatToShow\n * @returns {object} - tree walker\n */\n _createTreeWalker(node, opt = {}) {\n const { force = false, whatToShow = WALKER_FILTER } = opt;\n let walker;\n if (force) {\n walker = this.#document.createTreeWalker(node, whatToShow);\n } else if (this.#walkers.has(node)) {\n walker = this.#walkers.get(node);\n } else {\n walker = this.#document.createTreeWalker(node, whatToShow);\n this.#walkers.set(node, walker);\n }\n return walker;\n }\n\n /**\n * prepare querySelector walker\n * @private\n * @returns {object} - tree walker\n */\n _prepareQuerySelectorWalker() {\n this.#qswalker = this._createTreeWalker(this.#node);\n return this.#qswalker;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n const matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#astCache.has(selector)) {\n selectorBranches = this.#astCache.get(selector);\n } else {\n const { branches } = walkAST(selector);\n selectorBranches = branches;\n if (!this.#invalidate) {\n this.#astCache.set(selector, selectorBranches);\n }\n }\n const { branches } = walkAST(selector);\n selectorBranches = branches;\n }\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode, {\n force: true\n });\n let refNode = walker.firstChild();\n const selectorNodes = new Set();\n let l = 0;\n if (selectorBranches) {\n while (refNode) {\n if (isVisible(refNode)) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n }\n l++;\n refNode = walker.nextSibling();\n }\n } else {\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (selectorNodes.has(refNode)) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n i++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n } else if (!selector) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n while (refNode) {\n if (i === b - 1) {\n matched.add(refNode);\n break;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n }\n }\n }\n // :nth-child()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let i = 0;\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n if (refNode && nth >= 0 && nth < l) {\n if (selectorNodes.size) {\n if (selectorNodes.has(refNode)) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n } else if (i === nth) {\n if (!selector) {\n matched.add(refNode);\n }\n nth += a;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n i++;\n } else {\n break;\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, namespaceURI, parentNode, prefix } = node;\n const matched = new Set();\n if (parentNode) {\n const walker = this._createTreeWalker(parentNode);\n let refNode = traverseNode(parentNode, walker);\n refNode = walker.firstChild();\n let l = 0;\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n // :first-of-type, :last-of-type\n if (a === 0) {\n if (b > 0 && b <= l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = 0;\n while (refNode) {\n const {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n refNode = traverseNode(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n let j = a > 0 ? 0 : b - 1;\n while (refNode) {\n const {\n localName: itemLocalName, namespaceURI: itemNamespaceURI,\n prefix: itemPrefix\n } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix &&\n itemNamespaceURI === namespaceURI) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n return new Set(m.reverse());\n }\n } else if (node === this.#root && (a + b) === 1) {\n matched.add(node);\n }\n return matched;\n }\n\n /**\n * match An+B\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {string} nthName - nth pseudo-class name\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchAnPlusB(ast, node, nthName, opt) {\n const {\n nth: {\n a,\n b,\n name: nthIdentName\n },\n selector\n } = ast;\n const anbMap = new Map();\n if (nthIdentName) {\n if (nthIdentName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (nthIdentName === 'odd') {\n anbMap.set('a', 2);\n anbMap.set('b', 1);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n } else {\n if (typeof a === 'string' && /-?\\d+/.test(a)) {\n anbMap.set('a', a * 1);\n } else {\n anbMap.set('a', 0);\n }\n if (typeof b === 'string' && /-?\\d+/.test(b)) {\n anbMap.set('b', b * 1);\n } else {\n anbMap.set('b', 0);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n }\n if (nthName === 'nth-child' || nthName === 'nth-last-child') {\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 (nthName === 'nth-of-type' || nthName === 'nth-last-of-type') {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n return nodes;\n }\n return new Set();\n }\n\n /**\n * match :has() pseudo-class function\n * @private\n * @param {Array.<object>} astLeaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(astLeaves, node, opt) {\n if (Array.isArray(astLeaves) && astLeaves.length) {\n const leaves = [...astLeaves];\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 let bool = false;\n for (const nextNode of nodes) {\n bool = this._matchHasPseudoFunc(leaves, nextNode, opt);\n if (bool) {\n break;\n }\n }\n return bool;\n }\n return true;\n }\n }\n return false;\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 { astName, branches, twigBranches } = astData;\n const isShadowRoot = (opt.isShadowRoot || this.#shadow) &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE;\n if (astName === 'has') {\n let bool;\n for (const leaves of branches) {\n bool = this._matchHasPseudoFunc(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n if (isShadowRoot) {\n if (this.#verifyShadowHost) {\n return node;\n }\n } else {\n return node;\n }\n }\n } else {\n // check for invalid shadow root\n if (isShadowRoot) {\n let invalid;\n for (const branch of branches) {\n if (branch.length > 1) {\n invalid = true;\n break;\n } else if (astName === 'not') {\n const [{ type: childAstType }] = branch;\n if (childAstType !== PS_CLASS_SELECTOR) {\n invalid = true;\n break;\n }\n }\n }\n if (invalid) {\n return null;\n }\n }\n opt.forgive = astName === 'is' || astName === 'where';\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 return null;\n }\n return node;\n } else if (bool) {\n return node;\n }\n }\n return 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 * @returns {Set.<object>} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt) {\n const { children: astChildren, name: astName } = ast;\n const { localName, parentNode } = node;\n const {\n forgive,\n warn = this.#warn\n } = opt;\n const matched = new Set();\n // :has(), :is(), :not(), :where()\n if (Array.isArray(astChildren) && KEY_LOGICAL.includes(astName)) {\n if (!astChildren.length && astName !== 'is' && astName !== 'where') {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n let astData;\n if (this.#astCache.has(ast)) {\n astData = this.#astCache.get(ast);\n } else {\n const { branches } = walkAST(ast);\n if (astName === 'has') {\n // check for nested :has()\n let forgiven;\n for (const child of astChildren) {\n const item = findAST(child, leaf => {\n if (KEY_LOGICAL.includes(leaf.name) &&\n findAST(leaf, nestedLeaf => nestedLeaf.name === 'has')) {\n return leaf;\n }\n return null;\n });\n if (item) {\n const itemName = item.name;\n if (itemName === 'is' || itemName === 'where') {\n forgiven = true;\n break;\n } else {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n }\n }\n if (forgiven) {\n return matched;\n }\n astData = {\n astName,\n branches\n };\n } else {\n const twigBranches = [];\n for (const [...leaves] of branches) {\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 };\n if (!this.#invalidate) {\n this.#astCache.set(ast, astData);\n }\n }\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 if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n const [branch] = astChildren;\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n return nodes;\n } else {\n switch (astName) {\n // :dir()\n case 'dir': {\n if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n const [astChild] = astChildren;\n const res = matchDirectionPseudoClass(astChild, node);\n if (res) {\n matched.add(node);\n }\n break;\n }\n // :lang()\n case 'lang': {\n if (!astChildren.length) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n let bool;\n for (const astChild of astChildren) {\n bool = matchLanguagePseudoClass(astChild, node);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n break;\n }\n // :state()\n case 'state': {\n if (isCustomElement(node)) {\n const [{ value: stateValue }] = astChildren;\n if (stateValue) {\n if (node[stateValue]) {\n matched.add(node);\n } else {\n for (const i in node) {\n const prop = node[i];\n if (prop instanceof this.#window.ElementInternals) {\n if (prop?.states?.has(stateValue)) {\n matched.add(node);\n }\n break;\n }\n }\n }\n }\n }\n break;\n }\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // dropped from CSS Selectors 3\n case 'contains': {\n if (warn) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}()`,\n SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n switch (astName) {\n case 'any-link':\n case 'link': {\n if ((localName === 'a' || localName === 'area') &&\n node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if ((localName === 'a' || localName === 'area') &&\n node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#document.URL);\n const attrURL = new URL(node.getAttribute('href'), href);\n if (attrURL.origin === origin && attrURL.pathname === pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case 'hover': {\n const { target, type } = this.#event ?? {};\n if (/^(?:click|mouse(?:down|over|up))$/.test(type) &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'active': {\n const { buttons, target, type } = this.#event ?? {};\n if (type === 'mousedown' && buttons & BIT_01 &&\n node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'target': {\n const { hash } = new URL(this.#document.URL);\n if (node.id && hash === `#${node.id}` &&\n this.#document.contains(node)) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n const { hash } = new URL(this.#document.URL);\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#document.getElementById(id);\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n }\n break;\n }\n case 'scope': {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (!this.#shadow && node === this.#node) {\n matched.add(node);\n }\n } else if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus': {\n if (node === this.#document.activeElement && isFocusableArea(node)) {\n matched.add(node);\n }\n break;\n }\n case 'focus-visible': {\n if (node === this.#document.activeElement && isFocusableArea(node)) {\n let bool;\n if (isFocusVisible(node)) {\n bool = true;\n } else if (this.#focus) {\n const { relatedTarget, target: focusTarget } = this.#focus;\n if (focusTarget === node) {\n if (isFocusVisible(relatedTarget)) {\n bool = true;\n } else if (this.#event) {\n const {\n key: eventKey, target: eventTarget, type: eventType\n } = this.#event;\n // this.#event is irrelevant if eventTarget === relatedTarget\n if (eventTarget === relatedTarget) {\n if (this.#lastFocusVisible === null) {\n bool = true;\n } else if (focusTarget === this.#lastFocusVisible) {\n bool = true;\n }\n } else if (eventKey === 'Tab') {\n if ((eventType === 'keydown' && eventTarget !== node) ||\n (eventType === 'keyup' && eventTarget === node)) {\n if (eventTarget === focusTarget) {\n if (this.#lastFocusVisible === null) {\n bool = true;\n } else if (eventTarget === this.#lastFocusVisible &&\n relatedTarget === null) {\n bool = true;\n }\n } else {\n bool = true;\n }\n }\n } else if (eventKey) {\n if ((eventType === 'keydown' || eventType === 'keyup') &&\n eventTarget === node) {\n bool = true;\n }\n }\n } else if (relatedTarget === null ||\n relatedTarget === this.#lastFocusVisible) {\n bool = true;\n }\n }\n }\n if (bool) {\n this.#lastFocusVisible = node;\n matched.add(node);\n } else if (this.#lastFocusVisible === node) {\n this.#lastFocusVisible = null;\n }\n }\n break;\n }\n case 'focus-within': {\n let bool;\n let current = this.#document.activeElement;\n if (isFocusableArea(current)) {\n while (current) {\n if (current === node) {\n bool = true;\n break;\n }\n current = current.parentNode;\n }\n }\n if (bool) {\n matched.add(node);\n }\n break;\n }\n case 'open':\n case 'closed': {\n if (localName === 'details' || localName === 'dialog') {\n if (node.hasAttribute('open')) {\n if (astName === 'open') {\n matched.add(node);\n }\n } else if (astName === 'closed') {\n matched.add(node);\n }\n }\n break;\n }\n case 'disabled':\n case 'enabled': {\n const keys = [...KEY_FORM_FOCUS, 'fieldset', 'optgroup', 'option'];\n if (keys.includes(localName) ||\n isCustomElement(node, { formAssociated: true })) {\n let disabled;\n if (node.disabled || node.hasAttribute('disabled')) {\n disabled = true;\n } else if (node.localName === 'option') {\n if (parentNode.localName === 'optgroup' &&\n (parentNode.disabled ||\n parentNode.hasAttribute('disabled'))) {\n disabled = true;\n }\n } else if (node.localName !== 'optgroup') {\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset' &&\n (parent.disabled || parent.hasAttribute('disabled'))) {\n let refNode = parent.firstElementChild;\n while (refNode) {\n if (refNode.localName === 'legend') {\n break;\n }\n refNode = refNode.nextElementSibling;\n }\n if (refNode) {\n if (!refNode.contains(node)) {\n disabled = true;\n }\n } else {\n disabled = true;\n }\n break;\n } else if (parent.localName === 'form') {\n break;\n } else if (parent.parentNode?.nodeType === ELEMENT_NODE) {\n if (parent.parentNode.localName === 'form') {\n break;\n } else {\n parent = parent.parentNode;\n }\n } else {\n break;\n }\n }\n }\n if (disabled) {\n if (astName === 'disabled') {\n matched.add(node);\n }\n } else if (astName === 'enabled') {\n matched.add(node);\n }\n }\n break;\n }\n case 'read-only':\n case 'read-write': {\n let readonly;\n let writable;\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n readonly = true;\n } else {\n writable = true;\n }\n break;\n }\n case 'input': {\n if (!node.type || KEY_INPUT_EDIT.includes(node.type)) {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n readonly = true;\n } else {\n writable = true;\n }\n }\n break;\n }\n default: {\n if (isContentEditable(node)) {\n writable = true;\n } else {\n readonly = true;\n }\n }\n }\n if (readonly) {\n if (astName === 'read-only') {\n matched.add(node);\n }\n } else if (astName === 'read-write' && writable) {\n matched.add(node);\n }\n break;\n }\n case 'placeholder-shown': {\n let placeholder;\n if (node.placeholder) {\n placeholder = node.placeholder;\n } else if (node.hasAttribute('placeholder')) {\n placeholder = node.getAttribute('placeholder');\n }\n if (typeof placeholder === 'string' && !/[\\r\\n]/.test(placeholder)) {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const keys = [...KEY_INPUT_TEXT, 'number'];\n if (keys.includes(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '') {\n matched.add(node);\n }\n }\n break;\n }\n case 'checked': {\n const attrType = node.getAttribute('type');\n if ((node.checked && localName === 'input' &&\n (attrType === 'checkbox' || attrType === 'radio')) ||\n (node.selected && localName === 'option')) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if ((node.indeterminate && localName === 'input' &&\n node.type === 'checkbox') ||\n (localName === 'progress' && !node.hasAttribute('value'))) {\n matched.add(node);\n } else if (localName === 'input' && node.type === 'radio' &&\n !node.hasAttribute('checked')) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = this.#document.documentElement;\n }\n const walker = this._createTreeWalker(parent);\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n let checked;\n while (refNode) {\n if (refNode.localName === 'input' &&\n refNode.getAttribute('type') === 'radio') {\n if (refNode.hasAttribute('name')) {\n if (refNode.getAttribute('name') === nodeName) {\n checked = !!refNode.checked;\n }\n } else {\n checked = !!refNode.checked;\n }\n if (checked) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n const chekcKeys = ['checkbox', 'radio'];\n const resetKeys = ['button', 'reset'];\n const submitKeys = ['image', 'submit'];\n const attrType = node.getAttribute('type');\n if ((localName === 'button' &&\n !(node.hasAttribute('type') && resetKeys.includes(attrType))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n submitKeys.includes(attrType))) {\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._createTreeWalker(form);\n let refNode = traverseNode(form, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const nodeName = refNode.localName;\n const nodeAttrType = refNode.getAttribute('type');\n let m;\n if (nodeName === 'button') {\n m = !(refNode.hasAttribute('type') &&\n resetKeys.includes(nodeAttrType));\n } else if (nodeName === 'input') {\n m = refNode.hasAttribute('type') &&\n submitKeys.includes(nodeAttrType);\n }\n if (m) {\n if (refNode === node) {\n matched.add(node);\n }\n break;\n }\n refNode = walker.nextNode();\n }\n }\n // input[type=\"checkbox\"], input[type=\"radio\"]\n } else if (localName === 'input' && node.hasAttribute('type') &&\n chekcKeys.includes(attrType) &&\n node.hasAttribute('checked')) {\n matched.add(node);\n // option\n } else if (localName === 'option' && node.hasAttribute('selected')) {\n matched.add(node);\n }\n break;\n }\n case 'valid':\n case 'invalid': {\n const keys = [...KEY_FORM_FOCUS, 'form'];\n if (keys.includes(localName)) {\n let valid;\n if (node.checkValidity()) {\n if (node.maxLength >= 0) {\n if (node.maxLength >= node.value.length) {\n valid = true;\n }\n } else {\n valid = true;\n }\n }\n if (valid) {\n if (astName === 'valid') {\n matched.add(node);\n }\n } else if (astName === 'invalid') {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this._createTreeWalker(node);\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let valid;\n if (!refNode) {\n valid = true;\n } else {\n while (refNode) {\n if (keys.includes(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n valid = refNode.maxLength >= refNode.value.length;\n } else {\n valid = true;\n }\n } else {\n valid = false;\n }\n if (!valid) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n if (valid) {\n if (astName === 'valid') {\n matched.add(node);\n }\n } else if (astName === 'invalid') {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range':\n case 'out-of-range': {\n const keys = [...KEY_INPUT_DATE, 'number', 'range'];\n const attrType = node.getAttribute('type');\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n keys.includes(attrType)) {\n const flowed =\n node.validity.rangeUnderflow || node.validity.rangeOverflow;\n if (astName === 'out-of-range' && flowed) {\n matched.add(node);\n } else if (astName === 'in-range' && !flowed &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n attrType === 'range')) {\n matched.add(node);\n }\n }\n break;\n }\n case 'required':\n case 'optional': {\n let targetNode;\n if (localName === 'select' || localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const keys = [...KEY_INPUT_EDIT, 'checkbox', 'file', 'radio'];\n const attrType = node.getAttribute('type');\n if (keys.includes(attrType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode) {\n if (node.required || node.hasAttribute('required')) {\n if (astName === 'required') {\n matched.add(node);\n }\n } else if (astName === 'optional') {\n matched.add(node);\n }\n }\n break;\n }\n case 'root': {\n if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const walker = this._createTreeWalker(node, {\n force: true,\n whatToShow: SHOW_ALL\n });\n let refNode = walker.firstChild();\n let bool;\n while (refNode) {\n bool = refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if ((parentNode && node === parentNode.firstElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode && node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) || node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'first-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'last-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node1) {\n matched.add(node1);\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'only-of-type': {\n if (parentNode) {\n const [node1] = this._collectNthOfType({\n a: 0,\n b: 1\n }, node);\n if (node1 === node) {\n const [node2] = this._collectNthOfType({\n a: 0,\n b: 1,\n reverse: true\n }, node);\n if (node2 === node) {\n matched.add(node);\n }\n }\n } else if (node === this.#root) {\n matched.add(node);\n }\n break;\n }\n case 'defined': {\n if (node.hasAttribute('is') || localName.includes('-')) {\n if (isCustomElement(node)) {\n matched.add(node);\n }\n // NOTE: MathMLElement not implemented in jsdom\n } else if (node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement) {\n matched.add(node);\n }\n break;\n }\n case 'popover-open': {\n if (node.popover && isVisible(node)) {\n matched.add(node);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n // legacy pseudo-elements\n case 'after':\n case 'before':\n case 'first-letter':\n case 'first-line': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n // not supported\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'fullscreen':\n case 'future':\n case 'modal':\n case 'muted':\n case 'past':\n case 'paused':\n case 'picture-in-picture':\n case 'playing':\n case 'seeking':\n case 'stalled':\n case 'user-invalid':\n case 'user-valid':\n case 'volume-locked':\n case '-webkit-autofill': {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n throw new DOMException(`Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n throw new DOMException(`Unknown pseudo-class :${astName}`,\n SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match shadow host pseudo class\n * @private\n * @param {object} ast - AST\n * @param {object} node - DocumentFragment node\n * @returns {?object} - matched node\n */\n _matchShadowHostPseudoClass(ast, node) {\n const { children: astChildren, name: astName } = ast;\n if (Array.isArray(astChildren)) {\n if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n const { branches } = walkAST(astChildren[0]);\n const [branch] = branches;\n const [...leaves] = branch;\n const { host } = node;\n if (astName === 'host') {\n let bool;\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n return node;\n }\n return null;\n } else if (astName === 'host-context') {\n let parent = host;\n let bool;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n throw new DOMException(`Invalid selector ${css}`, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n return node;\n }\n return null;\n }\n throw new DOMException(`Invalid selector :${astName}`, SYNTAX_ERR);\n } else if (astName === 'host') {\n return node;\n } else {\n throw new DOMException(`Invalid selector :${astName}`, SYNTAX_ERR);\n }\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchSelector(ast, node, opt = {}) {\n const { type: astType } = ast;\n const astName = unescapeSelector(ast.name);\n const matched = new Set();\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case ATTR_SELECTOR: {\n const res = matchAttributeSelector(ast, node);\n if (res) {\n matched.add(node);\n }\n break;\n }\n case ID_SELECTOR: {\n if (node.id === astName) {\n matched.add(node);\n }\n break;\n }\n case CLASS_SELECTOR: {\n if (node.classList.contains(astName)) {\n matched.add(node);\n }\n break;\n }\n case PS_CLASS_SELECTOR: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n }\n case TYPE_SELECTOR: {\n const res = matchTypeSelector(ast, node, opt);\n if (res) {\n matched.add(node);\n }\n break;\n }\n case PS_ELEMENT_SELECTOR:\n default: {\n matchPseudoElementSelector(astName, astType, opt);\n }\n }\n } else if (this.#shadow && astType === PS_CLASS_SELECTOR &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (KEY_LOGICAL.includes(astName)) {\n opt.isShadowRoot = true;\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n return nodes;\n } else if (astName === 'host' || astName === 'host-context') {\n const res = this._matchShadowHostPseudoClass(ast, node, opt);\n if (res) {\n this.#verifyShadowHost = true;\n matched.add(res);\n }\n }\n }\n return matched;\n }\n\n /**\n * match leaves\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchLeaves(leaves, node, opt) {\n let result;\n if (this.#invalidate) {\n result = this.#invalidateResults.get(leaves);\n } else {\n result = this.#results.get(leaves);\n }\n if (result && result.has(node)) {\n const { matched } = result.get(node);\n return matched;\n } else {\n let cacheable = true;\n const formKeys = [...KEY_FORM_FOCUS, 'fieldset', 'form'];\n const pseudoKeys = ['any-link', 'defined', 'dir', 'link'];\n if (node.nodeType === ELEMENT_NODE && formKeys.includes(node.localName)) {\n cacheable = false;\n }\n let bool;\n for (const leaf of leaves) {\n switch (leaf.type) {\n case ATTR_SELECTOR:\n case ID_SELECTOR: {\n cacheable = false;\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (pseudoKeys.includes(leaf.name)) {\n cacheable = false;\n }\n break;\n }\n default:\n }\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n if (cacheable) {\n if (!result) {\n result = new WeakMap();\n }\n result.set(node, {\n matched: bool\n });\n if (this.#invalidate) {\n this.#invalidateResults.set(leaves, result);\n } else {\n this.#results.set(leaves, result);\n }\n }\n return bool;\n }\n }\n\n /**\n * find descendant nodes\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} baseNode - base Element node or Element.shadowRoot\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 const nodes = new Set();\n let pending = false;\n if (this.#shadow || baseNode.nodeType !== ELEMENT_NODE) {\n pending = true;\n } else {\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n matchPseudoElementSelector(leafName, leafType, opt);\n break;\n }\n case ID_SELECTOR: {\n if (this.#root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n const node = this.#root.getElementById(leafName);\n if (node && node !== baseNode && baseNode.contains(node)) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, opt);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n }\n break;\n }\n default: {\n pending = true;\n }\n }\n }\n if (pending) {\n const walker = this._createTreeWalker(baseNode);\n let refNode = traverseNode(baseNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n nodes.add(refNode);\n }\n refNode = walker.nextNode();\n }\n }\n return nodes;\n }\n\n /**\n * match combinator\n * @private\n * @param {object} twig - twig\n * @param {object} node - Element node\n * @param {object} opt - option\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchCombinator(twig, node, opt) {\n const { combo, leaves } = twig;\n const { name: comboName } = combo;\n const { parentNode } = node;\n const { dir } = opt;\n const matched = new Set();\n if (dir === DIR_NEXT) {\n switch (comboName) {\n case '+': {\n const refNode = node.nextElementSibling;\n if (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n }\n break;\n }\n case '~': {\n if (parentNode) {\n let refNode = node.nextElementSibling;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = refNode.nextElementSibling;\n }\n }\n break;\n }\n case '>': {\n let refNode = node.firstElementChild;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, opt);\n if (bool) {\n matched.add(refNode);\n }\n refNode = refNode.nextElementSibling;\n }\n break;\n }\n case ' ':\n default: {\n const nodes = this._findDescendantNodes(leaves, node, opt);\n if (nodes.size) {\n return nodes;\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 let refNode = parentNode.firstElementChild;\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 = refNode.nextElementSibling;\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(s) from #qswalker\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node to start from\n * @param {object} opt - options\n * @param {boolean} [opt.force] - traverse only to next node\n * @param {string} [opt.targetType] - target type\n * @returns {?object|Array.<object>} - matched node / collection of nodes\n */\n _findWalker(leaves, node, opt = {}) {\n const { force, targetType } = opt;\n const walker = this.#qswalker;\n const nodes = [];\n let refNode = traverseNode(node, walker, !!force);\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = walker.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = walker.nextNode();\n }\n }\n while (refNode) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n nodes.push(refNode);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n return nodes;\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 let filtered = false;\n const bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\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 filtered = false;\n let bool = this._matchLeaves(leaves, this.#node, {\n warn: this.#warn\n });\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 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 filtered = false;\n let pending = false;\n switch (leafType) {\n case PS_ELEMENT_SELECTOR: {\n matchPseudoElementSelector(leafName, leafType, {\n warn: this.#warn\n });\n break;\n }\n case ID_SELECTOR: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else if (targetType === TARGET_FIRST &&\n this.#root.nodeType !== ELEMENT_NODE) {\n const node = this.#root.getElementById(leafName);\n if (node) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n } else {\n nodes = this._findWalker(leaves, this.#node, {\n targetType,\n });\n if (nodes.length) {\n filtered = true;\n }\n }\n break;\n }\n case CLASS_SELECTOR: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else {\n nodes = this._findWalker(leaves, this.#node, {\n targetType\n });\n if (nodes.length) {\n filtered = true;\n }\n }\n break;\n }\n case TYPE_SELECTOR: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, {\n complex\n });\n } else {\n nodes = this._findWalker(leaves, this.#node, {\n targetType\n });\n if (nodes.length) {\n filtered = true;\n }\n }\n break;\n }\n default: {\n if (targetType !== TARGET_LINEAL &&\n (leafName === 'host' || leafName === 'host-context')) {\n let shadowRoot;\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n shadowRoot = this._matchShadowHostPseudoClass(leaf, this.#node);\n } else if (compound && this.#node.nodeType === ELEMENT_NODE) {\n shadowRoot =\n this._matchShadowHostPseudoClass(leaf, this.#node.shadowRoot);\n }\n if (shadowRoot) {\n let bool;\n if (compound) {\n for (const item of filterLeaves) {\n if (/^host(?:-context)?$/.test(item.name)) {\n const node =\n this._matchShadowHostPseudoClass(item, shadowRoot);\n bool = node === shadowRoot;\n } else if (item.name === 'has') {\n bool = this._matchPseudoClassSelector(item, shadowRoot, {})\n .has(shadowRoot);\n } else {\n bool = false;\n }\n if (!bool) {\n break;\n }\n }\n } else {\n bool = true;\n }\n if (bool) {\n nodes.push(shadowRoot);\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 = this._findWalker(leaves, this.#node, {\n targetType\n });\n if (nodes.length) {\n filtered = true;\n }\n } else {\n pending = true;\n }\n }\n }\n return {\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * collect nodes\n * @private\n * @param {string} targetType - target type\n * @returns {Array.<Array.<object|undefined>>} - #ast and #nodes\n */\n _collectNodes(targetType) {\n const ast = this.#ast.values();\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n const pendingItems = new Set();\n let i = 0;\n for (const { branch } of ast) {\n const branchLen = branch.length;\n const complex = branchLen > 1;\n const firstTwig = branch[0];\n let dir;\n let twig;\n if (complex) {\n const {\n combo: firstCombo,\n leaves: [{\n name: firstName,\n type: firstType\n }]\n } = firstTwig;\n const lastTwig = branch[branchLen - 1];\n const {\n leaves: [{\n name: lastName,\n type: lastType\n }]\n } = lastTwig;\n dir = DIR_NEXT;\n twig = firstTwig;\n if (this.#selector.includes(':scope') ||\n lastType === PS_ELEMENT_SELECTOR || lastType === ID_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstName === '*' && firstType === TYPE_SELECTOR) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === TYPE_SELECTOR) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (comboName === '+' || comboName === '~') {\n dir = DIR_PREV;\n twig = lastTwig;\n }\n }\n } else {\n dir = DIR_PREV;\n twig = firstTwig;\n }\n const {\n 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].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._createTreeWalker(node);\n }\n let nextNode = traverseNode(node, walker);\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (nextNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(nextNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode, {\n warn: this.#warn\n });\n if (matched) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n }\n if (nextNode !== walker.currentNode) {\n nextNode = traverseNode(nextNode, walker);\n }\n nextNode = walker.nextNode();\n }\n }\n } else {\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[branch.length - 1];\n const complex = branch.length > 1;\n const {\n compound, filtered, nodes\n } = this._findEntryNodes(twig, targetType, complex);\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n }\n this.#ast[i].dir = DIR_PREV;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n }\n return [\n this.#ast,\n this.#nodes\n ];\n }\n\n /**\n * get combined nodes\n * @private\n * @param {object} twig - twig\n * @param {object} nodes - collection of nodes\n * @param {string} dir - direction\n * @returns {Array.<object>} - collection of matched nodes\n */\n _getCombinedNodes(twig, nodes, dir) {\n const arr = [];\n for (const node of nodes) {\n const matched = this._matchCombinator(twig, node, {\n dir,\n warn: this.#warn\n });\n if (matched.size) {\n arr.push(...matched);\n }\n }\n if (arr.length) {\n return new Set(arr);\n }\n return new Set();\n }\n\n /**\n * match node to next direction\n * @private\n * @param {Array} branch - branch\n * @param {Set.<object>} nodes - collection of Element node\n * @param {object} opt - option\n * @param {object} opt.combo - combo\n * @returns {?object} - matched node\n */\n _matchNodeNext(branch, nodes, opt) {\n const { combo, index } = opt;\n const { combo: nextCombo, leaves } = branch[index];\n const twig = {\n combo,\n leaves\n };\n const nextNodes = this._getCombinedNodes(twig, nodes, DIR_NEXT);\n if (nextNodes.size) {\n if (index === branch.length - 1) {\n const [nextNode] = sortNodes(nextNodes);\n return nextNode;\n } else {\n return this._matchNodeNext(branch, nextNodes, {\n combo: nextCombo,\n index: index + 1\n });\n }\n }\n return 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 if (nextNodes.size) {\n if (index === 0) {\n return node;\n } else {\n let matched;\n for (const nextNode of nextNodes) {\n matched = this._matchNodePrev(branch, nextNode, {\n index: index - 1\n });\n if (matched) {\n break;\n }\n }\n if (matched) {\n return node;\n }\n }\n }\n return null;\n }\n\n /**\n * find matched nodes\n * @param {string} targetType - target type\n * @returns {Set.<object>} - collection of matched nodes\n */\n find(targetType) {\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n this._prepareQuerySelectorWalker();\n }\n const [[...branches], collectedNodes] = this._collectNodes(targetType);\n const l = branches.length;\n let sort;\n let nodes = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, dir, find } = branches[i];\n const branchLen = branch.length;\n if (branchLen && find) {\n const entryNodes = collectedNodes[i];\n const entryNodesLen = entryNodes.length;\n const lastIndex = branchLen - 1;\n if (lastIndex === 0) {\n if ((targetType === TARGET_ALL || targetType === TARGET_FIRST) &&\n this.#node.nodeType === ELEMENT_NODE) {\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n if (node !== this.#node && this.#node.contains(node)) {\n nodes.add(node);\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...entryNodes]);\n sort = true;\n } else {\n nodes = new Set(entryNodes);\n }\n } else {\n const [node] = entryNodes;\n nodes.add(node);\n }\n } else if (targetType === TARGET_ALL) {\n if (dir === DIR_NEXT) {\n const { combo: firstCombo } = branch[0];\n let combo = firstCombo;\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const twig = {\n combo,\n leaves\n };\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === lastIndex) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...nextNodes]);\n sort = true;\n combo = firstCombo;\n } else {\n nodes = nextNodes;\n combo = firstCombo;\n }\n } else {\n combo = nextCombo;\n }\n } else {\n break;\n }\n }\n }\n } else {\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n nextNodes = this._getCombinedNodes(twig, nextNodes, dir);\n if (nextNodes.size) {\n if (j === 0) {\n nodes.add(node);\n if (branchLen > 1 && nodes.size > 1) {\n sort = true;\n }\n }\n } else {\n break;\n }\n }\n }\n }\n } else if (targetType === TARGET_FIRST && dir === DIR_NEXT) {\n const { combo: entryCombo } = branch[0];\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodeNext(branch, new Set([node]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n nodes.add(matched);\n break;\n }\n }\n if (!matched) {\n const { leaves: entryLeaves } = branch[0];\n const [entryNode] = entryNodes;\n let [refNode] =\n this._findWalker(entryLeaves, entryNode, {\n targetType\n });\n while (refNode) {\n matched = this._matchNodeNext(branch, new Set([refNode]), {\n combo: entryCombo,\n index: 1\n });\n if (matched) {\n nodes.add(matched);\n break;\n }\n [refNode] = this._findWalker(entryLeaves, refNode, {\n targetType,\n force: true\n });\n }\n }\n } else {\n let matched;\n for (const node of entryNodes) {\n matched = this._matchNodePrev(branch, node, {\n index: lastIndex - 1\n });\n if (matched) {\n nodes.add(node);\n break;\n }\n }\n if (!matched && targetType === TARGET_FIRST) {\n const { leaves: entryLeaves } = branch[lastIndex];\n const [entryNode] = entryNodes;\n let [refNode] = this._findWalker(entryLeaves, entryNode, {\n targetType\n });\n while (refNode) {\n matched = this._matchNodePrev(branch, refNode, {\n index: lastIndex - 1\n });\n if (matched) {\n nodes.add(refNode);\n break;\n }\n [refNode] = this._findWalker(entryLeaves, refNode, {\n targetType,\n force: true\n });\n }\n }\n }\n }\n }\n if (targetType === TARGET_FIRST) {\n nodes.delete(this.#node);\n if (nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n } else if (targetType === TARGET_ALL) {\n nodes.delete(this.#node);\n if (sort && nodes.size > 1) {\n nodes = new Set(sortNodes(nodes));\n }\n }\n return nodes;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_matcher", "import_parser", "import_utility", "import_constant", "DIR_NEXT", "DIR_PREV", "#ast", "#astCache", "#descendant", "#document", "#documentCache", "#event", "#focus", "#invalidate", "#invalidateResults", "#lastFocusVisible", "#node", "#nodes", "#noexcept", "#qswalker", "#results", "#root", "#selector", "#shadow", "#verifyShadowHost", "#walkers", "#warn", "#window", "window", "e", "opt", "selector", "node", "noexcept", "warn", "func", "focusKeys", "key", "evt", "keyboardKeys", "mouseKeys", "nodes", "ast", "cachedItem", "item", "i", "cssAst", "branches", "info", "hasHasPseudoFunc", "hasLogicalPseudoFunc", "hasNthChildOfSelector", "invalidate", "descendant", "items", "branch", "leaves", "itemName", "nextItem", "force", "whatToShow", "walker", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "refNode", "selectorNodes", "l", "bool", "nth", "j", "m", "localName", "namespaceURI", "prefix", "itemLocalName", "itemNamespaceURI", "itemPrefix", "nthName", "nthIdentName", "anbMap", "astLeaves", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "astName", "twigBranches", "isShadowRoot", "invalid", "childAstType", "lastIndex", "nextNodes", "arr", "astChildren", "forgive", "css", "forgiven", "child", "nestedLeaf", "leavesSet", "res", "astChild", "stateValue", "prop", "href", "origin", "pathname", "attrURL", "target", "type", "buttons", "hash", "id", "current", "relatedTarget", "focusTarget", "eventKey", "eventTarget", "eventType", "disabled", "parent", "readonly", "writable", "placeholder", "targetNode", "attrType", "nodeName", "checked", "chekcKeys", "resetKeys", "submitKeys", "form", "nodeAttrType", "keys", "valid", "flowed", "node1", "node2", "host", "astType", "result", "cacheable", "formKeys", "pseudoKeys", "baseNode", "filterLeaves", "compound", "leafName", "pending", "comboName", "dir", "targetType", "filtered", "complex", "shadowRoot", "pendingItems", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "pendingItem", "index", "nextCombo", "collectedNodes", "sort", "find", "entryNodes", "entryNodesLen", "n", "entryCombo", "entryLeaves", "entryNode"]
7
7
  }