Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
cb4e020
stream: fix code style
MattiasBuelens Dec 15, 2023
46022b8
stream: avoid PromiseResolve in ensureIsPromise
MattiasBuelens Dec 4, 2023
62fc1e1
stream: fix handling sync errors from source cancel and sink abort
MattiasBuelens Dec 4, 2023
19e8940
stream: check for promise only when constructing from source/sink/tra…
MattiasBuelens Dec 4, 2023
ab33b45
stream: fix TeeReadableStream
MattiasBuelens Dec 4, 2023
463f49a
stream: rename TeeReadableStream to InternalReadableStream
MattiasBuelens Dec 4, 2023
36324d5
stream: use internal ReadableStream for teeing byte streams
MattiasBuelens Dec 4, 2023
f0b1036
stream: use internal ReadableStream for ReadableStream.from()
MattiasBuelens Dec 4, 2023
3846bfe
stream: use internal streams for TransformStream
MattiasBuelens Dec 4, 2023
0d45e6f
stream: add helpers to create internal state
MattiasBuelens Dec 15, 2023
5df4f2e
stream: remove unused field in internal state
MattiasBuelens Dec 15, 2023
15b30ca
stream: fix validating callbacks
MattiasBuelens Dec 4, 2023
0bd501f
test: update expectations for streams wpt
MattiasBuelens Dec 15, 2023
112a717
stream: set __proto__ to null for internal state
MattiasBuelens Dec 15, 2023
b9a13b5
fixup! simplify ensureIsPromise
MattiasBuelens Dec 15, 2023
162cfdc
fixup! remove unused imports
MattiasBuelens Dec 15, 2023
a889e2c
fixup! whitespace
MattiasBuelens Dec 15, 2023
16a9cc7
fixup! code style
MattiasBuelens Dec 15, 2023
11e6f94
fixup! fix timing of ensureIsPromise
MattiasBuelens Dec 16, 2023
0c0e3c1
fixup! rename to invokePromiseCallback
MattiasBuelens Dec 16, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
stream: use internal streams for TransformStream
  • Loading branch information
MattiasBuelens committed Dec 15, 2023
commit 3846bfed16a387bc62a077e6ffefb06112a00dff
2 changes: 2 additions & 0 deletions lib/internal/webstreams/readablestream.js
Original file line number Diff line number Diff line change
Expand Up @@ -3391,4 +3391,6 @@ module.exports = {
readableByteStreamControllerPullSteps,
setupReadableByteStreamController,
setupReadableByteStreamControllerFromSource,
createReadableStream,
createReadableByteStream,
};
48 changes: 19 additions & 29 deletions lib/internal/webstreams/transformstream.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ const {

const {
ReadableStream,
createReadableStream,
readableStreamDefaultControllerCanCloseOrEnqueue,
readableStreamDefaultControllerClose,
readableStreamDefaultControllerEnqueue,
Expand All @@ -61,6 +62,7 @@ const {

const {
WritableStream,
createWritableStream,
writableStreamDefaultControllerErrorIfNeeded,
} = require('internal/webstreams/writablestream');

Expand Down Expand Up @@ -360,36 +362,24 @@ function initializeTransformStream(
readableHighWaterMark,
readableSizeAlgorithm) {

const writable = new WritableStream({
__proto__: null,
start() { return startPromise.promise; },
write(chunk) {
return transformStreamDefaultSinkWriteAlgorithm(stream, chunk);
},
abort(reason) {
return transformStreamDefaultSinkAbortAlgorithm(stream, reason);
},
close() {
return transformStreamDefaultSinkCloseAlgorithm(stream);
},
}, {
highWaterMark: writableHighWaterMark,
size: writableSizeAlgorithm,
});
const startAlgorithm = () => startPromise.promise;

const readable = new ReadableStream({
__proto__: null,
start() { return startPromise.promise; },
pull() {
return transformStreamDefaultSourcePullAlgorithm(stream);
},
cancel(reason) {
return transformStreamDefaultSourceCancelAlgorithm(stream, reason);
},
}, {
highWaterMark: readableHighWaterMark,
size: readableSizeAlgorithm,
});
const writable = createWritableStream(
startAlgorithm,
(chunk) => transformStreamDefaultSinkWriteAlgorithm(stream, chunk),
() => transformStreamDefaultSinkCloseAlgorithm(stream),
(reason) => transformStreamDefaultSinkAbortAlgorithm(stream, reason),
writableHighWaterMark,
writableSizeAlgorithm,
);

const readable = createReadableStream(
startAlgorithm,
() => transformStreamDefaultSourcePullAlgorithm(stream),
(reason) => transformStreamDefaultSourceCancelAlgorithm(stream, reason),
readableHighWaterMark,
readableSizeAlgorithm,
);

stream[kState] = {
readable,
Expand Down
69 changes: 69 additions & 0 deletions lib/internal/webstreams/writablestream.js
Original file line number Diff line number Diff line change
Expand Up @@ -581,6 +581,74 @@ ObjectDefineProperties(WritableStreamDefaultController.prototype, {
[SymbolToStringTag]: getNonWritablePropertyDescriptor(WritableStreamDefaultController.name),
});

function InternalWritableStream(start, write, close, abort, highWaterMark, size) {
markTransferMode(this, false, true);
this[kType] = 'WritableStream';
this[kState] = {
close: createDeferredPromise(),
closeRequest: {
Comment thread
MattiasBuelens marked this conversation as resolved.
promise: undefined,
resolve: undefined,
reject: undefined,
},
inFlightWriteRequest: {
promise: undefined,
resolve: undefined,
reject: undefined,
},
inFlightCloseRequest: {
promise: undefined,
resolve: undefined,
reject: undefined,
},
pendingAbortRequest: {
abort: {
promise: undefined,
resolve: undefined,
reject: undefined,
},
reason: undefined,
wasAlreadyErroring: false,
},
Comment thread
MattiasBuelens marked this conversation as resolved.
backpressure: false,
controller: undefined,
state: 'writable',
storedError: undefined,
writeRequests: [],
writer: undefined,
transfer: {
readable: undefined,
port1: undefined,
port2: undefined,
promise: undefined,
},
};
this[kIsClosedPromise] = createDeferredPromise();

const controller = new WritableStreamDefaultController(kSkipThrow);
setupWritableStreamDefaultController(
this,
controller,
start,
write,
close,
abort,
highWaterMark,
size
)
}

ObjectSetPrototypeOf(InternalWritableStream.prototype, WritableStream.prototype);
ObjectSetPrototypeOf(InternalWritableStream, WritableStream);

function createWritableStream(start, write, close, abort, highWaterMark, size) {
const stream = new InternalWritableStream(start, write, close, abort, highWaterMark, size);

// For spec compliance the InternalWritableStream must be a WritableStream
stream.constructor = WritableStream;
return stream;
}

const isWritableStream =
isBrandCheck('WritableStream');
const isWritableStreamDefaultWriter =
Expand Down Expand Up @@ -1360,4 +1428,5 @@ module.exports = {
writableStreamDefaultControllerAdvanceQueueIfNeeded,
setupWritableStreamDefaultControllerFromSink,
setupWritableStreamDefaultController,
createWritableStream,
};