Skip to content

Commit 1fb6e82

Browse files
MrJithildanielleadams
authored andcommitted
stream: fix web streams have no Symbol.toStringTag
stream: fix web streams have no Symbol.toStringTag stream: add unit tests PR-URL: #45117 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent f1aa82f commit 1fb6e82

File tree

5 files changed

+63
-26
lines changed

5 files changed

+63
-26
lines changed

lib/internal/webstreams/queuingstrategies.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,20 @@ const byteSizeFunction = ObjectDefineProperty(
5656
);
5757
const countSizeFunction = ObjectDefineProperty(() => 1, 'name', nameDescriptor);
5858

59+
const getNonWritablePropertyDescriptor = (value) => {
60+
return {
61+
__proto__: null,
62+
configurable: true,
63+
value,
64+
};
65+
};
66+
5967
/**
6068
* @type {QueuingStrategy}
6169
*/
6270
class ByteLengthQueuingStrategy {
6371
[kType] = 'ByteLengthQueuingStrategy';
6472

65-
get [SymbolToStringTag]() { return this[kType]; }
66-
6773
/**
6874
* @param {{
6975
* highWaterMark : number
@@ -110,6 +116,7 @@ class ByteLengthQueuingStrategy {
110116
ObjectDefineProperties(ByteLengthQueuingStrategy.prototype, {
111117
highWaterMark: kEnumerableProperty,
112118
size: kEnumerableProperty,
119+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ByteLengthQueuingStrategy.name),
113120
});
114121

115122
/**
@@ -118,8 +125,6 @@ ObjectDefineProperties(ByteLengthQueuingStrategy.prototype, {
118125
class CountQueuingStrategy {
119126
[kType] = 'CountQueuingStrategy';
120127

121-
get [SymbolToStringTag]() { return this[kType]; }
122-
123128
/**
124129
* @param {{
125130
* highWaterMark : number
@@ -166,6 +171,7 @@ class CountQueuingStrategy {
166171
ObjectDefineProperties(CountQueuingStrategy.prototype, {
167172
highWaterMark: kEnumerableProperty,
168173
size: kEnumerableProperty,
174+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(CountQueuingStrategy.name),
169175
});
170176

171177
module.exports = {

lib/internal/webstreams/readablestream.js

+14-12
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ const kError = Symbol('kError');
141141
const kPull = Symbol('kPull');
142142
const kRelease = Symbol('kRelease');
143143

144+
const getNonWritablePropertyDescriptor = (value) => {
145+
return {
146+
__proto__: null,
147+
configurable: true,
148+
value,
149+
};
150+
};
151+
144152
/**
145153
* @typedef {import('../abort_controller').AbortSignal} AbortSignal
146154
* @typedef {import('./queuingstrategies').QueuingStrategy} QueuingStrategy
@@ -206,8 +214,6 @@ const kRelease = Symbol('kRelease');
206214
class ReadableStream {
207215
[kType] = 'ReadableStream';
208216

209-
get [SymbolToStringTag]() { return this[kType]; }
210-
211217
/**
212218
* @param {UnderlyingSource} [source]
213219
* @param {QueuingStrategy} [strategy]
@@ -604,6 +610,7 @@ ObjectDefineProperties(ReadableStream.prototype, {
604610
pipeThrough: kEnumerableProperty,
605611
pipeTo: kEnumerableProperty,
606612
tee: kEnumerableProperty,
613+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStream.name),
607614
});
608615

609616
function TransferredReadableStream() {
@@ -629,8 +636,6 @@ TransferredReadableStream.prototype[kDeserialize] = () => {};
629636
class ReadableStreamBYOBRequest {
630637
[kType] = 'ReadableStreamBYOBRequest';
631638

632-
get [SymbolToStringTag]() { return this[kType]; }
633-
634639
constructor() {
635640
throw new ERR_ILLEGAL_CONSTRUCTOR();
636641
}
@@ -710,6 +715,7 @@ ObjectDefineProperties(ReadableStreamBYOBRequest.prototype, {
710715
view: kEnumerableProperty,
711716
respond: kEnumerableProperty,
712717
respondWithNewView: kEnumerableProperty,
718+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamBYOBRequest.name),
713719
});
714720

715721
function createReadableStreamBYOBRequest(controller, view) {
@@ -769,8 +775,6 @@ class ReadIntoRequest {
769775
class ReadableStreamDefaultReader {
770776
[kType] = 'ReadableStreamDefaultReader';
771777

772-
get [SymbolToStringTag]() { return this[kType]; }
773-
774778
/**
775779
* @param {ReadableStream} stream
776780
*/
@@ -854,13 +858,12 @@ ObjectDefineProperties(ReadableStreamDefaultReader.prototype, {
854858
read: kEnumerableProperty,
855859
releaseLock: kEnumerableProperty,
856860
cancel: kEnumerableProperty,
861+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamDefaultReader.name),
857862
});
858863

859864
class ReadableStreamBYOBReader {
860865
[kType] = 'ReadableStreamBYOBReader';
861866

862-
get [SymbolToStringTag]() { return this[kType]; }
863-
864867
/**
865868
* @param {ReadableStream} stream
866869
*/
@@ -971,13 +974,12 @@ ObjectDefineProperties(ReadableStreamBYOBReader.prototype, {
971974
read: kEnumerableProperty,
972975
releaseLock: kEnumerableProperty,
973976
cancel: kEnumerableProperty,
977+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamBYOBReader.name),
974978
});
975979

976980
class ReadableStreamDefaultController {
977981
[kType] = 'ReadableStreamDefaultController';
978982

979-
get [SymbolToStringTag]() { return this[kType]; }
980-
981983
constructor() {
982984
throw new ERR_ILLEGAL_CONSTRUCTOR();
983985
}
@@ -1032,6 +1034,7 @@ ObjectDefineProperties(ReadableStreamDefaultController.prototype, {
10321034
close: kEnumerableProperty,
10331035
enqueue: kEnumerableProperty,
10341036
error: kEnumerableProperty,
1037+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamDefaultController.name),
10351038
});
10361039

10371040
function createReadableStreamDefaultController() {
@@ -1048,8 +1051,6 @@ function createReadableStreamDefaultController() {
10481051
class ReadableByteStreamController {
10491052
[kType] = 'ReadableByteStreamController';
10501053

1051-
get [SymbolToStringTag]() { return this[kType]; }
1052-
10531054
constructor() {
10541055
throw new ERR_ILLEGAL_CONSTRUCTOR();
10551056
}
@@ -1168,6 +1169,7 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, {
11681169
close: kEnumerableProperty,
11691170
enqueue: kEnumerableProperty,
11701171
error: kEnumerableProperty,
1172+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableByteStreamController.name),
11711173
});
11721174

11731175
function createReadableByteStreamController() {

lib/internal/webstreams/transformstream.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ const {
6464

6565
const assert = require('internal/assert');
6666

67+
const getNonWritablePropertyDescriptor = (value) => {
68+
return {
69+
__proto__: null,
70+
configurable: true,
71+
value,
72+
};
73+
};
74+
6775
/**
6876
* @typedef {import('./queuingstrategies').QueuingStrategy
6977
* } QueuingStrategy
@@ -102,8 +110,6 @@ const assert = require('internal/assert');
102110
class TransformStream {
103111
[kType] = 'TransformStream';
104112

105-
get [SymbolToStringTag]() { return this[kType]; }
106-
107113
/**
108114
* @param {Transformer} [transformer]
109115
* @param {QueuingStrategy} [writableStrategy]
@@ -236,6 +242,7 @@ class TransformStream {
236242
ObjectDefineProperties(TransformStream.prototype, {
237243
readable: kEnumerableProperty,
238244
writable: kEnumerableProperty,
245+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(TransformStream.name),
239246
});
240247

241248
function TransferredTransformStream() {
@@ -261,8 +268,6 @@ TransferredTransformStream.prototype[kDeserialize] = () => {};
261268
class TransformStreamDefaultController {
262269
[kType] = 'TransformStreamDefaultController';
263270

264-
get [SymbolToStringTag]() { return this[kType]; }
265-
266271
constructor() {
267272
throw new ERR_ILLEGAL_CONSTRUCTOR();
268273
}
@@ -322,6 +327,7 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, {
322327
enqueue: kEnumerableProperty,
323328
error: kEnumerableProperty,
324329
terminate: kEnumerableProperty,
330+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(TransformStreamDefaultController.name),
325331
});
326332

327333
function createTransformStreamDefaultController() {

lib/internal/webstreams/writablestream.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,14 @@ const kAbort = Symbol('kAbort');
7777
const kCloseSentinel = Symbol('kCloseSentinel');
7878
const kError = Symbol('kError');
7979

80+
const getNonWritablePropertyDescriptor = (value) => {
81+
return {
82+
__proto__: null,
83+
configurable: true,
84+
value,
85+
};
86+
};
87+
8088
/**
8189
* @typedef {import('../abort_controller').AbortSignal} AbortSignal
8290
* @typedef {import('./queuingstrategies').QueuingStrategy
@@ -121,8 +129,6 @@ const kError = Symbol('kError');
121129
class WritableStream {
122130
[kType] = 'WritableStream';
123131

124-
get [SymbolToStringTag]() { return this[kType]; }
125-
126132
/**
127133
* @param {UnderlyingSink} [sink]
128134
* @param {QueuingStrategy} [strategy]
@@ -295,6 +301,7 @@ ObjectDefineProperties(WritableStream.prototype, {
295301
abort: kEnumerableProperty,
296302
close: kEnumerableProperty,
297303
getWriter: kEnumerableProperty,
304+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStream.name),
298305
});
299306

300307
function TransferredWritableStream() {
@@ -348,8 +355,6 @@ TransferredWritableStream.prototype[kDeserialize] = () => {};
348355
class WritableStreamDefaultWriter {
349356
[kType] = 'WritableStreamDefaultWriter';
350357

351-
get [SymbolToStringTag]() { return this[kType]; }
352-
353358
/**
354359
* @param {WritableStream} stream
355360
*/
@@ -487,13 +492,12 @@ ObjectDefineProperties(WritableStreamDefaultWriter.prototype, {
487492
close: kEnumerableProperty,
488493
releaseLock: kEnumerableProperty,
489494
write: kEnumerableProperty,
495+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultWriter.name),
490496
});
491497

492498
class WritableStreamDefaultController {
493499
[kType] = 'WritableStreamDefaultController';
494500

495-
get [SymbolToStringTag]() { return this[kType]; }
496-
497501
constructor() {
498502
throw new ERR_ILLEGAL_CONSTRUCTOR();
499503
}
@@ -538,6 +542,7 @@ class WritableStreamDefaultController {
538542
ObjectDefineProperties(WritableStreamDefaultController.prototype, {
539543
signal: kEnumerableProperty,
540544
error: kEnumerableProperty,
545+
[SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultController.name),
541546
});
542547

543548
function createWritableStreamDefaultController() {
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'use strict';
2+
3+
require('../common');
4+
5+
const assert = require('assert');
6+
7+
const classesToBeTested = [ WritableStream, WritableStreamDefaultWriter, WritableStreamDefaultController,
8+
ReadableStream, ReadableStreamBYOBRequest, ReadableStreamDefaultReader,
9+
ReadableStreamBYOBReader, ReadableStreamDefaultController, ReadableByteStreamController,
10+
ByteLengthQueuingStrategy, CountQueuingStrategy, TransformStream,
11+
TransformStreamDefaultController];
12+
13+
14+
classesToBeTested.forEach((cls) => {
15+
assert.strictEqual(cls.prototype[Symbol.toStringTag], cls.name);
16+
assert.deepStrictEqual(Object.getOwnPropertyDescriptor(cls.prototype, Symbol.toStringTag),
17+
{ configurable: true, enumerable: false, value: cls.name, writable: false });
18+
});

0 commit comments

Comments
 (0)