| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 |
- var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_params, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_logger, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage;
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "../internal/tslib.mjs";
- import { isAbortError } from "../internal/errors.mjs";
- import { AnthropicError, APIUserAbortError } from "../error.mjs";
- import { Stream } from "../streaming.mjs";
- import { partialParse } from "../_vendor/partial-json-parser/parser.mjs";
- import { maybeParseMessage } from "./parser.mjs";
- const JSON_BUF_PROPERTY = '__json_buf';
- function tracksToolInput(content) {
- return content.type === 'tool_use' || content.type === 'server_tool_use';
- }
- export class MessageStream {
- constructor(params, opts) {
- _MessageStream_instances.add(this);
- this.messages = [];
- this.receivedMessages = [];
- _MessageStream_currentMessageSnapshot.set(this, void 0);
- _MessageStream_params.set(this, null);
- this.controller = new AbortController();
- _MessageStream_connectedPromise.set(this, void 0);
- _MessageStream_resolveConnectedPromise.set(this, () => { });
- _MessageStream_rejectConnectedPromise.set(this, () => { });
- _MessageStream_endPromise.set(this, void 0);
- _MessageStream_resolveEndPromise.set(this, () => { });
- _MessageStream_rejectEndPromise.set(this, () => { });
- _MessageStream_listeners.set(this, {});
- _MessageStream_ended.set(this, false);
- _MessageStream_errored.set(this, false);
- _MessageStream_aborted.set(this, false);
- _MessageStream_catchingPromiseCreated.set(this, false);
- _MessageStream_response.set(this, void 0);
- _MessageStream_request_id.set(this, void 0);
- _MessageStream_logger.set(this, void 0);
- _MessageStream_handleError.set(this, (error) => {
- __classPrivateFieldSet(this, _MessageStream_errored, true, "f");
- if (isAbortError(error)) {
- error = new APIUserAbortError();
- }
- if (error instanceof APIUserAbortError) {
- __classPrivateFieldSet(this, _MessageStream_aborted, true, "f");
- return this._emit('abort', error);
- }
- if (error instanceof AnthropicError) {
- return this._emit('error', error);
- }
- if (error instanceof Error) {
- const anthropicError = new AnthropicError(error.message);
- // @ts-ignore
- anthropicError.cause = error;
- return this._emit('error', anthropicError);
- }
- return this._emit('error', new AnthropicError(String(error)));
- });
- __classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => {
- __classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, "f");
- __classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, "f");
- }), "f");
- __classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => {
- __classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, "f");
- __classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, "f");
- }), "f");
- // Don't let these promises cause unhandled rejection errors.
- // we will manually cause an unhandled rejection error later
- // if the user hasn't registered any error listener or called
- // any promise-returning method.
- __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { });
- __classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { });
- __classPrivateFieldSet(this, _MessageStream_params, params, "f");
- __classPrivateFieldSet(this, _MessageStream_logger, opts?.logger ?? console, "f");
- }
- get response() {
- return __classPrivateFieldGet(this, _MessageStream_response, "f");
- }
- get request_id() {
- return __classPrivateFieldGet(this, _MessageStream_request_id, "f");
- }
- /**
- * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
- * returned vie the `request-id` header which is useful for debugging requests and resporting
- * issues to Anthropic.
- *
- * This is the same as the `APIPromise.withResponse()` method.
- *
- * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
- * as no `Response` is available.
- */
- async withResponse() {
- __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
- const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f");
- if (!response) {
- throw new Error('Could not resolve a `Response` object');
- }
- return {
- data: this,
- response,
- request_id: response.headers.get('request-id'),
- };
- }
- /**
- * Intended for use on the frontend, consuming a stream produced with
- * `.toReadableStream()` on the backend.
- *
- * Note that messages sent to the model do not appear in `.on('message')`
- * in this context.
- */
- static fromReadableStream(stream) {
- const runner = new MessageStream(null);
- runner._run(() => runner._fromReadableStream(stream));
- return runner;
- }
- static createMessage(messages, params, options, { logger } = {}) {
- const runner = new MessageStream(params, { logger });
- for (const message of params.messages) {
- runner._addMessageParam(message);
- }
- __classPrivateFieldSet(runner, _MessageStream_params, { ...params, stream: true }, "f");
- runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));
- return runner;
- }
- _run(executor) {
- executor().then(() => {
- this._emitFinal();
- this._emit('end');
- }, __classPrivateFieldGet(this, _MessageStream_handleError, "f"));
- }
- _addMessageParam(message) {
- this.messages.push(message);
- }
- _addMessage(message, emit = true) {
- this.receivedMessages.push(message);
- if (emit) {
- this._emit('message', message);
- }
- }
- async _createMessage(messages, params, options) {
- const signal = options?.signal;
- let abortHandler;
- if (signal) {
- if (signal.aborted)
- this.controller.abort();
- abortHandler = this.controller.abort.bind(this.controller);
- signal.addEventListener('abort', abortHandler);
- }
- try {
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
- const { response, data: stream } = await messages
- .create({ ...params, stream: true }, { ...options, signal: this.controller.signal })
- .withResponse();
- this._connected(response);
- for await (const event of stream) {
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
- }
- if (stream.controller.signal?.aborted) {
- throw new APIUserAbortError();
- }
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
- }
- finally {
- if (signal && abortHandler) {
- signal.removeEventListener('abort', abortHandler);
- }
- }
- }
- _connected(response) {
- if (this.ended)
- return;
- __classPrivateFieldSet(this, _MessageStream_response, response, "f");
- __classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get('request-id'), "f");
- __classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response);
- this._emit('connect');
- }
- get ended() {
- return __classPrivateFieldGet(this, _MessageStream_ended, "f");
- }
- get errored() {
- return __classPrivateFieldGet(this, _MessageStream_errored, "f");
- }
- get aborted() {
- return __classPrivateFieldGet(this, _MessageStream_aborted, "f");
- }
- abort() {
- this.controller.abort();
- }
- /**
- * Adds the listener function to the end of the listeners array for the event.
- * No checks are made to see if the listener has already been added. Multiple calls passing
- * the same combination of event and listener will result in the listener being added, and
- * called, multiple times.
- * @returns this MessageStream, so that calls can be chained
- */
- on(event, listener) {
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
- listeners.push({ listener });
- return this;
- }
- /**
- * Removes the specified listener from the listener array for the event.
- * off() will remove, at most, one instance of a listener from the listener array. If any single
- * listener has been added multiple times to the listener array for the specified event, then
- * off() must be called multiple times to remove each instance.
- * @returns this MessageStream, so that calls can be chained
- */
- off(event, listener) {
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
- if (!listeners)
- return this;
- const index = listeners.findIndex((l) => l.listener === listener);
- if (index >= 0)
- listeners.splice(index, 1);
- return this;
- }
- /**
- * Adds a one-time listener function for the event. The next time the event is triggered,
- * this listener is removed and then invoked.
- * @returns this MessageStream, so that calls can be chained
- */
- once(event, listener) {
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
- listeners.push({ listener, once: true });
- return this;
- }
- /**
- * This is similar to `.once()`, but returns a Promise that resolves the next time
- * the event is triggered, instead of calling a listener callback.
- * @returns a Promise that resolves the next time given event is triggered,
- * or rejects if an error is emitted. (If you request the 'error' event,
- * returns a promise that resolves with the error).
- *
- * Example:
- *
- * const message = await stream.emitted('message') // rejects if the stream errors
- */
- emitted(event) {
- return new Promise((resolve, reject) => {
- __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
- if (event !== 'error')
- this.once('error', reject);
- this.once(event, resolve);
- });
- }
- async done() {
- __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
- await __classPrivateFieldGet(this, _MessageStream_endPromise, "f");
- }
- get currentMessage() {
- return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
- }
- /**
- * @returns a promise that resolves with the the final assistant Message response,
- * or rejects if an error occurred or the stream ended prematurely without producing a Message.
- * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field.
- */
- async finalMessage() {
- await this.done();
- return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this);
- }
- /**
- * @returns a promise that resolves with the the final assistant Message's text response, concatenated
- * together if there are more than one text blocks.
- * Rejects if an error occurred or the stream ended prematurely without producing a Message.
- */
- async finalText() {
- await this.done();
- return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this);
- }
- _emit(event, ...args) {
- // make sure we don't emit any MessageStreamEvents after end
- if (__classPrivateFieldGet(this, _MessageStream_ended, "f"))
- return;
- if (event === 'end') {
- __classPrivateFieldSet(this, _MessageStream_ended, true, "f");
- __classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this);
- }
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
- if (listeners) {
- __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
- listeners.forEach(({ listener }) => listener(...args));
- }
- if (event === 'abort') {
- const error = args[0];
- if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
- Promise.reject(error);
- }
- __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
- __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
- this._emit('end');
- return;
- }
- if (event === 'error') {
- // NOTE: _emit('error', error) should only be called from #handleError().
- const error = args[0];
- if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
- // Trigger an unhandled rejection if the user hasn't registered any error handlers.
- // If you are seeing stack traces here, make sure to handle errors via either:
- // - runner.on('error', () => ...)
- // - await runner.done()
- // - await runner.final...()
- // - etc.
- Promise.reject(error);
- }
- __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
- __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
- this._emit('end');
- }
- }
- _emitFinal() {
- const finalMessage = this.receivedMessages.at(-1);
- if (finalMessage) {
- this._emit('finalMessage', __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this));
- }
- }
- async _fromReadableStream(readableStream, options) {
- const signal = options?.signal;
- let abortHandler;
- if (signal) {
- if (signal.aborted)
- this.controller.abort();
- abortHandler = this.controller.abort.bind(this.controller);
- signal.addEventListener('abort', abortHandler);
- }
- try {
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
- this._connected(null);
- const stream = Stream.fromReadableStream(readableStream, this.controller);
- for await (const event of stream) {
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
- }
- if (stream.controller.signal?.aborted) {
- throw new APIUserAbortError();
- }
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
- }
- finally {
- if (signal && abortHandler) {
- signal.removeEventListener('abort', abortHandler);
- }
- }
- }
- [(_MessageStream_currentMessageSnapshot = new WeakMap(), _MessageStream_params = new WeakMap(), _MessageStream_connectedPromise = new WeakMap(), _MessageStream_resolveConnectedPromise = new WeakMap(), _MessageStream_rejectConnectedPromise = new WeakMap(), _MessageStream_endPromise = new WeakMap(), _MessageStream_resolveEndPromise = new WeakMap(), _MessageStream_rejectEndPromise = new WeakMap(), _MessageStream_listeners = new WeakMap(), _MessageStream_ended = new WeakMap(), _MessageStream_errored = new WeakMap(), _MessageStream_aborted = new WeakMap(), _MessageStream_catchingPromiseCreated = new WeakMap(), _MessageStream_response = new WeakMap(), _MessageStream_request_id = new WeakMap(), _MessageStream_logger = new WeakMap(), _MessageStream_handleError = new WeakMap(), _MessageStream_instances = new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage() {
- if (this.receivedMessages.length === 0) {
- throw new AnthropicError('stream ended without producing a Message with role=assistant');
- }
- return this.receivedMessages.at(-1);
- }, _MessageStream_getFinalText = function _MessageStream_getFinalText() {
- if (this.receivedMessages.length === 0) {
- throw new AnthropicError('stream ended without producing a Message with role=assistant');
- }
- const textBlocks = this.receivedMessages
- .at(-1)
- .content.filter((block) => block.type === 'text')
- .map((block) => block.text);
- if (textBlocks.length === 0) {
- throw new AnthropicError('stream ended without producing a content block with type=text');
- }
- return textBlocks.join(' ');
- }, _MessageStream_beginRequest = function _MessageStream_beginRequest() {
- if (this.ended)
- return;
- __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
- }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent(event) {
- if (this.ended)
- return;
- const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event);
- this._emit('streamEvent', event, messageSnapshot);
- switch (event.type) {
- case 'content_block_delta': {
- const content = messageSnapshot.content.at(-1);
- switch (event.delta.type) {
- case 'text_delta': {
- if (content.type === 'text') {
- this._emit('text', event.delta.text, content.text || '');
- }
- break;
- }
- case 'citations_delta': {
- if (content.type === 'text') {
- this._emit('citation', event.delta.citation, content.citations ?? []);
- }
- break;
- }
- case 'input_json_delta': {
- if (tracksToolInput(content) && content.input) {
- this._emit('inputJson', event.delta.partial_json, content.input);
- }
- break;
- }
- case 'thinking_delta': {
- if (content.type === 'thinking') {
- this._emit('thinking', event.delta.thinking, content.thinking);
- }
- break;
- }
- case 'signature_delta': {
- if (content.type === 'thinking') {
- this._emit('signature', content.signature);
- }
- break;
- }
- default:
- checkNever(event.delta);
- }
- break;
- }
- case 'message_stop': {
- this._addMessageParam(messageSnapshot);
- this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }), true);
- break;
- }
- case 'content_block_stop': {
- this._emit('contentBlock', messageSnapshot.content.at(-1));
- break;
- }
- case 'message_start': {
- __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f");
- break;
- }
- case 'content_block_start':
- case 'message_delta':
- break;
- }
- }, _MessageStream_endRequest = function _MessageStream_endRequest() {
- if (this.ended) {
- throw new AnthropicError(`stream has ended, this shouldn't happen`);
- }
- const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
- if (!snapshot) {
- throw new AnthropicError(`request ended without sending any chunks`);
- }
- __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, undefined, "f");
- return maybeParseMessage(snapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") });
- }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage(event) {
- let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
- if (event.type === 'message_start') {
- if (snapshot) {
- throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
- }
- return event.message;
- }
- if (!snapshot) {
- throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`);
- }
- switch (event.type) {
- case 'message_stop':
- return snapshot;
- case 'message_delta':
- snapshot.stop_reason = event.delta.stop_reason;
- snapshot.stop_sequence = event.delta.stop_sequence;
- snapshot.usage.output_tokens = event.usage.output_tokens;
- // Update other usage fields if they exist in the event
- if (event.usage.input_tokens != null) {
- snapshot.usage.input_tokens = event.usage.input_tokens;
- }
- if (event.usage.cache_creation_input_tokens != null) {
- snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;
- }
- if (event.usage.cache_read_input_tokens != null) {
- snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;
- }
- if (event.usage.server_tool_use != null) {
- snapshot.usage.server_tool_use = event.usage.server_tool_use;
- }
- return snapshot;
- case 'content_block_start':
- snapshot.content.push({ ...event.content_block });
- return snapshot;
- case 'content_block_delta': {
- const snapshotContent = snapshot.content.at(event.index);
- switch (event.delta.type) {
- case 'text_delta': {
- if (snapshotContent?.type === 'text') {
- snapshot.content[event.index] = {
- ...snapshotContent,
- text: (snapshotContent.text || '') + event.delta.text,
- };
- }
- break;
- }
- case 'citations_delta': {
- if (snapshotContent?.type === 'text') {
- snapshot.content[event.index] = {
- ...snapshotContent,
- citations: [...(snapshotContent.citations ?? []), event.delta.citation],
- };
- }
- break;
- }
- case 'input_json_delta': {
- if (snapshotContent && tracksToolInput(snapshotContent)) {
- // we need to keep track of the raw JSON string as well so that we can
- // re-parse it for each delta, for now we just store it as an untyped
- // non-enumerable property on the snapshot
- let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || '';
- jsonBuf += event.delta.partial_json;
- const newContent = { ...snapshotContent };
- Object.defineProperty(newContent, JSON_BUF_PROPERTY, {
- value: jsonBuf,
- enumerable: false,
- writable: true,
- });
- if (jsonBuf) {
- newContent.input = partialParse(jsonBuf);
- }
- snapshot.content[event.index] = newContent;
- }
- break;
- }
- case 'thinking_delta': {
- if (snapshotContent?.type === 'thinking') {
- snapshot.content[event.index] = {
- ...snapshotContent,
- thinking: snapshotContent.thinking + event.delta.thinking,
- };
- }
- break;
- }
- case 'signature_delta': {
- if (snapshotContent?.type === 'thinking') {
- snapshot.content[event.index] = {
- ...snapshotContent,
- signature: event.delta.signature,
- };
- }
- break;
- }
- default:
- checkNever(event.delta);
- }
- return snapshot;
- }
- case 'content_block_stop':
- return snapshot;
- }
- }, Symbol.asyncIterator)]() {
- const pushQueue = [];
- const readQueue = [];
- let done = false;
- this.on('streamEvent', (event) => {
- const reader = readQueue.shift();
- if (reader) {
- reader.resolve(event);
- }
- else {
- pushQueue.push(event);
- }
- });
- this.on('end', () => {
- done = true;
- for (const reader of readQueue) {
- reader.resolve(undefined);
- }
- readQueue.length = 0;
- });
- this.on('abort', (err) => {
- done = true;
- for (const reader of readQueue) {
- reader.reject(err);
- }
- readQueue.length = 0;
- });
- this.on('error', (err) => {
- done = true;
- for (const reader of readQueue) {
- reader.reject(err);
- }
- readQueue.length = 0;
- });
- return {
- next: async () => {
- if (!pushQueue.length) {
- if (done) {
- return { value: undefined, done: true };
- }
- return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));
- }
- const chunk = pushQueue.shift();
- return { value: chunk, done: false };
- },
- return: async () => {
- this.abort();
- return { value: undefined, done: true };
- },
- };
- }
- toReadableStream() {
- const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);
- return stream.toReadableStream();
- }
- }
- // used to ensure exhaustive case matching without throwing a runtime error
- function checkNever(x) { }
- //# sourceMappingURL=MessageStream.mjs.map
|