UNPKG

@sanity/desk-tool

Version:

Tool for managing all sorts of content in a structured manner

82 lines (80 loc) 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getJsonStream = getJsonStream; function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function getJsonStream(_x, _x2) { return _getJsonStream.apply(this, arguments); } function _getJsonStream() { _getJsonStream = _asyncToGenerator(function* (url, token) { var authorizationHeader = { Authorization: "Bearer ".concat(token) }; var options = token ? { headers: authorizationHeader } : { credentials: 'include' }; var response = yield fetch(url, options); return getStream(response); }); return _getJsonStream.apply(this, arguments); } function getStream(response) { var body = response.body; if (!body) { throw new Error('Failed to read body from response'); } var reader; var cancelled = false; return new ReadableStream({ start(controller) { reader = body.getReader(); var decoder = new TextDecoder(); var buffer = ''; reader.read().then(function processResult(result) { if (result.done) { if (cancelled) { return; } buffer = buffer.trim(); if (buffer.length === 0) { controller.close(); return; } controller.enqueue(JSON.parse(buffer)); controller.close(); return; } buffer += decoder.decode(result.value, { stream: true }); var lines = buffer.split('\n'); for (var i = 0; i < lines.length - 1; ++i) { var line = lines[i].trim(); if (line.length === 0) { continue; } try { controller.enqueue(JSON.parse(line)); } catch (err) { controller.error(err); cancelled = true; reader.cancel(); return; } } buffer = lines[lines.length - 1]; // eslint-disable-next-line consistent-return return reader.read().then(processResult).catch(err => controller.error(err)); }).catch(err => controller.error(err)); }, cancel() { cancelled = true; reader.cancel(); } }); }