UNPKG

tupleson

Version:

A hackable JSON serializer/deserializer

59 lines 1.5 kB
import { TsonAbortError, TsonPromiseRejectionError, TsonStreamInterruptedError } from "../asyncErrors.js"; const ITERATOR_VALUE = 0; const ITERATOR_ERROR = 1; const ITERATOR_DONE = 2; function isAsyncIterable(value) { return !!value && typeof value === "object" && typeof value[Symbol.asyncIterator] === "function"; } const tsonAsyncIterable = { async: true, deserialize: (opts) => { return async function* generator() { let next; while (next = await opts.reader.read(), !next.done) { const { value } = next; if (value instanceof TsonStreamInterruptedError) { if (value.cause instanceof TsonAbortError) { opts.close(); return; } throw value; } switch (value[0]) { case ITERATOR_DONE: { opts.close(); return; } case ITERATOR_ERROR: { opts.close(); throw TsonPromiseRejectionError.from(value[1]); } case ITERATOR_VALUE: { yield value[1]; break; } } } }(); }, key: "AsyncIterable", serializeIterator: async function* serialize(opts) { try { for await (const value of opts.value) { yield [ITERATOR_VALUE, value]; } yield [ITERATOR_DONE]; } catch (err) { yield [ITERATOR_ERROR, err]; } }, test: isAsyncIterable }; export { tsonAsyncIterable }; //# sourceMappingURL=tsonAsyncIterable.mjs.map