From 470c7a14527f215789eb76eb9e9886a93785adee Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 01:49:02 +0300 Subject: [PATCH 1/9] stream: improve WebStreams performance --- lib/internal/webstreams/readablestream.js | 21 ++++++++++----------- lib/internal/webstreams/transformstream.js | 16 ++++++++-------- lib/internal/webstreams/writablestream.js | 18 ++++++++++-------- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index e7d115e98f12b9..463435f0db25b6 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1020,7 +1020,9 @@ class ReadableStreamDefaultController { [kType] = 'ReadableStreamDefaultController'; constructor() { - throw new ERR_ILLEGAL_CONSTRUCTOR(); + if(new.target === ReadableStreamDefaultController) { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } } /** @@ -1076,15 +1078,12 @@ ObjectDefineProperties(ReadableStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamDefaultController.name), }); -function createReadableStreamDefaultController() { - return ReflectConstruct( - function() { - this[kType] = 'ReadableStreamDefaultController'; - this[kState] = {}; - }, - [], - ReadableStreamDefaultController, - ); +class ReadableStreamDefaultControllerClazz extends ReadableStreamDefaultController { + constructor() { + super(); + this[kType] = 'ReadableStreamDefaultController'; + this[kState] = {}; + } } class ReadableByteStreamController { @@ -2415,7 +2414,7 @@ function setupReadableStreamDefaultControllerFromSource( source, highWaterMark, sizeAlgorithm) { - const controller = createReadableStreamDefaultController(); + const controller = new ReadableStreamDefaultControllerClazz(); const start = source?.start; const pull = source?.pull; const cancel = source?.cancel; diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index c5b2aa90ffae5f..0d8ddb547e4677 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -269,7 +269,9 @@ class TransformStreamDefaultController { [kType] = 'TransformStreamDefaultController'; constructor() { - throw new ERR_ILLEGAL_CONSTRUCTOR(); + if(new.target === TransformStreamDefaultController) { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } } /** @@ -330,13 +332,11 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(TransformStreamDefaultController.name), }); -function createTransformStreamDefaultController() { - return ReflectConstruct( - function() { +class TransformStreamDefaultControllerClazz extends TransformStreamDefaultController { + constructor() { + super(); this[kType] = 'TransformStreamDefaultController'; - }, - [], - TransformStreamDefaultController); + } } const isTransformStream = @@ -453,7 +453,7 @@ function setupTransformStreamDefaultController( function setupTransformStreamDefaultControllerFromTransformer( stream, transformer) { - const controller = createTransformStreamDefaultController(); + const controller = new TransformStreamDefaultControllerClazz(); const transform = transformer?.transform || defaultTransformAlgorithm; const flush = transformer?.flush || nonOpFlush; const transformAlgorithm = diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index 2544c179f53952..07b2aa86e6e77e 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -523,7 +523,9 @@ class WritableStreamDefaultController { [kType] = 'WritableStreamDefaultController'; constructor() { - throw new ERR_ILLEGAL_CONSTRUCTOR(); + if (new.target === WritableStreamDefaultController) { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } } [kAbort](reason) { @@ -569,12 +571,12 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultController.name), }); -function createWritableStreamDefaultController() { - return ReflectConstruct( - function() { - this[kType] = 'WritableStreamDefaultController'; - }, - [], WritableStreamDefaultController); +class WritableStreamDefaultControllerClazz extends WritableStreamDefaultController { + constructor() { + super(); + this[kType] = 'WritableStreamDefaultController'; + // throw new ERR_ILLEGAL_CONSTRUCTOR(); + } } const isWritableStream = @@ -1233,7 +1235,7 @@ function setupWritableStreamDefaultControllerFromSink( sink, highWaterMark, sizeAlgorithm) { - const controller = createWritableStreamDefaultController(); + const controller = new WritableStreamDefaultControllerClazz(); const start = sink?.start; const write = sink?.write; const close = sink?.close; From 2b4ef069a75d0ed1de94f4c90697c2340ac67e2b Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 01:53:07 +0300 Subject: [PATCH 2/9] stream: format --- lib/internal/webstreams/readablestream.js | 2 +- lib/internal/webstreams/transformstream.js | 10 +++++----- lib/internal/webstreams/writablestream.js | 9 ++++----- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 463435f0db25b6..b511e9c28b409b 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1020,7 +1020,7 @@ class ReadableStreamDefaultController { [kType] = 'ReadableStreamDefaultController'; constructor() { - if(new.target === ReadableStreamDefaultController) { + if (new.target === ReadableStreamDefaultController) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } } diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 0d8ddb547e4677..298611433f085c 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -269,7 +269,7 @@ class TransformStreamDefaultController { [kType] = 'TransformStreamDefaultController'; constructor() { - if(new.target === TransformStreamDefaultController) { + if (new.target === TransformStreamDefaultController) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } } @@ -333,10 +333,10 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, { }); class TransformStreamDefaultControllerClazz extends TransformStreamDefaultController { - constructor() { - super(); - this[kType] = 'TransformStreamDefaultController'; - } + constructor() { + super(); + this[kType] = 'TransformStreamDefaultController'; + } } const isTransformStream = diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index 07b2aa86e6e77e..d70cacae626ade 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -572,11 +572,10 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, { }); class WritableStreamDefaultControllerClazz extends WritableStreamDefaultController { - constructor() { - super(); - this[kType] = 'WritableStreamDefaultController'; - // throw new ERR_ILLEGAL_CONSTRUCTOR(); - } + constructor() { + super(); + this[kType] = 'WritableStreamDefaultController'; + } } const isWritableStream = From 32762660eadf353e74b1e7ce8fecf1a52b38a286 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:00:11 +0300 Subject: [PATCH 3/9] stream: wip --- lib/internal/webstreams/readablestream.js | 11 ++++++----- lib/internal/webstreams/transformstream.js | 12 +++++++----- lib/internal/webstreams/writablestream.js | 11 ++++++----- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index b511e9c28b409b..56dd2f31070dc9 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -140,6 +140,7 @@ const kChunk = Symbol('kChunk'); const kError = Symbol('kError'); const kPull = Symbol('kPull'); const kRelease = Symbol('kRelease'); +const kSkipThrow = Symbol('kSkipThrow'); let releasedError; let releasingError; @@ -1019,8 +1020,8 @@ ObjectDefineProperties(ReadableStreamBYOBReader.prototype, { class ReadableStreamDefaultController { [kType] = 'ReadableStreamDefaultController'; - constructor() { - if (new.target === ReadableStreamDefaultController) { + constructor(skipThrowSymbol) { + if (new.target === ReadableStreamDefaultController || skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } } @@ -1079,8 +1080,8 @@ ObjectDefineProperties(ReadableStreamDefaultController.prototype, { }); class ReadableStreamDefaultControllerClazz extends ReadableStreamDefaultController { - constructor() { - super(); + constructor(skipThrowSymbol) { + super(skipThrowSymbol); this[kType] = 'ReadableStreamDefaultController'; this[kState] = {}; } @@ -2414,7 +2415,7 @@ function setupReadableStreamDefaultControllerFromSource( source, highWaterMark, sizeAlgorithm) { - const controller = new ReadableStreamDefaultControllerClazz(); + const controller = new ReadableStreamDefaultControllerClazz(kSkipThrow); const start = source?.start; const pull = source?.pull; const cancel = source?.cancel; diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 298611433f085c..76780f12748b62 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -65,6 +65,8 @@ const { const assert = require('internal/assert'); +const kSkipThrow = Symbol('kSkipThrow'); + const getNonWritablePropertyDescriptor = (value) => { return { __proto__: null, @@ -268,8 +270,8 @@ TransferredTransformStream.prototype[kDeserialize] = () => {}; class TransformStreamDefaultController { [kType] = 'TransformStreamDefaultController'; - constructor() { - if (new.target === TransformStreamDefaultController) { + constructor(skipThrowSymbol) { + if (skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } } @@ -333,8 +335,8 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, { }); class TransformStreamDefaultControllerClazz extends TransformStreamDefaultController { - constructor() { - super(); + constructor(skipThrowSymbol) { + super(skipThrowSymbol); this[kType] = 'TransformStreamDefaultController'; } } @@ -453,7 +455,7 @@ function setupTransformStreamDefaultController( function setupTransformStreamDefaultControllerFromTransformer( stream, transformer) { - const controller = new TransformStreamDefaultControllerClazz(); + const controller = new TransformStreamDefaultControllerClazz(kSkipThrow); const transform = transformer?.transform || defaultTransformAlgorithm; const flush = transformer?.flush || nonOpFlush; const transformAlgorithm = diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index d70cacae626ade..64de11a61a6280 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -81,6 +81,7 @@ const assert = require('internal/assert'); const kAbort = Symbol('kAbort'); const kCloseSentinel = Symbol('kCloseSentinel'); const kError = Symbol('kError'); +const kSkipThrow = Symbol('kSkipThrow'); let releasedError; @@ -522,8 +523,8 @@ ObjectDefineProperties(WritableStreamDefaultWriter.prototype, { class WritableStreamDefaultController { [kType] = 'WritableStreamDefaultController'; - constructor() { - if (new.target === WritableStreamDefaultController) { + constructor(skipThrowSymbol) { + if (new.target === WritableStreamDefaultController || skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } } @@ -572,8 +573,8 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, { }); class WritableStreamDefaultControllerClazz extends WritableStreamDefaultController { - constructor() { - super(); + constructor(skipThrowSymbol) { + super(skipThrowSymbol); this[kType] = 'WritableStreamDefaultController'; } } @@ -1234,7 +1235,7 @@ function setupWritableStreamDefaultControllerFromSink( sink, highWaterMark, sizeAlgorithm) { - const controller = new WritableStreamDefaultControllerClazz(); + const controller = new WritableStreamDefaultControllerClazz(kSkipThrow); const start = sink?.start; const write = sink?.write; const close = sink?.close; From 7e021fdc19623f0067f5915308f146eeecb42bc3 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:07:56 +0300 Subject: [PATCH 4/9] stream: fix test failures --- lib/internal/webstreams/readablestream.js | 17 +++++++++-------- lib/internal/webstreams/transformstream.js | 12 ++++++------ lib/internal/webstreams/writablestream.js | 13 ++++++------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 56dd2f31070dc9..0fe98299446c02 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1021,7 +1021,7 @@ class ReadableStreamDefaultController { [kType] = 'ReadableStreamDefaultController'; constructor(skipThrowSymbol) { - if (new.target === ReadableStreamDefaultController || skipThrowSymbol !== kSkipThrow) { + if (skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } } @@ -1079,12 +1079,13 @@ ObjectDefineProperties(ReadableStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamDefaultController.name), }); -class ReadableStreamDefaultControllerClazz extends ReadableStreamDefaultController { - constructor(skipThrowSymbol) { - super(skipThrowSymbol); - this[kType] = 'ReadableStreamDefaultController'; - this[kState] = {}; - } +function createReadableStreamDefaultController() { + const controller = new ReadableStreamDefaultController(kSkipThrow); + + controller[kType] = 'ReadableStreamDefaultController'; + controller[kState] = {}; + + return controller; } class ReadableByteStreamController { @@ -2415,7 +2416,7 @@ function setupReadableStreamDefaultControllerFromSource( source, highWaterMark, sizeAlgorithm) { - const controller = new ReadableStreamDefaultControllerClazz(kSkipThrow); + const controller = createReadableStreamDefaultController(); const start = source?.start; const pull = source?.pull; const cancel = source?.cancel; diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 76780f12748b62..311f2ca50be66f 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -8,6 +8,7 @@ const { PromiseResolve, ReflectConstruct, SymbolToStringTag, + Symbol, } = primordials; const { @@ -334,11 +335,10 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(TransformStreamDefaultController.name), }); -class TransformStreamDefaultControllerClazz extends TransformStreamDefaultController { - constructor(skipThrowSymbol) { - super(skipThrowSymbol); - this[kType] = 'TransformStreamDefaultController'; - } +function createTransformStreamDefaultController() { + const controller = new TransformStreamDefaultController(kSkipThrow); + controller[kType] = 'TransformStreamDefaultController'; + return controller; } const isTransformStream = @@ -455,7 +455,7 @@ function setupTransformStreamDefaultController( function setupTransformStreamDefaultControllerFromTransformer( stream, transformer) { - const controller = new TransformStreamDefaultControllerClazz(kSkipThrow); + const controller = createTransformStreamDefaultController(); const transform = transformer?.transform || defaultTransformAlgorithm; const flush = transformer?.flush || nonOpFlush; const transformAlgorithm = diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index 64de11a61a6280..0a83450fab4c2e 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -524,7 +524,7 @@ class WritableStreamDefaultController { [kType] = 'WritableStreamDefaultController'; constructor(skipThrowSymbol) { - if (new.target === WritableStreamDefaultController || skipThrowSymbol !== kSkipThrow) { + if (skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } } @@ -572,11 +572,10 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultController.name), }); -class WritableStreamDefaultControllerClazz extends WritableStreamDefaultController { - constructor(skipThrowSymbol) { - super(skipThrowSymbol); - this[kType] = 'WritableStreamDefaultController'; - } +function createWritableStreamDefaultController() { + const controller = new WritableStreamDefaultController(kSkipThrow); + controller[kType] = 'WritableStreamDefaultController'; + return controller; } const isWritableStream = @@ -1235,7 +1234,7 @@ function setupWritableStreamDefaultControllerFromSink( sink, highWaterMark, sizeAlgorithm) { - const controller = new WritableStreamDefaultControllerClazz(kSkipThrow); + const controller = createWritableStreamDefaultController(); const start = sink?.start; const write = sink?.write; const close = sink?.close; From ede6c54f5789c43d6001870923acf8d3b6e6cee8 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:15:41 +0300 Subject: [PATCH 5/9] stream: cleanup --- lib/internal/webstreams/readablestream.js | 8 ++------ lib/internal/webstreams/transformstream.js | 4 +--- lib/internal/webstreams/writablestream.js | 4 +--- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 0fe98299446c02..c157595bfee040 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1019,6 +1019,7 @@ ObjectDefineProperties(ReadableStreamBYOBReader.prototype, { class ReadableStreamDefaultController { [kType] = 'ReadableStreamDefaultController'; + [kState] = {}; constructor(skipThrowSymbol) { if (skipThrowSymbol !== kSkipThrow) { @@ -1080,12 +1081,7 @@ ObjectDefineProperties(ReadableStreamDefaultController.prototype, { }); function createReadableStreamDefaultController() { - const controller = new ReadableStreamDefaultController(kSkipThrow); - - controller[kType] = 'ReadableStreamDefaultController'; - controller[kState] = {}; - - return controller; + return new ReadableStreamDefaultController(kSkipThrow); } class ReadableByteStreamController { diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 311f2ca50be66f..2f32f7d3354fd3 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -336,9 +336,7 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, { }); function createTransformStreamDefaultController() { - const controller = new TransformStreamDefaultController(kSkipThrow); - controller[kType] = 'TransformStreamDefaultController'; - return controller; + return new TransformStreamDefaultController(kSkipThrow); } const isTransformStream = diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index 0a83450fab4c2e..65b8e62e174894 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -573,9 +573,7 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, { }); function createWritableStreamDefaultController() { - const controller = new WritableStreamDefaultController(kSkipThrow); - controller[kType] = 'WritableStreamDefaultController'; - return controller; + return new WritableStreamDefaultController(kSkipThrow); } const isWritableStream = From fe25995d6a704416a4276bfcd30e855328b75768 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 20:24:37 +0300 Subject: [PATCH 6/9] stream: fix tests --- lib/internal/webstreams/readablestream.js | 2 +- lib/internal/webstreams/transformstream.js | 2 +- lib/internal/webstreams/writablestream.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index c157595bfee040..691abb3e0ad78f 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1021,7 +1021,7 @@ class ReadableStreamDefaultController { [kType] = 'ReadableStreamDefaultController'; [kState] = {}; - constructor(skipThrowSymbol) { + constructor(skipThrowSymbol = undefined) { if (skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 2f32f7d3354fd3..9cc712fe1a5bea 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -271,7 +271,7 @@ TransferredTransformStream.prototype[kDeserialize] = () => {}; class TransformStreamDefaultController { [kType] = 'TransformStreamDefaultController'; - constructor(skipThrowSymbol) { + constructor(skipThrowSymbol = undefined) { if (skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index 65b8e62e174894..e517a8c3268575 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -523,7 +523,7 @@ ObjectDefineProperties(WritableStreamDefaultWriter.prototype, { class WritableStreamDefaultController { [kType] = 'WritableStreamDefaultController'; - constructor(skipThrowSymbol) { + constructor(skipThrowSymbol = undefined) { if (skipThrowSymbol !== kSkipThrow) { throw new ERR_ILLEGAL_CONSTRUCTOR(); } From 54e8215bd30ed64ac908cc23c2d81bf9e32de9ed Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 20:27:52 +0300 Subject: [PATCH 7/9] stream: improve perf --- lib/internal/webstreams/readablestream.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index 691abb3e0ad78f..b7501e9de59227 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1086,9 +1086,12 @@ function createReadableStreamDefaultController() { class ReadableByteStreamController { [kType] = 'ReadableByteStreamController'; + [kState] = {}; - constructor() { - throw new ERR_ILLEGAL_CONSTRUCTOR(); + constructor(skipThrowSymbol = undefined) { + if (skipThrowSymbol !== kSkipThrow) { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } } /** @@ -1200,14 +1203,7 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, { }); function createReadableByteStreamController() { - return ReflectConstruct( - function() { - this[kType] = 'ReadableByteStreamController'; - this[kState] = {}; - }, - [], - ReadableByteStreamController, - ); + return new ReadableByteStreamController(kSkipThrow); } function createTeeReadableStream(start, pull, cancel) { From 5c534188a71da7f00746eca6ab9b71cb0acef6bc Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 20:30:26 +0300 Subject: [PATCH 8/9] stream: remove fn --- lib/internal/webstreams/readablestream.js | 12 ++---------- lib/internal/webstreams/transformstream.js | 6 +----- lib/internal/webstreams/writablestream.js | 6 +----- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index b7501e9de59227..a038bbb446a3ac 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -1080,10 +1080,6 @@ ObjectDefineProperties(ReadableStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamDefaultController.name), }); -function createReadableStreamDefaultController() { - return new ReadableStreamDefaultController(kSkipThrow); -} - class ReadableByteStreamController { [kType] = 'ReadableByteStreamController'; [kState] = {}; @@ -1202,10 +1198,6 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableByteStreamController.name), }); -function createReadableByteStreamController() { - return new ReadableByteStreamController(kSkipThrow); -} - function createTeeReadableStream(start, pull, cancel) { return ReflectConstruct( function() { @@ -2408,7 +2400,7 @@ function setupReadableStreamDefaultControllerFromSource( source, highWaterMark, sizeAlgorithm) { - const controller = createReadableStreamDefaultController(); + const controller = new ReadableStreamDefaultController(kSkipThrow); const start = source?.start; const pull = source?.pull; const cancel = source?.cancel; @@ -3206,7 +3198,7 @@ function setupReadableByteStreamControllerFromSource( stream, source, highWaterMark) { - const controller = createReadableByteStreamController(); + const controller = new ReadableByteStreamController(kSkipThrow); const start = source?.start; const pull = source?.pull; const cancel = source?.cancel; diff --git a/lib/internal/webstreams/transformstream.js b/lib/internal/webstreams/transformstream.js index 9cc712fe1a5bea..7a8f20a6eece38 100644 --- a/lib/internal/webstreams/transformstream.js +++ b/lib/internal/webstreams/transformstream.js @@ -335,10 +335,6 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(TransformStreamDefaultController.name), }); -function createTransformStreamDefaultController() { - return new TransformStreamDefaultController(kSkipThrow); -} - const isTransformStream = isBrandCheck('TransformStream'); const isTransformStreamDefaultController = @@ -453,7 +449,7 @@ function setupTransformStreamDefaultController( function setupTransformStreamDefaultControllerFromTransformer( stream, transformer) { - const controller = createTransformStreamDefaultController(); + const controller = new TransformStreamDefaultController(kSkipThrow); const transform = transformer?.transform || defaultTransformAlgorithm; const flush = transformer?.flush || nonOpFlush; const transformAlgorithm = diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index e517a8c3268575..46d6ae28772c32 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -572,10 +572,6 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, { [SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultController.name), }); -function createWritableStreamDefaultController() { - return new WritableStreamDefaultController(kSkipThrow); -} - const isWritableStream = isBrandCheck('WritableStream'); const isWritableStreamDefaultWriter = @@ -1232,7 +1228,7 @@ function setupWritableStreamDefaultControllerFromSink( sink, highWaterMark, sizeAlgorithm) { - const controller = createWritableStreamDefaultController(); + const controller = new WritableStreamDefaultController(kSkipThrow); const start = sink?.start; const write = sink?.write; const close = sink?.close; From e5a3f9e9265afd5b335bd676f6e8d92c0cc832c1 Mon Sep 17 00:00:00 2001 From: Raz Luvaton <16746759+rluvaton@users.noreply.github.com> Date: Thu, 10 Aug 2023 21:39:28 +0300 Subject: [PATCH 9/9] stream: improve ReadableStreamBYOBRequest --- lib/internal/webstreams/readablestream.js | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/internal/webstreams/readablestream.js b/lib/internal/webstreams/readablestream.js index a038bbb446a3ac..a1845574f93ee0 100644 --- a/lib/internal/webstreams/readablestream.js +++ b/lib/internal/webstreams/readablestream.js @@ -676,8 +676,10 @@ TransferredReadableStream.prototype[kDeserialize] = () => {}; class ReadableStreamBYOBRequest { [kType] = 'ReadableStreamBYOBRequest'; - constructor() { - throw new ERR_ILLEGAL_CONSTRUCTOR(); + constructor(skipThrowSymbol = undefined) { + if (skipThrowSymbol !== kSkipThrow) { + throw new ERR_ILLEGAL_CONSTRUCTOR(); + } } /** @@ -759,17 +761,14 @@ ObjectDefineProperties(ReadableStreamBYOBRequest.prototype, { }); function createReadableStreamBYOBRequest(controller, view) { - return ReflectConstruct( - function() { - this[kType] = 'ReadableStreamBYOBRequest'; - this[kState] = { - controller, - view, - }; - }, - [], - ReadableStreamBYOBRequest, - ); + const stream = new ReadableStreamBYOBRequest(kSkipThrow); + + stream[kState] = { + controller, + view, + }; + + return stream; } class DefaultReadRequest {