@yume-chan/stream-extra 0.0.19 → 0.0.20

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 (57) hide show
  1. package/CHANGELOG.json +48 -33
  2. package/CHANGELOG.md +10 -1
  3. package/esm/buffered-transform.d.ts +1 -2
  4. package/esm/buffered-transform.d.ts.map +1 -1
  5. package/esm/buffered-transform.js +10 -9
  6. package/esm/buffered-transform.js.map +1 -1
  7. package/esm/buffered.d.ts +4 -9
  8. package/esm/buffered.d.ts.map +1 -1
  9. package/esm/buffered.js +34 -30
  10. package/esm/buffered.js.map +1 -1
  11. package/esm/consumable.d.ts +1 -2
  12. package/esm/consumable.d.ts.map +1 -1
  13. package/esm/consumable.js +9 -9
  14. package/esm/consumable.js.map +1 -1
  15. package/esm/distribution.d.ts +1 -4
  16. package/esm/distribution.d.ts.map +1 -1
  17. package/esm/distribution.js +29 -29
  18. package/esm/distribution.js.map +1 -1
  19. package/esm/duplex.d.ts +1 -5
  20. package/esm/duplex.d.ts.map +1 -1
  21. package/esm/duplex.js +21 -19
  22. package/esm/duplex.js.map +1 -1
  23. package/esm/gather-string.d.ts +1 -1
  24. package/esm/gather-string.d.ts.map +1 -1
  25. package/esm/gather-string.js +3 -3
  26. package/esm/gather-string.js.map +1 -1
  27. package/esm/push-readable.d.ts.map +1 -1
  28. package/esm/push-readable.js +11 -6
  29. package/esm/push-readable.js.map +1 -1
  30. package/esm/wrap-readable.d.ts +1 -1
  31. package/esm/wrap-readable.d.ts.map +1 -1
  32. package/esm/wrap-readable.js +4 -4
  33. package/esm/wrap-readable.js.map +1 -1
  34. package/esm/wrap-writable.d.ts +1 -1
  35. package/esm/wrap-writable.d.ts.map +1 -1
  36. package/esm/wrap-writable.js +5 -5
  37. package/esm/wrap-writable.js.map +1 -1
  38. package/package.json +6 -6
  39. package/src/buffered-transform.ts +10 -12
  40. package/src/buffered.ts +38 -32
  41. package/src/consumable.ts +11 -11
  42. package/src/distribution.ts +31 -31
  43. package/src/duplex.ts +21 -19
  44. package/src/gather-string.ts +3 -3
  45. package/src/push-readable.ts +10 -6
  46. package/src/wrap-readable.ts +4 -4
  47. package/src/wrap-writable.ts +5 -5
  48. package/tsconfig.build.json +6 -1
  49. package/tsconfig.build.tsbuildinfo +1 -1
  50. package/esm/chunk.d.ts +0 -8
  51. package/esm/chunk.d.ts.map +0 -1
  52. package/esm/chunk.js +0 -56
  53. package/esm/chunk.js.map +0 -1
  54. package/esm/trace.d.ts +0 -16
  55. package/esm/trace.d.ts.map +0 -1
  56. package/esm/trace.js +0 -131
  57. package/esm/trace.js.map +0 -1
package/esm/duplex.js CHANGED
@@ -11,24 +11,24 @@ const NOOP = () => {
11
11
  * when any of them is closed, all other streams will be closed as well.
12
12
  */
13
13
  export class DuplexStreamFactory {
14
- readableControllers = [];
15
- writers = [];
16
- _writableClosed = false;
14
+ #readableControllers = [];
15
+ #writers = [];
16
+ #writableClosed = false;
17
17
  get writableClosed() {
18
- return this._writableClosed;
18
+ return this.#writableClosed;
19
19
  }
20
- _closed = new PromiseResolver();
20
+ #closed = new PromiseResolver();
21
21
  get closed() {
22
- return this._closed.promise;
22
+ return this.#closed.promise;
23
23
  }
24
- options;
24
+ #options;
25
25
  constructor(options) {
26
- this.options = options ?? {};
26
+ this.#options = options ?? {};
27
27
  }
28
28
  wrapReadable(readable) {
29
29
  return new WrapReadableStream({
30
30
  start: (controller) => {
31
- this.readableControllers.push(controller);
31
+ this.#readableControllers.push(controller);
32
32
  return readable;
33
33
  },
34
34
  cancel: async () => {
@@ -43,7 +43,7 @@ export class DuplexStreamFactory {
43
43
  }
44
44
  createWritable(stream) {
45
45
  const writer = stream.getWriter();
46
- this.writers.push(writer);
46
+ this.#writers.push(writer);
47
47
  // `WritableStream` has no way to tell if the remote peer has closed the connection.
48
48
  // So it only triggers `close`.
49
49
  return new WritableStream({
@@ -55,29 +55,31 @@ export class DuplexStreamFactory {
55
55
  await this.close();
56
56
  },
57
57
  close: async () => {
58
+ // NOOP: the writer is already closed
58
59
  await writer.close().catch(NOOP);
59
60
  await this.close();
60
61
  },
61
62
  });
62
63
  }
63
64
  async close() {
64
- if (this._writableClosed) {
65
+ if (this.#writableClosed) {
65
66
  return;
66
67
  }
67
- this._writableClosed = true;
68
+ this.#writableClosed = true;
68
69
  // Call `close` first, so it can still write data to `WritableStream`s.
69
- if ((await this.options.close?.()) !== false) {
70
+ if ((await this.#options.close?.()) !== false) {
70
71
  // `close` can return `false` to disable automatic `dispose`.
71
72
  await this.dispose();
72
73
  }
73
- for (const writer of this.writers) {
74
- await writer.close().catch(NOOP);
74
+ for (const writer of this.#writers) {
75
+ // NOOP: the writer is already closed
76
+ writer.close().catch(NOOP);
75
77
  }
76
78
  }
77
79
  async dispose() {
78
- this._writableClosed = true;
79
- this._closed.resolve();
80
- for (const controller of this.readableControllers) {
80
+ this.#writableClosed = true;
81
+ this.#closed.resolve();
82
+ for (const controller of this.#readableControllers) {
81
83
  try {
82
84
  controller.close();
83
85
  }
@@ -85,7 +87,7 @@ export class DuplexStreamFactory {
85
87
  // ignore
86
88
  }
87
89
  }
88
- await this.options.dispose?.();
90
+ await this.#options.dispose?.();
89
91
  }
90
92
  }
91
93
  //# sourceMappingURL=duplex.js.map
package/esm/duplex.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"duplex.js","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"duplex.js","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { WritableStream } from "./stream.js";
2
2
  export declare class GatherStringStream extends WritableStream<string> {
3
- private _result;
3
+ #private;
4
4
  get result(): string;
5
5
  constructor();
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gather-string.d.ts","sourceRoot":"","sources":["../src/gather-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,kBAAmB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAE1D,OAAO,CAAC,OAAO,CAAM;IACrB,IAAW,MAAM,WAEhB;;CASJ"}
1
+ {"version":3,"file":"gather-string.d.ts","sourceRoot":"","sources":["../src/gather-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,kBAAmB,SAAQ,cAAc,CAAC,MAAM,CAAC;;IAG1D,IAAW,MAAM,WAEhB;;CASJ"}
@@ -1,14 +1,14 @@
1
1
  import { WritableStream } from "./stream.js";
2
2
  export class GatherStringStream extends WritableStream {
3
3
  // PERF: rope (concat strings) is faster than `[].join('')`
4
- _result = "";
4
+ #result = "";
5
5
  get result() {
6
- return this._result;
6
+ return this.#result;
7
7
  }
8
8
  constructor() {
9
9
  super({
10
10
  write: (chunk) => {
11
- this._result += chunk;
11
+ this.#result += chunk;
12
12
  },
13
13
  });
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gather-string.js","sourceRoot":"","sources":["../src/gather-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,OAAO,kBAAmB,SAAQ,cAAsB;IAC1D,2DAA2D;IACnD,OAAO,GAAG,EAAE,CAAC;IACrB,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;QACI,KAAK,CAAC;YACF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACb,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;YAC1B,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
1
+ {"version":3,"file":"gather-string.js","sourceRoot":"","sources":["../src/gather-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,OAAO,kBAAmB,SAAQ,cAAsB;IAC1D,2DAA2D;IAC3D,OAAO,GAAG,EAAE,CAAC;IACb,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;QACI,KAAK,CAAC;YACF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACb,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;YAC1B,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"push-readable.d.ts","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAmB,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,4BAA4B,CAAC,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC;IAEzB,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,KAAK,IAAI,IAAI,CAAC;IAEd,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,CACtC,UAAU,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAC1C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACxD;;;;;;OAMG;gBAEC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACnC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;CA+DpC"}
1
+ {"version":3,"file":"push-readable.d.ts","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAmB,cAAc,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,4BAA4B,CAAC,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC;IAEzB,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,KAAK,IAAI,IAAI,CAAC;IAEd,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,CACtC,UAAU,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAC1C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACxD;;;;;;OAMG;gBAEC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACnC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;CAmEpC"}
@@ -10,16 +10,16 @@ export class PushReadableStream extends ReadableStream {
10
10
  */
11
11
  constructor(source, strategy) {
12
12
  let waterMarkLow;
13
- const canceled = new AbortController();
13
+ const abortController = new AbortController();
14
14
  super({
15
15
  start: (controller) => {
16
16
  const result = source({
17
- abortSignal: canceled.signal,
17
+ abortSignal: abortController.signal,
18
18
  async enqueue(chunk) {
19
- if (canceled.signal.aborted) {
19
+ if (abortController.signal.aborted) {
20
20
  // If the stream is already cancelled,
21
21
  // throw immediately.
22
- throw (canceled.signal.reason ??
22
+ throw (abortController.signal.reason ??
23
23
  new Error("Aborted"));
24
24
  }
25
25
  // Only when the stream is errored, `desiredSize` will be `null`.
@@ -43,7 +43,12 @@ export class PushReadableStream extends ReadableStream {
43
43
  });
44
44
  if (result && "then" in result) {
45
45
  result.then(() => {
46
- controller.close();
46
+ try {
47
+ controller.close();
48
+ }
49
+ catch (e) {
50
+ // controller already closed
51
+ }
47
52
  }, (e) => {
48
53
  controller.error(e);
49
54
  });
@@ -53,7 +58,7 @@ export class PushReadableStream extends ReadableStream {
53
58
  waterMarkLow?.resolve();
54
59
  },
55
60
  cancel: (reason) => {
56
- canceled.abort(reason);
61
+ abortController.abort(reason);
57
62
  waterMarkLow?.reject(reason);
58
63
  },
59
64
  }, strategy);
@@ -1 +1 @@
1
- {"version":3,"file":"push-readable.js","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgB9D,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACxD;;;;;;OAMG;IACH,YACI,MAAmC,EACnC,QAA6B;QAE7B,IAAI,YAA+C,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QAEvC,KAAK,CACD;YACI,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,CAAC;oBAClB,WAAW,EAAE,QAAQ,CAAC,MAAM;oBAC5B,KAAK,CAAC,OAAO,CAAC,KAAK;wBACf,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;4BACzB,sCAAsC;4BACtC,qBAAqB;4BACrB,MAAM,CACF,QAAQ,CAAC,MAAM,CAAC,MAAM;gCACtB,IAAI,KAAK,CAAC,SAAS,CAAC,CACvB,CAAC;yBACL;wBAED,iEAAiE;wBACjE,kCAAkC;wBAClC,qEAAqE;wBACrE,yCAAyC;wBACzC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;4BACpC,YAAY,GAAG,IAAI,eAAe,EAAQ,CAAC;4BAC3C,MAAM,YAAY,CAAC,OAAO,CAAC;yBAC9B;wBAED,+CAA+C;wBAC/C,oCAAoC;wBACpC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC;oBACD,KAAK;wBACD,UAAU,CAAC,KAAK,EAAE,CAAC;oBACvB,CAAC;oBACD,KAAK,CAAC,CAAC;wBACH,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC;iBACJ,CAAC,CAAC;gBAEH,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE;oBAC5B,MAAM,CAAC,IAAI,CACP,GAAG,EAAE;wBACD,UAAU,CAAC,KAAK,EAAE,CAAC;oBACvB,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;wBACF,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC,CACJ,CAAC;iBACL;YACL,CAAC;YACD,IAAI,EAAE,GAAG,EAAE;gBACP,YAAY,EAAE,OAAO,EAAE,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACf,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACvB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;SACJ,EACD,QAAQ,CACX,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"push-readable.js","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgB9D,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACxD;;;;;;OAMG;IACH,YACI,MAAmC,EACnC,QAA6B;QAE7B,IAAI,YAA+C,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE9C,KAAK,CACD;YACI,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,CAAC;oBAClB,WAAW,EAAE,eAAe,CAAC,MAAM;oBACnC,KAAK,CAAC,OAAO,CAAC,KAAK;wBACf,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE;4BAChC,sCAAsC;4BACtC,qBAAqB;4BACrB,MAAM,CACF,eAAe,CAAC,MAAM,CAAC,MAAM;gCAC7B,IAAI,KAAK,CAAC,SAAS,CAAC,CACvB,CAAC;yBACL;wBAED,iEAAiE;wBACjE,kCAAkC;wBAClC,qEAAqE;wBACrE,yCAAyC;wBACzC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;4BACpC,YAAY,GAAG,IAAI,eAAe,EAAQ,CAAC;4BAC3C,MAAM,YAAY,CAAC,OAAO,CAAC;yBAC9B;wBAED,+CAA+C;wBAC/C,oCAAoC;wBACpC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC;oBACD,KAAK;wBACD,UAAU,CAAC,KAAK,EAAE,CAAC;oBACvB,CAAC;oBACD,KAAK,CAAC,CAAC;wBACH,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC;iBACJ,CAAC,CAAC;gBAEH,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE;oBAC5B,MAAM,CAAC,IAAI,CACP,GAAG,EAAE;wBACD,IAAI;4BACA,UAAU,CAAC,KAAK,EAAE,CAAC;yBACtB;wBAAC,OAAO,CAAC,EAAE;4BACR,4BAA4B;yBAC/B;oBACL,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;wBACF,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC,CACJ,CAAC;iBACL;YACL,CAAC;YACD,IAAI,EAAE,GAAG,EAAE;gBACP,YAAY,EAAE,OAAO,EAAE,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACf,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;SACJ,EACD,QAAQ,CACX,CAAC;IACN,CAAC;CACJ"}
@@ -15,8 +15,8 @@ export interface ReadableStreamWrapper<T> {
15
15
  * 3. Convert native `ReadableStream`s to polyfilled ones so they can `pipe` between.
16
16
  */
17
17
  export declare class WrapReadableStream<T> extends ReadableStream<T> {
18
+ #private;
18
19
  readable: ReadableStream<T>;
19
- private reader;
20
20
  constructor(wrapper: ReadableStream<T> | WrapReadableStreamStart<T> | ReadableStreamWrapper<T>);
21
21
  }
22
22
  //# sourceMappingURL=wrap-readable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-readable.d.ts","sourceRoot":"","sources":["../src/wrap-readable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EACR,+BAA+B,EAElC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CACrC,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAC7C,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvC,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAClC;AAoBD;;;;;;GAMG;AACH,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACjD,QAAQ,EAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAkC;gBAG5C,OAAO,EACD,cAAc,CAAC,CAAC,CAAC,GACjB,uBAAuB,CAAC,CAAC,CAAC,GAC1B,qBAAqB,CAAC,CAAC,CAAC;CAmCrC"}
1
+ {"version":3,"file":"wrap-readable.d.ts","sourceRoot":"","sources":["../src/wrap-readable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EACR,+BAA+B,EAElC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CACrC,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAC7C,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvC,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAClC;AAoBD;;;;;;GAMG;AACH,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;;IACjD,QAAQ,EAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAKhC,OAAO,EACD,cAAc,CAAC,CAAC,CAAC,GACjB,uBAAuB,CAAC,CAAC,CAAC,GAC1B,qBAAqB,CAAC,CAAC,CAAC;CAmCrC"}
@@ -21,7 +21,7 @@ function getWrappedReadableStream(wrapper, controller) {
21
21
  */
22
22
  export class WrapReadableStream extends ReadableStream {
23
23
  readable;
24
- reader;
24
+ #reader;
25
25
  constructor(wrapper) {
26
26
  super({
27
27
  start: async (controller) => {
@@ -31,16 +31,16 @@ export class WrapReadableStream extends ReadableStream {
31
31
  // Queue a microtask to avoid this.
32
32
  await Promise.resolve();
33
33
  this.readable = await getWrappedReadableStream(wrapper, controller);
34
- this.reader = this.readable.getReader();
34
+ this.#reader = this.readable.getReader();
35
35
  },
36
36
  cancel: async (reason) => {
37
- await this.reader.cancel(reason);
37
+ await this.#reader.cancel(reason);
38
38
  if ("cancel" in wrapper) {
39
39
  await wrapper.cancel?.(reason);
40
40
  }
41
41
  },
42
42
  pull: async (controller) => {
43
- const result = await this.reader.read();
43
+ const result = await this.#reader.read();
44
44
  if (result.done) {
45
45
  controller.close();
46
46
  if ("close" in wrapper) {
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-readable.js","sourceRoot":"","sources":["../src/wrap-readable.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAY7C,SAAS,wBAAwB,CAC7B,OAG8B,EAC9B,UAA8C;IAE9C,IAAI,OAAO,IAAI,OAAO,EAAE;QACpB,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACpC;SAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;QACtC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;KAC9B;SAAM;QACH,gDAAgD;QAChD,wEAAwE;QACxE,OAAO,OAAO,CAAC;KAClB;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACjD,QAAQ,CAAqB;IAE5B,MAAM,CAAkC;IAEhD,YACI,OAG8B;QAE9B,KAAK,CAAC;YACF,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACxB,mEAAmE;gBACnE,uCAAuC;gBACvC,gHAAgH;gBAChH,mCAAmC;gBACnC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBAExB,IAAI,CAAC,QAAQ,GAAG,MAAM,wBAAwB,CAC1C,OAAO,EACP,UAAU,CACb,CAAC;gBACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC5C,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACrB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,QAAQ,IAAI,OAAO,EAAE;oBACrB,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;iBAClC;YACL,CAAC;YACD,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,MAAM,CAAC,IAAI,EAAE;oBACb,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,IAAI,OAAO,IAAI,OAAO,EAAE;wBACpB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;qBAC3B;iBACJ;qBAAM;oBACH,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACpC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
1
+ {"version":3,"file":"wrap-readable.js","sourceRoot":"","sources":["../src/wrap-readable.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAY7C,SAAS,wBAAwB,CAC7B,OAG8B,EAC9B,UAA8C;IAE9C,IAAI,OAAO,IAAI,OAAO,EAAE;QACpB,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACpC;SAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;QACtC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;KAC9B;SAAM;QACH,gDAAgD;QAChD,wEAAwE;QACxE,OAAO,OAAO,CAAC;KAClB;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACjD,QAAQ,CAAqB;IAEpC,OAAO,CAAkC;IAEzC,YACI,OAG8B;QAE9B,KAAK,CAAC;YACF,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACxB,mEAAmE;gBACnE,uCAAuC;gBACvC,gHAAgH;gBAChH,mCAAmC;gBACnC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBAExB,IAAI,CAAC,QAAQ,GAAG,MAAM,wBAAwB,CAC1C,OAAO,EACP,UAAU,CACb,CAAC;gBACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACrB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,QAAQ,IAAI,OAAO,EAAE;oBACrB,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;iBAClC;YACL,CAAC;YACD,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,MAAM,CAAC,IAAI,EAAE;oBACb,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,IAAI,OAAO,IAAI,OAAO,EAAE;wBACpB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;qBAC3B;iBACJ;qBAAM;oBACH,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACpC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -7,8 +7,8 @@ export interface WritableStreamWrapper<T> {
7
7
  close?(): void | Promise<void>;
8
8
  }
9
9
  export declare class WrapWritableStream<T> extends WritableStream<T> {
10
+ #private;
10
11
  writable: WritableStream<T>;
11
- private writer;
12
12
  constructor(wrapper: WritableStream<T> | WrapWritableStreamStart<T> | WritableStreamWrapper<T>);
13
13
  bePipedThroughFrom<U>(transformer: TransformStream<U, T>): WrapWritableStream<U>;
14
14
  }
@@ -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;IACjD,QAAQ,EAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAkC;gBAG5C,OAAO,EACD,cAAc,CAAC,CAAC,CAAC,GACjB,uBAAuB,CAAC,CAAC,CAAC,GAC1B,qBAAqB,CAAC,CAAC,CAAC;IAmC3B,kBAAkB,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;CAYlE"}
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;;IACjD,QAAQ,EAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAKhC,OAAO,EACD,cAAc,CAAC,CAAC,CAAC,GACjB,uBAAuB,CAAC,CAAC,CAAC,GAC1B,qBAAqB,CAAC,CAAC,CAAC;IAmC3B,kBAAkB,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;CAYlE"}
@@ -14,7 +14,7 @@ async function getWrappedWritableStream(wrapper) {
14
14
  }
15
15
  export class WrapWritableStream extends WritableStream {
16
16
  writable;
17
- writer;
17
+ #writer;
18
18
  constructor(wrapper) {
19
19
  super({
20
20
  start: async () => {
@@ -24,13 +24,13 @@ export class WrapWritableStream extends WritableStream {
24
24
  // Queue a microtask to avoid this.
25
25
  await Promise.resolve();
26
26
  this.writable = await getWrappedWritableStream(wrapper);
27
- this.writer = this.writable.getWriter();
27
+ this.#writer = this.writable.getWriter();
28
28
  },
29
29
  write: async (chunk) => {
30
- await this.writer.write(chunk);
30
+ await this.#writer.write(chunk);
31
31
  },
32
32
  abort: async (reason) => {
33
- await this.writer.abort(reason);
33
+ await this.#writer.abort(reason);
34
34
  if ("close" in wrapper) {
35
35
  await wrapper.close?.();
36
36
  }
@@ -40,7 +40,7 @@ export class WrapWritableStream extends WritableStream {
40
40
  // Usually the inner stream is a logical sub-stream over the outer stream,
41
41
  // closing the outer stream first will make the inner stream incapable of
42
42
  // sending data in its `close` handler.
43
- await this.writer.close();
43
+ await this.#writer.close();
44
44
  if ("close" in wrapper) {
45
45
  await wrapper.close?.();
46
46
  }
@@ -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;QACpB,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;KAChC;SAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;QACtC,OAAO,MAAM,OAAO,EAAE,CAAC;KAC1B;SAAM;QACH,gDAAgD;QAChD,wEAAwE;QACxE,OAAO,OAAO,CAAC;KAClB;AACL,CAAC;AAED,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACjD,QAAQ,CAAqB;IAE5B,MAAM,CAAkC;IAEhD,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,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC5C,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YACD,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACpB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,OAAO,IAAI,OAAO,EAAE;oBACpB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;iBAC3B;YACL,CAAC;YACD,KAAK,EAAE,KAAK,IAAI,EAAE;gBACd,gCAAgC;gBAChC,0EAA0E;gBAC1E,yEAAyE;gBACzE,uCAAuC;gBACvC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,OAAO,IAAI,OAAO,EAAE;oBACpB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;iBAC3B;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,kBAAkB,CAAI,WAAkC;QAC3D,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,OAG8B;IAE9B,IAAI,OAAO,IAAI,OAAO,EAAE;QACpB,OAAO,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;KAChC;SAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;QACtC,OAAO,MAAM,OAAO,EAAE,CAAC;KAC1B;SAAM;QACH,gDAAgD;QAChD,wEAAwE;QACxE,OAAO,OAAO,CAAC;KAClB;AACL,CAAC;AAED,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACjD,QAAQ,CAAqB;IAEpC,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;oBACpB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;iBAC3B;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;oBACpB,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;iBAC3B;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,kBAAkB,CAAI,WAAkC;QAC3D,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.19",
3
+ "version": "0.0.20",
4
4
  "description": "Extensions to Web Streams API",
5
5
  "keywords": [
6
6
  "stream",
@@ -26,8 +26,8 @@
26
26
  "types": "esm/index.d.ts",
27
27
  "dependencies": {
28
28
  "@yume-chan/async": "^2.2.0",
29
- "@yume-chan/struct": "^0.0.19",
30
- "tslib": "^2.4.1",
29
+ "@yume-chan/struct": "^0.0.20",
30
+ "tslib": "^2.5.2",
31
31
  "web-streams-polyfill": "^4.0.0-beta.3"
32
32
  },
33
33
  "devDependencies": {
@@ -35,11 +35,11 @@
35
35
  "@yume-chan/eslint-config": "^1.0.0",
36
36
  "@yume-chan/tsconfig": "^1.0.0",
37
37
  "cross-env": "^7.0.3",
38
- "eslint": "^8.36.0",
38
+ "eslint": "^8.41.0",
39
39
  "jest": "^29.5.0",
40
- "prettier": "^2.8.4",
40
+ "prettier": "^2.8.8",
41
41
  "ts-jest": "^29.0.4",
42
- "typescript": "^4.9.4"
42
+ "typescript": "^5.0.3"
43
43
  },
44
44
  "scripts": {
45
45
  "build": "tsc -b tsconfig.build.json",
@@ -1,9 +1,7 @@
1
1
  import type { ValueOrPromise } from "@yume-chan/struct";
2
+ import { StructEmptyError } from "@yume-chan/struct";
2
3
 
3
- import {
4
- BufferedReadableStream,
5
- BufferedReadableStreamEndedError,
6
- } from "./buffered.js";
4
+ import { BufferedReadableStream } from "./buffered.js";
7
5
  import type { PushReadableStreamController } from "./push-readable.js";
8
6
  import { PushReadableStream } from "./push-readable.js";
9
7
  import type { ReadableWritablePair } from "./stream.js";
@@ -13,14 +11,14 @@ import { ReadableStream, WritableStream } from "./stream.js";
13
11
  export class BufferedTransformStream<T>
14
12
  implements ReadableWritablePair<T, Uint8Array>
15
13
  {
16
- private _readable: ReadableStream<T>;
14
+ #readable: ReadableStream<T>;
17
15
  public get readable() {
18
- return this._readable;
16
+ return this.#readable;
19
17
  }
20
18
 
21
- private _writable: WritableStream<Uint8Array>;
19
+ #writable: WritableStream<Uint8Array>;
22
20
  public get writable() {
23
- return this._writable;
21
+ return this.#writable;
24
22
  }
25
23
 
26
24
  constructor(
@@ -35,16 +33,16 @@ export class BufferedTransformStream<T>
35
33
  })
36
34
  );
37
35
 
38
- this._readable = new ReadableStream<T>({
36
+ this.#readable = new ReadableStream<T>({
39
37
  async pull(controller) {
40
38
  try {
41
39
  const value = await transform(buffered);
42
40
  controller.enqueue(value);
43
41
  } catch (e) {
44
- // Treat `BufferedReadableStreamEndedError` as a normal end.
42
+ // Treat `StructEmptyError` as a normal end.
45
43
  // If the `transform` method doesn't have enough data to return a value,
46
44
  // it should throw another error to indicate that.
47
- if (e instanceof BufferedReadableStreamEndedError) {
45
+ if (e instanceof StructEmptyError) {
48
46
  controller.close();
49
47
  return;
50
48
  }
@@ -58,7 +56,7 @@ export class BufferedTransformStream<T>
58
56
  },
59
57
  });
60
58
 
61
- this._writable = new WritableStream({
59
+ this.#writable = new WritableStream({
62
60
  async write(chunk) {
63
61
  await sourceStreamController.enqueue(chunk);
64
62
  },
package/src/buffered.ts CHANGED
@@ -1,23 +1,21 @@
1
+ import type { AsyncExactReadable } from "@yume-chan/struct";
2
+ import { ExactReadableEndedError } from "@yume-chan/struct";
3
+
1
4
  import { PushReadableStream } from "./push-readable.js";
2
5
  import type { ReadableStream, ReadableStreamDefaultReader } from "./stream.js";
3
6
 
4
- export class BufferedReadableStreamEndedError extends Error {
5
- public constructor() {
6
- super("Stream ended");
7
+ const NOOP = () => {
8
+ // no-op
9
+ };
7
10
 
8
- // Fix Error's prototype chain when compiling to ES5
9
- Object.setPrototypeOf(this, new.target.prototype);
10
- }
11
- }
11
+ export class BufferedReadableStream implements AsyncExactReadable {
12
+ #buffered: Uint8Array | undefined;
13
+ #bufferedOffset = 0;
14
+ #bufferedLength = 0;
12
15
 
13
- export class BufferedReadableStream {
14
- private buffered: Uint8Array | undefined;
15
- private bufferedOffset = 0;
16
- private bufferedLength = 0;
17
-
18
- private _position = 0;
16
+ #position = 0;
19
17
  public get position() {
20
- return this._position;
18
+ return this.#position;
21
19
  }
22
20
 
23
21
  protected readonly stream: ReadableStream<Uint8Array>;
@@ -31,9 +29,9 @@ export class BufferedReadableStream {
31
29
  private async readSource() {
32
30
  const { done, value } = await this.reader.read();
33
31
  if (done) {
34
- throw new BufferedReadableStreamEndedError();
32
+ throw new ExactReadableEndedError();
35
33
  }
36
- this._position += value.byteLength;
34
+ this.#position += value.byteLength;
37
35
  return value;
38
36
  }
39
37
 
@@ -53,9 +51,9 @@ export class BufferedReadableStream {
53
51
  }
54
52
 
55
53
  if (array.byteLength > length) {
56
- this.buffered = array;
57
- this.bufferedOffset = length;
58
- this.bufferedLength = array.byteLength - length;
54
+ this.#buffered = array;
55
+ this.#bufferedOffset = length;
56
+ this.#bufferedLength = array.byteLength - length;
59
57
  return array.subarray(0, length);
60
58
  }
61
59
 
@@ -73,9 +71,9 @@ export class BufferedReadableStream {
73
71
  }
74
72
 
75
73
  if (array.byteLength > length) {
76
- this.buffered = array;
77
- this.bufferedOffset = length;
78
- this.bufferedLength = array.byteLength - length;
74
+ this.#buffered = array;
75
+ this.#bufferedOffset = length;
76
+ this.#bufferedLength = array.byteLength - length;
79
77
  result.set(array.subarray(0, length), index);
80
78
  return result;
81
79
  }
@@ -93,20 +91,22 @@ export class BufferedReadableStream {
93
91
  * @param length
94
92
  * @returns
95
93
  */
96
- public read(length: number): Uint8Array | Promise<Uint8Array> {
94
+ public readExactly(length: number): Uint8Array | Promise<Uint8Array> {
97
95
  // PERF: Add a synchronous path for reading from internal buffer
98
- if (this.buffered) {
99
- const array = this.buffered;
100
- const offset = this.bufferedOffset;
101
- if (this.bufferedLength > length) {
96
+ if (this.#buffered) {
97
+ const array = this.#buffered;
98
+ const offset = this.#bufferedOffset;
99
+ if (this.#bufferedLength > length) {
102
100
  // PERF: `subarray` is slow
103
101
  // don't use it until absolutely necessary
104
- this.bufferedOffset += length;
105
- this.bufferedLength -= length;
102
+ this.#bufferedOffset += length;
103
+ this.#bufferedLength -= length;
106
104
  return array.subarray(offset, offset + length);
107
105
  }
108
106
 
109
- this.buffered = undefined;
107
+ this.#buffered = undefined;
108
+ this.#bufferedLength = 0;
109
+ this.#bufferedOffset = 0;
110
110
  return this.readAsync(length, array.subarray(offset));
111
111
  }
112
112
 
@@ -119,10 +119,16 @@ export class BufferedReadableStream {
119
119
  * @returns A `ReadableStream`
120
120
  */
121
121
  public release(): ReadableStream<Uint8Array> {
122
- if (this.buffered) {
122
+ if (this.#bufferedLength > 0) {
123
123
  return new PushReadableStream<Uint8Array>(async (controller) => {
124
124
  // Put the remaining data back to the stream
125
- await controller.enqueue(this.buffered!);
125
+ const buffered = this.#buffered!.subarray(this.#bufferedOffset);
126
+ await controller.enqueue(buffered);
127
+
128
+ controller.abortSignal.addEventListener("abort", () => {
129
+ // NOOP: the reader might already be released
130
+ this.reader.cancel().catch(NOOP);
131
+ });
126
132
 
127
133
  // Manually pipe the stream
128
134
  while (true) {
package/src/consumable.ts CHANGED
@@ -11,12 +11,12 @@ interface Console {
11
11
  createTask(name: string): Task;
12
12
  }
13
13
 
14
- interface GlobalEx {
14
+ interface GlobalExtension {
15
15
  console: Console;
16
16
  }
17
17
 
18
18
  // `createTask` allows browser DevTools to track the call stack across async boundaries.
19
- const { console } = globalThis as unknown as GlobalEx;
19
+ const { console } = globalThis as unknown as GlobalExtension;
20
20
  const createTask: Console["createTask"] =
21
21
  console.createTask?.bind(console) ??
22
22
  (() => ({
@@ -26,35 +26,35 @@ const createTask: Console["createTask"] =
26
26
  }));
27
27
 
28
28
  export class Consumable<T> {
29
- private readonly task: Task;
30
- private readonly resolver: PromiseResolver<void>;
29
+ readonly #task: Task;
30
+ readonly #resolver: PromiseResolver<void>;
31
31
 
32
32
  public readonly value: T;
33
33
  public readonly consumed: Promise<void>;
34
34
 
35
35
  public constructor(value: T) {
36
- this.task = createTask("Consumable");
36
+ this.#task = createTask("Consumable");
37
37
  this.value = value;
38
- this.resolver = new PromiseResolver<void>();
39
- this.consumed = this.resolver.promise;
38
+ this.#resolver = new PromiseResolver<void>();
39
+ this.consumed = this.#resolver.promise;
40
40
  }
41
41
 
42
42
  public consume() {
43
- this.resolver.resolve();
43
+ this.#resolver.resolve();
44
44
  }
45
45
 
46
46
  public error(error: any) {
47
- this.resolver.reject(error);
47
+ this.#resolver.reject(error);
48
48
  }
49
49
 
50
50
  public async tryConsume<U>(callback: (value: T) => U) {
51
51
  try {
52
52
  // eslint-disable-next-line @typescript-eslint/await-thenable
53
- const result = await this.task.run(() => callback(this.value));
53
+ const result = await this.#task.run(() => callback(this.value));
54
54
  this.consume();
55
55
  return result;
56
56
  } catch (e) {
57
- this.resolver.reject(e);
57
+ this.#resolver.reject(e);
58
58
  throw e;
59
59
  }
60
60
  }