UNPKG

@loken/hierarchies

Version:

Library for working with hierarchies of identifiers and identifiable objects.

29 lines (28 loc) 1.2 kB
import { LinearStack, LinearQueue } from "@loken/utilities"; import { GraphSignal } from "./graph-signal.js"; const flattenGraph = (options) => options.signal !== void 0 ? flattenSignalGraph(options) : flattenFullGraph(options), flattenSignalGraph = (options) => { const result = [], signal = new GraphSignal(options), signalFn = options.signal; let res = signal.tryGetNext(); for (; res[1]; ) signalFn(res[0], signal), signal.shouldYield() && result.push(res[0]), signal.cleanup(), res = signal.tryGetNext(); return result; }, flattenFullGraph = (options) => { const result = [], visited = options.detectCycles ? /* @__PURE__ */ new Set() : void 0, store = options.type === "depth-first" ? new LinearStack() : new LinearQueue(); store.attach(options.roots); const nextFn = options.next; for (; store.count > 0; ) { const node = store.detach(); if (visited != null && visited.has(node)) continue; visited == null || visited.add(node), result.push(node); const children = nextFn(node); children && store.attach(children); } return result; }; export { flattenFullGraph, flattenGraph, flattenSignalGraph }; //# sourceMappingURL=graph-flatten.js.map