UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

105 lines 5.08 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _StreamReader_reader, _StreamReader_readableStreamController, _StreamReader_readableStreamReader; Object.defineProperty(exports, "__esModule", { value: true }); exports.StreamReader = void 0; const web_streams_polyfill_1 = require("web-streams-polyfill"); const exceptions_1 = require("../../exceptions"); const message_decoder_1 = require("../../internal/message-decoder"); class StreamReader { constructor(config) { _StreamReader_reader.set(this, void 0); _StreamReader_readableStreamController.set(this, void 0); _StreamReader_readableStreamReader.set(this, void 0); __classPrivateFieldSet(this, _StreamReader_reader, config.reader, "f"); __classPrivateFieldSet(this, _StreamReader_readableStreamController, null, "f"); __classPrivateFieldSet(this, _StreamReader_readableStreamReader, new web_streams_polyfill_1.ReadableStreamDefaultReader(new web_streams_polyfill_1.ReadableStream({ start: (controller) => { __classPrivateFieldSet(this, _StreamReader_readableStreamController, controller, "f"); }, })), "f"); const messageDecoder = new message_decoder_1.MessageDecoder({ onMessage: (message) => { __classPrivateFieldGet(this, _StreamReader_readableStreamController, "f")?.enqueue(message); }, }); listenStream({ streamReader: __classPrivateFieldGet(this, _StreamReader_reader, "f"), onRead(data) { messageDecoder.appendData(data); }, }); } async dispose() { __classPrivateFieldGet(this, _StreamReader_readableStreamController, "f")?.close(); await __classPrivateFieldGet(this, _StreamReader_readableStreamReader, "f").cancel(); await __classPrivateFieldGet(this, _StreamReader_reader, "f").cancel(); } async read() { const result = await __classPrivateFieldGet(this, _StreamReader_readableStreamReader, "f").read(); if (result.done) { const errorMessage = 'streamReader closed.'; throw new exceptions_1.ISCPTransportClosedError(errorMessage); } return result.value; } } exports.StreamReader = StreamReader; _StreamReader_reader = new WeakMap(), _StreamReader_readableStreamController = new WeakMap(), _StreamReader_readableStreamReader = new WeakMap(); // // Static Function // const listenStream = (params) => { return new Promise((resolve, reject) => { const { streamReader, onRead } = params; const readerMap = new Map(); (async () => { try { for (let i = 0;; i++) { const { value: readableStream, done: doneStream } = await streamReader.read(); if (doneStream) { break; } const reader = readableStream.getReader(); readerMap.set(i, reader); (async (j, r, m) => { for (;;) { const { value, done } = await r.read(); if (done) { m.delete(j); break; } onRead(value); } })(i, reader, readerMap); } const listeningReaders = [...readerMap.values()]; for (const reader of listeningReaders) { await reader.cancel(); } if (readerMap.size !== 0) { reject(new Error('could not cleanup readerMap')); return; } resolve(); } catch (error) { reject(error); } finally { readerMap.clear(); } })(); }); }; //# sourceMappingURL=stream-reader.js.map