Buckets:
| // src/utils/stream.ts | |
| var StreamingApi = class { | |
| writer; | |
| encoder; | |
| writable; | |
| abortSubscribers = []; | |
| responseReadable; | |
| /** | |
| * Whether the stream has been aborted. | |
| */ | |
| aborted = false; | |
| /** | |
| * Whether the stream has been closed normally. | |
| */ | |
| closed = false; | |
| constructor(writable, _readable) { | |
| this.writable = writable; | |
| this.writer = writable.getWriter(); | |
| this.encoder = new TextEncoder(); | |
| const reader = _readable.getReader(); | |
| this.abortSubscribers.push(async () => { | |
| await reader.cancel(); | |
| }); | |
| this.responseReadable = new ReadableStream({ | |
| async pull(controller) { | |
| const { done, value } = await reader.read(); | |
| done ? controller.close() : controller.enqueue(value); | |
| }, | |
| cancel: () => { | |
| this.abort(); | |
| } | |
| }); | |
| } | |
| async write(input) { | |
| try { | |
| if (typeof input === "string") { | |
| input = this.encoder.encode(input); | |
| } | |
| await this.writer.write(input); | |
| } catch { | |
| } | |
| return this; | |
| } | |
| async writeln(input) { | |
| await this.write(input + "\n"); | |
| return this; | |
| } | |
| sleep(ms) { | |
| return new Promise((res) => setTimeout(res, ms)); | |
| } | |
| async close() { | |
| try { | |
| await this.writer.close(); | |
| } catch { | |
| } | |
| this.closed = true; | |
| } | |
| async pipe(body) { | |
| this.writer.releaseLock(); | |
| await body.pipeTo(this.writable, { preventClose: true }); | |
| this.writer = this.writable.getWriter(); | |
| } | |
| onAbort(listener) { | |
| this.abortSubscribers.push(listener); | |
| } | |
| /** | |
| * Abort the stream. | |
| * You can call this method when stream is aborted by external event. | |
| */ | |
| abort() { | |
| if (!this.aborted) { | |
| this.aborted = true; | |
| this.abortSubscribers.forEach((subscriber) => subscriber()); | |
| } | |
| } | |
| }; | |
| export { | |
| StreamingApi | |
| }; | |
Xet Storage Details
- Size:
- 1.79 kB
- Xet hash:
- 7be81c452b8d6eacaa35c0f5116ec44feb189e99bf19c84dc355fce085e35069
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.