@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.
- package/CHANGELOG.json +33 -21
- package/CHANGELOG.md +8 -2
- package/README.md +1 -1
- package/esm/buffered-transform.d.ts +11 -10
- package/esm/buffered-transform.d.ts.map +1 -1
- package/esm/buffered-transform.js +55 -55
- package/esm/buffered-transform.js.map +1 -1
- package/esm/buffered.d.ts +29 -27
- package/esm/buffered.d.ts.map +1 -1
- package/esm/buffered.js +128 -123
- package/esm/buffered.js.map +1 -1
- package/esm/chunk.d.ts +7 -4
- package/esm/chunk.d.ts.map +1 -1
- package/esm/chunk.js +48 -7
- package/esm/chunk.js.map +1 -1
- package/esm/consumable.d.ts +53 -0
- package/esm/consumable.d.ts.map +1 -0
- package/esm/consumable.js +178 -0
- package/esm/consumable.js.map +1 -0
- package/esm/decode-utf8.d.ts +4 -4
- package/esm/decode-utf8.js +11 -11
- package/esm/distribution.d.ts +24 -0
- package/esm/distribution.d.ts.map +1 -0
- package/esm/distribution.js +99 -0
- package/esm/distribution.js.map +1 -0
- package/esm/duplex.d.ts +48 -47
- package/esm/duplex.d.ts.map +1 -1
- package/esm/duplex.js +90 -92
- package/esm/duplex.js.map +1 -1
- package/esm/gather-string.d.ts +6 -6
- package/esm/gather-string.d.ts.map +1 -1
- package/esm/gather-string.js +15 -13
- package/esm/gather-string.js.map +1 -1
- package/esm/index.d.ts +16 -15
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +16 -15
- package/esm/index.js.map +1 -1
- package/esm/inspect.d.ts +4 -4
- package/esm/inspect.js +11 -11
- package/esm/pipe-from.d.ts +12 -11
- package/esm/pipe-from.d.ts.map +1 -1
- package/esm/pipe-from.js +23 -25
- package/esm/pipe-from.js.map +1 -1
- package/esm/push-readable.d.ts +19 -18
- package/esm/push-readable.d.ts.map +1 -1
- package/esm/push-readable.js +61 -61
- package/esm/push-readable.js.map +1 -1
- package/esm/split-string.d.ts +4 -4
- package/esm/split-string.d.ts.map +1 -1
- package/esm/split-string.js +24 -24
- package/esm/split-string.js.map +1 -1
- package/esm/stream.d.ts +25 -24
- package/esm/stream.d.ts.map +1 -1
- package/esm/stream.js +26 -26
- package/esm/stream.js.map +1 -1
- package/esm/struct-deserialize.d.ts +6 -6
- package/esm/struct-deserialize.d.ts.map +1 -1
- package/esm/struct-deserialize.js +8 -8
- package/esm/struct-serialize.d.ts +5 -5
- package/esm/struct-serialize.js +10 -10
- package/esm/trace.d.ts +3 -3
- package/esm/wrap-readable.d.ts +21 -20
- package/esm/wrap-readable.d.ts.map +1 -1
- package/esm/wrap-readable.js +56 -56
- package/esm/wrap-readable.js.map +1 -1
- package/esm/wrap-writable.d.ts +14 -12
- package/esm/wrap-writable.d.ts.map +1 -1
- package/esm/wrap-writable.js +62 -52
- package/esm/wrap-writable.js.map +1 -1
- package/package.json +7 -6
- package/src/buffered-transform.ts +5 -10
- package/src/buffered.ts +7 -5
- package/src/consumable.ts +281 -0
- package/src/distribution.ts +113 -0
- package/src/duplex.ts +15 -16
- package/src/gather-string.ts +5 -3
- package/src/index.ts +16 -15
- package/src/inspect.ts +1 -1
- package/src/pipe-from.ts +8 -6
- package/src/push-readable.ts +3 -7
- package/src/split-string.ts +5 -2
- package/src/stream.ts +1 -1
- package/src/struct-deserialize.ts +1 -1
- package/src/wrap-readable.ts +5 -5
- package/src/wrap-writable.ts +16 -4
- package/tsconfig.build.tsbuildinfo +1 -1
- 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
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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,
|
|
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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"}
|
package/esm/decode-utf8.d.ts
CHANGED
|
@@ -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
|
package/esm/decode-utf8.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,cAAc;IACf,SAAS,CAAS;IACT,OAAO,CAAa;IAC7B,OAAO,CAAS;IAChB,UAAU,CAAS;IAE3B,YAAmB,IAAY;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACI,CAAC,IAAI,CAAC,IAAgB;QACzB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE;YACpB,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CACZ,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EACjC,IAAI,CAAC,OAAO,CACf,CAAC;gBACF,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC;gBAC1B,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;gBAE7B,MAAM,IAAI,CAAC,OAAO,CAAC;gBACnB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;gBAEjC,IAAI,SAAS,KAAK,CAAC,EAAE;oBACjB,OAAO;iBACV;aACJ;iBAAM;gBACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;gBAC1B,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;gBAC7B,OAAO;aACV;SACJ;QAED,OAAO,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,CAAC;YACb,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;SAC/B;QAED,IAAI,SAAS,GAAG,CAAC,EAAE;YACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;YAC1B,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;SAChC;IACL,CAAC;IAEM,KAAK;QACR,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE;YACpB,OAAO,SAAS,CAAC;SACpB;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAED,MAAM,OAAO,kBAAmB,SAAQ,yBAGvC;IACG,YAAmB,IAAY,EAAE,OAAO,GAAG,KAAK;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,KAAK,CAAC;YACF,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU;gBAC7B,IAAI,QAAQ,EAAE;oBACV,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;wBACvC,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;qBACpC;iBACJ;qBAAM;oBACH,IAAI,MAAM,GAAG,CAAC,CAAC;oBACf,IAAI,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;oBACjC,OAAO,SAAS,GAAG,CAAC,EAAE;wBAClB,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC;wBAC1B,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;wBACtD,MAAM,GAAG,GAAG,CAAC;wBACb,SAAS,IAAI,IAAI,CAAC;qBACrB;iBACJ;YACL,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,UAAU;gBAClB,IAAI,QAAQ,EAAE;oBACV,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC9B,IAAI,IAAI,EAAE;wBACN,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;qBAClC;iBACJ;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
package/esm/duplex.d.ts
CHANGED
|
@@ -1,48 +1,49 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
* or `
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*
|
|
21
|
-
* or `
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
private
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
package/esm/duplex.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplex.d.ts","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
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"}
|