@orpc/shared 2.0.0-beta.1 → 2.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -287,7 +287,9 @@ declare function traceReadableStream<T>(options: StartSpanOptions | string, stre
287
287
  /**
288
288
  * Converts a `ReadableStream` into an `AsyncIteratorClass`.
289
289
  */
290
- declare function streamToAsyncIteratorClass<T>(stream: ReadableStream<T>): AsyncIteratorClass<T>;
290
+ declare function streamToAsyncIteratorClass<T>(stream: ReadableStream<T>, { signal }?: {
291
+ signal?: undefined | AbortSignal;
292
+ }): AsyncIteratorClass<T>;
291
293
  /**
292
294
  * Converts an `AsyncIterator` into a `ReadableStream`.
293
295
  */
package/dist/index.d.ts CHANGED
@@ -287,7 +287,9 @@ declare function traceReadableStream<T>(options: StartSpanOptions | string, stre
287
287
  /**
288
288
  * Converts a `ReadableStream` into an `AsyncIteratorClass`.
289
289
  */
290
- declare function streamToAsyncIteratorClass<T>(stream: ReadableStream<T>): AsyncIteratorClass<T>;
290
+ declare function streamToAsyncIteratorClass<T>(stream: ReadableStream<T>, { signal }?: {
291
+ signal?: undefined | AbortSignal;
292
+ }): AsyncIteratorClass<T>;
291
293
  /**
292
294
  * Converts an `AsyncIterator` into a `ReadableStream`.
293
295
  */
package/dist/index.mjs CHANGED
@@ -823,14 +823,35 @@ function traceReadableStream(options, stream) {
823
823
  }
824
824
  });
825
825
  }
826
- function streamToAsyncIteratorClass(stream) {
826
+ function streamToAsyncIteratorClass(stream, { signal } = {}) {
827
827
  const reader = stream.getReader();
828
+ let cancelledBySignal = false;
828
829
  return new AsyncIteratorClass(
829
830
  async () => {
830
- return reader.read();
831
+ if (signal?.aborted) {
832
+ cancelledBySignal = true;
833
+ throw signal.reason;
834
+ }
835
+ if (!signal) {
836
+ return reader.read();
837
+ }
838
+ const { promise, reject } = promiseWithResolvers();
839
+ const onAbort = () => reject(signal.reason);
840
+ signal.addEventListener("abort", onAbort, { once: true });
841
+ try {
842
+ return await Promise.race([
843
+ reader.read(),
844
+ promise.catch(async (reason) => {
845
+ cancelledBySignal = true;
846
+ throw reason;
847
+ })
848
+ ]);
849
+ } finally {
850
+ signal.removeEventListener("abort", onAbort);
851
+ }
831
852
  },
832
853
  async ({ kind, error }) => {
833
- if (kind === "cancelled") {
854
+ if (kind === "cancelled" || kind === "error" && cancelledBySignal) {
834
855
  await reader.cancel(error);
835
856
  }
836
857
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/shared",
3
3
  "type": "module",
4
- "version": "2.0.0-beta.1",
4
+ "version": "2.0.0-beta.3",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.dev",
7
7
  "repository": {
@@ -33,7 +33,7 @@
33
33
  }
34
34
  },
35
35
  "dependencies": {
36
- "@standardserver/shared": "^0.0.24",
36
+ "@standardserver/shared": "^0.0.25",
37
37
  "radash": "^12.1.1",
38
38
  "type-fest": "^5.3.1"
39
39
  },