@effect-app/infra 0.25.7 → 0.25.9
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 +17 -0
- package/_cjs/api/defaultErrorHandler.cjs +11 -16
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +24 -12
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +10 -25
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +19 -20
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_src/api/defaultErrorHandler.ts +12 -29
- package/_src/services/QueueMaker/errors.ts +22 -11
- package/_src/services/QueueMaker/memQueue.ts +18 -31
- package/_src/services/QueueMaker/sbqueue.ts +27 -32
- package/dist/api/defaultErrorHandler.d.ts +2 -2
- package/dist/api/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.js +12 -17
- package/dist/services/QueueMaker/errors.d.ts +6 -4
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +19 -9
- package/dist/services/QueueMaker/memQueue.d.ts +1 -3
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/memQueue.js +9 -23
- package/dist/services/QueueMaker/sbqueue.d.ts +1 -2
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +15 -18
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/memdb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/redisdb.d.ts +2 -2
- package/dist/services/simpledb/simpledb.d.ts +3 -3
- package/package.json +5 -5
|
@@ -11,7 +11,7 @@ import { captureException } from "@effect-app/infra/errorReporter"
|
|
|
11
11
|
import { RequestContext } from "@effect-app/infra/RequestContext"
|
|
12
12
|
import type { CustomSchemaException } from "@effect-app/prelude/schema"
|
|
13
13
|
import { restoreFromRequestContext } from "../Store/Memory.js"
|
|
14
|
-
import {
|
|
14
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause } from "./errors.js"
|
|
15
15
|
import type { QueueBase } from "./service.js"
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -31,7 +31,7 @@ export function makeServiceBusQueue<
|
|
|
31
31
|
makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>,
|
|
32
32
|
provideContext: (context: RequestContext) => <R, E, A>(
|
|
33
33
|
eff: Effect<RContext | R, E, A>
|
|
34
|
-
) => Effect<Exclude<R, RContext>, E, A>,
|
|
34
|
+
) => Effect<Exclude<R, RContext | RequestContext>, E, A>,
|
|
35
35
|
parseDrain: (
|
|
36
36
|
a: unknown,
|
|
37
37
|
env?: Parser.ParserEnv | undefined
|
|
@@ -41,6 +41,8 @@ export function makeServiceBusQueue<
|
|
|
41
41
|
const s = yield* $(Sender.access)
|
|
42
42
|
const receiver = yield* $(Receiver.access)
|
|
43
43
|
const receiverLayer = Receiver.makeLayer(receiver)
|
|
44
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "ServiceBusQueue.drain." + queueDrainName })
|
|
45
|
+
const reportError = reportNonInterruptedFailureCause({ name: "ServiceBusQueue.drain." + queueDrainName })
|
|
44
46
|
|
|
45
47
|
return {
|
|
46
48
|
drain: Effect.gen(function*($) {
|
|
@@ -48,34 +50,34 @@ export function makeServiceBusQueue<
|
|
|
48
50
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
51
|
function processMessage(messageBody: any) {
|
|
50
52
|
return Effect.sync(() => JSON.parse(messageBody))
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
53
|
+
.flatMap(x => parseDrain(x))
|
|
54
|
+
.orDie
|
|
55
|
+
.flatMap(({ body, meta }) =>
|
|
56
|
+
Effect
|
|
57
|
+
.logDebug(`$$ [${queueDrainName}] Processing incoming message`)
|
|
58
|
+
.apply(Effect.logAnnotates({ body: body.$$.pretty, meta: meta.$$.pretty }))
|
|
59
|
+
.tap(() => restoreFromRequestContext)
|
|
60
|
+
.zipRight(handleEvent(body))
|
|
61
|
+
.orDie
|
|
62
|
+
// we silenceAndReportError here, so that the error is reported, and moves into the Exit.
|
|
63
|
+
.apply(silenceAndReportError)
|
|
64
|
+
.apply(
|
|
65
|
+
provideContext(
|
|
66
|
+
RequestContext.inherit(meta, {
|
|
67
|
+
id: body.id,
|
|
68
|
+
locale: "en" as const,
|
|
69
|
+
name: ReasonableString(body._tag)
|
|
70
|
+
})
|
|
71
|
+
)
|
|
72
|
+
)
|
|
69
73
|
)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
.orDie
|
|
73
|
-
.asUnit
|
|
74
|
+
// we reportError here, so that we report the error only, and keep flowing
|
|
75
|
+
.tapErrorCause(reportError)
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
return yield* $(
|
|
77
79
|
subscribe({
|
|
78
|
-
processMessage: x => processMessage(x.body).uninterruptible,
|
|
80
|
+
processMessage: x => processMessage(x.body).uninterruptible.flatMap(_ => _.done),
|
|
79
81
|
processError: err => Effect(captureException(err.error))
|
|
80
82
|
})
|
|
81
83
|
.provideSomeLayer(receiverLayer)
|
|
@@ -111,10 +113,3 @@ export function makeServiceBusLayers(url: string, queueName: string, queueDrainN
|
|
|
111
113
|
return LiveServiceBusClient(url)
|
|
112
114
|
>> (LiveReceiver(queueDrainName) + LiveSender(queueName))
|
|
113
115
|
}
|
|
114
|
-
|
|
115
|
-
function report<E>(cause: Cause<E>) {
|
|
116
|
-
return Effect.gen(function*($) {
|
|
117
|
-
const requestContext = yield* $(RequestContext.Tag.access)
|
|
118
|
-
return reportQueueError(cause, { requestContext })
|
|
119
|
-
})
|
|
120
|
-
}
|
|
@@ -2,7 +2,7 @@ import { Effect } from "@effect/io/Effect";
|
|
|
2
2
|
import type express from "express";
|
|
3
3
|
import type { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "../errors.js";
|
|
4
4
|
import type { RequestContext } from "../RequestContext.js";
|
|
5
|
-
export declare function defaultBasicErrorHandler<R>(_req: express.Request, res: express.Response, _requestContext: RequestContext, r2: Effect<R, ValidationError, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void
|
|
6
|
-
export declare function defaultErrorHandler<R>(req: express.Request, res: express.Response, _: RequestContext, r2: Effect<R, SupportedErrors, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void
|
|
5
|
+
export declare function defaultBasicErrorHandler<R>(_req: express.Request, res: express.Response, _requestContext: RequestContext, r2: Effect<R, ValidationError, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void | express.Response<any, Record<string, any>>>;
|
|
6
|
+
export declare function defaultErrorHandler<R>(req: express.Request, res: express.Response, _: RequestContext, r2: Effect<R, SupportedErrors, void>): import("@effect/io/Effect").Effect<RequestContext | R, never, void | express.Response<any, Record<string, any>>>;
|
|
7
7
|
export type SupportedErrors = ValidationError | NotFoundError | NotLoggedInError | UnauthorizedError | InvalidStateError | OptimisticConcurrencyException;
|
|
8
8
|
//# sourceMappingURL=defaultErrorHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../_src/api/defaultErrorHandler.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,OAAO,CAAC,OAAO,EACrB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,eAAe,EAAE,cAAc,EAC/B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,oHAgBrC;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,CAAC,EAAE,cAAc,EACjB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,oHA2BrC;AAED,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,8BAA8B,CAAA"}
|
|
@@ -5,9 +5,8 @@ import * as tsplus_module_4 from "@effect/io/Debug";
|
|
|
5
5
|
import * as tsplus_module_5 from "@effect/io/Schedule";
|
|
6
6
|
import { logRequestError } from "./reportError.js";
|
|
7
7
|
export function defaultBasicErrorHandler(_req, res, _requestContext, r2) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}))
|
|
8
|
+
const sendError = (code) => (body) => tsplus_module_1.sync(() => res.status(code).send(body));
|
|
9
|
+
return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTag(tsplus_module_1.tapErrorCause(r2, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), "ValidationError", err => sendError(400)(err.errors))
|
|
11
10
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
12
11
|
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
|
|
13
12
|
}
|
|
@@ -16,21 +15,17 @@ export function defaultErrorHandler(req, res, _, r2) {
|
|
|
16
15
|
const r3 = req.method === "PATCH"
|
|
17
16
|
? tsplus_module_1.retry(r2, optimisticConcurrencySchedule)
|
|
18
17
|
: r2;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
res.status(403).send(err);
|
|
27
|
-
})), "InvalidStateError", err => tsplus_module_1.sync(() => {
|
|
28
|
-
res.status(422).send(err);
|
|
29
|
-
})), "OptimisticConcurrencyException", err => tsplus_module_1.sync(() => {
|
|
18
|
+
const sendError = (code) => (body) => tsplus_module_1.sync(() => res.status(code).send(body));
|
|
19
|
+
return tsplus_module_4.untraced(() => tsplus_module_1.catchAll(tsplus_module_1.catchTags(tsplus_module_1.tapErrorCause(r3, cause => tsplus_module_2.isFailure(cause) ? logRequestError(cause) : tsplus_module_3.unit), {
|
|
20
|
+
"ValidationError": err => sendError(400)(err.errors),
|
|
21
|
+
"NotFoundError": sendError(404),
|
|
22
|
+
"NotLoggedInError": sendError(401),
|
|
23
|
+
"UnauthorizedError": sendError(403),
|
|
24
|
+
"InvalidStateError": sendError(422),
|
|
30
25
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
31
|
-
|
|
32
|
-
})
|
|
26
|
+
"OptimisticConcurrencyException": sendError(412)
|
|
27
|
+
})
|
|
33
28
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
34
29
|
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die)));
|
|
35
30
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFVQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFbEQsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxJQUFxQixFQUNyQixHQUFxQixFQUNyQixlQUErQixFQUMvQixFQUFvQztJQUVwQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLDJCQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDMUYsT0FBTyx5QkFBZSxHQUFHLEVBQUUsQ0FDekIseUJBQUEseUJBQUEsOEJBQUEsRUFBRSxFQUNlLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUNFLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDTSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FDSixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sNkJBQTZCLDZCQUNqQywyQkFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdDQUFnQyxDQUFDLEVBRGxELHNCQUFlLENBQ21DLENBQUE7QUFFeEYsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxHQUFvQixFQUNwQixHQUFxQixFQUNyQixDQUFpQixFQUNqQixFQUFvQztJQUVwQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLE9BQU87UUFDL0IsQ0FBQyxDQUFDLHNCQUFBLEVBQUUsRUFBTyw2QkFBNkIsQ0FBQztRQUN6QyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ04sTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQywyQkFBTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzFGLE9BQU8seUJBQWUsR0FBRyxFQUFFLENBQ3pCLHlCQUFBLDBCQUFBLDhCQUFBLEVBQUUsRUFDZSxLQUFLLENBQUMsRUFBRSxDQUFDLDBCQUFBLEtBQUssQ0FBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBWSxDQUFDLEVBQ3RFO1FBQ1QsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNwRCxlQUFlLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUMvQixrQkFBa0IsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ2xDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDbkMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNuQyw0SUFBNEk7UUFDNUksZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztLQUNqRCxDQUFDO0lBQ0YsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNNLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUNKLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Cause } from "@effect/io/Cause";
|
|
2
|
+
import { Context } from "@effect/data/Context";
|
|
2
3
|
import { Effect } from "@effect/io/Effect";
|
|
4
|
+
import { Exit } from "@effect/io/Exit";
|
|
3
5
|
import { CauseException } from "@effect-app/infra/errors";
|
|
4
|
-
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
5
6
|
export declare class MessageException<E> extends CauseException<E> {
|
|
6
7
|
constructor(cause: Cause<E>);
|
|
7
8
|
}
|
|
8
9
|
export declare class FatalQueueException<E> extends CauseException<E> {
|
|
9
10
|
constructor(cause: Cause<E>);
|
|
10
11
|
}
|
|
11
|
-
export declare const reportQueueError: <E>(cause: import("@effect/io/Cause").Cause<E>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<
|
|
12
|
+
export declare const reportQueueError: <E>(cause: import("@effect/io/Cause").Cause<E>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<never, never, void>;
|
|
12
13
|
/**
|
|
13
14
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
14
15
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -18,7 +19,8 @@ export declare const reportQueueError: <E>(cause: import("@effect/io/Cause").Cau
|
|
|
18
19
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
19
20
|
* @tsplus location "@effect-app/infra/services/QueueMaker/errors"
|
|
20
21
|
*/
|
|
21
|
-
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<
|
|
22
|
+
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<R, never, import("@effect/io/Fiber").RuntimeFiber<E, A>>;
|
|
22
23
|
export declare const reportFatalQueueError: (cause: import("@effect/io/Cause").Cause<unknown>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<never, never, void>;
|
|
23
|
-
export declare function
|
|
24
|
+
export declare function reportNonInterruptedFailure(context?: Record<string, unknown>): <R, E, A>(inp: import("@effect/io/Effect").Effect<R, E, A>) => import("@effect/io/Effect").Effect<R, never, import("@effect/io/Exit").Exit<E, A>>;
|
|
25
|
+
export declare function reportNonInterruptedFailureCause(context?: Record<string, unknown>): <E>(cause: import("@effect/io/Cause").Cause<E>) => Effect<never, never, void>;
|
|
24
26
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/errors.ts"],"names":[],"mappings":";;;;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC5C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AAED,qBAAa,mBAAmB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC/C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AAID,eAAO,MAAM,gBAAgB,4DAAkC,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,2DAEY,CAAA;;;;;;;;;;AAW9G,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,+FAEnE;AAED,eAAO,MAAM,qBAAqB,6JAEjC,CAAA;AAED,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,qJAU5E;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sDACnD,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAMxD"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@effect/
|
|
1
|
+
import * as tsplus_module_1 from "@effect-app/core/Option";
|
|
2
2
|
import * as tsplus_module_2 from "@effect-app/infra/RequestContext";
|
|
3
|
-
import * as tsplus_module_3 from "@effect
|
|
3
|
+
import * as tsplus_module_3 from "@effect/data/Context";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Effect";
|
|
5
|
+
import * as tsplus_module_5 from "@effect/io/Exit";
|
|
6
|
+
import * as tsplus_module_6 from "@effect/io/Cause";
|
|
4
7
|
import { reportError } from "@effect-app/infra/errorReporter";
|
|
5
8
|
import { CauseException } from "@effect-app/infra/errors";
|
|
6
9
|
import "@effect-app/infra/RequestContext";
|
|
@@ -15,7 +18,7 @@ export class FatalQueueException extends CauseException {
|
|
|
15
18
|
}
|
|
16
19
|
}
|
|
17
20
|
const reportQueueError_ = reportError(cause => new MessageException(cause));
|
|
18
|
-
export const reportQueueError = (cause, context) =>
|
|
21
|
+
export const reportQueueError = (cause, context) => tsplus_module_4.flatMap(tsplus_module_4.contextWith((_) => tsplus_module_3.getOption(_, tsplus_module_2.tag)), requestContext => reportQueueError_(cause, { requestContext: tsplus_module_1.getOrUndefined(requestContext), ...context }));
|
|
19
22
|
/**
|
|
20
23
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
21
24
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -26,12 +29,19 @@ export const reportQueueError = (cause, context) => tsplus_module_1.serviceWithE
|
|
|
26
29
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
27
30
|
*/
|
|
28
31
|
export function forkDaemonReportQueue(self) {
|
|
29
|
-
return
|
|
32
|
+
return tsplus_module_4.daemonChildren(tsplus_module_4.fork(tsplus_module_4.tapErrorCause(self, reportNonInterruptedFailureCause({}))));
|
|
30
33
|
}
|
|
31
34
|
export const reportFatalQueueError = reportError(cause => new FatalQueueException(cause));
|
|
32
|
-
export function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
: tsplus_module_3.unit);
|
|
35
|
+
export function reportNonInterruptedFailure(context) {
|
|
36
|
+
const report = reportNonInterruptedFailureCause(context);
|
|
37
|
+
return (inp) => tsplus_module_4.flatMap(tsplus_module_4.exit(inp), result => tsplus_module_5.match(result, cause => tsplus_module_4.map(report(cause), () => result), () => tsplus_module_4.sync(() => result)));
|
|
36
38
|
}
|
|
37
|
-
|
|
39
|
+
export function reportNonInterruptedFailureCause(context) {
|
|
40
|
+
return (cause) => {
|
|
41
|
+
if (tsplus_module_6.isInterrupted(cause)) {
|
|
42
|
+
return tsplus_module_4.failCause(cause);
|
|
43
|
+
}
|
|
44
|
+
return reportQueueError(cause, context);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9RdWV1ZU1ha2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3pELE9BQStCLGtDQUFrQyxDQUFBO0FBRWpFLE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxjQUFpQjtJQUN4RCxZQUFZLEtBQWU7UUFDekIsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sbUJBQXVCLFNBQVEsY0FBaUI7SUFDM0QsWUFBWSxLQUFlO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDekIsQ0FBQztDQUNGO0FBRUQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsT0FBNkMsRUFBRSxFQUFFLENBQ3BHLHdCQUFBLDRCQUFtQixDQUFDLENBQWlCLEVBQUUsRUFBRSxDQUFDLDBCQUFrQixDQUFDLHNCQUFxQixDQUFDLEVBQ3hFLGNBQWMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxpQ0FBRSxjQUFjLENBQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUU5Rzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBVSxJQUFxQjtJQUNsRSwyREFBTyw4QkFBQSxJQUFJLEVBQWUsZ0NBQWdDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBb0I7QUFDckYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FDOUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUN4QyxDQUFBO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE9BQWlDO0lBQzNFLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hELE9BQU8sQ0FBVSxHQUFvQixFQUFnQyxFQUFFLENBQ3JFLDZDQUFBLEdBQUcsR0FDUSxNQUFNLENBQUMsRUFBRSxDQUNoQixzQkFBQSxNQUFNLEVBQ0osS0FBSyxDQUFDLEVBQUUsQ0FBQyxvQkFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUssR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLDJCQUFPLE1BQU0sQ0FBQyxDQUNyQixDQUNGLENBQUE7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLE9BQWlDO0lBQ2hGLE9BQU8sQ0FBSSxLQUFlLEVBQThCLEVBQUU7UUFDeEQsSUFBSSw4QkFBQSxLQUFLLENBQWdCLEVBQUU7WUFDekIsaUNBQVEsS0FBc0IsRUFBVTtTQUN6QztRQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQTtBQUNILENBQUMifQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { StringId, Parser } from "@effect-app/prelude/schema";
|
|
2
2
|
import { Effect } from "@effect/io/Effect";
|
|
3
|
-
import { Cause } from "@effect/io/Cause";
|
|
4
3
|
import { MemQueue } from "@effect-app/infra-adapters/memQueue";
|
|
5
4
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
6
5
|
import type { CustomSchemaException } from "@effect-app/prelude/schema";
|
|
@@ -14,12 +13,11 @@ export declare function makeMemQueue<DrainR, Evt, DrainEvt extends {
|
|
|
14
13
|
}, RContext, EvtE, DrainE>(queueName: string, queueDrainName: string, encoder: (e: {
|
|
15
14
|
body: Evt;
|
|
16
15
|
meta: RequestContext;
|
|
17
|
-
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
16
|
+
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext | RequestContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
18
17
|
body: DrainEvt;
|
|
19
18
|
meta: RequestContext;
|
|
20
19
|
}>): import("@effect/io/Effect").Effect<MemQueue, never, {
|
|
21
20
|
publish: (messages_0: Evt, ...messages_1: Evt[]) => import("@effect/io/Effect").Effect<RequestContext, never, import("@effect/io/Fiber").RuntimeFiber<never, import("@effect/data/Chunk").Chunk<void>>>;
|
|
22
21
|
drain: import("@effect/io/Effect").Effect<import("@effect/io/Scope").Scope | DrainR, never, import("@effect/io/Fiber").RuntimeFiber<never, never>>;
|
|
23
22
|
}>;
|
|
24
|
-
export declare function silence<R, E, A>(inp: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
|
|
25
23
|
//# sourceMappingURL=memQueue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/memQueue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/memQueue.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;;;;;AAQvE,wBAAgB,YAAY,CAC1B,MAAM,EACN,GAAG,EACH,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,QAAQ,EACR,IAAI,EACJ,MAAM,EAEN,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,KAAK,IAAI,EACzD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EACxF,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,GAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxD,UAAU,EAAE,CACV,CAAC,EAAE,OAAO,EACV,GAAG,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,KAC/B,MAAM,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;;;GA+DpF"}
|
|
@@ -6,14 +6,10 @@ import * as tsplus_module_5 from "@effect-app/prelude/utils";
|
|
|
6
6
|
import * as tsplus_module_6 from "@effect-app/prelude/_ext/misc";
|
|
7
7
|
import * as tsplus_module_7 from "@effect-app/prelude/schema";
|
|
8
8
|
import * as tsplus_module_8 from "@effect/io/Fiber";
|
|
9
|
-
import * as tsplus_module_9 from "@effect-app/infra/api/setupRequest";
|
|
10
|
-
import * as tsplus_module_10 from "@effect/io/Cause";
|
|
11
|
-
import * as tsplus_module_11 from "@effect-app/core/Effect";
|
|
12
|
-
import * as tsplus_module_12 from "@effect/io/Exit";
|
|
13
9
|
import { MemQueue } from "@effect-app/infra-adapters/memQueue";
|
|
14
10
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
15
11
|
import { restoreFromRequestContext } from "../Store/Memory.js";
|
|
16
|
-
import {
|
|
12
|
+
import { reportNonInterruptedFailure } from "./errors.js";
|
|
17
13
|
/**
|
|
18
14
|
* @tsplus static QueueMaker.Ops makeMem
|
|
19
15
|
*/
|
|
@@ -21,7 +17,7 @@ export function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent
|
|
|
21
17
|
return tsplus_module_1.gen(function* ($) {
|
|
22
18
|
const mem = yield* $(tsplus_module_1.service(MemQueue));
|
|
23
19
|
const q = yield* $(mem.getOrCreateQueue(queueName));
|
|
24
|
-
const
|
|
20
|
+
const qDrain = yield* $(mem.getOrCreateQueue(queueDrainName));
|
|
25
21
|
return {
|
|
26
22
|
publish: (...messages) => tsplus_module_1.gen(function* ($) {
|
|
27
23
|
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
|
|
@@ -33,30 +29,20 @@ export function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent
|
|
|
33
29
|
}),
|
|
34
30
|
drain: tsplus_module_1.gen(function* ($) {
|
|
35
31
|
const handleEvent = yield* $(makeHandleEvent);
|
|
32
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName });
|
|
36
33
|
const processMessage = (msg) =>
|
|
37
34
|
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
38
35
|
tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(msg)), parseDrain)), ({ body, meta }) => provideContext(RequestContext.inherit(meta, {
|
|
39
36
|
id: body.id,
|
|
40
37
|
locale: "en",
|
|
41
38
|
name: tsplus_module_7.ReasonableString(body._tag)
|
|
42
|
-
}))(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_6.logAnnotates({ body: tsplus_module_5.RecordPretty(tsplus_module_5.object$(body)), meta: tsplus_module_5.RecordPretty(tsplus_module_5.object$(meta)) })(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => restoreFromRequestContext),
|
|
43
|
-
return yield* $(tsplus_module_1.forkScoped(tsplus_module_1.forever(
|
|
39
|
+
}))(silenceAndReportError(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_6.logAnnotates({ body: tsplus_module_5.RecordPretty(tsplus_module_5.object$(body)), meta: tsplus_module_5.RecordPretty(tsplus_module_5.object$(meta)) })(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => restoreFromRequestContext), handleEvent(body)))));
|
|
40
|
+
return yield* $(tsplus_module_1.forkScoped(tsplus_module_1.forever(silenceAndReportError(tsplus_module_1.flatMap(qDrain.take(), x => tsplus_module_1.flatMap(tsplus_module_1.fork(tsplus_module_1.uninterruptible(processMessage(x))), _ => tsplus_module_8.join(_)))
|
|
41
|
+
// TODO: normally a failed item would be returned to the queue and retried up to X times.
|
|
42
|
+
// .flatMap(_ => _._tag === "Failure" && !isInterrupted ? qDrain.offer(x) : Effect.unit) // TODO: retry count tracking and max retries.
|
|
43
|
+
))));
|
|
44
44
|
})
|
|
45
45
|
};
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
// must make sure that the errors are processed/handled beforehand.
|
|
50
|
-
export function silence(inp) {
|
|
51
|
-
return tsplus_module_1.flatMap(tsplus_module_1.exit(inp), result => tsplus_module_1.gen(function* ($) {
|
|
52
|
-
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
|
|
53
|
-
return yield* $(tsplus_module_12.match(result, cause => {
|
|
54
|
-
if (tsplus_module_10.isInterrupted(cause)) {
|
|
55
|
-
return tsplus_module_1.failCause(cause);
|
|
56
|
-
}
|
|
57
|
-
reportQueueError(cause, { requestContext });
|
|
58
|
-
return tsplus_module_11.unit;
|
|
59
|
-
}, () => tsplus_module_11.unit));
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvbWVtUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsU0FBaUIsRUFDakIsY0FBc0IsRUFDdEIsT0FBeUQsRUFDekQsZUFBd0YsRUFDeEYsY0FFdUMsRUFDdkMsVUFHbUY7SUFFbkYsT0FBTyxvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMseUJBQUMsUUFBUSxFQUFRLENBQUE7UUFDckMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtRQUU3RCxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUN2QixvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO2dCQUNwQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLDhDQUEyQixDQUFBO2dCQUMxRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsdUNBQ2IsNEJBQUEsUUFBUSxFQUFlLENB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
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvbWVtUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBRWpFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzlELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUd6RDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBUTFCLFNBQWlCLEVBQ2pCLGNBQXNCLEVBQ3RCLE9BQXlELEVBQ3pELGVBQXdGLEVBQ3hGLGNBRXdELEVBQ3hELFVBR21GO0lBRW5GLE9BQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUFDLFFBQVEsRUFBUSxDQUFBO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNuRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7UUFFN0QsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FDdkIsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDcEIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyw4Q0FBMkIsQ0FBQTtnQkFDMUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVDQUNiLDRCQUFBLFFBQVEsRUFBZSxDQUFDLENBQUMsRUFBRTtnQkFDekIsdUhBQXVIO2dCQUN2SCx3QkFBQSwyQkFDRSxJQUFJLENBQUMsU0FBUyxDQUNaLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQzNDLENBQ0Y7Z0JBQ0MsdUVBQXVFO2tCQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEIsQ0FDVixFQUVGLENBQUE7WUFDSCxDQUFDLENBQUM7WUFDSixLQUFLLEVBQUUsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDM0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFBO2dCQUM3QyxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQixDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUE7Z0JBQ3ZHLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7Z0JBQ3JDLHNIQUFzSDtnQkFDdEgsOENBQUEsd0JBQUEsMkJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNaLFVBQVUsQ0FBQyxHQUVYLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQVF0QixjQUFjLENBQ1osY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDWCxNQUFNLEVBQUUsSUFBYTtvQkFDckIsSUFBSSxFQUFFLGdCQUFBLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ2xDLENBQUMsQ0FDSCxDQVJJLHFCQUFxQixDQUw5Qix5QkFBQSxvQkFFUyw2QkFBb0IsRUFBRSxJQUFJLHVEQUFFLElBQUksRUFBVSxFQUFFLElBQUksdURBQUUsSUFBSSxFQUFVLEVBQUUsQ0FBQyxDQUY1RSx5QkFDWSxPQUFPLGNBQWMsK0JBQStCLENBQUMsR0FFMUQsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsRUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBVTNCLENBQ0osQ0FBQTtnQkFDTCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsb0RBS0oscUJBQXFCLENBSjlCLHdCQUFBLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFDRixDQUFDLENBQUMsRUFBRSxDQUFDLDZFQUFBLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBOEIsQ0FBQyxDQUFDLEVBQUUsc0JBQUMsQ0FBQyxDQUFLLENBQUMsQ0FBQztnQkFDMUUseUZBQXlGO2dCQUN6Rix1SUFBdUk7b0JBSTFJLENBQUE7WUFDSCxDQUFDLENBQUM7U0FDOEIsQ0FBQTtJQUNwQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { StringId, Parser } from "@effect-app/prelude/schema";
|
|
2
2
|
import { Effect } from "@effect/io/Effect";
|
|
3
|
-
import { Cause } from "@effect/io/Cause";
|
|
4
3
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
5
4
|
import type { CustomSchemaException } from "@effect-app/prelude/schema";
|
|
6
5
|
/**
|
|
@@ -16,7 +15,7 @@ export declare function makeServiceBusQueue<DrainR, Evt extends {
|
|
|
16
15
|
}, RContext, EvtE, DrainE>(_queueName: string, queueDrainName: string, encoder: (e: {
|
|
17
16
|
body: Evt;
|
|
18
17
|
meta: RequestContext;
|
|
19
|
-
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
18
|
+
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext | RequestContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
20
19
|
body: DrainEvt;
|
|
21
20
|
meta: RequestContext;
|
|
22
21
|
}>): import("@effect/io/Effect").Effect<import("@azure/service-bus").ServiceBusReceiver | import("@azure/service-bus").ServiceBusSender, never, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/sbqueue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/sbqueue.ts"],"names":[],"mappings":";;AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;;;;;AAQvE,wBAAgB,mBAAmB,CACjC,MAAM,EACN,GAAG,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,QAAQ,EACR,IAAI,EACJ,MAAM,EAEN,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,KAAK,IAAI,EACzD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EACxF,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,GAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxD,UAAU,EAAE,CACV,CAAC,EAAE,OAAO,EACV,GAAG,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,KAC/B,MAAM,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;;;GAqEpF;;;;;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mJAG1F"}
|
|
@@ -3,15 +3,14 @@ import * as tsplus_module_2 from "@effect-app/core/Tag";
|
|
|
3
3
|
import * as tsplus_module_3 from "@effect-app/prelude/utils";
|
|
4
4
|
import * as tsplus_module_4 from "@effect-app/prelude/_ext/misc";
|
|
5
5
|
import * as tsplus_module_5 from "@effect-app/prelude/schema";
|
|
6
|
-
import * as tsplus_module_6 from "@effect-app/infra/
|
|
7
|
-
import * as tsplus_module_7 from "@effect-app/infra/
|
|
8
|
-
import * as tsplus_module_8 from "@effect
|
|
9
|
-
import * as tsplus_module_9 from "@effect/io/Layer";
|
|
6
|
+
import * as tsplus_module_6 from "@effect-app/infra/RequestContext";
|
|
7
|
+
import * as tsplus_module_7 from "@effect-app/infra/services/QueueMaker/errors";
|
|
8
|
+
import * as tsplus_module_8 from "@effect/io/Layer";
|
|
10
9
|
import { LiveReceiver, LiveSender, LiveServiceBusClient, Receiver, Sender, subscribe } from "@effect-app/infra-adapters/ServiceBus";
|
|
11
10
|
import { captureException } from "@effect-app/infra/errorReporter";
|
|
12
11
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
13
12
|
import { restoreFromRequestContext } from "../Store/Memory.js";
|
|
14
|
-
import {
|
|
13
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause } from "./errors.js";
|
|
15
14
|
/**
|
|
16
15
|
* @tsplus static QueueMaker.Ops makeServiceBus
|
|
17
16
|
*/
|
|
@@ -20,25 +19,29 @@ export function makeServiceBusQueue(_queueName, queueDrainName, encoder, makeHan
|
|
|
20
19
|
const s = yield* $(tsplus_module_1.service(Sender));
|
|
21
20
|
const receiver = yield* $(tsplus_module_1.service(Receiver));
|
|
22
21
|
const receiverLayer = tsplus_module_2.makeLayer(Receiver, receiver);
|
|
22
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "ServiceBusQueue.drain." + queueDrainName });
|
|
23
|
+
const reportError = reportNonInterruptedFailureCause({ name: "ServiceBusQueue.drain." + queueDrainName });
|
|
23
24
|
return {
|
|
24
25
|
drain: tsplus_module_1.gen(function* ($) {
|
|
25
26
|
const handleEvent = yield* $(makeHandleEvent);
|
|
26
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
28
|
function processMessage(messageBody) {
|
|
28
|
-
return tsplus_module_1.
|
|
29
|
+
return tsplus_module_1.tapErrorCause(tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(messageBody)), x => parseDrain(x))), ({ body, meta }) => provideContext(RequestContext.inherit(meta, {
|
|
29
30
|
id: body.id,
|
|
30
31
|
locale: "en",
|
|
31
32
|
name: tsplus_module_5.ReasonableString(body._tag)
|
|
32
|
-
}))(tsplus_module_1.
|
|
33
|
+
}))(silenceAndReportError(tsplus_module_1.orDie(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_4.logAnnotates({ body: tsplus_module_3.RecordPretty(tsplus_module_3.object$(body)), meta: tsplus_module_3.RecordPretty(tsplus_module_3.object$(meta)) })(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => restoreFromRequestContext), handleEvent(body))))))
|
|
34
|
+
// we reportError here, so that we report the error only, and keep flowing
|
|
35
|
+
, reportError);
|
|
33
36
|
}
|
|
34
37
|
return yield* $(tsplus_module_1.provideSomeLayer(subscribe({
|
|
35
|
-
processMessage: x => tsplus_module_1.uninterruptible(processMessage(x.body)),
|
|
38
|
+
processMessage: x => tsplus_module_1.flatMap(tsplus_module_1.uninterruptible(processMessage(x.body)), _ => tsplus_module_1.done(_)),
|
|
36
39
|
processError: err => tsplus_module_1.sync(() => captureException(err.error))
|
|
37
40
|
}), receiverLayer));
|
|
38
41
|
}),
|
|
39
42
|
publish: (...messages) => tsplus_module_1.gen(function* ($) {
|
|
40
|
-
const requestContext = yield* $(tsplus_module_1.service(
|
|
41
|
-
return yield* $(
|
|
43
|
+
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_6.tag));
|
|
44
|
+
return yield* $(tsplus_module_7.forkDaemonReportQueue(tsplus_module_1.promise(() => s.sendMessages(messages.map(x => ({
|
|
42
45
|
body: JSON.stringify(encoder({ body: x, meta: requestContext })),
|
|
43
46
|
messageId: x.id,
|
|
44
47
|
contentType: "application/json"
|
|
@@ -51,12 +54,6 @@ export function makeServiceBusQueue(_queueName, queueDrainName, encoder, makeHan
|
|
|
51
54
|
* @tsplus static QueueMaker.Ops makeServiceBusLayers
|
|
52
55
|
*/
|
|
53
56
|
export function makeServiceBusLayers(url, queueName, queueDrainName) {
|
|
54
|
-
return
|
|
57
|
+
return tsplus_module_8.provide((tsplus_module_8.merge(LiveSender(queueName))(LiveReceiver(queueDrainName))))(LiveServiceBusClient(url));
|
|
55
58
|
}
|
|
56
|
-
|
|
57
|
-
return tsplus_module_1.gen(function* ($) {
|
|
58
|
-
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_7.tag));
|
|
59
|
-
return reportQueueError(cause, { requestContext });
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvUXVldWVNYWtlci9zYnF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLHVDQUF1QyxDQUFBO0FBRTlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHOUM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBUWpDLFVBQWtCLEVBQ2xCLGNBQXNCLEVBQ3RCLE9BQXlELEVBQ3pELGVBQXdGLEVBQ3hGLGNBRXVDLEVBQ3ZDLFVBR21GO0lBRW5GLE9BQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUFDLE1BQU0sRUFBUSxDQUFBO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMseUJBQUMsUUFBUSxFQUFRLENBQUE7UUFDMUMsTUFBTSxhQUFhLEdBQUcsMEJBQUEsUUFBUSxFQUFXLFFBQVEsQ0FBQyxDQUFBO1FBRWxELE9BQU87WUFDTCxLQUFLLEVBQUUsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDM0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFBO2dCQUM3Qyw4REFBOEQ7Z0JBQzlELFNBQVMsY0FBYyxDQUFDLFdBQWdCO29CQUN0QyxvREFBTyww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
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvUXVldWVNYWtlci9zYnF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sdUNBQXVDLENBQUE7QUFFOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBRWpFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzlELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUczRjs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FRakMsVUFBa0IsRUFDbEIsY0FBc0IsRUFDdEIsT0FBeUQsRUFDekQsZUFBd0YsRUFDeEYsY0FFd0QsRUFDeEQsVUFHbUY7SUFFbkYsT0FBTyxvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMseUJBQUMsTUFBTSxFQUFRLENBQUE7UUFDakMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyx5QkFBQyxRQUFRLEVBQVEsQ0FBQTtRQUMxQyxNQUFNLGFBQWEsR0FBRywwQkFBQSxRQUFRLEVBQVcsUUFBUSxDQUFDLENBQUE7UUFDbEQsTUFBTSxxQkFBcUIsR0FBRywyQkFBMkIsQ0FBQyxFQUFFLElBQUksRUFBRSx3QkFBd0IsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFBO1FBQzlHLE1BQU0sV0FBVyxHQUFHLGdDQUFnQyxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixHQUFHLGNBQWMsRUFBRSxDQUFDLENB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
|
|
@@ -6,8 +6,8 @@ import type { DBRecord } from "./shared.js";
|
|
|
6
6
|
import { OptimisticLockException } from "./shared.js";
|
|
7
7
|
import * as simpledb from "./simpledb.js";
|
|
8
8
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, indexes: IndexingPolicy) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient, unknown, {
|
|
9
|
-
find: (id: string) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient | simpledb.RecordCache
|
|
9
|
+
find: (id: string) => import("@effect/io/Effect").Effect<RDecode | Cosmos.CosmosClient | simpledb.RecordCache, unknown, import("@fp-ts/core/Option").Option<A>>;
|
|
10
10
|
findBy: (parameters: Record<string, string>) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient, unknown, import("@fp-ts/core/Option").Option<any>>;
|
|
11
|
-
save: (record: A) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient | simpledb.RecordCache
|
|
11
|
+
save: (record: A) => import("@effect/io/Effect").Effect<REncode | Cosmos.CosmosClient | simpledb.RecordCache, OptimisticLockException, A>;
|
|
12
12
|
}>;
|
|
13
13
|
//# sourceMappingURL=cosmosdb.d.ts.map
|
|
@@ -4,9 +4,9 @@ import type { DBRecord, Index } from "./shared.js";
|
|
|
4
4
|
import { CouldNotAquireDbLockException } from "./shared.js";
|
|
5
5
|
import * as simpledb from "./simpledb.js";
|
|
6
6
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index, dir?: string) => {
|
|
7
|
-
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache
|
|
7
|
+
find: (id: string) => import("@effect/io/Effect").Effect<RDecode | simpledb.RecordCache, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
|
|
8
8
|
findByIndex: (index: Index) => import("@effect/io/Effect").Effect<never, never, import("@fp-ts/core/Option").Option<TKey & {}>>;
|
|
9
|
-
save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache
|
|
9
|
+
save: (record: A) => import("@effect/io/Effect").Effect<REncode | simpledb.RecordCache, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
10
10
|
};
|
|
11
11
|
export declare function initialise(dir: string): void;
|
|
12
12
|
//# sourceMappingURL=diskdb.d.ts.map
|
|
@@ -5,8 +5,8 @@ import * as MO from "@effect-app/schema";
|
|
|
5
5
|
import type { DBRecord } from "./shared.js";
|
|
6
6
|
import * as simpledb from "./simpledb.js";
|
|
7
7
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>) => {
|
|
8
|
-
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache
|
|
8
|
+
find: (id: string) => import("@effect/io/Effect").Effect<RDecode | simpledb.RecordCache, MO.CondemnException | simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
|
|
9
9
|
findBy: <V extends Partial<A>>(keys: V, eq: import("@fp-ts/core/typeclass/Equivalence").Equivalence<V>) => import("@effect/io/Effect").Effect<RDecode, MO.CondemnException, import("@fp-ts/core/Option").Option<A & {}>>;
|
|
10
|
-
save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache
|
|
10
|
+
save: (record: A) => import("@effect/io/Effect").Effect<REncode | simpledb.RecordCache, MO.CondemnException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=memdb.d.ts.map
|
|
@@ -6,8 +6,8 @@ import type { DBRecord } from "./shared.js";
|
|
|
6
6
|
import { OptimisticLockException } from "./shared.js";
|
|
7
7
|
import * as simpledb from "./simpledb.js";
|
|
8
8
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, indexes: IndexDescription[]) => import("@effect/io/Effect").Effect<Mongo.MongoClient, unknown, {
|
|
9
|
-
find: (id: string) => import("@effect/io/Effect").Effect<
|
|
9
|
+
find: (id: string) => import("@effect/io/Effect").Effect<RDecode | Mongo.MongoClient | simpledb.RecordCache, unknown, import("@fp-ts/core/Option").Option<A>>;
|
|
10
10
|
findBy: (keys: Record<string, string>) => import("@effect/io/Effect").Effect<Mongo.MongoClient, unknown, import("@fp-ts/core/Option").Option<TKey>>;
|
|
11
|
-
save: (record: A) => import("@effect/io/Effect").Effect<
|
|
11
|
+
save: (record: A) => import("@effect/io/Effect").Effect<REncode | Mongo.MongoClient | simpledb.RecordCache, OptimisticLockException, A>;
|
|
12
12
|
}>;
|
|
13
13
|
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -6,9 +6,9 @@ import type { DBRecord, Index } from "./shared.js";
|
|
|
6
6
|
import { CouldNotAquireDbLockException } from "./shared.js";
|
|
7
7
|
import * as simpledb from "./simpledb.js";
|
|
8
8
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
|
|
9
|
-
find: (id: string) => import("@effect/io/Effect").Effect<RED.RedisClient | simpledb.RecordCache
|
|
9
|
+
find: (id: string) => import("@effect/io/Effect").Effect<RDecode | RED.RedisClient | simpledb.RecordCache, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
|
|
10
10
|
findByIndex: (index: Index) => import("@effect/io/Effect").Effect<RED.RedisClient, RED.ConnectionException, import("@fp-ts/core/Option").Option<TKey>>;
|
|
11
|
-
save: (record: A) => import("@effect/io/Effect").Effect<RED.RedisClient | simpledb.RecordCache
|
|
11
|
+
save: (record: A) => import("@effect/io/Effect").Effect<REncode | RED.RedisClient | simpledb.RecordCache, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
12
12
|
};
|
|
13
13
|
declare const RedisSerializedDBRecord_base: MO.Model<RedisSerializedDBRecord, MO.SchemaProperties<{
|
|
14
14
|
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
@@ -17,7 +17,7 @@ export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {
|
|
|
17
17
|
}
|
|
18
18
|
export declare const RecordCache: import("@effect/data/Context").Tag<RecordCache>;
|
|
19
19
|
export declare const LiveRecordCache: import("@effect/io/Layer").Layer<never, never, RecordCache>;
|
|
20
|
-
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, decode: (d: EA) => Effect<RDecode, EDecode, A>, type: string): (id: string) => import("@effect/io/Effect").Effect<
|
|
21
|
-
export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, type: string): (record: A) => import("@effect/io/Effect").Effect<
|
|
22
|
-
export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, lock: (id: string) => Effect<R2 | Scope, E2, unknown>, type: string): (record: A) => import("@effect/io/Effect").Effect<
|
|
20
|
+
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, decode: (d: EA) => Effect<RDecode, EDecode, A>, type: string): (id: string) => import("@effect/io/Effect").Effect<R | RDecode | RecordCache, E | InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
|
|
21
|
+
export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, type: string): (record: A) => import("@effect/io/Effect").Effect<R | RecordCache, E, A>;
|
|
22
|
+
export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<R, E, Option<CachedRecord<EA>>>, save: (r: A, version: Option<Version>) => Effect<R, E, CachedRecord<A>>, lock: (id: string) => Effect<R2 | Scope, E2, unknown>, type: string): (record: A) => import("@effect/io/Effect").Effect<R | RecordCache | Exclude<R2, import("@effect/io/Scope").Scope>, E | E2 | OptimisticLockException | InvalidStateError, A>;
|
|
23
23
|
//# sourceMappingURL=simpledb.d.ts.map
|