@yume-chan/stream-extra 0.0.17 → 0.0.18
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 +12 -0
- package/CHANGELOG.md +8 -1
- package/LICENSE +1 -1
- package/README.md +34 -2
- package/esm/buffered-transform.d.ts +3 -3
- package/esm/buffered-transform.d.ts.map +1 -1
- package/esm/buffered-transform.js +17 -11
- package/esm/buffered-transform.js.map +1 -1
- package/esm/buffered.d.ts +2 -2
- package/esm/buffered.d.ts.map +1 -1
- package/esm/buffered.js +6 -13
- package/esm/buffered.js.map +1 -1
- package/esm/decode-utf8.d.ts.map +1 -1
- package/esm/decode-utf8.js +1 -1
- package/esm/decode-utf8.js.map +1 -1
- package/esm/duplex.d.ts +2 -2
- package/esm/duplex.d.ts.map +1 -1
- package/esm/duplex.js +17 -13
- package/esm/duplex.js.map +1 -1
- package/esm/pipe-from.d.ts +4 -5
- package/esm/pipe-from.d.ts.map +1 -1
- package/esm/pipe-from.js +3 -4
- package/esm/pipe-from.js.map +1 -1
- package/esm/push-readable.d.ts +10 -3
- package/esm/push-readable.d.ts.map +1 -1
- package/esm/push-readable.js +20 -5
- package/esm/push-readable.js.map +1 -1
- package/esm/stream.d.ts +11 -4
- package/esm/stream.d.ts.map +1 -1
- package/esm/stream.js +26 -3
- package/esm/stream.js.map +1 -1
- package/esm/struct-deserialize.d.ts +2 -2
- package/esm/struct-deserialize.d.ts.map +1 -1
- package/esm/struct-deserialize.js +1 -1
- package/esm/struct-deserialize.js.map +1 -1
- package/esm/struct-serialize.d.ts +1 -1
- package/esm/struct-serialize.d.ts.map +1 -1
- package/esm/struct-serialize.js.map +1 -1
- package/esm/trace.d.ts +16 -0
- package/esm/trace.d.ts.map +1 -0
- package/esm/trace.js +131 -0
- package/esm/trace.js.map +1 -0
- package/esm/wrap-readable.d.ts +4 -4
- package/esm/wrap-readable.d.ts.map +1 -1
- package/esm/wrap-readable.js +6 -6
- package/esm/wrap-readable.js.map +1 -1
- package/esm/wrap-writable.d.ts +3 -3
- package/esm/wrap-writable.d.ts.map +1 -1
- package/esm/wrap-writable.js +4 -4
- package/esm/wrap-writable.js.map +1 -1
- package/package.json +12 -9
- package/src/buffered-transform.ts +37 -17
- package/src/buffered.ts +12 -15
- package/src/decode-utf8.ts +3 -2
- package/src/duplex.ts +27 -9
- package/src/pipe-from.ts +3 -4
- package/src/push-readable.ts +79 -44
- package/src/stream.ts +49 -7
- package/src/struct-deserialize.ts +7 -5
- package/src/struct-serialize.ts +4 -2
- package/src/wrap-readable.ts +31 -13
- package/src/wrap-writable.ts +21 -10
- package/tsconfig.build.json +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/native.d.ts +0 -240
- package/esm/native.d.ts.map +0 -1
- package/esm/native.js +0 -60
- package/esm/native.js.map +0 -1
- package/src/native.ts +0 -362
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yume-chan/stream-extra",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "0.0.18",
|
|
6
|
+
"tag": "@yume-chan/stream-extra_v0.0.18",
|
|
7
|
+
"date": "Wed, 25 Jan 2023 21:33:49 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"none": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Change to load native Web Streams API implementation from `globalThis` if available"
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
},
|
|
4
16
|
{
|
|
5
17
|
"version": "0.0.17",
|
|
6
18
|
"tag": "@yume-chan/stream-extra_v0.0.17",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Change Log - @yume-chan/stream-extra
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 25 Jan 2023 21:33:49 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 0.0.18
|
|
6
|
+
Wed, 25 Jan 2023 21:33:49 GMT
|
|
7
|
+
|
|
8
|
+
### Updates
|
|
9
|
+
|
|
10
|
+
- Change to load native Web Streams API implementation from `globalThis` if available
|
|
4
11
|
|
|
5
12
|
## 0.0.17
|
|
6
13
|
Tue, 18 Oct 2022 09:32:30 GMT
|
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,8 +1,40 @@
|
|
|
1
1
|
# @yume-chan/stream-extra
|
|
2
2
|
|
|
3
|
-
Some useful extensions for Web Streams API.
|
|
3
|
+
Some useful extensions for working with binary streams. Conforms to the [Web Streams API](https://streams.spec.whatwg.org/).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Find an implementation
|
|
6
|
+
|
|
7
|
+
If all of `ReadableStream`, `WritableStream` and `TransformStream` fields are available on `globalThis`, they will be used. Otherwise, the [web-streams-polyfill](https://github.com/MattiasBuelens/web-streams-polyfill) package will be used.
|
|
8
|
+
|
|
9
|
+
Google Chrome 89 and Mozilla Firefox 102 provide full support for Web Streams API natively.
|
|
10
|
+
|
|
11
|
+
In Node.js, it's not possible to load the `stream/web` module while keeping the compatibility with both Web and bundlers:
|
|
12
|
+
|
|
13
|
+
- Webpack has poor support with Top Level Await, for example, Hot Module Replacement doesn't work when any module is using TLA.
|
|
14
|
+
- Web doesn't have the `module` module, thus requires a shim in import map.
|
|
15
|
+
|
|
16
|
+
Assigning `ReadableStream`, `WritableStream` and `TransformStream` from `stream/web` module to `globalThis`, before loading this library, will still work. Other custom polyfill can also be loaded this way.
|
|
17
|
+
|
|
18
|
+
## Compatibility issue with `ReadableStream#pipeTo` and `ReadableStream#pipeThrough`
|
|
19
|
+
|
|
20
|
+
The [Web Streams API spec](https://streams.spec.whatwg.org/#readable-stream-pipe-to) specifies that `ReadableStream#pipeTo` must check the argument to be an instance of `WritableStream`, so it can optimize the performance by calling internal methods directly.
|
|
21
|
+
|
|
22
|
+
Native implementations will perform this check, so `new globalThis.ReadableStream().pipeTo(new Polyfill.WritableStream())` will throw an error.
|
|
23
|
+
|
|
24
|
+
The `WrapReadableStream` class can be used to bypass this check:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { WrapReadableStream } from "@yume-chan/stream-extra";
|
|
28
|
+
import { WritableStream as PolyfillWritableStream } from "web-streams-polyfill";
|
|
29
|
+
|
|
30
|
+
const nativeReadable = new globalThis.ReadableStream();
|
|
31
|
+
const wrappedReadable = new WrapReadableStream(new globalThis.ReadableStream());
|
|
32
|
+
|
|
33
|
+
nativeReadable.pipeTo(new PolyfillWritableStream()); // Error
|
|
34
|
+
wrappedReadable.pipeTo(new PolyfillWritableStream()); // OK
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
web-streams-polyfill package's `ReadableStream#pipeTo` only uses public methods, so it can be used with any `WritableStream` implementation.
|
|
6
38
|
|
|
7
39
|
## `BufferedReadableStream`
|
|
8
40
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { BufferedReadableStream } from
|
|
3
|
-
import { ReadableStream,
|
|
1
|
+
import { type ValueOrPromise } from "@yume-chan/struct";
|
|
2
|
+
import { BufferedReadableStream } from "./buffered.js";
|
|
3
|
+
import { ReadableStream, WritableStream, type ReadableWritablePair } from "./stream.js";
|
|
4
4
|
export declare class BufferedTransformStream<T> implements ReadableWritablePair<T, Uint8Array> {
|
|
5
5
|
private _readable;
|
|
6
6
|
get readable(): ReadableStream<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffered-transform.d.ts","sourceRoot":"","sources":["../src/buffered-transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"buffered-transform.d.ts","sourceRoot":"","sources":["../src/buffered-transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EACH,sBAAsB,EAEzB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACH,cAAc,EACd,cAAc,EACd,KAAK,oBAAoB,EAC5B,MAAM,aAAa,CAAC;AAGrB,qBAAa,uBAAuB,CAAC,CAAC,CAClC,YAAW,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC;IAE9C,OAAO,CAAC,SAAS,CAAoB;IACrC,IAAW,QAAQ,sBAElB;IAED,OAAO,CAAC,SAAS,CAA6B;IAC9C,IAAW,QAAQ,+BAElB;gBAGG,SAAS,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,cAAc,CAAC,CAAC,CAAC;CA8CvE"}
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
import { BufferedReadableStream, BufferedReadableStreamEndedError } from
|
|
2
|
-
import { PushReadableStream } from
|
|
3
|
-
import { ReadableStream, WritableStream } from
|
|
1
|
+
import { BufferedReadableStream, BufferedReadableStreamEndedError, } from "./buffered.js";
|
|
2
|
+
import { PushReadableStream, } from "./push-readable.js";
|
|
3
|
+
import { ReadableStream, WritableStream, } from "./stream.js";
|
|
4
4
|
// TODO: BufferedTransformStream: find better implementation
|
|
5
5
|
export class BufferedTransformStream {
|
|
6
6
|
_readable;
|
|
7
|
-
get readable() {
|
|
7
|
+
get readable() {
|
|
8
|
+
return this._readable;
|
|
9
|
+
}
|
|
8
10
|
_writable;
|
|
9
|
-
get writable() {
|
|
11
|
+
get writable() {
|
|
12
|
+
return this._writable;
|
|
13
|
+
}
|
|
10
14
|
constructor(transform) {
|
|
11
15
|
// Convert incoming chunks to a `BufferedReadableStream`
|
|
12
16
|
let sourceStreamController;
|
|
13
|
-
const buffered = new BufferedReadableStream(new PushReadableStream(controller =>
|
|
17
|
+
const buffered = new BufferedReadableStream(new PushReadableStream((controller) => {
|
|
18
|
+
sourceStreamController = controller;
|
|
19
|
+
}));
|
|
14
20
|
this._readable = new ReadableStream({
|
|
15
21
|
async pull(controller) {
|
|
16
22
|
try {
|
|
@@ -18,9 +24,9 @@ export class BufferedTransformStream {
|
|
|
18
24
|
controller.enqueue(value);
|
|
19
25
|
}
|
|
20
26
|
catch (e) {
|
|
21
|
-
//
|
|
22
|
-
// If the `transform`
|
|
23
|
-
//
|
|
27
|
+
// Treat `BufferedReadableStreamEndedError` as a normal end.
|
|
28
|
+
// If the `transform` method doesn't have enough data to return a value,
|
|
29
|
+
// it should throw another error to indicate that.
|
|
24
30
|
if (e instanceof BufferedReadableStreamEndedError) {
|
|
25
31
|
controller.close();
|
|
26
32
|
return;
|
|
@@ -31,8 +37,8 @@ export class BufferedTransformStream {
|
|
|
31
37
|
cancel: (reason) => {
|
|
32
38
|
// Propagate cancel to the source stream
|
|
33
39
|
// So future writes will be rejected
|
|
34
|
-
buffered.cancel(reason);
|
|
35
|
-
}
|
|
40
|
+
return buffered.cancel(reason);
|
|
41
|
+
},
|
|
36
42
|
});
|
|
37
43
|
this._writable = new WritableStream({
|
|
38
44
|
async write(chunk) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffered-transform.js","sourceRoot":"","sources":["../src/buffered-transform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buffered-transform.js","sourceRoot":"","sources":["../src/buffered-transform.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,sBAAsB,EACtB,gCAAgC,GACnC,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,kBAAkB,GAErB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,cAAc,EACd,cAAc,GAEjB,MAAM,aAAa,CAAC;AAErB,4DAA4D;AAC5D,MAAM,OAAO,uBAAuB;IAGxB,SAAS,CAAoB;IACrC,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEO,SAAS,CAA6B;IAC9C,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,YACI,SAAgE;QAEhE,wDAAwD;QACxD,IAAI,sBAAiE,CAAC;QAEtE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CACvC,IAAI,kBAAkB,CAAa,CAAC,UAAU,EAAE,EAAE;YAC9C,sBAAsB,GAAG,UAAU,CAAC;QACxC,CAAC,CAAC,CACL,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAI;YACnC,KAAK,CAAC,IAAI,CAAC,UAAU;gBACjB,IAAI;oBACA,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACxC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC7B;gBAAC,OAAO,CAAC,EAAE;oBACR,4DAA4D;oBAC5D,wEAAwE;oBACxE,kDAAkD;oBAClD,IAAI,CAAC,YAAY,gCAAgC,EAAE;wBAC/C,UAAU,CAAC,KAAK,EAAE,CAAC;wBACnB,OAAO;qBACV;oBACD,MAAM,CAAC,CAAC;iBACX;YACL,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACf,wCAAwC;gBACxC,oCAAoC;gBACpC,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC;YAChC,KAAK,CAAC,KAAK,CAAC,KAAK;gBACb,MAAM,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;YACD,KAAK;gBACD,sBAAsB,CAAC,KAAK,EAAE,CAAC;YACnC,CAAC;YACD,KAAK;gBACD,sBAAsB,CAAC,KAAK,EAAE,CAAC;YACnC,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
package/esm/buffered.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ReadableStream, type ReadableStreamDefaultReader } from "./stream.js";
|
|
2
2
|
export declare class BufferedReadableStreamEndedError extends Error {
|
|
3
3
|
constructor();
|
|
4
4
|
}
|
|
@@ -23,6 +23,6 @@ export declare class BufferedReadableStream {
|
|
|
23
23
|
* @returns A `ReadableStream`
|
|
24
24
|
*/
|
|
25
25
|
release(): ReadableStream<Uint8Array>;
|
|
26
|
-
cancel(reason?:
|
|
26
|
+
cancel(reason?: unknown): Promise<void>;
|
|
27
27
|
}
|
|
28
28
|
//# sourceMappingURL=buffered.d.ts.map
|
package/esm/buffered.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffered.d.ts","sourceRoot":"","sources":["../src/buffered.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"buffered.d.ts","sourceRoot":"","sources":["../src/buffered.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,2BAA2B,EACnC,MAAM,aAAa,CAAC;AAErB,qBAAa,gCAAiC,SAAQ,KAAK;;CAO1D;AAED,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAE3B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAEtD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;gBAEhD,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC;YAKvC,UAAU;YAQV,SAAS;IAmDvB;;;;OAIG;IACI,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAoB7D;;;;OAIG;IACI,OAAO,IAAI,cAAc,CAAC,UAAU,CAAC;IAuBrC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO;CAGjC"}
|
package/esm/buffered.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PushReadableStream } from "./push-readable.js";
|
|
2
2
|
export class BufferedReadableStreamEndedError extends Error {
|
|
3
3
|
constructor() {
|
|
4
|
-
super(
|
|
4
|
+
super("Stream ended");
|
|
5
5
|
// Fix Error's prototype chain when compiling to ES5
|
|
6
6
|
Object.setPrototypeOf(this, new.target.prototype);
|
|
7
7
|
}
|
|
@@ -101,19 +101,12 @@ export class BufferedReadableStream {
|
|
|
101
101
|
await controller.enqueue(this.buffered);
|
|
102
102
|
// Manually pipe the stream
|
|
103
103
|
while (true) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
controller.close();
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
await controller.enqueue(value);
|
|
112
|
-
}
|
|
104
|
+
const { done, value } = await this.reader.read();
|
|
105
|
+
if (done) {
|
|
106
|
+
return;
|
|
113
107
|
}
|
|
114
|
-
|
|
115
|
-
controller.
|
|
116
|
-
break;
|
|
108
|
+
else {
|
|
109
|
+
await controller.enqueue(value);
|
|
117
110
|
}
|
|
118
111
|
}
|
|
119
112
|
});
|
package/esm/buffered.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffered.js","sourceRoot":"","sources":["../src/buffered.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"buffered.js","sourceRoot":"","sources":["../src/buffered.ts"],"names":[],"mappings":"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"}
|
package/esm/decode-utf8.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-utf8.d.ts","sourceRoot":"","sources":["../src/decode-utf8.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decode-utf8.d.ts","sourceRoot":"","sources":["../src/decode-utf8.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,gBAAiB,SAAQ,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC;;CAQxE"}
|
package/esm/decode-utf8.js
CHANGED
package/esm/decode-utf8.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-utf8.js","sourceRoot":"","sources":["../src/decode-utf8.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"decode-utf8.js","sourceRoot":"","sources":["../src/decode-utf8.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,gBAAiB,SAAQ,eAAmC;IACrE;QACI,KAAK,CAAC;YACF,SAAS,CAAC,KAAK,EAAE,UAAU;gBACvB,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
|
package/esm/duplex.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ValueOrPromise } from "@yume-chan/struct";
|
|
2
2
|
import { WritableStream, type ReadableStream } from "./stream.js";
|
|
3
3
|
import { WrapReadableStream } from "./wrap-readable.js";
|
|
4
4
|
export interface DuplexStreamFactoryOptions {
|
|
@@ -7,7 +7,7 @@ export interface DuplexStreamFactoryOptions {
|
|
|
7
7
|
* or `WritableStream` is ended (the user won't produce any more data),
|
|
8
8
|
* or `DuplexStreamFactory#close` is called.
|
|
9
9
|
*
|
|
10
|
-
* Usually you want to let the other peer know that the duplex stream should be
|
|
10
|
+
* Usually you want to let the other peer know that the duplex stream should be closed.
|
|
11
11
|
*
|
|
12
12
|
* `dispose` will automatically be called after `close` completes,
|
|
13
13
|
* but if you want to wait another peer for a close confirmation and call
|
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,KAAK,
|
|
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"}
|
package/esm/duplex.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PromiseResolver } from "@yume-chan/async";
|
|
2
|
-
import { WritableStream } from "./stream.js";
|
|
2
|
+
import { WritableStream, } from "./stream.js";
|
|
3
3
|
import { WrapReadableStream } from "./wrap-readable.js";
|
|
4
4
|
/**
|
|
5
5
|
* A factory for creating a duplex stream.
|
|
@@ -11,9 +11,13 @@ export class DuplexStreamFactory {
|
|
|
11
11
|
readableControllers = [];
|
|
12
12
|
writers = [];
|
|
13
13
|
_writableClosed = false;
|
|
14
|
-
get writableClosed() {
|
|
14
|
+
get writableClosed() {
|
|
15
|
+
return this._writableClosed;
|
|
16
|
+
}
|
|
15
17
|
_closed = new PromiseResolver();
|
|
16
|
-
get closed() {
|
|
18
|
+
get closed() {
|
|
19
|
+
return this._closed.promise;
|
|
20
|
+
}
|
|
17
21
|
options;
|
|
18
22
|
constructor(options) {
|
|
19
23
|
this.options = options ?? {};
|
|
@@ -49,10 +53,9 @@ export class DuplexStreamFactory {
|
|
|
49
53
|
await this.close();
|
|
50
54
|
},
|
|
51
55
|
close: async () => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
catch { }
|
|
56
|
+
await writer.close().catch((e) => {
|
|
57
|
+
void e;
|
|
58
|
+
});
|
|
56
59
|
await this.close();
|
|
57
60
|
},
|
|
58
61
|
});
|
|
@@ -63,15 +66,14 @@ export class DuplexStreamFactory {
|
|
|
63
66
|
}
|
|
64
67
|
this._writableClosed = true;
|
|
65
68
|
// Call `close` first, so it can still write data to `WritableStream`s.
|
|
66
|
-
if (await this.options.close?.() !== false) {
|
|
69
|
+
if ((await this.options.close?.()) !== false) {
|
|
67
70
|
// `close` can return `false` to disable automatic `dispose`.
|
|
68
71
|
await this.dispose();
|
|
69
72
|
}
|
|
70
73
|
for (const writer of this.writers) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
catch { }
|
|
74
|
+
await writer.close().catch((e) => {
|
|
75
|
+
void e;
|
|
76
|
+
});
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
79
|
async dispose() {
|
|
@@ -81,7 +83,9 @@ export class DuplexStreamFactory {
|
|
|
81
83
|
try {
|
|
82
84
|
controller.close();
|
|
83
85
|
}
|
|
84
|
-
catch {
|
|
86
|
+
catch (e) {
|
|
87
|
+
void e;
|
|
88
|
+
}
|
|
85
89
|
}
|
|
86
90
|
await this.options.dispose?.();
|
|
87
91
|
}
|
package/esm/duplex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplex.js","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"duplex.js","sourceRoot":"","sources":["../src/duplex.ts"],"names":[],"mappings":"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"}
|
package/esm/pipe-from.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { WritableStream, type ReadableWritablePair } from "./stream.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* `pair.writable`, when pipe `pair.readable` to `writable`.
|
|
3
|
+
* Pipe `pair.readable` to `writable`, then returns `pair.writable`.
|
|
5
4
|
*
|
|
6
|
-
*
|
|
5
|
+
* This is the opposite of `ReadableStream#pipeThrough()`.
|
|
7
6
|
*
|
|
8
7
|
* @param writable The `WritableStream` to write to.
|
|
9
8
|
* @param pair A `TransformStream` that converts chunks.
|
|
10
|
-
* @returns
|
|
9
|
+
* @returns `pair`'s `writable` stream.
|
|
11
10
|
*/
|
|
12
|
-
export declare function pipeFrom<W, T>(writable: WritableStream<W>, pair: ReadableWritablePair<W, T>): WritableStream<T>;
|
|
11
|
+
export declare function pipeFrom<W, T>(writable: WritableStream<W>, pair: ReadableWritablePair<W, T>): import("web-streams-polyfill").WritableStream<T>;
|
|
13
12
|
//# sourceMappingURL=pipe-from.d.ts.map
|
package/esm/pipe-from.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe-from.d.ts","sourceRoot":"","sources":["../src/pipe-from.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"pipe-from.d.ts","sourceRoot":"","sources":["../src/pipe-from.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,oDAc3F"}
|
package/esm/pipe-from.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { WritableStream } from "./stream.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* `pair.writable`, when pipe `pair.readable` to `writable`.
|
|
3
|
+
* Pipe `pair.readable` to `writable`, then returns `pair.writable`.
|
|
5
4
|
*
|
|
6
|
-
*
|
|
5
|
+
* This is the opposite of `ReadableStream#pipeThrough()`.
|
|
7
6
|
*
|
|
8
7
|
* @param writable The `WritableStream` to write to.
|
|
9
8
|
* @param pair A `TransformStream` that converts chunks.
|
|
10
|
-
* @returns
|
|
9
|
+
* @returns `pair`'s `writable` stream.
|
|
11
10
|
*/
|
|
12
11
|
export function pipeFrom(writable, pair) {
|
|
13
12
|
const writer = pair.writable.getWriter();
|
package/esm/pipe-from.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe-from.js","sourceRoot":"","sources":["../src/pipe-from.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"pipe-from.js","sourceRoot":"","sources":["../src/pipe-from.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAC;AAExE;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAO,QAA2B,EAAE,IAAgC;IACxF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;SACrB,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,IAAI,cAAc,CAAI;QACzB,KAAK,CAAC,KAAK,CAAC,KAAK;YACb,MAAM,MAAM,CAAC,KAAK,CAAC;YACnB,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,KAAK;YACP,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC;QACf,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
|
package/esm/push-readable.d.ts
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
import { AbortSignal, QueuingStrategy
|
|
1
|
+
import { ReadableStream, type AbortSignal, type QueuingStrategy } from "./stream.js";
|
|
2
2
|
export interface PushReadableStreamController<T> {
|
|
3
3
|
abortSignal: AbortSignal;
|
|
4
4
|
enqueue(chunk: T): Promise<void>;
|
|
5
5
|
close(): void;
|
|
6
|
-
error(e?:
|
|
6
|
+
error(e?: unknown): void;
|
|
7
7
|
}
|
|
8
|
-
export
|
|
8
|
+
export type PushReadableStreamSource<T> = (controller: PushReadableStreamController<T>) => void | Promise<void>;
|
|
9
9
|
export declare class PushReadableStream<T> extends ReadableStream<T> {
|
|
10
|
+
/**
|
|
11
|
+
* Create a new `PushReadableStream` from a source.
|
|
12
|
+
*
|
|
13
|
+
* @param source If `source` returns a `Promise`, the stream will be closed
|
|
14
|
+
* when the `Promise` is resolved, and be errored when the `Promise` is rejected.
|
|
15
|
+
* @param strategy
|
|
16
|
+
*/
|
|
10
17
|
constructor(source: PushReadableStreamSource<T>, strategy?: QueuingStrategy<T>);
|
|
11
18
|
}
|
|
12
19
|
//# sourceMappingURL=push-readable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-readable.d.ts","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"push-readable.d.ts","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,4BAA4B,CAAC,CAAC;IAC3C,WAAW,EAAE,WAAW,CAAC;IAEzB,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,KAAK,IAAI,IAAI,CAAC;IAEd,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,CACtC,UAAU,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAC1C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACxD;;;;;;OAMG;gBAEC,MAAM,EAAE,wBAAwB,CAAC,CAAC,CAAC,EACnC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;CA+DpC"}
|
package/esm/push-readable.js
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
|
-
import { PromiseResolver } from
|
|
2
|
-
import { AbortController, ReadableStream } from "./stream.js";
|
|
1
|
+
import { PromiseResolver } from "@yume-chan/async";
|
|
2
|
+
import { AbortController, ReadableStream, } from "./stream.js";
|
|
3
3
|
export class PushReadableStream extends ReadableStream {
|
|
4
|
+
/**
|
|
5
|
+
* Create a new `PushReadableStream` from a source.
|
|
6
|
+
*
|
|
7
|
+
* @param source If `source` returns a `Promise`, the stream will be closed
|
|
8
|
+
* when the `Promise` is resolved, and be errored when the `Promise` is rejected.
|
|
9
|
+
* @param strategy
|
|
10
|
+
*/
|
|
4
11
|
constructor(source, strategy) {
|
|
5
12
|
let waterMarkLow;
|
|
6
13
|
const canceled = new AbortController();
|
|
7
14
|
super({
|
|
8
15
|
start: (controller) => {
|
|
9
|
-
source({
|
|
16
|
+
const result = source({
|
|
10
17
|
abortSignal: canceled.signal,
|
|
11
18
|
async enqueue(chunk) {
|
|
12
19
|
if (canceled.signal.aborted) {
|
|
13
20
|
// If the stream is already cancelled,
|
|
14
21
|
// throw immediately.
|
|
15
|
-
throw canceled.signal.reason ??
|
|
22
|
+
throw (canceled.signal.reason ??
|
|
23
|
+
new Error("Aborted"));
|
|
16
24
|
}
|
|
17
25
|
// Only when the stream is errored, `desiredSize` will be `null`.
|
|
18
26
|
// But since `null <= 0` is `true`
|
|
@@ -33,11 +41,18 @@ export class PushReadableStream extends ReadableStream {
|
|
|
33
41
|
controller.error(e);
|
|
34
42
|
},
|
|
35
43
|
});
|
|
44
|
+
if (result && "then" in result) {
|
|
45
|
+
result.then(() => {
|
|
46
|
+
controller.close();
|
|
47
|
+
}, (e) => {
|
|
48
|
+
controller.error(e);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
36
51
|
},
|
|
37
52
|
pull: () => {
|
|
38
53
|
waterMarkLow?.resolve();
|
|
39
54
|
},
|
|
40
|
-
cancel:
|
|
55
|
+
cancel: (reason) => {
|
|
41
56
|
canceled.abort(reason);
|
|
42
57
|
waterMarkLow?.reject(reason);
|
|
43
58
|
},
|
package/esm/push-readable.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"push-readable.js","sourceRoot":"","sources":["../src/push-readable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EACH,eAAe,EACf,cAAc,GAGjB,MAAM,aAAa,CAAC;AAgBrB,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IACxD;;;;;;OAMG;IACH,YACI,MAAmC,EACnC,QAA6B;QAE7B,IAAI,YAA+C,CAAC;QACpD,MAAM,QAAQ,GAAoB,IAAI,eAAe,EAAE,CAAC;QAExD,KAAK,CACD;YACI,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,CAAC;oBAClB,WAAW,EAAE,QAAQ,CAAC,MAAM;oBAC5B,KAAK,CAAC,OAAO,CAAC,KAAK;wBACf,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;4BACzB,sCAAsC;4BACtC,qBAAqB;4BACrB,MAAM,CACF,QAAQ,CAAC,MAAM,CAAC,MAAM;gCACtB,IAAI,KAAK,CAAC,SAAS,CAAC,CACvB,CAAC;yBACL;wBAED,iEAAiE;wBACjE,kCAAkC;wBAClC,qEAAqE;wBACrE,yCAAyC;wBACzC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;4BACpC,YAAY,GAAG,IAAI,eAAe,EAAQ,CAAC;4BAC3C,MAAM,YAAY,CAAC,OAAO,CAAC;yBAC9B;wBAED,+CAA+C;wBAC/C,oCAAoC;wBACpC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC;oBACD,KAAK;wBACD,UAAU,CAAC,KAAK,EAAE,CAAC;oBACvB,CAAC;oBACD,KAAK,CAAC,CAAC;wBACH,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC;iBACJ,CAAC,CAAC;gBAEH,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE;oBAC5B,MAAM,CAAC,IAAI,CACP,GAAG,EAAE;wBACD,UAAU,CAAC,KAAK,EAAE,CAAC;oBACvB,CAAC,EACD,CAAC,CAAC,EAAE,EAAE;wBACF,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACxB,CAAC,CACJ,CAAC;iBACL;YACL,CAAC;YACD,IAAI,EAAE,GAAG,EAAE;gBACP,YAAY,EAAE,OAAO,EAAE,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACf,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACvB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;SACJ,EACD,QAAQ,CACX,CAAC;IACN,CAAC;CACJ"}
|
package/esm/stream.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export * from
|
|
1
|
+
import { ReadableStream as ReadableStreamPolyfill, TransformStream as TransformStreamPolyfill, WritableStream as WritableStreamPolyfill, type AbortSignal } from "web-streams-polyfill";
|
|
2
|
+
export * from "web-streams-polyfill";
|
|
3
3
|
/** A controller object that allows you to abort one or more DOM requests as and when desired. */
|
|
4
4
|
export interface AbortController {
|
|
5
5
|
/**
|
|
@@ -11,8 +11,15 @@ export interface AbortController {
|
|
|
11
11
|
*/
|
|
12
12
|
abort(reason?: any): void;
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
interface AbortControllerConstructor {
|
|
15
15
|
prototype: AbortController;
|
|
16
16
|
new (): AbortController;
|
|
17
|
-
}
|
|
17
|
+
}
|
|
18
|
+
export declare const AbortController: AbortControllerConstructor;
|
|
19
|
+
export type ReadableStream<R = any> = ReadableStreamPolyfill<R>;
|
|
20
|
+
export declare let ReadableStream: typeof ReadableStreamPolyfill;
|
|
21
|
+
export type WritableStream<W = any> = WritableStreamPolyfill<W>;
|
|
22
|
+
export declare let WritableStream: typeof WritableStreamPolyfill;
|
|
23
|
+
export type TransformStream<I = any, O = any> = TransformStreamPolyfill<I, O>;
|
|
24
|
+
export declare let TransformStream: typeof TransformStreamPolyfill;
|
|
18
25
|
//# sourceMappingURL=stream.d.ts.map
|
package/esm/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,IAAI,sBAAsB,EACxC,eAAe,IAAI,uBAAuB,EAC1C,cAAc,IAAI,sBAAsB,EACxC,KAAK,WAAW,EACnB,MAAM,sBAAsB,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AAErC,iGAAiG;AACjG,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CAC7B;AAED,UAAU,0BAA0B;IAChC,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,eAAe,CAAC;CAC3B;AAWD,eAAO,MAAM,eAAe,4BAAyB,CAAC;AAEtD,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,GAAG,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAChE,eAAO,IAAI,cAAc,+BAAyB,CAAC;AAEnD,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,GAAG,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAChE,eAAO,IAAI,cAAc,+BAAyB,CAAC;AAEnD,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9E,eAAO,IAAI,eAAe,gCAA0B,CAAC"}
|
package/esm/stream.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
1
|
+
import { ReadableStream as ReadableStreamPolyfill, TransformStream as TransformStreamPolyfill, WritableStream as WritableStreamPolyfill, } from "web-streams-polyfill";
|
|
2
|
+
export * from "web-streams-polyfill";
|
|
3
|
+
const GLOBAL = globalThis;
|
|
4
|
+
export const AbortController = GLOBAL.AbortController;
|
|
5
|
+
export let ReadableStream = ReadableStreamPolyfill;
|
|
6
|
+
export let WritableStream = WritableStreamPolyfill;
|
|
7
|
+
export let TransformStream = TransformStreamPolyfill;
|
|
8
|
+
if (GLOBAL.ReadableStream && GLOBAL.WritableStream && GLOBAL.TransformStream) {
|
|
9
|
+
// Use browser native implementation
|
|
10
|
+
ReadableStream = GLOBAL.ReadableStream;
|
|
11
|
+
WritableStream = GLOBAL.WritableStream;
|
|
12
|
+
TransformStream = GLOBAL.TransformStream;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
// TODO: enable loading Node.js stream implementation when bundler supports Top Level Await
|
|
16
|
+
// try {
|
|
17
|
+
// // Use Node.js native implementation
|
|
18
|
+
// const MODULE_NAME = "node:stream/web";
|
|
19
|
+
// const StreamWeb = (await import(MODULE_NAME)) as GlobalExtension;
|
|
20
|
+
// ReadableStream = StreamWeb.ReadableStream;
|
|
21
|
+
// WritableStream = StreamWeb.WritableStream;
|
|
22
|
+
// TransformStream = StreamWeb.TransformStream;
|
|
23
|
+
// } catch {
|
|
24
|
+
// // ignore
|
|
25
|
+
// }
|
|
26
|
+
}
|
|
4
27
|
//# sourceMappingURL=stream.js.map
|
package/esm/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,IAAI,sBAAsB,EACxC,eAAe,IAAI,uBAAuB,EAC1C,cAAc,IAAI,sBAAsB,GAE3C,MAAM,sBAAsB,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AA2BrC,MAAM,MAAM,GAAG,UAAwC,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAGtD,MAAM,CAAC,IAAI,cAAc,GAAG,sBAAsB,CAAC;AAGnD,MAAM,CAAC,IAAI,cAAc,GAAG,sBAAsB,CAAC;AAGnD,MAAM,CAAC,IAAI,eAAe,GAAG,uBAAuB,CAAC;AAErD,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,eAAe,EAAE;IAC1E,oCAAoC;IACpC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACvC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACvC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;CAC5C;KAAM;IACH,2FAA2F;IAC3F,QAAQ;IACR,2CAA2C;IAC3C,6CAA6C;IAC7C,wEAAwE;IACxE,iDAAiD;IACjD,iDAAiD;IACjD,mDAAmD;IACnD,YAAY;IACZ,gBAAgB;IAChB,IAAI;CACP"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type Struct from "@yume-chan/struct";
|
|
2
|
-
import type
|
|
3
|
-
import { BufferedTransformStream } from
|
|
2
|
+
import { type StructValueType } from "@yume-chan/struct";
|
|
3
|
+
import { BufferedTransformStream } from "./buffered-transform.js";
|
|
4
4
|
export declare class StructDeserializeStream<T extends Struct<any, any, any, any>> extends BufferedTransformStream<StructValueType<T>> {
|
|
5
5
|
constructor(struct: T);
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"struct-deserialize.d.ts","sourceRoot":"","sources":["../src/struct-deserialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"struct-deserialize.d.ts","sourceRoot":"","sources":["../src/struct-deserialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,uBAAuB,CAChC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CACtC,SAAQ,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,EAAE,CAAC;CAK/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"struct-deserialize.js","sourceRoot":"","sources":["../src/struct-deserialize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"struct-deserialize.js","sourceRoot":"","sources":["../src/struct-deserialize.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,OAAO,uBAEX,SAAQ,uBAA2C;IACjD,YAAmB,MAAS;QACxB,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YACb,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|