UNPKG

@apollo/client

Version:

A fully-featured caching GraphQL client.

71 lines 2.12 kB
import { canUseAsyncIteratorSymbol } from "../../../utilities/index.js"; export default function nodeStreamIterator(stream) { var cleanup = null; var error = null; var done = false; var data = []; var waiting = []; function onData(chunk) { if (error) return; if (waiting.length) { var shiftedArr = waiting.shift(); if (Array.isArray(shiftedArr) && shiftedArr[0]) { return shiftedArr[0]({ value: chunk, done: false }); } } data.push(chunk); } function onError(err) { error = err; var all = waiting.slice(); all.forEach(function (pair) { pair[1](err); }); !cleanup || cleanup(); } function onEnd() { done = true; var all = waiting.slice(); all.forEach(function (pair) { pair[0]({ value: undefined, done: true }); }); !cleanup || cleanup(); } cleanup = function () { cleanup = null; stream.removeListener("data", onData); stream.removeListener("error", onError); stream.removeListener("end", onEnd); stream.removeListener("finish", onEnd); stream.removeListener("close", onEnd); }; stream.on("data", onData); stream.on("error", onError); stream.on("end", onEnd); stream.on("finish", onEnd); stream.on("close", onEnd); function getNext() { return new Promise(function (resolve, reject) { if (error) return reject(error); if (data.length) return resolve({ value: data.shift(), done: false }); if (done) return resolve({ value: undefined, done: true }); waiting.push([resolve, reject]); }); } var iterator = { next: function () { return getNext(); }, }; if (canUseAsyncIteratorSymbol) { iterator[Symbol.asyncIterator] = function () { return this; }; } return iterator; } //# sourceMappingURL=nodeStream.js.map