@yume-chan/stream-extra 0.0.22 → 0.0.24

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.
Files changed (69) hide show
  1. package/CHANGELOG.json +36 -0
  2. package/CHANGELOG.md +19 -1
  3. package/LICENSE +1 -1
  4. package/esm/concat.d.ts +4 -3
  5. package/esm/concat.d.ts.map +1 -1
  6. package/esm/concat.js +6 -4
  7. package/esm/concat.js.map +1 -1
  8. package/esm/consumable.d.ts +31 -43
  9. package/esm/consumable.d.ts.map +1 -1
  10. package/esm/consumable.js +96 -144
  11. package/esm/consumable.js.map +1 -1
  12. package/esm/distribution.d.ts +3 -2
  13. package/esm/distribution.d.ts.map +1 -1
  14. package/esm/distribution.js +22 -18
  15. package/esm/distribution.js.map +1 -1
  16. package/esm/encoding.d.ts +21 -0
  17. package/esm/encoding.d.ts.map +1 -0
  18. package/esm/encoding.js +4 -0
  19. package/esm/encoding.js.map +1 -0
  20. package/esm/index.d.ts +3 -1
  21. package/esm/index.d.ts.map +1 -1
  22. package/esm/index.js +3 -1
  23. package/esm/index.js.map +1 -1
  24. package/esm/maybe-consumable.d.ts +21 -0
  25. package/esm/maybe-consumable.d.ts.map +1 -0
  26. package/esm/maybe-consumable.js +62 -0
  27. package/esm/maybe-consumable.js.map +1 -0
  28. package/esm/pipe-from.d.ts +1 -1
  29. package/esm/pipe-from.d.ts.map +1 -1
  30. package/esm/stream.d.ts +9 -10
  31. package/esm/stream.d.ts.map +1 -1
  32. package/esm/stream.js +6 -12
  33. package/esm/stream.js.map +1 -1
  34. package/esm/struct-deserialize.d.ts +1 -1
  35. package/esm/struct-deserialize.d.ts.map +1 -1
  36. package/esm/struct-deserialize.js.map +1 -1
  37. package/esm/struct-serialize.d.ts +1 -1
  38. package/esm/struct-serialize.d.ts.map +1 -1
  39. package/esm/task.d.ts +5 -0
  40. package/esm/task.d.ts.map +1 -0
  41. package/esm/task.js +9 -0
  42. package/esm/task.js.map +1 -0
  43. package/esm/types.d.ts +778 -0
  44. package/esm/types.d.ts.map +1 -0
  45. package/esm/types.js +3 -0
  46. package/esm/types.js.map +1 -0
  47. package/esm/wrap-writable.d.ts +1 -1
  48. package/esm/wrap-writable.d.ts.map +1 -1
  49. package/esm/wrap-writable.js +12 -12
  50. package/esm/wrap-writable.js.map +1 -1
  51. package/package.json +9 -12
  52. package/src/concat.ts +6 -4
  53. package/src/consumable.ts +145 -233
  54. package/src/distribution.ts +30 -20
  55. package/src/encoding.ts +39 -0
  56. package/src/index.ts +3 -1
  57. package/src/maybe-consumable.ts +101 -0
  58. package/src/stream.ts +20 -25
  59. package/src/struct-deserialize.ts +2 -2
  60. package/src/struct-serialize.ts +1 -1
  61. package/src/task.ts +21 -0
  62. package/src/types.ts +881 -0
  63. package/src/wrap-writable.ts +12 -12
  64. package/tsconfig.build.tsbuildinfo +1 -1
  65. package/esm/decode-utf8.d.ts +0 -5
  66. package/esm/decode-utf8.d.ts.map +0 -1
  67. package/esm/decode-utf8.js +0 -12
  68. package/esm/decode-utf8.js.map +0 -1
  69. package/src/decode-utf8.ts +0 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/esm/types.js ADDED
@@ -0,0 +1,3 @@
1
+ /// <reference lib="es2018.asynciterable" />
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAg3B5C,OAAO,EAAE,CAAC"}
@@ -9,7 +9,7 @@ export interface WritableStreamWrapper<T> {
9
9
  export declare class WrapWritableStream<T> extends WritableStream<T> {
10
10
  #private;
11
11
  writable: WritableStream<T>;
12
- constructor(wrapper: WritableStream<T> | WrapWritableStreamStart<T> | WritableStreamWrapper<T>);
12
+ constructor(start: WritableStream<T> | WrapWritableStreamStart<T> | WritableStreamWrapper<T>);
13
13
  bePipedThroughFrom<U>(transformer: TransformStream<U, T>): WrapWritableStream<U>;
14
14
  }
15
15
  //# sourceMappingURL=wrap-writable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-writable.d.ts","sourceRoot":"","sources":["../src/wrap-writable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAA+B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,MAAM,cAAc,CACzD,cAAc,CAAC,CAAC,CAAC,CACpB,CAAC;AAEF,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAmBD,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;;IACxD,QAAQ,EAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAKzB,OAAO,EACD,cAAc,CAAC,CAAC,CAAC,GACjB,uBAAuB,CAAC,CAAC,CAAC,GAC1B,qBAAqB,CAAC,CAAC,CAAC;IAmClC,kBAAkB,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;CAY3D"}
1
+ {"version":3,"file":"wrap-writable.d.ts","sourceRoot":"","sources":["../src/wrap-writable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAA+B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,MAAM,cAAc,CACzD,cAAc,CAAC,CAAC,CAAC,CACpB,CAAC;AAEF,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAmBD,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;;IACxD,QAAQ,EAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAKzB,KAAK,EACC,cAAc,CAAC,CAAC,CAAC,GACjB,uBAAuB,CAAC,CAAC,CAAC,GAC1B,qBAAqB,CAAC,CAAC,CAAC;IAmClC,kBAAkB,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;CAY3D"}
@@ -1,21 +1,21 @@
1
1
  import { WritableStream } from "./stream.js";
2
- async function getWrappedWritableStream(wrapper) {
3
- if ("start" in wrapper) {
4
- return await wrapper.start();
2
+ async function getWrappedWritableStream(start) {
3
+ if ("start" in start) {
4
+ return await start.start();
5
5
  }
6
- else if (typeof wrapper === "function") {
7
- return await wrapper();
6
+ else if (typeof start === "function") {
7
+ return await start();
8
8
  }
9
9
  else {
10
10
  // Can't use `wrapper instanceof WritableStream`
11
11
  // Because we want to be compatible with any WritableStream-like objects
12
- return wrapper;
12
+ return start;
13
13
  }
14
14
  }
15
15
  export class WrapWritableStream extends WritableStream {
16
16
  writable;
17
17
  #writer;
18
- constructor(wrapper) {
18
+ constructor(start) {
19
19
  super({
20
20
  start: async () => {
21
21
  // `start` is invoked before `ReadableStream`'s constructor finish,
@@ -23,7 +23,7 @@ export class WrapWritableStream extends WritableStream {
23
23
  // "Must call super constructor in derived class before accessing 'this' or returning from derived constructor".
24
24
  // Queue a microtask to avoid this.
25
25
  await Promise.resolve();
26
- this.writable = await getWrappedWritableStream(wrapper);
26
+ this.writable = await getWrappedWritableStream(start);
27
27
  this.#writer = this.writable.getWriter();
28
28
  },
29
29
  write: async (chunk) => {
@@ -31,8 +31,8 @@ export class WrapWritableStream extends WritableStream {
31
31
  },
32
32
  abort: async (reason) => {
33
33
  await this.#writer.abort(reason);
34
- if ("close" in wrapper) {
35
- await wrapper.close?.();
34
+ if (start !== this.writable && "close" in start) {
35
+ await start.close?.();
36
36
  }
37
37
  },
38
38
  close: async () => {
@@ -41,8 +41,8 @@ export class WrapWritableStream extends WritableStream {
41
41
  // closing the outer stream first will make the inner stream incapable of
42
42
  // sending data in its `close` handler.
43
43
  await this.#writer.close();
44
- if ("close" in wrapper) {
45
- await wrapper.close?.();
44
+ if (start !== this.writable && "close" in start) {
45
+ await start.close?.();
46
46
  }
47
47
  },
48
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-writable.js","sourceRoot":"","sources":["../src/wrap-writable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW7C,KAAK,UAAU,wBAAwB,CACnC,OAG8B;IAE9B,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,MAAM,OAAO,EAAE,CAAC;IAC3B,CAAC;SAAM,CAAC;QACJ,gDAAgD;QAChD,wEAAwE;QACxE,OAAO,OAAO,CAAC;IACnB,CAAC;AACL,CAAC;AAED,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACxD,QAAQ,CAAqB;IAE7B,OAAO,CAAkC;IAEzC,YACI,OAG8B;QAE9B,KAAK,CAAC;YACF,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,mEAAmE;gBACnE,uCAAuC;gBACvC,gHAAgH;gBAChH,mCAAmC;gBACnC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBAExB,IAAI,CAAC,QAAQ,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC7C,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACpB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;oBACrB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC5B,CAAC;YACL,CAAC;YACD,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,gCAAgC;gBAChC,0EAA0E;gBAC1E,yEAAyE;gBACzE,uCAAuC;gBACvC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;oBACrB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC5B,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,kBAAkB,CAAI,WAAkC;QACpD,IAAI,OAAsB,CAAC;QAC3B,OAAO,IAAI,kBAAkB,CAAI;YAC7B,KAAK,EAAE,GAAG,EAAE;gBACR,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC;YAChC,CAAC;YACD,KAAK,CAAC,KAAK;gBACP,MAAM,OAAO,CAAC;YAClB,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
1
+ {"version":3,"file":"wrap-writable.js","sourceRoot":"","sources":["../src/wrap-writable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW7C,KAAK,UAAU,wBAAwB,CACnC,KAG8B;IAE9B,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACnB,OAAO,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACrC,OAAO,MAAM,KAAK,EAAE,CAAC;IACzB,CAAC;SAAM,CAAC;QACJ,gDAAgD;QAChD,wEAAwE;QACxE,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACxD,QAAQ,CAAqB;IAE7B,OAAO,CAAkC;IAEzC,YACI,KAG8B;QAE9B,KAAK,CAAC;YACF,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,mEAAmE;gBACnE,uCAAuC;gBACvC,gHAAgH;gBAChH,mCAAmC;gBACnC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBAExB,IAAI,CAAC,QAAQ,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC7C,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACpB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;oBAC9C,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC;YACD,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,gCAAgC;gBAChC,0EAA0E;gBAC1E,yEAAyE;gBACzE,uCAAuC;gBACvC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;oBAC9C,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,kBAAkB,CAAI,WAAkC;QACpD,IAAI,OAAsB,CAAC;QAC3B,OAAO,IAAI,kBAAkB,CAAI;YAC7B,KAAK,EAAE,GAAG,EAAE;gBACR,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC;YAChC,CAAC;YACD,KAAK,CAAC,KAAK;gBACP,MAAM,OAAO,CAAC;YAClB,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yume-chan/stream-extra",
3
- "version": "0.0.22",
3
+ "version": "0.0.24",
4
4
  "description": "Extensions to Web Streams API",
5
5
  "keywords": [
6
6
  "stream",
@@ -26,25 +26,22 @@
26
26
  "types": "esm/index.d.ts",
27
27
  "dependencies": {
28
28
  "@yume-chan/async": "^2.2.0",
29
- "@yume-chan/struct": "^0.0.22",
30
- "tslib": "^2.6.2",
31
- "web-streams-polyfill": "^4.0.0-beta.3"
29
+ "@yume-chan/struct": "^0.0.24"
32
30
  },
33
31
  "devDependencies": {
34
- "@jest/globals": "^29.7.0",
32
+ "@jest/globals": "^30.0.0-alpha.4",
35
33
  "@yume-chan/eslint-config": "^1.0.0",
36
34
  "@yume-chan/tsconfig": "^1.0.0",
37
35
  "cross-env": "^7.0.3",
38
- "eslint": "^8.55.0",
39
- "jest": "^29.7.0",
40
- "prettier": "^3.1.0",
41
- "ts-jest": "^29.1.1",
42
- "typescript": "^5.3.2"
36
+ "jest": "^30.0.0-alpha.4",
37
+ "prettier": "^3.3.2",
38
+ "ts-jest": "^29.1.4",
39
+ "typescript": "^5.4.5"
43
40
  },
44
41
  "scripts": {
45
42
  "build": "tsc -b tsconfig.build.json",
46
43
  "build:watch": "tsc -b tsconfig.build.json",
47
- "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage",
48
- "lint": "eslint src/**/*.ts --fix && prettier src/**/*.ts --write --tab-width 4"
44
+ "test": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" TS_JEST_DISABLE_VER_CHECKER=true jest --coverage",
45
+ "lint": "run-eslint && prettier src/**/*.ts --write --tab-width 4"
49
46
  }
50
47
  }
package/src/concat.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { PromiseResolver } from "@yume-chan/async";
2
+ import { EMPTY_UINT8_ARRAY } from "@yume-chan/struct";
2
3
 
3
4
  import type { ReadableStreamDefaultController } from "./stream.js";
4
5
  import { ReadableStream, WritableStream } from "./stream.js";
@@ -81,9 +82,10 @@ export interface ConcatBufferReadableStream
81
82
  * A `TransformStream` that concatenates `Uint8Array`s.
82
83
  *
83
84
  * If you want to decode the result as string,
84
- * prefer `.pipeThrough(new DecodeUtf8Stream()).pipeThrough(new ConcatStringStream())`,
85
- * than `.pipeThough(new ConcatBufferStream()).pipeThrough(new DecodeUtf8Stream())`,
86
- * because concatenating strings is faster than concatenating `Uint8Array`s.
85
+ * prefer `.pipeThrough(new TextDecoderStream()).pipeThrough(new ConcatStringStream())`,
86
+ * than `.pipeThough(new ConcatBufferStream()).pipeThrough(new TextDecoderStream())`,
87
+ * because of JavaScript engine optimizations,
88
+ * concatenating strings is faster than concatenating `Uint8Array`s.
87
89
  */
88
90
  export class ConcatBufferStream {
89
91
  #segments: Uint8Array[] = [];
@@ -99,7 +101,7 @@ export class ConcatBufferStream {
99
101
  let offset = 0;
100
102
  switch (this.#segments.length) {
101
103
  case 0:
102
- result = new Uint8Array(0);
104
+ result = EMPTY_UINT8_ARRAY;
103
105
  break;
104
106
  case 1:
105
107
  result = this.#segments[0]!;
package/src/consumable.ts CHANGED
@@ -5,30 +5,17 @@ import type {
5
5
  WritableStreamDefaultController,
6
6
  WritableStreamDefaultWriter,
7
7
  } from "./stream.js";
8
- import { ReadableStream, TransformStream, WritableStream } from "./stream.js";
9
-
10
- interface Task {
11
- run<T>(callback: () => T): T;
12
- }
13
-
14
- interface Console {
15
- createTask(name: string): Task;
16
- }
8
+ import {
9
+ ReadableStream as NativeReadableStream,
10
+ WritableStream as NativeWritableStream,
11
+ } from "./stream.js";
12
+ import type { Task } from "./task.js";
13
+ import { createTask } from "./task.js";
17
14
 
18
- interface GlobalExtension {
19
- console: Console;
15
+ function isPromiseLike(value: unknown): value is PromiseLike<unknown> {
16
+ return typeof value === "object" && value !== null && "then" in value;
20
17
  }
21
18
 
22
- // `createTask` allows browser DevTools to track the call stack across async boundaries.
23
- const { console } = globalThis as unknown as GlobalExtension;
24
- const createTask: Console["createTask"] =
25
- console.createTask?.bind(console) ??
26
- (() => ({
27
- run(callback) {
28
- return callback();
29
- },
30
- }));
31
-
32
19
  export class Consumable<T> {
33
20
  readonly #task: Task;
34
21
  readonly #resolver: PromiseResolver<void>;
@@ -47,15 +34,27 @@ export class Consumable<T> {
47
34
  this.#resolver.resolve();
48
35
  }
49
36
 
50
- error(error: any) {
37
+ error(error: unknown) {
51
38
  this.#resolver.reject(error);
52
39
  }
53
40
 
54
- async tryConsume<U>(callback: (value: T) => U) {
41
+ tryConsume<U>(callback: (value: T) => U) {
55
42
  try {
56
- // eslint-disable-next-line @typescript-eslint/await-thenable
57
- const result = await this.#task.run(() => callback(this.value));
58
- this.consume();
43
+ let result = this.#task.run(() => callback(this.value));
44
+ if (isPromiseLike(result)) {
45
+ result = result.then(
46
+ (value) => {
47
+ this.#resolver.resolve();
48
+ return value;
49
+ },
50
+ (e) => {
51
+ this.#resolver.reject(e);
52
+ throw e;
53
+ },
54
+ ) as U;
55
+ } else {
56
+ this.#resolver.resolve();
57
+ }
59
58
  return result;
60
59
  } catch (e) {
61
60
  this.#resolver.reject(e);
@@ -64,230 +63,143 @@ export class Consumable<T> {
64
63
  }
65
64
  }
66
65
 
67
- async function enqueue<T>(
68
- controller: { enqueue: (chunk: Consumable<T>) => void },
69
- chunk: T,
70
- ) {
71
- const output = new Consumable(chunk);
72
- controller.enqueue(output);
73
- await output.consumed;
74
- }
75
-
76
- export class WrapConsumableStream<T> extends TransformStream<T, Consumable<T>> {
77
- constructor() {
78
- super({
79
- async transform(chunk, controller) {
80
- await enqueue(controller, chunk);
81
- },
82
- });
66
+ export namespace Consumable {
67
+ export interface WritableStreamSink<in T> {
68
+ start?(
69
+ controller: WritableStreamDefaultController,
70
+ ): void | PromiseLike<void>;
71
+ write?(
72
+ chunk: T,
73
+ controller: WritableStreamDefaultController,
74
+ ): void | PromiseLike<void>;
75
+ abort?(reason: unknown): void | PromiseLike<void>;
76
+ close?(): void | PromiseLike<void>;
83
77
  }
84
- }
85
78
 
86
- export class UnwrapConsumableStream<T> extends TransformStream<
87
- Consumable<T>,
88
- T
89
- > {
90
- constructor() {
91
- super({
92
- transform(chunk, controller) {
93
- controller.enqueue(chunk.value);
94
- chunk.consume();
95
- },
96
- });
97
- }
98
- }
99
-
100
- export interface ConsumableReadableStreamController<T> {
101
- enqueue(chunk: T): Promise<void>;
102
- close(): void;
103
- error(reason: any): void;
104
- }
105
-
106
- export interface ConsumableReadableStreamSource<T> {
107
- start?(
108
- controller: ConsumableReadableStreamController<T>,
109
- ): void | PromiseLike<void>;
110
- pull?(
111
- controller: ConsumableReadableStreamController<T>,
112
- ): void | PromiseLike<void>;
113
- cancel?(reason: any): void | PromiseLike<void>;
114
- }
115
-
116
- export class ConsumableReadableStream<T> extends ReadableStream<Consumable<T>> {
117
- constructor(
118
- source: ConsumableReadableStreamSource<T>,
119
- strategy?: QueuingStrategy<T>,
120
- ) {
121
- let wrappedController:
122
- | ConsumableReadableStreamController<T>
123
- | undefined;
124
-
125
- let wrappedStrategy: QueuingStrategy<Consumable<T>> | undefined;
126
- if (strategy) {
127
- wrappedStrategy = {};
128
- if ("highWaterMark" in strategy) {
129
- wrappedStrategy.highWaterMark = strategy.highWaterMark;
130
- }
131
- if ("size" in strategy) {
132
- wrappedStrategy.size = (chunk) => {
133
- return strategy.size!(chunk.value);
134
- };
135
- }
79
+ export class WritableStream<in T> extends NativeWritableStream<
80
+ Consumable<T>
81
+ > {
82
+ static async write<T>(
83
+ writer: WritableStreamDefaultWriter<Consumable<T>>,
84
+ value: T,
85
+ ) {
86
+ const consumable = new Consumable(value);
87
+ await writer.write(consumable);
88
+ await consumable.consumed;
136
89
  }
137
90
 
138
- super(
139
- {
140
- async start(controller) {
141
- wrappedController = {
142
- async enqueue(chunk) {
143
- await enqueue(controller, chunk);
144
- },
145
- close() {
146
- controller.close();
147
- },
148
- error(reason) {
149
- controller.error(reason);
150
- },
91
+ constructor(
92
+ sink: WritableStreamSink<T>,
93
+ strategy?: QueuingStrategy<T>,
94
+ ) {
95
+ let wrappedStrategy: QueuingStrategy<Consumable<T>> | undefined;
96
+ if (strategy) {
97
+ wrappedStrategy = {};
98
+ if ("highWaterMark" in strategy) {
99
+ wrappedStrategy.highWaterMark = strategy.highWaterMark;
100
+ }
101
+ if ("size" in strategy) {
102
+ wrappedStrategy.size = (chunk) => {
103
+ return strategy.size!(
104
+ chunk instanceof Consumable ? chunk.value : chunk,
105
+ );
151
106
  };
107
+ }
108
+ }
152
109
 
153
- await source.start?.(wrappedController);
154
- },
155
- async pull() {
156
- await source.pull?.(wrappedController!);
157
- },
158
- async cancel(reason) {
159
- await source.cancel?.(reason);
110
+ super(
111
+ {
112
+ start(controller) {
113
+ return sink.start?.(controller);
114
+ },
115
+ async write(chunk, controller) {
116
+ await chunk.tryConsume((chunk) =>
117
+ sink.write?.(chunk, controller),
118
+ );
119
+ },
120
+ abort(reason) {
121
+ return sink.abort?.(reason);
122
+ },
123
+ close() {
124
+ return sink.close?.();
125
+ },
160
126
  },
161
- },
162
- wrappedStrategy,
163
- );
127
+ wrappedStrategy,
128
+ );
129
+ }
164
130
  }
165
- }
166
-
167
- export interface ConsumableWritableStreamSink<T> {
168
- start?(
169
- controller: WritableStreamDefaultController,
170
- ): void | PromiseLike<void>;
171
- write?(
172
- chunk: T,
173
- controller: WritableStreamDefaultController,
174
- ): void | PromiseLike<void>;
175
- abort?(reason: any): void | PromiseLike<void>;
176
- close?(): void | PromiseLike<void>;
177
- }
178
131
 
179
- export class ConsumableWritableStream<T> extends WritableStream<Consumable<T>> {
180
- static async write<T>(
181
- writer: WritableStreamDefaultWriter<Consumable<T>>,
182
- value: T,
183
- ) {
184
- const consumable = new Consumable(value);
185
- await writer.write(consumable);
186
- await consumable.consumed;
132
+ export interface ReadableStreamController<T> {
133
+ enqueue(chunk: T): Promise<void>;
134
+ close(): void;
135
+ error(reason: unknown): void;
187
136
  }
188
137
 
189
- constructor(
190
- sink: ConsumableWritableStreamSink<T>,
191
- strategy?: QueuingStrategy<T>,
192
- ) {
193
- let wrappedStrategy: QueuingStrategy<Consumable<T>> | undefined;
194
- if (strategy) {
195
- wrappedStrategy = {};
196
- if ("highWaterMark" in strategy) {
197
- wrappedStrategy.highWaterMark = strategy.highWaterMark;
198
- }
199
- if ("size" in strategy) {
200
- wrappedStrategy.size = (chunk) => {
201
- return strategy.size!(chunk.value);
202
- };
203
- }
204
- }
205
-
206
- super(
207
- {
208
- start(controller) {
209
- return sink.start?.(controller);
210
- },
211
- async write(chunk, controller) {
212
- await chunk.tryConsume(
213
- (value) => sink.write?.(value, controller),
214
- );
215
- chunk.consume();
216
- },
217
- abort(reason) {
218
- return sink.abort?.(reason);
219
- },
220
- close() {
221
- return sink.close?.();
222
- },
223
- },
224
- wrappedStrategy,
225
- );
138
+ export interface ReadableStreamSource<T> {
139
+ start?(
140
+ controller: ReadableStreamController<T>,
141
+ ): void | PromiseLike<void>;
142
+ pull?(
143
+ controller: ReadableStreamController<T>,
144
+ ): void | PromiseLike<void>;
145
+ cancel?(reason: unknown): void | PromiseLike<void>;
226
146
  }
227
- }
228
147
 
229
- export interface ConsumableTransformer<I, O> {
230
- start?(
231
- controller: ConsumableReadableStreamController<O>,
232
- ): void | PromiseLike<void>;
233
- transform?(
234
- chunk: I,
235
- controller: ConsumableReadableStreamController<O>,
236
- ): void | PromiseLike<void>;
237
- flush?(
238
- controller: ConsumableReadableStreamController<O>,
239
- ): void | PromiseLike<void>;
240
- }
148
+ export class ReadableStream<T> extends NativeReadableStream<Consumable<T>> {
149
+ static async enqueue<T>(
150
+ controller: { enqueue: (chunk: Consumable<T>) => void },
151
+ chunk: T,
152
+ ) {
153
+ const output = new Consumable(chunk);
154
+ controller.enqueue(output);
155
+ await output.consumed;
156
+ }
241
157
 
242
- export class ConsumableTransformStream<I, O> extends TransformStream<
243
- Consumable<I>,
244
- Consumable<O>
245
- > {
246
- constructor(transformer: ConsumableTransformer<I, O>) {
247
- let wrappedController:
248
- | ConsumableReadableStreamController<O>
249
- | undefined;
158
+ constructor(
159
+ source: ReadableStreamSource<T>,
160
+ strategy?: QueuingStrategy<T>,
161
+ ) {
162
+ let wrappedController: ReadableStreamController<T> | undefined;
163
+
164
+ let wrappedStrategy: QueuingStrategy<Consumable<T>> | undefined;
165
+ if (strategy) {
166
+ wrappedStrategy = {};
167
+ if ("highWaterMark" in strategy) {
168
+ wrappedStrategy.highWaterMark = strategy.highWaterMark;
169
+ }
170
+ if ("size" in strategy) {
171
+ wrappedStrategy.size = (chunk) => {
172
+ return strategy.size!(chunk.value);
173
+ };
174
+ }
175
+ }
250
176
 
251
- super({
252
- async start(controller) {
253
- wrappedController = {
254
- async enqueue(chunk) {
255
- await enqueue(controller, chunk);
177
+ super(
178
+ {
179
+ async start(controller) {
180
+ wrappedController = {
181
+ async enqueue(chunk) {
182
+ await ReadableStream.enqueue(controller, chunk);
183
+ },
184
+ close() {
185
+ controller.close();
186
+ },
187
+ error(reason) {
188
+ controller.error(reason);
189
+ },
190
+ };
191
+
192
+ await source.start?.(wrappedController);
256
193
  },
257
- close() {
258
- controller.terminate();
194
+ async pull() {
195
+ await source.pull?.(wrappedController!);
259
196
  },
260
- error(reason) {
261
- controller.error(reason);
197
+ async cancel(reason) {
198
+ await source.cancel?.(reason);
262
199
  },
263
- };
264
-
265
- await transformer.start?.(wrappedController);
266
- },
267
- async transform(chunk) {
268
- await chunk.tryConsume(
269
- (value) =>
270
- transformer.transform?.(value, wrappedController!),
271
- );
272
- chunk.consume();
273
- },
274
- async flush() {
275
- await transformer.flush?.(wrappedController!);
276
- },
277
- });
278
- }
279
- }
280
-
281
- export class ConsumableInspectStream<T> extends TransformStream<
282
- Consumable<T>,
283
- Consumable<T>
284
- > {
285
- constructor(callback: (value: T) => void) {
286
- super({
287
- transform(chunk, controller) {
288
- callback(chunk.value);
289
- controller.enqueue(chunk);
290
- },
291
- });
200
+ },
201
+ wrappedStrategy,
202
+ );
203
+ }
292
204
  }
293
205
  }