UNPKG

fontoxpath

Version:

A minimalistic XPath 3.1 engine in JavaScript

29 lines (27 loc) 871 B
import createChildGenerator from './createChildGenerator'; import { DONE_TOKEN, ready } from './iterators'; import createNodeValue from '../dataTypes/createNodeValue'; export default function createDescendantGenerator (domFacade, node) { /** * @type {!Array<!Iterator<!Node>>} */ const descendantIteratorStack = [createChildGenerator(domFacade, node)]; return { next: () => { if (!descendantIteratorStack.length) { return DONE_TOKEN; } let value = descendantIteratorStack[0].next(); while (value.done) { descendantIteratorStack.shift(); if (!descendantIteratorStack.length) { return DONE_TOKEN; } value = descendantIteratorStack[0].next(); } // Iterator over these children next descendantIteratorStack.unshift(createChildGenerator(domFacade, value.value)); return ready(createNodeValue(value.value)); } }; }