UNPKG

@brimdata/zealot

Version:

The Javascript Client for Zed Lakes

85 lines (84 loc) 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "pipeText", { enumerable: true, get: ()=>pipeText }); function pipeText(stream) { if (!stream) return noop(); // @ts-ignore if (stream.getReader) { return browserPipeText(stream); } else { return nodePipeText(stream); } } async function* noop() {} async function* browserPipeText(stream) { let reader = stream.getReader(); let text = new TextDecoder(); try { while(true){ let { done , value } = await reader.read(); if (!done && value) { yield text.decode(value); } else { return; } } } finally{ reader.releaseLock(); } } function nodePipeText(stream) { let resolves = []; let pending = []; stream.on("data", (data)=>{ let value = { done: false, value: data.toString() }; if (resolves.length) { resolves.shift()(value); } else { pending.push(value); } }); stream.on("end", ()=>{ const value = { done: true, value: null }; if (resolves.length) { resolves.shift()(value); } else { pending.push(value); } }); return { return () { return Promise.resolve({ done: true, value: null }); }, throw (e) { return Promise.reject(e); }, next () { const result = pending.shift(); if (result) { return Promise.resolve(result); } else { return new Promise((res)=>{ resolves.push(res); }); } }, [Symbol.asyncIterator]: function() { return this; } }; }