effect-app 1.28.0 → 1.29.0

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @effect-app/prelude
2
2
 
3
+ ## 1.29.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3d4e45a: cleanup FiberSets
8
+
3
9
  ## 1.28.0
4
10
 
5
11
  ### Minor Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-app",
3
- "version": "1.28.0",
3
+ "version": "1.29.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -240,16 +240,6 @@
240
240
  "default": "./_cjs/schema.cjs"
241
241
  }
242
242
  },
243
- "./services/MainFiberSet": {
244
- "import": {
245
- "types": "./dist/services/MainFiberSet.d.ts",
246
- "default": "./dist/services/MainFiberSet.js"
247
- },
248
- "require": {
249
- "types": "./dist/services/MainFiberSet.d.ts",
250
- "default": "./_cjs/services/MainFiberSet.cjs"
251
- }
252
- },
253
243
  "./utils": {
254
244
  "import": {
255
245
  "types": "./dist/utils.d.ts",
@@ -1,45 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.MainFiberSet = void 0;
7
- var _core = require("@effect-app/core");
8
- var _logger = require("../logger.cjs");
9
- const make = _core.Effect.gen(function* () {
10
- const set = yield* _core.FiberSet.make();
11
- const add = (...fibers) => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
12
- const addAll = fibers => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
13
- const join = _core.FiberSet.size(set).pipe(_core.Effect.andThen(count => _logger.PreludeLogger.logDebug(`Joining ${count} current fibers on the MainFiberSet`)), _core.Effect.andThen(_core.FiberSet.join(set)));
14
- const run = _core.FiberSet.run(set);
15
- // const waitUntilEmpty = Effect.gen(function*() {
16
- // const currentSize = yield* FiberSet.size(set)
17
- // if (currentSize === 0) {
18
- // return
19
- // }
20
- // yield* PreludeLogger.logInfo("Waiting MainFiberSet to be empty: " + currentSize)
21
- // while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
22
- // yield* PreludeLogger.logDebug("MainFiberSet is empty")
23
- // })
24
- // TODO: loop and interrupt all fibers in the set continuously?
25
- const interrupt = _core.Fiber.interruptAll(set);
26
- return {
27
- interrupt,
28
- join,
29
- run,
30
- add,
31
- addAll
32
- };
33
- });
34
- /**
35
- * Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
36
- * you should register these long running fibers in a FiberSet, and join them at the end of your main program.
37
- * This way any errors will blow up the main program instead of fibers dying unknowingly.
38
- */
39
- class MainFiberSet extends _core.Context.TagMakeId("MainFiberSet", make)() {
40
- static Live = this.toLayerScoped();
41
- static JoinLive = this.pipe(_core.Effect.andThen(_ => _.join), _core.Layer.effectDiscard, _core.Layer.provide(this.Live));
42
- static run = self => this.use(_ => _.run(self));
43
- }
44
- exports.MainFiberSet = MainFiberSet;
45
- //# sourceMappingURL=MainFiberSet.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MainFiberSet.cjs","names":["_core","require","_logger","make","Effect","gen","set","FiberSet","add","fibers","sync","forEach","_","unsafeAdd","addAll","join","size","pipe","andThen","count","PreludeLogger","logDebug","run","interrupt","Fiber","interruptAll","MainFiberSet","Context","TagMakeId","Live","toLayerScoped","JoinLive","Layer","effectDiscard","provide","self","use"],"sources":["../../src/services/MainFiberSet.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAIA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,IAAI,GAAGC,YAAM,CAACC,GAAG,CAAC,aAAS;EAC/B,MAAMC,GAAG,GAAG,OAAOC,cAAQ,CAACJ,IAAI,EAAkB;EAClD,MAAMK,GAAG,GAAGA,CAAC,GAAGC,MAA0C,KACxDL,YAAM,CAACM,IAAI,CAAC,MAAMD,MAAM,CAACE,OAAO,CAAEC,CAAC,IAAKL,cAAQ,CAACM,SAAS,CAACP,GAAG,EAAEM,CAAC,CAAC,CAAC,CAAC;EACtE,MAAME,MAAM,GAAIL,MAAmD,IACjEL,YAAM,CAACM,IAAI,CAAC,MAAMD,MAAM,CAACE,OAAO,CAAEC,CAAC,IAAKL,cAAQ,CAACM,SAAS,CAACP,GAAG,EAAEM,CAAC,CAAC,CAAC,CAAC;EACtE,MAAMG,IAAI,GAAGR,cAAQ,CAACS,IAAI,CAACV,GAAG,CAAC,CAACW,IAAI,CAClCb,YAAM,CAACc,OAAO,CAAEC,KAAK,IAAKC,qBAAa,CAACC,QAAQ,CAAC,WAAWF,KAAK,qCAAqC,CAAC,CAAC,EACxGf,YAAM,CAACc,OAAO,CAACX,cAAQ,CAACQ,IAAI,CAACT,GAAG,CAAC,CAAC,CACnC;EACD,MAAMgB,GAAG,GAAGf,cAAQ,CAACe,GAAG,CAAChB,GAAG,CAAC;EAE7B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,MAAMiB,SAAS,GAAGC,WAAK,CAACC,YAAY,CAACnB,GAAG,CAAC;EAEzC,OAAO;IACLiB,SAAS;IACTR,IAAI;IACJO,GAAG;IACHd,GAAG;IACHM;GACD;AACH,CAAC,CAAC;AAEF;;;;;AAKM,MAAOY,YAAa,SAAQC,aAAO,CAACC,SAAS,CAAC,cAAc,EAAEzB,IAAI,CAAC,EAAgB;EACvF,OAAgB0B,IAAI,GAAG,IAAI,CAACC,aAAa,EAAE;EAC3C,OAAgBC,QAAQ,GAAG,IAAI,CAACd,IAAI,CAACb,YAAM,CAACc,OAAO,CAAEN,CAAC,IAAKA,CAAC,CAACG,IAAI,CAAC,EAAEiB,WAAK,CAACC,aAAa,EAAED,WAAK,CAACE,OAAO,CAAC,IAAI,CAACL,IAAI,CAAC,CAAC;EAClH,OAAgBP,GAAG,GAAUa,IAAyB,IAAK,IAAI,CAACC,GAAG,CAAExB,CAAC,IAAKA,CAAC,CAACU,GAAG,CAACa,IAAI,CAAC,CAAC","ignoreList":[]}
@@ -1,56 +0,0 @@
1
- import { Context, Effect, Fiber, Layer } from "@effect-app/core";
2
- declare const MainFiberSet_base: (abstract new (service: {
3
- interrupt: Effect.Effect<void, never, never>;
4
- join: Effect.Effect<void, never, never>;
5
- run: <R, XE extends never, XA extends unknown>(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>;
8
- }) => Readonly<{
9
- interrupt: Effect.Effect<void, never, never>;
10
- join: Effect.Effect<void, never, never>;
11
- run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
12
- add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
13
- addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
14
- }> & Context.TagClassShape<"MainFiberSet", {
15
- interrupt: Effect.Effect<void, never, never>;
16
- join: Effect.Effect<void, never, never>;
17
- run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
18
- add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
19
- addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
20
- }>) & {
21
- toLayer: {
22
- (): Layer<MainFiberSet, never, import("effect/Scope").Scope>;
23
- <E_1, R_1>(eff: Effect<Omit<MainFiberSet, keyof Context.TagClassShape<any, any>>, E_1, R_1>): Layer<MainFiberSet, E_1, R_1>;
24
- };
25
- toLayerScoped: {
26
- (): Layer<MainFiberSet, never, never>;
27
- <E_1, R_2>(eff: Effect<Context.TagClassShape<any, any>, E_1, R_2>): Layer<MainFiberSet, E_1, Exclude<R_2, import("effect/Scope").Scope>>;
28
- };
29
- of: (service: Context.TagClassShape<any, any>) => MainFiberSet;
30
- make: Effect<MainFiberSet, never, import("effect/Scope").Scope>;
31
- } & Context.Tag<MainFiberSet, MainFiberSet> & {
32
- interrupt: Effect<void, never, MainFiberSet>;
33
- join: Effect<void, never, MainFiberSet>;
34
- add: (...args: readonly Fiber.RuntimeFiber<never, never>[]) => Effect<void, never, MainFiberSet>;
35
- addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect<void, never, MainFiberSet>;
36
- } & {
37
- use: <X>(body: (_: {
38
- interrupt: Effect.Effect<void, never, never>;
39
- join: Effect.Effect<void, never, never>;
40
- run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
41
- add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
42
- addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
43
- }) => X) => X extends Effect<infer A_1, infer E_2, infer R_4> ? Effect<A_1, E_2, MainFiberSet | R_4> : Effect<X, never, MainFiberSet>;
44
- };
45
- /**
46
- * Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
47
- * you should register these long running fibers in a FiberSet, and join them at the end of your main program.
48
- * This way any errors will blow up the main program instead of fibers dying unknowingly.
49
- */
50
- export declare class MainFiberSet extends MainFiberSet_base {
51
- static readonly Live: Layer<MainFiberSet, never, never>;
52
- static readonly JoinLive: Layer.Layer<never, never, never>;
53
- static readonly run: <A, R>(self: Effect<A, never, R>) => Effect<Fiber.RuntimeFiber<A, never>, never, MainFiberSet | R>;
54
- }
55
- export {};
56
- //# sourceMappingURL=MainFiberSet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MainFiberSet.d.ts","sourceRoot":"","sources":["../../src/services/MainFiberSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAY,KAAK,EAAE,MAAM,kBAAkB,CAAA;;;;;qBAQhD,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;;qBAF3C,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;;qBAF3C,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;yBAF3C,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;yBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;AA8BrE;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,iBAAuD;IACvF,MAAM,CAAC,QAAQ,CAAC,IAAI,oCAAuB;IAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,mCAA0F;IAClH,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAI,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,mEAAiC;CACxF"}
@@ -1,38 +0,0 @@
1
- import { Context, Effect, Fiber, FiberSet, Layer } from "@effect-app/core";
2
- import { PreludeLogger } from "../logger.js";
3
- const make = Effect.gen(function* () {
4
- const set = yield* FiberSet.make();
5
- const add = (...fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
6
- const addAll = (fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
7
- const join = FiberSet.size(set).pipe(Effect.andThen((count) => PreludeLogger.logDebug(`Joining ${count} current fibers on the MainFiberSet`)), Effect.andThen(FiberSet.join(set)));
8
- const run = FiberSet.run(set);
9
- // const waitUntilEmpty = Effect.gen(function*() {
10
- // const currentSize = yield* FiberSet.size(set)
11
- // if (currentSize === 0) {
12
- // return
13
- // }
14
- // yield* PreludeLogger.logInfo("Waiting MainFiberSet to be empty: " + currentSize)
15
- // while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
16
- // yield* PreludeLogger.logDebug("MainFiberSet is empty")
17
- // })
18
- // TODO: loop and interrupt all fibers in the set continuously?
19
- const interrupt = Fiber.interruptAll(set);
20
- return {
21
- interrupt,
22
- join,
23
- run,
24
- add,
25
- addAll
26
- };
27
- });
28
- /**
29
- * Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
30
- * you should register these long running fibers in a FiberSet, and join them at the end of your main program.
31
- * This way any errors will blow up the main program instead of fibers dying unknowingly.
32
- */
33
- export class MainFiberSet extends Context.TagMakeId("MainFiberSet", make)() {
34
- static Live = this.toLayerScoped();
35
- static JoinLive = this.pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live));
36
- static run = (self) => this.use((_) => _.run(self));
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFpbkZpYmVyU2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL01haW5GaWJlclNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBSTFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBa0IsQ0FBQTtJQUNsRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBMEMsRUFBRSxFQUFFLENBQzVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBbUQsRUFBRSxFQUFFLENBQ3JFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxxQ0FBcUMsQ0FBQyxDQUFDLEVBQ3hHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuQyxDQUFBO0lBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUU3QixrREFBa0Q7SUFDbEQsa0RBQWtEO0lBQ2xELDZCQUE2QjtJQUM3QixhQUFhO0lBQ2IsTUFBTTtJQUNOLHFGQUFxRjtJQUNyRiw4RUFBOEU7SUFDOUUsMkRBQTJEO0lBQzNELEtBQUs7SUFFTCwrREFBK0Q7SUFDL0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6QyxPQUFPO1FBQ0wsU0FBUztRQUNULElBQUk7UUFDSixHQUFHO1FBQ0gsR0FBRztRQUNILE1BQU07S0FDUCxDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBZ0I7SUFDdkYsTUFBTSxDQUFVLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDM0MsTUFBTSxDQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEgsTUFBTSxDQUFVLEdBQUcsR0FBRyxDQUFPLElBQXlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSJ9
@@ -1,50 +0,0 @@
1
- import { Context, Effect, Fiber, FiberSet, Layer } from "@effect-app/core"
2
-
3
- import type {} from "effect/Scope"
4
- import type {} from "effect/Context"
5
- import { PreludeLogger } from "../logger.js"
6
-
7
- const make = Effect.gen(function*() {
8
- const set = yield* FiberSet.make<unknown, never>()
9
- const add = (...fibers: Fiber.RuntimeFiber<never, never>[]) =>
10
- Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)))
11
- const addAll = (fibers: readonly Fiber.RuntimeFiber<never, never>[]) =>
12
- Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)))
13
- const join = FiberSet.size(set).pipe(
14
- Effect.andThen((count) => PreludeLogger.logDebug(`Joining ${count} current fibers on the MainFiberSet`)),
15
- Effect.andThen(FiberSet.join(set))
16
- )
17
- const run = FiberSet.run(set)
18
-
19
- // const waitUntilEmpty = Effect.gen(function*() {
20
- // const currentSize = yield* FiberSet.size(set)
21
- // if (currentSize === 0) {
22
- // return
23
- // }
24
- // yield* PreludeLogger.logInfo("Waiting MainFiberSet to be empty: " + currentSize)
25
- // while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
26
- // yield* PreludeLogger.logDebug("MainFiberSet is empty")
27
- // })
28
-
29
- // TODO: loop and interrupt all fibers in the set continuously?
30
- const interrupt = Fiber.interruptAll(set)
31
-
32
- return {
33
- interrupt,
34
- join,
35
- run,
36
- add,
37
- addAll
38
- }
39
- })
40
-
41
- /**
42
- * Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
43
- * you should register these long running fibers in a FiberSet, and join them at the end of your main program.
44
- * This way any errors will blow up the main program instead of fibers dying unknowingly.
45
- */
46
- export class MainFiberSet extends Context.TagMakeId("MainFiberSet", make)<MainFiberSet>() {
47
- static readonly Live = this.toLayerScoped()
48
- static readonly JoinLive = this.pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live))
49
- static readonly run = <A, R>(self: Effect<A, never, R>) => this.use((_) => _.run(self))
50
- }