diff options
Diffstat (limited to 'src/js/builtins')
-rw-r--r-- | src/js/builtins/EventStream.ts | 8 | ||||
-rw-r--r-- | src/js/builtins/ReadableByteStreamInternals.ts | 4 | ||||
-rw-r--r-- | src/js/builtins/ReadableStream.ts | 14 | ||||
-rw-r--r-- | src/js/builtins/ReadableStreamBYOBReader.ts | 10 | ||||
-rw-r--r-- | src/js/builtins/ReadableStreamInternals.ts | 47 | ||||
-rw-r--r-- | src/js/builtins/TransformStreamInternals.ts | 2 | ||||
-rw-r--r-- | src/js/builtins/WritableStreamDefaultWriter.ts | 8 | ||||
-rw-r--r-- | src/js/builtins/WritableStreamInternals.ts | 16 | ||||
-rw-r--r-- | src/js/builtins/builtins.d.ts | 11 |
9 files changed, 66 insertions, 54 deletions
diff --git a/src/js/builtins/EventStream.ts b/src/js/builtins/EventStream.ts index c82195eb2..c2ce30f17 100644 --- a/src/js/builtins/EventStream.ts +++ b/src/js/builtins/EventStream.ts @@ -12,17 +12,17 @@ export function getEventStream() { opts?.start?.(this); }, cancel: () => { - console.log("Cancel!"); opts?.cancel?.(this); + this.#ctrl = undefined; }, }); } send(event?: unknown, data?: unknown): void { var ctrl = this.#ctrl!; - // if (!ctrl) { - // throw new Error("EventStream has ended"); - // } + if (!ctrl) { + throw new Error("EventStream has ended"); + } if (!data) { data = event; event = undefined; diff --git a/src/js/builtins/ReadableByteStreamInternals.ts b/src/js/builtins/ReadableByteStreamInternals.ts index f44c385b4..84186c628 100644 --- a/src/js/builtins/ReadableByteStreamInternals.ts +++ b/src/js/builtins/ReadableByteStreamInternals.ts @@ -133,7 +133,7 @@ export function readableByteStreamControllerClose(controller) { var first = $getByIdDirectPrivate(controller, "pendingPullIntos")?.peek(); if (first) { if (first.bytesFilled > 0) { - const e = $makeTypeError("Close requested while there remain pending bytes"); + const e = new TypeError("Close requested while there remain pending bytes"); $readableByteStreamControllerError(controller, e); throw e; } @@ -629,7 +629,7 @@ export function readableByteStreamControllerPullInto(controller, view) { return $createFulfilledPromise({ value: filledView, done: false }); } if ($getByIdDirectPrivate(controller, "closeRequested")) { - const e = $makeTypeError("Closing stream has been requested"); + const e = new TypeError("Closing stream has been requested"); $readableByteStreamControllerError(controller, e); return Promise.$reject(e); } diff --git a/src/js/builtins/ReadableStream.ts b/src/js/builtins/ReadableStream.ts index a265ff7d8..34806d53d 100644 --- a/src/js/builtins/ReadableStream.ts +++ b/src/js/builtins/ReadableStream.ts @@ -288,7 +288,7 @@ export function createNativeReadableStream(nativePtr, nativeType, autoAllocateCh export function cancel(this, reason) { if (!$isReadableStream(this)) return Promise.$reject($makeThisTypeError("ReadableStream", "cancel")); - if ($isReadableStreamLocked(this)) return Promise.$reject($makeTypeError("ReadableStream is locked")); + if ($isReadableStreamLocked(this)) return Promise.$reject(new TypeError("ReadableStream is locked")); return $readableStreamCancel(this, reason); } @@ -329,21 +329,21 @@ export function pipeThrough(this, streams, options) { let preventCancel = false; let signal; if (!$isUndefinedOrNull(options)) { - if (!$isObject(options)) throw $makeTypeError("options must be an object"); + if (!$isObject(options)) throw new TypeError("options must be an object"); preventAbort = !!options["preventAbort"]; preventCancel = !!options["preventCancel"]; preventClose = !!options["preventClose"]; signal = options["signal"]; - if (signal !== undefined && !$isAbortSignal(signal)) throw $makeTypeError("options.signal must be AbortSignal"); + if (signal !== undefined && !$isAbortSignal(signal)) throw new TypeError("options.signal must be AbortSignal"); } if (!$isReadableStream(this)) throw $makeThisTypeError("ReadableStream", "pipeThrough"); - if ($isReadableStreamLocked(this)) throw $makeTypeError("ReadableStream is locked"); + if ($isReadableStreamLocked(this)) throw new TypeError("ReadableStream is locked"); - if ($isWritableStreamLocked(internalWritable)) throw $makeTypeError("WritableStream is locked"); + if ($isWritableStreamLocked(internalWritable)) throw new TypeError("WritableStream is locked"); $readableStreamPipeToWritableStream(this, internalWritable, preventClose, preventAbort, preventCancel, signal); @@ -353,7 +353,7 @@ export function pipeThrough(this, streams, options) { export function pipeTo(this, destination) { if (!$isReadableStream(this)) return Promise.$reject($makeThisTypeError("ReadableStream", "pipeTo")); - if ($isReadableStreamLocked(this)) return Promise.$reject($makeTypeError("ReadableStream is locked")); + if ($isReadableStreamLocked(this)) return Promise.$reject(new TypeError("ReadableStream is locked")); // FIXME: https://bugs.webkit.org/show_bug.cgi?id=159869. // Built-in generator should be able to parse function signature to compute the function length correctly. @@ -364,7 +364,7 @@ export function pipeTo(this, destination) { let preventCancel = false; let signal; if (!$isUndefinedOrNull(options)) { - if (!$isObject(options)) return Promise.$reject($makeTypeError("options must be an object")); + if (!$isObject(options)) return Promise.$reject(new TypeError("options must be an object")); try { preventAbort = !!options["preventAbort"]; diff --git a/src/js/builtins/ReadableStreamBYOBReader.ts b/src/js/builtins/ReadableStreamBYOBReader.ts index 5ebfddb19..7a4dbf060 100644 --- a/src/js/builtins/ReadableStreamBYOBReader.ts +++ b/src/js/builtins/ReadableStreamBYOBReader.ts @@ -39,7 +39,7 @@ export function cancel(this, reason) { return Promise.$reject($makeThisTypeError("ReadableStreamBYOBReader", "cancel")); if (!$getByIdDirectPrivate(this, "ownerReadableStream")) - return Promise.$reject($makeTypeError("cancel() called on a reader owned by no readable stream")); + return Promise.$reject(new TypeError("cancel() called on a reader owned by no readable stream")); return $readableStreamReaderGenericCancel(this, reason); } @@ -49,13 +49,13 @@ export function read(this, view: DataView) { return Promise.$reject($makeThisTypeError("ReadableStreamBYOBReader", "read")); if (!$getByIdDirectPrivate(this, "ownerReadableStream")) - return Promise.$reject($makeTypeError("read() called on a reader owned by no readable stream")); + return Promise.$reject(new TypeError("read() called on a reader owned by no readable stream")); - if (!$isObject(view)) return Promise.$reject($makeTypeError("Provided view is not an object")); + if (!$isObject(view)) return Promise.$reject(new TypeError("Provided view is not an object")); - if (!ArrayBuffer.$isView(view)) return Promise.$reject($makeTypeError("Provided view is not an ArrayBufferView")); + if (!ArrayBuffer.$isView(view)) return Promise.$reject(new TypeError("Provided view is not an ArrayBufferView")); - if (view.byteLength === 0) return Promise.$reject($makeTypeError("Provided view cannot have a 0 byteLength")); + if (view.byteLength === 0) return Promise.$reject(new TypeError("Provided view cannot have a 0 byteLength")); return $readableStreamBYOBReaderRead(this, view); } diff --git a/src/js/builtins/ReadableStreamInternals.ts b/src/js/builtins/ReadableStreamInternals.ts index 0c4e816f4..9e2caba4f 100644 --- a/src/js/builtins/ReadableStreamInternals.ts +++ b/src/js/builtins/ReadableStreamInternals.ts @@ -151,10 +151,11 @@ export function createReadableStreamController(stream, underlyingSource, strateg if (typeString === "bytes") { // if (!$readableByteStreamAPIEnabled()) - // $throwTypeError("ReadableByteStreamController is not implemented"); + // throw new TypeError("ReadableByteStreamController is not implemented"); if (strategy.highWaterMark === undefined) strategy.highWaterMark = 0; - if (strategy.size !== undefined) $throwRangeError("Strategy for a ReadableByteStreamController cannot have a size"); + if (strategy.size !== undefined) + throw new RangeError("Strategy for a ReadableByteStreamController cannot have a size"); $putByIdDirectPrivate( stream, @@ -603,16 +604,17 @@ export function readDirectStream(stream, sink, underlyingSource) { $putByIdDirectPrivate(stream, "underlyingSource", undefined); $putByIdDirectPrivate(stream, "start", undefined); - function close(stream, reason) { - if (reason && underlyingSource?.cancel) { + function close(stream: ReadableStream, reason?: any) { + var cancel = underlyingSource?.cancel; + if (cancel) { try { - var prom = underlyingSource.cancel(reason); - $markPromiseAsHandled(prom); + var prom = cancel.$apply(underlyingSource, reason); + if ($isPromise(prom)) { + $markPromiseAsHandled(prom); + } } catch (e) {} - underlyingSource = undefined; } - if (stream) { $putByIdDirectPrivate(stream, "readableStreamController", undefined); $putByIdDirectPrivate(stream, "reader", undefined); @@ -622,19 +624,17 @@ export function readDirectStream(stream, sink, underlyingSource) { } else { $putByIdDirectPrivate(stream, "state", $streamClosed); } - stream = undefined; } } if (!underlyingSource.pull) { - close(); + close(stream); return; } if (!$isCallable(underlyingSource.pull)) { - close(); - $throwTypeError("pull is not a function"); - return; + close(stream); + throw new TypeError("pull is not a function"); } $putByIdDirectPrivate(stream, "readableStreamController", sink); @@ -766,7 +766,7 @@ export async function readStreamIntoSink(stream, sink, isNative) { } } -export function handleDirectStreamError(e) { +export function handleDirectStreamError(this, e) { var controller = this; var sink = controller.$sink; if (sink) { @@ -870,10 +870,10 @@ export function noopDoneFunction() { } export function onReadableStreamDirectControllerClosed(reason) { - $throwTypeError("ReadableStreamDirectController is now closed"); + throw new TypeError("ReadableStreamDirectController is now closed"); } -export function onCloseDirectStream(reason) { +export function onCloseDirectStream(this, reason) { var stream = this.$controlledReadableStream; if (!stream || $getByIdDirectPrivate(stream, "state") !== $streamReadable) return; @@ -1169,16 +1169,19 @@ export function initializeArrayStream(underlyingSource, highWaterMark) { return closingPromise; } -export function initializeArrayBufferStream(underlyingSource, highWaterMark) { +export function initializeArrayBufferStream( + this: ReadableStream, + underlyingSource: UnderlyingSource, + highWaterMark: number, +) { // This is the fallback implementation for direct streams // When we don't know what the destination type is // We assume it is a Uint8Array. - var opts = highWaterMark && typeof highWaterMark === "number" ? { highWaterMark, stream: true, asUint8Array: true } : { stream: true, asUint8Array: true }; - var sink = new $Bun.ArrayBufferSink(); + var sink = new Bun.ArrayBufferSink(); sink.start(opts); var controller = { @@ -1323,7 +1326,7 @@ export function readableStreamCancel(stream, reason) { return Promise.$resolve(controller.close(reason)); } - $throwTypeError("ReadableStreamController has no cancel or close method"); + return Promise.$reject(new TypeError("ReadableStreamController has no cancel or close method")); } export function readableStreamDefaultControllerCancel(controller, reason) { @@ -1440,11 +1443,11 @@ export function readableStreamReaderGenericRelease(reader) { if ($getByIdDirectPrivate($getByIdDirectPrivate(reader, "ownerReadableStream"), "state") === $streamReadable) $getByIdDirectPrivate(reader, "closedPromiseCapability").$reject.$call( undefined, - $makeTypeError("releasing lock of reader whose stream is still in readable state"), + new TypeError("releasing lock of reader whose stream is still in readable state"), ); else $putByIdDirectPrivate(reader, "closedPromiseCapability", { - $promise: $newHandledRejectedPromise($makeTypeError("reader released lock")), + $promise: $newHandledRejectedPromise(new TypeError("reader released lock")), }); const promise = $getByIdDirectPrivate(reader, "closedPromiseCapability").$promise; diff --git a/src/js/builtins/TransformStreamInternals.ts b/src/js/builtins/TransformStreamInternals.ts index 9994d1282..a1228e87e 100644 --- a/src/js/builtins/TransformStreamInternals.ts +++ b/src/js/builtins/TransformStreamInternals.ts @@ -258,7 +258,7 @@ export function transformStreamDefaultControllerTerminate(controller) { // FIXME: Update readableStreamDefaultControllerClose to make this check. if ($readableStreamDefaultControllerCanCloseOrEnqueue(readableController)) $readableStreamDefaultControllerClose(readableController); - const error = $makeTypeError("the stream has been terminated"); + const error = new TypeError("the stream has been terminated"); $transformStreamErrorWritableAndUnblockWrite(stream, error); } diff --git a/src/js/builtins/WritableStreamDefaultWriter.ts b/src/js/builtins/WritableStreamDefaultWriter.ts index 795b43892..16f0293e6 100644 --- a/src/js/builtins/WritableStreamDefaultWriter.ts +++ b/src/js/builtins/WritableStreamDefaultWriter.ts @@ -65,7 +65,7 @@ export function abort(reason) { return Promise.$reject($makeThisTypeError("WritableStreamDefaultWriter", "abort")); if ($getByIdDirectPrivate(this, "stream") === undefined) - return Promise.$reject($makeTypeError("WritableStreamDefaultWriter has no stream")); + return Promise.$reject(new TypeError("WritableStreamDefaultWriter has no stream")); return $writableStreamDefaultWriterAbort(this, reason); } @@ -75,10 +75,10 @@ export function close() { return Promise.$reject($makeThisTypeError("WritableStreamDefaultWriter", "close")); const stream = $getByIdDirectPrivate(this, "stream"); - if (stream === undefined) return Promise.$reject($makeTypeError("WritableStreamDefaultWriter has no stream")); + if (stream === undefined) return Promise.$reject(new TypeError("WritableStreamDefaultWriter has no stream")); if ($writableStreamCloseQueuedOrInFlight(stream)) - return Promise.$reject($makeTypeError("WritableStreamDefaultWriter is being closed")); + return Promise.$reject(new TypeError("WritableStreamDefaultWriter is being closed")); return $writableStreamDefaultWriterClose(this); } @@ -98,7 +98,7 @@ export function write(chunk) { return Promise.$reject($makeThisTypeError("WritableStreamDefaultWriter", "write")); if ($getByIdDirectPrivate(this, "stream") === undefined) - return Promise.$reject($makeTypeError("WritableStreamDefaultWriter has no stream")); + return Promise.$reject(new TypeError("WritableStreamDefaultWriter has no stream")); return $writableStreamDefaultWriterWrite(this, chunk); } diff --git a/src/js/builtins/WritableStreamInternals.ts b/src/js/builtins/WritableStreamInternals.ts index f436a285e..27d60e7f4 100644 --- a/src/js/builtins/WritableStreamInternals.ts +++ b/src/js/builtins/WritableStreamInternals.ts @@ -127,11 +127,11 @@ export function initializeWritableStreamSlots(stream, underlyingSink) { export function writableStreamCloseForBindings(stream) { if ($isWritableStreamLocked(stream)) - return Promise.$reject($makeTypeError("WritableStream.close method can only be used on non locked WritableStream")); + return Promise.$reject(new TypeError("WritableStream.close method can only be used on non locked WritableStream")); if ($writableStreamCloseQueuedOrInFlight(stream)) return Promise.$reject( - $makeTypeError("WritableStream.close method can only be used on a being close WritableStream"), + new TypeError("WritableStream.close method can only be used on a being close WritableStream"), ); return $writableStreamClose(stream); @@ -139,7 +139,7 @@ export function writableStreamCloseForBindings(stream) { export function writableStreamAbortForBindings(stream, reason) { if ($isWritableStreamLocked(stream)) - return Promise.$reject($makeTypeError("WritableStream.abort method can only be used on non locked WritableStream")); + return Promise.$reject(new TypeError("WritableStream.abort method can only be used on non locked WritableStream")); return $writableStreamAbort(stream, reason); } @@ -207,7 +207,7 @@ export function writableStreamAbort(stream, reason) { export function writableStreamClose(stream) { const state = $getByIdDirectPrivate(stream, "state"); if (state === "closed" || state === "errored") - return Promise.$reject($makeTypeError("Cannot close a writable stream that is closed or errored")); + return Promise.$reject(new TypeError("Cannot close a writable stream that is closed or errored")); $assert(state === "writable" || state === "erroring"); $assert(!$writableStreamCloseQueuedOrInFlight(stream)); @@ -509,7 +509,7 @@ export function writableStreamDefaultWriterRelease(writer) { $assert(stream !== undefined); $assert($getByIdDirectPrivate(stream, "writer") === writer); - const releasedError = $makeTypeError("writableStreamDefaultWriterRelease"); + const releasedError = new TypeError("writableStreamDefaultWriterRelease"); $writableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); $writableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); @@ -527,16 +527,16 @@ export function writableStreamDefaultWriterWrite(writer, chunk) { const chunkSize = $writableStreamDefaultControllerGetChunkSize(controller, chunk); if (stream !== $getByIdDirectPrivate(writer, "stream")) - return Promise.$reject($makeTypeError("writer is not stream's writer")); + return Promise.$reject(new TypeError("writer is not stream's writer")); const state = $getByIdDirectPrivate(stream, "state"); if (state === "errored") return Promise.$reject($getByIdDirectPrivate(stream, "storedError")); if ($writableStreamCloseQueuedOrInFlight(stream) || state === "closed") - return Promise.$reject($makeTypeError("stream is closing or closed")); + return Promise.$reject(new TypeError("stream is closing or closed")); if ($writableStreamCloseQueuedOrInFlight(stream) || state === "closed") - return Promise.$reject($makeTypeError("stream is closing or closed")); + return Promise.$reject(new TypeError("stream is closing or closed")); if (state === "erroring") return Promise.$reject($getByIdDirectPrivate(stream, "storedError")); diff --git a/src/js/builtins/builtins.d.ts b/src/js/builtins/builtins.d.ts index 2de8d8206..0ef033e7d 100644 --- a/src/js/builtins/builtins.d.ts +++ b/src/js/builtins/builtins.d.ts @@ -357,7 +357,15 @@ declare function $size(): TODO; declare function $start(): TODO; declare function $startAlgorithm(): TODO; declare function $startConsumingStream(): TODO; -declare function $startDirectStream(): TODO; +/** C++ functionStartDirectStream + * @param this - the sink + */ +declare function $startDirectStream( + this: any, + stream: ReadableStream, + pull: DirectUnderlyingSource["pull"] | undefined, + close: ((stream: ReadableStream, reason: any) => void) | undefined, +): TODO; declare function $started(): TODO; declare function $startedPromise(): TODO; declare function $state(): TODO; @@ -401,6 +409,7 @@ declare function $writeRequests(): TODO; declare function $writer(): TODO; declare function $writing(): TODO; declare function $written(): TODO; +declare function $rejectPromise(promise: Promise, error: any): void; declare function $createCommonJSModule(id: string, exports: any, hasEvaluated: boolean): NodeModule; |