@yume-chan/stream-extra 0.0.24 → 1.0.0

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 (81) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/esm/buffered-transform.d.ts +3 -3
  3. package/esm/buffered-transform.d.ts.map +1 -1
  4. package/esm/buffered-transform.js.map +1 -1
  5. package/esm/buffered.d.ts +3 -6
  6. package/esm/buffered.d.ts.map +1 -1
  7. package/esm/buffered.js +87 -75
  8. package/esm/buffered.js.map +1 -1
  9. package/esm/concat.js +2 -2
  10. package/esm/concat.js.map +1 -1
  11. package/esm/consumable.d.ts +15 -10
  12. package/esm/consumable.d.ts.map +1 -1
  13. package/esm/consumable.js +82 -86
  14. package/esm/consumable.js.map +1 -1
  15. package/esm/duplex.d.ts +2 -2
  16. package/esm/duplex.d.ts.map +1 -1
  17. package/esm/duplex.js +2 -6
  18. package/esm/duplex.js.map +1 -1
  19. package/esm/index.d.ts +1 -0
  20. package/esm/index.d.ts.map +1 -1
  21. package/esm/index.js +1 -0
  22. package/esm/index.js.map +1 -1
  23. package/esm/maybe-consumable-ns.d.ts +16 -0
  24. package/esm/maybe-consumable-ns.d.ts.map +1 -0
  25. package/esm/maybe-consumable-ns.js +44 -0
  26. package/esm/maybe-consumable-ns.js.map +1 -0
  27. package/esm/maybe-consumable.d.ts +2 -19
  28. package/esm/maybe-consumable.d.ts.map +1 -1
  29. package/esm/maybe-consumable.js +1 -61
  30. package/esm/maybe-consumable.js.map +1 -1
  31. package/esm/push-readable.d.ts +16 -2
  32. package/esm/push-readable.d.ts.map +1 -1
  33. package/esm/push-readable.js +176 -17
  34. package/esm/push-readable.js.map +1 -1
  35. package/esm/stream.d.ts +5 -5
  36. package/esm/stream.d.ts.map +1 -1
  37. package/esm/stream.js +54 -5
  38. package/esm/stream.js.map +1 -1
  39. package/esm/struct-deserialize.d.ts +3 -4
  40. package/esm/struct-deserialize.d.ts.map +1 -1
  41. package/esm/struct-deserialize.js.map +1 -1
  42. package/esm/struct-serialize.d.ts +2 -2
  43. package/esm/struct-serialize.d.ts.map +1 -1
  44. package/esm/struct-serialize.js.map +1 -1
  45. package/esm/task.d.ts.map +1 -1
  46. package/esm/task.js +2 -2
  47. package/esm/task.js.map +1 -1
  48. package/esm/try-close.d.ts +10 -0
  49. package/esm/try-close.d.ts.map +1 -0
  50. package/esm/try-close.js +19 -0
  51. package/esm/try-close.js.map +1 -0
  52. package/esm/types.d.ts +2 -3
  53. package/esm/types.d.ts.map +1 -1
  54. package/esm/wrap-readable.d.ts +5 -4
  55. package/esm/wrap-readable.d.ts.map +1 -1
  56. package/esm/wrap-readable.js +14 -9
  57. package/esm/wrap-readable.js.map +1 -1
  58. package/esm/wrap-writable.d.ts +2 -2
  59. package/esm/wrap-writable.d.ts.map +1 -1
  60. package/esm/wrap-writable.js +4 -6
  61. package/esm/wrap-writable.js.map +1 -1
  62. package/package.json +11 -13
  63. package/src/buffered-transform.ts +2 -2
  64. package/src/buffered.ts +107 -83
  65. package/src/concat.ts +2 -2
  66. package/src/consumable.ts +117 -112
  67. package/src/duplex.ts +4 -7
  68. package/src/index.ts +1 -0
  69. package/src/maybe-consumable-ns.ts +75 -0
  70. package/src/maybe-consumable.ts +2 -98
  71. package/src/push-readable.ts +213 -19
  72. package/src/stream.ts +68 -8
  73. package/src/struct-deserialize.ts +3 -6
  74. package/src/struct-serialize.ts +3 -3
  75. package/src/task.ts +2 -2
  76. package/src/try-close.ts +44 -0
  77. package/src/types.ts +2 -2
  78. package/src/wrap-readable.ts +20 -14
  79. package/src/wrap-writable.ts +6 -9
  80. package/tsconfig.build.tsbuildinfo +1 -1
  81. package/CHANGELOG.json +0 -104
@@ -1 +1 @@
1
- {"version":3,"file":"consumable.js","sourceRoot":"","sources":["../src/consumable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumable.js","sourceRoot":"","sources":["../src/consumable.ts"],"names":[],"mappings":"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"}
package/esm/duplex.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ValueOrPromise } from "@yume-chan/struct";
1
+ import type { MaybePromiseLike } from "@yume-chan/async";
2
2
  import type { QueuingStrategy, ReadableStream } from "./stream.js";
3
3
  import { WritableStream } from "./stream.js";
4
4
  import { WrapReadableStream } from "./wrap-readable.js";
@@ -15,7 +15,7 @@ export interface DuplexStreamFactoryOptions {
15
15
  * `DuplexStreamFactory#dispose` yourself, you can return `false`
16
16
  * (or a `Promise` that resolves to `false`) to disable the automatic call.
17
17
  */
18
- close?: (() => ValueOrPromise<boolean | void>) | undefined;
18
+ close?: (() => MaybePromiseLike<boolean | void>) | undefined;
19
19
  /**
20
20
  * Callback when any `ReadableStream` is closed (the other peer doesn't produce any more data),
21
21
  * or `WritableStream` is aborted (the other peer can't receive any more data),
@@ -1 +1 @@
1
- {"version":3,"file":"duplex.d.ts","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EACR,eAAe,EACf,cAAc,EAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMxD,MAAM,WAAW,0BAA0B;IACvC;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IAE3D;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CACtD;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB,CAAC,CAAC,EAAE,CAAC;;IAKjC,IAAI,cAAc,YAEjB;IAGD,IAAI,MAAM,kBAET;gBAIW,OAAO,CAAC,EAAE,0BAA0B;IAIhD,YAAY,CACR,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC9B,kBAAkB,CAAC,CAAC,CAAC;IAoBxB,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAsBtD,KAAK;IAkBL,OAAO;CAchB"}
1
+ {"version":3,"file":"duplex.d.ts","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,OAAO,KAAK,EACR,eAAe,EACf,cAAc,EAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMxD,MAAM,WAAW,0BAA0B;IACvC;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IAE7D;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CACtD;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB,CAAC,CAAC,EAAE,CAAC;;IAKjC,IAAI,cAAc,YAEjB;IAGD,IAAI,MAAM,kBAET;gBAIW,OAAO,CAAC,EAAE,0BAA0B;IAIhD,YAAY,CACR,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC9B,kBAAkB,CAAC,CAAC,CAAC;IAoBxB,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAsBtD,KAAK;IAkBL,OAAO;CAUhB"}
package/esm/duplex.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { PromiseResolver } from "@yume-chan/async";
2
2
  import { WritableStream } from "./stream.js";
3
+ import { tryClose } from "./try-close.js";
3
4
  import { WrapReadableStream } from "./wrap-readable.js";
4
5
  const NOOP = () => {
5
6
  // no-op
@@ -80,12 +81,7 @@ export class DuplexStreamFactory {
80
81
  this.#writableClosed = true;
81
82
  this.#closed.resolve();
82
83
  for (const controller of this.#readableControllers) {
83
- try {
84
- controller.close();
85
- }
86
- catch {
87
- // ignore
88
- }
84
+ tryClose(controller);
89
85
  }
90
86
  await this.#options.dispose?.();
91
87
  }
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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"}
package/esm/index.d.ts CHANGED
@@ -14,6 +14,7 @@ export * from "./stream.js";
14
14
  export * from "./struct-deserialize.js";
15
15
  export * from "./struct-serialize.js";
16
16
  export * from "./task.js";
17
+ export * from "./try-close.js";
17
18
  export * from "./wrap-readable.js";
18
19
  export * from "./wrap-writable.js";
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
package/esm/index.js CHANGED
@@ -14,6 +14,7 @@ export * from "./stream.js";
14
14
  export * from "./struct-deserialize.js";
15
15
  export * from "./struct-serialize.js";
16
16
  export * from "./task.js";
17
+ export * from "./try-close.js";
17
18
  export * from "./wrap-readable.js";
18
19
  export * from "./wrap-writable.js";
19
20
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Consumable } from "./consumable.js";
2
+ import type { MaybeConsumable } from "./maybe-consumable.js";
3
+ import type { QueuingStrategy, WritableStreamDefaultController } from "./stream.js";
4
+ import { WritableStream as NativeWritableStream } from "./stream.js";
5
+ export declare function getValue<T>(value: MaybeConsumable<T>): T;
6
+ export declare function tryConsume<T, R>(value: T, callback: (value: T extends Consumable<infer U> ? U : T) => R): R;
7
+ export interface WritableStreamSink<in T> {
8
+ start?(controller: WritableStreamDefaultController): void | PromiseLike<void>;
9
+ write?(chunk: T, controller: WritableStreamDefaultController): void | PromiseLike<void>;
10
+ abort?(reason: unknown): void | PromiseLike<void>;
11
+ close?(): void | PromiseLike<void>;
12
+ }
13
+ export declare class WritableStream<in T> extends NativeWritableStream<MaybeConsumable<T>> {
14
+ constructor(sink: WritableStreamSink<T>, strategy?: QueuingStrategy<T>);
15
+ }
16
+ //# sourceMappingURL=maybe-consumable-ns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybe-consumable-ns.d.ts","sourceRoot":"","sources":["../src/maybe-consumable-ns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EACR,eAAe,EACf,+BAA+B,EAClC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAExD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC3B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAC9D,CAAC,CAMH;AAED,MAAM,WAAW,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,CACF,UAAU,EAAE,+BAA+B,GAC5C,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,CACF,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,+BAA+B,GAC5C,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,qBAAa,cAAc,CAAC,EAAE,CAAC,CAAC,CAAE,SAAQ,oBAAoB,CAC1D,eAAe,CAAC,CAAC,CAAC,CACrB;gBACe,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;CAoCzE"}
@@ -0,0 +1,44 @@
1
+ import { Consumable } from "./consumable.js";
2
+ import { WritableStream as NativeWritableStream } from "./stream.js";
3
+ export function getValue(value) {
4
+ return value instanceof Consumable ? value.value : value;
5
+ }
6
+ export function tryConsume(value, callback) {
7
+ if (value instanceof Consumable) {
8
+ return value.tryConsume(callback);
9
+ }
10
+ else {
11
+ return callback(value);
12
+ }
13
+ }
14
+ export class WritableStream extends NativeWritableStream {
15
+ constructor(sink, strategy) {
16
+ let wrappedStrategy;
17
+ if (strategy) {
18
+ wrappedStrategy = {};
19
+ if ("highWaterMark" in strategy) {
20
+ wrappedStrategy.highWaterMark = strategy.highWaterMark;
21
+ }
22
+ if ("size" in strategy) {
23
+ wrappedStrategy.size = (chunk) => {
24
+ return strategy.size(chunk instanceof Consumable ? chunk.value : chunk);
25
+ };
26
+ }
27
+ }
28
+ super({
29
+ start(controller) {
30
+ return sink.start?.(controller);
31
+ },
32
+ async write(chunk, controller) {
33
+ await tryConsume(chunk, (chunk) => sink.write?.(chunk, controller));
34
+ },
35
+ abort(reason) {
36
+ return sink.abort?.(reason);
37
+ },
38
+ close() {
39
+ return sink.close?.();
40
+ },
41
+ }, wrappedStrategy);
42
+ }
43
+ }
44
+ //# sourceMappingURL=maybe-consumable-ns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybe-consumable-ns.js","sourceRoot":"","sources":["../src/maybe-consumable-ns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAM7C,OAAO,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,UAAU,QAAQ,CAAI,KAAyB;IACjD,OAAO,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU,CACtB,KAAQ,EACR,QAA6D;IAE7D,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACJ,OAAO,QAAQ,CAAC,KAAc,CAAC,CAAC;IACpC,CAAC;AACL,CAAC;AAcD,MAAM,OAAO,cAAqB,SAAQ,oBAEzC;IACG,YAAY,IAA2B,EAAE,QAA6B;QAClE,IAAI,eAAgE,CAAC;QACrE,IAAI,QAAQ,EAAE,CAAC;YACX,eAAe,GAAG,EAAE,CAAC;YACrB,IAAI,eAAe,IAAI,QAAQ,EAAE,CAAC;gBAC9B,eAAe,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;YAC3D,CAAC;YACD,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACrB,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE;oBAC7B,OAAO,QAAQ,CAAC,IAAK,CACjB,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CACpD,CAAC;gBACN,CAAC,CAAC;YACN,CAAC;QACL,CAAC;QAED,KAAK,CACD;YACI,KAAK,CAAC,UAAU;gBACZ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU;gBACzB,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9B,IAAI,CAAC,KAAK,EAAE,CAAC,KAAU,EAAE,UAAU,CAAC,CACvC,CAAC;YACN,CAAC;YACD,KAAK,CAAC,MAAM;gBACR,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;YACD,KAAK;gBACD,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAC1B,CAAC;SACJ,EACD,eAAe,CAClB,CAAC;IACN,CAAC;CACJ"}
@@ -1,21 +1,4 @@
1
- import { Consumable } from "./consumable.js";
2
- import type { QueuingStrategy, WritableStreamDefaultController } from "./stream.js";
3
- import { WritableStream as NativeWritableStream, TransformStream } from "./stream.js";
1
+ import type { Consumable } from "./consumable.js";
4
2
  export type MaybeConsumable<T> = T | Consumable<T>;
5
- export declare namespace MaybeConsumable {
6
- function getValue<T>(value: MaybeConsumable<T>): T;
7
- function tryConsume<T, R>(value: T, callback: (value: T extends Consumable<infer U> ? U : T) => R): R;
8
- class UnwrapStream<T> extends TransformStream<MaybeConsumable<T>, T> {
9
- constructor();
10
- }
11
- interface WritableStreamSink<in T> {
12
- start?(controller: WritableStreamDefaultController): void | PromiseLike<void>;
13
- write?(chunk: T, controller: WritableStreamDefaultController): void | PromiseLike<void>;
14
- abort?(reason: unknown): void | PromiseLike<void>;
15
- close?(): void | PromiseLike<void>;
16
- }
17
- class WritableStream<in T> extends NativeWritableStream<MaybeConsumable<T>> {
18
- constructor(sink: WritableStreamSink<T>, strategy?: QueuingStrategy<T>);
19
- }
20
- }
3
+ export * as MaybeConsumable from "./maybe-consumable-ns.js";
21
4
  //# sourceMappingURL=maybe-consumable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"maybe-consumable.d.ts","sourceRoot":"","sources":["../src/maybe-consumable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EACR,eAAe,EACf,+BAA+B,EAClC,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,cAAc,IAAI,oBAAoB,EACtC,eAAe,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAEnD,yBAAiB,eAAe,CAAC;IAC7B,SAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAExD;IAED,SAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC3B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAC9D,CAAC,CAMH;IAED,MAAa,YAAY,CAAC,CAAC,CAAE,SAAQ,eAAe,CAChD,eAAe,CAAC,CAAC,CAAC,EAClB,CAAC,CACJ;;KAUA;IAED,UAAiB,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACpC,KAAK,CAAC,CACF,UAAU,EAAE,+BAA+B,GAC5C,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,CAAC,CACF,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,+BAA+B,GAC5C,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;KACtC;IAED,MAAa,cAAc,CAAC,EAAE,CAAC,CAAC,CAAE,SAAQ,oBAAoB,CAC1D,eAAe,CAAC,CAAC,CAAC,CACrB;oBAEO,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;KAuCpC;CACJ"}
1
+ {"version":3,"file":"maybe-consumable.d.ts","sourceRoot":"","sources":["../src/maybe-consumable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAEnD,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAC"}
@@ -1,62 +1,2 @@
1
- import { Consumable } from "./consumable.js";
2
- import { WritableStream as NativeWritableStream, TransformStream, } from "./stream.js";
3
- export var MaybeConsumable;
4
- (function (MaybeConsumable) {
5
- function getValue(value) {
6
- return value instanceof Consumable ? value.value : value;
7
- }
8
- MaybeConsumable.getValue = getValue;
9
- function tryConsume(value, callback) {
10
- if (value instanceof Consumable) {
11
- return value.tryConsume(callback);
12
- }
13
- else {
14
- return callback(value);
15
- }
16
- }
17
- MaybeConsumable.tryConsume = tryConsume;
18
- class UnwrapStream extends TransformStream {
19
- constructor() {
20
- super({
21
- transform(chunk, controller) {
22
- MaybeConsumable.tryConsume(chunk, (chunk) => {
23
- controller.enqueue(chunk);
24
- });
25
- },
26
- });
27
- }
28
- }
29
- MaybeConsumable.UnwrapStream = UnwrapStream;
30
- class WritableStream extends NativeWritableStream {
31
- constructor(sink, strategy) {
32
- let wrappedStrategy;
33
- if (strategy) {
34
- wrappedStrategy = {};
35
- if ("highWaterMark" in strategy) {
36
- wrappedStrategy.highWaterMark = strategy.highWaterMark;
37
- }
38
- if ("size" in strategy) {
39
- wrappedStrategy.size = (chunk) => {
40
- return strategy.size(chunk instanceof Consumable ? chunk.value : chunk);
41
- };
42
- }
43
- }
44
- super({
45
- start(controller) {
46
- return sink.start?.(controller);
47
- },
48
- async write(chunk, controller) {
49
- await MaybeConsumable.tryConsume(chunk, (chunk) => sink.write?.(chunk, controller));
50
- },
51
- abort(reason) {
52
- return sink.abort?.(reason);
53
- },
54
- close() {
55
- return sink.close?.();
56
- },
57
- }, wrappedStrategy);
58
- }
59
- }
60
- MaybeConsumable.WritableStream = WritableStream;
61
- })(MaybeConsumable || (MaybeConsumable = {}));
1
+ export * as MaybeConsumable from "./maybe-consumable-ns.js";
62
2
  //# sourceMappingURL=maybe-consumable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"maybe-consumable.js","sourceRoot":"","sources":["../src/maybe-consumable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK7C,OAAO,EACH,cAAc,IAAI,oBAAoB,EACtC,eAAe,GAClB,MAAM,aAAa,CAAC;AAIrB,MAAM,KAAW,eAAe,CAwF/B;AAxFD,WAAiB,eAAe;IAC5B,SAAgB,QAAQ,CAAI,KAAyB;QACjD,OAAO,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,CAAC;IAFe,wBAAQ,WAEvB,CAAA;IAED,SAAgB,UAAU,CACtB,KAAQ,EACR,QAA6D;QAE7D,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,OAAO,QAAQ,CAAC,KAAc,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IATe,0BAAU,aASzB,CAAA;IAED,MAAa,YAAgB,SAAQ,eAGpC;QACG;YACI,KAAK,CAAC;gBACF,SAAS,CAAC,KAAK,EAAE,UAAU;oBACvB,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;wBACxC,UAAU,CAAC,OAAO,CAAC,KAAU,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC;gBACP,CAAC;aACJ,CAAC,CAAC;QACP,CAAC;KACJ;IAbY,4BAAY,eAaxB,CAAA;IAcD,MAAa,cAAqB,SAAQ,oBAEzC;QACG,YACI,IAA2B,EAC3B,QAA6B;YAE7B,IAAI,eAEW,CAAC;YAChB,IAAI,QAAQ,EAAE,CAAC;gBACX,eAAe,GAAG,EAAE,CAAC;gBACrB,IAAI,eAAe,IAAI,QAAQ,EAAE,CAAC;oBAC9B,eAAe,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;gBAC3D,CAAC;gBACD,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;oBACrB,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE;wBAC7B,OAAO,QAAQ,CAAC,IAAK,CACjB,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CACpD,CAAC;oBACN,CAAC,CAAC;gBACN,CAAC;YACL,CAAC;YAED,KAAK,CACD;gBACI,KAAK,CAAC,UAAU;oBACZ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC;gBACpC,CAAC;gBACD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU;oBACzB,MAAM,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9C,IAAI,CAAC,KAAK,EAAE,CAAC,KAAU,EAAE,UAAU,CAAC,CACvC,CAAC;gBACN,CAAC;gBACD,KAAK,CAAC,MAAM;oBACR,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC;gBACD,KAAK;oBACD,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC1B,CAAC;aACJ,EACD,eAAe,CAClB,CAAC;QACN,CAAC;KACJ;IA5CY,8BAAc,iBA4C1B,CAAA;AACL,CAAC,EAxFgB,eAAe,KAAf,eAAe,QAwF/B"}
1
+ {"version":3,"file":"maybe-consumable.js","sourceRoot":"","sources":["../src/maybe-consumable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAC"}
@@ -7,8 +7,22 @@ export interface PushReadableStreamController<T> {
7
7
  error(e?: unknown): void;
8
8
  }
9
9
  export type PushReadableStreamSource<T> = (controller: PushReadableStreamController<T>) => void | Promise<void>;
10
+ export type PushReadableLogger<T> = (event: {
11
+ source: "producer";
12
+ operation: "enqueue";
13
+ value: T;
14
+ phase: "start" | "waiting" | "ignored" | "complete";
15
+ } | {
16
+ source: "producer";
17
+ operation: "close" | "error";
18
+ explicit: boolean;
19
+ phase: "start" | "ignored" | "complete";
20
+ } | {
21
+ source: "consumer";
22
+ operation: "pull" | "cancel";
23
+ phase: "start" | "complete";
24
+ }) => void;
10
25
  export declare class PushReadableStream<T> extends ReadableStream<T> {
11
- #private;
12
26
  /**
13
27
  * Create a new `PushReadableStream` from a source.
14
28
  *
@@ -16,6 +30,6 @@ export declare class PushReadableStream<T> extends ReadableStream<T> {
16
30
  * when the `Promise` is resolved, and be errored when the `Promise` is rejected.
17
31
  * @param strategy
18
32
  */
19
- constructor(source: PushReadableStreamSource<T>, strategy?: QueuingStrategy<T>);
33
+ constructor(source: PushReadableStreamSource<T>, strategy?: QueuingStrategy<T>, logger?: PushReadableLogger<T>);
20
34
  }
21
35
  //# sourceMappingURL=push-readable.d.ts.map
@@ -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;;IAGxD;;;;;;OAMG;gBAEC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACnC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;CAiFpC"}
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,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAChC,KAAK,EACC;IACI,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;CACvD,GACD;IACI,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;CAC3C,GACD;IACI,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;CAC/B,KACN,IAAI,CAAC;AAEV,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,EAC7B,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;CA+PrC"}
@@ -1,7 +1,6 @@
1
1
  import { PromiseResolver } from "@yume-chan/async";
2
2
  import { AbortController, ReadableStream } from "./stream.js";
3
3
  export class PushReadableStream extends ReadableStream {
4
- #zeroHighWaterMarkAllowEnqueue = false;
5
4
  /**
6
5
  * Create a new `PushReadableStream` from a source.
7
6
  *
@@ -9,71 +8,231 @@ export class PushReadableStream extends ReadableStream {
9
8
  * when the `Promise` is resolved, and be errored when the `Promise` is rejected.
10
9
  * @param strategy
11
10
  */
12
- constructor(source, strategy) {
11
+ constructor(source, strategy, logger) {
13
12
  let waterMarkLow;
13
+ let zeroHighWaterMarkAllowEnqueue = false;
14
14
  const abortController = new AbortController();
15
15
  super({
16
- start: async (controller) => {
17
- await Promise.resolve();
16
+ start: (controller) => {
18
17
  const result = source({
19
18
  abortSignal: abortController.signal,
20
19
  enqueue: async (chunk) => {
20
+ logger?.({
21
+ source: "producer",
22
+ operation: "enqueue",
23
+ value: chunk,
24
+ phase: "start",
25
+ });
21
26
  if (abortController.signal.aborted) {
22
- // If the stream is already cancelled,
23
- // throw immediately.
24
- throw abortController.signal.reason;
27
+ // In original `ReadableStream`, calling `enqueue` or `close`
28
+ // on an cancelled stream will throw an error,
29
+ //
30
+ // But in `PushReadableStream`, `enqueue` is an async function,
31
+ // the producer can't just check `abortSignal.aborted`
32
+ // before calling `enqueue`, as it might change when waiting
33
+ // for the backpressure to be reduced.
34
+ //
35
+ // So IMO it's better to handle this for the producer
36
+ // by simply ignoring the `enqueue` call.
37
+ //
38
+ // Note that we check `abortSignal.aborted` instead of `stopped`,
39
+ // as it's not allowed for the producer to call `enqueue` after
40
+ // they called `close` or `error`.
41
+ //
42
+ // Obviously, the producer should listen to the `abortSignal` and
43
+ // stop producing, but most pushing data sources don't support that.
44
+ logger?.({
45
+ source: "producer",
46
+ operation: "enqueue",
47
+ value: chunk,
48
+ phase: "ignored",
49
+ });
50
+ return;
25
51
  }
26
52
  if (controller.desiredSize === null) {
27
53
  // `desiredSize` being `null` means the stream is in error state,
28
54
  // `controller.enqueue` will throw an error for us.
29
55
  controller.enqueue(chunk);
56
+ // istanbul ignore next
30
57
  return;
31
58
  }
32
- if (this.#zeroHighWaterMarkAllowEnqueue) {
33
- this.#zeroHighWaterMarkAllowEnqueue = false;
59
+ if (zeroHighWaterMarkAllowEnqueue) {
60
+ // When `highWaterMark` is set to `0`,
61
+ // `controller.desiredSize` will always be `0`,
62
+ // even if the consumer has called `reader.read()`.
63
+ // (in this case, each `reader.read()`/`pull`
64
+ // should allow one `enqueue` of any size)
65
+ //
66
+ // If the consumer has already called `reader.read()`,
67
+ // before the producer tries to `enqueue`,
68
+ // `controller.desiredSize` is `0` and normal `waterMarkLow` signal
69
+ // will never trigger,
70
+ // (because `ReadableStream` prevents reentrance of `pull`)
71
+ // The stream will stuck.
72
+ //
73
+ // So we need a special signal for this case.
74
+ zeroHighWaterMarkAllowEnqueue = false;
34
75
  controller.enqueue(chunk);
76
+ logger?.({
77
+ source: "producer",
78
+ operation: "enqueue",
79
+ value: chunk,
80
+ phase: "complete",
81
+ });
35
82
  return;
36
83
  }
37
84
  if (controller.desiredSize <= 0) {
85
+ logger?.({
86
+ source: "producer",
87
+ operation: "enqueue",
88
+ value: chunk,
89
+ phase: "waiting",
90
+ });
38
91
  waterMarkLow = new PromiseResolver();
39
92
  await waterMarkLow.promise;
93
+ // Recheck consumer cancellation after async operations.
94
+ if (abortController.signal.aborted) {
95
+ logger?.({
96
+ source: "producer",
97
+ operation: "enqueue",
98
+ value: chunk,
99
+ phase: "ignored",
100
+ });
101
+ return;
102
+ }
40
103
  }
41
- // `controller.enqueue` will throw error for us
42
- // if the stream is already errored.
43
104
  controller.enqueue(chunk);
105
+ logger?.({
106
+ source: "producer",
107
+ operation: "enqueue",
108
+ value: chunk,
109
+ phase: "complete",
110
+ });
44
111
  },
45
112
  close() {
113
+ logger?.({
114
+ source: "producer",
115
+ operation: "close",
116
+ explicit: true,
117
+ phase: "start",
118
+ });
119
+ // Since `enqueue` on an cancelled stream won't throw an error,
120
+ // so does `close`.
121
+ if (abortController.signal.aborted) {
122
+ logger?.({
123
+ source: "producer",
124
+ operation: "close",
125
+ explicit: true,
126
+ phase: "ignored",
127
+ });
128
+ return;
129
+ }
46
130
  controller.close();
131
+ logger?.({
132
+ source: "producer",
133
+ operation: "close",
134
+ explicit: true,
135
+ phase: "complete",
136
+ });
47
137
  },
48
138
  error(e) {
139
+ logger?.({
140
+ source: "producer",
141
+ operation: "error",
142
+ explicit: true,
143
+ phase: "start",
144
+ });
145
+ // Calling `error` on an already closed or errored stream is a no-op.
49
146
  controller.error(e);
147
+ logger?.({
148
+ source: "producer",
149
+ operation: "error",
150
+ explicit: true,
151
+ phase: "complete",
152
+ });
50
153
  },
51
154
  });
52
155
  if (result && "then" in result) {
156
+ // If `source` returns a `Promise`,
157
+ // close the stream when the `Promise` is resolved,
158
+ // and error the stream when the `Promise` is rejected.
159
+ // The producer can return a never-settling `Promise`
160
+ // to disable this behavior.
53
161
  result.then(() => {
162
+ logger?.({
163
+ source: "producer",
164
+ operation: "close",
165
+ explicit: false,
166
+ phase: "start",
167
+ });
54
168
  try {
55
169
  controller.close();
170
+ logger?.({
171
+ source: "producer",
172
+ operation: "close",
173
+ explicit: false,
174
+ phase: "complete",
175
+ });
56
176
  }
57
- catch (e) {
58
- // controller already closed
177
+ catch {
178
+ logger?.({
179
+ source: "producer",
180
+ operation: "close",
181
+ explicit: false,
182
+ phase: "ignored",
183
+ });
184
+ // The stream is already closed by the producer,
185
+ // Or cancelled by the consumer.
59
186
  }
60
187
  }, (e) => {
188
+ logger?.({
189
+ source: "producer",
190
+ operation: "error",
191
+ explicit: false,
192
+ phase: "start",
193
+ });
61
194
  controller.error(e);
195
+ logger?.({
196
+ source: "producer",
197
+ operation: "error",
198
+ explicit: false,
199
+ phase: "complete",
200
+ });
62
201
  });
63
202
  }
64
203
  },
65
204
  pull: () => {
205
+ logger?.({
206
+ source: "consumer",
207
+ operation: "pull",
208
+ phase: "start",
209
+ });
66
210
  if (waterMarkLow) {
67
211
  waterMarkLow.resolve();
68
- return;
69
212
  }
70
- if (strategy?.highWaterMark === 0) {
71
- this.#zeroHighWaterMarkAllowEnqueue = true;
213
+ else if (strategy?.highWaterMark === 0) {
214
+ zeroHighWaterMarkAllowEnqueue = true;
72
215
  }
216
+ logger?.({
217
+ source: "consumer",
218
+ operation: "pull",
219
+ phase: "complete",
220
+ });
73
221
  },
74
222
  cancel: (reason) => {
223
+ logger?.({
224
+ source: "consumer",
225
+ operation: "cancel",
226
+ phase: "start",
227
+ });
75
228
  abortController.abort(reason);
76
- waterMarkLow?.reject(reason);
229
+ // Resolve it on cancellation. `pull` will check `abortSignal.aborted` again.
230
+ waterMarkLow?.resolve();
231
+ logger?.({
232
+ source: "consumer",
233
+ operation: "cancel",
234
+ phase: "complete",
235
+ });
77
236
  },
78
237
  }, strategy);
79
238
  }
@@ -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,8BAA8B,GAAG,KAAK,CAAC;IAEvC;;;;;;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,KAAK,EAAE,UAAU,EAAE,EAAE;gBACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBAExB,MAAM,MAAM,GAAG,MAAM,CAAC;oBAClB,WAAW,EAAE,eAAe,CAAC,MAAM;oBACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;wBACrB,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;4BACjC,sCAAsC;4BACtC,qBAAqB;4BACrB,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;wBACxC,CAAC;wBAED,IAAI,UAAU,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;4BAClC,iEAAiE;4BACjE,mDAAmD;4BACnD,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BAC1B,OAAO;wBACX,CAAC;wBAED,IAAI,IAAI,CAAC,8BAA8B,EAAE,CAAC;4BACtC,IAAI,CAAC,8BAA8B,GAAG,KAAK,CAAC;4BAC5C,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BAC1B,OAAO;wBACX,CAAC;wBAED,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;4BAC9B,YAAY,GAAG,IAAI,eAAe,EAAQ,CAAC;4BAC3C,MAAM,YAAY,CAAC,OAAO,CAAC;wBAC/B,CAAC;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,CAAC;oBAC7B,MAAM,CAAC,IAAI,CACP,GAAG,EAAE;wBACD,IAAI,CAAC;4BACD,UAAU,CAAC,KAAK,EAAE,CAAC;wBACvB,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACT,4BAA4B;wBAChC,CAAC;oBACL,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;wBACF,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC,CACJ,CAAC;gBACN,CAAC;YACL,CAAC;YACD,IAAI,EAAE,GAAG,EAAE;gBACP,IAAI,YAAY,EAAE,CAAC;oBACf,YAAY,CAAC,OAAO,EAAE,CAAC;oBACvB,OAAO;gBACX,CAAC;gBACD,IAAI,QAAQ,EAAE,aAAa,KAAK,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;gBAC/C,CAAC;YACL,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"}
1
+ {"version":3,"file":"push-readable.js","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"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"}