@@ -11,7 +11,6 @@ const {
11
11
FunctionPrototypeCall,
12
12
MathMin,
13
13
NumberIsInteger,
14
- ObjectCreate,
15
14
ObjectDefineProperties,
16
15
ObjectSetPrototypeOf,
17
16
Promise,
@@ -95,9 +94,9 @@ const {
95
94
AsyncIterator,
96
95
cloneAsUint8Array,
97
96
copyArrayBuffer,
97
+ createPromiseCallback,
98
98
customInspect,
99
99
dequeueValue,
100
- ensureIsPromise,
101
100
enqueueValueWithSize,
102
101
extractHighWaterMark,
103
102
extractSizeAlgorithm,
@@ -251,19 +250,7 @@ class ReadableStream {
251
250
markTransferMode ( this , false , true ) ;
252
251
if ( source === null )
253
252
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
- } ;
253
+ this [ kState ] = createReadableStreamState ( ) ;
267
254
268
255
this [ kIsClosedPromise ] = createDeferredPromise ( ) ;
269
256
this [ kControllerErrorFunction ] = ( ) => { } ;
@@ -649,19 +636,7 @@ ObjectDefineProperties(ReadableStream, {
649
636
function InternalTransferredReadableStream ( ) {
650
637
markTransferMode ( this , false , true ) ;
651
638
this [ kType ] = 'ReadableStream' ;
652
- this [ kState ] = {
653
- disturbed : false ,
654
- reader : undefined ,
655
- state : 'readable' ,
656
- storedError : undefined ,
657
- stream : undefined ,
658
- transfer : {
659
- writable : undefined ,
660
- port1 : undefined ,
661
- port2 : undefined ,
662
- promise : undefined ,
663
- } ,
664
- } ;
639
+ this [ kState ] = createReadableStreamState ( ) ;
665
640
666
641
this [ kIsClosedPromise ] = createDeferredPromise ( ) ;
667
642
}
@@ -1230,41 +1205,58 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, {
1230
1205
[ SymbolToStringTag ] : getNonWritablePropertyDescriptor ( ReadableByteStreamController . name ) ,
1231
1206
} ) ;
1232
1207
1233
- function TeeReadableStream ( start , pull , cancel ) {
1208
+ function InternalReadableStream ( start , pull , cancel , highWaterMark , size ) {
1234
1209
markTransferMode ( this , false , true ) ;
1235
1210
this [ kType ] = 'ReadableStream' ;
1236
- this [ kState ] = {
1237
- disturbed : false ,
1238
- state : 'readable' ,
1239
- storedError : undefined ,
1240
- stream : undefined ,
1241
- transfer : {
1242
- writable : undefined ,
1243
- port : undefined ,
1244
- promise : undefined ,
1245
- } ,
1246
- } ;
1211
+ this [ kState ] = createReadableStreamState ( ) ;
1212
+ this [ kIsClosedPromise ] = createDeferredPromise ( ) ;
1213
+ const controller = new ReadableStreamDefaultController ( kSkipThrow ) ;
1214
+ setupReadableStreamDefaultController (
1215
+ this ,
1216
+ controller ,
1217
+ start ,
1218
+ pull ,
1219
+ cancel ,
1220
+ highWaterMark ,
1221
+ size ) ;
1222
+ }
1223
+
1224
+ ObjectSetPrototypeOf ( InternalReadableStream . prototype , ReadableStream . prototype ) ;
1225
+ ObjectSetPrototypeOf ( InternalReadableStream , ReadableStream ) ;
1226
+
1227
+ function createReadableStream ( start , pull , cancel , highWaterMark = 1 , size = ( ) => 1 ) {
1228
+ const stream = new InternalReadableStream ( start , pull , cancel , highWaterMark , size ) ;
1229
+
1230
+ // For spec compliance the InternalReadableStream must be a ReadableStream
1231
+ stream . constructor = ReadableStream ;
1232
+ return stream ;
1233
+ }
1234
+
1235
+ function InternalReadableByteStream ( start , pull , cancel ) {
1236
+ markTransferMode ( this , false , true ) ;
1237
+ this [ kType ] = 'ReadableStream' ;
1238
+ this [ kState ] = createReadableStreamState ( ) ;
1247
1239
this [ kIsClosedPromise ] = createDeferredPromise ( ) ;
1248
- setupReadableStreamDefaultControllerFromSource (
1240
+ const controller = new ReadableByteStreamController ( kSkipThrow ) ;
1241
+ setupReadableByteStreamController (
1249
1242
this ,
1250
- ObjectCreate ( null , {
1251
- start : { __proto__ : null , value : start } ,
1252
- pull : { __proto__ : null , value : pull } ,
1253
- cancel : { __proto__ : null , value : cancel } ,
1254
- } ) ,
1255
- 1 ,
1256
- ( ) => 1 ) ;
1243
+ controller ,
1244
+ start ,
1245
+ pull ,
1246
+ cancel ,
1247
+ 0 ,
1248
+ undefined ) ;
1257
1249
}
1258
1250
1259
- ObjectSetPrototypeOf ( TeeReadableStream . prototype , ReadableStream . prototype ) ;
1260
- ObjectSetPrototypeOf ( TeeReadableStream , ReadableStream ) ;
1251
+ ObjectSetPrototypeOf ( InternalReadableByteStream . prototype , ReadableStream . prototype ) ;
1252
+ ObjectSetPrototypeOf ( InternalReadableByteStream , ReadableStream ) ;
1261
1253
1262
- function createTeeReadableStream ( start , pull , cancel ) {
1263
- const tee = new TeeReadableStream ( start , pull , cancel ) ;
1254
+ function createReadableByteStream ( start , pull , cancel ) {
1255
+ const stream = new InternalReadableByteStream ( start , pull , cancel ) ;
1264
1256
1265
- // For spec compliance the Tee must be a ReadableStream
1266
- tee . constructor = ReadableStream ;
1267
- return tee ;
1257
+ // For spec compliance the InternalReadableByteStream must be a ReadableStream
1258
+ stream . constructor = ReadableStream ;
1259
+ return stream ;
1268
1260
}
1269
1261
1270
1262
const isReadableStream =
@@ -1280,6 +1272,23 @@ const isReadableStreamBYOBReader =
1280
1272
1281
1273
// ---- ReadableStream Implementation
1282
1274
1275
+ function createReadableStreamState ( ) {
1276
+ return {
1277
+ __proto__ : null ,
1278
+ disturbed : false ,
1279
+ reader : undefined ,
1280
+ state : 'readable' ,
1281
+ storedError : undefined ,
1282
+ transfer : {
1283
+ __proto__ : null ,
1284
+ writable : undefined ,
1285
+ port1 : undefined ,
1286
+ port2 : undefined ,
1287
+ promise : undefined ,
1288
+ } ,
1289
+ } ;
1290
+ }
1291
+
1283
1292
function readableStreamFromIterable ( iterable ) {
1284
1293
let stream ;
1285
1294
const iteratorRecord = getIterator ( iterable , 'async' ) ;
@@ -1319,16 +1328,12 @@ function readableStreamFromIterable(iterable) {
1319
1328
} ) ;
1320
1329
}
1321
1330
1322
- stream = new ReadableStream ( {
1323
- start : startAlgorithm ,
1324
- pull : pullAlgorithm ,
1325
- cancel : cancelAlgorithm ,
1326
- } , {
1327
- size ( ) {
1328
- return 1 ;
1329
- } ,
1330
- highWaterMark : 0 ,
1331
- } ) ;
1331
+ stream = createReadableStream (
1332
+ startAlgorithm ,
1333
+ pullAlgorithm ,
1334
+ cancelAlgorithm ,
1335
+ 0 ,
1336
+ ) ;
1332
1337
1333
1338
return stream ;
1334
1339
}
@@ -1654,9 +1659,9 @@ function readableStreamDefaultTee(stream, cloneForBranch2) {
1654
1659
}
1655
1660
1656
1661
branch1 =
1657
- createTeeReadableStream ( nonOpStart , pullAlgorithm , cancel1Algorithm ) ;
1662
+ createReadableStream ( nonOpStart , pullAlgorithm , cancel1Algorithm ) ;
1658
1663
branch2 =
1659
- createTeeReadableStream ( nonOpStart , pullAlgorithm , cancel2Algorithm ) ;
1664
+ createReadableStream ( nonOpStart , pullAlgorithm , cancel2Algorithm ) ;
1660
1665
1661
1666
PromisePrototypeThen (
1662
1667
reader [ kState ] . close . promise ,
@@ -1933,16 +1938,10 @@ function readableByteStreamTee(stream) {
1933
1938
return cancelDeferred . promise ;
1934
1939
}
1935
1940
1936
- branch1 = new ReadableStream ( {
1937
- type : 'bytes' ,
1938
- pull : pull1Algorithm ,
1939
- cancel : cancel1Algorithm ,
1940
- } ) ;
1941
- branch2 = new ReadableStream ( {
1942
- type : 'bytes' ,
1943
- pull : pull2Algorithm ,
1944
- cancel : cancel2Algorithm ,
1945
- } ) ;
1941
+ branch1 =
1942
+ createReadableByteStream ( nonOpStart , pull1Algorithm , cancel1Algorithm ) ;
1943
+ branch2 =
1944
+ createReadableByteStream ( nonOpStart , pull2Algorithm , cancel2Algorithm ) ;
1946
1945
1947
1946
forwardReaderError ( reader ) ;
1948
1947
@@ -1993,10 +1992,7 @@ function readableStreamCancel(stream, reason) {
1993
1992
}
1994
1993
1995
1994
return PromisePrototypeThen (
1996
- ensureIsPromise (
1997
- stream [ kState ] . controller [ kCancel ] ,
1998
- stream [ kState ] . controller ,
1999
- reason ) ,
1995
+ stream [ kState ] . controller [ kCancel ] ( reason ) ,
2000
1996
( ) => { } ) ;
2001
1997
}
2002
1998
@@ -2361,7 +2357,7 @@ function readableStreamDefaultControllerCallPullIfNeeded(controller) {
2361
2357
assert ( ! controller [ kState ] . pullAgain ) ;
2362
2358
controller [ kState ] . pulling = true ;
2363
2359
PromisePrototypeThen (
2364
- ensureIsPromise ( controller [ kState ] . pullAlgorithm , controller ) ,
2360
+ controller [ kState ] . pullAlgorithm ( controller ) ,
2365
2361
( ) => {
2366
2362
controller [ kState ] . pulling = false ;
2367
2363
if ( controller [ kState ] . pullAgain ) {
@@ -2391,12 +2387,9 @@ function readableStreamDefaultControllerError(controller, error) {
2391
2387
2392
2388
function readableStreamDefaultControllerCancelSteps ( controller , reason ) {
2393
2389
resetQueue ( controller ) ;
2394
- try {
2395
- const result = controller [ kState ] . cancelAlgorithm ( reason ) ;
2396
- return result ;
2397
- } finally {
2398
- readableStreamDefaultControllerClearAlgorithms ( controller ) ;
2399
- }
2390
+ const result = controller [ kState ] . cancelAlgorithm ( reason ) ;
2391
+ readableStreamDefaultControllerClearAlgorithms ( controller ) ;
2392
+ return result ;
2400
2393
}
2401
2394
2402
2395
function readableStreamDefaultControllerPullSteps ( controller , readRequest ) {
@@ -2470,11 +2463,10 @@ function setupReadableStreamDefaultControllerFromSource(
2470
2463
FunctionPrototypeBind ( start , source , controller ) :
2471
2464
nonOpStart ;
2472
2465
const pullAlgorithm = pull ?
2473
- FunctionPrototypeBind ( pull , source , controller ) :
2466
+ createPromiseCallback ( 'source. pull' , pull , source ) :
2474
2467
nonOpPull ;
2475
-
2476
2468
const cancelAlgorithm = cancel ?
2477
- FunctionPrototypeBind ( cancel , source ) :
2469
+ createPromiseCallback ( 'source.cancel' , cancel , source ) :
2478
2470
nonOpCancel ;
2479
2471
2480
2472
setupReadableStreamDefaultController (
@@ -3102,7 +3094,7 @@ function readableByteStreamControllerCallPullIfNeeded(controller) {
3102
3094
assert ( ! controller [ kState ] . pullAgain ) ;
3103
3095
controller [ kState ] . pulling = true ;
3104
3096
PromisePrototypeThen (
3105
- ensureIsPromise ( controller [ kState ] . pullAlgorithm , controller ) ,
3097
+ controller [ kState ] . pullAlgorithm ( controller ) ,
3106
3098
( ) => {
3107
3099
controller [ kState ] . pulling = false ;
3108
3100
if ( controller [ kState ] . pullAgain ) {
@@ -3269,10 +3261,10 @@ function setupReadableByteStreamControllerFromSource(
3269
3261
FunctionPrototypeBind ( start , source , controller ) :
3270
3262
nonOpStart ;
3271
3263
const pullAlgorithm = pull ?
3272
- FunctionPrototypeBind ( pull , source , controller ) :
3264
+ createPromiseCallback ( 'source.pull' , pull , source , controller ) :
3273
3265
nonOpPull ;
3274
3266
const cancelAlgorithm = cancel ?
3275
- FunctionPrototypeBind ( cancel , source ) :
3267
+ createPromiseCallback ( 'source.cancel' , cancel , source ) :
3276
3268
nonOpCancel ;
3277
3269
3278
3270
if ( autoAllocateChunkSize === 0 ) {
@@ -3369,4 +3361,6 @@ module.exports = {
3369
3361
readableByteStreamControllerPullSteps,
3370
3362
setupReadableByteStreamController,
3371
3363
setupReadableByteStreamControllerFromSource,
3364
+ createReadableStream,
3365
+ createReadableByteStream,
3372
3366
} ;
0 commit comments