@effect-app/infra 0.12.4 → 0.12.6

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,21 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 0.12.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @effect-app/infra-adapters@0.11.4
9
+ - @effect-app/prelude@0.11.6
10
+
11
+ ## 0.12.5
12
+
13
+ ### Patch Changes
14
+
15
+ - e9a667fe: Add Operations
16
+ - Updated dependencies [e9a667fe]
17
+ - @effect-app/prelude@0.11.5
18
+
3
19
  ## 0.12.4
4
20
 
5
21
  ### Patch Changes
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Live = void 0;
7
+ var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
8
+ var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
9
+ var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/prelude/_ext/date"));
10
+ var tsplus_module_3 = _interopRequireWildcard(require("@fp-ts/data/Option"));
11
+ var tsplus_module_4 = _interopRequireWildcard(require("@effect-app/core/Array"));
12
+ var tsplus_module_5 = _interopRequireWildcard(require("@effect/io/Exit"));
13
+ var tsplus_module_6 = _interopRequireWildcard(require("@effect/io/Cause"));
14
+ var tsplus_module_7 = _interopRequireWildcard(require("@effect-app/prelude/schema"));
15
+ var tsplus_module_8 = _interopRequireWildcard(require("@effect-app/core/Option"));
16
+ var tsplus_module_9 = _interopRequireWildcard(require("@effect-app/prelude/_ext/Prelude.ext"));
17
+ var tsplus_module_10 = _interopRequireWildcard(require("@effect-app/prelude/service"));
18
+ var tsplus_module_11 = _interopRequireWildcard(require("@fp-ts/data/Duration"));
19
+ var tsplus_module_12 = _interopRequireWildcard(require("@effect-app/core/Effect"));
20
+ var tsplus_module_13 = _interopRequireWildcard(require("@effect/io/Layer"));
21
+ var _reportError = require("@effect-app/infra/api/reportError");
22
+ var _errorReporter = require("@effect-app/infra/errorReporter");
23
+ var _Operations = require("@effect-app/prelude/Operations");
24
+ var _service2 = require("./service.cjs");
25
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+ const fileName_1 = "packages/infra/_src/services/Operations/live.ts";
28
+ const reportAppError = (0, _errorReporter.reportError)(cause => new _reportError.RequestException(cause));
29
+ const make = tracer_1.withCallTrace(fileName_1 + ":9:14")(tsplus_module_1.sync(() => {
30
+ const ops = new Map();
31
+ const makeOp = tracer_1.withCallTrace(fileName_1 + ":11:18")(tsplus_module_1.sync(() => _Operations.OperationId.make()));
32
+ const cleanup = tracer_1.withCallTrace(fileName_1 + ":13:19")(tsplus_module_1.sync(() => {
33
+ const before = tsplus_module_2.DateSubHours(new Date(), 1);
34
+ tsplus_module_4.ext_itToChunk(ops.entries()).forEach(([id, op]) => {
35
+ const lastChanged = tsplus_module_3.getOrElse(() => op.createdAt)(tsplus_module_3.fromNullable(op.updatedAt));
36
+ if (lastChanged < before) {
37
+ ops.delete(id);
38
+ }
39
+ });
40
+ }));
41
+ function addOp(id) {
42
+ return tracer_1.withCallTrace(fileName_1 + ":26:12")(tsplus_module_1.sync(() => {
43
+ ops.set(id, new _Operations.Operation({
44
+ id
45
+ }));
46
+ }));
47
+ }
48
+ function findOp(id) {
49
+ return tracer_1.withCallTrace(fileName_1 + ":31:12")(tsplus_module_1.sync(() => tsplus_module_3.fromNullable(ops.get(id))));
50
+ }
51
+ function finishOp(id, exit) {
52
+ return tracer_1.withCallTrace(fileName_1 + ":34:23")(tsplus_module_1.flatMap(_ => tracer_1.withCallTrace(fileName_1 + ":35:7")(tsplus_module_1.sync(() => {
53
+ if (tsplus_module_3.isNone(_)) {
54
+ throw new Error("Not found");
55
+ }
56
+ ops.set(id, {
57
+ ..._.value,
58
+ updatedAt: new Date(),
59
+ result: tsplus_module_5.isSuccess(exit) ? new _Operations.Success({}) : new _Operations.Failure({
60
+ message: tsplus_module_6.isInterrupted(exit.cause) ? tsplus_module_7.LongString("Interrupted") : tsplus_module_6.isDie(exit.cause) ? tsplus_module_7.LongString("Unknown error") : tsplus_module_8.getOrUndefined(tsplus_module_3.flatMap(_ => typeof _ === "object" && _ !== null && "message" in _ && tsplus_module_7.LongString.Guard(_.message) ? tsplus_module_3.some(_.message) : tsplus_module_3.none)(tsplus_module_6.failureOption(exit.cause))) ?? null
61
+ })
62
+ });
63
+ }))))(findOp(id));
64
+ }
65
+ function update(id, progress) {
66
+ return tracer_1.withCallTrace(fileName_1 + ":60:23")(tsplus_module_1.flatMap(_ => tracer_1.withCallTrace(fileName_1 + ":61:7")(tsplus_module_1.sync(() => {
67
+ if (tsplus_module_3.isNone(_)) {
68
+ throw new Error("Not found");
69
+ }
70
+ ops.set(id, {
71
+ ..._.value,
72
+ updatedAt: new Date(),
73
+ progress
74
+ });
75
+ }))))(findOp(id));
76
+ }
77
+ return tsplus_module_10.make(_service2.Operations, {
78
+ cleanup,
79
+ register: tracer_1.withCallTrace(fileName_1 + ":72:8")(tsplus_module_1.tap(id => tsplus_module_1.zipRight(tracer_1.withCallTrace(fileName_1 + ":74:23")(tsplus_module_1.acquireRelease(addOp(id), (_, exit) => finishOp(id, exit))))(tsplus_module_9.logAnnotateScoped("operationId", id))))(makeOp),
80
+ find: findOp,
81
+ update
82
+ });
83
+ }));
84
+ const cleanupLoop = tsplus_module_1.forkScoped(tsplus_module_1.forever(tracer_1.withCallTrace(fileName_1 + ":93:4")(tsplus_module_1.delay(tsplus_module_11.minutes(1)))(tracer_1.withCallTrace(fileName_1 + ":86:4")(tsplus_module_1.flatMap(_ => {
85
+ if (tsplus_module_5.isSuccess(_)) {
86
+ return tsplus_module_12.unit;
87
+ } else {
88
+ return reportAppError(_.cause);
89
+ }
90
+ }))(tsplus_module_1.exit(tracer_1.withCallTrace(fileName_1 + ":84:32")(tsplus_module_1.serviceWithEffect(_service2.Operations, _ => _.cleanup)))))));
91
+ /**
92
+ * @tsplus static Operations.Ops Live
93
+ */
94
+ const Live = tsplus_module_13.provideMerge(tsplus_module_12.toScopedDiscardLayer(cleanupLoop))(tsplus_module_12.toLayer(make, _service2.Operations));
95
+ exports.Live = Live;
96
+ //# sourceMappingURL=live.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.cjs","mappings":"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","names":["reportAppError","cause","RequestException","make","tsplus_module_1","ops","Map","makeOp","OperationId","cleanup","before","tsplus_module_2","Date","tsplus_module_4","entries","forEach","id","op","lastChanged","tsplus_module_3","createdAt","updatedAt","delete","addOp","set","Operation","findOp","get","finishOp","exit","tracer_1","_","Error","value","result","tsplus_module_5","Success","Failure","message","tsplus_module_6","tsplus_module_7","tsplus_module_8","Guard","update","progress","tsplus_module_10","register","tsplus_module_9","find","cleanupLoop","tsplus_module_11","Live","tsplus_module_12","Operations"],"sourceRoot":"","sources":["../../../_src/services/Operations/live.ts"],"sourcesContent":[null]}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.forkOperation = exports.OperationsId = exports.Operations = void 0;
7
+ exports.forkOperation2 = forkOperation2;
8
+ exports.forkOperationFunction = forkOperationFunction;
9
+ exports.forkOperationWithEffect = forkOperationWithEffect;
10
+ var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
11
+ var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/data/Context"));
12
+ var tsplus_module_2 = _interopRequireWildcard(require("@effect/io/Scope"));
13
+ var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/infra/api/reportError"));
14
+ var tsplus_module_4 = _interopRequireWildcard(require("@effect/io/Effect"));
15
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+ const fileName_1 = "packages/infra/_src/services/Operations/service.ts";
18
+ const forkOperation = forkOperation_1;
19
+ exports.forkOperation = forkOperation;
20
+ const OperationsId = Symbol("OperationsId");
21
+ exports.OperationsId = OperationsId;
22
+ const Operations = tsplus_module_1.Tag();
23
+ /**
24
+ * @tsplus getter effect/io/Effect forkOperation
25
+ */
26
+ exports.Operations = Operations;
27
+ function forkOperation_1(self) {
28
+ return tracer_1.withCallTrace(fileName_1 + ":22:21")(tsplus_module_4.serviceWithEffect(Operations, Operations => tracer_1.withCallTrace(fileName_1 + ":25:10")(tsplus_module_4.flatMap(scope => tracer_1.withCallTrace(fileName_1 + ":27:14")(tsplus_module_4.tap(() => tsplus_module_3.forkDaemonReportRequestUnexpected(tracer_1.withCallTrace(fileName_1 + ":27:29")(tsplus_module_2.use(scope))(self))))(tracer_1.withCallTrace(fileName_1 + ":26:31")(tsplus_module_2.extend(scope))(Operations.register))))(tracer_1.withCallTrace(fileName_1 + ":24:13")(tsplus_module_2.make()))));
29
+ }
30
+ /**
31
+ * @tsplus getter function forkOperation
32
+ */
33
+ function forkOperationFunction(fnc) {
34
+ return inp => forkOperation_1(fnc(inp));
35
+ }
36
+ /**
37
+ * @tsplus static effect/io/Effect.Ops forkOperation
38
+ */
39
+ function forkOperation2(self) {
40
+ return tracer_1.withCallTrace(fileName_1 + ":43:21")(tsplus_module_4.serviceWithEffect(Operations, Operations => tracer_1.withCallTrace(fileName_1 + ":46:10")(tsplus_module_4.flatMap(scope => tracer_1.withCallTrace(fileName_1 + ":48:14")(tsplus_module_4.tap(id => tsplus_module_3.forkDaemonReportRequestUnexpected(tracer_1.withCallTrace(fileName_1 + ":48:33")(tsplus_module_2.use(scope))(self(id)))))(tracer_1.withCallTrace(fileName_1 + ":47:31")(tsplus_module_2.extend(scope))(Operations.register))))(tracer_1.withCallTrace(fileName_1 + ":45:13")(tsplus_module_2.make()))));
41
+ }
42
+ /**
43
+ * @tsplus static effect/io/Effect.Ops forkOperationWithEffect
44
+ */
45
+ function forkOperationWithEffect(self, fnc) {
46
+ return tracer_1.withCallTrace(fileName_1 + ":60:21")(tsplus_module_4.serviceWithEffect(Operations, Operations => tracer_1.withCallTrace(fileName_1 + ":63:10")(tsplus_module_4.flatMap(scope => tracer_1.withCallTrace(fileName_1 + ":66:14")(tsplus_module_4.tap(opId => tracer_1.withCallTrace(fileName_1 + ":66:61")(tsplus_module_2.extend(scope))(tsplus_module_4.forkScoped(tsplus_module_4.interruptible(fnc(opId))))))(tracer_1.withCallTrace(fileName_1 + ":65:14")(tsplus_module_4.tap(opId => tsplus_module_3.forkDaemonReportRequestUnexpected(tracer_1.withCallTrace(fileName_1 + ":65:37")(tsplus_module_2.use(scope))(self(opId)))))(tracer_1.withCallTrace(fileName_1 + ":64:31")(tsplus_module_2.extend(scope))(Operations.register)))))(tracer_1.withCallTrace(fileName_1 + ":62:13")(tsplus_module_2.make()))));
47
+ }
48
+ //# sourceMappingURL=service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.cjs","mappings":";;;;;;;;;;;;;;;;;MAoBgBA,aAAa;AAAA;AAlBtB,MAAMC,YAAY,GAAGC,MAAM,CAAC,cAAc,CAAC;AAAA;AAa3C,MAAMC,UAAU,GAAkBC,mBAAG,EAAc;AAE1D;;;AAAA;AAGA,yBAAuCC,IAAqB;EAC1D,qDAAOC,4CAAU,EACfH,UAAU,IACRI,sEACWC,KAAK,IACZD,kEACO,MAAKE,kDAACF,kEAASC,KAAK,GAAdH,IAAI,CAAW,CAAkC,GAD9DE,qEAA2BC,KAAK,GAAhCL,UAAU,CAACO,QAAQ,CAAc,CAC8B,iDAHnEC,sBAAY,EAIT,CACN;AACH;AAEA;;;AAGM,SAAUC,qBAAqB,CAAeC,GAAkC;EACpF,OAAQC,GAAQ,IAAIC,gBAACF,GAAG,CAACC,GAAG,CAAC,CAAc;AAC7C;AAEA;;;AAGM,SAAUE,cAAc,CAAUX,IAA4C;EAClF,qDAAOC,4CAAU,EACfH,UAAU,IACRI,sEACWC,KAAK,IACZD,kEACOU,EAAE,IAAGR,kDAACF,kEAAaC,KAAK,GAAlBH,IAAI,CAACY,EAAE,CAAC,CAAW,CAAkC,GADlEV,qEAA2BC,KAAK,GAAhCL,UAAU,CAACO,QAAQ,CAAc,CACkC,iDAHvEC,sBAAY,EAIT,CACN;AACH;AAEA;;;AAGM,SAAUO,uBAAuB,CACrCb,IAA0C,EAC1CQ,GAA4C;EAE5C,qDAAOP,4CAAU,EACfH,UAAU,IACRI,sEACWC,KAAK,IACZD,kEAEOY,IAAI,IAAIZ,qEAA0CC,KAAK,4DAA/CK,GAAG,CAACM,IAAI,CAAC,GAAuC,GAF/DZ,kEACOY,IAAI,IAAGV,kDAACF,kEAAeC,KAAK,GAApBH,IAAI,CAACc,IAAI,CAAC,CAAW,CAAkC,GADtEZ,qEAA2BC,KAAK,GAAhCL,UAAU,CAACO,QAAQ,CAAc,CACsC,CACP,iDAJpEC,sBAAY,EAKT,CACN;AACH","names":["forkOperation","OperationsId","Symbol","Operations","tsplus_module_1","self","tsplus_module_4","tracer_1","scope","tsplus_module_3","register","tsplus_module_2","forkOperationFunction","fnc","inp","forkOperation_1","forkOperation2","id","forkOperationWithEffect","opId"],"sourceRoot":"","sources":["../../../_src/services/Operations/service.ts"],"sourcesContent":[null]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _service = require("./Operations/service.cjs");
7
+ Object.keys(_service).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _service[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _service[key];
14
+ }
15
+ });
16
+ });
17
+ //# sourceMappingURL=Operations.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Operations.cjs","mappings":";;;;;AAAA;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA","names":[],"sourceRoot":"","sources":["../../_src/services/Operations.ts"],"sourcesContent":[null]}
@@ -6,6 +6,10 @@ import type {} from "@effect-app/infra/services/Emailer/fake"
6
6
  * @tsplus global
7
7
  */
8
8
  import type {} from "@effect-app/infra/services/Emailer/Sendgrid"
9
+ /**
10
+ * @tsplus global
11
+ */
12
+ import type {} from "@effect-app/infra/services/Operations/live"
9
13
  /**
10
14
  * @tsplus global
11
15
  */
@@ -0,0 +1,102 @@
1
+ import { RequestException } from "@effect-app/infra/api/reportError"
2
+ import { reportError } from "@effect-app/infra/errorReporter"
3
+ import type { OperationProgress } from "@effect-app/prelude/Operations"
4
+ import { Failure, Operation, OperationId, Success } from "@effect-app/prelude/Operations"
5
+ import { Operations } from "./service.js"
6
+
7
+ const reportAppError = reportError(cause => new RequestException(cause))
8
+
9
+ const make = Effect(() => {
10
+ const ops = new Map<OperationId, Operation>()
11
+ const makeOp = Effect(() => OperationId.make())
12
+
13
+ const cleanup = Effect(() => {
14
+ const before = new Date().subHours(1)
15
+ ops.entries()
16
+ .toChunk
17
+ .forEach(([id, op]) => {
18
+ const lastChanged = Opt.fromNullable(op.updatedAt).getOrElse(() => op.createdAt)
19
+ if (lastChanged < before) {
20
+ ops.delete(id)
21
+ }
22
+ })
23
+ })
24
+
25
+ function addOp(id: OperationId) {
26
+ return Effect(() => {
27
+ ops.set(id, new Operation({ id }))
28
+ })
29
+ }
30
+ function findOp(id: OperationId) {
31
+ return Effect(() => Opt.fromNullable(ops.get(id)))
32
+ }
33
+ function finishOp(id: OperationId, exit: Exit<unknown, unknown>) {
34
+ return findOp(id).flatMap(_ =>
35
+ Effect(() => {
36
+ if (_.isNone()) {
37
+ throw new Error("Not found")
38
+ }
39
+ ops.set(id, {
40
+ ..._.value,
41
+ updatedAt: new Date(),
42
+ result: exit.isSuccess()
43
+ ? new Success({})
44
+ : new Failure({
45
+ message: exit.cause.isInterrupted()
46
+ ? LongString("Interrupted")
47
+ : exit.cause.isDie()
48
+ ? LongString("Unknown error")
49
+ : exit.cause.failureOption.flatMap(_ =>
50
+ typeof _ === "object" && _ !== null && "message" in _ && LongString.Guard(_.message)
51
+ ? Opt(_.message)
52
+ : Opt.none
53
+ )?.value ?? null
54
+ })
55
+ })
56
+ })
57
+ )
58
+ }
59
+ function update(id: OperationId, progress: OperationProgress) {
60
+ return findOp(id).flatMap(_ =>
61
+ Effect(() => {
62
+ if (_.isNone()) {
63
+ throw new Error("Not found")
64
+ }
65
+ ops.set(id, { ..._.value, updatedAt: new Date(), progress })
66
+ })
67
+ )
68
+ }
69
+ return Operations.make({
70
+ cleanup,
71
+ register: makeOp
72
+ .tap(id =>
73
+ Effect.logAnnotateScoped("operationId", id)
74
+ > addOp(id).acquireRelease(
75
+ (_, exit) => finishOp(id, exit)
76
+ )
77
+ ),
78
+
79
+ find: findOp,
80
+ update
81
+ })
82
+ })
83
+
84
+ const cleanupLoop = Operations.accessWithEffect(_ => _.cleanup)
85
+ .exit
86
+ .flatMap(_ => {
87
+ if (_.isSuccess()) {
88
+ return Effect.unit
89
+ } else {
90
+ return reportAppError(_.cause)
91
+ }
92
+ })
93
+ .delay(DUR.minutes(1))
94
+ .forever
95
+ .forkScoped
96
+
97
+ /**
98
+ * @tsplus static Operations.Ops Live
99
+ */
100
+ export const Live = make.toLayer(Operations)
101
+ > cleanupLoop
102
+ .toScopedDiscardLayer
@@ -0,0 +1,69 @@
1
+ import type { Operation, OperationId, OperationProgress } from "@effect-app/prelude/Operations"
2
+
3
+ export const OperationsId = Symbol("OperationsId")
4
+ export interface Operations extends ServiceTagged<typeof OperationsId> {
5
+ register: Effect<Scope, never, OperationId>
6
+ update: (id: OperationId, progress: OperationProgress) => Effect<never, never, void>
7
+ find: (id: OperationId) => Effect<never, never, Opt<Operation>>
8
+ cleanup: Effect<never, never, void>
9
+ }
10
+
11
+ /**
12
+ * @tsplus type Operations.Ops
13
+ */
14
+ export interface OperationsOps extends Tag<Operations> {}
15
+
16
+ export const Operations: OperationsOps = Tag<Operations>()
17
+
18
+ /**
19
+ * @tsplus getter effect/io/Effect forkOperation
20
+ */
21
+ export function forkOperation<R, E, A>(self: Effect<R, E, A>) {
22
+ return Operations.accessWithEffect(
23
+ Operations =>
24
+ Scope.make()
25
+ .flatMap(scope =>
26
+ Operations.register.extend(scope)
27
+ .tap(() => self.use(scope).forkDaemonReportRequestUnexpected)
28
+ )
29
+ )
30
+ }
31
+
32
+ /**
33
+ * @tsplus getter function forkOperation
34
+ */
35
+ export function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect<R, E, A>) {
36
+ return (inp: Inp) => fnc(inp).forkOperation
37
+ }
38
+
39
+ /**
40
+ * @tsplus static effect/io/Effect.Ops forkOperation
41
+ */
42
+ export function forkOperation2<R, E, A>(self: (opId: OperationId) => Effect<R, E, A>) {
43
+ return Operations.accessWithEffect(
44
+ Operations =>
45
+ Scope.make()
46
+ .flatMap(scope =>
47
+ Operations.register.extend(scope)
48
+ .tap(id => self(id).use(scope).forkDaemonReportRequestUnexpected)
49
+ )
50
+ )
51
+ }
52
+
53
+ /**
54
+ * @tsplus static effect/io/Effect.Ops forkOperationWithEffect
55
+ */
56
+ export function forkOperationWithEffect<R, R2, E, E2, A, A2>(
57
+ self: (id: OperationId) => Effect<R, E, A>,
58
+ fnc: (id: OperationId) => Effect<R2, E2, A2>
59
+ ) {
60
+ return Operations.accessWithEffect(
61
+ Operations =>
62
+ Scope.make()
63
+ .flatMap(scope =>
64
+ Operations.register.extend(scope)
65
+ .tap(opId => self(opId).use(scope).forkDaemonReportRequestUnexpected)
66
+ .tap(opId => fnc(opId).interruptible.forkScoped.extend(scope))
67
+ )
68
+ )
69
+ }
@@ -0,0 +1 @@
1
+ export * from "./Operations/service.js"
@@ -6,6 +6,10 @@ import type {} from "@effect-app/infra/services/Emailer/fake";
6
6
  * @tsplus global
7
7
  */
8
8
  import type {} from "@effect-app/infra/services/Emailer/Sendgrid";
9
+ /**
10
+ * @tsplus global
11
+ */
12
+ import type {} from "@effect-app/infra/services/Operations/live";
9
13
  /**
10
14
  * @tsplus global
11
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAExD;;GAEG;AACH,OAAO,EAAE,MAAM,mCAAmC,CAAA"}
1
+ {"version":3,"file":"_global.ext.d.ts","sourceRoot":"","sources":["../_src/_global.ext.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,yCAAyC,CAAA;AAC7D;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6CAA6C,CAAA;AACjE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,4CAA4C,CAAA;AAChE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AAExD;;GAEG;AACH,OAAO,EAAE,MAAM,mCAAmC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Exit } from "@effect/io/Exit";
2
+ import { Operations } from "./service.js";
3
+ /**
4
+ * @tsplus static Operations.Ops Live
5
+ * @tsplus location "@effect-app/infra/services/Operations/live"
6
+ */
7
+ export declare const Live: import("@effect/io/Layer").Layer<never, never, Operations>;
8
+ //# sourceMappingURL=live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../../_src/services/Operations/live.ts"],"names":[],"mappings":";AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;;;;;AA+FzC,eAAO,MAAM,IAAI,4DAEQ,CAAA"}
@@ -0,0 +1,90 @@
1
+ import * as tracer_1 from "@effect/io/Debug";
2
+ const fileName_1 = "packages/infra/_src/services/Operations/live.ts";
3
+ import * as tsplus_module_1 from "@effect/io/Effect";
4
+ import * as tsplus_module_2 from "@effect-app/prelude/_ext/date";
5
+ import * as tsplus_module_3 from "@fp-ts/data/Option";
6
+ import * as tsplus_module_4 from "@effect-app/core/Array";
7
+ import * as tsplus_module_5 from "@effect/io/Exit";
8
+ import * as tsplus_module_6 from "@effect/io/Cause";
9
+ import * as tsplus_module_7 from "@effect-app/prelude/schema";
10
+ import * as tsplus_module_8 from "@effect-app/core/Option";
11
+ import * as tsplus_module_9 from "@effect-app/prelude/_ext/Prelude.ext";
12
+ import * as tsplus_module_10 from "@effect-app/prelude/service";
13
+ import * as tsplus_module_11 from "@fp-ts/data/Duration";
14
+ import * as tsplus_module_12 from "@effect-app/core/Effect";
15
+ import * as tsplus_module_13 from "@effect/io/Layer";
16
+ import { RequestException } from "@effect-app/infra/api/reportError";
17
+ import { reportError } from "@effect-app/infra/errorReporter";
18
+ import { Failure, Operation, OperationId, Success } from "@effect-app/prelude/Operations";
19
+ import { Operations } from "./service.js";
20
+ const reportAppError = reportError(cause => new RequestException(cause));
21
+ const make = tracer_1.withCallTrace(fileName_1 + ":9:14")(tsplus_module_1.sync(() => {
22
+ const ops = new Map();
23
+ const makeOp = tracer_1.withCallTrace(fileName_1 + ":11:18")(tsplus_module_1.sync(() => OperationId.make()));
24
+ const cleanup = tracer_1.withCallTrace(fileName_1 + ":13:19")(tsplus_module_1.sync(() => {
25
+ const before = tsplus_module_2.DateSubHours(new Date(), 1);
26
+ tsplus_module_4.ext_itToChunk(ops.entries()).forEach(([id, op]) => {
27
+ const lastChanged = tsplus_module_3.getOrElse(() => op.createdAt)(tsplus_module_3.fromNullable(op.updatedAt));
28
+ if (lastChanged < before) {
29
+ ops.delete(id);
30
+ }
31
+ });
32
+ }));
33
+ function addOp(id) {
34
+ return tracer_1.withCallTrace(fileName_1 + ":26:12")(tsplus_module_1.sync(() => {
35
+ ops.set(id, new Operation({ id }));
36
+ }));
37
+ }
38
+ function findOp(id) {
39
+ return tracer_1.withCallTrace(fileName_1 + ":31:12")(tsplus_module_1.sync(() => tsplus_module_3.fromNullable(ops.get(id))));
40
+ }
41
+ function finishOp(id, exit) {
42
+ return tracer_1.withCallTrace(fileName_1 + ":34:23")(tsplus_module_1.flatMap(_ => tracer_1.withCallTrace(fileName_1 + ":35:7")(tsplus_module_1.sync(() => {
43
+ if (tsplus_module_3.isNone(_)) {
44
+ throw new Error("Not found");
45
+ }
46
+ ops.set(id, {
47
+ ..._.value,
48
+ updatedAt: new Date(),
49
+ result: tsplus_module_5.isSuccess(exit)
50
+ ? new Success({})
51
+ : new Failure({
52
+ message: tsplus_module_6.isInterrupted(exit.cause)
53
+ ? tsplus_module_7.LongString("Interrupted")
54
+ : tsplus_module_6.isDie(exit.cause)
55
+ ? tsplus_module_7.LongString("Unknown error")
56
+ : tsplus_module_8.getOrUndefined(tsplus_module_3.flatMap(_ => typeof _ === "object" && _ !== null && "message" in _ && tsplus_module_7.LongString.Guard(_.message)
57
+ ? tsplus_module_3.some(_.message)
58
+ : tsplus_module_3.none)(tsplus_module_6.failureOption(exit.cause))) ?? null
59
+ })
60
+ });
61
+ }))))(findOp(id));
62
+ }
63
+ function update(id, progress) {
64
+ return tracer_1.withCallTrace(fileName_1 + ":60:23")(tsplus_module_1.flatMap(_ => tracer_1.withCallTrace(fileName_1 + ":61:7")(tsplus_module_1.sync(() => {
65
+ if (tsplus_module_3.isNone(_)) {
66
+ throw new Error("Not found");
67
+ }
68
+ ops.set(id, { ..._.value, updatedAt: new Date(), progress });
69
+ }))))(findOp(id));
70
+ }
71
+ return tsplus_module_10.make(Operations, {
72
+ cleanup,
73
+ register: tracer_1.withCallTrace(fileName_1 + ":72:8")(tsplus_module_1.tap(id => tsplus_module_1.zipRight(tracer_1.withCallTrace(fileName_1 + ":74:23")(tsplus_module_1.acquireRelease(addOp(id), (_, exit) => finishOp(id, exit))))(tsplus_module_9.logAnnotateScoped("operationId", id))))(makeOp),
74
+ find: findOp,
75
+ update
76
+ });
77
+ }));
78
+ const cleanupLoop = tsplus_module_1.forkScoped(tsplus_module_1.forever(tracer_1.withCallTrace(fileName_1 + ":93:4")(tsplus_module_1.delay(tsplus_module_11.minutes(1)))(tracer_1.withCallTrace(fileName_1 + ":86:4")(tsplus_module_1.flatMap(_ => {
79
+ if (tsplus_module_5.isSuccess(_)) {
80
+ return tsplus_module_12.unit;
81
+ }
82
+ else {
83
+ return reportAppError(_.cause);
84
+ }
85
+ }))(tsplus_module_1.exit(tracer_1.withCallTrace(fileName_1 + ":84:32")(tsplus_module_1.serviceWithEffect(Operations, _ => _.cleanup)))))));
86
+ /**
87
+ * @tsplus static Operations.Ops Live
88
+ */
89
+ export const Live = tsplus_module_13.provideMerge(tsplus_module_12.toScopedDiscardLayer(cleanupLoop))(tsplus_module_12.toLayer(make, Operations));
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvT3BlcmF0aW9ucy9saXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV6QyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFeEUsTUFBTSxJQUFJLGdEQUFHLHFCQUFPLEdBQUcsRUFBRTtJQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQTtJQUM3QyxNQUFNLE1BQU0saURBQUcscUJBQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUEsQ0FBQTtJQUUvQyxNQUFNLE9BQU8saURBQUcscUJBQU8sR0FBRyxFQUFFO1FBQzFCLE1BQU0sTUFBTSxHQUFHLDZCQUFBLElBQUksSUFBSSxFQUFFLEVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDckMsOEJBQUEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUVWLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxXQUFXLEdBQUcsMEJBQXlDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQTNELDZCQUFpQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQThCLENBQUE7WUFDaEYsSUFBSSxXQUFXLEdBQUcsTUFB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
@@ -0,0 +1,40 @@
1
+ import { ServiceTagged } from "@effect-app/prelude/service";
2
+ import { Effect } from "@effect/io/Effect";
3
+ import { Scope } from "@effect/io/Scope";
4
+ import { Opt } from "@effect-app/core/Option";
5
+ import { Tag } from "@fp-ts/data/Context";
6
+ import type { Operation, OperationId, OperationProgress } from "@effect-app/prelude/Operations";
7
+ export declare const OperationsId: unique symbol;
8
+ export interface Operations extends ServiceTagged<typeof OperationsId> {
9
+ register: Effect<Scope, never, OperationId>;
10
+ update: (id: OperationId, progress: OperationProgress) => Effect<never, never, void>;
11
+ find: (id: OperationId) => Effect<never, never, Opt<Operation>>;
12
+ cleanup: Effect<never, never, void>;
13
+ }
14
+ /**
15
+ * @tsplus type Operations.Ops
16
+ */
17
+ export interface OperationsOps extends Tag<Operations> {
18
+ }
19
+ export declare const Operations: OperationsOps;
20
+ /**
21
+ * @tsplus getter effect/io/Effect forkOperation
22
+ * @tsplus location "@effect-app/infra/services/Operations/service"
23
+ */
24
+ export declare function forkOperation<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<import("../../RequestContext.js").RequestContext | Operations | Exclude<R, import("@effect/io/Scope").Scope>, never, import("@effect-app/prelude/schema").StringId>;
25
+ /**
26
+ * @tsplus getter function forkOperation
27
+ * @tsplus location "@effect-app/infra/services/Operations/service"
28
+ */
29
+ export declare function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect<R, E, A>): (inp: Inp) => import("@effect/io/Effect").Effect<import("../../RequestContext.js").RequestContext | Operations | Exclude<R, import("@effect/io/Scope").Scope>, never, import("@effect-app/prelude/schema").StringId>;
30
+ /**
31
+ * @tsplus static effect/io/Effect.Ops forkOperation
32
+ * @tsplus location "@effect-app/infra/services/Operations/service"
33
+ */
34
+ export declare function forkOperation2<R, E, A>(self: (opId: OperationId) => Effect<R, E, A>): import("@effect/io/Effect").Effect<import("../../RequestContext.js").RequestContext | Operations | Exclude<R, import("@effect/io/Scope").Scope>, never, import("@effect-app/prelude/schema").StringId>;
35
+ /**
36
+ * @tsplus static effect/io/Effect.Ops forkOperationWithEffect
37
+ * @tsplus location "@effect-app/infra/services/Operations/service"
38
+ */
39
+ export declare function forkOperationWithEffect<R, R2, E, E2, A, A2>(self: (id: OperationId) => Effect<R, E, A>, fnc: (id: OperationId) => Effect<R2, E2, A2>): import("@effect/io/Effect").Effect<import("../../RequestContext.js").RequestContext | Operations | Exclude<R, import("@effect/io/Scope").Scope> | Exclude<R2, import("@effect/io/Scope").Scope>, never, import("@effect-app/prelude/schema").StringId>;
40
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../_src/services/Operations/service.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAE/F,eAAO,MAAM,YAAY,eAAyB,CAAA;AAClD,MAAM,WAAW,UAAW,SAAQ,aAAa,CAAC,OAAO,YAAY,CAAC;IACpE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IAC3C,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACpF,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/D,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,GAAG,CAAC,UAAU,CAAC;CAAG;AAEzD,eAAO,MAAM,UAAU,EAAE,aAAiC,CAAA;;;;;AAK1D,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,0MAS3D;;;;;AAKD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SACvE,GAAG,4MACjB;;;;;AAKD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,0MASnF;;;;;AAKD,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EACzD,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC1C,GAAG,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,0PAW7C"}
@@ -0,0 +1,34 @@
1
+ import * as tracer_1 from "@effect/io/Debug";
2
+ const fileName_1 = "packages/infra/_src/services/Operations/service.ts";
3
+ import * as tsplus_module_1 from "@fp-ts/data/Context";
4
+ import * as tsplus_module_2 from "@effect/io/Scope";
5
+ import * as tsplus_module_3 from "@effect-app/infra/api/reportError";
6
+ import * as tsplus_module_4 from "@effect/io/Effect";
7
+ export const forkOperation = forkOperation_1;
8
+ export const OperationsId = Symbol("OperationsId");
9
+ export const Operations = tsplus_module_1.Tag();
10
+ /**
11
+ * @tsplus getter effect/io/Effect forkOperation
12
+ */
13
+ function forkOperation_1(self) {
14
+ return tracer_1.withCallTrace(fileName_1 + ":22:21")(tsplus_module_4.serviceWithEffect(Operations, Operations => tracer_1.withCallTrace(fileName_1 + ":25:10")(tsplus_module_4.flatMap(scope => tracer_1.withCallTrace(fileName_1 + ":27:14")(tsplus_module_4.tap(() => tsplus_module_3.forkDaemonReportRequestUnexpected(tracer_1.withCallTrace(fileName_1 + ":27:29")(tsplus_module_2.use(scope))(self))))(tracer_1.withCallTrace(fileName_1 + ":26:31")(tsplus_module_2.extend(scope))(Operations.register))))(tracer_1.withCallTrace(fileName_1 + ":24:13")(tsplus_module_2.make()))));
15
+ }
16
+ /**
17
+ * @tsplus getter function forkOperation
18
+ */
19
+ export function forkOperationFunction(fnc) {
20
+ return (inp) => forkOperation_1(fnc(inp));
21
+ }
22
+ /**
23
+ * @tsplus static effect/io/Effect.Ops forkOperation
24
+ */
25
+ export function forkOperation2(self) {
26
+ return tracer_1.withCallTrace(fileName_1 + ":43:21")(tsplus_module_4.serviceWithEffect(Operations, Operations => tracer_1.withCallTrace(fileName_1 + ":46:10")(tsplus_module_4.flatMap(scope => tracer_1.withCallTrace(fileName_1 + ":48:14")(tsplus_module_4.tap(id => tsplus_module_3.forkDaemonReportRequestUnexpected(tracer_1.withCallTrace(fileName_1 + ":48:33")(tsplus_module_2.use(scope))(self(id)))))(tracer_1.withCallTrace(fileName_1 + ":47:31")(tsplus_module_2.extend(scope))(Operations.register))))(tracer_1.withCallTrace(fileName_1 + ":45:13")(tsplus_module_2.make()))));
27
+ }
28
+ /**
29
+ * @tsplus static effect/io/Effect.Ops forkOperationWithEffect
30
+ */
31
+ export function forkOperationWithEffect(self, fnc) {
32
+ return tracer_1.withCallTrace(fileName_1 + ":60:21")(tsplus_module_4.serviceWithEffect(Operations, Operations => tracer_1.withCallTrace(fileName_1 + ":63:10")(tsplus_module_4.flatMap(scope => tracer_1.withCallTrace(fileName_1 + ":66:14")(tsplus_module_4.tap(opId => tracer_1.withCallTrace(fileName_1 + ":66:61")(tsplus_module_2.extend(scope))(tsplus_module_4.forkScoped(tsplus_module_4.interruptible(fnc(opId))))))(tracer_1.withCallTrace(fileName_1 + ":65:14")(tsplus_module_4.tap(opId => tsplus_module_3.forkDaemonReportRequestUnexpected(tracer_1.withCallTrace(fileName_1 + ":65:37")(tsplus_module_2.use(scope))(self(opId)))))(tracer_1.withCallTrace(fileName_1 + ":64:31")(tsplus_module_2.extend(scope))(Operations.register)))))(tracer_1.withCallTrace(fileName_1 + ":62:13")(tsplus_module_2.make()))));
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvT3BlcmF0aW9ucy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OzthQW9CZ0IsYUFBYTtBQWxCN0IsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQWFsRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLGdCQUFBLEdBQUcsRUFBYyxDQUFBO0FBRTFEOztHQUVHO0FBQ0gseUJBQXVDLElBQXFCO0lBQzFELHFEQUFPLGtDQUFBLFVBQVUsRUFDZixVQUFVLENBQUMsRUFBRSxDQUNYLHNFQUNXLEtBQUssQ0FBQyxFQUFFLENBQ2Ysa0VBQ08sR0FBRyxFQUFFLG1EQUFDLGtFQUFTLEtBQUssR0FBZCxJQUFJLENBQVcsQ0FBa0MsR0FEOUQscUVBQTJCLEtBQUssR0FBaEMsVUFBVSxDQUFDLFFBQVEsQ0FBYyxDQUM4QixpREFIbkUsc0JBQVksRUFJVCxDQUNOLEVBQUE7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQWUsR0FBa0M7SUFDcEYsT0FBTyxDQUFDLEdBQVEsRUFBRSxFQUFFLGlCQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBYyxDQUFBO0FBQzdDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQVUsSUFBNEM7SUFDbEYscURBQU8sa0NBQUEsVUFBVSxFQUNmLFVBQVUsQ0FBQyxFQUFFLENBQ1gsc0VBQ1csS0FBSyxDQUFDLEVBQUUsQ0FDZixrRUFDTyxFQUFFLENBQUMsRUFBRSxtREFBQyxrRUFBYSxLQUFLLEdBQWxCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBVyxDQUFrQyxHQURsRSxxRUFBMkIsS0FBSyxHQUFoQyxVQUFVLENBQUMsUUFBUSxDQUFjLENBQ2tDLGlEQUh2RSxzQkFBWSxFQUlULENBQ04sRUFBQTtBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsSUFBMEMsRUFDMUMsR0FBNEM7SUFFNUMscURBQU8sa0NBQUEsVUFBVSxFQUNmLFVBQVUsQ0FBQyxFQUFFLENBQ1gsc0VBQ1csS0FBSyxDQUFDLEVBQUUsQ0FDZixrRUFFTyxJQUFJLENBQUMsRUFBRSxDQUFDLHFFQUEwQyxLQUFLLDREQUEvQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQXVDLEdBRi9ELGtFQUNPLElBQUksQ0FBQyxFQUFFLG1EQUFDLGtFQUFlLEtBQUssR0FBcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFXLENBQWtDLEdBRHRFLHFFQUEyQixLQUFLLEdBQWhDLFVBQVUsQ0FBQyxRQUFRLENBQWMsQ0FDc0MsQ0FDUCxpREFKcEUsc0JBQVksRUFLVCxDQUNOLEVBQUE7QUFDSCxDQUFDIn0=
@@ -0,0 +1,2 @@
1
+ export * from "./Operations/service.js";
2
+ //# sourceMappingURL=Operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Operations.d.ts","sourceRoot":"","sources":["../../_src/services/Operations.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./Operations/service.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvc2VydmljZXMvT3BlcmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFBIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "0.12.4",
3
+ "version": "0.12.6",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -19,9 +19,9 @@
19
19
  "proper-lockfile": "^4.1.2",
20
20
  "pure-rand": "^6.0.0",
21
21
  "redlock": "^4.2.0",
22
+ "@effect-app/prelude": "0.11.6",
22
23
  "@effect-app/core": "0.11.3",
23
- "@effect-app/infra-adapters": "0.11.3",
24
- "@effect-app/prelude": "0.11.4",
24
+ "@effect-app/infra-adapters": "0.11.4",
25
25
  "@effect-app/schema": "0.11.3"
26
26
  },
27
27
  "devDependencies": {
@@ -422,6 +422,36 @@
422
422
  "default": "./_cjs/services/Emailer/service.cjs"
423
423
  }
424
424
  },
425
+ "./services/Operations": {
426
+ "import": {
427
+ "types": "./dist/services/Operations.d.ts",
428
+ "default": "./dist/services/Operations.js"
429
+ },
430
+ "require": {
431
+ "types": "./dist/services/Operations.d.ts",
432
+ "default": "./_cjs/services/Operations.cjs"
433
+ }
434
+ },
435
+ "./services/Operations/live": {
436
+ "import": {
437
+ "types": "./dist/services/Operations/live.d.ts",
438
+ "default": "./dist/services/Operations/live.js"
439
+ },
440
+ "require": {
441
+ "types": "./dist/services/Operations/live.d.ts",
442
+ "default": "./_cjs/services/Operations/live.cjs"
443
+ }
444
+ },
445
+ "./services/Operations/service": {
446
+ "import": {
447
+ "types": "./dist/services/Operations/service.d.ts",
448
+ "default": "./dist/services/Operations/service.js"
449
+ },
450
+ "require": {
451
+ "types": "./dist/services/Operations/service.d.ts",
452
+ "default": "./_cjs/services/Operations/service.cjs"
453
+ }
454
+ },
425
455
  "./services/Repository": {
426
456
  "import": {
427
457
  "types": "./dist/services/Repository.d.ts",