summaryrefslogtreecommitdiff
path: root/cli/js/web/streams/writable-stream-default-writer.ts
blob: f38aa26bbc7e997df384cbb5bb6f79244a603a8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// TODO reenable this code when we enable writableStreams and transport types
// // Forked from https://github.com/stardazed/sd-streams/tree/8928cf04b035fd02fb1340b7eb541c76be37e546
// // Copyright (c) 2018-Present by Arthur Langereis - @zenmumbler MIT

// /**
//  * streams/writable-stream-default-writer - WritableStreamDefaultWriter class implementation
//  * Part of Stardazed
//  * (c) 2018-Present by Arthur Langereis - @zenmumbler
//  * https://github.com/stardazed/sd-streams
//  */

// import * as ws from "./writable-internals.ts";
// import * as shared from "./shared-internals.ts";

// export class WritableStreamDefaultWriter<InputType>
//   implements ws.WritableStreamDefaultWriter<InputType> {
//   [ws.ownerWritableStream_]: ws.WritableStream<InputType> | undefined;
//   [ws.readyPromise_]: shared.ControlledPromise<void>;
//   [ws.closedPromise_]: shared.ControlledPromise<void>;

//   constructor(stream: ws.WritableStream<InputType>) {
//     if (!ws.isWritableStream(stream)) {
//       throw new TypeError();
//     }
//     if (ws.isWritableStreamLocked(stream)) {
//       throw new TypeError("Stream is already locked");
//     }
//     this[ws.ownerWritableStream_] = stream;
//     stream[ws.writer_] = this;

//     const readyPromise = shared.createControlledPromise<void>();
//     const closedPromise = shared.createControlledPromise<void>();
//     this[ws.readyPromise_] = readyPromise;
//     this[ws.closedPromise_] = closedPromise;

//     const state = stream[shared.state_];
//     if (state === "writable") {
//       if (
//         !ws.writableStreamCloseQueuedOrInFlight(stream) &&
//         stream[ws.backpressure_]
//       ) {
//         // OK Set this.[[readyPromise]] to a new promise.
//       } else {
//         readyPromise.resolve(undefined);
//       }
//       // OK Set this.[[closedPromise]] to a new promise.
//     } else if (state === "erroring") {
//       readyPromise.reject(stream[shared.storedError_]);
//       readyPromise.promise.catch(() => {});
//       // OK Set this.[[closedPromise]] to a new promise.
//     } else if (state === "closed") {
//       readyPromise.resolve(undefined);
//       closedPromise.resolve(undefined);
//     } else {
//       // Assert: state is "errored".
//       const storedError = stream[shared.storedError_];
//       readyPromise.reject(storedError);
//       readyPromise.promise.catch(() => {});
//       closedPromise.reject(storedError);
//       closedPromise.promise.catch(() => {});
//     }
//   }

//   abort(reason: shared.ErrorResult): Promise<void> {
//     if (!ws.isWritableStreamDefaultWriter(this)) {
//       return Promise.reject(new TypeError());
//     }
//     if (this[ws.ownerWritableStream_] === undefined) {
//       return Promise.reject(
//         new TypeError("Writer is not connected to a stream")
//       );
//     }
//     return ws.writableStreamDefaultWriterAbort(this, reason);
//   }

//   close(): Promise<void> {
//     if (!ws.isWritableStreamDefaultWriter(this)) {
//       return Promise.reject(new TypeError());
//     }
//     const stream = this[ws.ownerWritableStream_];
//     if (stream === undefined) {
//       return Promise.reject(
//         new TypeError("Writer is not connected to a stream")
//       );
//     }
//     if (ws.writableStreamCloseQueuedOrInFlight(stream)) {
//       return Promise.reject(new TypeError());
//     }
//     return ws.writableStreamDefaultWriterClose(this);
//   }

//   releaseLock(): void {
//     const stream = this[ws.ownerWritableStream_];
//     if (stream === undefined) {
//       return;
//     }
//     // Assert: stream.[[writer]] is not undefined.
//     ws.writableStreamDefaultWriterRelease(this);
//   }

//   write(chunk: InputType): Promise<void> {
//     if (!ws.isWritableStreamDefaultWriter(this)) {
//       return Promise.reject(new TypeError());
//     }
//     if (this[ws.ownerWritableStream_] === undefined) {
//       return Promise.reject(
//         new TypeError("Writer is not connected to a stream")
//       );
//     }
//     return ws.writableStreamDefaultWriterWrite(this, chunk);
//   }

//   get closed(): Promise<void> {
//     if (!ws.isWritableStreamDefaultWriter(this)) {
//       return Promise.reject(new TypeError());
//     }
//     return this[ws.closedPromise_].promise;
//   }

//   get desiredSize(): number | null {
//     if (!ws.isWritableStreamDefaultWriter(this)) {
//       throw new TypeError();
//     }
//     if (this[ws.ownerWritableStream_] === undefined) {
//       throw new TypeError("Writer is not connected to stream");
//     }
//     return ws.writableStreamDefaultWriterGetDesiredSize(this);
//   }

//   get ready(): Promise<void> {
//     if (!ws.isWritableStreamDefaultWriter(this)) {
//       return Promise.reject(new TypeError());
//     }
//     return this[ws.readyPromise_].promise;
//   }
// }