@effect-app/infra 4.0.0-beta.187 → 4.0.0-beta.188
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 +8 -0
- package/_check.sh +1 -1
- package/dist/adapters/logger.d.ts +1 -1
- package/package.json +2 -10
- package/dist/Operations.d.ts +0 -55
- package/dist/Operations.d.ts.map +0 -1
- package/dist/Operations.js +0 -99
- package/dist/OperationsRepo.d.ts +0 -23
- package/dist/OperationsRepo.d.ts.map +0 -1
- package/dist/OperationsRepo.js +0 -14
- package/src/Operations.ts +0 -200
- package/src/OperationsRepo.ts +0 -16
package/CHANGELOG.md
CHANGED
package/_check.sh
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
cd /home/patroza/pj/effect-app/libs
|
|
3
|
-
./node_modules/.bin/tsc -p packages/infra/tsconfig.src.json --noEmit 2>&1 | grep -E "(internal\.ts|
|
|
3
|
+
./node_modules/.bin/tsc -p packages/infra/tsconfig.src.json --noEmit 2>&1 | grep -E "(internal\.ts|SQLQueue\.ts|memQueue\.ts|sbqueue\.ts)" | head -100
|
|
@@ -2,7 +2,7 @@ export declare const InfraLogger: {
|
|
|
2
2
|
logWarning: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
|
|
3
3
|
logError: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
|
|
4
4
|
logFatal: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
|
|
5
|
-
logInfo: (...message:
|
|
5
|
+
logInfo: (...message: readonly any[]) => import("effect/Effect").Effect<void, never, never>;
|
|
6
6
|
logDebug: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
|
|
7
7
|
logWithLevel: (level: import("effect/LogLevel").Severity, ...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
|
|
8
8
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.188",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "8.4.0",
|
|
15
15
|
"query-string": "^9.3.1",
|
|
16
|
-
"effect-app": "4.0.0-beta.
|
|
16
|
+
"effect-app": "4.0.0-beta.188"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.9.3",
|
|
@@ -168,14 +168,6 @@
|
|
|
168
168
|
"types": "./dist/Model/query/new-kid-interpreter.d.ts",
|
|
169
169
|
"default": "./dist/Model/query/new-kid-interpreter.js"
|
|
170
170
|
},
|
|
171
|
-
"./Operations": {
|
|
172
|
-
"types": "./dist/Operations.d.ts",
|
|
173
|
-
"default": "./dist/Operations.js"
|
|
174
|
-
},
|
|
175
|
-
"./OperationsRepo": {
|
|
176
|
-
"types": "./dist/OperationsRepo.d.ts",
|
|
177
|
-
"default": "./dist/OperationsRepo.js"
|
|
178
|
-
},
|
|
179
171
|
"./QueueMaker/SQLQueue": {
|
|
180
172
|
"types": "./dist/QueueMaker/SQLQueue.d.ts",
|
|
181
173
|
"default": "./dist/QueueMaker/SQLQueue.js"
|
package/dist/Operations.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Context, Effect, type Fiber, Layer, Option, S } from "effect-app";
|
|
2
|
-
import { Operation, OperationId, type OperationProgress } from "effect-app/Operations";
|
|
3
|
-
import { NonEmptyString2k } from "effect-app/Schema";
|
|
4
|
-
import * as Scope from "effect/Scope";
|
|
5
|
-
import { OperationsRepo } from "./OperationsRepo.js";
|
|
6
|
-
import { RequestFiberSet } from "./RequestFiberSet.js";
|
|
7
|
-
declare const Operations_base: Context.OpaqueClass<Operations, "effect-app/Operations", {
|
|
8
|
-
cleanup: Effect.Effect<void[], never, never>;
|
|
9
|
-
register: (title: NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope>;
|
|
10
|
-
fork: <R, R2, E, E2, A, A2>(self: (id: OperationId) => Effect.Effect<A, E, R>, fnc: (id: OperationId) => Effect.Effect<A2, E2, R2>, title: NonEmptyString2k) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope> | Exclude<R2, Scope.Scope>>;
|
|
11
|
-
fork2: {
|
|
12
|
-
(title: NonEmptyString2k): <R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
13
|
-
<R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>, title: NonEmptyString2k): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
14
|
-
};
|
|
15
|
-
forkOperation: {
|
|
16
|
-
(title: NonEmptyString2k): <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
17
|
-
<R, E, A>(self: Effect.Effect<A, E, R>, title: NonEmptyString2k): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
18
|
-
};
|
|
19
|
-
forkOperationFunction: <R, E, A, Inp>(fnc: (inp: Inp) => Effect.Effect<A, E, R>, title: NonEmptyString2k) => (inp: Inp) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
20
|
-
all: Effect.Effect<Operation[], never, never>;
|
|
21
|
-
find: (id: OperationId) => Effect.Effect<Option.Option<Operation>, never, never>;
|
|
22
|
-
update: (id: S.StringId, progress: OperationProgress) => Effect.Effect<void, never, never>;
|
|
23
|
-
}> & {
|
|
24
|
-
readonly make: Effect.Effect<{
|
|
25
|
-
cleanup: Effect.Effect<void[], never, never>;
|
|
26
|
-
register: (title: NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope>;
|
|
27
|
-
fork: <R, R2, E, E2, A, A2>(self: (id: OperationId) => Effect.Effect<A, E, R>, fnc: (id: OperationId) => Effect.Effect<A2, E2, R2>, title: NonEmptyString2k) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope> | Exclude<R2, Scope.Scope>>;
|
|
28
|
-
fork2: {
|
|
29
|
-
(title: NonEmptyString2k): <R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
30
|
-
<R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>, title: NonEmptyString2k): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
31
|
-
};
|
|
32
|
-
forkOperation: {
|
|
33
|
-
(title: NonEmptyString2k): <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
34
|
-
<R, E, A>(self: Effect.Effect<A, E, R>, title: NonEmptyString2k): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
35
|
-
};
|
|
36
|
-
forkOperationFunction: <R, E, A, Inp>(fnc: (inp: Inp) => Effect.Effect<A, E, R>, title: NonEmptyString2k) => (inp: Inp) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>;
|
|
37
|
-
all: Effect.Effect<Operation[], never, never>;
|
|
38
|
-
find: (id: OperationId) => Effect.Effect<Option.Option<Operation>, never, never>;
|
|
39
|
-
update: (id: S.StringId, progress: OperationProgress) => Effect.Effect<void, never, never>;
|
|
40
|
-
}, never, OperationsRepo | RequestFiberSet>;
|
|
41
|
-
};
|
|
42
|
-
export declare class Operations extends Operations_base {
|
|
43
|
-
private static readonly CleanupLive;
|
|
44
|
-
static readonly Live: Layer.Layer<Operations, never, OperationsRepo>;
|
|
45
|
-
static readonly forkOperation: (title: NonEmptyString2k) => <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<RunningOperation<A, E>, never, Operations | Exclude<R, Scope.Scope>>;
|
|
46
|
-
static readonly forkOperationFunction: <R, E, A, Inp>(fnc: (inp: Inp) => Effect.Effect<A, E, R>, title: NonEmptyString2k) => (inp: Inp) => Effect.Effect<RunningOperation<A, E>, never, Operations | Exclude<R, Scope.Scope>>;
|
|
47
|
-
static readonly fork: <R, R2, E, E2, A, A2>(self: (id: OperationId) => Effect.Effect<A, E, R>, fnc: (id: OperationId) => Effect.Effect<A2, E2, R2>, title: NonEmptyString2k) => Effect.Effect<RunningOperation<A, E>, never, Operations | Exclude<R, Scope.Scope> | Exclude<R2, Scope.Scope>>;
|
|
48
|
-
static readonly fork2: (title: NonEmptyString2k) => <R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>) => Effect.Effect<RunningOperation<A, E>, never, Operations | Exclude<R, Scope.Scope>>;
|
|
49
|
-
}
|
|
50
|
-
export interface RunningOperation<A, E> {
|
|
51
|
-
id: OperationId;
|
|
52
|
-
fiber: Fiber.Fiber<A, E>;
|
|
53
|
-
}
|
|
54
|
-
export {};
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9ucy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL09wZXJhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFTLE9BQU8sRUFBa0IsTUFBTSxFQUFRLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFZLE1BQU0sWUFBWSxDQUFBO0FBR2pILE9BQU8sRUFBRSxTQUFTLEVBQW9CLFdBQVcsRUFBRSxLQUFLLGlCQUFpQixFQUFvQixNQUFNLHVCQUF1QixDQUFBO0FBQzFILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBSXJDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7OztzQkFvQzNCLGdCQUFnQjtXQXlCM0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQ3pCLENBQUMsRUFBRSxFQUFFLFdBQVcsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQzVDLENBQUMsRUFBRSxFQUFFLFdBQVcsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQzVDLGdCQUFnQixLQUN0QixNQUFNLENBQUMsTUFBTSxDQUNkLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDdEIsS0FBSyxFQUNMLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUNuRDs7Z0JBZ0JTLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFF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
|
package/dist/Operations.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Operations.d.ts","sourceRoot":"","sources":["../src/Operations.ts"],"names":[],"mappings":"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"}
|
package/dist/Operations.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { reportError } from "@effect-app/infra/errorReporter";
|
|
2
|
-
import { subHours } from "date-fns";
|
|
3
|
-
import { Cause, Context, copy, Duration, Effect, Exit, Layer, Option, S, Schedule } from "effect-app";
|
|
4
|
-
import { annotateLogscoped } from "effect-app/Effect";
|
|
5
|
-
import { dual, pipe } from "effect-app/Function";
|
|
6
|
-
import { Operation, OperationFailure, OperationId, OperationSuccess } from "effect-app/Operations";
|
|
7
|
-
import { NonEmptyString2k } from "effect-app/Schema";
|
|
8
|
-
import * as Scope from "effect/Scope";
|
|
9
|
-
import { setupRequestContextFromCurrent } from "./api/setupRequest.js";
|
|
10
|
-
import { MainFiberSet } from "./MainFiberSet.js";
|
|
11
|
-
import { where } from "./Model/query.js";
|
|
12
|
-
import { OperationsRepo } from "./OperationsRepo.js";
|
|
13
|
-
import { batch } from "./rateLimit.js";
|
|
14
|
-
import { RequestFiberSet } from "./RequestFiberSet.js";
|
|
15
|
-
const reportAppError = reportError("Operations.Cleanup");
|
|
16
|
-
const make = Effect.gen(function* () {
|
|
17
|
-
const repo = yield* OperationsRepo;
|
|
18
|
-
const reqFiberSet = yield* RequestFiberSet;
|
|
19
|
-
const makeOp = Effect.sync(() => OperationId.make());
|
|
20
|
-
const addOp = Effect.fnUntraced(function* (id, title) {
|
|
21
|
-
return yield* repo.save(Operation.make({ id, title })).pipe(Effect.orDie);
|
|
22
|
-
});
|
|
23
|
-
const finishOp = Effect.fnUntraced(function* (id, exit) {
|
|
24
|
-
const op = yield* repo.get(id).pipe(Effect.orDie);
|
|
25
|
-
const result = Exit.isSuccess(exit)
|
|
26
|
-
? OperationSuccess.make({})
|
|
27
|
-
: OperationFailure.make({
|
|
28
|
-
message: Cause.hasInterruptsOnly(exit.cause)
|
|
29
|
-
? NonEmptyString2k("Interrupted")
|
|
30
|
-
: Cause.hasDies(exit.cause)
|
|
31
|
-
? NonEmptyString2k("Unknown error")
|
|
32
|
-
: Cause
|
|
33
|
-
.findErrorOption(exit.cause)
|
|
34
|
-
.pipe(Option.flatMap((_) => typeof _ === "object" && _ !== null && "message" in _ && S.is(NonEmptyString2k)(_.message)
|
|
35
|
-
? Option.some(_.message)
|
|
36
|
-
: Option.none()), Option.getOrNull)
|
|
37
|
-
});
|
|
38
|
-
return yield* repo.save(copy(op, { updatedAt: new Date(), result })).pipe(Effect.orDie);
|
|
39
|
-
});
|
|
40
|
-
const register = (title) => Effect.tap(makeOp, (id) => Effect.andThen(annotateLogscoped("operationId", id), Effect.acquireRelease(addOp(id, title), (_, exit) => finishOp(id, exit))));
|
|
41
|
-
const cleanup = Effect
|
|
42
|
-
.gen(function* () {
|
|
43
|
-
const before = subHours(new Date(), 1);
|
|
44
|
-
const ops = yield* repo.query(where("updatedAt", "lt", before.toISOString()));
|
|
45
|
-
return yield* pipe(ops, batch(100, Effect.succeed, (items) => repo.removeAndPublish(items)));
|
|
46
|
-
})
|
|
47
|
-
.pipe(setupRequestContextFromCurrent("Operations.cleanup"));
|
|
48
|
-
const findOp = (id) => repo.find(id);
|
|
49
|
-
const update = Effect.fnUntraced(function* (id, progress) {
|
|
50
|
-
const op = yield* repo.get(id).pipe(Effect.orDie);
|
|
51
|
-
return yield* repo.save(copy(op, { updatedAt: new Date(), progress })).pipe(Effect.orDie);
|
|
52
|
-
});
|
|
53
|
-
function fork(self, fnc, title) {
|
|
54
|
-
return Effect.gen(function* () {
|
|
55
|
-
const scope = yield* Scope.make();
|
|
56
|
-
const id = yield* Scope.provide(register(title), scope);
|
|
57
|
-
const fiber = yield* reqFiberSet.forkDaemonReportUnexpected(Scope.use(self(id).pipe(Effect.withSpan(title, {}, { captureStackTrace: false })), scope));
|
|
58
|
-
yield* Scope.provide(Effect.forkScoped(Effect.interruptible(fnc(id))), scope);
|
|
59
|
-
return { fiber, id };
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
const fork2 = dual(2, Effect.fnUntraced(function* (self, title) {
|
|
63
|
-
const scope = yield* Scope.make();
|
|
64
|
-
const id = yield* Scope.provide(register(title), scope);
|
|
65
|
-
const fiber = yield* reqFiberSet.forkDaemonReportUnexpected(Scope.use(self(id).pipe(Effect.withSpan(title, {}, { captureStackTrace: false })), scope));
|
|
66
|
-
return { fiber, id };
|
|
67
|
-
}));
|
|
68
|
-
const forkOperation = dual(2, Effect.fnUntraced(function* (self, title) {
|
|
69
|
-
const scope = yield* Scope.make();
|
|
70
|
-
const id = yield* Scope.provide(register(title), scope);
|
|
71
|
-
const fiber = yield* reqFiberSet.forkDaemonReportUnexpected(Scope.use(self.pipe(Effect.withSpan(title, {}, { captureStackTrace: false })), scope));
|
|
72
|
-
return { fiber, id };
|
|
73
|
-
}));
|
|
74
|
-
function forkOperationFunction(fnc, title) {
|
|
75
|
-
return (inp) => forkOperation(fnc(inp), title);
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
cleanup,
|
|
79
|
-
register,
|
|
80
|
-
fork,
|
|
81
|
-
fork2,
|
|
82
|
-
forkOperation,
|
|
83
|
-
forkOperationFunction,
|
|
84
|
-
all: repo.all,
|
|
85
|
-
find: findOp,
|
|
86
|
-
update
|
|
87
|
-
};
|
|
88
|
-
});
|
|
89
|
-
export class Operations extends Context.Opaque()("effect-app/Operations", { make }) {
|
|
90
|
-
static CleanupLive = this
|
|
91
|
-
.use((_) => _.cleanup.pipe(Effect.exit, Effect.flatMap((exit) => Exit.isSuccess(exit) ? Effect.void : reportAppError(exit.cause)), Effect.schedule(Schedule.fixed(Duration.minutes(20))), Effect.map((_) => _), MainFiberSet.run))
|
|
92
|
-
.pipe(Layer.effectDiscard, Layer.provide(MainFiberSet.Live));
|
|
93
|
-
static Live = this.CleanupLive.pipe(Layer.provideMerge(this.toLayer(this.make)), Layer.provide(RequestFiberSet.Live));
|
|
94
|
-
static forkOperation = (title) => (self) => this.use((_) => _.forkOperation(self, title));
|
|
95
|
-
static forkOperationFunction = (fnc, title) => (inp) => this.use((_) => _.forkOperationFunction(fnc, title)(inp));
|
|
96
|
-
static fork = (self, fnc, title) => this.use((_) => _.fork(self, fnc, title));
|
|
97
|
-
static fork2 = (title) => (self) => this.use((_) => _.fork2(self, title));
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9PcGVyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBYyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDakgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDckQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBMEIsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMxSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNwRCxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXRELE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0FBRXhELE1BQU0s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
|
package/dist/OperationsRepo.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Context, Effect } from "effect-app";
|
|
2
|
-
import { Operation } from "effect-app/Operations";
|
|
3
|
-
declare const OperationsRepo_base: Context.ServiceClass<OperationsRepo, "OperationRepo", import("./Model/Repository.js").ExtendedRepository<Operation, {
|
|
4
|
-
readonly createdAt: string;
|
|
5
|
-
readonly id: string;
|
|
6
|
-
readonly progress?: import("effect-app/Operations").OperationProgress.Encoded | undefined;
|
|
7
|
-
readonly result?: import("effect-app/Operations").OperationSuccess.Encoded | import("effect-app/Operations").OperationFailure.Encoded | undefined;
|
|
8
|
-
readonly title: string;
|
|
9
|
-
readonly updatedAt: string | null;
|
|
10
|
-
}, never, "Operation", "id", never, never, never>> & {
|
|
11
|
-
readonly make: Effect.Effect<import("./Model/Repository.js").ExtendedRepository<Operation, {
|
|
12
|
-
readonly createdAt: string;
|
|
13
|
-
readonly id: string;
|
|
14
|
-
readonly progress?: import("effect-app/Operations").OperationProgress.Encoded | undefined;
|
|
15
|
-
readonly result?: import("effect-app/Operations").OperationSuccess.Encoded | import("effect-app/Operations").OperationFailure.Encoded | undefined;
|
|
16
|
-
readonly title: string;
|
|
17
|
-
readonly updatedAt: string | null;
|
|
18
|
-
}, never, "Operation", "id", never, never, never>, never, import("./Model.js").RepositoryRegistry | import("./Store.js").StoreMaker>;
|
|
19
|
-
};
|
|
20
|
-
export declare class OperationsRepo extends OperationsRepo_base {
|
|
21
|
-
}
|
|
22
|
-
export {};
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uc1JlcG8uZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9PcGVyYXRpb25zUmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdqRCxxQkFBYSxjQUFlLFNBQVEsbUJBV25DO0NBQUcifQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OperationsRepo.d.ts","sourceRoot":"","sources":["../src/OperationsRepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;;;;;;;;;;;;;;;;;;AAGjD,qBAAa,cAAe,SAAQ,mBAWnC;CAAG"}
|
package/dist/OperationsRepo.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Context, Effect } from "effect-app";
|
|
2
|
-
import { Operation } from "effect-app/Operations";
|
|
3
|
-
import { makeRepo } from "./Model.js";
|
|
4
|
-
export class OperationsRepo extends Context.Service()("OperationRepo", {
|
|
5
|
-
make: Effect.gen(function* () {
|
|
6
|
-
return yield* makeRepo("Operation", Operation, {
|
|
7
|
-
config: {
|
|
8
|
-
allowNamespace: () => true
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
})
|
|
12
|
-
}) {
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uc1JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvT3BlcmF0aW9uc1JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFckMsTUFBTSxPQUFPLGNBQWUsU0FBUSxPQUFPLENBQUMsT0FBTyxFQUFrQixDQUNuRSxlQUFlLEVBQ2Y7SUFDRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRTtZQUM3QyxNQUFNLEVBQUU7Z0JBQ04sY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7YUFDM0I7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDLENBQUM7Q0FDSCxDQUNGO0NBQUcifQ==
|
package/src/Operations.ts
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { reportError } from "@effect-app/infra/errorReporter"
|
|
2
|
-
import { subHours } from "date-fns"
|
|
3
|
-
import { Cause, Context, copy, Duration, Effect, Exit, type Fiber, Layer, Option, S, Schedule } from "effect-app"
|
|
4
|
-
import { annotateLogscoped } from "effect-app/Effect"
|
|
5
|
-
import { dual, pipe } from "effect-app/Function"
|
|
6
|
-
import { Operation, OperationFailure, OperationId, type OperationProgress, OperationSuccess } from "effect-app/Operations"
|
|
7
|
-
import { NonEmptyString2k } from "effect-app/Schema"
|
|
8
|
-
import * as Scope from "effect/Scope"
|
|
9
|
-
import { setupRequestContextFromCurrent } from "./api/setupRequest.js"
|
|
10
|
-
import { MainFiberSet } from "./MainFiberSet.js"
|
|
11
|
-
import { where } from "./Model/query.js"
|
|
12
|
-
import { OperationsRepo } from "./OperationsRepo.js"
|
|
13
|
-
import { batch } from "./rateLimit.js"
|
|
14
|
-
import { RequestFiberSet } from "./RequestFiberSet.js"
|
|
15
|
-
|
|
16
|
-
const reportAppError = reportError("Operations.Cleanup")
|
|
17
|
-
|
|
18
|
-
const make = Effect.gen(function*() {
|
|
19
|
-
const repo = yield* OperationsRepo
|
|
20
|
-
const reqFiberSet = yield* RequestFiberSet
|
|
21
|
-
const makeOp = Effect.sync(() => OperationId.make())
|
|
22
|
-
|
|
23
|
-
const addOp = Effect.fnUntraced(function*(id: OperationId, title: NonEmptyString2k) {
|
|
24
|
-
return yield* repo.save(Operation.make({ id, title })).pipe(Effect.orDie)
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
const finishOp = Effect.fnUntraced(function*(id: OperationId, exit: Exit.Exit<unknown, unknown>) {
|
|
28
|
-
const op = yield* repo.get(id).pipe(Effect.orDie)
|
|
29
|
-
const result = Exit.isSuccess(exit)
|
|
30
|
-
? OperationSuccess.make({})
|
|
31
|
-
: OperationFailure.make({
|
|
32
|
-
message: Cause.hasInterruptsOnly(exit.cause)
|
|
33
|
-
? NonEmptyString2k("Interrupted")
|
|
34
|
-
: Cause.hasDies(exit.cause)
|
|
35
|
-
? NonEmptyString2k("Unknown error")
|
|
36
|
-
: Cause
|
|
37
|
-
.findErrorOption(exit.cause)
|
|
38
|
-
.pipe(
|
|
39
|
-
Option.flatMap((_) =>
|
|
40
|
-
typeof _ === "object" && _ !== null && "message" in _ && S.is(NonEmptyString2k)(_.message)
|
|
41
|
-
? Option.some(_.message)
|
|
42
|
-
: Option.none()
|
|
43
|
-
),
|
|
44
|
-
Option.getOrNull
|
|
45
|
-
)
|
|
46
|
-
})
|
|
47
|
-
return yield* repo.save(copy(op, { updatedAt: new Date(), result })).pipe(Effect.orDie)
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
const register = (title: NonEmptyString2k) =>
|
|
51
|
-
Effect.tap(
|
|
52
|
-
makeOp,
|
|
53
|
-
(id) =>
|
|
54
|
-
Effect.andThen(
|
|
55
|
-
annotateLogscoped("operationId", id),
|
|
56
|
-
Effect.acquireRelease(addOp(id, title), (_, exit) => finishOp(id, exit))
|
|
57
|
-
)
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
const cleanup = Effect
|
|
61
|
-
.gen(function*() {
|
|
62
|
-
const before = subHours(new Date(), 1)
|
|
63
|
-
const ops = yield* repo.query(where("updatedAt", "lt", before.toISOString()))
|
|
64
|
-
return yield* pipe(ops, batch(100, Effect.succeed, (items) => repo.removeAndPublish(items)))
|
|
65
|
-
})
|
|
66
|
-
.pipe(setupRequestContextFromCurrent("Operations.cleanup"))
|
|
67
|
-
|
|
68
|
-
const findOp = (id: OperationId) => repo.find(id)
|
|
69
|
-
|
|
70
|
-
const update = Effect.fnUntraced(function*(id: OperationId, progress: OperationProgress) {
|
|
71
|
-
const op = yield* repo.get(id).pipe(Effect.orDie)
|
|
72
|
-
return yield* repo.save(copy(op, { updatedAt: new Date(), progress })).pipe(Effect.orDie)
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
function fork<R, R2, E, E2, A, A2>(
|
|
76
|
-
self: (id: OperationId) => Effect.Effect<A, E, R>,
|
|
77
|
-
fnc: (id: OperationId) => Effect.Effect<A2, E2, R2>,
|
|
78
|
-
title: NonEmptyString2k
|
|
79
|
-
): Effect.Effect<
|
|
80
|
-
RunningOperation<A, E>,
|
|
81
|
-
never,
|
|
82
|
-
Exclude<R, Scope.Scope> | Exclude<R2, Scope.Scope>
|
|
83
|
-
> {
|
|
84
|
-
return Effect.gen(function*() {
|
|
85
|
-
const scope = yield* Scope.make()
|
|
86
|
-
const id = yield* Scope.provide(register(title), scope)
|
|
87
|
-
const fiber = yield* reqFiberSet.forkDaemonReportUnexpected(
|
|
88
|
-
Scope.use(
|
|
89
|
-
self(id).pipe(Effect.withSpan(title, {}, { captureStackTrace: false })),
|
|
90
|
-
scope
|
|
91
|
-
)
|
|
92
|
-
)
|
|
93
|
-
yield* Scope.provide(Effect.forkScoped(Effect.interruptible(fnc(id))), scope)
|
|
94
|
-
return { fiber, id } satisfies RunningOperation<A, E>
|
|
95
|
-
})
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const fork2: {
|
|
99
|
-
(title: NonEmptyString2k): <R, E, A>(
|
|
100
|
-
self: (opId: OperationId) => Effect.Effect<A, E, R>
|
|
101
|
-
) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
102
|
-
<R, E, A>(
|
|
103
|
-
self: (opId: OperationId) => Effect.Effect<A, E, R>,
|
|
104
|
-
title: NonEmptyString2k
|
|
105
|
-
): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
106
|
-
} = dual(
|
|
107
|
-
2,
|
|
108
|
-
Effect.fnUntraced(function*<R, E, A>(
|
|
109
|
-
self: (opId: OperationId) => Effect.Effect<A, E, R>,
|
|
110
|
-
title: NonEmptyString2k
|
|
111
|
-
) {
|
|
112
|
-
const scope = yield* Scope.make()
|
|
113
|
-
const id = yield* Scope.provide(register(title), scope)
|
|
114
|
-
const fiber = yield* reqFiberSet.forkDaemonReportUnexpected(
|
|
115
|
-
Scope.use(
|
|
116
|
-
self(id).pipe(Effect.withSpan(title, {}, { captureStackTrace: false })),
|
|
117
|
-
scope
|
|
118
|
-
)
|
|
119
|
-
)
|
|
120
|
-
return { fiber, id } satisfies RunningOperation<A, E>
|
|
121
|
-
})
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
const forkOperation: {
|
|
125
|
-
(title: NonEmptyString2k): <R, E, A>(
|
|
126
|
-
self: Effect.Effect<A, E, R>
|
|
127
|
-
) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
128
|
-
<R, E, A>(
|
|
129
|
-
self: Effect.Effect<A, E, R>,
|
|
130
|
-
title: NonEmptyString2k
|
|
131
|
-
): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
132
|
-
} = dual(
|
|
133
|
-
2,
|
|
134
|
-
Effect.fnUntraced(function*<R, E, A>(self: Effect.Effect<A, E, R>, title: NonEmptyString2k) {
|
|
135
|
-
const scope = yield* Scope.make()
|
|
136
|
-
const id = yield* Scope.provide(register(title), scope)
|
|
137
|
-
const fiber = yield* reqFiberSet.forkDaemonReportUnexpected(
|
|
138
|
-
Scope.use(
|
|
139
|
-
self.pipe(Effect.withSpan(title, {}, { captureStackTrace: false })),
|
|
140
|
-
scope
|
|
141
|
-
)
|
|
142
|
-
)
|
|
143
|
-
return { fiber, id } satisfies RunningOperation<A, E>
|
|
144
|
-
})
|
|
145
|
-
)
|
|
146
|
-
|
|
147
|
-
function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect.Effect<A, E, R>, title: NonEmptyString2k) {
|
|
148
|
-
return (inp: Inp) => forkOperation(fnc(inp), title)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
cleanup,
|
|
153
|
-
register,
|
|
154
|
-
fork,
|
|
155
|
-
fork2,
|
|
156
|
-
forkOperation,
|
|
157
|
-
forkOperationFunction,
|
|
158
|
-
all: repo.all,
|
|
159
|
-
find: findOp,
|
|
160
|
-
update
|
|
161
|
-
}
|
|
162
|
-
})
|
|
163
|
-
|
|
164
|
-
export class Operations extends Context.Opaque<Operations>()("effect-app/Operations", { make }) {
|
|
165
|
-
private static readonly CleanupLive = this
|
|
166
|
-
.use((_) =>
|
|
167
|
-
_.cleanup.pipe(
|
|
168
|
-
Effect.exit,
|
|
169
|
-
Effect.flatMap((exit) => Exit.isSuccess(exit) ? Effect.void : reportAppError(exit.cause)),
|
|
170
|
-
Effect.schedule(Schedule.fixed(Duration.minutes(20))),
|
|
171
|
-
Effect.map((_) => _ as never),
|
|
172
|
-
MainFiberSet.run
|
|
173
|
-
)
|
|
174
|
-
)
|
|
175
|
-
.pipe(Layer.effectDiscard, Layer.provide(MainFiberSet.Live))
|
|
176
|
-
|
|
177
|
-
static readonly Live = this.CleanupLive.pipe(
|
|
178
|
-
Layer.provideMerge(this.toLayer(this.make)),
|
|
179
|
-
Layer.provide(RequestFiberSet.Live)
|
|
180
|
-
)
|
|
181
|
-
|
|
182
|
-
static readonly forkOperation = (title: NonEmptyString2k) => <R, E, A>(self: Effect.Effect<A, E, R>) =>
|
|
183
|
-
this.use((_) => _.forkOperation(self, title))
|
|
184
|
-
static readonly forkOperationFunction =
|
|
185
|
-
<R, E, A, Inp>(fnc: (inp: Inp) => Effect.Effect<A, E, R>, title: NonEmptyString2k) => (inp: Inp) =>
|
|
186
|
-
this.use((_) => _.forkOperationFunction(fnc, title)(inp))
|
|
187
|
-
static readonly fork = <R, R2, E, E2, A, A2>(
|
|
188
|
-
self: (id: OperationId) => Effect.Effect<A, E, R>,
|
|
189
|
-
fnc: (id: OperationId) => Effect.Effect<A2, E2, R2>,
|
|
190
|
-
title: NonEmptyString2k
|
|
191
|
-
) => this.use((_) => _.fork(self, fnc, title))
|
|
192
|
-
|
|
193
|
-
static readonly fork2 = (title: NonEmptyString2k) => <R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>) =>
|
|
194
|
-
this.use((_) => _.fork2(self, title))
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export interface RunningOperation<A, E> {
|
|
198
|
-
id: OperationId
|
|
199
|
-
fiber: Fiber.Fiber<A, E>
|
|
200
|
-
}
|
package/src/OperationsRepo.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Context, Effect } from "effect-app"
|
|
2
|
-
import { Operation } from "effect-app/Operations"
|
|
3
|
-
import { makeRepo } from "./Model.js"
|
|
4
|
-
|
|
5
|
-
export class OperationsRepo extends Context.Service<OperationsRepo>()(
|
|
6
|
-
"OperationRepo",
|
|
7
|
-
{
|
|
8
|
-
make: Effect.gen(function*() {
|
|
9
|
-
return yield* makeRepo("Operation", Operation, {
|
|
10
|
-
config: {
|
|
11
|
-
allowNamespace: () => true
|
|
12
|
-
}
|
|
13
|
-
})
|
|
14
|
-
})
|
|
15
|
-
}
|
|
16
|
-
) {}
|