@effect-app/infra 1.40.0 → 1.41.1
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 +18 -0
- package/_cjs/api/reportError.cjs +3 -29
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/services/MainFiberSet.cjs +61 -0
- package/_cjs/services/MainFiberSet.cjs.map +1 -0
- package/_cjs/services/Operations.cjs +14 -14
- package/_cjs/services/Operations.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +0 -19
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/RequestFiberSet.cjs +85 -0
- package/_cjs/services/RequestFiberSet.cjs.map +1 -0
- package/dist/api/reportError.d.ts +2 -21
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +3 -29
- package/dist/services/MainFiberSet.d.ts +61 -0
- package/dist/services/MainFiberSet.d.ts.map +1 -0
- package/dist/services/MainFiberSet.js +54 -0
- package/dist/services/Operations.d.ts +26 -11
- package/dist/services/Operations.d.ts.map +1 -1
- package/dist/services/Operations.js +17 -14
- package/dist/services/QueueMaker/errors.d.ts +0 -14
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +1 -18
- package/dist/services/RequestFiberSet.d.ts +70 -0
- package/dist/services/RequestFiberSet.d.ts.map +1 -0
- package/dist/services/RequestFiberSet.js +79 -0
- package/package.json +23 -3
- package/src/api/reportError.ts +2 -40
- package/src/services/MainFiberSet.ts +71 -0
- package/src/services/Operations.ts +48 -45
- package/src/services/QueueMaker/errors.ts +0 -27
- package/src/services/RequestFiberSet.ts +107 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 1.41.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2b3bccc: fix up accessors
|
|
8
|
+
|
|
9
|
+
## 1.41.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 3d4e45a: cleanup FiberSets
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [3d4e45a]
|
|
18
|
+
- @effect-app/infra-adapters@1.20.0
|
|
19
|
+
- effect-app@1.29.0
|
|
20
|
+
|
|
3
21
|
## 1.40.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
package/_cjs/api/reportError.cjs
CHANGED
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
exports.forkDaemonReportRequestUnexpected = forkDaemonReportRequestUnexpected;
|
|
8
|
-
var _RequestFiberSet = require("@effect-app/infra-adapters/RequestFiberSet");
|
|
6
|
+
exports.reportUnknownRequestError = exports.reportRequestError = void 0;
|
|
9
7
|
var _effectApp = require("effect-app");
|
|
10
8
|
var _errorReporter = require("../errorReporter.cjs");
|
|
11
9
|
// const onExitReportError = (name: string, unknownOnly?: boolean) => {
|
|
@@ -26,30 +24,6 @@ const tapErrorCause = (name, unknownOnly) => {
|
|
|
26
24
|
const log = (0, _errorReporter.logError)(name);
|
|
27
25
|
return self => _effectApp.Effect.tapErrorCause(self, cause => unknownOnly ? _effectApp.Cause.isFailure(cause) ? log(cause) : report(cause) : report(cause));
|
|
28
26
|
};
|
|
29
|
-
const reportRequestError = tapErrorCause("request");
|
|
30
|
-
const reportUnknownRequestError = tapErrorCause("request", true);
|
|
31
|
-
/**
|
|
32
|
-
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
33
|
-
* new fiber isn't attached to the parent, when the fiber executing the
|
|
34
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
35
|
-
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
36
|
-
*
|
|
37
|
-
* The parent span is set to the root span of the current fiber.
|
|
38
|
-
* Reports errors.
|
|
39
|
-
*/
|
|
40
|
-
function forkDaemonReportRequest(self) {
|
|
41
|
-
return self.pipe(reportRequestError, _RequestFiberSet.setRootParentSpan, _effectApp.Effect.uninterruptible, _RequestFiberSet.RequestFiberSet.run);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
45
|
-
* new fiber isn't attached to the parent, when the fiber executing the
|
|
46
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
47
|
-
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
48
|
-
*
|
|
49
|
-
* The parent span is set to the root span of the current fiber.
|
|
50
|
-
* Reports unexpected errors.
|
|
51
|
-
*/
|
|
52
|
-
function forkDaemonReportRequestUnexpected(self) {
|
|
53
|
-
return self.pipe(reportUnknownRequestError, _RequestFiberSet.setRootParentSpan, _effectApp.Effect.uninterruptible, _RequestFiberSet.RequestFiberSet.run);
|
|
54
|
-
}
|
|
27
|
+
const reportRequestError = exports.reportRequestError = tapErrorCause("request");
|
|
28
|
+
const reportUnknownRequestError = exports.reportUnknownRequestError = tapErrorCause("request", true);
|
|
55
29
|
//# sourceMappingURL=reportError.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportError.cjs","names":["
|
|
1
|
+
{"version":3,"file":"reportError.cjs","names":["_effectApp","require","_errorReporter","tapErrorCause","name","unknownOnly","report","reportError","log","logError","self","Effect","cause","Cause","isFailure","reportRequestError","exports","reportUnknownRequestError"],"sources":["../../src/api/reportError.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,aAAa,GAAGA,CAACC,IAAY,EAAEC,WAAqB,KAAI;EAC5D,MAAMC,MAAM,GAAG,IAAAC,0BAAW,EAACH,IAAI,CAAC;EAChC,MAAMI,GAAG,GAAG,IAAAC,uBAAQ,EAACL,IAAI,CAAC;EAC1B,OAAiBM,IAAqB,IACpCC,iBAAM,CAACR,aAAa,CAACO,IAAI,EAAGE,KAAK,IAC/BP,WAAW,GACPQ,gBAAK,CAACC,SAAS,CAACF,KAAK,CAAC,GACpBJ,GAAG,CAACI,KAAK,CAAC,GACVN,MAAM,CAACM,KAAK,CAAC,GACfN,MAAM,CAACM,KAAK,CAAC,CAAC;AACxB,CAAC;AACM,MAAMG,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAGZ,aAAa,CAAC,SAAS,CAAC;AACnD,MAAMc,yBAAyB,GAAAD,OAAA,CAAAC,yBAAA,GAAGd,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
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
|
+
var _errors = require("./QueueMaker/errors.cjs");
|
|
10
|
+
var _RequestFiberSet = require("./RequestFiberSet.cjs");
|
|
11
|
+
const make = _core.Effect.gen(function* () {
|
|
12
|
+
const set = yield* _core.FiberSet.make();
|
|
13
|
+
const add = (...fibers) => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
|
|
14
|
+
const addAll = fibers => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
|
|
15
|
+
const join = _core.FiberSet.size(set).pipe(_core.Effect.andThen(count => _logger.InfraLogger.logDebug(`Joining ${count} current fibers on the MainFiberSet`)), _core.Effect.andThen(_core.FiberSet.join(set)));
|
|
16
|
+
const run = _core.FiberSet.run(set);
|
|
17
|
+
// const waitUntilEmpty = Effect.gen(function*() {
|
|
18
|
+
// const currentSize = yield* FiberSet.size(set)
|
|
19
|
+
// if (currentSize === 0) {
|
|
20
|
+
// return
|
|
21
|
+
// }
|
|
22
|
+
// yield* InfraLogger.logInfo("Waiting MainFiberSet to be empty: " + currentSize)
|
|
23
|
+
// while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
|
|
24
|
+
// yield* InfraLogger.logDebug("MainFiberSet is empty")
|
|
25
|
+
// })
|
|
26
|
+
// TODO: loop and interrupt all fibers in the set continuously?
|
|
27
|
+
const interrupt = _core.Fiber.interruptAll(set);
|
|
28
|
+
/**
|
|
29
|
+
* Forks the effect into a new fiber attached to the MainFiberSet scope. Because the
|
|
30
|
+
* new fiber isn't attached to the parent, when the fiber executing the
|
|
31
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
32
|
+
* The fiber will be interrupted when the MainFiberSet scope is closed.
|
|
33
|
+
*
|
|
34
|
+
* The parent span is set to the root span of the current fiber.
|
|
35
|
+
* Reports and then swallows errors.
|
|
36
|
+
*/
|
|
37
|
+
function forkDaemonReport(self) {
|
|
38
|
+
return self.pipe(_core.Effect.asVoid, _core.Effect.catchAllCause((0, _errors.reportNonInterruptedFailureCause)({})), _RequestFiberSet.setRootParentSpan, _core.Effect.uninterruptible, run);
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
interrupt,
|
|
42
|
+
join,
|
|
43
|
+
forkDaemonReport,
|
|
44
|
+
run,
|
|
45
|
+
add,
|
|
46
|
+
addAll
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
|
|
51
|
+
* you should register these long running fibers in a FiberSet, and join them at the end of your main program.
|
|
52
|
+
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
53
|
+
*/
|
|
54
|
+
class MainFiberSet extends _core.Context.TagMakeId("MainFiberSet", make)() {
|
|
55
|
+
static Live = this.toLayerScoped();
|
|
56
|
+
static JoinLive = this.pipe(_core.Effect.andThen(_ => _.join), _core.Layer.effectDiscard, _core.Layer.provide(this.Live));
|
|
57
|
+
static run = self => this.use(_ => _.run(self));
|
|
58
|
+
static forkDaemonReport = self => this.use(_ => _.forkDaemonReport(self));
|
|
59
|
+
}
|
|
60
|
+
exports.MainFiberSet = MainFiberSet;
|
|
61
|
+
//# sourceMappingURL=MainFiberSet.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MainFiberSet.cjs","names":["_core","require","_logger","_errors","_RequestFiberSet","make","Effect","gen","set","FiberSet","add","fibers","sync","forEach","_","unsafeAdd","addAll","join","size","pipe","andThen","count","InfraLogger","logDebug","run","interrupt","Fiber","interruptAll","forkDaemonReport","self","asVoid","catchAllCause","reportNonInterruptedFailureCause","setRootParentSpan","uninterruptible","MainFiberSet","Context","TagMakeId","Live","toLayerScoped","JoinLive","Layer","effectDiscard","provide","use"],"sources":["../../src/services/MainFiberSet.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,gBAAA,GAAAH,OAAA;AAEA,MAAMI,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,mBAAW,CAACC,QAAQ,CAAC,WAAWF,KAAK,qCAAqC,CAAC,CAAC,EACtGf,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;;;;;;;;;EASA,SAASoB,gBAAgBA,CAAUC,IAAqB;IACtD,OAAOA,IAAI,CAACV,IAAI,CACdb,YAAM,CAACwB,MAAM,EACbxB,YAAM,CAACyB,aAAa,CAAC,IAAAC,wCAAgC,EAAC,EAAE,CAAC,CAAC,EAC1DC,kCAAiB,EACjB3B,YAAM,CAAC4B,eAAe,EACtBV,GAAG,CACJ;EACH;EACA,OAAO;IACLC,SAAS;IACTR,IAAI;IACJW,gBAAgB;IAChBJ,GAAG;IACHd,GAAG;IACHM;GACD;AACH,CAAC,CAAC;AAEF;;;;;AAKM,MAAOmB,YAAa,SAAQC,aAAO,CAACC,SAAS,CAAC,cAAc,EAAEhC,IAAI,CAAC,EAAgB;EACvF,OAAgBiC,IAAI,GAAG,IAAI,CAACC,aAAa,EAAE;EAC3C,OAAgBC,QAAQ,GAAG,IAAI,CAACrB,IAAI,CAACb,YAAM,CAACc,OAAO,CAAEN,CAAC,IAAKA,CAAC,CAACG,IAAI,CAAC,EAAEwB,WAAK,CAACC,aAAa,EAAED,WAAK,CAACE,OAAO,CAAC,IAAI,CAACL,IAAI,CAAC,CAAC;EAClH,OAAgBd,GAAG,GAAUK,IAAyB,IAAK,IAAI,CAACe,GAAG,CAAE9B,CAAC,IAAKA,CAAC,CAACU,GAAG,CAACK,IAAI,CAAC,CAAC;EACvF,OAAgBD,gBAAgB,GAAaC,IAAqB,IAAK,IAAI,CAACe,GAAG,CAAE9B,CAAC,IAAKA,CAAC,CAACc,gBAAgB,CAACC,IAAI,CAAC,CAAC","ignoreList":[]}
|
|
@@ -3,22 +3,20 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
exports.forkOperationFunction = forkOperationFunction;
|
|
6
|
+
exports.Operations = void 0;
|
|
8
7
|
var _Effect = require("@effect-app/core/Effect");
|
|
9
8
|
var _Function = require("@effect-app/core/Function");
|
|
10
|
-
var _RequestFiberSet = require("@effect-app/infra-adapters/RequestFiberSet");
|
|
11
9
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
12
10
|
var _schema = require("@effect-app/schema");
|
|
13
11
|
var _dateFns = require("date-fns");
|
|
14
12
|
var _effectApp = require("effect-app");
|
|
15
13
|
var _Operations = require("effect-app/Operations");
|
|
16
|
-
var _MainFiberSet = require("effect-app/services/MainFiberSet");
|
|
17
14
|
var Scope = _interopRequireWildcard(require("effect/Scope"));
|
|
18
|
-
var _reportError = require("../api/reportError.cjs");
|
|
19
15
|
var _rateLimit = require("../rateLimit.cjs");
|
|
16
|
+
var _MainFiberSet = require("./MainFiberSet.cjs");
|
|
20
17
|
var _OperationsRepo = require("./OperationsRepo.cjs");
|
|
21
18
|
var _query = require("./query.cjs");
|
|
19
|
+
var _RequestFiberSet = require("./RequestFiberSet.cjs");
|
|
22
20
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
23
21
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
24
22
|
const reportAppError = (0, _errorReporter.reportError)("Operations.Cleanup");
|
|
@@ -52,22 +50,31 @@ const make = _effectApp.Effect.gen(function* () {
|
|
|
52
50
|
})).pipe(_effectApp.Effect.orDie));
|
|
53
51
|
}
|
|
54
52
|
function fork(self, fnc, title) {
|
|
55
|
-
return _effectApp.Effect.flatMap(Scope.make(), scope => register(title).pipe(Scope.extend(scope), _effectApp.Effect.flatMap(id =>
|
|
53
|
+
return _effectApp.Effect.flatMap(Scope.make(), scope => register(title).pipe(Scope.extend(scope), _effectApp.Effect.flatMap(id => reqFiberSet.forkDaemonReportUnexpected(Scope.use(self(id).pipe(_effectApp.Effect.withSpan(title)), scope)).pipe(_effectApp.Effect.map(fiber => ({
|
|
56
54
|
fiber,
|
|
57
55
|
id
|
|
58
56
|
})))), _effectApp.Effect.tap(({
|
|
59
57
|
id
|
|
60
58
|
}) => _effectApp.Effect.interruptible(fnc(id)).pipe(_effectApp.Effect.forkScoped, Scope.extend(scope))))).pipe(_effectApp.Effect.provideService(_RequestFiberSet.RequestFiberSet, reqFiberSet));
|
|
61
59
|
}
|
|
62
|
-
const fork2 = (0, _Function.dual)(2, (self, title) => _effectApp.Effect.flatMap(Scope.make(), scope => register(title).pipe(Scope.extend(scope), _effectApp.Effect.flatMap(id =>
|
|
60
|
+
const fork2 = (0, _Function.dual)(2, (self, title) => _effectApp.Effect.flatMap(Scope.make(), scope => register(title).pipe(Scope.extend(scope), _effectApp.Effect.flatMap(id => reqFiberSet.forkDaemonReportUnexpected(Scope.use(self(id).pipe(_effectApp.Effect.withSpan(title)), scope)).pipe(_effectApp.Effect.map(fiber => ({
|
|
63
61
|
fiber,
|
|
64
62
|
id
|
|
65
63
|
})))))));
|
|
64
|
+
const forkOperation = (0, _Function.dual)(2, (self, title) => _effectApp.Effect.flatMap(Scope.make(), scope => register(title).pipe(Scope.extend(scope), _effectApp.Effect.flatMap(id => reqFiberSet.forkDaemonReportUnexpected(Scope.use(self.pipe(_effectApp.Effect.withSpan(title)), scope)).pipe(_effectApp.Effect.map(fiber => ({
|
|
65
|
+
fiber,
|
|
66
|
+
id
|
|
67
|
+
})))))));
|
|
68
|
+
function forkOperationFunction(fnc, title) {
|
|
69
|
+
return inp => fnc(inp).pipe(_ => forkOperation(_, title));
|
|
70
|
+
}
|
|
66
71
|
return {
|
|
67
72
|
cleanup,
|
|
68
73
|
register,
|
|
69
74
|
fork,
|
|
70
75
|
fork2,
|
|
76
|
+
forkOperation,
|
|
77
|
+
forkOperationFunction,
|
|
71
78
|
all: repo.all,
|
|
72
79
|
find: findOp,
|
|
73
80
|
update
|
|
@@ -84,11 +91,4 @@ class Operations extends _effectApp.Context.TagMakeId("effect-app/Operations", m
|
|
|
84
91
|
static Live = this.CleanupLive.pipe(_effectApp.Layer.provideMerge(this.toLayer()), _effectApp.Layer.provide(_RequestFiberSet.RequestFiberSet.Live));
|
|
85
92
|
}
|
|
86
93
|
exports.Operations = Operations;
|
|
87
|
-
const forkOperation = exports.forkOperation = (0, _Function.dual)(2, (self, title) => _effectApp.Effect.flatMap(Scope.make(), scope => Operations.register(title).pipe(Scope.extend(scope), _effectApp.Effect.flatMap(id => (0, _reportError.forkDaemonReportRequestUnexpected)(Scope.use(self.pipe(_effectApp.Effect.withSpan(title)), scope)).pipe(_effectApp.Effect.map(fiber => ({
|
|
88
|
-
fiber,
|
|
89
|
-
id
|
|
90
|
-
})))))));
|
|
91
|
-
function forkOperationFunction(fnc, title) {
|
|
92
|
-
return inp => fnc(inp).pipe(_ => forkOperation(_, title));
|
|
93
|
-
}
|
|
94
94
|
//# sourceMappingURL=Operations.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operations.cjs","names":["_Effect","require","_Function","
|
|
1
|
+
{"version":3,"file":"Operations.cjs","names":["_Effect","require","_Function","_errorReporter","_schema","_dateFns","_effectApp","_Operations","Scope","_interopRequireWildcard","_rateLimit","_MainFiberSet","_OperationsRepo","_query","_RequestFiberSet","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","reportAppError","reportError","make","Effect","gen","repo","OperationsRepo","reqFiberSet","RequestFiberSet","makeOp","sync","OperationId","register","title","tap","id","andThen","annotateLogscoped","acquireRelease","addOp","_","exit","finishOp","cleanup","subHours","Date","pipe","before","query","where","toISOString","ops","batch","succeed","items","removeAndPublish","withSpan","save","Operation","orDie","findOp","find","flatMap","copy","updatedAt","result","Exit","isSuccess","Success","Failure","message","Cause","isInterrupted","cause","NonEmptyString2k","isDie","failureOption","Option","S","is","some","none","getOrNull","update","progress","fork","self","fnc","scope","extend","forkDaemonReportUnexpected","use","map","fiber","interruptible","forkScoped","provideService","fork2","dual","forkOperation","forkOperationFunction","inp","all","Operations","Context","TagMakeId","CleanupLive","void","schedule","Schedule","fixed","Duration","minutes","MainFiberSet","run","Layer","effectDiscard","provide","Live","provideMerge","toLayer"],"sources":["../../src/services/Operations.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -3,33 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.forkDaemonReportQueue = forkDaemonReportQueue;
|
|
7
|
-
exports.reportFatalQueueError = void 0;
|
|
8
6
|
exports.reportNonInterruptedFailure = reportNonInterruptedFailure;
|
|
9
7
|
exports.reportNonInterruptedFailureCause = reportNonInterruptedFailureCause;
|
|
10
8
|
exports.reportQueueError = void 0;
|
|
11
|
-
var _RequestFiberSet = require("@effect-app/infra-adapters/RequestFiberSet");
|
|
12
9
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
13
10
|
var _effectApp = require("effect-app");
|
|
14
|
-
var _MainFiberSet = require("effect-app/services/MainFiberSet");
|
|
15
11
|
const reportQueueError_ = (0, _errorReporter.reportError)("Queue");
|
|
16
12
|
const reportQueueError = (cause, extras) => reportQueueError_(cause, extras);
|
|
17
|
-
/**
|
|
18
|
-
* Forks the effect into a new fiber attached to the MainFiberSet scope. Because the
|
|
19
|
-
* new fiber isn't attached to the parent, when the fiber executing the
|
|
20
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
21
|
-
* The fiber will be interrupted when the MainFiberSet scope is closed.
|
|
22
|
-
*
|
|
23
|
-
* The parent span is set to the root span of the current fiber.
|
|
24
|
-
* Reports and then swallows errors.
|
|
25
|
-
*
|
|
26
|
-
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
27
|
-
*/
|
|
28
13
|
exports.reportQueueError = reportQueueError;
|
|
29
|
-
function forkDaemonReportQueue(self) {
|
|
30
|
-
return self.pipe(_effectApp.Effect.asVoid, _effectApp.Effect.catchAllCause(reportNonInterruptedFailureCause({})), _RequestFiberSet.setRootParentSpan, _effectApp.Effect.uninterruptible, _MainFiberSet.MainFiberSet.run);
|
|
31
|
-
}
|
|
32
|
-
const reportFatalQueueError = exports.reportFatalQueueError = (0, _errorReporter.reportError)("FatalQueue");
|
|
33
14
|
function reportNonInterruptedFailure(context) {
|
|
34
15
|
const report = reportNonInterruptedFailureCause(context);
|
|
35
16
|
return inp => inp.pipe(_effectApp.Effect.onExit(_effectApp.Exit.match({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":["
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":["_errorReporter","require","_effectApp","reportQueueError_","reportError","reportQueueError","cause","extras","exports","reportNonInterruptedFailure","context","report","reportNonInterruptedFailureCause","inp","pipe","Effect","onExit","Exit","match","onFailure","onSuccess","void","exit","Cause","isInterrupted","failCause"],"sources":["../../../src/services/QueueMaker/errors.ts"],"sourcesContent":[null],"mappings":";;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,MAAME,iBAAiB,GAAG,IAAAC,0BAAW,EAAC,OAAO,CAAC;AAEvC,MAAMC,gBAAgB,GAAGA,CAAIC,KAAe,EAAEC,MAAgC,KACnFJ,iBAAiB,CAACG,KAAK,EAAEC,MAAM,CAAC;AAAAC,OAAA,CAAAH,gBAAA,GAAAA,gBAAA;AAE5B,SAAUI,2BAA2BA,CAACC,OAAiC;EAC3E,MAAMC,MAAM,GAAGC,gCAAgC,CAACF,OAAO,CAAC;EACxD,OAAiBG,GAAoB,IACnCA,GAAG,CAACC,IAAI,CACNC,iBAAM,CAACC,MAAM,CACXC,eAAI,CAACC,KAAK,CAAC;IACTC,SAAS,EAAER,MAAM;IACjBS,SAAS,EAAEA,CAAA,KAAML,iBAAM,CAACM;GACzB,CAAC,CACH,EACDN,iBAAM,CAACO,IAAI,CACZ;AACL;AAEM,SAAUV,gCAAgCA,CAACF,OAAiC;EAChF,OAAWJ,KAAe,IAAkB;IAC1C,IAAIiB,gBAAK,CAACC,aAAa,CAAClB,KAAK,CAAC,EAAE;MAC9B,OAAOS,iBAAM,CAACU,SAAS,CAACnB,KAAqB,CAAC;IAChD;IACA,OAAOD,gBAAgB,CAACC,KAAK,EAAEI,OAAO,CAAC;EACzC,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.setRootParentSpan = exports.RequestFiberSet = void 0;
|
|
7
|
+
var _core = require("@effect-app/core");
|
|
8
|
+
var _reportError = require("../api/reportError.cjs");
|
|
9
|
+
var _logger = require("../logger.cjs");
|
|
10
|
+
const getRootParentSpan = _core.Effect.gen(function* () {
|
|
11
|
+
let span = yield* _core.Effect.currentSpan.pipe(_core.Effect.catchTag("NoSuchElementException", () => _core.Effect.succeed(null)));
|
|
12
|
+
if (!span) return span;
|
|
13
|
+
while (span._tag === "Span" && _core.Option.isSome(span.parent)) {
|
|
14
|
+
span = span.parent.value;
|
|
15
|
+
}
|
|
16
|
+
return span;
|
|
17
|
+
});
|
|
18
|
+
const setRootParentSpan = self => getRootParentSpan.pipe(_core.Effect.andThen(span => span ? _core.Effect.withParentSpan(self, span) : self));
|
|
19
|
+
exports.setRootParentSpan = setRootParentSpan;
|
|
20
|
+
const make = _core.Effect.gen(function* () {
|
|
21
|
+
const set = yield* _core.FiberSet.make();
|
|
22
|
+
const add = (...fibers) => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
|
|
23
|
+
const addAll = fibers => _core.Effect.sync(() => fibers.forEach(_ => _core.FiberSet.unsafeAdd(set, _)));
|
|
24
|
+
const join = _core.FiberSet.size(set).pipe(_core.Effect.andThen(count => _logger.InfraLogger.logInfo(`Joining ${count} current fibers on the RequestFiberSet`)), _core.Effect.andThen(_core.FiberSet.join(set)));
|
|
25
|
+
const run = _core.FiberSet.run(set);
|
|
26
|
+
const register = self => self.pipe(_core.Effect.fork, _core.Effect.tap(add), _core.Effect.andThen(_core.Fiber.join));
|
|
27
|
+
// const waitUntilEmpty = Effect.gen(function*() {
|
|
28
|
+
// const currentSize = yield* FiberSet.size(set)
|
|
29
|
+
// if (currentSize === 0) {
|
|
30
|
+
// return
|
|
31
|
+
// }
|
|
32
|
+
// yield* Effect.logInfo("Waiting RequestFiberSet to be empty: " + currentSize)
|
|
33
|
+
// while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
|
|
34
|
+
// yield* Effect.logDebug("RequestFiberSet is empty")
|
|
35
|
+
// })
|
|
36
|
+
// TODO: loop and interrupt all fibers in the set continuously?
|
|
37
|
+
const interrupt = _core.Fiber.interruptAll(set);
|
|
38
|
+
/**
|
|
39
|
+
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
40
|
+
* new fiber isn't attached to the parent, when the fiber executing the
|
|
41
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
42
|
+
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
43
|
+
*
|
|
44
|
+
* The parent span is set to the root span of the current fiber.
|
|
45
|
+
* Reports errors.
|
|
46
|
+
*/
|
|
47
|
+
function forkDaemonReport(self) {
|
|
48
|
+
return self.pipe(_reportError.reportRequestError, setRootParentSpan, _core.Effect.uninterruptible, run);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
52
|
+
* new fiber isn't attached to the parent, when the fiber executing the
|
|
53
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
54
|
+
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
55
|
+
*
|
|
56
|
+
* The parent span is set to the root span of the current fiber.
|
|
57
|
+
* Reports unexpected errors.
|
|
58
|
+
*/
|
|
59
|
+
function forkDaemonReportUnexpected(self) {
|
|
60
|
+
return self.pipe(_reportError.reportUnknownRequestError, setRootParentSpan, _core.Effect.uninterruptible, run);
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
interrupt,
|
|
64
|
+
join,
|
|
65
|
+
run,
|
|
66
|
+
add,
|
|
67
|
+
addAll,
|
|
68
|
+
register,
|
|
69
|
+
forkDaemonReport,
|
|
70
|
+
forkDaemonReportUnexpected
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Whenever you fork a fiber for a Request, and you want to prevent dependent services to close prematurely on interruption,
|
|
75
|
+
* like the ServiceBus Sender, you should register these fibers in this FiberSet.
|
|
76
|
+
*/
|
|
77
|
+
class RequestFiberSet extends _core.Context.TagMakeId("RequestFiberSet", make)() {
|
|
78
|
+
static Live = this.toLayerScoped();
|
|
79
|
+
static register = self => this.use(_ => _.register(self));
|
|
80
|
+
static run = self => this.use(_ => _.run(self));
|
|
81
|
+
static forkDaemonReport = self => this.use(_ => _.forkDaemonReport(self));
|
|
82
|
+
static forkDaemonReportUnexpected = self => this.use(_ => _.forkDaemonReportUnexpected(self));
|
|
83
|
+
}
|
|
84
|
+
exports.RequestFiberSet = RequestFiberSet;
|
|
85
|
+
//# sourceMappingURL=RequestFiberSet.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestFiberSet.cjs","names":["_core","require","_reportError","_logger","getRootParentSpan","Effect","gen","span","currentSpan","pipe","catchTag","succeed","_tag","Option","isSome","parent","value","setRootParentSpan","self","andThen","withParentSpan","exports","make","set","FiberSet","add","fibers","sync","forEach","_","unsafeAdd","addAll","join","size","count","InfraLogger","logInfo","run","register","fork","tap","Fiber","interrupt","interruptAll","forkDaemonReport","reportRequestError","uninterruptible","forkDaemonReportUnexpected","reportUnknownRequestError","RequestFiberSet","Context","TagMakeId","Live","toLayerScoped","use"],"sources":["../../src/services/RequestFiberSet.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,23 +1,4 @@
|
|
|
1
|
-
import { RequestFiberSet } from "@effect-app/infra-adapters/RequestFiberSet";
|
|
2
1
|
import { Effect } from "effect-app";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* new fiber isn't attached to the parent, when the fiber executing the
|
|
6
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
7
|
-
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
8
|
-
*
|
|
9
|
-
* The parent span is set to the root span of the current fiber.
|
|
10
|
-
* Reports errors.
|
|
11
|
-
*/
|
|
12
|
-
export declare function forkDaemonReportRequest<R, E, A>(self: Effect<A, E, R>): Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, R | RequestFiberSet>;
|
|
13
|
-
/**
|
|
14
|
-
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
15
|
-
* new fiber isn't attached to the parent, when the fiber executing the
|
|
16
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
17
|
-
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
18
|
-
*
|
|
19
|
-
* The parent span is set to the root span of the current fiber.
|
|
20
|
-
* Reports unexpected errors.
|
|
21
|
-
*/
|
|
22
|
-
export declare function forkDaemonReportRequestUnexpected<R, E, A>(self: Effect<A, E, R>): Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, RequestFiberSet | R>;
|
|
2
|
+
export declare const reportRequestError: <A, E, R>(self: Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
3
|
+
export declare const reportUnknownRequestError: <A, E, R>(self: Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
23
4
|
//# sourceMappingURL=reportError.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportError.d.ts","sourceRoot":"","sources":["../../src/api/reportError.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"reportError.d.ts","sourceRoot":"","sources":["../../src/api/reportError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,YAAY,CAAA;AA2B1C,eAAO,MAAM,kBAAkB,GARrB,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BAQkB,CAAA;AAC1D,eAAO,MAAM,yBAAyB,GAT5B,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BAS+B,CAAA"}
|
package/dist/api/reportError.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { RequestFiberSet, setRootParentSpan } from "@effect-app/infra-adapters/RequestFiberSet";
|
|
2
1
|
import { Cause, Effect } from "effect-app";
|
|
3
2
|
import { logError, reportError } from "../errorReporter.js";
|
|
4
3
|
// const onExitReportError = (name: string, unknownOnly?: boolean) => {
|
|
@@ -23,31 +22,6 @@ const tapErrorCause = (name, unknownOnly) => {
|
|
|
23
22
|
: report(cause)
|
|
24
23
|
: report(cause));
|
|
25
24
|
};
|
|
26
|
-
const reportRequestError = tapErrorCause("request");
|
|
27
|
-
const reportUnknownRequestError = tapErrorCause("request", true);
|
|
28
|
-
|
|
29
|
-
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
30
|
-
* new fiber isn't attached to the parent, when the fiber executing the
|
|
31
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
32
|
-
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
33
|
-
*
|
|
34
|
-
* The parent span is set to the root span of the current fiber.
|
|
35
|
-
* Reports errors.
|
|
36
|
-
*/
|
|
37
|
-
export function forkDaemonReportRequest(self) {
|
|
38
|
-
return self.pipe(reportRequestError, setRootParentSpan, Effect.uninterruptible, RequestFiberSet.run);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
42
|
-
* new fiber isn't attached to the parent, when the fiber executing the
|
|
43
|
-
* returned effect terminates, the forked fiber will continue running.
|
|
44
|
-
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
45
|
-
*
|
|
46
|
-
* The parent span is set to the root span of the current fiber.
|
|
47
|
-
* Reports unexpected errors.
|
|
48
|
-
*/
|
|
49
|
-
export function forkDaemonReportRequestUnexpected(self) {
|
|
50
|
-
return self
|
|
51
|
-
.pipe(reportUnknownRequestError, setRootParentSpan, Effect.uninterruptible, RequestFiberSet.run);
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0RXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3JlcG9ydEVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQTtBQUMvRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTNELHVFQUF1RTtBQUN2RSxxQ0FBcUM7QUFDckMsK0JBQStCO0FBQy9CLCtDQUErQztBQUMvQyxvQ0FBb0M7QUFDcEMsNkJBQTZCO0FBQzdCLHdCQUF3QjtBQUN4Qiw2RUFBNkU7QUFDN0UsbUNBQW1DO0FBQ25DLGdDQUFnQztBQUNoQyxpQ0FBaUM7QUFDakMseUJBQXlCO0FBQ3pCLElBQUk7QUFDSixNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBRSxXQUFxQixFQUFFLEVBQUU7SUFDNUQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMxQixPQUFPLENBQVUsSUFBcUIsRUFBRSxFQUFFLENBQ3hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbkMsV0FBVztRQUNULENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUN0QixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUN4QixDQUFDLENBQUE7QUFDRCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNuRCxNQUFNLHlCQUF5QixHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFFaEU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQVUsSUFBcUI7SUFDcEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsTUFBTSxDQUFDLGVBQWUsRUFDdEIsZUFBZSxDQUFDLEdBQUcsQ0FDcEIsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBVSxJQUFxQjtJQUM5RSxPQUFPLElBQUk7U0FDUixJQUFJLENBQ0gseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixNQUFNLENBQUMsZUFBZSxFQUN0QixlQUFlLENBQUMsR0FBRyxDQUNwQixDQUFBO0FBQ0wsQ0FBQyJ9
|
|
25
|
+
export const reportRequestError = tapErrorCause("request");
|
|
26
|
+
export const reportUnknownRequestError = tapErrorCause("request", true);
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0RXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3JlcG9ydEVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFM0QsdUVBQXVFO0FBQ3ZFLHFDQUFxQztBQUNyQywrQkFBK0I7QUFDL0IsK0NBQStDO0FBQy9DLG9DQUFvQztBQUNwQyw2QkFBNkI7QUFDN0Isd0JBQXdCO0FBQ3hCLDZFQUE2RTtBQUM3RSxtQ0FBbUM7QUFDbkMsZ0NBQWdDO0FBQ2hDLGlDQUFpQztBQUNqQyx5QkFBeUI7QUFDekIsSUFBSTtBQUNKLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBWSxFQUFFLFdBQXFCLEVBQUUsRUFBRTtJQUM1RCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFCLE9BQU8sQ0FBVSxJQUFxQixFQUFFLEVBQUUsQ0FDeEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNuQyxXQUFXO1FBQ1QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ1osQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3hCLENBQUMsQ0FBQTtBQUNELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMxRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,61 @@
|
|
|
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
|
+
forkDaemonReport: <A, E, R>(self: Effect<A, E, R>) => Effect.Effect<Fiber.RuntimeFiber<void, never>, never, R>;
|
|
6
|
+
run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
7
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
8
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
9
|
+
}) => Readonly<{
|
|
10
|
+
interrupt: Effect.Effect<void, never, never>;
|
|
11
|
+
join: Effect.Effect<void, never, never>;
|
|
12
|
+
forkDaemonReport: <A, E, R>(self: Effect<A, E, R>) => Effect.Effect<Fiber.RuntimeFiber<void, never>, never, R>;
|
|
13
|
+
run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
14
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
15
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
16
|
+
}> & Context.TagClassShape<"MainFiberSet", {
|
|
17
|
+
interrupt: Effect.Effect<void, never, never>;
|
|
18
|
+
join: Effect.Effect<void, never, never>;
|
|
19
|
+
forkDaemonReport: <A, E, R>(self: Effect<A, E, R>) => Effect.Effect<Fiber.RuntimeFiber<void, never>, never, R>;
|
|
20
|
+
run: <R, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R>;
|
|
21
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
22
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
23
|
+
}>) & {
|
|
24
|
+
toLayer: {
|
|
25
|
+
(): Layer<MainFiberSet, never, import("effect/Scope").Scope>;
|
|
26
|
+
<E_1, R_1>(eff: Effect<Omit<MainFiberSet, keyof Context.TagClassShape<any, any>>, E_1, R_1>): Layer<MainFiberSet, E_1, R_1>;
|
|
27
|
+
};
|
|
28
|
+
toLayerScoped: {
|
|
29
|
+
(): Layer<MainFiberSet, never, never>;
|
|
30
|
+
<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>>;
|
|
31
|
+
};
|
|
32
|
+
of: (service: Context.TagClassShape<any, any>) => MainFiberSet;
|
|
33
|
+
make: Effect<MainFiberSet, never, import("effect/Scope").Scope>;
|
|
34
|
+
} & Context.Tag<MainFiberSet, MainFiberSet> & {
|
|
35
|
+
interrupt: Effect<void, never, MainFiberSet>;
|
|
36
|
+
join: Effect<void, never, MainFiberSet>;
|
|
37
|
+
add: (...args: readonly Fiber.RuntimeFiber<never, never>[]) => Effect<void, never, MainFiberSet>;
|
|
38
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect<void, never, MainFiberSet>;
|
|
39
|
+
} & {
|
|
40
|
+
use: <X>(body: (_: {
|
|
41
|
+
interrupt: Effect.Effect<void, never, never>;
|
|
42
|
+
join: Effect.Effect<void, never, never>;
|
|
43
|
+
forkDaemonReport: <A, E, R>(self: Effect<A, E, R>) => Effect.Effect<Fiber.RuntimeFiber<void, never>, never, R>;
|
|
44
|
+
run: <R_1, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R_1>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R_1>;
|
|
45
|
+
add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
46
|
+
addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
|
|
47
|
+
}) => X) => X extends Effect<infer A_1, infer E_2, infer R_4> ? Effect<A_1, E_2, R_4 | MainFiberSet> : Effect<X, never, MainFiberSet>;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
|
|
51
|
+
* you should register these long running fibers in a FiberSet, and join them at the end of your main program.
|
|
52
|
+
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
53
|
+
*/
|
|
54
|
+
export declare class MainFiberSet extends MainFiberSet_base {
|
|
55
|
+
static readonly Live: Layer<MainFiberSet, never, never>;
|
|
56
|
+
static readonly JoinLive: Layer.Layer<never, never, never>;
|
|
57
|
+
static readonly run: <A, R>(self: Effect<A, never, R>) => Effect<Fiber.RuntimeFiber<A, never>, never, MainFiberSet | R>;
|
|
58
|
+
static readonly forkDaemonReport: <A, E, R>(self: Effect<A, E, R>) => Effect<Fiber.RuntimeFiber<void, never>, never, MainFiberSet | R>;
|
|
59
|
+
}
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=MainFiberSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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;;;;uBAyC9C,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;qBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;uBA8BzC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;qBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;uBA8BzC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;qBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;2BA8BzC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;yBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;yBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;AAiDrE;;;;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;IACvF,MAAM,CAAC,QAAQ,CAAC,gBAAgB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sEAA8C;CACjH"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Context, Effect, Fiber, FiberSet, Layer } from "@effect-app/core";
|
|
2
|
+
import { InfraLogger } from "../logger.js";
|
|
3
|
+
import { reportNonInterruptedFailureCause } from "./QueueMaker/errors.js";
|
|
4
|
+
import { setRootParentSpan } from "./RequestFiberSet.js";
|
|
5
|
+
const make = Effect.gen(function* () {
|
|
6
|
+
const set = yield* FiberSet.make();
|
|
7
|
+
const add = (...fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
|
|
8
|
+
const addAll = (fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
|
|
9
|
+
const join = FiberSet.size(set).pipe(Effect.andThen((count) => InfraLogger.logDebug(`Joining ${count} current fibers on the MainFiberSet`)), Effect.andThen(FiberSet.join(set)));
|
|
10
|
+
const run = FiberSet.run(set);
|
|
11
|
+
// const waitUntilEmpty = Effect.gen(function*() {
|
|
12
|
+
// const currentSize = yield* FiberSet.size(set)
|
|
13
|
+
// if (currentSize === 0) {
|
|
14
|
+
// return
|
|
15
|
+
// }
|
|
16
|
+
// yield* InfraLogger.logInfo("Waiting MainFiberSet to be empty: " + currentSize)
|
|
17
|
+
// while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
|
|
18
|
+
// yield* InfraLogger.logDebug("MainFiberSet is empty")
|
|
19
|
+
// })
|
|
20
|
+
// TODO: loop and interrupt all fibers in the set continuously?
|
|
21
|
+
const interrupt = Fiber.interruptAll(set);
|
|
22
|
+
/**
|
|
23
|
+
* Forks the effect into a new fiber attached to the MainFiberSet scope. Because the
|
|
24
|
+
* new fiber isn't attached to the parent, when the fiber executing the
|
|
25
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
26
|
+
* The fiber will be interrupted when the MainFiberSet scope is closed.
|
|
27
|
+
*
|
|
28
|
+
* The parent span is set to the root span of the current fiber.
|
|
29
|
+
* Reports and then swallows errors.
|
|
30
|
+
*/
|
|
31
|
+
function forkDaemonReport(self) {
|
|
32
|
+
return self.pipe(Effect.asVoid, Effect.catchAllCause(reportNonInterruptedFailureCause({})), setRootParentSpan, Effect.uninterruptible, run);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
interrupt,
|
|
36
|
+
join,
|
|
37
|
+
forkDaemonReport,
|
|
38
|
+
run,
|
|
39
|
+
add,
|
|
40
|
+
addAll
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
|
|
45
|
+
* you should register these long running fibers in a FiberSet, and join them at the end of your main program.
|
|
46
|
+
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
47
|
+
*/
|
|
48
|
+
export class MainFiberSet extends Context.TagMakeId("MainFiberSet", make)() {
|
|
49
|
+
static Live = this.toLayerScoped();
|
|
50
|
+
static JoinLive = this.pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live));
|
|
51
|
+
static run = (self) => this.use((_) => _.run(self));
|
|
52
|
+
static forkDaemonReport = (self) => this.use((_) => _.forkDaemonReport(self));
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFpbkZpYmVyU2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL01haW5GaWJlclNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDMUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBa0IsQ0FBQTtJQUNsRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBMEMsRUFBRSxFQUFFLENBQzVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBbUQsRUFBRSxFQUFFLENBQ3JFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxxQ0FBcUMsQ0FBQyxDQUFDLEVBQ3RHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuQyxDQUFBO0lBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUU3QixrREFBa0Q7SUFDbEQsa0RBQWtEO0lBQ2xELDZCQUE2QjtJQUM3QixhQUFhO0lBQ2IsTUFBTTtJQUNOLG1GQUFtRjtJQUNuRiw4RUFBOEU7SUFDOUUseURBQXlEO0lBQ3pELEtBQUs7SUFFTCwrREFBK0Q7SUFDL0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6Qzs7Ozs7Ozs7T0FRRztJQUNILFNBQVMsZ0JBQWdCLENBQVUsSUFBcUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMxRCxpQkFBaUIsRUFDakIsTUFBTSxDQUFDLGVBQWUsRUFDdEIsR0FBRyxDQUNKLENBQUE7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNMLFNBQVM7UUFDVCxJQUFJO1FBQ0osZ0JBQWdCO1FBQ2hCLEdBQUc7UUFDSCxHQUFHO1FBQ0gsTUFBTTtLQUNQLENBQUE7QUFDSCxDQUFDLENBQUMsQ0FBQTtBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFnQjtJQUN2RixNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLENBQVUsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsSCxNQUFNLENBQVUsR0FBRyxHQUFHLENBQU8sSUFBeUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3ZGLE1BQU0sQ0FBVSxnQkFBZ0IsR0FBRyxDQUFVLElBQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBIn0=
|