UNPKG

@ackee/antonio-core

Version:

A HTTP client built on fetch API with axios-like API.

39 lines (38 loc) 4.9 kB
import ChunkToJsonParser from './parsers/ChunkToJsonParser'; export async function* iterableStream(stream, contentTypeIsJson) { if (!stream) { return; } const reader = stream.getReader(); try { const decoder = new TextDecoder(); const parser = contentTypeIsJson ? new ChunkToJsonParser() : null; let result = await reader.read(); let yieldedSome = false; let parsedChunk; while (!result.done) { const arrayBuffer = result.value; const decodedChunk = decoder.decode(arrayBuffer, { stream: true }); parsedChunk = parser ? parser.parse(decodedChunk) : decodedChunk; if (parsedChunk.length > 0) { yield parsedChunk; yieldedSome = true; } result = await reader.read(); } // If every chunk was empty, yield now, at the end, the empty chunk as the last value. // Otherwise the generator wouldn't ever end. if (!yieldedSome) { yield parsedChunk; } } catch (e) { reader.releaseLock(); await stream.cancel(); throw e; } finally { reader.releaseLock(); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaHVua1RvSnNvblBhcnNlciIsIml0ZXJhYmxlU3RyZWFtIiwic3RyZWFtIiwiY29udGVudFR5cGVJc0pzb24iLCJyZWFkZXIiLCJnZXRSZWFkZXIiLCJkZWNvZGVyIiwiVGV4dERlY29kZXIiLCJwYXJzZXIiLCJyZXN1bHQiLCJyZWFkIiwieWllbGRlZFNvbWUiLCJwYXJzZWRDaHVuayIsImRvbmUiLCJhcnJheUJ1ZmZlciIsInZhbHVlIiwiZGVjb2RlZENodW5rIiwiZGVjb2RlIiwicGFyc2UiLCJsZW5ndGgiLCJlIiwicmVsZWFzZUxvY2siLCJjYW5jZWwiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXNwb25zZS9pdGVyYWJsZVN0cmVhbS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2h1bmtUb0pzb25QYXJzZXIgZnJvbSAnLi9wYXJzZXJzL0NodW5rVG9Kc29uUGFyc2VyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBpdGVyYWJsZVN0cmVhbShzdHJlYW06IEJvZHlbJ2JvZHknXSwgY29udGVudFR5cGVJc0pzb246IGJvb2xlYW4pIHtcbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBjb250ZW50VHlwZUlzSnNvbiA/IG5ldyBDaHVua1RvSnNvblBhcnNlcigpIDogbnVsbDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgIGxldCB5aWVsZGVkU29tZSA9IGZhbHNlO1xuICAgICAgICBsZXQgcGFyc2VkQ2h1bms6IHN0cmluZyB8IGFueVtdIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZENodW5rID0gZGVjb2Rlci5kZWNvZGUoYXJyYXlCdWZmZXIsIHsgc3RyZWFtOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICBwYXJzZWRDaHVuayA9IHBhcnNlciA/IHBhcnNlci5wYXJzZShkZWNvZGVkQ2h1bmspIDogZGVjb2RlZENodW5rO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkQ2h1bmsubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHBhcnNlZENodW5rO1xuICAgICAgICAgICAgICAgIHlpZWxkZWRTb21lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGV2ZXJ5IGNodW5rIHdhcyBlbXB0eSwgeWllbGQgbm93LCBhdCB0aGUgZW5kLCB0aGUgZW1wdHkgY2h1bmsgYXMgdGhlIGxhc3QgdmFsdWUuXG4gICAgICAgIC8vIE90aGVyd2lzZSB0aGUgZ2VuZXJhdG9yIHdvdWxkbid0IGV2ZXIgZW5kLlxuICAgICAgICBpZiAoIXlpZWxkZWRTb21lKSB7XG4gICAgICAgICAgICB5aWVsZCBwYXJzZWRDaHVuaztcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgIGF3YWl0IHN0cmVhbS5jYW5jZWwoKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIEl0ZXJhYmxlU3RyZWFtID0gUmV0dXJuVHlwZTx0eXBlb2YgaXRlcmFibGVTdHJlYW0+O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxpQkFBaUIsTUFBTSw2QkFBNkI7QUFFM0QsT0FBTyxnQkFBZ0JDLGNBQWNBLENBQUNDLE1BQW9CLEVBQUVDLGlCQUEwQixFQUFFO0VBQ3BGLElBQUksQ0FBQ0QsTUFBTSxFQUFFO0lBQ1Q7RUFDSjtFQUVBLE1BQU1FLE1BQU0sR0FBR0YsTUFBTSxDQUFDRyxTQUFTLENBQUMsQ0FBQztFQUVqQyxJQUFJO0lBQ0EsTUFBTUMsT0FBTyxHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLE1BQU1DLE1BQU0sR0FBR0wsaUJBQWlCLEdBQUcsSUFBSUgsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLElBQUk7SUFDakUsSUFBSVMsTUFBTSxHQUFHLE1BQU1MLE1BQU0sQ0FBQ00sSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSUMsV0FBVyxHQUFHLEtBQUs7SUFDdkIsSUFBSUMsV0FBdUM7SUFFM0MsT0FBTyxDQUFDSCxNQUFNLENBQUNJLElBQUksRUFBRTtNQUNqQixNQUFNQyxXQUFXLEdBQUdMLE1BQU0sQ0FBQ00sS0FBSztNQUNoQyxNQUFNQyxZQUFZLEdBQUdWLE9BQU8sQ0FBQ1csTUFBTSxDQUFDSCxXQUFXLEVBQUU7UUFBRVosTUFBTSxFQUFFO01BQUssQ0FBQyxDQUFDO01BRWxFVSxXQUFXLEdBQUdKLE1BQU0sR0FBR0EsTUFBTSxDQUFDVSxLQUFLLENBQUNGLFlBQVksQ0FBQyxHQUFHQSxZQUFZO01BRWhFLElBQUlKLFdBQVcsQ0FBQ08sTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNUCxXQUFXO1FBQ2pCRCxXQUFXLEdBQUcsSUFBSTtNQUN0QjtNQUVBRixNQUFNLEdBQUcsTUFBTUwsTUFBTSxDQUFDTSxJQUFJLENBQUMsQ0FBQztJQUNoQzs7SUFFQTtJQUNBO0lBQ0EsSUFBSSxDQUFDQyxXQUFXLEVBQUU7TUFDZCxNQUFNQyxXQUFXO0lBQ3JCO0VBQ0osQ0FBQyxDQUFDLE9BQU9RLENBQUMsRUFBRTtJQUNSaEIsTUFBTSxDQUFDaUIsV0FBVyxDQUFDLENBQUM7SUFDcEIsTUFBTW5CLE1BQU0sQ0FBQ29CLE1BQU0sQ0FBQyxDQUFDO0lBQ3JCLE1BQU1GLENBQUM7RUFDWCxDQUFDLFNBQVM7SUFDTmhCLE1BQU0sQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDO0VBQ3hCO0FBQ0oiLCJpZ25vcmVMaXN0IjpbXX0=