UNPKG

@worker-tools/deno-kv-storage

Version:

An implementation of the StorageArea (1,2,3) interface for Deno with an extensible system for supporting various database backends.

103 lines 3.64 kB
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Queue_source, _Queue_queue; class Queue { constructor(iterable) { _Queue_source.set(this, void 0); _Queue_queue.set(this, void 0); Object.defineProperty(this, "head", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "done", { enumerable: true, configurable: true, writable: true, value: void 0 }); __classPrivateFieldSet(this, _Queue_source, iterable[Symbol.asyncIterator](), "f"); __classPrivateFieldSet(this, _Queue_queue, { value: undefined, next: undefined, }, "f"); this.head = __classPrivateFieldGet(this, _Queue_queue, "f"); this.done = false; } async next() { const result = await __classPrivateFieldGet(this, _Queue_source, "f").next(); if (!result.done) { const nextNode = { value: result.value, next: undefined, }; __classPrivateFieldGet(this, _Queue_queue, "f").next = nextNode; __classPrivateFieldSet(this, _Queue_queue, nextNode, "f"); } else { this.done = true; } } } _Queue_source = new WeakMap(), _Queue_queue = new WeakMap(); /** * Branches the given async iterable into the n branches. * * Example: * * ```ts * import { tee } from "./tee.ts"; * * const gen = async function* gen() { * yield 1; * yield 2; * yield 3; * } * * const [branch1, branch2] = tee(gen()); * * (async () => { * for await (const n of branch1) { * console.log(n); // => 1, 2, 3 * } * })(); * * (async () => { * for await (const n of branch2) { * console.log(n); // => 1, 2, 3 * } * })(); * ``` */ export function tee(iterable, n = 2) { const queue = new Queue(iterable); async function* generator() { let buffer = queue.head; while (true) { if (buffer.next) { buffer = buffer.next; yield buffer.value; } else if (queue.done) { return; } else { await queue.next(); } } } const branches = Array.from({ length: n }).map(() => generator()); return branches; } //# sourceMappingURL=tee.js.map