mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
stream: fix web streams have no Symbol.toStringTag
stream: fix web streams have no Symbol.toStringTag stream: add unit tests PR-URL: https://github.com/nodejs/node/pull/45117 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
This commit is contained in:
@@ -56,14 +56,20 @@ const byteSizeFunction = ObjectDefineProperty(
|
||||
);
|
||||
const countSizeFunction = ObjectDefineProperty(() => 1, 'name', nameDescriptor);
|
||||
|
||||
const getNonWritablePropertyDescriptor = (value) => {
|
||||
return {
|
||||
__proto__: null,
|
||||
configurable: true,
|
||||
value,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @type {QueuingStrategy}
|
||||
*/
|
||||
class ByteLengthQueuingStrategy {
|
||||
[kType] = 'ByteLengthQueuingStrategy';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {{
|
||||
* highWaterMark : number
|
||||
@@ -110,6 +116,7 @@ class ByteLengthQueuingStrategy {
|
||||
ObjectDefineProperties(ByteLengthQueuingStrategy.prototype, {
|
||||
highWaterMark: kEnumerableProperty,
|
||||
size: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ByteLengthQueuingStrategy.name),
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -118,8 +125,6 @@ ObjectDefineProperties(ByteLengthQueuingStrategy.prototype, {
|
||||
class CountQueuingStrategy {
|
||||
[kType] = 'CountQueuingStrategy';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {{
|
||||
* highWaterMark : number
|
||||
@@ -166,6 +171,7 @@ class CountQueuingStrategy {
|
||||
ObjectDefineProperties(CountQueuingStrategy.prototype, {
|
||||
highWaterMark: kEnumerableProperty,
|
||||
size: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(CountQueuingStrategy.name),
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -141,6 +141,14 @@ const kError = Symbol('kError');
|
||||
const kPull = Symbol('kPull');
|
||||
const kRelease = Symbol('kRelease');
|
||||
|
||||
const getNonWritablePropertyDescriptor = (value) => {
|
||||
return {
|
||||
__proto__: null,
|
||||
configurable: true,
|
||||
value,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @typedef {import('../abort_controller').AbortSignal} AbortSignal
|
||||
* @typedef {import('./queuingstrategies').QueuingStrategy} QueuingStrategy
|
||||
@@ -206,8 +214,6 @@ const kRelease = Symbol('kRelease');
|
||||
class ReadableStream {
|
||||
[kType] = 'ReadableStream';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {UnderlyingSource} [source]
|
||||
* @param {QueuingStrategy} [strategy]
|
||||
@@ -604,6 +610,7 @@ ObjectDefineProperties(ReadableStream.prototype, {
|
||||
pipeThrough: kEnumerableProperty,
|
||||
pipeTo: kEnumerableProperty,
|
||||
tee: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStream.name),
|
||||
});
|
||||
|
||||
function TransferredReadableStream() {
|
||||
@@ -629,8 +636,6 @@ TransferredReadableStream.prototype[kDeserialize] = () => {};
|
||||
class ReadableStreamBYOBRequest {
|
||||
[kType] = 'ReadableStreamBYOBRequest';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
constructor() {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
@@ -710,6 +715,7 @@ ObjectDefineProperties(ReadableStreamBYOBRequest.prototype, {
|
||||
view: kEnumerableProperty,
|
||||
respond: kEnumerableProperty,
|
||||
respondWithNewView: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamBYOBRequest.name),
|
||||
});
|
||||
|
||||
function createReadableStreamBYOBRequest(controller, view) {
|
||||
@@ -769,8 +775,6 @@ class ReadIntoRequest {
|
||||
class ReadableStreamDefaultReader {
|
||||
[kType] = 'ReadableStreamDefaultReader';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {ReadableStream} stream
|
||||
*/
|
||||
@@ -854,13 +858,12 @@ ObjectDefineProperties(ReadableStreamDefaultReader.prototype, {
|
||||
read: kEnumerableProperty,
|
||||
releaseLock: kEnumerableProperty,
|
||||
cancel: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamDefaultReader.name),
|
||||
});
|
||||
|
||||
class ReadableStreamBYOBReader {
|
||||
[kType] = 'ReadableStreamBYOBReader';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {ReadableStream} stream
|
||||
*/
|
||||
@@ -971,13 +974,12 @@ ObjectDefineProperties(ReadableStreamBYOBReader.prototype, {
|
||||
read: kEnumerableProperty,
|
||||
releaseLock: kEnumerableProperty,
|
||||
cancel: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamBYOBReader.name),
|
||||
});
|
||||
|
||||
class ReadableStreamDefaultController {
|
||||
[kType] = 'ReadableStreamDefaultController';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
constructor() {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
@@ -1032,6 +1034,7 @@ ObjectDefineProperties(ReadableStreamDefaultController.prototype, {
|
||||
close: kEnumerableProperty,
|
||||
enqueue: kEnumerableProperty,
|
||||
error: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableStreamDefaultController.name),
|
||||
});
|
||||
|
||||
function createReadableStreamDefaultController() {
|
||||
@@ -1048,8 +1051,6 @@ function createReadableStreamDefaultController() {
|
||||
class ReadableByteStreamController {
|
||||
[kType] = 'ReadableByteStreamController';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
constructor() {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
@@ -1168,6 +1169,7 @@ ObjectDefineProperties(ReadableByteStreamController.prototype, {
|
||||
close: kEnumerableProperty,
|
||||
enqueue: kEnumerableProperty,
|
||||
error: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(ReadableByteStreamController.name),
|
||||
});
|
||||
|
||||
function createReadableByteStreamController() {
|
||||
|
||||
@@ -64,6 +64,14 @@ const {
|
||||
|
||||
const assert = require('internal/assert');
|
||||
|
||||
const getNonWritablePropertyDescriptor = (value) => {
|
||||
return {
|
||||
__proto__: null,
|
||||
configurable: true,
|
||||
value,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @typedef {import('./queuingstrategies').QueuingStrategy
|
||||
* } QueuingStrategy
|
||||
@@ -102,8 +110,6 @@ const assert = require('internal/assert');
|
||||
class TransformStream {
|
||||
[kType] = 'TransformStream';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {Transformer} [transformer]
|
||||
* @param {QueuingStrategy} [writableStrategy]
|
||||
@@ -236,6 +242,7 @@ class TransformStream {
|
||||
ObjectDefineProperties(TransformStream.prototype, {
|
||||
readable: kEnumerableProperty,
|
||||
writable: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(TransformStream.name),
|
||||
});
|
||||
|
||||
function TransferredTransformStream() {
|
||||
@@ -261,8 +268,6 @@ TransferredTransformStream.prototype[kDeserialize] = () => {};
|
||||
class TransformStreamDefaultController {
|
||||
[kType] = 'TransformStreamDefaultController';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
constructor() {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
@@ -322,6 +327,7 @@ ObjectDefineProperties(TransformStreamDefaultController.prototype, {
|
||||
enqueue: kEnumerableProperty,
|
||||
error: kEnumerableProperty,
|
||||
terminate: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(TransformStreamDefaultController.name),
|
||||
});
|
||||
|
||||
function createTransformStreamDefaultController() {
|
||||
|
||||
@@ -77,6 +77,14 @@ const kAbort = Symbol('kAbort');
|
||||
const kCloseSentinel = Symbol('kCloseSentinel');
|
||||
const kError = Symbol('kError');
|
||||
|
||||
const getNonWritablePropertyDescriptor = (value) => {
|
||||
return {
|
||||
__proto__: null,
|
||||
configurable: true,
|
||||
value,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @typedef {import('../abort_controller').AbortSignal} AbortSignal
|
||||
* @typedef {import('./queuingstrategies').QueuingStrategy
|
||||
@@ -121,8 +129,6 @@ const kError = Symbol('kError');
|
||||
class WritableStream {
|
||||
[kType] = 'WritableStream';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {UnderlyingSink} [sink]
|
||||
* @param {QueuingStrategy} [strategy]
|
||||
@@ -295,6 +301,7 @@ ObjectDefineProperties(WritableStream.prototype, {
|
||||
abort: kEnumerableProperty,
|
||||
close: kEnumerableProperty,
|
||||
getWriter: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStream.name),
|
||||
});
|
||||
|
||||
function TransferredWritableStream() {
|
||||
@@ -348,8 +355,6 @@ TransferredWritableStream.prototype[kDeserialize] = () => {};
|
||||
class WritableStreamDefaultWriter {
|
||||
[kType] = 'WritableStreamDefaultWriter';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
/**
|
||||
* @param {WritableStream} stream
|
||||
*/
|
||||
@@ -487,13 +492,12 @@ ObjectDefineProperties(WritableStreamDefaultWriter.prototype, {
|
||||
close: kEnumerableProperty,
|
||||
releaseLock: kEnumerableProperty,
|
||||
write: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultWriter.name),
|
||||
});
|
||||
|
||||
class WritableStreamDefaultController {
|
||||
[kType] = 'WritableStreamDefaultController';
|
||||
|
||||
get [SymbolToStringTag]() { return this[kType]; }
|
||||
|
||||
constructor() {
|
||||
throw new ERR_ILLEGAL_CONSTRUCTOR();
|
||||
}
|
||||
@@ -538,6 +542,7 @@ class WritableStreamDefaultController {
|
||||
ObjectDefineProperties(WritableStreamDefaultController.prototype, {
|
||||
signal: kEnumerableProperty,
|
||||
error: kEnumerableProperty,
|
||||
[SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultController.name),
|
||||
});
|
||||
|
||||
function createWritableStreamDefaultController() {
|
||||
|
||||
18
test/parallel/test-webstream-string-tag.js
Normal file
18
test/parallel/test-webstream-string-tag.js
Normal file
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
require('../common');
|
||||
|
||||
const assert = require('assert');
|
||||
|
||||
const classesToBeTested = [ WritableStream, WritableStreamDefaultWriter, WritableStreamDefaultController,
|
||||
ReadableStream, ReadableStreamBYOBRequest, ReadableStreamDefaultReader,
|
||||
ReadableStreamBYOBReader, ReadableStreamDefaultController, ReadableByteStreamController,
|
||||
ByteLengthQueuingStrategy, CountQueuingStrategy, TransformStream,
|
||||
TransformStreamDefaultController];
|
||||
|
||||
|
||||
classesToBeTested.forEach((cls) => {
|
||||
assert.strictEqual(cls.prototype[Symbol.toStringTag], cls.name);
|
||||
assert.deepStrictEqual(Object.getOwnPropertyDescriptor(cls.prototype, Symbol.toStringTag),
|
||||
{ configurable: true, enumerable: false, value: cls.name, writable: false });
|
||||
});
|
||||
Reference in New Issue
Block a user