effect-app 0.180.6 → 0.180.7
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.md +6 -0
- package/_cjs/services/FiberBag.cjs +7 -11
- package/_cjs/services/FiberBag.cjs.map +1 -1
- package/dist/services/FiberBag.d.ts +27 -36
- package/dist/services/FiberBag.d.ts.map +1 -1
- package/dist/services/FiberBag.js +9 -13
- package/package.json +3 -3
- package/src/services/FiberBag.ts +13 -16
package/CHANGELOG.md
CHANGED
|
@@ -7,16 +7,14 @@ exports.FiberBag = void 0;
|
|
|
7
7
|
var _core = require("@effect-app/core");
|
|
8
8
|
var _service = require("../service.cjs");
|
|
9
9
|
const make = _core.Effect.gen(function* ($) {
|
|
10
|
-
const
|
|
11
|
-
const join =
|
|
12
|
-
const add = (...fibers) =>
|
|
13
|
-
const addAll = fibers =>
|
|
14
|
-
const
|
|
15
|
-
const forkScoped = effect => effect.pipe(_core.Effect.forkScoped, _core.Effect.andThen(add));
|
|
10
|
+
const set = yield* $(_core.FiberSet.make());
|
|
11
|
+
const join = _core.Effect.sync(() => [...set]).pipe(_core.Effect.tap(bag => _core.Effect.logDebug("[FiberBag] Joining " + bag.length + " fibers")), _core.Effect.andThen(_core.Fiber.joinAll));
|
|
12
|
+
const add = (...fibers) => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
|
|
13
|
+
const addAll = fibers => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
|
|
14
|
+
const run = _core.FiberSet.run(set);
|
|
16
15
|
return {
|
|
17
16
|
join,
|
|
18
|
-
|
|
19
|
-
forkScoped,
|
|
17
|
+
run,
|
|
20
18
|
add,
|
|
21
19
|
addAll
|
|
22
20
|
};
|
|
@@ -27,10 +25,8 @@ const make = _core.Effect.gen(function* ($) {
|
|
|
27
25
|
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
28
26
|
*/
|
|
29
27
|
class FiberBag extends (0, _service.TagClassMakeId)("FiberBag", make)() {
|
|
30
|
-
static Live = this.
|
|
28
|
+
static Live = this.toLayerScoped();
|
|
31
29
|
static JoinLive = this.pipe(_core.Effect.andThen(_ => _.join), _core.Layer.effectDiscard, _core.Layer.provide(this.Live));
|
|
32
|
-
static forkScoped = effect => _core.Effect.andThen(this, _ => _.forkScoped(effect));
|
|
33
|
-
static forkDaemon = effect => _core.Effect.andThen(this, _ => _.forkDaemon(effect));
|
|
34
30
|
}
|
|
35
31
|
exports.FiberBag = FiberBag;
|
|
36
32
|
//# sourceMappingURL=FiberBag.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiberBag.cjs","names":["_core","require","_service","make","Effect","gen","$","
|
|
1
|
+
{"version":3,"file":"FiberBag.cjs","names":["_core","require","_service","make","Effect","gen","$","set","FiberSet","join","sync","pipe","tap","bag","logDebug","length","andThen","Fiber","joinAll","add","fibers","forEach","_","unsafeAdd","addAll","run","FiberBag","TagClassMakeId","Live","toLayerScoped","JoinLive","Layer","effectDiscard","provide"],"sources":["../../src/services/FiberBag.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAKA,MAAME,IAAI,GAAGC,YAAM,CAACC,GAAG,CAAC,WAAUC,CAAC;EACjC,MAAMC,GAAG,GAAG,OAAOD,CAAC,CAACE,cAAQ,CAACL,IAAI,EAAgB,CAAC;EACnD,MAAMM,IAAI,GAAGL,YAAM,CAACM,IAAI,CAAC,MAAM,CAAC,GAAGH,GAAG,CAAC,CAAC,CAACI,IAAI,CAC3CP,YAAM,CAACQ,GAAG,CAAEC,GAAG,IAAKT,YAAM,CAACU,QAAQ,CAAC,qBAAqB,GAAGD,GAAG,CAACE,MAAM,GAAG,SAAS,CAAC,CAAC,EACpFX,YAAM,CAACY,OAAO,CAACC,WAAK,CAACC,OAAO,CAAC,CAC9B;EACD,MAAMC,GAAG,GAAGA,CAAC,GAAGC,MAA0C,KACxDhB,YAAM,CAACM,IAAI,CAAC,MAAMU,MAAM,CAACC,OAAO,CAAEC,CAAC,IAAKd,cAAQ,CAACe,SAAS,CAAChB,GAAG,EAAEe,CAAC,CAAC,CAAC,CAAC;EACtE,MAAME,MAAM,GAAIJ,MAAmD,IACjEhB,YAAM,CAACM,IAAI,CAAC,MAAMU,MAAM,CAACC,OAAO,CAAEC,CAAC,IAAKd,cAAQ,CAACe,SAAS,CAAChB,GAAG,EAAEe,CAAC,CAAC,CAAC,CAAC;EAEtE,MAAMG,GAAG,GAAGjB,cAAQ,CAACiB,GAAG,CAAClB,GAAG,CAAC;EAE7B,OAAO;IACLE,IAAI;IACJgB,GAAG;IACHN,GAAG;IACHK;GACD;AACH,CAAC,CAAC;AAEF;;;;;AAKM,MAAOE,QAAS,SAAQ,IAAAC,uBAAc,EAAC,UAAU,EAAExB,IAAI,CAAC,EAAY;EACxE,OAAgByB,IAAI,GAAG,IAAI,CAACC,aAAa,EAAE;EAC3C,OAAgBC,QAAQ,GAAG,IAAI,CAACnB,IAAI,CAACP,YAAM,CAACY,OAAO,CAAEM,CAAC,IAAKA,CAAC,CAACb,IAAI,CAAC,EAAEsB,WAAK,CAACC,aAAa,EAAED,WAAK,CAACE,OAAO,CAAC,IAAI,CAACL,IAAI,CAAC,CAAC"}
|
|
@@ -2,60 +2,53 @@ import { Effect, Fiber, Layer } from "@effect-app/core";
|
|
|
2
2
|
declare const FiberBag_base: {
|
|
3
3
|
new (service: {
|
|
4
4
|
join: Effect.Effect<void, never, never>;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
addAll: (fibers: readonly Fiber.Fiber<void, never>[]) => Effect.Effect<void, never, never>;
|
|
5
|
+
run: <R, XE extends never, XA extends never>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
6
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
7
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
9
8
|
}): Readonly<{
|
|
10
9
|
join: Effect.Effect<void, never, never>;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
addAll: (fibers: readonly Fiber.Fiber<void, never>[]) => Effect.Effect<void, never, never>;
|
|
10
|
+
run: <R, XE extends never, XA extends never>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
11
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
12
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
15
13
|
}> & import("effect/Context").TagClassShape<"FiberBag", {
|
|
16
14
|
join: Effect.Effect<void, never, never>;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
addAll: (fibers: readonly Fiber.Fiber<void, never>[]) => Effect.Effect<void, never, never>;
|
|
15
|
+
run: <R, XE extends never, XA extends never>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
16
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
17
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
21
18
|
}>;
|
|
22
19
|
toLayer: {
|
|
23
|
-
(): Layer<FiberBag, never,
|
|
24
|
-
<E,
|
|
20
|
+
(): Layer<FiberBag, never, import("effect/Scope").Scope>;
|
|
21
|
+
<E, R_1>(eff: Effect<{
|
|
25
22
|
join: Effect.Effect<void, never, never>;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}, E, R_2>): Layer<FiberBag, E, R_2>;
|
|
23
|
+
run: <R, XE extends never, XA extends never>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
24
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
25
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
26
|
+
}, E, R_1>): Layer<FiberBag, E, R_1>;
|
|
31
27
|
};
|
|
32
28
|
toLayerScoped: {
|
|
33
29
|
(): Layer<FiberBag, never, never>;
|
|
34
|
-
<E_1,
|
|
30
|
+
<E_1, R_2>(eff: Effect<{
|
|
35
31
|
join: Effect.Effect<void, never, never>;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}, E_1, R_3>): Layer<FiberBag, E_1, Exclude<R_3, import("effect/Scope").Scope>>;
|
|
32
|
+
run: <R, XE extends never, XA extends never>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
33
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
34
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
35
|
+
}, E_1, R_2>): Layer<FiberBag, E_1, Exclude<R_2, import("effect/Scope").Scope>>;
|
|
41
36
|
};
|
|
42
37
|
wrap: (service: {
|
|
43
38
|
join: Effect.Effect<void, never, never>;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
addAll: (fibers: readonly Fiber.Fiber<void, never>[]) => Effect.Effect<void, never, never>;
|
|
39
|
+
run: <R, XE extends never, XA extends never>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
40
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
41
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
48
42
|
}) => FiberBag;
|
|
49
|
-
make: Effect<FiberBag, never,
|
|
43
|
+
make: Effect<FiberBag, never, import("effect/Scope").Scope>;
|
|
50
44
|
} & import("effect/Context").Tag<FiberBag, FiberBag> & {
|
|
51
45
|
$: {
|
|
52
46
|
join: Effect.Effect<void, never, FiberBag>;
|
|
53
47
|
};
|
|
54
48
|
} & {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
addAll: (fibers: readonly Fiber.Fiber<void, never>[]) => Effect.Effect<void, never, FiberBag>;
|
|
49
|
+
run: (effect: Effect.Effect<never, never, unknown>) => Effect.Effect<Fiber.RuntimeFiber<never, never>, never, unknown>;
|
|
50
|
+
add: (...args: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, FiberBag>;
|
|
51
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, FiberBag>;
|
|
59
52
|
};
|
|
60
53
|
/**
|
|
61
54
|
* Whenever you fork long running fibers e.g via `Effect.forkScoped` or `Effect.forkDaemon`
|
|
@@ -65,8 +58,6 @@ declare const FiberBag_base: {
|
|
|
65
58
|
export declare class FiberBag extends FiberBag_base {
|
|
66
59
|
static readonly Live: Layer<FiberBag, never, never>;
|
|
67
60
|
static readonly JoinLive: Layer.Layer<never, never, never>;
|
|
68
|
-
static readonly forkScoped: <R>(effect: Effect<never, never, R>) => Effect.Effect<void, never, FiberBag | import("effect/Scope").Scope | R>;
|
|
69
|
-
static readonly forkDaemon: <R>(effect: Effect<never, never, R>) => Effect.Effect<void, never, FiberBag | R>;
|
|
70
61
|
}
|
|
71
62
|
export {};
|
|
72
63
|
//# sourceMappingURL=FiberBag.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiberBag.d.ts","sourceRoot":"","sources":["../../src/services/FiberBag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"FiberBag.d.ts","sourceRoot":"","sources":["../../src/services/FiberBag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAY,KAAK,EAAE,MAAM,kBAAkB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BjE;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,aAA4C;IACxE,MAAM,CAAC,QAAQ,CAAC,IAAI,gCAAuB;IAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,mCAA0F;CACnH"}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import { Effect, Fiber,
|
|
1
|
+
import { Effect, Fiber, FiberSet, Layer } from "@effect-app/core";
|
|
2
2
|
import { TagClassMakeId } from "../service.js";
|
|
3
3
|
const make = Effect.gen(function* ($) {
|
|
4
|
-
const
|
|
5
|
-
const join =
|
|
6
|
-
const add = (...fibers) =>
|
|
7
|
-
const addAll = (fibers) =>
|
|
8
|
-
const
|
|
9
|
-
const forkScoped = (effect) => effect.pipe(Effect.forkScoped, Effect.andThen(add));
|
|
4
|
+
const set = yield* $(FiberSet.make());
|
|
5
|
+
const join = Effect.sync(() => [...set]).pipe(Effect.tap((bag) => Effect.logDebug("[FiberBag] Joining " + bag.length + " fibers")), Effect.andThen(Fiber.joinAll));
|
|
6
|
+
const add = (...fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
|
|
7
|
+
const addAll = (fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
|
|
8
|
+
const run = FiberSet.run(set);
|
|
10
9
|
return {
|
|
11
10
|
join,
|
|
12
|
-
|
|
13
|
-
forkScoped,
|
|
11
|
+
run,
|
|
14
12
|
add,
|
|
15
13
|
addAll
|
|
16
14
|
};
|
|
@@ -21,9 +19,7 @@ const make = Effect.gen(function* ($) {
|
|
|
21
19
|
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
22
20
|
*/
|
|
23
21
|
export class FiberBag extends TagClassMakeId("FiberBag", make)() {
|
|
24
|
-
static Live = this.
|
|
22
|
+
static Live = this.toLayerScoped();
|
|
25
23
|
static JoinLive = this.pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live));
|
|
26
|
-
static forkScoped = (effect) => Effect.andThen(this, (_) => _.forkScoped(effect));
|
|
27
|
-
static forkDaemon = (effect) => Effect.andThen(this, (_) => _.forkDaemon(effect));
|
|
28
24
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmliZXJCYWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvRmliZXJCYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFLOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFnQixDQUFDLENBQUE7SUFDbkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUNwRixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDOUIsQ0FBQTtJQUNELE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxNQUEwQyxFQUFFLEVBQUUsQ0FDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFtRCxFQUFFLEVBQUUsQ0FDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFdEUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUU3QixPQUFPO1FBQ0wsSUFBSTtRQUNKLEdBQUc7UUFDSCxHQUFHO1FBQ0gsTUFBTTtLQUNQLENBQUE7QUFDSCxDQUFDLENBQUMsQ0FBQTtBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sUUFBUyxTQUFRLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQVk7SUFDeEUsTUFBTSxDQUFVLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDM0MsTUFBTSxDQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-app",
|
|
3
|
-
"version": "0.180.
|
|
3
|
+
"version": "0.180.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"uuid": "^9.0.1",
|
|
15
15
|
"validator": "^13.11.0",
|
|
16
16
|
"@effect-app/core": "0.150.2",
|
|
17
|
-
"@effect-app/
|
|
18
|
-
"@effect-app/
|
|
17
|
+
"@effect-app/fluent-extensions": "0.143.1",
|
|
18
|
+
"@effect-app/schema": "0.202.2"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@babel/cli": "^7.23.9",
|
package/src/services/FiberBag.ts
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
import { Effect, Fiber,
|
|
1
|
+
import { Effect, Fiber, FiberSet, Layer } from "@effect-app/core"
|
|
2
2
|
import { TagClassMakeId } from "../service.js"
|
|
3
3
|
|
|
4
|
+
import type {} from "effect/Scope"
|
|
5
|
+
import type {} from "effect/Context"
|
|
6
|
+
|
|
4
7
|
const make = Effect.gen(function*($) {
|
|
5
|
-
const
|
|
6
|
-
const join =
|
|
7
|
-
Ref.get,
|
|
8
|
+
const set = yield* $(FiberSet.make<never, never>())
|
|
9
|
+
const join = Effect.sync(() => [...set]).pipe(
|
|
8
10
|
Effect.tap((bag) => Effect.logDebug("[FiberBag] Joining " + bag.length + " fibers")),
|
|
9
11
|
Effect.andThen(Fiber.joinAll)
|
|
10
12
|
)
|
|
11
|
-
const add = (...fibers: Fiber.
|
|
12
|
-
|
|
13
|
+
const add = (...fibers: Fiber.RuntimeFiber<never, never>[]) =>
|
|
14
|
+
Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)))
|
|
15
|
+
const addAll = (fibers: readonly Fiber.RuntimeFiber<never, never>[]) =>
|
|
16
|
+
Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)))
|
|
13
17
|
|
|
14
|
-
const
|
|
15
|
-
const forkScoped = <R>(effect: Effect<never, never, R>) => effect.pipe(Effect.forkScoped, Effect.andThen(add))
|
|
18
|
+
const run = FiberSet.run(set)
|
|
16
19
|
|
|
17
20
|
return {
|
|
18
21
|
join,
|
|
19
|
-
|
|
20
|
-
forkScoped,
|
|
22
|
+
run,
|
|
21
23
|
add,
|
|
22
24
|
addAll
|
|
23
25
|
}
|
|
@@ -29,11 +31,6 @@ const make = Effect.gen(function*($) {
|
|
|
29
31
|
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
30
32
|
*/
|
|
31
33
|
export class FiberBag extends TagClassMakeId("FiberBag", make)<FiberBag>() {
|
|
32
|
-
static readonly Live = this.
|
|
34
|
+
static readonly Live = this.toLayerScoped()
|
|
33
35
|
static readonly JoinLive = this.pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live))
|
|
34
|
-
|
|
35
|
-
static override readonly forkScoped = <R>(effect: Effect<never, never, R>) =>
|
|
36
|
-
Effect.andThen(this, (_) => _.forkScoped(effect))
|
|
37
|
-
static override readonly forkDaemon = <R>(effect: Effect<never, never, R>) =>
|
|
38
|
-
Effect.andThen(this, (_) => _.forkDaemon(effect))
|
|
39
36
|
}
|