Skip to content

Commit 0d45e6f

Browse files
stream: add helpers to create internal state
1 parent 3846bfe commit 0d45e6f

File tree

2 files changed

+58
-162
lines changed

2 files changed

+58
-162
lines changed

lib/internal/webstreams/readablestream.js

Lines changed: 20 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -251,19 +251,7 @@ class ReadableStream {
251251
markTransferMode(this, false, true);
252252
if (source === null)
253253
throw new ERR_INVALID_ARG_VALUE('source', 'Object', source);
254-
this[kState] = {
255-
disturbed: false,
256-
reader: undefined,
257-
state: 'readable',
258-
storedError: undefined,
259-
stream: undefined,
260-
transfer: {
261-
writable: undefined,
262-
port1: undefined,
263-
port2: undefined,
264-
promise: undefined,
265-
},
266-
};
254+
this[kState] = createReadableStreamState();
267255

268256
this[kIsClosedPromise] = createDeferredPromise();
269257
this[kControllerErrorFunction] = () => {};
@@ -647,19 +635,7 @@ ObjectDefineProperties(ReadableStream, {
647635
function InternalTransferredReadableStream() {
648636
markTransferMode(this, false, true);
649637
this[kType] = 'ReadableStream';
650-
this[kState] = {
651-
disturbed: false,
652-
reader: undefined,
653-
state: 'readable',
654-
storedError: undefined,
655-
stream: undefined,
656-
transfer: {
657-
writable: undefined,
658-
port1: undefined,
659-
port2: undefined,
660-
promise: undefined,
661-
},
662-
};
638+
this[kState] = createReadableStreamState();
663639

664640
this[kIsClosedPromise] = createDeferredPromise();
665641
}
@@ -1231,19 +1207,7 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, {
12311207
function InternalReadableStream(start, pull, cancel, highWaterMark, size) {
12321208
markTransferMode(this, false, true);
12331209
this[kType] = 'ReadableStream';
1234-
this[kState] = {
1235-
disturbed: false,
1236-
reader: undefined,
1237-
state: 'readable',
1238-
storedError: undefined,
1239-
stream: undefined,
1240-
transfer: {
1241-
writable: undefined,
1242-
port1: undefined,
1243-
port2: undefined,
1244-
promise: undefined,
1245-
},
1246-
};
1210+
this[kState] = createReadableStreamState();
12471211
this[kIsClosedPromise] = createDeferredPromise();
12481212
const controller = new ReadableStreamDefaultController(kSkipThrow);
12491213
setupReadableStreamDefaultController(
@@ -1270,19 +1234,7 @@ function createReadableStream(start, pull, cancel, highWaterMark = 1, size = ()
12701234
function InternalReadableByteStream(start, pull, cancel) {
12711235
markTransferMode(this, false, true);
12721236
this[kType] = 'ReadableStream';
1273-
this[kState] = {
1274-
disturbed: false,
1275-
reader: undefined,
1276-
state: 'readable',
1277-
storedError: undefined,
1278-
stream: undefined,
1279-
transfer: {
1280-
writable: undefined,
1281-
port1: undefined,
1282-
port2: undefined,
1283-
promise: undefined,
1284-
},
1285-
};
1237+
this[kState] = createReadableStreamState();
12861238
this[kIsClosedPromise] = createDeferredPromise();
12871239
const controller = new ReadableByteStreamController(kSkipThrow);
12881240
setupReadableByteStreamController(
@@ -1319,6 +1271,22 @@ const isReadableStreamBYOBReader =
13191271

13201272
// ---- ReadableStream Implementation
13211273

1274+
function createReadableStreamState() {
1275+
return {
1276+
disturbed: false,
1277+
reader: undefined,
1278+
state: 'readable',
1279+
storedError: undefined,
1280+
stream: undefined,
1281+
transfer: {
1282+
writable: undefined,
1283+
port1: undefined,
1284+
port2: undefined,
1285+
promise: undefined,
1286+
},
1287+
};
1288+
}
1289+
13221290
function readableStreamFromIterable(iterable) {
13231291
let stream;
13241292
const iteratorRecord = getIterator(iterable, 'async');

lib/internal/webstreams/writablestream.js

Lines changed: 38 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -160,45 +160,7 @@ class WritableStream {
160160
if (type !== undefined)
161161
throw new ERR_INVALID_ARG_VALUE.RangeError('type', type);
162162

163-
this[kState] = {
164-
close: createDeferredPromise(),
165-
closeRequest: {
166-
promise: undefined,
167-
resolve: undefined,
168-
reject: undefined,
169-
},
170-
inFlightWriteRequest: {
171-
promise: undefined,
172-
resolve: undefined,
173-
reject: undefined,
174-
},
175-
inFlightCloseRequest: {
176-
promise: undefined,
177-
resolve: undefined,
178-
reject: undefined,
179-
},
180-
pendingAbortRequest: {
181-
abort: {
182-
promise: undefined,
183-
resolve: undefined,
184-
reject: undefined,
185-
},
186-
reason: undefined,
187-
wasAlreadyErroring: false,
188-
},
189-
backpressure: false,
190-
controller: undefined,
191-
state: 'writable',
192-
storedError: undefined,
193-
writeRequests: [],
194-
writer: undefined,
195-
transfer: {
196-
readable: undefined,
197-
port1: undefined,
198-
port2: undefined,
199-
promise: undefined,
200-
},
201-
};
163+
this[kState] = createWritableStreamState();
202164

203165
this[kIsClosedPromise] = createDeferredPromise();
204166
this[kControllerErrorFunction] = () => {};
@@ -330,45 +292,7 @@ ObjectDefineProperties(WritableStream.prototype, {
330292
function InternalTransferredWritableStream() {
331293
markTransferMode(this, false, true);
332294
this[kType] = 'WritableStream';
333-
this[kState] = {
334-
close: createDeferredPromise(),
335-
closeRequest: {
336-
promise: undefined,
337-
resolve: undefined,
338-
reject: undefined,
339-
},
340-
inFlightWriteRequest: {
341-
promise: undefined,
342-
resolve: undefined,
343-
reject: undefined,
344-
},
345-
inFlightCloseRequest: {
346-
promise: undefined,
347-
resolve: undefined,
348-
reject: undefined,
349-
},
350-
pendingAbortRequest: {
351-
abort: {
352-
promise: undefined,
353-
resolve: undefined,
354-
reject: undefined,
355-
},
356-
reason: undefined,
357-
wasAlreadyErroring: false,
358-
},
359-
backpressure: false,
360-
controller: undefined,
361-
state: 'writable',
362-
storedError: undefined,
363-
writeRequests: [],
364-
writer: undefined,
365-
transfer: {
366-
readable: undefined,
367-
port1: undefined,
368-
port2: undefined,
369-
promise: undefined,
370-
},
371-
};
295+
this[kState] = createWritableStreamState();
372296

373297
this[kIsClosedPromise] = createDeferredPromise();
374298
}
@@ -584,7 +508,42 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, {
584508
function InternalWritableStream(start, write, close, abort, highWaterMark, size) {
585509
markTransferMode(this, false, true);
586510
this[kType] = 'WritableStream';
587-
this[kState] = {
511+
this[kState] = createWritableStreamState();
512+
this[kIsClosedPromise] = createDeferredPromise();
513+
514+
const controller = new WritableStreamDefaultController(kSkipThrow);
515+
setupWritableStreamDefaultController(
516+
this,
517+
controller,
518+
start,
519+
write,
520+
close,
521+
abort,
522+
highWaterMark,
523+
size
524+
)
525+
}
526+
527+
ObjectSetPrototypeOf(InternalWritableStream.prototype, WritableStream.prototype);
528+
ObjectSetPrototypeOf(InternalWritableStream, WritableStream);
529+
530+
function createWritableStream(start, write, close, abort, highWaterMark = 1, size = () => 1) {
531+
const stream = new InternalWritableStream(start, write, close, abort, highWaterMark, size);
532+
533+
// For spec compliance the InternalWritableStream must be a WritableStream
534+
stream.constructor = WritableStream;
535+
return stream;
536+
}
537+
538+
const isWritableStream =
539+
isBrandCheck('WritableStream');
540+
const isWritableStreamDefaultWriter =
541+
isBrandCheck('WritableStreamDefaultWriter');
542+
const isWritableStreamDefaultController =
543+
isBrandCheck('WritableStreamDefaultController');
544+
545+
function createWritableStreamState() {
546+
return {
588547
close: createDeferredPromise(),
589548
closeRequest: {
590549
promise: undefined,
@@ -623,39 +582,8 @@ function InternalWritableStream(start, write, close, abort, highWaterMark, size)
623582
promise: undefined,
624583
},
625584
};
626-
this[kIsClosedPromise] = createDeferredPromise();
627-
628-
const controller = new WritableStreamDefaultController(kSkipThrow);
629-
setupWritableStreamDefaultController(
630-
this,
631-
controller,
632-
start,
633-
write,
634-
close,
635-
abort,
636-
highWaterMark,
637-
size
638-
)
639585
}
640586

641-
ObjectSetPrototypeOf(InternalWritableStream.prototype, WritableStream.prototype);
642-
ObjectSetPrototypeOf(InternalWritableStream, WritableStream);
643-
644-
function createWritableStream(start, write, close, abort, highWaterMark, size) {
645-
const stream = new InternalWritableStream(start, write, close, abort, highWaterMark, size);
646-
647-
// For spec compliance the InternalWritableStream must be a WritableStream
648-
stream.constructor = WritableStream;
649-
return stream;
650-
}
651-
652-
const isWritableStream =
653-
isBrandCheck('WritableStream');
654-
const isWritableStreamDefaultWriter =
655-
isBrandCheck('WritableStreamDefaultWriter');
656-
const isWritableStreamDefaultController =
657-
isBrandCheck('WritableStreamDefaultController');
658-
659587
function isWritableStreamLocked(stream) {
660588
return stream[kState].writer !== undefined;
661589
}

0 commit comments

Comments
 (0)