@adviser/cement 0.5.32 → 0.5.33
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/cjs/utils/string2stream.cjs +7 -4
- package/cjs/utils/string2stream.cjs.map +1 -1
- package/cjs/utils/string2stream.d.ts +2 -2
- package/cjs/utils/string2stream.d.ts.map +1 -1
- package/cjs/utils/tee-writer.cjs +16 -9
- package/cjs/utils/tee-writer.cjs.map +1 -1
- package/cjs/utils/tee-writer.d.ts.map +1 -1
- package/cjs/utils/tee-writer.test.cjs +60 -20
- package/cjs/utils/tee-writer.test.cjs.map +1 -1
- package/cjs/version.cjs +1 -1
- package/deno.json +1 -1
- package/esm/utils/string2stream.d.ts +2 -2
- package/esm/utils/string2stream.d.ts.map +1 -1
- package/esm/utils/string2stream.js +7 -4
- package/esm/utils/string2stream.js.map +1 -1
- package/esm/utils/tee-writer.d.ts.map +1 -1
- package/esm/utils/tee-writer.js +16 -9
- package/esm/utils/tee-writer.js.map +1 -1
- package/esm/utils/tee-writer.test.js +60 -20
- package/esm/utils/tee-writer.test.js.map +1 -1
- package/esm/version.js +1 -1
- package/package.json +2 -2
- package/src/utils/string2stream.ts +10 -4
- package/src/utils/tee-writer.ts +16 -8
- package/ts/cjs/utils/string2stream.d.ts +2 -2
- package/ts/cjs/utils/string2stream.d.ts.map +1 -1
- package/ts/cjs/utils/string2stream.js +7 -4
- package/ts/cjs/utils/string2stream.js.map +1 -1
- package/ts/cjs/utils/tee-writer.d.ts.map +1 -1
- package/ts/cjs/utils/tee-writer.js +16 -9
- package/ts/cjs/utils/tee-writer.js.map +1 -1
- package/ts/cjs/utils/tee-writer.test.js +60 -20
- package/ts/cjs/utils/tee-writer.test.js.map +1 -1
- package/ts/cjs/version.js +1 -1
- package/ts/esm/utils/string2stream.d.ts +2 -2
- package/ts/esm/utils/string2stream.d.ts.map +1 -1
- package/ts/esm/utils/string2stream.js +7 -4
- package/ts/esm/utils/string2stream.js.map +1 -1
- package/ts/esm/utils/tee-writer.d.ts.map +1 -1
- package/ts/esm/utils/tee-writer.js +16 -9
- package/ts/esm/utils/tee-writer.js.map +1 -1
- package/ts/esm/utils/tee-writer.test.js +60 -20
- package/ts/esm/utils/tee-writer.test.js.map +1 -1
- package/ts/esm/version.js +1 -1
|
@@ -3,13 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.string2stream = string2stream;
|
|
4
4
|
exports.uint8array2stream = uint8array2stream;
|
|
5
5
|
const txt_en_decoder_js_1 = require("../txt-en-decoder.cjs");
|
|
6
|
-
function string2stream(
|
|
7
|
-
|
|
6
|
+
function string2stream(strOrArray, ende = (0, txt_en_decoder_js_1.TxtEnDecoderSingleton)()) {
|
|
7
|
+
const sa = Array.isArray(strOrArray) ? strOrArray : [strOrArray];
|
|
8
|
+
return uint8array2stream(...sa.map((s) => ende.encode(s)));
|
|
8
9
|
}
|
|
9
|
-
function uint8array2stream(
|
|
10
|
+
function uint8array2stream(...uint8) {
|
|
10
11
|
return new ReadableStream({
|
|
11
12
|
start(controller) {
|
|
12
|
-
|
|
13
|
+
for (const chunk of uint8) {
|
|
14
|
+
controller.enqueue(chunk);
|
|
15
|
+
}
|
|
13
16
|
controller.close();
|
|
14
17
|
},
|
|
15
18
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string2stream.js","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":";;;;AAAA,4DAA2E;AAkB3E,
|
|
1
|
+
{"version":3,"file":"string2stream.js","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":";;;;AAAA,4DAA2E;AAkB3E,uBACE,UAA6B,EAC7B,IAAI,GAAiB,IAAA,yCAAqB,GAAE,EAChB;IAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACjE,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,CAC5D;AAgBD,2BAAkC,GAAG,KAAmB,EAA8B;IACpF,OAAO,IAAI,cAAc,CAAa;QACpC,KAAK,CAAC,UAAU,EAAQ;YACtB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,UAAU,CAAC,KAAK,EAAE,CAAC;QAAA,CACpB;KACF,CAAC,CAAC;AAAA,CACJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { TxtEnDecoder } from "../txt-en-decoder.js";
|
|
2
|
-
export declare function string2stream(
|
|
3
|
-
export declare function uint8array2stream(
|
|
2
|
+
export declare function string2stream(strOrArray: string | string[], ende?: TxtEnDecoder): ReadableStream<Uint8Array>;
|
|
3
|
+
export declare function uint8array2stream(...uint8: Uint8Array[]): ReadableStream<Uint8Array>;
|
|
4
4
|
//# sourceMappingURL=string2stream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string2stream.d.ts","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAkB3E,wBAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"string2stream.d.ts","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAkB3E,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,IAAI,GAAE,YAAsC,GAC3C,cAAc,CAAC,UAAU,CAAC,CAG5B;AAgBD,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CASpF"}
|
package/cjs/utils/tee-writer.cjs
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.teeWriter = teeWriter;
|
|
4
4
|
const result_js_1 = require("../result.cjs");
|
|
5
5
|
async function teeWriter(peers, inStream) {
|
|
6
|
-
let activeStreams = await Promise.allSettled(peers.map((p) => p.begin())).then((r) => r.flatMap((r) => (r.status === "fulfilled" && r.value.isOk() ? [r.value.Ok()] : [])));
|
|
6
|
+
let activeStreams = await Promise.allSettled(peers.map((p) => (0, result_js_1.exception2Result)(() => p.begin()))).then((r) => r.flatMap((r) => (r.status === "fulfilled" && r.value.isOk() ? [r.value.Ok()] : [])));
|
|
7
7
|
const reader = inStream.getReader();
|
|
8
8
|
while (activeStreams.length > 0) {
|
|
9
9
|
const rRead = await (0, result_js_1.exception2Result)(() => reader.read());
|
|
@@ -14,20 +14,27 @@ async function teeWriter(peers, inStream) {
|
|
|
14
14
|
const { value, done } = rRead.Ok();
|
|
15
15
|
if (done)
|
|
16
16
|
break;
|
|
17
|
-
const writeResults = await Promise.allSettled(activeStreams.map((stream) => stream.write(value)));
|
|
17
|
+
const writeResults = await Promise.allSettled(activeStreams.map((stream) => (0, result_js_1.exception2Result)(() => stream.write(value))));
|
|
18
18
|
await Promise.allSettled(writeResults.flatMap((r, i) => {
|
|
19
|
-
if (r.status === "rejected")
|
|
20
|
-
return
|
|
19
|
+
if (r.status === "rejected" || r.value.isErr())
|
|
20
|
+
return (0, result_js_1.exception2Result)(() => activeStreams[i].cancel());
|
|
21
21
|
return [];
|
|
22
22
|
}));
|
|
23
|
-
activeStreams = activeStreams.filter((_, i) => writeResults[i].status === "fulfilled");
|
|
23
|
+
activeStreams = activeStreams.filter((_, i) => writeResults[i].status === "fulfilled" && writeResults[i].value.isOk());
|
|
24
24
|
}
|
|
25
25
|
if (activeStreams.length === 0) {
|
|
26
|
-
await reader.cancel();
|
|
26
|
+
await (0, result_js_1.exception2Result)(() => reader.cancel());
|
|
27
27
|
return result_js_1.Result.Err(new Error("all peers failed"));
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
while (activeStreams.length >= 1) {
|
|
30
|
+
const [winner, ...losers] = activeStreams;
|
|
31
|
+
const rClose = await (0, result_js_1.exception2Result)(() => winner.close());
|
|
32
|
+
if (rClose.isOk()) {
|
|
33
|
+
await Promise.allSettled(losers.map((stream) => (0, result_js_1.exception2Result)(() => stream.cancel())));
|
|
34
|
+
return result_js_1.Result.Ok({ peer: winner });
|
|
35
|
+
}
|
|
36
|
+
activeStreams = losers;
|
|
37
|
+
}
|
|
38
|
+
return result_js_1.Result.Err("all peers failed to close successfully");
|
|
32
39
|
}
|
|
33
40
|
//# sourceMappingURL=tee-writer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tee-writer.js","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":";;;AAAA,4CAAwD;AAiBjD,KAAK,oBAAoB,KAAa,EAAE,QAAoC,EAAgC;IACjH,IAAI,aAAa,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"tee-writer.js","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tee-writer.d.ts","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,UAAU;IACxC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAE5B;AACD,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,UAAU;IAClC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAE3B;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"tee-writer.d.ts","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,UAAU;IACxC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAE5B;AACD,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,UAAU;IAClC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAE3B;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAuCjH"}
|
|
@@ -3,16 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const vitest_1 = require("vitest");
|
|
4
4
|
const tee_writer_js_1 = require("./tee-writer.cjs");
|
|
5
5
|
const result_js_1 = require("../result.cjs");
|
|
6
|
-
|
|
7
|
-
return new ReadableStream({
|
|
8
|
-
start(controller) {
|
|
9
|
-
for (const chunk of chunks) {
|
|
10
|
-
controller.enqueue(chunk);
|
|
11
|
-
}
|
|
12
|
-
controller.close();
|
|
13
|
-
},
|
|
14
|
-
});
|
|
15
|
-
}
|
|
6
|
+
const string2stream_js_1 = require("./string2stream.cjs");
|
|
16
7
|
function makePeerStream(overrides = {}) {
|
|
17
8
|
return {
|
|
18
9
|
write: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
@@ -21,8 +12,8 @@ function makePeerStream(overrides = {}) {
|
|
|
21
12
|
...overrides,
|
|
22
13
|
};
|
|
23
14
|
}
|
|
24
|
-
function makePeer(peerStream) {
|
|
25
|
-
return { begin: vitest_1.vi.fn().mockResolvedValue(result_js_1.Result.Ok(peerStream)) };
|
|
15
|
+
function makePeer(peerStream, overrides = {}) {
|
|
16
|
+
return { begin: vitest_1.vi.fn().mockResolvedValue(result_js_1.Result.Ok(peerStream)), ...overrides };
|
|
26
17
|
}
|
|
27
18
|
(0, vitest_1.describe)("teeWriter", () => {
|
|
28
19
|
const chunk1 = new Uint8Array([1, 2, 3]);
|
|
@@ -30,7 +21,7 @@ function makePeer(peerStream) {
|
|
|
30
21
|
(0, vitest_1.it)("writes all chunks to a single peer and commits", async () => {
|
|
31
22
|
const ps = makePeerStream();
|
|
32
23
|
const peer = makePeer(ps);
|
|
33
|
-
const result = await (0, tee_writer_js_1.teeWriter)([peer],
|
|
24
|
+
const result = await (0, tee_writer_js_1.teeWriter)([peer], (0, string2stream_js_1.uint8array2stream)(chunk1, chunk2));
|
|
34
25
|
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
35
26
|
const { peer: winnerPeer } = result.Ok();
|
|
36
27
|
(0, vitest_1.expect)(winnerPeer).toBe(ps);
|
|
@@ -43,7 +34,7 @@ function makePeer(peerStream) {
|
|
|
43
34
|
const ps1 = makePeerStream();
|
|
44
35
|
const ps2 = makePeerStream();
|
|
45
36
|
const ps3 = makePeerStream();
|
|
46
|
-
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2), makePeer(ps3)],
|
|
37
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2), makePeer(ps3)], (0, string2stream_js_1.uint8array2stream)(chunk1));
|
|
47
38
|
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
48
39
|
const { peer: winnerPeer } = result.Ok();
|
|
49
40
|
(0, vitest_1.expect)(winnerPeer).toBe(ps1);
|
|
@@ -63,7 +54,7 @@ function makePeer(peerStream) {
|
|
|
63
54
|
.mockRejectedValueOnce(new Error("write failed")),
|
|
64
55
|
});
|
|
65
56
|
const ps2 = makePeerStream();
|
|
66
|
-
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2)],
|
|
57
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2)], (0, string2stream_js_1.uint8array2stream)(chunk1, chunk2));
|
|
67
58
|
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
68
59
|
const { peer: winnerPeer } = result.Ok();
|
|
69
60
|
(0, vitest_1.expect)(winnerPeer).toBe(ps2);
|
|
@@ -77,14 +68,14 @@ function makePeer(peerStream) {
|
|
|
77
68
|
const ps2 = makePeerStream({
|
|
78
69
|
write: vitest_1.vi.fn().mockRejectedValue(new Error("fail")),
|
|
79
70
|
});
|
|
80
|
-
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2)],
|
|
71
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2)], (0, string2stream_js_1.uint8array2stream)(chunk1));
|
|
81
72
|
(0, vitest_1.expect)(result.isErr()).toBe(true);
|
|
82
73
|
(0, vitest_1.expect)(result.Err().message).toMatch(/all peers failed/);
|
|
83
74
|
});
|
|
84
75
|
(0, vitest_1.it)("returns the first peer on an empty stream", async () => {
|
|
85
76
|
const ps1 = makePeerStream();
|
|
86
77
|
const ps2 = makePeerStream();
|
|
87
|
-
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2)],
|
|
78
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps1), makePeer(ps2)], (0, string2stream_js_1.uint8array2stream)());
|
|
88
79
|
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
89
80
|
const { peer: winnerPeer } = result.Ok();
|
|
90
81
|
(0, vitest_1.expect)(winnerPeer).toBe(ps1);
|
|
@@ -94,7 +85,7 @@ function makePeer(peerStream) {
|
|
|
94
85
|
});
|
|
95
86
|
(0, vitest_1.it)("returns Err when all peers fail on begin", async () => {
|
|
96
87
|
const failPeer = { begin: vitest_1.vi.fn().mockRejectedValue(new Error("begin failed")) };
|
|
97
|
-
const result = await (0, tee_writer_js_1.teeWriter)([failPeer, failPeer],
|
|
88
|
+
const result = await (0, tee_writer_js_1.teeWriter)([failPeer, failPeer], (0, string2stream_js_1.uint8array2stream)(chunk1));
|
|
98
89
|
(0, vitest_1.expect)(result.isErr()).toBe(true);
|
|
99
90
|
(0, vitest_1.expect)(result.Err().message).toMatch(/all peers failed/);
|
|
100
91
|
});
|
|
@@ -102,7 +93,7 @@ function makePeer(peerStream) {
|
|
|
102
93
|
const ps = makePeerStream();
|
|
103
94
|
const goodPeer = makePeer(ps);
|
|
104
95
|
const badPeer = { begin: vitest_1.vi.fn().mockRejectedValue(new Error("begin failed")) };
|
|
105
|
-
const result = await (0, tee_writer_js_1.teeWriter)([badPeer, goodPeer],
|
|
96
|
+
const result = await (0, tee_writer_js_1.teeWriter)([badPeer, goodPeer], (0, string2stream_js_1.uint8array2stream)(chunk1));
|
|
106
97
|
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
107
98
|
const { peer: winnerPeer } = result.Ok();
|
|
108
99
|
(0, vitest_1.expect)(winnerPeer).toBe(ps);
|
|
@@ -110,7 +101,7 @@ function makePeer(peerStream) {
|
|
|
110
101
|
});
|
|
111
102
|
(0, vitest_1.it)("commit delegates name argument to the winning peer", async () => {
|
|
112
103
|
const ps = makePeerStream();
|
|
113
|
-
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps)],
|
|
104
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(ps)], (0, string2stream_js_1.uint8array2stream)());
|
|
114
105
|
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
115
106
|
(0, vitest_1.expect)(ps.cancel).not.toHaveBeenCalled();
|
|
116
107
|
(0, vitest_1.expect)(ps.close).toHaveBeenCalledOnce();
|
|
@@ -195,4 +186,53 @@ function makePeer(peerStream) {
|
|
|
195
186
|
(0, vitest_1.expect)(ps2.cancel).toHaveBeenCalled();
|
|
196
187
|
});
|
|
197
188
|
});
|
|
189
|
+
(0, vitest_1.describe)("teeWriter sync-throw", () => {
|
|
190
|
+
(0, vitest_1.it)("sync throw in begin() bypasses Promise.allSettled", async () => {
|
|
191
|
+
const survivor = makePeer(makePeerStream());
|
|
192
|
+
const throwing = makePeer(makePeerStream(), {
|
|
193
|
+
begin() {
|
|
194
|
+
throw new Error("sync throw in begin");
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
const result = await (0, tee_writer_js_1.teeWriter)([throwing, survivor], (0, string2stream_js_1.uint8array2stream)(new Uint8Array([1, 2, 3])));
|
|
198
|
+
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
199
|
+
(0, vitest_1.expect)(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
200
|
+
});
|
|
201
|
+
(0, vitest_1.it)("sync throw in write() bypasses Promise.allSettled", async () => {
|
|
202
|
+
const throwing = makePeerStream({
|
|
203
|
+
write() {
|
|
204
|
+
throw new Error("sync throw in write");
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
const survivor = makePeerStream();
|
|
208
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(throwing), makePeer(survivor)], (0, string2stream_js_1.uint8array2stream)(new Uint8Array([1, 2, 3])));
|
|
209
|
+
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
210
|
+
(0, vitest_1.expect)(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
211
|
+
});
|
|
212
|
+
(0, vitest_1.it)("sync throw in cancel() after a write failure bypasses Promise.allSettled", async () => {
|
|
213
|
+
const failThenThrowCancel = makePeerStream({
|
|
214
|
+
write() {
|
|
215
|
+
return Promise.reject(new Error("write failed"));
|
|
216
|
+
},
|
|
217
|
+
cancel() {
|
|
218
|
+
throw new Error("sync throw in cancel");
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
const survivor = makePeerStream();
|
|
222
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(failThenThrowCancel), makePeer(survivor)], (0, string2stream_js_1.uint8array2stream)(new Uint8Array([1, 2, 3])));
|
|
223
|
+
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
224
|
+
(0, vitest_1.expect)(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
225
|
+
});
|
|
226
|
+
(0, vitest_1.it)("sync throw in close() on the winner bypasses Promise.allSettled", async () => {
|
|
227
|
+
const survivor = makePeerStream();
|
|
228
|
+
const throwOnClose = makePeerStream({
|
|
229
|
+
close() {
|
|
230
|
+
throw new Error("sync throw in close");
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
const result = await (0, tee_writer_js_1.teeWriter)([makePeer(throwOnClose), makePeer(survivor)], (0, string2stream_js_1.uint8array2stream)(new Uint8Array([1, 2, 3])));
|
|
234
|
+
(0, vitest_1.expect)(result.isOk()).toBe(true);
|
|
235
|
+
(0, vitest_1.expect)(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
236
|
+
});
|
|
237
|
+
});
|
|
198
238
|
//# sourceMappingURL=tee-writer.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tee-writer.test.js","sourceRoot":"","sources":["../../../../src/utils/tee-writer.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tee-writer.test.js","sourceRoot":"","sources":["../../../../src/utils/tee-writer.test.ts"],"names":[],"mappings":"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"}
|
package/cjs/version.cjs
CHANGED
package/deno.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { TxtEnDecoder } from "../txt-en-decoder.js";
|
|
2
|
-
export declare function string2stream(
|
|
3
|
-
export declare function uint8array2stream(
|
|
2
|
+
export declare function string2stream(strOrArray: string | string[], ende?: TxtEnDecoder): ReadableStream<Uint8Array>;
|
|
3
|
+
export declare function uint8array2stream(...uint8: Uint8Array[]): ReadableStream<Uint8Array>;
|
|
4
4
|
//# sourceMappingURL=string2stream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string2stream.d.ts","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAkB3E,wBAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"string2stream.d.ts","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAkB3E,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,IAAI,GAAE,YAAsC,GAC3C,cAAc,CAAC,UAAU,CAAC,CAG5B;AAgBD,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CASpF"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { TxtEnDecoderSingleton } from "../txt-en-decoder.js";
|
|
2
|
-
export function string2stream(
|
|
3
|
-
|
|
2
|
+
export function string2stream(strOrArray, ende = TxtEnDecoderSingleton()) {
|
|
3
|
+
const sa = Array.isArray(strOrArray) ? strOrArray : [strOrArray];
|
|
4
|
+
return uint8array2stream(...sa.map((s) => ende.encode(s)));
|
|
4
5
|
}
|
|
5
|
-
export function uint8array2stream(
|
|
6
|
+
export function uint8array2stream(...uint8) {
|
|
6
7
|
return new ReadableStream({
|
|
7
8
|
start(controller) {
|
|
8
|
-
|
|
9
|
+
for (const chunk of uint8) {
|
|
10
|
+
controller.enqueue(chunk);
|
|
11
|
+
}
|
|
9
12
|
controller.close();
|
|
10
13
|
},
|
|
11
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string2stream.js","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAkB3E,MAAM,UAAU,aAAa,
|
|
1
|
+
{"version":3,"file":"string2stream.js","sourceRoot":"","sources":["../../../../src/utils/string2stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAkB3E,MAAM,UAAU,aAAa,CAC3B,UAA6B,EAC7B,IAAI,GAAiB,qBAAqB,EAAE,EAChB;IAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACjE,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,CAC5D;AAgBD,MAAM,UAAU,iBAAiB,CAAC,GAAG,KAAmB,EAA8B;IACpF,OAAO,IAAI,cAAc,CAAa;QACpC,KAAK,CAAC,UAAU,EAAQ;YACtB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,UAAU,CAAC,KAAK,EAAE,CAAC;QAAA,CACpB;KACF,CAAC,CAAC;AAAA,CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tee-writer.d.ts","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,UAAU;IACxC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAE5B;AACD,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,UAAU;IAClC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAE3B;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"tee-writer.d.ts","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,UAAU;IACxC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAE5B;AACD,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,UAAU;IAClC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAE3B;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAuCjH"}
|
package/esm/utils/tee-writer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { exception2Result, Result } from "../result.js";
|
|
2
2
|
export async function teeWriter(peers, inStream) {
|
|
3
|
-
let activeStreams = await Promise.allSettled(peers.map((p) => p.begin())).then((r) => r.flatMap((r) => (r.status === "fulfilled" && r.value.isOk() ? [r.value.Ok()] : [])));
|
|
3
|
+
let activeStreams = await Promise.allSettled(peers.map((p) => exception2Result(() => p.begin()))).then((r) => r.flatMap((r) => (r.status === "fulfilled" && r.value.isOk() ? [r.value.Ok()] : [])));
|
|
4
4
|
const reader = inStream.getReader();
|
|
5
5
|
while (activeStreams.length > 0) {
|
|
6
6
|
const rRead = await exception2Result(() => reader.read());
|
|
@@ -11,20 +11,27 @@ export async function teeWriter(peers, inStream) {
|
|
|
11
11
|
const { value, done } = rRead.Ok();
|
|
12
12
|
if (done)
|
|
13
13
|
break;
|
|
14
|
-
const writeResults = await Promise.allSettled(activeStreams.map((stream) => stream.write(value)));
|
|
14
|
+
const writeResults = await Promise.allSettled(activeStreams.map((stream) => exception2Result(() => stream.write(value))));
|
|
15
15
|
await Promise.allSettled(writeResults.flatMap((r, i) => {
|
|
16
|
-
if (r.status === "rejected")
|
|
17
|
-
return
|
|
16
|
+
if (r.status === "rejected" || r.value.isErr())
|
|
17
|
+
return exception2Result(() => activeStreams[i].cancel());
|
|
18
18
|
return [];
|
|
19
19
|
}));
|
|
20
|
-
activeStreams = activeStreams.filter((_, i) => writeResults[i].status === "fulfilled");
|
|
20
|
+
activeStreams = activeStreams.filter((_, i) => writeResults[i].status === "fulfilled" && writeResults[i].value.isOk());
|
|
21
21
|
}
|
|
22
22
|
if (activeStreams.length === 0) {
|
|
23
|
-
await reader.cancel();
|
|
23
|
+
await exception2Result(() => reader.cancel());
|
|
24
24
|
return Result.Err(new Error("all peers failed"));
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
while (activeStreams.length >= 1) {
|
|
27
|
+
const [winner, ...losers] = activeStreams;
|
|
28
|
+
const rClose = await exception2Result(() => winner.close());
|
|
29
|
+
if (rClose.isOk()) {
|
|
30
|
+
await Promise.allSettled(losers.map((stream) => exception2Result(() => stream.cancel())));
|
|
31
|
+
return Result.Ok({ peer: winner });
|
|
32
|
+
}
|
|
33
|
+
activeStreams = losers;
|
|
34
|
+
}
|
|
35
|
+
return Result.Err("all peers failed to close successfully");
|
|
29
36
|
}
|
|
30
37
|
//# sourceMappingURL=tee-writer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tee-writer.js","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAiBxD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,QAAoC,EAAgC;IACjH,IAAI,aAAa,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"tee-writer.js","sourceRoot":"","sources":["../../../../src/utils/tee-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from "vitest";
|
|
2
2
|
import { teeWriter } from "./tee-writer.js";
|
|
3
3
|
import { Result } from "../result.js";
|
|
4
|
-
|
|
5
|
-
return new ReadableStream({
|
|
6
|
-
start(controller) {
|
|
7
|
-
for (const chunk of chunks) {
|
|
8
|
-
controller.enqueue(chunk);
|
|
9
|
-
}
|
|
10
|
-
controller.close();
|
|
11
|
-
},
|
|
12
|
-
});
|
|
13
|
-
}
|
|
4
|
+
import { uint8array2stream } from "./string2stream.js";
|
|
14
5
|
function makePeerStream(overrides = {}) {
|
|
15
6
|
return {
|
|
16
7
|
write: vi.fn().mockResolvedValue(undefined),
|
|
@@ -19,8 +10,8 @@ function makePeerStream(overrides = {}) {
|
|
|
19
10
|
...overrides,
|
|
20
11
|
};
|
|
21
12
|
}
|
|
22
|
-
function makePeer(peerStream) {
|
|
23
|
-
return { begin: vi.fn().mockResolvedValue(Result.Ok(peerStream)) };
|
|
13
|
+
function makePeer(peerStream, overrides = {}) {
|
|
14
|
+
return { begin: vi.fn().mockResolvedValue(Result.Ok(peerStream)), ...overrides };
|
|
24
15
|
}
|
|
25
16
|
describe("teeWriter", () => {
|
|
26
17
|
const chunk1 = new Uint8Array([1, 2, 3]);
|
|
@@ -28,7 +19,7 @@ describe("teeWriter", () => {
|
|
|
28
19
|
it("writes all chunks to a single peer and commits", async () => {
|
|
29
20
|
const ps = makePeerStream();
|
|
30
21
|
const peer = makePeer(ps);
|
|
31
|
-
const result = await teeWriter([peer],
|
|
22
|
+
const result = await teeWriter([peer], uint8array2stream(chunk1, chunk2));
|
|
32
23
|
expect(result.isOk()).toBe(true);
|
|
33
24
|
const { peer: winnerPeer } = result.Ok();
|
|
34
25
|
expect(winnerPeer).toBe(ps);
|
|
@@ -41,7 +32,7 @@ describe("teeWriter", () => {
|
|
|
41
32
|
const ps1 = makePeerStream();
|
|
42
33
|
const ps2 = makePeerStream();
|
|
43
34
|
const ps3 = makePeerStream();
|
|
44
|
-
const result = await teeWriter([makePeer(ps1), makePeer(ps2), makePeer(ps3)],
|
|
35
|
+
const result = await teeWriter([makePeer(ps1), makePeer(ps2), makePeer(ps3)], uint8array2stream(chunk1));
|
|
45
36
|
expect(result.isOk()).toBe(true);
|
|
46
37
|
const { peer: winnerPeer } = result.Ok();
|
|
47
38
|
expect(winnerPeer).toBe(ps1);
|
|
@@ -61,7 +52,7 @@ describe("teeWriter", () => {
|
|
|
61
52
|
.mockRejectedValueOnce(new Error("write failed")),
|
|
62
53
|
});
|
|
63
54
|
const ps2 = makePeerStream();
|
|
64
|
-
const result = await teeWriter([makePeer(ps1), makePeer(ps2)],
|
|
55
|
+
const result = await teeWriter([makePeer(ps1), makePeer(ps2)], uint8array2stream(chunk1, chunk2));
|
|
65
56
|
expect(result.isOk()).toBe(true);
|
|
66
57
|
const { peer: winnerPeer } = result.Ok();
|
|
67
58
|
expect(winnerPeer).toBe(ps2);
|
|
@@ -75,14 +66,14 @@ describe("teeWriter", () => {
|
|
|
75
66
|
const ps2 = makePeerStream({
|
|
76
67
|
write: vi.fn().mockRejectedValue(new Error("fail")),
|
|
77
68
|
});
|
|
78
|
-
const result = await teeWriter([makePeer(ps1), makePeer(ps2)],
|
|
69
|
+
const result = await teeWriter([makePeer(ps1), makePeer(ps2)], uint8array2stream(chunk1));
|
|
79
70
|
expect(result.isErr()).toBe(true);
|
|
80
71
|
expect(result.Err().message).toMatch(/all peers failed/);
|
|
81
72
|
});
|
|
82
73
|
it("returns the first peer on an empty stream", async () => {
|
|
83
74
|
const ps1 = makePeerStream();
|
|
84
75
|
const ps2 = makePeerStream();
|
|
85
|
-
const result = await teeWriter([makePeer(ps1), makePeer(ps2)],
|
|
76
|
+
const result = await teeWriter([makePeer(ps1), makePeer(ps2)], uint8array2stream());
|
|
86
77
|
expect(result.isOk()).toBe(true);
|
|
87
78
|
const { peer: winnerPeer } = result.Ok();
|
|
88
79
|
expect(winnerPeer).toBe(ps1);
|
|
@@ -92,7 +83,7 @@ describe("teeWriter", () => {
|
|
|
92
83
|
});
|
|
93
84
|
it("returns Err when all peers fail on begin", async () => {
|
|
94
85
|
const failPeer = { begin: vi.fn().mockRejectedValue(new Error("begin failed")) };
|
|
95
|
-
const result = await teeWriter([failPeer, failPeer],
|
|
86
|
+
const result = await teeWriter([failPeer, failPeer], uint8array2stream(chunk1));
|
|
96
87
|
expect(result.isErr()).toBe(true);
|
|
97
88
|
expect(result.Err().message).toMatch(/all peers failed/);
|
|
98
89
|
});
|
|
@@ -100,7 +91,7 @@ describe("teeWriter", () => {
|
|
|
100
91
|
const ps = makePeerStream();
|
|
101
92
|
const goodPeer = makePeer(ps);
|
|
102
93
|
const badPeer = { begin: vi.fn().mockRejectedValue(new Error("begin failed")) };
|
|
103
|
-
const result = await teeWriter([badPeer, goodPeer],
|
|
94
|
+
const result = await teeWriter([badPeer, goodPeer], uint8array2stream(chunk1));
|
|
104
95
|
expect(result.isOk()).toBe(true);
|
|
105
96
|
const { peer: winnerPeer } = result.Ok();
|
|
106
97
|
expect(winnerPeer).toBe(ps);
|
|
@@ -108,7 +99,7 @@ describe("teeWriter", () => {
|
|
|
108
99
|
});
|
|
109
100
|
it("commit delegates name argument to the winning peer", async () => {
|
|
110
101
|
const ps = makePeerStream();
|
|
111
|
-
const result = await teeWriter([makePeer(ps)],
|
|
102
|
+
const result = await teeWriter([makePeer(ps)], uint8array2stream());
|
|
112
103
|
expect(result.isOk()).toBe(true);
|
|
113
104
|
expect(ps.cancel).not.toHaveBeenCalled();
|
|
114
105
|
expect(ps.close).toHaveBeenCalledOnce();
|
|
@@ -193,4 +184,53 @@ describe("teeWriter resilience", () => {
|
|
|
193
184
|
expect(ps2.cancel).toHaveBeenCalled();
|
|
194
185
|
});
|
|
195
186
|
});
|
|
187
|
+
describe("teeWriter sync-throw", () => {
|
|
188
|
+
it("sync throw in begin() bypasses Promise.allSettled", async () => {
|
|
189
|
+
const survivor = makePeer(makePeerStream());
|
|
190
|
+
const throwing = makePeer(makePeerStream(), {
|
|
191
|
+
begin() {
|
|
192
|
+
throw new Error("sync throw in begin");
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
const result = await teeWriter([throwing, survivor], uint8array2stream(new Uint8Array([1, 2, 3])));
|
|
196
|
+
expect(result.isOk()).toBe(true);
|
|
197
|
+
expect(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
198
|
+
});
|
|
199
|
+
it("sync throw in write() bypasses Promise.allSettled", async () => {
|
|
200
|
+
const throwing = makePeerStream({
|
|
201
|
+
write() {
|
|
202
|
+
throw new Error("sync throw in write");
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
const survivor = makePeerStream();
|
|
206
|
+
const result = await teeWriter([makePeer(throwing), makePeer(survivor)], uint8array2stream(new Uint8Array([1, 2, 3])));
|
|
207
|
+
expect(result.isOk()).toBe(true);
|
|
208
|
+
expect(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
209
|
+
});
|
|
210
|
+
it("sync throw in cancel() after a write failure bypasses Promise.allSettled", async () => {
|
|
211
|
+
const failThenThrowCancel = makePeerStream({
|
|
212
|
+
write() {
|
|
213
|
+
return Promise.reject(new Error("write failed"));
|
|
214
|
+
},
|
|
215
|
+
cancel() {
|
|
216
|
+
throw new Error("sync throw in cancel");
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
const survivor = makePeerStream();
|
|
220
|
+
const result = await teeWriter([makePeer(failThenThrowCancel), makePeer(survivor)], uint8array2stream(new Uint8Array([1, 2, 3])));
|
|
221
|
+
expect(result.isOk()).toBe(true);
|
|
222
|
+
expect(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
223
|
+
});
|
|
224
|
+
it("sync throw in close() on the winner bypasses Promise.allSettled", async () => {
|
|
225
|
+
const survivor = makePeerStream();
|
|
226
|
+
const throwOnClose = makePeerStream({
|
|
227
|
+
close() {
|
|
228
|
+
throw new Error("sync throw in close");
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
const result = await teeWriter([makePeer(throwOnClose), makePeer(survivor)], uint8array2stream(new Uint8Array([1, 2, 3])));
|
|
232
|
+
expect(result.isOk()).toBe(true);
|
|
233
|
+
expect(result.Ok().peer.write).toHaveBeenCalledWith(new Uint8Array([1, 2, 3]));
|
|
234
|
+
});
|
|
235
|
+
});
|
|
196
236
|
//# sourceMappingURL=tee-writer.test.js.map
|