UNPKG

mostly-dom

Version:
34 lines (23 loc) 865 B
import { VNode } from '../types' import { hasCssSelector } from './hasCssSelector' export const querySelector: QuerySelector = ((cssSelector: string, vNode?: VNode) => vNode ? _querySelector(cssSelector, vNode) : (_vNode: VNode) => _querySelector(cssSelector, _vNode)) as QuerySelector function _querySelector(cssSelector: string, vNode: VNode): VNode | null { const scope = vNode.scope const children: Array<VNode> = [ vNode ] while (children.length > 0) { const child = children.shift() as VNode if (child.scope !== scope) continue if (hasCssSelector(cssSelector, child)) return child if (!child.children) continue children.push(...child.children) } return null } export interface QuerySelector { (cssSelector: string, vNode: VNode): VNode | null (cssSelector: string): (vNode: VNode) => VNode | null }