@asamuzakjp/dom-selector 2.0.3-a.2 → 2.0.3-a.4

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 isCustomElementName from 'is-potential-custom-element-name';\nimport {\n getDirectionality, isContentEditable, isInclusive, isInShadowTree,\n prepareDOMObjects, sortNodes\n} from './dom-util.js';\nimport { matchSelector, matchPseudoElementSelector } from './matcher.js';\nimport {\n generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\n\n/* constants */\nimport {\n ALPHA_NUM, COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE,\n NOT_SUPPORTED_ERR, REG_LOGICAL_PSEUDO, REG_SHADOW_HOST, SELECTOR_CLASS,\n SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE,\n SHOW_ALL, SHOW_DOCUMENT, SHOW_DOCUMENT_FRAGMENT, SHOW_ELEMENT, SYNTAX_ERR,\n TEXT_NODE\n} from './constant.js';\n\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\nconst WALKER_FILTER = SHOW_DOCUMENT | SHOW_DOCUMENT_FRAGMENT | SHOW_ELEMENT;\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: [\n * {\n * branch: branch[],\n * dir: string|null,\n * filtered: boolean,\n * find: boolean\n * },\n * {\n * branch: branch[],\n * dir: string|null,\n * filtered: boolean,\n * find: boolean\n * }\n * ]\n * #nodes: [\n * [node{}, node{}],\n * [node{}, node{}, node{}]\n * ]\n * branch[]: [twig{}, twig{}]\n * twig{}: {\n * combo: leaf{}|null,\n * leaves: leaves[]\n * }\n * leaves[]: [leaf{}, leaf{}, leaf{}]\n * leaf{}: CSSTree AST object\n * node{}: Element node\n */\nexport class Finder {\n /* private fields */\n #ast;\n #cache;\n #clones;\n #document;\n #finder;\n #node;\n #nodes;\n #root;\n #selector;\n #shadow;\n #sort;\n #tree;\n #warn;\n #window;\n\n /**\n * construct\n */\n constructor() {\n this.#cache = new WeakMap();\n }\n\n /**\n * handle error\n * @private\n * @param {Error} e - Error\n * @throws Error\n * @returns {void}\n */\n _onError(e) {\n if (e instanceof DOMException ||\n (this.#window && e instanceof this.#window.DOMException)) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else if (this.#window) {\n throw new this.#window.DOMException(e.message, e.name);\n } else {\n throw e;\n }\n } else {\n throw e;\n }\n }\n\n /**\n * setup finder\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {void}\n */\n _setup(node, selector, opt = {}) {\n const { warn } = opt;\n this.#warn = !!warn;\n [this.#window, this.#document, this.#root] = prepareDOMObjects(node);\n this.#node = node;\n this.#shadow = isInShadowTree(node);\n this.#selector = selector;\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#clones = new WeakMap();\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 let ast;\n let cachedItem = this.#document && this.#cache.get(this.#document);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n ast = cachedItem.get(selector);\n if (typeof ast === 'string') {\n throw new DOMException(ast, SYNTAX_ERR);\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 if (this.#document) {\n if (!cachedItem) {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, e.message);\n this.#cache.set(this.#document, cachedItem);\n }\n this._onError(e);\n }\n const branches = walkAST(cssAst);\n ast = [];\n let i = 0;\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n const msg = `Invalid selector ${selector}`;\n if (this.#document) {\n if (!cachedItem) {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, msg);\n this.#cache.set(this.#document, cachedItem);\n }\n throw new DOMException(msg, SYNTAX_ERR);\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (item) {\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 if (this.#document) {\n if (!cachedItem) {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, ast);\n this.#cache.set(this.#document, cachedItem);\n }\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * traverse tree walker\n * @private\n * @param {object} [node] - Element node\n * @param {object} [walker] - tree walker\n * @returns {?object} - current node\n */\n _traverse(node = {}, walker = this.#tree) {\n let current;\n let refNode = walker.currentNode;\n if (node.nodeType === ELEMENT_NODE && refNode === node) {\n current = refNode;\n } else {\n if (refNode !== walker.root) {\n while (refNode) {\n if (refNode === walker.root ||\n (node.nodeType === ELEMENT_NODE && refNode === node)) {\n break;\n }\n refNode = walker.parentNode();\n }\n }\n if (node.nodeType === ELEMENT_NODE) {\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n current = refNode;\n }\n }\n return current ?? null;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n let matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#cache.has(selector)) {\n selectorBranches = this.#cache.get(selector);\n } else {\n selectorBranches = walkAST(selector);\n this.#cache.set(selector, selectorBranches);\n }\n }\n if (parentNode) {\n const walker = this.#document.createTreeWalker(parentNode, WALKER_FILTER);\n let l = 0;\n let refNode = walker.firstChild();\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n refNode = this._traverse(parentNode, walker);\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n let i = 0;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\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 let i = 0;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\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 let i = 0;\n let j = a > 0 ? 0 : b - 1;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\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 matched = new Set(m.reverse());\n }\n } else if (node === this.#root && this.#root.nodeType === ELEMENT_NODE &&\n (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, parentNode, prefix } = node;\n let matched = new Set();\n if (parentNode) {\n const walker = this.#document.createTreeWalker(parentNode, WALKER_FILTER);\n let l = 0;\n let refNode = walker.firstChild();\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 let j = 0;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n let j = a > 0 ? 0 : b - 1;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n matched = new Set(m.reverse());\n }\n } else if (node === this.#root && this.#root.nodeType === ELEMENT_NODE &&\n (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 identName = unescapeSelector(nthIdentName);\n const anbMap = new Map();\n if (identName) {\n if (identName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (identName === '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 let matched = new Set();\n if (anbMap.has('a') && anbMap.has('b')) {\n if (/^nth-(?:last-)?child$/.test(nthName)) {\n if (selector) {\n anbMap.set('selector', selector);\n }\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthChild(anb, node, opt);\n if (nodes.size) {\n matched = nodes;\n }\n } else if (/^nth-(?:last-)?of-type$/.test(nthName)) {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n if (nodes.size) {\n matched = nodes;\n }\n }\n }\n return matched;\n }\n\n /**\n * match directionality pseudo-class - :dir()\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchDirectionPseudoClass(ast, node) {\n const astName = unescapeSelector(ast.name);\n const dir = getDirectionality(node);\n let res;\n if (astName === dir) {\n res = node;\n }\n return res ?? null;\n }\n\n /**\n * match language pseudo-class - :lang()\n * @private\n * @see https://datatracker.ietf.org/doc/html/rfc4647#section-3.3.1\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchLanguagePseudoClass(ast, node) {\n const astName = unescapeSelector(ast.name);\n let res;\n if (astName === '*') {\n if (node.hasAttribute('lang')) {\n if (node.getAttribute('lang')) {\n res = node;\n }\n } else {\n let parent = node.parentNode;\n while (parent) {\n if (parent.nodeType === ELEMENT_NODE) {\n if (parent.hasAttribute('lang')) {\n if (parent.getAttribute('lang')) {\n res = node;\n }\n break;\n }\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n }\n } else if (astName) {\n const langPart = `(?:-${ALPHA_NUM})*`;\n const regLang = new RegExp(`^(?:\\\\*-)?${ALPHA_NUM}${langPart}$`, 'i');\n if (regLang.test(astName)) {\n let regExtendedLang;\n if (astName.indexOf('-') > -1) {\n const [langMain, langSub, ...langRest] = astName.split('-');\n let extendedMain;\n if (langMain === '*') {\n extendedMain = `${ALPHA_NUM}${langPart}`;\n } else {\n extendedMain = `${langMain}${langPart}`;\n }\n const extendedSub = `-${langSub}${langPart}`;\n const len = langRest.length;\n let extendedRest = '';\n if (len) {\n for (let i = 0; i < len; i++) {\n extendedRest += `-${langRest[i]}${langPart}`;\n }\n }\n regExtendedLang =\n new RegExp(`^${extendedMain}${extendedSub}${extendedRest}$`, 'i');\n } else {\n regExtendedLang = new RegExp(`^${astName}${langPart}$`, 'i');\n }\n if (node.hasAttribute('lang')) {\n if (regExtendedLang.test(node.getAttribute('lang'))) {\n res = node;\n }\n } else {\n let parent = node.parentNode;\n while (parent) {\n if (parent.nodeType === ELEMENT_NODE) {\n if (parent.hasAttribute('lang')) {\n const value = parent.getAttribute('lang');\n if (regExtendedLang.test(value)) {\n res = node;\n }\n break;\n }\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n }\n }\n }\n return res ?? null;\n }\n\n /**\n * match :has() pseudo-class function\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(leaves, node, opt = {}) {\n let bool;\n if (Array.isArray(leaves) && leaves.length) {\n const [leaf] = leaves;\n const { type: leafType } = leaf;\n let combo;\n if (leafType === COMBINATOR) {\n combo = leaves.shift();\n } else {\n combo = {\n name: ' ',\n type: COMBINATOR\n };\n }\n const twigLeaves = [];\n while (leaves.length) {\n const [item] = leaves;\n const { type: itemType } = item;\n if (itemType === COMBINATOR) {\n break;\n } else {\n twigLeaves.push(leaves.shift());\n }\n }\n const twig = {\n combo,\n leaves: twigLeaves\n };\n opt.dir = DIR_NEXT;\n const nodes = this._matchCombinator(twig, node, opt);\n if (nodes.size) {\n if (leaves.length) {\n for (const nextNode of nodes) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves),\n nextNode, opt);\n if (bool) {\n break;\n }\n }\n } else {\n bool = true;\n }\n }\n }\n return !!bool;\n }\n\n /**\n * match logical pseudo-class functions - :has(), :is(), :not(), :where()\n * @private\n * @param {object} astData - AST data\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n _matchLogicalPseudoFunc(astData, node, opt = {}) {\n const {\n astName = '', branches = [], selector = '', twigBranches = []\n } = astData;\n let res;\n if (astName === 'has') {\n if (selector.includes(':has(')) {\n res = null;\n } else {\n let bool;\n for (const leaves of branches) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves), node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else {\n const forgive = /^(?:is|where)$/.test(astName);\n opt.forgive = forgive;\n const l = twigBranches.length;\n let bool;\n for (let i = 0; i < l; i++) {\n const branch = twigBranches[i];\n const lastIndex = branch.length - 1;\n const { leaves } = branch[lastIndex];\n bool = this._matchLeaves(leaves, node, opt);\n if (bool && lastIndex > 0) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n opt.dir = DIR_PREV;\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, opt);\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n bool = true;\n } else {\n nextNodes = new Set(arr);\n }\n } else {\n bool = false;\n break;\n }\n }\n }\n if (bool) {\n break;\n }\n }\n if (astName === 'not') {\n if (!bool) {\n res = node;\n }\n } else if (bool) {\n res = node;\n }\n }\n return res ?? null;\n }\n\n /**\n * match pseudo-class selector\n * @private\n * @see https://html.spec.whatwg.org/#pseudo-classes\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @param {boolean} [opt.forgive] - forgive unknown pseudo-class\n * @param {boolean} [opt.warn] - warn unsupported pseudo-class\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt = {}) {\n const { children: astChildren } = ast;\n const { localName, parentNode } = node;\n const { forgive, warn } = opt;\n const astName = unescapeSelector(ast.name);\n let matched = new Set();\n // :has(), :is(), :not(), :where()\n if (REG_LOGICAL_PSEUDO.test(astName)) {\n let astData;\n if (this.#cache.has(ast)) {\n astData = this.#cache.get(ast);\n } else {\n const branches = walkAST(ast);\n const selectors = [];\n const twigBranches = [];\n for (const [...leaves] of branches) {\n for (const leaf of leaves) {\n const css = generateCSS(leaf);\n selectors.push(css);\n }\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches,\n selector: selectors.join(',')\n };\n this.#cache.set(ast, astData);\n }\n const res = this._matchLogicalPseudoFunc(astData, node, opt);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n const [branch] = astChildren;\n // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n if (nodes.size) {\n matched = nodes;\n }\n // :dir()\n } else if (astName === 'dir') {\n const res = this._matchDirectionPseudoClass(branch, node);\n if (res) {\n matched.add(res);\n }\n // :lang()\n } else if (astName === 'lang') {\n const res = this._matchLanguagePseudoClass(branch, node);\n if (res) {\n matched.add(res);\n }\n } else {\n switch (astName) {\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n default: {\n if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n const regAnchor = /^a(?:rea)?$/;\n const regFormCtrl =\n /^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/;\n const regFormValidity = /^(?:(?:inpu|selec)t|button|form|textarea)$/;\n const regInteract = /^d(?:etails|ialog)$/;\n const regTypeCheck = /^(?:checkbox|radio)$/;\n const regTypeDate = /^(?:date(?:time-local)?|month|time|week)$/;\n const regTypeRange =\n /(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/;\n const regTypeText = /^(?:(?:emai|te|ur)l|number|password|search|text)$/;\n switch (astName) {\n case 'any-link':\n case 'link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#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 '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 (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) {\n matched.add(node);\n }\n break;\n }\n case 'focus-within': {\n let current = this.#document.activeElement;\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n break;\n }\n case 'open': {\n if (regInteract.test(localName) && node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'closed': {\n if (regInteract.test(localName) && !node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'disabled': {\n if (regFormCtrl.test(localName) || isCustomElementName(localName)) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else {\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset') {\n break;\n }\n parent = parent.parentNode;\n }\n if (parent && parentNode.localName !== 'legend' &&\n parent.hasAttribute('disabled')) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((regFormCtrl.test(localName) || isCustomElementName(localName)) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'read-only': {\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (!isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'read-write': {\n switch (localName) {\n case 'textarea': {\n if (!(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n !(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'placeholder-shown': {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (regTypeText.test(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '' &&\n node.hasAttribute('placeholder') &&\n node.getAttribute('placeholder').trim().length) {\n matched.add(node);\n }\n break;\n }\n case 'checked': {\n if ((node.checked && localName === 'input' &&\n node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type'))) ||\n (node.selected && localName === 'option')) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if ((node.indeterminate && localName === 'input' &&\n node.type === 'checkbox') ||\n (localName === 'progress' && !node.hasAttribute('value'))) {\n matched.add(node);\n } else if (localName === 'input' && node.type === 'radio' &&\n !node.hasAttribute('checked')) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = this.#document.documentElement;\n }\n let checked;\n const items = parent.getElementsByTagName('input');\n const l = items.length;\n if (l) {\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 }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n const regTypeReset = /^(?:button|reset)$/;\n const regTypeSubmit = /^(?:image|submit)$/;\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n if ((localName === 'button' &&\n !(node.hasAttribute('type') &&\n regTypeReset.test(node.getAttribute('type')))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n regTypeSubmit.test(node.getAttribute('type')))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker =\n this.#document.createTreeWalker(form, SHOW_ELEMENT);\n let nextNode = walker.firstChild();\n while (nextNode) {\n const nodeName = nextNode.localName;\n let m;\n if (nodeName === 'button') {\n m = !(nextNode.hasAttribute('type') &&\n regTypeReset.test(nextNode.getAttribute('type')));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n regTypeSubmit.test(nextNode.getAttribute('type'));\n }\n if (m) {\n if (nextNode === node) {\n matched.add(node);\n }\n break;\n }\n nextNode = walker.nextNode();\n }\n }\n // input[type=\"checkbox\"], input[type=\"radio\"]\n } else if (localName === 'input' && node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type')) &&\n (node.checked || node.hasAttribute('checked'))) {\n matched.add(node);\n // option\n } else if (localName === 'option') {\n let isMultiple = false;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'datalist') {\n break;\n } else if (parent.localName === 'select') {\n if (parent.multiple || parent.hasAttribute('multiple')) {\n isMultiple = true;\n }\n break;\n }\n parent = parent.parentNode;\n }\n if (isMultiple) {\n if (node.selected || node.hasAttribute('selected')) {\n matched.add(node);\n }\n } else {\n const defaultOpt = new Set();\n const walker =\n this.#document.createTreeWalker(parentNode, SHOW_ELEMENT);\n let refNode = walker.firstChild();\n while (refNode) {\n if (refNode.selected || refNode.hasAttribute('selected')) {\n defaultOpt.add(refNode);\n break;\n }\n refNode = walker.nextSibling();\n }\n if (defaultOpt.size) {\n if (defaultOpt.has(node)) {\n matched.add(node);\n }\n }\n }\n }\n break;\n }\n case 'valid': {\n if (regFormValidity.test(localName)) {\n if (node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n let bool;\n const walker = this.#document.createTreeWalker(node, SHOW_ELEMENT);\n let refNode = walker.firstChild();\n while (refNode) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (regFormValidity.test(localName)) {\n if (!node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n let bool;\n const walker = this.#document.createTreeWalker(node, SHOW_ELEMENT);\n let refNode = walker.firstChild();\n while (refNode) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (!bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n (node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'optional': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n !(node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n let bool;\n const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n let refNode = walker.firstChild();\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 && this.#root.nodeType === ELEMENT_NODE)) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n (node === this.#root && this.#root.nodeType === ELEMENT_NODE)) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode &&\n node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) ||\n (node === this.#root && this.#root.nodeType === ELEMENT_NODE)) {\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 this.#root.nodeType === ELEMENT_NODE) {\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 this.#root.nodeType === ELEMENT_NODE) {\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 this.#root.nodeType === ELEMENT_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 const msg = `Unsupported pseudo-element ::${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'active':\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'defined':\n case 'focus-visible':\n case 'fullscreen':\n case 'future':\n case 'hover':\n case 'modal':\n case 'muted':\n case 'past':\n case 'paused':\n case 'picture-in-picture':\n case 'playing':\n case 'seeking':\n case 'stalled':\n case 'user-invalid':\n case 'user-valid':\n case 'volume-locked':\n case '-webkit-autofill': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match shadow host pseudo class\n * @private\n * @param {object} ast - AST\n * @param {object} node - DocumentFragment node\n * @returns {?object} - matched node\n */\n _matchShadowHostPseudoClass(ast, node) {\n const { children: astChildren } = ast;\n const astName = unescapeSelector(ast.name);\n let res;\n if (Array.isArray(astChildren)) {\n const [branch] = walkAST(astChildren[0]);\n const [...leaves] = branch;\n const { host } = node;\n if (astName === 'host') {\n let bool;\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n } else if (astName === 'host-context') {\n let bool;\n let parent = host;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else if (astName === 'host') {\n res = node;\n } else {\n const msg = `Invalid selector :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n return res ?? null;\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchSelector(ast, node, opt) {\n const { type: astType } = ast;\n const astName = unescapeSelector(ast.name);\n let matched = new Set();\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case SELECTOR_PSEUDO_CLASS: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n if (nodes.size) {\n matched = nodes;\n }\n break;\n }\n case SELECTOR_PSEUDO_ELEMENT: {\n matchPseudoElementSelector(astName, opt);\n break;\n }\n default: {\n const res = matchSelector(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n } else if (this.#shadow && astType === SELECTOR_PSEUDO_CLASS &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (astName !== 'has' && REG_LOGICAL_PSEUDO.test(astName)) {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n if (nodes.size) {\n matched = nodes;\n }\n } else if (REG_SHADOW_HOST.test(astName)) {\n const res = this._matchShadowHostPseudoClass(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n return matched;\n }\n\n /**\n * match leaves\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchLeaves(leaves, node, opt) {\n let bool;\n for (const leaf of leaves) {\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n return !!bool;\n }\n\n /**\n * find descendant nodes\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} baseNode - base Element node\n * @param {object} opt - options\n * @returns {object} - collection of nodes and pending state\n */\n _findDescendantNodes(leaves, baseNode, opt) {\n const [leaf, ...filterLeaves] = leaves;\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n const compound = filterLeaves.length > 0;\n let nodes = new Set();\n let pending = false;\n if (this.#shadow) {\n pending = true;\n } else {\n switch (leafType) {\n case SELECTOR_ID: {\n if (this.#root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n const node = this.#root.getElementById(leafName);\n if (node && node !== baseNode && baseNode.contains(node)) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, opt);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n }\n break;\n }\n case SELECTOR_CLASS: {\n const items = baseNode.getElementsByClassName(leafName);\n const l = items.length;\n if (l) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const item = items[i];\n const bool = this._matchLeaves(filterLeaves, item, opt);\n if (bool) {\n nodes.add(item);\n }\n }\n } else {\n const arr = [].slice.call(items);\n nodes = new Set(arr);\n }\n }\n break;\n }\n case SELECTOR_TYPE: {\n if (this.#document.contentType === 'text/html' &&\n !/[*|]/.test(leafName)) {\n const items = baseNode.getElementsByTagName(leafName);\n const l = items.length;\n if (l) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const item = items[i];\n const bool = this._matchLeaves(filterLeaves, item, opt);\n if (bool) {\n nodes.add(item);\n }\n }\n } else {\n const arr = [].slice.call(items);\n nodes = new Set(arr);\n }\n }\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_PSEUDO_ELEMENT: {\n matchPseudoElementSelector(leafName, opt);\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 { dir } = opt;\n let 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 const { parentNode } = node;\n if (parentNode) {\n const walker =\n this.#document.createTreeWalker(parentNode, SHOW_ELEMENT);\n let refNode = this._traverse(node, walker);\n if (refNode === node) {\n refNode = walker.nextSibling();\n }\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.#document.createTreeWalker(node, SHOW_ELEMENT);\n let 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 matched = nodes;\n } else if (pending) {\n const walker = this.#document.createTreeWalker(node, SHOW_ELEMENT);\n let refNode = walker.nextNode();\n while (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 const walker =\n this.#document.createTreeWalker(node.parentNode, SHOW_ELEMENT);\n let 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 break;\n }\n case '>': {\n const refNode = node.parentNode;\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 default: {\n const arr = [];\n let refNode = node.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 matched = new Set(arr.reverse());\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * find matched node from finder\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} [opt] - options\n * @param {object} [opt.node] - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, opt = {}) {\n const { node } = opt;\n let matchedNode;\n let refNode = this._traverse(node, this.#finder);\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = this.#finder.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = this.#finder.nextNode();\n }\n }\n while (refNode) {\n let bool;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (refNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(refNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n }\n refNode = this.#finder.nextNode();\n }\n }\n return matchedNode ?? null;\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 { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n const compound = filterLeaves.length > 0;\n let nodes = [];\n let filtered = false;\n let pending = false;\n if (targetType === TARGET_SELF) {\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 } else if (targetType === TARGET_LINEAL) {\n let refNode = this.#node;\n while (refNode) {\n const bool = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (bool) {\n nodes.push(refNode);\n filtered = true;\n if (!complex) {\n break;\n }\n }\n refNode = refNode.parentNode;\n }\n } else {\n switch (leafType) {\n case SELECTOR_PSEUDO_ELEMENT: {\n matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case SELECTOR_ID: {\n 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 }\n } else {\n nodes.push(node);\n }\n filtered = true;\n }\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (targetType === TARGET_FIRST) {\n const node = this._findNode(leaves, {\n node: this.#node\n });\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n } else if (this.#root.nodeType === DOCUMENT_NODE) {\n const items = this.#root.getElementsByClassName(leafName);\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node === this.#node || isInclusive(node, 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 }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n if (!compound) {\n filtered = true;\n }\n }\n }\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_TYPE: {\n if (targetType === TARGET_FIRST) {\n const node = this._findNode(leaves, {\n node: this.#node\n });\n if (node) {\n nodes.push(node);\n filtered = true;\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 const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node === this.#node || isInclusive(node, 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 }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n if (!compound) {\n filtered = true;\n }\n }\n }\n } else {\n pending = true;\n }\n break;\n }\n default: {\n if (REG_SHADOW_HOST.test(leafName)) {\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n if (node) {\n nodes.push(node);\n }\n }\n } else if (targetType === TARGET_FIRST) {\n const node = this._findNode(leaves, {\n node: this.#node\n });\n if (node) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n pending = true;\n }\n }\n }\n }\n return {\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * get entry twig\n * @private\n * @param {Array.<object>} branch - AST branch\n * @param {string} targetType - target type\n * @returns {object} - direction and twig\n */\n _getEntryTwig(branch, targetType) {\n const branchLen = branch.length;\n const complex = branchLen > 1;\n const firstTwig = branch[0];\n let dir;\n let twig;\n if (complex) {\n const {\n combo: firstCombo,\n leaves: [{\n name: firstName,\n type: firstType\n }]\n } = firstTwig;\n const lastTwig = branch[branchLen - 1];\n const {\n leaves: [{\n name: lastName,\n type: lastType\n }]\n } = lastTwig;\n if (lastType === SELECTOR_PSEUDO_ELEMENT || lastType === SELECTOR_ID) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n firstType === SELECTOR_ID) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (/^[+~]$/.test(comboName)) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n let sibling;\n for (const { combo, leaves: [leaf] } of branch) {\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n bool = false;\n break;\n }\n if (combo && !sibling) {\n const { name: comboName } = combo;\n if (/^[+~]$/.test(comboName)) {\n bool = true;\n sibling = 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 return {\n complex,\n dir,\n twig\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 { complex, dir, twig } = this._getEntryTwig(branch, targetType);\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.#finder;\n } else {\n node = this.#root;\n walker = this.#tree;\n }\n let nextNode = this._traverse(node, walker);\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (nextNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(nextNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode, {\n warn: this.#warn\n });\n if (matched) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n }\n 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 * match nodes\n * @private\n * @param {string} targetType - target type\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchNodes(targetType) {\n const [...branches] = this.#ast;\n const l = branches.length;\n let nodes = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, dir, filtered, find } = branches[i];\n const branchLen = branch.length;\n if (branchLen && find) {\n const entryNodes = this.#nodes[i];\n const entryNodesLen = entryNodes.length;\n const lastIndex = branchLen - 1;\n if (lastIndex === 0) {\n const { leaves: [, ...filterLeaves] } = branch[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 const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool && node !== this.#node && this.#node.contains(node)) {\n nodes.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (filterLeaves.length) {\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...entryNodes]);\n this.#sort = true;\n } else {\n nodes = new Set([...entryNodes]);\n }\n } else {\n const [node] = [...entryNodes];\n nodes.add(node);\n }\n } else if (dir === DIR_NEXT) {\n let { combo, leaves: entryLeaves } = branch[0];\n const [, ...filterLeaves] = entryLeaves;\n let matched;\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const twig = {\n combo,\n leaves\n };\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === lastIndex) {\n if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...arr]);\n } else {\n nodes = new Set([...arr]);\n }\n this.#sort = true;\n } else {\n const [node] = sortNodes(arr);\n nodes.add(node);\n }\n matched = true;\n } else {\n combo = nextCombo;\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n } else {\n matched = false;\n }\n if (matched && targetType !== TARGET_ALL) {\n break;\n }\n }\n if (!matched && targetType === TARGET_FIRST) {\n const [entryNode] = [...entryNodes];\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n let nextNodes = new Set([refNode]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const twig = {\n combo,\n leaves\n };\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === lastIndex) {\n const [node] = sortNodes(arr);\n nodes.add(node);\n matched = true;\n } else {\n combo = nextCombo;\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n if (matched) {\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n nextNodes = new Set([refNode]);\n }\n }\n } else {\n const { leaves: entryLeaves } = branch[lastIndex];\n const [, ...filterLeaves] = entryLeaves;\n let matched;\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n nodes.add(node);\n matched = true;\n if (targetType === TARGET_ALL &&\n branchLen > 1 && nodes.size > 1) {\n this.#sort = true;\n }\n } else {\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n }\n if (matched && targetType !== TARGET_ALL) {\n break;\n }\n }\n if (!matched && targetType === TARGET_FIRST) {\n const [entryNode] = [...entryNodes];\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n let nextNodes = new Set([refNode]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n nodes.add(refNode);\n matched = true;\n } else {\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n if (matched) {\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n nextNodes = new Set([refNode]);\n }\n }\n }\n }\n }\n return nodes;\n }\n\n /**\n * find matched nodes\n * @private\n * @param {string} targetType - target type\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _find(targetType, node, selector, opt) {\n this._setup(node, selector, opt);\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n this.#tree = this.#document.createTreeWalker(this.#root, WALKER_FILTER);\n this.#finder = this.#document.createTreeWalker(this.#node, WALKER_FILTER);\n this.#sort = false;\n // TARGET_SELF, TARGET_LINEAL\n } else if (node.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node.nodeName}`;\n throw new TypeError(msg);\n }\n this._collectNodes(targetType);\n const nodes = this._matchNodes(targetType);\n return nodes;\n }\n\n /**\n * matches\n * @param {object} node - Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {boolean} - `true` if matched `false` otherwise\n */\n matches(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_SELF, node, selector, opt);\n if (nodes.size) {\n res = nodes.has(this.#node);\n }\n } catch (e) {\n this._onError(e);\n }\n return !!res;\n }\n\n /**\n * closest\n * @param {object} node - Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n closest(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_LINEAL, node, selector, opt);\n let refNode = this.#node;\n while (refNode) {\n if (nodes.has(refNode)) {\n res = refNode;\n break;\n }\n refNode = refNode.parentNode;\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n querySelector(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_FIRST, node, selector, opt);\n nodes.delete(this.#node);\n if (nodes.size) {\n [res] = sortNodes(nodes);\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector all\n * NOTE: returns Array, not NodeList\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {Array.<object|undefined>} - collection of matched nodes\n */\n querySelectorAll(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_ALL, node, selector, opt);\n nodes.delete(this.#node);\n if (nodes.size) {\n if (this.#sort) {\n res = sortNodes(nodes);\n } else {\n res = [...nodes];\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? [];\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_is_potential_custom_element_name", "import_dom_util", "import_matcher", "import_parser", "import_constant", "DIR_NEXT", "DIR_PREV", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "WALKER_FILTER", "#ast", "#cache", "#clones", "#document", "#finder", "#node", "#nodes", "#root", "#selector", "#shadow", "#sort", "#tree", "#warn", "#window", "e", "node", "selector", "opt", "warn", "nodes", "ast", "cachedItem", "l", "i", "cssAst", "branches", "items", "branch", "item", "leaves", "nextItem", "msg", "walker", "current", "refNode", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "selectorNodes", "bool", "nth", "j", "localName", "prefix", "itemLocalName", "itemPrefix", "m", "nthName", "nthIdentName", "identName", "anbMap", "astName", "dir", "res", "parent", "langPart", "regExtendedLang", "langMain", "langSub", "langRest", "extendedMain", "extendedSub", "len", "extendedRest", "value", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "twigBranches", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "regAnchor", "regFormCtrl", "regFormValidity", "regInteract", "regTypeCheck", "regTypeDate", "regTypeRange", "regTypeText", "href", "origin", "pathname", "attrURL", "hash", "id", "isCustomElementName", "targetNode", "nodeName", "checked", "regTypeReset", "regTypeSubmit", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "host", "astType", "baseNode", "filterLeaves", "leafName", "compound", "pending", "comboName", "matchedNode", "targetType", "complex", "filtered", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "sibling", "pendingItems", "pendingItem", "index", "find", "entryNodes", "entryNodesLen", "n", "entryLeaves", "nextCombo", "entryNode"]
4
+ "sourcesContent": ["/**\n * finder.js\n */\n\n/* import */\nimport isCustomElementName from 'is-potential-custom-element-name';\nimport {\n getDirectionality, isContentEditable, isInclusive, isInShadowTree,\n prepareDOMObjects, sortNodes\n} from './dom-util.js';\nimport { matchSelector, matchPseudoElementSelector } from './matcher.js';\nimport {\n generateCSS, parseSelector, sortAST, unescapeSelector, walkAST\n} from './parser.js';\n\n/* constants */\nimport {\n ALPHA_NUM, COMBINATOR, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, ELEMENT_NODE,\n NOT_SUPPORTED_ERR, REG_LOGICAL_PSEUDO, REG_SHADOW_HOST, SELECTOR_CLASS,\n SELECTOR_ID, SELECTOR_PSEUDO_CLASS, SELECTOR_PSEUDO_ELEMENT, SELECTOR_TYPE,\n SHOW_ALL, SHOW_DOCUMENT, SHOW_DOCUMENT_FRAGMENT, SHOW_ELEMENT, SYNTAX_ERR,\n TEXT_NODE\n} from './constant.js';\n\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst TARGET_ALL = 'all';\nconst TARGET_FIRST = 'first';\nconst TARGET_LINEAL = 'lineal';\nconst TARGET_SELF = 'self';\nconst WALKER_FILTER = SHOW_DOCUMENT | SHOW_DOCUMENT_FRAGMENT | SHOW_ELEMENT;\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n * #ast: [\n * {\n * branch: branch[],\n * dir: string|null,\n * filtered: boolean,\n * find: boolean\n * },\n * {\n * branch: branch[],\n * dir: string|null,\n * filtered: boolean,\n * find: boolean\n * }\n * ]\n * #nodes: [\n * [node{}, node{}],\n * [node{}, node{}, node{}]\n * ]\n * branch[]: [twig{}, twig{}]\n * twig{}: {\n * combo: leaf{}|null,\n * leaves: leaves[]\n * }\n * leaves[]: [leaf{}, leaf{}, leaf{}]\n * leaf{}: CSSTree AST object\n * node{}: Element node\n */\nexport class Finder {\n /* private fields */\n #ast;\n #cache;\n #document;\n #finder;\n #node;\n #nodes;\n #results;\n #root;\n #selector;\n #shadow;\n #sort;\n #tree;\n #warn;\n #window;\n\n /**\n * construct\n */\n constructor() {\n this.#cache = new WeakMap();\n }\n\n /**\n * handle error\n * @private\n * @param {Error} e - Error\n * @throws Error\n * @returns {void}\n */\n _onError(e) {\n if (e instanceof DOMException ||\n (this.#window && e instanceof this.#window.DOMException)) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n } else if (this.#window) {\n throw new this.#window.DOMException(e.message, e.name);\n } else {\n throw e;\n }\n } else {\n throw e;\n }\n }\n\n /**\n * setup finder\n * @private\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {object} - node\n */\n _setup(node, selector, opt = {}) {\n const { warn } = opt;\n this.#warn = !!warn;\n [this.#window, this.#document, this.#root] = prepareDOMObjects(node);\n this.#node = node;\n this.#shadow = isInShadowTree(node);\n this.#selector = selector;\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#results = new WeakMap();\n return this.#node;\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 let ast;\n let cachedItem = this.#document && this.#cache.get(this.#document);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n ast = cachedItem.get(selector);\n if (typeof ast === 'string') {\n throw new DOMException(ast, SYNTAX_ERR);\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 if (this.#document) {\n if (!cachedItem) {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, e.message);\n this.#cache.set(this.#document, cachedItem);\n }\n this._onError(e);\n }\n const branches = walkAST(cssAst);\n ast = [];\n let i = 0;\n for (const [...items] of branches) {\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (nextItem.type === COMBINATOR) {\n const msg = `Invalid selector ${selector}`;\n if (this.#document) {\n if (!cachedItem) {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, msg);\n this.#cache.set(this.#document, cachedItem);\n }\n throw new DOMException(msg, SYNTAX_ERR);\n }\n branch.push({\n combo: item,\n leaves: sortAST(leaves)\n });\n leaves.clear();\n } else if (item) {\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 if (this.#document) {\n if (!cachedItem) {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, ast);\n this.#cache.set(this.#document, cachedItem);\n }\n }\n return [\n ast,\n nodes\n ];\n }\n\n /**\n * traverse tree walker\n * @private\n * @param {object} [node] - Element node\n * @param {object} [walker] - tree walker\n * @returns {?object} - current node\n */\n _traverse(node = {}, walker = this.#tree) {\n let current;\n let refNode = walker.currentNode;\n if (node.nodeType === ELEMENT_NODE && refNode === node) {\n current = refNode;\n } else {\n if (refNode !== walker.root) {\n while (refNode) {\n if (refNode === walker.root ||\n (node.nodeType === ELEMENT_NODE && refNode === node)) {\n break;\n }\n refNode = walker.parentNode();\n }\n }\n if (node.nodeType === ELEMENT_NODE) {\n while (refNode) {\n if (refNode === node) {\n current = refNode;\n break;\n }\n refNode = walker.nextNode();\n }\n } else {\n current = refNode;\n }\n }\n return current ?? null;\n }\n\n /**\n * collect nth child\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} [anb.selector] - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthChild(anb, node, opt) {\n const { a, b, reverse, selector } = anb;\n const { parentNode } = node;\n let matched = new Set();\n let selectorBranches;\n if (selector) {\n if (this.#cache.has(selector)) {\n selectorBranches = this.#cache.get(selector);\n } else {\n selectorBranches = walkAST(selector);\n this.#cache.set(selector, selectorBranches);\n }\n }\n if (parentNode) {\n const walker = this.#document.createTreeWalker(parentNode, WALKER_FILTER);\n let l = 0;\n let refNode = walker.firstChild();\n while (refNode) {\n l++;\n refNode = walker.nextSibling();\n }\n refNode = this._traverse(parentNode, walker);\n const selectorNodes = new Set();\n if (selectorBranches) {\n refNode = this._traverse(parentNode, walker);\n refNode = walker.firstChild();\n while (refNode) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, refNode, opt);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n selectorNodes.add(refNode);\n }\n refNode = walker.nextSibling();\n }\n }\n // :first-child, :last-child, :nth-child(b of S), :nth-last-child(b of S)\n if (a === 0) {\n if (b > 0 && b <= l) {\n if (selectorNodes.size) {\n let i = 0;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\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 let i = 0;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\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 let i = 0;\n let j = a > 0 ? 0 : b - 1;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\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 matched = new Set(m.reverse());\n }\n } else if (node === this.#root && this.#root.nodeType === ELEMENT_NODE &&\n (a + b) === 1) {\n if (selectorBranches) {\n let bool;\n for (const leaves of selectorBranches) {\n bool = this._matchLeaves(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n }\n return matched;\n }\n\n /**\n * collect nth of type\n * @private\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @param {object} node - Element node\n * @returns {Set.<object>} - collection of matched nodes\n */\n _collectNthOfType(anb, node) {\n const { a, b, reverse } = anb;\n const { localName, parentNode, prefix } = node;\n let matched = new Set();\n if (parentNode) {\n const walker = this.#document.createTreeWalker(parentNode, WALKER_FILTER);\n let l = 0;\n let refNode = walker.firstChild();\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 let j = 0;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === b - 1) {\n matched.add(refNode);\n break;\n }\n j++;\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n // :nth-of-type()\n } else {\n let nth = b - 1;\n if (a > 0) {\n while (nth < 0) {\n nth += a;\n }\n }\n if (nth >= 0 && nth < l) {\n let j = a > 0 ? 0 : b - 1;\n refNode = this._traverse(parentNode, walker);\n if (reverse) {\n refNode = walker.lastChild();\n } else {\n refNode = walker.firstChild();\n }\n while (refNode) {\n const { localName: itemLocalName, prefix: itemPrefix } = refNode;\n if (itemLocalName === localName && itemPrefix === prefix) {\n if (j === nth) {\n matched.add(refNode);\n nth += a;\n }\n if (nth < 0 || nth >= l) {\n break;\n } else if (a > 0) {\n j++;\n } else {\n j--;\n }\n }\n if (reverse) {\n refNode = walker.previousSibling();\n } else {\n refNode = walker.nextSibling();\n }\n }\n }\n }\n if (reverse && matched.size > 1) {\n const m = [...matched];\n matched = new Set(m.reverse());\n }\n } else if (node === this.#root && this.#root.nodeType === ELEMENT_NODE &&\n (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 identName = unescapeSelector(nthIdentName);\n const anbMap = new Map();\n if (identName) {\n if (identName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (identName === '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 let matched = new Set();\n if (anbMap.has('a') && anbMap.has('b')) {\n if (/^nth-(?:last-)?child$/.test(nthName)) {\n if (selector) {\n anbMap.set('selector', selector);\n }\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthChild(anb, node, opt);\n if (nodes.size) {\n matched = nodes;\n }\n } else if (/^nth-(?:last-)?of-type$/.test(nthName)) {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n if (nodes.size) {\n matched = nodes;\n }\n }\n }\n return matched;\n }\n\n /**\n * match directionality pseudo-class - :dir()\n * @private\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchDirectionPseudoClass(ast, node) {\n const astName = unescapeSelector(ast.name);\n const dir = getDirectionality(node);\n let res;\n if (astName === dir) {\n res = node;\n }\n return res ?? null;\n }\n\n /**\n * match language pseudo-class - :lang()\n * @private\n * @see https://datatracker.ietf.org/doc/html/rfc4647#section-3.3.1\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @returns {?object} - matched node\n */\n _matchLanguagePseudoClass(ast, node) {\n const astName = unescapeSelector(ast.name);\n let res;\n if (astName === '*') {\n if (node.hasAttribute('lang')) {\n if (node.getAttribute('lang')) {\n res = node;\n }\n } else {\n let parent = node.parentNode;\n while (parent) {\n if (parent.nodeType === ELEMENT_NODE) {\n if (parent.hasAttribute('lang')) {\n if (parent.getAttribute('lang')) {\n res = node;\n }\n break;\n }\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n }\n } else if (astName) {\n const langPart = `(?:-${ALPHA_NUM})*`;\n const regLang = new RegExp(`^(?:\\\\*-)?${ALPHA_NUM}${langPart}$`, 'i');\n if (regLang.test(astName)) {\n let regExtendedLang;\n if (astName.indexOf('-') > -1) {\n const [langMain, langSub, ...langRest] = astName.split('-');\n let extendedMain;\n if (langMain === '*') {\n extendedMain = `${ALPHA_NUM}${langPart}`;\n } else {\n extendedMain = `${langMain}${langPart}`;\n }\n const extendedSub = `-${langSub}${langPart}`;\n const len = langRest.length;\n let extendedRest = '';\n if (len) {\n for (let i = 0; i < len; i++) {\n extendedRest += `-${langRest[i]}${langPart}`;\n }\n }\n regExtendedLang =\n new RegExp(`^${extendedMain}${extendedSub}${extendedRest}$`, 'i');\n } else {\n regExtendedLang = new RegExp(`^${astName}${langPart}$`, 'i');\n }\n if (node.hasAttribute('lang')) {\n if (regExtendedLang.test(node.getAttribute('lang'))) {\n res = node;\n }\n } else {\n let parent = node.parentNode;\n while (parent) {\n if (parent.nodeType === ELEMENT_NODE) {\n if (parent.hasAttribute('lang')) {\n const value = parent.getAttribute('lang');\n if (regExtendedLang.test(value)) {\n res = node;\n }\n break;\n }\n parent = parent.parentNode;\n } else {\n break;\n }\n }\n }\n }\n }\n return res ?? null;\n }\n\n /**\n * match :has() pseudo-class function\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchHasPseudoFunc(leaves, node, opt = {}) {\n let bool;\n if (Array.isArray(leaves) && leaves.length) {\n const [leaf] = leaves;\n const { type: leafType } = leaf;\n let combo;\n if (leafType === COMBINATOR) {\n combo = leaves.shift();\n } else {\n combo = {\n name: ' ',\n type: COMBINATOR\n };\n }\n const twigLeaves = [];\n while (leaves.length) {\n const [item] = leaves;\n const { type: itemType } = item;\n if (itemType === COMBINATOR) {\n break;\n } else {\n twigLeaves.push(leaves.shift());\n }\n }\n const twig = {\n combo,\n leaves: twigLeaves\n };\n opt.dir = DIR_NEXT;\n const nodes = this._matchCombinator(twig, node, opt);\n if (nodes.size) {\n if (leaves.length) {\n for (const nextNode of nodes) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves),\n nextNode, opt);\n if (bool) {\n break;\n }\n }\n } else {\n bool = true;\n }\n }\n }\n return !!bool;\n }\n\n /**\n * match logical pseudo-class functions - :has(), :is(), :not(), :where()\n * @private\n * @param {object} astData - AST data\n * @param {object} node - Element node\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n _matchLogicalPseudoFunc(astData, node, opt = {}) {\n const {\n astName = '', branches = [], selector = '', twigBranches = []\n } = astData;\n let res;\n if (astName === 'has') {\n if (selector.includes(':has(')) {\n res = null;\n } else {\n let bool;\n for (const leaves of branches) {\n bool = this._matchHasPseudoFunc(Object.assign([], leaves), node, opt);\n if (bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else {\n const forgive = /^(?:is|where)$/.test(astName);\n opt.forgive = forgive;\n const l = twigBranches.length;\n let bool;\n for (let i = 0; i < l; i++) {\n const branch = twigBranches[i];\n const lastIndex = branch.length - 1;\n const { leaves } = branch[lastIndex];\n bool = this._matchLeaves(leaves, node, opt);\n if (bool && lastIndex > 0) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n opt.dir = DIR_PREV;\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, opt);\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n bool = true;\n } else {\n nextNodes = new Set(arr);\n }\n } else {\n bool = false;\n break;\n }\n }\n }\n if (bool) {\n break;\n }\n }\n if (astName === 'not') {\n if (!bool) {\n res = node;\n }\n } else if (bool) {\n res = node;\n }\n }\n return res ?? null;\n }\n\n /**\n * match pseudo-class selector\n * @private\n * @see https://html.spec.whatwg.org/#pseudo-classes\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {object} opt - options\n * @param {boolean} [opt.forgive] - forgive unknown pseudo-class\n * @param {boolean} [opt.warn] - warn unsupported pseudo-class\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt = {}) {\n const { children: astChildren } = ast;\n const { localName, parentNode } = node;\n const { forgive, warn } = opt;\n const astName = unescapeSelector(ast.name);\n let matched = new Set();\n // :has(), :is(), :not(), :where()\n if (REG_LOGICAL_PSEUDO.test(astName)) {\n let astData;\n if (this.#cache.has(ast)) {\n astData = this.#cache.get(ast);\n } else {\n const branches = walkAST(ast);\n const selectors = [];\n const twigBranches = [];\n for (const [...leaves] of branches) {\n for (const leaf of leaves) {\n const css = generateCSS(leaf);\n selectors.push(css);\n }\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches,\n selector: selectors.join(',')\n };\n this.#cache.set(ast, astData);\n }\n const res = this._matchLogicalPseudoFunc(astData, node, opt);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n const [branch] = astChildren;\n // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n if (nodes.size) {\n matched = nodes;\n }\n // :dir()\n } else if (astName === 'dir') {\n const res = this._matchDirectionPseudoClass(branch, node);\n if (res) {\n matched.add(res);\n }\n // :lang()\n } else if (astName === 'lang') {\n const res = this._matchLanguagePseudoClass(branch, node);\n if (res) {\n matched.add(res);\n }\n } else {\n switch (astName) {\n case 'current':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}()`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'host':\n case 'host-context': {\n // ignore\n break;\n }\n default: {\n if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}()`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n } else {\n const regAnchor = /^a(?:rea)?$/;\n const regFormCtrl =\n /^(?:(?:fieldse|inpu|selec)t|button|opt(?:group|ion)|textarea)$/;\n const regFormValidity = /^(?:(?:inpu|selec)t|button|form|textarea)$/;\n const regInteract = /^d(?:etails|ialog)$/;\n const regTypeCheck = /^(?:checkbox|radio)$/;\n const regTypeDate = /^(?:date(?:time-local)?|month|time|week)$/;\n const regTypeRange =\n /(?:(?:rang|tim)e|date(?:time-local)?|month|number|week)$/;\n const regTypeText = /^(?:(?:emai|te|ur)l|number|password|search|text)$/;\n switch (astName) {\n case 'any-link':\n case 'link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (regAnchor.test(localName) && node.hasAttribute('href')) {\n const { href, origin, pathname } = new URL(this.#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 '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 (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) {\n matched.add(node);\n }\n break;\n }\n case 'focus-within': {\n let current = this.#document.activeElement;\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n break;\n }\n case 'open': {\n if (regInteract.test(localName) && node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'closed': {\n if (regInteract.test(localName) && !node.hasAttribute('open')) {\n matched.add(node);\n }\n break;\n }\n case 'disabled': {\n if (regFormCtrl.test(localName) || isCustomElementName(localName)) {\n if (node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n } else {\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'fieldset') {\n break;\n }\n parent = parent.parentNode;\n }\n if (parent && parentNode.localName !== 'legend' &&\n parent.hasAttribute('disabled')) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'enabled': {\n if ((regFormCtrl.test(localName) || isCustomElementName(localName)) &&\n !(node.disabled && node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'read-only': {\n switch (localName) {\n case 'textarea': {\n if (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled')) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n (node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (!isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'read-write': {\n switch (localName) {\n case 'textarea': {\n if (!(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n case 'input': {\n if ((!node.type || regTypeDate.test(node.type) ||\n regTypeText.test(node.type)) &&\n !(node.readonly || node.hasAttribute('readonly') ||\n node.disabled || node.hasAttribute('disabled'))) {\n matched.add(node);\n }\n break;\n }\n default: {\n if (isContentEditable(node)) {\n matched.add(node);\n }\n }\n }\n break;\n }\n case 'placeholder-shown': {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (regTypeText.test(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '' &&\n node.hasAttribute('placeholder') &&\n node.getAttribute('placeholder').trim().length) {\n matched.add(node);\n }\n break;\n }\n case 'checked': {\n if ((node.checked && localName === 'input' &&\n node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type'))) ||\n (node.selected && localName === 'option')) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if ((node.indeterminate && localName === 'input' &&\n node.type === 'checkbox') ||\n (localName === 'progress' && !node.hasAttribute('value'))) {\n matched.add(node);\n } else if (localName === 'input' && node.type === 'radio' &&\n !node.hasAttribute('checked')) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = this.#document.documentElement;\n }\n let checked;\n const items = parent.getElementsByTagName('input');\n const l = items.length;\n if (l) {\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 }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n const regTypeReset = /^(?:button|reset)$/;\n const regTypeSubmit = /^(?:image|submit)$/;\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n if ((localName === 'button' &&\n !(node.hasAttribute('type') &&\n regTypeReset.test(node.getAttribute('type')))) ||\n (localName === 'input' && node.hasAttribute('type') &&\n regTypeSubmit.test(node.getAttribute('type')))) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker =\n this.#document.createTreeWalker(form, SHOW_ELEMENT);\n let nextNode = walker.firstChild();\n while (nextNode) {\n const nodeName = nextNode.localName;\n let m;\n if (nodeName === 'button') {\n m = !(nextNode.hasAttribute('type') &&\n regTypeReset.test(nextNode.getAttribute('type')));\n } else if (nodeName === 'input') {\n m = nextNode.hasAttribute('type') &&\n regTypeSubmit.test(nextNode.getAttribute('type'));\n }\n if (m) {\n if (nextNode === node) {\n matched.add(node);\n }\n break;\n }\n nextNode = walker.nextNode();\n }\n }\n // input[type=\"checkbox\"], input[type=\"radio\"]\n } else if (localName === 'input' && node.hasAttribute('type') &&\n regTypeCheck.test(node.getAttribute('type')) &&\n (node.checked || node.hasAttribute('checked'))) {\n matched.add(node);\n // option\n } else if (localName === 'option') {\n let isMultiple = false;\n let parent = parentNode;\n while (parent) {\n if (parent.localName === 'datalist') {\n break;\n } else if (parent.localName === 'select') {\n if (parent.multiple || parent.hasAttribute('multiple')) {\n isMultiple = true;\n }\n break;\n }\n parent = parent.parentNode;\n }\n if (isMultiple) {\n if (node.selected || node.hasAttribute('selected')) {\n matched.add(node);\n }\n } else {\n const defaultOpt = new Set();\n const walker =\n this.#document.createTreeWalker(parentNode, SHOW_ELEMENT);\n let refNode = walker.firstChild();\n while (refNode) {\n if (refNode.selected || refNode.hasAttribute('selected')) {\n defaultOpt.add(refNode);\n break;\n }\n refNode = walker.nextSibling();\n }\n if (defaultOpt.size) {\n if (defaultOpt.has(node)) {\n matched.add(node);\n }\n }\n }\n }\n break;\n }\n case 'valid': {\n if (regFormValidity.test(localName)) {\n if (node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n let bool;\n const walker = this.#document.createTreeWalker(node, SHOW_ELEMENT);\n let refNode = walker.firstChild();\n while (refNode) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'invalid': {\n if (regFormValidity.test(localName)) {\n if (!node.checkValidity()) {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n let bool;\n const walker = this.#document.createTreeWalker(node, SHOW_ELEMENT);\n let refNode = walker.firstChild();\n while (refNode) {\n if (regFormValidity.test(refNode.localName)) {\n bool = refNode.checkValidity();\n if (!bool) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (!bool) {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n !(node.validity.rangeUnderflow ||\n node.validity.rangeOverflow) &&\n (node.hasAttribute('min') || node.hasAttribute('max') ||\n node.getAttribute('type') === 'range')) {\n matched.add(node);\n }\n break;\n }\n case 'out-of-range': {\n if (localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n node.hasAttribute('type') &&\n regTypeRange.test(node.getAttribute('type')) &&\n (node.validity.rangeUnderflow || node.validity.rangeOverflow)) {\n matched.add(node);\n }\n break;\n }\n case 'required': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n (node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'optional': {\n let targetNode;\n if (/^(?:select|textarea)$/.test(localName)) {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const inputType = node.getAttribute('type');\n if (inputType === 'file' || regTypeCheck.test(inputType) ||\n regTypeDate.test(inputType) || regTypeText.test(inputType)) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode &&\n !(node.required || node.hasAttribute('required'))) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n let bool;\n const walker = this.#document.createTreeWalker(node, SHOW_ALL);\n let refNode = walker.firstChild();\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 && this.#root.nodeType === ELEMENT_NODE)) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if ((parentNode && node === parentNode.lastElementChild) ||\n (node === this.#root && this.#root.nodeType === ELEMENT_NODE)) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if ((parentNode &&\n node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) ||\n (node === this.#root && this.#root.nodeType === ELEMENT_NODE)) {\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 this.#root.nodeType === ELEMENT_NODE) {\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 this.#root.nodeType === ELEMENT_NODE) {\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 this.#root.nodeType === ELEMENT_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 const msg = `Unsupported pseudo-element ::${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n case 'active':\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'defined':\n case 'focus-visible':\n case 'fullscreen':\n case 'future':\n case 'hover':\n case 'modal':\n case 'muted':\n case 'past':\n case 'paused':\n case 'picture-in-picture':\n case 'playing':\n case 'seeking':\n case 'stalled':\n case 'user-invalid':\n case 'user-valid':\n case 'volume-locked':\n case '-webkit-autofill': {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n const msg = `Unsupported pseudo-class :${astName}`;\n throw new DOMException(msg, NOT_SUPPORTED_ERR);\n }\n } else if (!forgive) {\n const msg = `Unknown pseudo-class :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * match shadow host pseudo class\n * @private\n * @param {object} ast - AST\n * @param {object} node - DocumentFragment node\n * @returns {?object} - matched node\n */\n _matchShadowHostPseudoClass(ast, node) {\n const { children: astChildren } = ast;\n const astName = unescapeSelector(ast.name);\n let res;\n if (Array.isArray(astChildren)) {\n const [branch] = walkAST(astChildren[0]);\n const [...leaves] = branch;\n const { host } = node;\n if (astName === 'host') {\n let bool;\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, host).has(host);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n res = node;\n }\n } else if (astName === 'host-context') {\n let bool;\n let parent = host;\n while (parent) {\n for (const leaf of leaves) {\n const { type: leafType } = leaf;\n if (leafType === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n break;\n } else {\n parent = parent.parentNode;\n }\n }\n if (bool) {\n res = node;\n }\n }\n } else if (astName === 'host') {\n res = node;\n } else {\n const msg = `Invalid selector :${astName}`;\n throw new DOMException(msg, SYNTAX_ERR);\n }\n return res ?? null;\n }\n\n /**\n * match selector\n * @private\n * @param {object} ast - AST\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {object} [opt] - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchSelector(ast, node, opt) {\n const { type: astType } = ast;\n const astName = unescapeSelector(ast.name);\n let matched = new Set();\n if (node.nodeType === ELEMENT_NODE) {\n switch (astType) {\n case SELECTOR_PSEUDO_CLASS: {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n if (nodes.size) {\n matched = nodes;\n }\n break;\n }\n case SELECTOR_PSEUDO_ELEMENT: {\n matchPseudoElementSelector(astName, opt);\n break;\n }\n default: {\n const res = matchSelector(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n } else if (this.#shadow && astType === SELECTOR_PSEUDO_CLASS &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n if (astName !== 'has' && REG_LOGICAL_PSEUDO.test(astName)) {\n const nodes = this._matchPseudoClassSelector(ast, node, opt);\n if (nodes.size) {\n matched = nodes;\n }\n } else if (REG_SHADOW_HOST.test(astName)) {\n const res = this._matchShadowHostPseudoClass(ast, node, opt);\n if (res) {\n matched.add(res);\n }\n }\n }\n return matched;\n }\n\n /**\n * match leaves\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} node - node\n * @param {object} opt - options\n * @returns {boolean} - result\n */\n _matchLeaves(leaves, node, opt) {\n let bool;\n if (this.#results.has(leaves)) {\n const result = this.#results.get(leaves);\n if (result.has(node)) {\n bool = result.get(node);\n } else {\n for (const leaf of leaves) {\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n result.set(node, bool);\n this.#results.set(leaves, result);\n }\n } else {\n for (const leaf of leaves) {\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n const result = new WeakMap();\n result.set(node, bool);\n this.#results.set(leaves, result);\n }\n return !!bool;\n }\n\n /**\n * match HTML collection\n * @param {object} items - HTML collection\n * @param {object} opt - options\n * @returns {Set.<object>} - matched nodes\n */\n _matchHTMLCollection(items, opt = {}) {\n const { compound, filterLeaves } = opt;\n let nodes = new Set();\n const l = items.length;\n if (l) {\n if (compound) {\n for (let i = 0; i < l; i++) {\n const item = items[i];\n const bool = this._matchLeaves(filterLeaves, item, opt);\n if (bool) {\n nodes.add(item);\n }\n }\n } else {\n const arr = [].slice.call(items);\n nodes = new Set(arr);\n }\n }\n return nodes;\n }\n\n /**\n * find descendant nodes\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} baseNode - base Element node\n * @param {object} opt - options\n * @returns {object} - collection of nodes and pending state\n */\n _findDescendantNodes(leaves, baseNode, opt) {\n const [leaf, ...filterLeaves] = leaves;\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n const compound = filterLeaves.length > 0;\n let nodes = new Set();\n let pending = false;\n if (this.#shadow) {\n pending = true;\n } else {\n switch (leafType) {\n case SELECTOR_ID: {\n if (this.#root.nodeType === ELEMENT_NODE) {\n pending = true;\n } else {\n const node = this.#root.getElementById(leafName);\n if (node && node !== baseNode && baseNode.contains(node)) {\n if (compound) {\n const bool = this._matchLeaves(filterLeaves, node, opt);\n if (bool) {\n nodes.add(node);\n }\n } else {\n nodes.add(node);\n }\n }\n }\n break;\n }\n case SELECTOR_CLASS: {\n const items = baseNode.getElementsByClassName(leafName);\n nodes = this._matchHTMLCollection(items, {\n compound,\n filterLeaves\n });\n break;\n }\n case SELECTOR_TYPE: {\n if (this.#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 case SELECTOR_PSEUDO_ELEMENT: {\n matchPseudoElementSelector(leafName, opt);\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 { dir } = opt;\n let 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 const { parentNode } = node;\n if (parentNode) {\n const walker =\n this.#document.createTreeWalker(parentNode, SHOW_ELEMENT);\n let refNode = this._traverse(node, walker);\n if (refNode === node) {\n refNode = walker.nextSibling();\n }\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.#document.createTreeWalker(node, SHOW_ELEMENT);\n let 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 matched = nodes;\n } else if (pending) {\n const walker = this.#document.createTreeWalker(node, SHOW_ELEMENT);\n let refNode = walker.nextNode();\n while (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 const walker =\n this.#document.createTreeWalker(node.parentNode, SHOW_ELEMENT);\n let 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 break;\n }\n case '>': {\n const refNode = node.parentNode;\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 default: {\n const arr = [];\n let refNode = node.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 matched = new Set(arr.reverse());\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * find matched node from finder\n * @private\n * @param {Array.<object>} leaves - AST leaves\n * @param {object} [opt] - options\n * @param {object} [opt.node] - node to start from\n * @returns {?object} - matched node\n */\n _findNode(leaves, opt = {}) {\n const { node } = opt;\n let matchedNode;\n let refNode = this._traverse(node, this.#finder);\n if (refNode) {\n if (refNode.nodeType !== ELEMENT_NODE) {\n refNode = this.#finder.nextNode();\n } else if (refNode === node) {\n if (refNode !== this.#root) {\n refNode = this.#finder.nextNode();\n }\n }\n while (refNode) {\n let bool;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (refNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(refNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n const matched = this._matchLeaves(leaves, refNode, {\n warn: this.#warn\n });\n if (matched) {\n matchedNode = refNode;\n break;\n }\n }\n refNode = this.#finder.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 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} leaf - AST leaf\n * @param {object} opt - options\n * @returns {Array} - [nodes, filtered]\n */\n _findLineal(leaf, opt = {}) {\n const { complex, compound } = opt;\n const nodes = [];\n let filtered = false;\n let bool = this._matchLeaves([leaf], this.#node);\n if (bool && !complex && !compound) {\n nodes.push(this.#node);\n filtered = true;\n } else {\n if (bool) {\n nodes.push(this.#node);\n if (!compound) {\n filtered = true;\n }\n }\n let refNode = this.#node.parentNode;\n while (refNode) {\n bool = this._matchLeaves([leaf], refNode);\n if (bool) {\n nodes.push(refNode);\n if (!compound) {\n filtered = true;\n }\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, {\n node: this.#node\n });\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 {Array} nodes - nodes\n * @param {object} opt - options\n * @param {boolean} [opt.compound] - compound selector\n * @param {Array} [opt.filterLeaves] - filter leaves\n * @returns {Array} - [nodes, filtered]\n */\n _findFromHTMLCollection(items, nodes = [], opt = {}) {\n const { compound, filterLeaves } = opt;\n let filtered = false;\n const l = items.length;\n if (l) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n for (let i = 0; i < l; i++) {\n const node = items[i];\n if (node === this.#node || isInclusive(node, 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 }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n }\n } else {\n nodes = [].slice.call(items);\n if (!compound) {\n filtered = true;\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 { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n const compound = filterLeaves.length > 0;\n let nodes = [];\n let filtered = false;\n let pending = false;\n switch (leafType) {\n case SELECTOR_PSEUDO_ELEMENT: {\n matchPseudoElementSelector(leafName, {\n warn: this.#warn\n });\n break;\n }\n case SELECTOR_ID: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaf, {\n complex,\n compound\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 pending = true;\n }\n break;\n }\n case SELECTOR_CLASS: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaf, {\n complex,\n compound\n });\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else if (this.#root.nodeType === DOCUMENT_NODE) {\n const items = this.#root.getElementsByClassName(leafName);\n [nodes, filtered] = this._findFromHTMLCollection(items, nodes, {\n compound,\n filterLeaves\n });\n } else {\n pending = true;\n }\n break;\n }\n case SELECTOR_TYPE: {\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaf, {\n complex,\n compound\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 [nodes, filtered] = this._findFromHTMLCollection(items, nodes, {\n compound,\n filterLeaves\n });\n } else {\n pending = true;\n }\n break;\n }\n default: {\n if (targetType !== TARGET_LINEAL && REG_SHADOW_HOST.test(leafName)) {\n if (this.#shadow &&\n this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const node = this._matchShadowHostPseudoClass(leaf, this.#node);\n if (node) {\n nodes.push(node);\n }\n }\n } else if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaf, {\n complex,\n compound\n });\n } else if (targetType === TARGET_FIRST) {\n [nodes, filtered] = this._findFirst(leaves);\n } else {\n pending = true;\n }\n }\n }\n return {\n compound,\n filtered,\n nodes,\n pending\n };\n }\n\n /**\n * get entry twig\n * @private\n * @param {Array.<object>} branch - AST branch\n * @param {string} targetType - target type\n * @returns {object} - direction and twig\n */\n _getEntryTwig(branch, targetType) {\n const branchLen = branch.length;\n const complex = branchLen > 1;\n const firstTwig = branch[0];\n let dir;\n let twig;\n if (complex) {\n const {\n combo: firstCombo,\n leaves: [{\n name: firstName,\n type: firstType\n }]\n } = firstTwig;\n const lastTwig = branch[branchLen - 1];\n const {\n leaves: [{\n name: lastName,\n type: lastType\n }]\n } = lastTwig;\n if (lastType === SELECTOR_PSEUDO_ELEMENT || lastType === SELECTOR_ID) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (firstType === SELECTOR_PSEUDO_ELEMENT ||\n firstType === SELECTOR_ID) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (targetType === TARGET_ALL) {\n if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (branchLen === 2) {\n const { name: comboName } = firstCombo;\n if (/^[+~]$/.test(comboName)) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else {\n dir = DIR_NEXT;\n twig = firstTwig;\n }\n } else if (lastName === '*' && lastType === SELECTOR_TYPE) {\n dir = DIR_NEXT;\n twig = firstTwig;\n } else if (firstName === '*' && firstType === SELECTOR_TYPE) {\n dir = DIR_PREV;\n twig = lastTwig;\n } else {\n let bool;\n let sibling;\n for (const { combo, leaves: [leaf] } of branch) {\n const { type: leafType } = leaf;\n const leafName = unescapeSelector(leaf.name);\n if (leafType === SELECTOR_PSEUDO_CLASS && leafName === 'dir') {\n bool = false;\n break;\n }\n if (combo && !sibling) {\n const { name: comboName } = combo;\n if (/^[+~]$/.test(comboName)) {\n bool = true;\n sibling = 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 return {\n complex,\n dir,\n twig\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 { complex, dir, twig } = this._getEntryTwig(branch, targetType);\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.#finder;\n } else {\n node = this.#root;\n walker = this.#tree;\n }\n let nextNode = this._traverse(node, walker);\n while (nextNode) {\n let bool = false;\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (nextNode === this.#node) {\n bool = true;\n } else {\n bool = this.#node.contains(nextNode);\n }\n } else {\n bool = true;\n }\n if (bool) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n const matched = this._matchLeaves(leaves, nextNode, {\n warn: this.#warn\n });\n if (matched) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n }\n 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 * match nodes\n * @private\n * @param {string} targetType - target type\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchNodes(targetType) {\n const [...branches] = this.#ast;\n const l = branches.length;\n let nodes = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, dir, filtered, find } = branches[i];\n const branchLen = branch.length;\n if (branchLen && find) {\n const entryNodes = this.#nodes[i];\n const entryNodesLen = entryNodes.length;\n const lastIndex = branchLen - 1;\n if (lastIndex === 0) {\n const { leaves: [, ...filterLeaves] } = branch[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 const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool && node !== this.#node && this.#node.contains(node)) {\n nodes.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (filterLeaves.length) {\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n nodes.add(node);\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...entryNodes]);\n this.#sort = true;\n } else {\n nodes = new Set([...entryNodes]);\n }\n } else {\n const [node] = [...entryNodes];\n nodes.add(node);\n }\n } else if (dir === DIR_NEXT) {\n let { combo, leaves: entryLeaves } = branch[0];\n const [, ...filterLeaves] = entryLeaves;\n let matched;\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const twig = {\n combo,\n leaves\n };\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === lastIndex) {\n if (targetType === TARGET_ALL) {\n if (nodes.size) {\n const n = [...nodes];\n nodes = new Set([...n, ...arr]);\n } else {\n nodes = new Set([...arr]);\n }\n this.#sort = true;\n } else {\n const [node] = sortNodes(arr);\n nodes.add(node);\n }\n matched = true;\n } else {\n combo = nextCombo;\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n } else {\n matched = false;\n }\n if (matched && targetType !== TARGET_ALL) {\n break;\n }\n }\n if (!matched && targetType === TARGET_FIRST) {\n const [entryNode] = [...entryNodes];\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n let nextNodes = new Set([refNode]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const twig = {\n combo,\n leaves\n };\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === lastIndex) {\n const [node] = sortNodes(arr);\n nodes.add(node);\n matched = true;\n } else {\n combo = nextCombo;\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n if (matched) {\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n nextNodes = new Set([refNode]);\n }\n }\n } else {\n const { leaves: entryLeaves } = branch[lastIndex];\n const [, ...filterLeaves] = entryLeaves;\n let matched;\n for (let j = 0; j < entryNodesLen; j++) {\n const node = entryNodes[j];\n const bool = filtered || this._matchLeaves(filterLeaves, node, {\n warn: this.#warn\n });\n if (bool) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n nodes.add(node);\n matched = true;\n if (targetType === TARGET_ALL &&\n branchLen > 1 && nodes.size > 1) {\n this.#sort = true;\n }\n } else {\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n }\n if (matched && targetType !== TARGET_ALL) {\n break;\n }\n }\n if (!matched && targetType === TARGET_FIRST) {\n const [entryNode] = [...entryNodes];\n let refNode = this._findNode(entryLeaves, {\n node: entryNode\n });\n while (refNode) {\n let nextNodes = new Set([refNode]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, {\n dir,\n warn: this.#warn\n });\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n nodes.add(refNode);\n matched = true;\n } else {\n nextNodes = new Set(arr);\n matched = false;\n }\n } else {\n matched = false;\n break;\n }\n }\n if (matched) {\n break;\n }\n refNode = this._findNode(entryLeaves, {\n node: refNode\n });\n nextNodes = new Set([refNode]);\n }\n }\n }\n }\n }\n return nodes;\n }\n\n /**\n * find matched nodes\n * @private\n * @param {string} targetType - target type\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _find(targetType, node, selector, opt) {\n node = this._setup(node, selector, opt);\n switch (targetType) {\n case TARGET_ALL:\n case TARGET_FIRST: {\n this.#tree = this.#document.createTreeWalker(this.#root, WALKER_FILTER);\n this.#finder = this.#document.createTreeWalker(node, WALKER_FILTER);\n this.#sort = false;\n break;\n }\n default: {\n if (node.nodeType !== ELEMENT_NODE) {\n const msg = `Unexpected node ${node.nodeName}`;\n throw new TypeError(msg);\n }\n }\n }\n this._collectNodes(targetType);\n const nodes = this._matchNodes(targetType);\n return nodes;\n }\n\n /**\n * matches\n * @param {object} node - Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {boolean} - `true` if matched `false` otherwise\n */\n matches(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_SELF, node, selector, opt);\n if (nodes.size) {\n res = nodes.has(this.#node);\n }\n } catch (e) {\n this._onError(e);\n }\n return !!res;\n }\n\n /**\n * closest\n * @param {object} node - Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n closest(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_LINEAL, node, selector, opt);\n let refNode = this.#node;\n while (refNode) {\n if (nodes.has(refNode)) {\n res = refNode;\n break;\n }\n if (refNode.parentNode) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {?object} - matched node\n */\n querySelector(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_FIRST, node, selector, opt);\n nodes.delete(this.#node);\n if (nodes.size) {\n [res] = sortNodes(nodes);\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? null;\n }\n\n /**\n * query selector all\n * NOTE: returns Array, not NodeList\n * @param {object} node - Document, DocumentFragment, Element node\n * @param {string} selector - CSS selector\n * @param {object} opt - options\n * @returns {Array.<object|undefined>} - collection of matched nodes\n */\n querySelectorAll(node, selector, opt) {\n let res;\n try {\n const nodes = this._find(TARGET_ALL, node, selector, opt);\n nodes.delete(this.#node);\n if (nodes.size) {\n if (this.#sort) {\n res = sortNodes(nodes);\n } else {\n res = [...nodes];\n }\n }\n } catch (e) {\n this._onError(e);\n }\n return res ?? [];\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["finder_exports", "__export", "Finder", "__toCommonJS", "import_is_potential_custom_element_name", "import_dom_util", "import_matcher", "import_parser", "import_constant", "DIR_NEXT", "DIR_PREV", "TARGET_ALL", "TARGET_FIRST", "TARGET_LINEAL", "TARGET_SELF", "WALKER_FILTER", "#ast", "#cache", "#document", "#finder", "#node", "#nodes", "#results", "#root", "#selector", "#shadow", "#sort", "#tree", "#warn", "#window", "e", "node", "selector", "opt", "warn", "nodes", "ast", "cachedItem", "l", "i", "cssAst", "branches", "items", "branch", "item", "leaves", "nextItem", "msg", "walker", "current", "refNode", "anb", "a", "b", "reverse", "parentNode", "matched", "selectorBranches", "selectorNodes", "bool", "nth", "j", "localName", "prefix", "itemLocalName", "itemPrefix", "m", "nthName", "nthIdentName", "identName", "anbMap", "astName", "dir", "res", "parent", "langPart", "regExtendedLang", "langMain", "langSub", "langRest", "extendedMain", "extendedSub", "len", "extendedRest", "value", "leaf", "leafType", "combo", "twigLeaves", "itemType", "twig", "nextNode", "astData", "twigBranches", "forgive", "lastIndex", "nextNodes", "arr", "astChildren", "selectors", "css", "leavesSet", "regAnchor", "regFormCtrl", "regFormValidity", "regInteract", "regTypeCheck", "regTypeDate", "regTypeRange", "regTypeText", "href", "origin", "pathname", "attrURL", "hash", "id", "isCustomElementName", "targetNode", "nodeName", "checked", "regTypeReset", "regTypeSubmit", "form", "isMultiple", "defaultOpt", "inputType", "node1", "node2", "host", "astType", "result", "compound", "filterLeaves", "baseNode", "leafName", "pending", "comboName", "matchedNode", "filtered", "complex", "targetType", "branchLen", "firstTwig", "firstCombo", "firstName", "firstType", "lastTwig", "lastName", "lastType", "sibling", "pendingItems", "pendingItem", "index", "find", "entryNodes", "entryNodesLen", "n", "entryLeaves", "nextCombo", "entryNode"]
7
7
  }