@yume-chan/stream-extra 0.0.18 → 0.0.19

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 (87) hide show
  1. package/CHANGELOG.json +33 -21
  2. package/CHANGELOG.md +8 -2
  3. package/README.md +1 -1
  4. package/esm/buffered-transform.d.ts +11 -10
  5. package/esm/buffered-transform.d.ts.map +1 -1
  6. package/esm/buffered-transform.js +55 -55
  7. package/esm/buffered-transform.js.map +1 -1
  8. package/esm/buffered.d.ts +29 -27
  9. package/esm/buffered.d.ts.map +1 -1
  10. package/esm/buffered.js +128 -123
  11. package/esm/buffered.js.map +1 -1
  12. package/esm/chunk.d.ts +7 -4
  13. package/esm/chunk.d.ts.map +1 -1
  14. package/esm/chunk.js +48 -7
  15. package/esm/chunk.js.map +1 -1
  16. package/esm/consumable.d.ts +53 -0
  17. package/esm/consumable.d.ts.map +1 -0
  18. package/esm/consumable.js +178 -0
  19. package/esm/consumable.js.map +1 -0
  20. package/esm/decode-utf8.d.ts +4 -4
  21. package/esm/decode-utf8.js +11 -11
  22. package/esm/distribution.d.ts +24 -0
  23. package/esm/distribution.d.ts.map +1 -0
  24. package/esm/distribution.js +99 -0
  25. package/esm/distribution.js.map +1 -0
  26. package/esm/duplex.d.ts +48 -47
  27. package/esm/duplex.d.ts.map +1 -1
  28. package/esm/duplex.js +90 -92
  29. package/esm/duplex.js.map +1 -1
  30. package/esm/gather-string.d.ts +6 -6
  31. package/esm/gather-string.d.ts.map +1 -1
  32. package/esm/gather-string.js +15 -13
  33. package/esm/gather-string.js.map +1 -1
  34. package/esm/index.d.ts +16 -15
  35. package/esm/index.d.ts.map +1 -1
  36. package/esm/index.js +16 -15
  37. package/esm/index.js.map +1 -1
  38. package/esm/inspect.d.ts +4 -4
  39. package/esm/inspect.js +11 -11
  40. package/esm/pipe-from.d.ts +12 -11
  41. package/esm/pipe-from.d.ts.map +1 -1
  42. package/esm/pipe-from.js +23 -25
  43. package/esm/pipe-from.js.map +1 -1
  44. package/esm/push-readable.d.ts +19 -18
  45. package/esm/push-readable.d.ts.map +1 -1
  46. package/esm/push-readable.js +61 -61
  47. package/esm/push-readable.js.map +1 -1
  48. package/esm/split-string.d.ts +4 -4
  49. package/esm/split-string.d.ts.map +1 -1
  50. package/esm/split-string.js +24 -24
  51. package/esm/split-string.js.map +1 -1
  52. package/esm/stream.d.ts +25 -24
  53. package/esm/stream.d.ts.map +1 -1
  54. package/esm/stream.js +26 -26
  55. package/esm/stream.js.map +1 -1
  56. package/esm/struct-deserialize.d.ts +6 -6
  57. package/esm/struct-deserialize.d.ts.map +1 -1
  58. package/esm/struct-deserialize.js +8 -8
  59. package/esm/struct-serialize.d.ts +5 -5
  60. package/esm/struct-serialize.js +10 -10
  61. package/esm/trace.d.ts +3 -3
  62. package/esm/wrap-readable.d.ts +21 -20
  63. package/esm/wrap-readable.d.ts.map +1 -1
  64. package/esm/wrap-readable.js +56 -56
  65. package/esm/wrap-readable.js.map +1 -1
  66. package/esm/wrap-writable.d.ts +14 -12
  67. package/esm/wrap-writable.d.ts.map +1 -1
  68. package/esm/wrap-writable.js +62 -52
  69. package/esm/wrap-writable.js.map +1 -1
  70. package/package.json +7 -6
  71. package/src/buffered-transform.ts +5 -10
  72. package/src/buffered.ts +7 -5
  73. package/src/consumable.ts +281 -0
  74. package/src/distribution.ts +113 -0
  75. package/src/duplex.ts +15 -16
  76. package/src/gather-string.ts +5 -3
  77. package/src/index.ts +16 -15
  78. package/src/inspect.ts +1 -1
  79. package/src/pipe-from.ts +8 -6
  80. package/src/push-readable.ts +3 -7
  81. package/src/split-string.ts +5 -2
  82. package/src/stream.ts +1 -1
  83. package/src/struct-deserialize.ts +1 -1
  84. package/src/wrap-readable.ts +5 -5
  85. package/src/wrap-writable.ts +16 -4
  86. package/tsconfig.build.tsbuildinfo +1 -1
  87. package/src/chunk.ts +0 -15
package/esm/chunk.js CHANGED
@@ -1,14 +1,55 @@
1
1
  import { TransformStream } from "./stream.js";
2
- export class ChunkStream extends TransformStream {
3
- constructor(size) {
2
+ export class DistributionStream extends TransformStream {
3
+ constructor(size, combine = false) {
4
+ let combineBuffer = combine ? new Uint8Array(size) : undefined;
5
+ let combineBufferOffset = 0;
6
+ let combineBufferAvailable = size;
4
7
  super({
5
8
  transform(chunk, controller) {
6
- for (let start = 0; start < chunk.byteLength;) {
7
- const end = start + size;
8
- controller.enqueue(chunk.subarray(start, end));
9
- start = end;
9
+ let offset = 0;
10
+ let available = chunk.byteLength;
11
+ if (combineBuffer && combineBufferOffset !== 0) {
12
+ if (available >= combineBufferAvailable) {
13
+ combineBuffer.set(chunk.subarray(0, combineBufferAvailable), combineBufferOffset);
14
+ offset += combineBufferAvailable;
15
+ available -= combineBufferAvailable;
16
+ controller.enqueue(combineBuffer);
17
+ combineBuffer = new Uint8Array(size);
18
+ combineBufferOffset = 0;
19
+ combineBufferAvailable = size;
20
+ if (available === 0) {
21
+ return;
22
+ }
23
+ }
24
+ else {
25
+ combineBuffer.set(chunk, combineBufferOffset);
26
+ combineBufferOffset += available;
27
+ combineBufferAvailable -= available;
28
+ return;
29
+ }
10
30
  }
11
- }
31
+ while (available >= size) {
32
+ const end = offset + size;
33
+ controller.enqueue(chunk.subarray(offset, end));
34
+ offset = end;
35
+ available -= size;
36
+ }
37
+ if (available > 0) {
38
+ if (combineBuffer) {
39
+ combineBuffer.set(chunk.subarray(offset), combineBufferOffset);
40
+ combineBufferOffset += chunk.byteLength - offset;
41
+ combineBufferAvailable -= chunk.byteLength - offset;
42
+ }
43
+ else {
44
+ controller.enqueue(chunk.subarray(offset));
45
+ }
46
+ }
47
+ },
48
+ flush(controller) {
49
+ if (combineBuffer && combineBufferOffset !== 0) {
50
+ controller.enqueue(combineBuffer.subarray(0, combineBufferOffset));
51
+ }
52
+ },
12
53
  });
13
54
  }
14
55
  }
package/esm/chunk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../src/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,WAAY,SAAQ,eAAuC;IACpE,YAAmB,IAAY;QAC3B,KAAK,CAAC;YACF,SAAS,CAAC,KAAK,EAAE,UAAU;gBACvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG;oBAC3C,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;oBACzB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC/C,KAAK,GAAG,GAAG,CAAC;iBACf;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
1
+ {"version":3,"file":"chunk.js","sourceRoot":"","sources":["../src/chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,kBAAmB,SAAQ,eAGvC;IACG,YAAmB,IAAY,EAAE,OAAO,GAAG,KAAK;QAC5C,IAAI,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,sBAAsB,GAAG,IAAI,CAAC;QAClC,KAAK,CAAC;YACF,SAAS,CAAC,KAAK,EAAE,UAAU;gBACvB,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,IAAI,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;gBAEjC,IAAI,aAAa,IAAI,mBAAmB,KAAK,CAAC,EAAE;oBAC5C,IAAI,SAAS,IAAI,sBAAsB,EAAE;wBACrC,aAAa,CAAC,GAAG,CACb,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,sBAAsB,CAAC,EACzC,mBAAmB,CACtB,CAAC;wBACF,MAAM,IAAI,sBAAsB,CAAC;wBACjC,SAAS,IAAI,sBAAsB,CAAC;wBAEpC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;wBAClC,aAAa,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;wBACrC,mBAAmB,GAAG,CAAC,CAAC;wBACxB,sBAAsB,GAAG,IAAI,CAAC;wBAE9B,IAAI,SAAS,KAAK,CAAC,EAAE;4BACjB,OAAO;yBACV;qBACJ;yBAAM;wBACH,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;wBAC9C,mBAAmB,IAAI,SAAS,CAAC;wBACjC,sBAAsB,IAAI,SAAS,CAAC;wBACpC,OAAO;qBACV;iBACJ;gBAED,OAAO,SAAS,IAAI,IAAI,EAAE;oBACtB,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC;oBAC1B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;oBAChD,MAAM,GAAG,GAAG,CAAC;oBACb,SAAS,IAAI,IAAI,CAAC;iBACrB;gBAED,IAAI,SAAS,GAAG,CAAC,EAAE;oBACf,IAAI,aAAa,EAAE;wBACf,aAAa,CAAC,GAAG,CACb,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EACtB,mBAAmB,CACtB,CAAC;wBACF,mBAAmB,IAAI,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;wBACjD,sBAAsB,IAAI,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;qBACvD;yBAAM;wBACH,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC9C;iBACJ;YACL,CAAC;YACD,KAAK,CAAC,UAAU;gBACZ,IAAI,aAAa,IAAI,mBAAmB,KAAK,CAAC,EAAE;oBAC5C,UAAU,CAAC,OAAO,CACd,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,mBAAmB,CAAC,CACjD,CAAC;iBACL;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1,53 @@
1
+ import type { QueuingStrategy, WritableStreamDefaultWriter } from "./stream.js";
2
+ import { ReadableStream, TransformStream, WritableStream } from "./stream.js";
3
+ export declare class Consumable<T> {
4
+ private readonly task;
5
+ private readonly resolver;
6
+ readonly value: T;
7
+ readonly consumed: Promise<void>;
8
+ constructor(value: T);
9
+ consume(): void;
10
+ error(error: any): void;
11
+ tryConsume<U>(callback: (value: T) => U): Promise<U>;
12
+ }
13
+ export declare class WrapConsumableStream<T> extends TransformStream<T, Consumable<T>> {
14
+ constructor();
15
+ }
16
+ export declare class UnwrapConsumableStream<T> extends TransformStream<Consumable<T>, T> {
17
+ constructor();
18
+ }
19
+ export interface ConsumableReadableStreamController<T> {
20
+ enqueue(chunk: T): Promise<void>;
21
+ close(): void;
22
+ error(reason: any): void;
23
+ }
24
+ export interface ConsumableReadableStreamSource<T> {
25
+ start?(controller: ConsumableReadableStreamController<T>): void | PromiseLike<void>;
26
+ pull?(controller: ConsumableReadableStreamController<T>): void | PromiseLike<void>;
27
+ cancel?(reason: any): void | PromiseLike<void>;
28
+ }
29
+ export declare class ConsumableReadableStream<T> extends ReadableStream<Consumable<T>> {
30
+ constructor(source: ConsumableReadableStreamSource<T>, strategy?: QueuingStrategy<T>);
31
+ }
32
+ export interface ConsumableWritableStreamSink<T> {
33
+ start?(): void | PromiseLike<void>;
34
+ write?(chunk: T): void | PromiseLike<void>;
35
+ abort?(reason: any): void | PromiseLike<void>;
36
+ close?(): void | PromiseLike<void>;
37
+ }
38
+ export declare class ConsumableWritableStream<T> extends WritableStream<Consumable<T>> {
39
+ static write<T>(writer: WritableStreamDefaultWriter<Consumable<T>>, value: T): Promise<void>;
40
+ constructor(sink: ConsumableWritableStreamSink<T>, strategy?: QueuingStrategy<T>);
41
+ }
42
+ export interface ConsumableTransformer<I, O> {
43
+ start?(controller: ConsumableReadableStreamController<O>): void | PromiseLike<void>;
44
+ transform?(chunk: I, controller: ConsumableReadableStreamController<O>): void | PromiseLike<void>;
45
+ flush?(controller: ConsumableReadableStreamController<O>): void | PromiseLike<void>;
46
+ }
47
+ export declare class ConsumableTransformStream<I, O> extends TransformStream<Consumable<I>, Consumable<O>> {
48
+ constructor(transformer: ConsumableTransformer<I, O>);
49
+ }
50
+ export declare class ConsumableInspectStream<T> extends TransformStream<Consumable<T>, Consumable<T>> {
51
+ constructor(callback: (value: T) => void);
52
+ }
53
+ //# sourceMappingURL=consumable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumable.d.ts","sourceRoot":"","sources":["../src/consumable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ import { PromiseResolver } from "@yume-chan/async";
2
+ import { ReadableStream, TransformStream, WritableStream } from "./stream.js";
3
+ // `createTask` allows browser DevTools to track the call stack across async boundaries.
4
+ const { console } = globalThis;
5
+ const createTask = console.createTask?.bind(console) ??
6
+ (() => ({
7
+ run(callback) {
8
+ return callback();
9
+ },
10
+ }));
11
+ export class Consumable {
12
+ task;
13
+ resolver;
14
+ value;
15
+ consumed;
16
+ constructor(value) {
17
+ this.task = createTask("Consumable");
18
+ this.value = value;
19
+ this.resolver = new PromiseResolver();
20
+ this.consumed = this.resolver.promise;
21
+ }
22
+ consume() {
23
+ this.resolver.resolve();
24
+ }
25
+ error(error) {
26
+ this.resolver.reject(error);
27
+ }
28
+ async tryConsume(callback) {
29
+ try {
30
+ // eslint-disable-next-line @typescript-eslint/await-thenable
31
+ const result = await this.task.run(() => callback(this.value));
32
+ this.consume();
33
+ return result;
34
+ }
35
+ catch (e) {
36
+ this.resolver.reject(e);
37
+ throw e;
38
+ }
39
+ }
40
+ }
41
+ async function enqueue(controller, chunk) {
42
+ const output = new Consumable(chunk);
43
+ controller.enqueue(output);
44
+ await output.consumed;
45
+ }
46
+ export class WrapConsumableStream extends TransformStream {
47
+ constructor() {
48
+ super({
49
+ async transform(chunk, controller) {
50
+ await enqueue(controller, chunk);
51
+ },
52
+ });
53
+ }
54
+ }
55
+ export class UnwrapConsumableStream extends TransformStream {
56
+ constructor() {
57
+ super({
58
+ transform(chunk, controller) {
59
+ controller.enqueue(chunk.value);
60
+ chunk.consume();
61
+ },
62
+ });
63
+ }
64
+ }
65
+ export class ConsumableReadableStream extends ReadableStream {
66
+ constructor(source, strategy) {
67
+ let wrappedController;
68
+ let wrappedStrategy;
69
+ if (strategy) {
70
+ wrappedStrategy = {};
71
+ if ("highWaterMark" in strategy) {
72
+ wrappedStrategy.highWaterMark = strategy.highWaterMark;
73
+ }
74
+ if ("size" in strategy) {
75
+ wrappedStrategy.size = (chunk) => {
76
+ return strategy.size(chunk.value);
77
+ };
78
+ }
79
+ }
80
+ super({
81
+ async start(controller) {
82
+ wrappedController = {
83
+ async enqueue(chunk) {
84
+ await enqueue(controller, chunk);
85
+ },
86
+ close() {
87
+ controller.close();
88
+ },
89
+ error(reason) {
90
+ controller.error(reason);
91
+ },
92
+ };
93
+ await source.start?.(wrappedController);
94
+ },
95
+ async pull() {
96
+ await source.pull?.(wrappedController);
97
+ },
98
+ async cancel(reason) {
99
+ await source.cancel?.(reason);
100
+ },
101
+ }, wrappedStrategy);
102
+ }
103
+ }
104
+ export class ConsumableWritableStream extends WritableStream {
105
+ static async write(writer, value) {
106
+ const consumable = new Consumable(value);
107
+ await writer.write(consumable);
108
+ await consumable.consumed;
109
+ }
110
+ constructor(sink, strategy) {
111
+ let wrappedStrategy;
112
+ if (strategy) {
113
+ wrappedStrategy = {};
114
+ if ("highWaterMark" in strategy) {
115
+ wrappedStrategy.highWaterMark = strategy.highWaterMark;
116
+ }
117
+ if ("size" in strategy) {
118
+ wrappedStrategy.size = (chunk) => {
119
+ return strategy.size(chunk.value);
120
+ };
121
+ }
122
+ }
123
+ super({
124
+ start() {
125
+ return sink.start?.();
126
+ },
127
+ async write(chunk) {
128
+ await chunk.tryConsume((value) => sink.write?.(value));
129
+ chunk.consume();
130
+ },
131
+ abort(reason) {
132
+ return sink.abort?.(reason);
133
+ },
134
+ close() {
135
+ return sink.close?.();
136
+ },
137
+ }, wrappedStrategy);
138
+ }
139
+ }
140
+ export class ConsumableTransformStream extends TransformStream {
141
+ constructor(transformer) {
142
+ let wrappedController;
143
+ super({
144
+ async start(controller) {
145
+ wrappedController = {
146
+ async enqueue(chunk) {
147
+ await enqueue(controller, chunk);
148
+ },
149
+ close() {
150
+ controller.terminate();
151
+ },
152
+ error(reason) {
153
+ controller.error(reason);
154
+ },
155
+ };
156
+ await transformer.start?.(wrappedController);
157
+ },
158
+ async transform(chunk) {
159
+ await chunk.tryConsume((value) => transformer.transform?.(value, wrappedController));
160
+ chunk.consume();
161
+ },
162
+ async flush() {
163
+ await transformer.flush?.(wrappedController);
164
+ },
165
+ });
166
+ }
167
+ }
168
+ export class ConsumableInspectStream extends TransformStream {
169
+ constructor(callback) {
170
+ super({
171
+ transform(chunk, controller) {
172
+ callback(chunk.value);
173
+ controller.enqueue(chunk);
174
+ },
175
+ });
176
+ }
177
+ }
178
+ //# sourceMappingURL=consumable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumable.js","sourceRoot":"","sources":["../src/consumable.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { TransformStream } from "./stream.js";
2
- export declare class DecodeUtf8Stream extends TransformStream<Uint8Array, string> {
3
- constructor();
4
- }
1
+ import { TransformStream } from "./stream.js";
2
+ export declare class DecodeUtf8Stream extends TransformStream<Uint8Array, string> {
3
+ constructor();
4
+ }
5
5
  //# sourceMappingURL=decode-utf8.d.ts.map
@@ -1,12 +1,12 @@
1
- import { decodeUtf8 } from "@yume-chan/struct";
2
- import { TransformStream } from "./stream.js";
3
- export class DecodeUtf8Stream extends TransformStream {
4
- constructor() {
5
- super({
6
- transform(chunk, controller) {
7
- controller.enqueue(decodeUtf8(chunk));
8
- },
9
- });
10
- }
11
- }
1
+ import { decodeUtf8 } from "@yume-chan/struct";
2
+ import { TransformStream } from "./stream.js";
3
+ export class DecodeUtf8Stream extends TransformStream {
4
+ constructor() {
5
+ super({
6
+ transform(chunk, controller) {
7
+ controller.enqueue(decodeUtf8(chunk));
8
+ },
9
+ });
10
+ }
11
+ }
12
12
  //# sourceMappingURL=decode-utf8.js.map
@@ -0,0 +1,24 @@
1
+ import { ConsumableTransformStream } from "./consumable.js";
2
+ /**
3
+ * Splits or combines buffers to specified size.
4
+ */
5
+ export declare class BufferCombiner {
6
+ private _capacity;
7
+ private readonly _buffer;
8
+ private _offset;
9
+ private _available;
10
+ constructor(size: number);
11
+ /**
12
+ * Pushes data to the combiner.
13
+ * @param data The input data to be split or combined.
14
+ * @returns
15
+ * A generator that yields buffers of specified size.
16
+ * It may yield the same buffer multiple times, consume the data before calling `next`.
17
+ */
18
+ push(data: Uint8Array): Generator<Uint8Array, void, void>;
19
+ flush(): Uint8Array | undefined;
20
+ }
21
+ export declare class DistributionStream extends ConsumableTransformStream<Uint8Array, Uint8Array> {
22
+ constructor(size: number, combine?: boolean);
23
+ }
24
+ //# sourceMappingURL=distribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../src/distribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAER,IAAI,EAAE,MAAM;IAO/B;;;;;;OAMG;IACK,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;IA0C1D,KAAK,IAAI,UAAU,GAAG,SAAS;CAUzC;AAED,qBAAa,kBAAmB,SAAQ,yBAAyB,CAC7D,UAAU,EACV,UAAU,CACb;gBACsB,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ;CA6BnD"}
@@ -0,0 +1,99 @@
1
+ import { ConsumableTransformStream } from "./consumable.js";
2
+ /**
3
+ * Splits or combines buffers to specified size.
4
+ */
5
+ export class BufferCombiner {
6
+ _capacity;
7
+ _buffer;
8
+ _offset;
9
+ _available;
10
+ constructor(size) {
11
+ this._capacity = size;
12
+ this._buffer = new Uint8Array(size);
13
+ this._offset = 0;
14
+ this._available = size;
15
+ }
16
+ /**
17
+ * Pushes data to the combiner.
18
+ * @param data The input data to be split or combined.
19
+ * @returns
20
+ * A generator that yields buffers of specified size.
21
+ * It may yield the same buffer multiple times, consume the data before calling `next`.
22
+ */
23
+ *push(data) {
24
+ let offset = 0;
25
+ let available = data.byteLength;
26
+ if (this._offset !== 0) {
27
+ if (available >= this._available) {
28
+ this._buffer.set(data.subarray(0, this._available), this._offset);
29
+ offset += this._available;
30
+ available -= this._available;
31
+ yield this._buffer;
32
+ this._offset = 0;
33
+ this._available = this._capacity;
34
+ if (available === 0) {
35
+ return;
36
+ }
37
+ }
38
+ else {
39
+ this._buffer.set(data, this._offset);
40
+ this._offset += available;
41
+ this._available -= available;
42
+ return;
43
+ }
44
+ }
45
+ while (available >= this._capacity) {
46
+ const end = offset + this._capacity;
47
+ yield data.subarray(offset, end);
48
+ offset = end;
49
+ available -= this._capacity;
50
+ }
51
+ if (available > 0) {
52
+ this._buffer.set(data.subarray(offset), this._offset);
53
+ this._offset += available;
54
+ this._available -= available;
55
+ }
56
+ }
57
+ flush() {
58
+ if (this._offset === 0) {
59
+ return undefined;
60
+ }
61
+ const output = this._buffer.subarray(0, this._offset);
62
+ this._offset = 0;
63
+ this._available = this._capacity;
64
+ return output;
65
+ }
66
+ }
67
+ export class DistributionStream extends ConsumableTransformStream {
68
+ constructor(size, combine = false) {
69
+ const combiner = combine ? new BufferCombiner(size) : undefined;
70
+ super({
71
+ async transform(chunk, controller) {
72
+ if (combiner) {
73
+ for (const buffer of combiner.push(chunk)) {
74
+ await controller.enqueue(buffer);
75
+ }
76
+ }
77
+ else {
78
+ let offset = 0;
79
+ let available = chunk.byteLength;
80
+ while (available > 0) {
81
+ const end = offset + size;
82
+ await controller.enqueue(chunk.subarray(offset, end));
83
+ offset = end;
84
+ available -= size;
85
+ }
86
+ }
87
+ },
88
+ async flush(controller) {
89
+ if (combiner) {
90
+ const data = combiner.flush();
91
+ if (data) {
92
+ await controller.enqueue(data);
93
+ }
94
+ }
95
+ },
96
+ });
97
+ }
98
+ }
99
+ //# sourceMappingURL=distribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../src/distribution.ts"],"names":[],"mappings":"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"}
package/esm/duplex.d.ts CHANGED
@@ -1,48 +1,49 @@
1
- import { type ValueOrPromise } from "@yume-chan/struct";
2
- import { WritableStream, type ReadableStream } from "./stream.js";
3
- import { WrapReadableStream } from "./wrap-readable.js";
4
- export interface DuplexStreamFactoryOptions {
5
- /**
6
- * Callback when any `ReadableStream` is cancelled (the user doesn't need any more data),
7
- * or `WritableStream` is ended (the user won't produce any more data),
8
- * or `DuplexStreamFactory#close` is called.
9
- *
10
- * Usually you want to let the other peer know that the duplex stream should be closed.
11
- *
12
- * `dispose` will automatically be called after `close` completes,
13
- * but if you want to wait another peer for a close confirmation and call
14
- * `DuplexStreamFactory#dispose` yourself, you can return `false`
15
- * (or a `Promise` that resolves to `false`) to disable the automatic call.
16
- */
17
- close?: (() => ValueOrPromise<boolean | void>) | undefined;
18
- /**
19
- * Callback when any `ReadableStream` is closed (the other peer doesn't produce any more data),
20
- * or `WritableStream` is aborted (the other peer can't receive any more data),
21
- * or `DuplexStreamFactory#abort` is called.
22
- *
23
- * Usually indicates the other peer has closed the duplex stream. You can clean up
24
- * any resources you have allocated now.
25
- */
26
- dispose?: (() => void | Promise<void>) | undefined;
27
- }
28
- /**
29
- * A factory for creating a duplex stream.
30
- *
31
- * It can create multiple `ReadableStream`s and `WritableStream`s,
32
- * when any of them is closed, all other streams will be closed as well.
33
- */
34
- export declare class DuplexStreamFactory<R, W> {
35
- private readableControllers;
36
- private writers;
37
- private _writableClosed;
38
- get writableClosed(): boolean;
39
- private _closed;
40
- get closed(): Promise<void>;
41
- private options;
42
- constructor(options?: DuplexStreamFactoryOptions);
43
- wrapReadable(readable: ReadableStream<R>): WrapReadableStream<R>;
44
- createWritable(stream: WritableStream<W>): WritableStream<W>;
45
- close(): Promise<void>;
46
- dispose(): Promise<void>;
47
- }
1
+ import type { ValueOrPromise } from "@yume-chan/struct";
2
+ import type { ReadableStream } from "./stream.js";
3
+ import { WritableStream } from "./stream.js";
4
+ import { WrapReadableStream } from "./wrap-readable.js";
5
+ export interface DuplexStreamFactoryOptions {
6
+ /**
7
+ * Callback when any `ReadableStream` is cancelled (the user doesn't need any more data),
8
+ * or `WritableStream` is ended (the user won't produce any more data),
9
+ * or `DuplexStreamFactory#close` is called.
10
+ *
11
+ * Usually you want to let the other peer know that the duplex stream should be closed.
12
+ *
13
+ * `dispose` will automatically be called after `close` completes,
14
+ * but if you want to wait another peer for a close confirmation and call
15
+ * `DuplexStreamFactory#dispose` yourself, you can return `false`
16
+ * (or a `Promise` that resolves to `false`) to disable the automatic call.
17
+ */
18
+ close?: (() => ValueOrPromise<boolean | void>) | undefined;
19
+ /**
20
+ * Callback when any `ReadableStream` is closed (the other peer doesn't produce any more data),
21
+ * or `WritableStream` is aborted (the other peer can't receive any more data),
22
+ * or `DuplexStreamFactory#abort` is called.
23
+ *
24
+ * Usually indicates the other peer has closed the duplex stream. You can clean up
25
+ * any resources you have allocated now.
26
+ */
27
+ dispose?: (() => void | Promise<void>) | undefined;
28
+ }
29
+ /**
30
+ * A factory for creating a duplex stream.
31
+ *
32
+ * It can create multiple `ReadableStream`s and `WritableStream`s,
33
+ * when any of them is closed, all other streams will be closed as well.
34
+ */
35
+ export declare class DuplexStreamFactory<R, W> {
36
+ private readableControllers;
37
+ private writers;
38
+ private _writableClosed;
39
+ get writableClosed(): boolean;
40
+ private _closed;
41
+ get closed(): Promise<void>;
42
+ private options;
43
+ constructor(options?: DuplexStreamFactoryOptions);
44
+ wrapReadable(readable: ReadableStream<R>): WrapReadableStream<R>;
45
+ createWritable(stream: WritableStream<W>): WritableStream<W>;
46
+ close(): Promise<void>;
47
+ dispose(): Promise<void>;
48
+ }
48
49
  //# sourceMappingURL=duplex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"duplex.d.ts","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EACH,cAAc,EACd,KAAK,cAAc,EAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,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;IACjC,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,eAAe,CAAS;IAChC,IAAW,cAAc,YAExB;IAED,OAAO,CAAC,OAAO,CAA+B;IAC9C,IAAW,MAAM,kBAEhB;IAED,OAAO,CAAC,OAAO,CAA6B;gBAEzB,OAAO,CAAC,EAAE,0BAA0B;IAIhD,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAiBhE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAwBtD,KAAK;IAmBL,OAAO;CAcvB"}
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,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;IACjC,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,eAAe,CAAS;IAChC,IAAW,cAAc,YAExB;IAED,OAAO,CAAC,OAAO,CAA+B;IAC9C,IAAW,MAAM,kBAEhB;IAED,OAAO,CAAC,OAAO,CAA6B;gBAEzB,OAAO,CAAC,EAAE,0BAA0B;IAIhD,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAiBhE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAqBtD,KAAK;IAiBL,OAAO;CAcvB"}