aboutsummaryrefslogtreecommitdiff
path: root/node_modules/readable-web-to-node-stream/lib/index.js
diff options
context:
space:
mode:
authorMinteck <freeziv.ytb@gmail.com>2021-03-07 18:29:17 +0100
committerMinteck <freeziv.ytb@gmail.com>2021-03-07 18:29:17 +0100
commit0f79e708bf07721b73ea41e5d341be08e8ea4dce (patch)
treef3c63cd6a9f4ef0b26f95eec6a031600232e80c8 /node_modules/readable-web-to-node-stream/lib/index.js
downloadelectrode-0f79e708bf07721b73ea41e5d341be08e8ea4dce.tar.gz
electrode-0f79e708bf07721b73ea41e5d341be08e8ea4dce.tar.bz2
electrode-0f79e708bf07721b73ea41e5d341be08e8ea4dce.zip
Initial commit
Diffstat (limited to 'node_modules/readable-web-to-node-stream/lib/index.js')
-rw-r--r--node_modules/readable-web-to-node-stream/lib/index.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/node_modules/readable-web-to-node-stream/lib/index.js b/node_modules/readable-web-to-node-stream/lib/index.js
new file mode 100644
index 0000000..1efaea1
--- /dev/null
+++ b/node_modules/readable-web-to-node-stream/lib/index.js
@@ -0,0 +1,69 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ReadableWebToNodeStream = void 0;
+const readable_stream_1 = require("readable-stream");
+/**
+ * Converts a Web-API stream into Node stream.Readable class
+ * Node stream readable: https://nodejs.org/api/stream.html#stream_readable_streams
+ * Web API readable-stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream
+ * Node readable stream: https://nodejs.org/api/stream.html#stream_readable_streams
+ */
+class ReadableWebToNodeStream extends readable_stream_1.Readable {
+ /**
+ *
+ * @param stream Readable​Stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream
+ */
+ constructor(stream) {
+ super();
+ this.bytesRead = 0;
+ this.released = false;
+ this.reader = stream.getReader();
+ }
+ /**
+ * Implementation of readable._read(size).
+ * When readable._read() is called, if data is available from the resource,
+ * the implementation should begin pushing that data into the read queue
+ * https://nodejs.org/api/stream.html#stream_readable_read_size_1
+ */
+ async _read() {
+ // Should start pushing data into the queue
+ // Read data from the underlying Web-API-readable-stream
+ if (this.released) {
+ this.push(null); // Signal EOF
+ return;
+ }
+ this.pendingRead = this.reader.read();
+ const data = await this.pendingRead;
+ // clear the promise before pushing pushing new data to the queue and allow sequential calls to _read()
+ delete this.pendingRead;
+ if (data.done || this.released) {
+ this.push(null); // Signal EOF
+ }
+ else {
+ this.bytesRead += data.value.length;
+ this.push(data.value); // Push new data to the queue
+ }
+ }
+ /**
+ * If there is no unresolved read call to Web-API Readable​Stream immediately returns;
+ * otherwise will wait until the read is resolved.
+ */
+ async waitForReadToComplete() {
+ if (this.pendingRead) {
+ await this.pendingRead;
+ }
+ }
+ /**
+ * Close wrapper
+ */
+ async close() {
+ await this.syncAndRelease();
+ }
+ async syncAndRelease() {
+ this.released = true;
+ await this.waitForReadToComplete();
+ await this.reader.releaseLock();
+ }
+}
+exports.ReadableWebToNodeStream = ReadableWebToNodeStream;
+//# sourceMappingURL=index.js.map \ No newline at end of file