- From: Ken Cooper <notifications@github.com>
- Date: Sun, 08 Mar 2020 12:57:17 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/streams/issues/1030/596245452@github.com>
It's Typescript. Please don't hold that against me. :-) Below is a translation (still using a class, sorry). The goal again is to have a function that allows me to pass in a readable, a test function, and a 'split readable' generator function, and have it do the wiring up so that the generator creates a new readable every time the test function returns true, and routes subsequent writes to a writer associated with that new readable. Here is my uneducated stab at it, rewritten in JS. It consists of an UnderlyingSink passed to the constructor of a WritableStream. When it gets a write, it checks whether it needs to create a new readable pair using the shouldSplit boolean function. When it does, the idea is to: a) generate a readable stream from the factory function provided, b) create a generic writable stream that we keep around and pass writes through to c) link the readable and writable together so writes from the writable to go the readable. Am I just Doing it Wrong? Is there a simpler way? ``` class StreamSplitter { constructor(shouldSplit, createReadable) { this.shouldSplit = shouldSplit; this.createReadable = createReadable; } createNewReadable() { if (this._writable) { this._writable.getWriter().close(); } const readable = this.createReadable(); // ??? // How do we create a writable and readable pair // such that every write to the writable goes to the readable? } function start(controller: any) { this.createNewReadable(); }, function write(chunk: any, controller: any) { if (this.shouldSplit(chunk)) { this.createNewReadable(); } this._writable.getWriter().write(chunk); }, function close() { this._writable.getWriter().close(); }, function abort(error: any) { this._writable.getWriter().abort(); } } ``` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/whatwg/streams/issues/1030#issuecomment-596245452
Received on Sunday, 8 March 2020 19:57:31 UTC