| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -639,6 +639,7 @@ ObjectDefineProperties(ReadableStream, { | |||
| 639 | 639 | }); | |
| 640 | 640 | ||
| 641 | 641 | function InternalTransferredReadableStream() { | |
| 642 | + ObjectSetPrototypeOf(this, ReadableStream.prototype); | ||
| 642 | 643 | markTransferMode(this, false, true); | |
| 643 | 644 | this[kType] = 'ReadableStream'; | |
| 644 | 645 | this[kState] = createReadableStreamState(); | |
@@ -1226,6 +1227,7 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, { | |||
| 1226 | 1227 | }); | |
| 1227 | 1228 | ||
| 1228 | 1229 | function InternalReadableStream(start, pull, cancel, highWaterMark, size) { | |
| 1230 | + ObjectSetPrototypeOf(this, ReadableStream.prototype); | ||
| 1229 | 1231 | markTransferMode(this, false, true); | |
| 1230 | 1232 | this[kType] = 'ReadableStream'; | |
| 1231 | 1233 | this[kState] = createReadableStreamState(); | |
@@ -1253,6 +1255,7 @@ function createReadableStream(start, pull, cancel, highWaterMark = 1, size = () | |||
| 1253 | 1255 | } | |
| 1254 | 1256 | ||
| 1255 | 1257 | function InternalReadableByteStream(start, pull, cancel) { | |
| 1258 | + ObjectSetPrototypeOf(this, ReadableStream.prototype); | ||
| 1256 | 1259 | markTransferMode(this, false, true); | |
| 1257 | 1260 | this[kType] = 'ReadableStream'; | |
| 1258 | 1261 | this[kState] = createReadableStreamState(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -256,6 +256,7 @@ ObjectDefineProperties(TransformStream.prototype, { | |||
| 256 | 256 | }); | |
| 257 | 257 | ||
| 258 | 258 | function InternalTransferredTransformStream() { | |
| 259 | + ObjectSetPrototypeOf(this, TransformStream.prototype); | ||
| 259 | 260 | markTransferMode(this, false, true); | |
| 260 | 261 | this[kType] = 'TransformStream'; | |
| 261 | 262 | this[kState] = { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -300,6 +300,7 @@ ObjectDefineProperties(WritableStream.prototype, { | |||
| 300 | 300 | }); | |
| 301 | 301 | ||
| 302 | 302 | function InternalTransferredWritableStream() { | |
| 303 | + ObjectSetPrototypeOf(this, WritableStream.prototype); | ||
| 303 | 304 | markTransferMode(this, false, true); | |
| 304 | 305 | this[kType] = 'WritableStream'; | |
| 305 | 306 | this[kState] = createWritableStreamState(); | |
@@ -516,6 +517,7 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, { | |||
| 516 | 517 | }); | |
| 517 | 518 | ||
| 518 | 519 | function InternalWritableStream(start, write, close, abort, highWaterMark, size) { | |
| 520 | + ObjectSetPrototypeOf(this, WritableStream.prototype); | ||
| 519 | 521 | markTransferMode(this, false, true); | |
| 520 | 522 | this[kType] = 'WritableStream'; | |
| 521 | 523 | this[kState] = createWritableStreamState(); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -16,6 +16,20 @@ assert.strictEqual(structuredClone(undefined, null), undefined); | |||
| 16 | 16 | assert.strictEqual(structuredClone(undefined, { transfer: null }), undefined); | |
| 17 | 17 | assert.strictEqual(structuredClone(undefined, { }), undefined); | |
| 18 | 18 | ||
| 19 | + // Transferables or its subclasses should be received with its closest transferable superclass | ||
| 20 | + for (const StreamClass of [ReadableStream, WritableStream, TransformStream]) { | ||
| 21 | + const original = new StreamClass(); | ||
| 22 | + const transfer = structuredClone(original, { transfer: [original] }); | ||
| 23 | + assert.strictEqual(Object.getPrototypeOf(transfer), StreamClass.prototype); | ||
| 24 | + assert.ok(transfer instanceof StreamClass); | ||
| 25 | + | ||
| 26 | + const extended = class extends StreamClass {}; | ||
| 27 | + const extendedOriginal = new extended(); | ||
| 28 | + const extendedTransfer = structuredClone(extendedOriginal, { transfer: [extendedOriginal] }); | ||
| 29 | + assert.strictEqual(Object.getPrototypeOf(extendedTransfer), StreamClass.prototype); | ||
| 30 | + assert.ok(extendedTransfer instanceof StreamClass); | ||
| 31 | + } | ||
| 32 | + | ||
| 19 | 33 | { | |
| 20 | 34 | // See: https://github.com/nodejs/node/issues/49940 | |
| 21 | 35 | const cloned = structuredClone({}, { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments