@effect-app/infra 0.16.1 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/_cjs/api/defaultErrorHandler.cjs +1 -1
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +22 -4
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +6 -6
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +9 -8
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +54 -0
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -0
- package/_cjs/services/QueueMaker/memQueue.cjs +79 -0
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -0
- package/_cjs/services/QueueMaker/sbqueue.cjs +80 -0
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -0
- package/_cjs/services/QueueMaker/service.cjs +9 -0
- package/_cjs/services/QueueMaker/service.cjs.map +1 -0
- package/_cjs/services/Store/Cosmos.test.cjs +3 -4
- package/_cjs/services/Store/Cosmos.test.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +6 -7
- package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
- package/_src/_global.ext.ts +4 -0
- package/_src/api/setupRequest.ts +19 -0
- package/_src/services/QueueMaker/errors.ts +48 -0
- package/_src/services/QueueMaker/memQueue.ts +102 -0
- package/_src/services/QueueMaker/sbqueue.ts +118 -0
- package/_src/services/QueueMaker/service.ts +14 -0
- package/_src/services/Store/Cosmos.test.ts +0 -1
- package/_src/services/Store/codeFilter.test.ts +0 -1
- package/dist/_global.ext.d.ts +4 -0
- package/dist/_global.ext.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.js +2 -3
- package/dist/api/setupRequest.d.ts +5 -0
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +20 -3
- package/dist/rateLimit.js +7 -7
- package/dist/services/Operations/live.js +10 -9
- package/dist/services/QueueMaker/errors.d.ts +24 -0
- package/dist/services/QueueMaker/errors.d.ts.map +1 -0
- package/dist/services/QueueMaker/errors.js +37 -0
- package/dist/services/QueueMaker/memQueue.d.ts +25 -0
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -0
- package/dist/services/QueueMaker/memQueue.js +60 -0
- package/dist/services/QueueMaker/sbqueue.d.ts +31 -0
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -0
- package/dist/services/QueueMaker/sbqueue.js +61 -0
- package/dist/services/QueueMaker/service.d.ts +15 -0
- package/dist/services/QueueMaker/service.d.ts.map +1 -0
- package/dist/services/QueueMaker/service.js +2 -0
- package/dist/services/Store/Cosmos.test.d.ts.map +1 -1
- package/dist/services/Store/codeFilter.test.d.ts.map +1 -1
- package/package.json +48 -7
- package/tsconfig.json +5 -3
- package/tsconfig.json.bak +1 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { reportError } from "@effect-app/infra/errorReporter"
|
|
2
|
+
import { CauseException } from "@effect-app/infra/errors"
|
|
3
|
+
import { RequestContext } from "@effect-app/infra/RequestContext"
|
|
4
|
+
|
|
5
|
+
export class MessageException<E> extends CauseException<E> {
|
|
6
|
+
constructor(cause: Cause<E>) {
|
|
7
|
+
super(cause, "Message")
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class FatalQueueException<E> extends CauseException<E> {
|
|
12
|
+
constructor(cause: Cause<E>) {
|
|
13
|
+
super(cause, "Message")
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const reportQueueError_ = reportError(cause => new MessageException(cause))
|
|
18
|
+
|
|
19
|
+
export const reportQueueError = (cause: Cause<unknown>, context?: Record<string, unknown> | undefined) =>
|
|
20
|
+
RequestContext.Tag.accessWithEffect(requestContext =>
|
|
21
|
+
Effect(reportQueueError_(cause, { requestContext, ...context }))
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
26
|
+
* new fiber is attached to the global scope, when the fiber executing the
|
|
27
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
28
|
+
*
|
|
29
|
+
* Reports errors.
|
|
30
|
+
*
|
|
31
|
+
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
32
|
+
*/
|
|
33
|
+
export function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>) {
|
|
34
|
+
return self.tapErrorCause(reportQueueError).fork.daemonChildren
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const reportFatalQueueError = reportError(
|
|
38
|
+
cause => new FatalQueueException(cause)
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
export function reportFailure(name: string) {
|
|
42
|
+
return <R, E, A>(self: Effect<R, E, A>) =>
|
|
43
|
+
self.exit.tap(exit =>
|
|
44
|
+
exit._tag === "Failure"
|
|
45
|
+
? reportFatalQueueError(exit.cause, { name })
|
|
46
|
+
: Effect.unit
|
|
47
|
+
)
|
|
48
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { MemQueue } from "@effect-app/infra-adapters/memQueue"
|
|
2
|
+
import { RequestContext } from "@effect-app/infra/RequestContext"
|
|
3
|
+
import type { CustomSchemaException } from "@effect-app/prelude/schema"
|
|
4
|
+
import { reportFailure, reportQueueError } from "./errors.js"
|
|
5
|
+
import type { QueueBase } from "./service.js"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @tsplus static QueueMaker.Ops makeMem
|
|
9
|
+
*/
|
|
10
|
+
export function makeMemQueue<DrainR, Evt, DrainEvt extends { id: StringId; _tag: string }, RContext, EvtE, DrainE>(
|
|
11
|
+
queueName: string,
|
|
12
|
+
queueDrainName: string,
|
|
13
|
+
encoder: (e: { body: Evt; meta: RequestContext }) => EvtE,
|
|
14
|
+
makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>,
|
|
15
|
+
provideContext: (context: RequestContext) => <R, E, A>(
|
|
16
|
+
eff: Effect<RContext | R, E, A>
|
|
17
|
+
) => Effect<Exclude<R, RContext>, E, A>,
|
|
18
|
+
parseDrain: (
|
|
19
|
+
a: unknown,
|
|
20
|
+
env?: Parser.ParserEnv | undefined
|
|
21
|
+
) => Effect<never, CustomSchemaException, { body: DrainEvt; meta: RequestContext }>
|
|
22
|
+
) {
|
|
23
|
+
return Effect.gen(function*($) {
|
|
24
|
+
const mem = yield* $(MemQueue.access)
|
|
25
|
+
const q = yield* $(mem.getOrCreateQueue(queueName))
|
|
26
|
+
const qReply = yield* $(mem.getOrCreateQueue(queueDrainName))
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
publish: (...messages) =>
|
|
30
|
+
Effect.gen(function*($) {
|
|
31
|
+
const requestContext = yield* $(RequestContext.Tag.access)
|
|
32
|
+
return yield* $(
|
|
33
|
+
messages.forEachEffect(m =>
|
|
34
|
+
// we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
35
|
+
Effect(() =>
|
|
36
|
+
JSON.stringify(
|
|
37
|
+
encoder({ body: m, meta: requestContext })
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
// .tap((msg) => info("Publishing Mem Message: " + utils.inspect(msg)))
|
|
41
|
+
.flatMap(_ => q.offer(_))
|
|
42
|
+
.asUnit
|
|
43
|
+
)
|
|
44
|
+
.forkDaemonReportQueue
|
|
45
|
+
)
|
|
46
|
+
}),
|
|
47
|
+
drain: Effect.gen(function*($) {
|
|
48
|
+
const handleEvent = yield* $(makeHandleEvent)
|
|
49
|
+
const processMessage = (msg: string) =>
|
|
50
|
+
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
51
|
+
Effect(() => JSON.parse(msg))
|
|
52
|
+
.flatMap(parseDrain)
|
|
53
|
+
.orDie
|
|
54
|
+
.flatMap(({ body, meta }) =>
|
|
55
|
+
Effect
|
|
56
|
+
.logDebug(`$$ [${queueDrainName}] Processing incoming message`)
|
|
57
|
+
.apply(Effect.logAnnotates({ body: body.$$.pretty, meta: meta.$$.pretty }))
|
|
58
|
+
.zipRight(silence(handleEvent(body)))
|
|
59
|
+
.apply(
|
|
60
|
+
provideContext(
|
|
61
|
+
RequestContext.inherit(meta, {
|
|
62
|
+
id: body.id,
|
|
63
|
+
locale: "en" as const,
|
|
64
|
+
name: ReasonableString(body._tag)
|
|
65
|
+
})
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
)
|
|
69
|
+
return yield* $(
|
|
70
|
+
qReply.take()
|
|
71
|
+
.flatMap(x => processMessage(x).uninterruptible)
|
|
72
|
+
.forever
|
|
73
|
+
.apply(reportFailure("drain"))
|
|
74
|
+
.setupRequestFromWith("Queue.ReceiveMessage")
|
|
75
|
+
.forkScoped
|
|
76
|
+
)
|
|
77
|
+
})
|
|
78
|
+
} satisfies QueueBase<DrainR, Evt>
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// We want the Queue to continue processing even on errors per messages
|
|
83
|
+
// must make sure that the errors are processed/handled beforehand.
|
|
84
|
+
export function silence<R, E, A>(inp: Effect<R, E, A>) {
|
|
85
|
+
return inp.exit.flatMap(result =>
|
|
86
|
+
Effect.gen(function*($) {
|
|
87
|
+
const requestContext = yield* $(RequestContext.Tag.access)
|
|
88
|
+
return yield* $(
|
|
89
|
+
result.match(
|
|
90
|
+
cause => {
|
|
91
|
+
if (cause.isInterrupted()) {
|
|
92
|
+
return (cause as Cause<never>).failCause
|
|
93
|
+
}
|
|
94
|
+
reportQueueError(cause, { requestContext })
|
|
95
|
+
return Effect.unit
|
|
96
|
+
},
|
|
97
|
+
() => Effect.unit
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
})
|
|
101
|
+
)
|
|
102
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LiveReceiver,
|
|
3
|
+
LiveSender,
|
|
4
|
+
LiveServiceBusClient,
|
|
5
|
+
Receiver,
|
|
6
|
+
Sender,
|
|
7
|
+
subscribe
|
|
8
|
+
} from "@effect-app/infra-adapters/ServiceBus"
|
|
9
|
+
import type {} from "@azure/service-bus"
|
|
10
|
+
import { captureException } from "@effect-app/infra/errorReporter"
|
|
11
|
+
import { RequestContext } from "@effect-app/infra/RequestContext"
|
|
12
|
+
import type { CustomSchemaException } from "@effect-app/prelude/schema"
|
|
13
|
+
import { reportQueueError } from "./errors.js"
|
|
14
|
+
import type { QueueBase } from "./service.js"
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @tsplus static QueueMaker.Ops makeServiceBus
|
|
18
|
+
*/
|
|
19
|
+
export function makeServiceBusQueue<
|
|
20
|
+
DrainR,
|
|
21
|
+
Evt extends { id: StringId; _tag: string },
|
|
22
|
+
DrainEvt extends { id: StringId; _tag: string },
|
|
23
|
+
RContext,
|
|
24
|
+
EvtE,
|
|
25
|
+
DrainE
|
|
26
|
+
>(
|
|
27
|
+
_queueName: string,
|
|
28
|
+
queueDrainName: string,
|
|
29
|
+
encoder: (e: { body: Evt; meta: RequestContext }) => EvtE,
|
|
30
|
+
makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>,
|
|
31
|
+
provideContext: (context: RequestContext) => <R, E, A>(
|
|
32
|
+
eff: Effect<RContext | R, E, A>
|
|
33
|
+
) => Effect<Exclude<R, RContext>, E, A>,
|
|
34
|
+
parseDrain: (
|
|
35
|
+
a: unknown,
|
|
36
|
+
env?: Parser.ParserEnv | undefined
|
|
37
|
+
) => Effect<never, CustomSchemaException, { body: DrainEvt; meta: RequestContext }>
|
|
38
|
+
) {
|
|
39
|
+
return Effect.gen(function*($) {
|
|
40
|
+
const s = yield* $(Sender.access)
|
|
41
|
+
const receiver = yield* $(Receiver.access)
|
|
42
|
+
const receiverLayer = Receiver.makeLayer(receiver)
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
drain: Effect.gen(function*($) {
|
|
46
|
+
const handleEvent = yield* $(makeHandleEvent)
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
function processMessage(messageBody: any) {
|
|
49
|
+
return Effect.sync(() => JSON.parse(messageBody))
|
|
50
|
+
.flatMap(x => parseDrain(x))
|
|
51
|
+
.orDie
|
|
52
|
+
.tapErrorCause(report)
|
|
53
|
+
.flatMap(({ body, meta }) =>
|
|
54
|
+
Effect
|
|
55
|
+
.logDebug(`$$ [${queueDrainName}] Processing incoming message`)
|
|
56
|
+
.apply(Effect.logAnnotates({ body: body.$$.pretty, meta: meta.$$.pretty }))
|
|
57
|
+
.zipRight(handleEvent(body))
|
|
58
|
+
.tapErrorCause(report)
|
|
59
|
+
.apply(
|
|
60
|
+
provideContext(
|
|
61
|
+
RequestContext.inherit(meta, {
|
|
62
|
+
id: body.id,
|
|
63
|
+
locale: "en" as const,
|
|
64
|
+
name: ReasonableString(body._tag)
|
|
65
|
+
})
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
)
|
|
69
|
+
.setupRequestFromWith("Queue.ReceiveMessage")
|
|
70
|
+
.orDie
|
|
71
|
+
.asUnit
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return yield* $(
|
|
75
|
+
subscribe({
|
|
76
|
+
processMessage: x => processMessage(x.body).uninterruptible,
|
|
77
|
+
processError: err => Effect(captureException(err.error))
|
|
78
|
+
})
|
|
79
|
+
.provideSomeLayer(receiverLayer)
|
|
80
|
+
)
|
|
81
|
+
}),
|
|
82
|
+
|
|
83
|
+
publish: (...messages) =>
|
|
84
|
+
Effect.gen(function*($) {
|
|
85
|
+
const requestContext = yield* $(RequestContext.Tag.access)
|
|
86
|
+
return yield* $(
|
|
87
|
+
Effect.promise(() =>
|
|
88
|
+
s.sendMessages(
|
|
89
|
+
messages.map(x => ({
|
|
90
|
+
body: JSON.stringify(
|
|
91
|
+
encoder({ body: x, meta: requestContext })
|
|
92
|
+
),
|
|
93
|
+
messageId: x.id, /* correllationid: requestId */
|
|
94
|
+
contentType: "application/json"
|
|
95
|
+
}))
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
.forkDaemonReportQueue
|
|
99
|
+
)
|
|
100
|
+
})
|
|
101
|
+
} satisfies QueueBase<DrainR, Evt>
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @tsplus static QueueMaker.Ops makeServiceBusLayers
|
|
107
|
+
*/
|
|
108
|
+
export function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string) {
|
|
109
|
+
return LiveServiceBusClient(url)
|
|
110
|
+
>> (LiveReceiver(queueDrainName) + LiveSender(queueName))
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function report<E>(cause: Cause<E>) {
|
|
114
|
+
return Effect.gen(function*($) {
|
|
115
|
+
const requestContext = yield* $(RequestContext.Tag.access)
|
|
116
|
+
return reportQueueError(cause, { requestContext })
|
|
117
|
+
})
|
|
118
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RequestContext } from "@effect-app/infra/RequestContext"
|
|
2
|
+
|
|
3
|
+
export interface QueueBase<RContext, Evt> {
|
|
4
|
+
drain: Effect<Scope | RContext, never, void>
|
|
5
|
+
publish: (
|
|
6
|
+
...messages: NonEmptyReadonlyArray<Evt>
|
|
7
|
+
) => Effect<RequestContext, never, void>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @tsplus type QueueMaker.Ops
|
|
12
|
+
*/
|
|
13
|
+
export interface QueueMakerOps {}
|
|
14
|
+
export const QueueMaker: QueueMakerOps = {}
|
package/dist/_global.ext.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ import type {} from "@effect-app/infra/services/Emailer/Sendgrid";
|
|
|
10
10
|
* @tsplus global
|
|
11
11
|
*/
|
|
12
12
|
import type {} from "@effect-app/infra/services/Operations/live";
|
|
13
|
+
/**
|
|
14
|
+
* @tsplus global
|
|
15
|
+
*/
|
|
16
|
+
import type {} from "@effect-app/infra/services/QueueMaker/errors";
|
|
13
17
|
/**
|
|
14
18
|
* @tsplus global
|
|
15
19
|
*/
|
|
@@ -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,4CAA4C,CAAA;AAChE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;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,8CAA8C,CAAA;AAClE;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACjD;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAClD;;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"}
|
|
@@ -10,8 +10,7 @@ export function defaultBasicErrorHandler(_req, res, _requestContext, r2) {
|
|
|
10
10
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
11
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));
|
|
12
12
|
}
|
|
13
|
-
const optimisticConcurrencySchedule = tsplus_module_4.once()
|
|
14
|
-
tsplus_module_4.recurWhile(a => a._tag === "OptimisticConcurrencyException");
|
|
13
|
+
const optimisticConcurrencySchedule = tsplus_module_4.intersect(tsplus_module_4.recurWhile(a => a._tag === "OptimisticConcurrencyException"))(tsplus_module_4.once());
|
|
15
14
|
export function defaultErrorHandler(req, res, _, r2) {
|
|
16
15
|
const r3 = req.method === "PATCH"
|
|
17
16
|
? tsplus_module_1.retry(r2, optimisticConcurrencySchedule)
|
|
@@ -33,4 +32,4 @@ export function defaultErrorHandler(req, res, _, r2) {
|
|
|
33
32
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
34
33
|
, (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
34
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLGVBQStCLEVBQy9CLEVBQW9DO0lBRXBDLE9BQU8seUJBQUEseUJBQUEsOEJBQUEsRUFBRSxFQUNRLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNNLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLDZCQUNqQywyQkFBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdDQUFnQyxDQUFDLEVBRGxELHNCQUFlLENBQ21DLENBQUE7QUFFeEYsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxHQUFvQixFQUNwQixHQUFxQixFQUNyQixDQUFpQixFQUNqQixFQUFvQztJQUVwQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLE9BQU87UUFDL0IsQ0FBQyxDQUFDLHNCQUFBLEVBQUUsRUFBTyw2QkFBNkIsQ0FBQztRQUN6QyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ04sT0FBTyx5QkFBQSx5QkFBQSx5QkFBQSx5QkFBQSx5QkFBQSx5QkFBQSx5QkFBQSw4QkFBQSxFQUFFLEVBQ1EsS0FBSyxDQUFDLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksQ0FBQyxFQUN2RSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNqQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUMsRUFDSyxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDL0IscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUMsRUFDSyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNsQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ25DLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDbkMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUMsRUFDSyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNoRCxxQkFBTyxHQUFHLEVBQUU7UUFDViw0SUFBNEk7UUFDNUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCwrRUFBK0U7TUFDckUsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUN2Qix3QkFBQSxvQkFBQSx5QkFDRSxnR0FBZ0csR0FBRyxHQUFHLENBQ3ZHLEVBQ00sR0FBRyxFQUFFLENBQUMsR0FBYyxDQUFDLHNCQUNOLENBQ3ZCLENBQUE7QUFDTCxDQUFDIn0=
|
|
@@ -10,4 +10,9 @@ export declare function setupRequest<R, E, A>(self: Effect<R, E, A>, requestCont
|
|
|
10
10
|
* @tsplus location "@effect-app/infra/api/setupRequest"
|
|
11
11
|
*/
|
|
12
12
|
export declare function setupRequestFrom<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, E, A>;
|
|
13
|
+
/**
|
|
14
|
+
* @tsplus fluent effect/io/Effect setupRequestFromWith
|
|
15
|
+
* @tsplus location "@effect-app/infra/api/setupRequest"
|
|
16
|
+
*/
|
|
17
|
+
export declare function setupReq3<R, E, A>(self: Effect<R, E, A>, name: string): import("@effect/io/Effect").Effect<Exclude<R, RequestContext>, E, A>;
|
|
13
18
|
//# sourceMappingURL=setupRequest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../../_src/api/setupRequest.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;;;;;AAKrD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,+CAS1F;;;;;AAKD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gEAE9D"}
|
|
1
|
+
{"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../../_src/api/setupRequest.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;;;;;AAKrD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,+CAS1F;;;;;AAKD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gEAE9D;;;;;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,wEAIrE"}
|
package/dist/api/setupRequest.js
CHANGED
|
@@ -2,8 +2,10 @@ import * as tsplus_module_1 from "@effect/io/Effect";
|
|
|
2
2
|
import * as tsplus_module_2 from "@effect-app/prelude/_ext/misc";
|
|
3
3
|
import * as tsplus_module_3 from "@effect-app/core/Function";
|
|
4
4
|
import * as tsplus_module_4 from "@effect-app/infra/RequestContext";
|
|
5
|
+
import * as tsplus_module_5 from "@effect-app/prelude/schema";
|
|
5
6
|
export const setupRequest = setupRequest_1;
|
|
6
|
-
|
|
7
|
+
export const setupRequestFrom = setupRequestFrom_1;
|
|
8
|
+
import { RequestContext } from "../RequestContext.js";
|
|
7
9
|
/**
|
|
8
10
|
* @tsplus fluent effect/io/Effect setupRequest
|
|
9
11
|
*/
|
|
@@ -17,7 +19,22 @@ function setupRequest_1(self, requestContext) {
|
|
|
17
19
|
/**
|
|
18
20
|
* @tsplus getter effect/io/Effect setupRequestFrom
|
|
19
21
|
*/
|
|
20
|
-
|
|
22
|
+
function setupRequestFrom_1(self) {
|
|
21
23
|
return tsplus_module_1.serviceWithEffect(tsplus_module_4.tag, requestContext => setupRequest_1(self, requestContext));
|
|
22
24
|
}
|
|
23
|
-
|
|
25
|
+
/**
|
|
26
|
+
* @tsplus fluent effect/io/Effect setupRequestFromWith
|
|
27
|
+
*/
|
|
28
|
+
export function setupReq3(self, name) {
|
|
29
|
+
return tsplus_module_1.provideService(setupRequestFrom_1(self), tsplus_module_4.tag, makeInternalRequestContext(name));
|
|
30
|
+
}
|
|
31
|
+
function makeInternalRequestContext(name) {
|
|
32
|
+
const id = tsplus_module_5.StringId.make();
|
|
33
|
+
return new RequestContext({
|
|
34
|
+
id,
|
|
35
|
+
rootId: id,
|
|
36
|
+
locale: "en",
|
|
37
|
+
name: tsplus_module_5.ReasonableString(name)
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9hcGkvc2V0dXBSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O2FBS2dCLFlBQVk7YUFjWixnQkFBZ0I7QUFuQmhDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUVyRDs7R0FFRztBQUNILHdCQUFzQyxJQUFxQixFQUFFLGNBQThCO0lBQ3pGLE9BQU8sZ0JBQUEsSUFBSSxDQUNULHdCQUFBLElBQUksRUFBUyxTQUFTLENBQUMsRUFDdkIsNkJBQW9CO1FBQ2xCLGFBQWEsRUFBRSxjQUFjLENBQUMsTUFBTTtRQUNwQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUU7UUFDNUIsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJO0tBQ2pDLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsNEJBQTBDLElBQXFCO0lBQzdELE9BQU8sdURBQW9DLGNBQWMsQ0FBQyxFQUFFLENBQUMsZUFBQSxJQUFJLEVBQWMsY0FBYyxDQUFDLENBQUMsQ0FBQTtBQUNqRyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFVLElBQXFCLEVBQUUsSUFBWTtJQUNwRSxPQUFPLGtEQUFBLElBQUksd0JBRTJCLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsSUFBWTtJQUM5QyxNQUFNLEVBQUUsR0FBRyxnQkFBQSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDMUIsT0FBTyxJQUFJLGNBQWMsQ0FBQztRQUN4QixFQUFFO1FBQ0YsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLElBQUksRUFBRSxnQkFBQSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7S0FDN0IsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
package/dist/rateLimit.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
2
|
-
import * as tsplus_module_2 from "@effect-app/core/
|
|
3
|
-
import * as tsplus_module_3 from "@effect-app/core/
|
|
2
|
+
import * as tsplus_module_2 from "@effect-app/core/Array";
|
|
3
|
+
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
4
4
|
// /**
|
|
5
5
|
// * Executes the specified effect, acquiring the specified number of permits
|
|
6
6
|
// * immediately before the effect begins execution and releasing them
|
|
@@ -36,7 +36,7 @@ import * as tsplus_module_3 from "@effect-app/core/Array";
|
|
|
36
36
|
*/
|
|
37
37
|
export function SEM_withPermitsDuration(permits, duration) {
|
|
38
38
|
return (self) => {
|
|
39
|
-
return effect => tsplus_module_1.uninterruptibleMask(restore =>
|
|
39
|
+
return effect => tsplus_module_1.uninterruptibleMask(restore => tsplus_module_1.zipRight(tsplus_module_1.ensuring(restore(effect), tsplus_module_1.delay(self.release(permits), duration)))(restore(self.take(permits))));
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
@@ -44,14 +44,14 @@ export function SEM_withPermitsDuration(permits, duration) {
|
|
|
44
44
|
* @tsplus static Collection.Aspects batchNPar
|
|
45
45
|
*/
|
|
46
46
|
export function batchNPar(n, forEachItem, forEachBatch) {
|
|
47
|
-
return (items) =>
|
|
47
|
+
return (items) => tsplus_module_2.ext_forEachParWithIndex(tsplus_module_2.chunk_(items, n), (_, i) => tsplus_module_1.flatMap(tsplus_module_1.forEachParWithIndex(_, (_, j) => forEachItem(_, j, i)), _ => forEachBatch(_, i)));
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* @tsplus pipeable Iterable batch
|
|
51
51
|
* @tsplus static Collection.Aspects batch
|
|
52
52
|
*/
|
|
53
53
|
export function batch(n, forEachItem, forEachBatch) {
|
|
54
|
-
return (items) =>
|
|
54
|
+
return (items) => tsplus_module_2.ext_forEachWithIndex(tsplus_module_2.chunk_(items, n), (_, i) => tsplus_module_1.flatMap(tsplus_module_1.forEachParWithIndex(_, (_, j) => forEachItem(_, j, i)), _ => forEachBatch(_, i)));
|
|
55
55
|
}
|
|
56
56
|
// /**
|
|
57
57
|
// * @tsplus pipeable Iterable rateLimit
|
|
@@ -77,6 +77,6 @@ export function batch(n, forEachItem, forEachBatch) {
|
|
|
77
77
|
* @tsplus static Collection.Aspects naiveRateLimit
|
|
78
78
|
*/
|
|
79
79
|
export function naiveRateLimit(n, d) {
|
|
80
|
-
return (items) => ((forEachItem, forEachBatch) =>
|
|
80
|
+
return (items) => ((forEachItem, forEachBatch) => tsplus_module_2.ext_forEachWithIndex(tsplus_module_2.chunk_(items, n), (batch, i) => tsplus_module_1.zipRight(((i === 0) ? tsplus_module_3.unit : tsplus_module_1.delay(tsplus_module_3.unit, d)), tsplus_module_1.flatMap(tsplus_module_1.withParallelism(tsplus_module_2.ext_forEachEffectPar(batch, forEachItem), n), forEachBatch))));
|
|
81
81
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZUxpbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vX3NyYy9yYXRlTGltaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBTTtBQUNOLDhFQUE4RTtBQUM5RSx1RUFBdUU7QUFDdkUsbUZBQW1GO0FBQ25GLCtCQUErQjtBQUMvQixLQUFLO0FBQ0wsa0VBQWtFO0FBQ2xFLGdFQUFnRTtBQUNoRSxNQUFNO0FBQ04sNkVBQTZFO0FBQzdFLDBGQUEwRjtBQUMxRix1QkFBdUI7QUFDdkIsb0NBQW9DO0FBQ3BDLHFCQUFxQjtBQUNyQixtREFBbUQ7QUFDbkQsZ0NBQWdDO0FBQ2hDLDJCQUEyQjtBQUMzQix5Q0FBeUM7QUFDekMsNEJBQTRCO0FBQzVCLHFDQUFxQztBQUNyQyxrQkFBa0I7QUFDbEIsVUFBVTtBQUNWLE1BQU07QUFDTixJQUFJO0FBRUo7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBZSxFQUFFLFFBQWtCO0lBQ3pFLE9BQU8sQ0FBQyxJQUFlLEVBQXlELEVBQUU7UUFDaEYsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUNkLG9DQUNFLE9BQU8sQ0FBQyxFQUFFLDBCQUVKLHlCQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFFYixzQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUNaLFFBQVEsQ0FBQyxDQUNuQixFQUxMLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBS3RCLENBQ1IsQ0FBQTtJQUNMLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixDQUFTLEVBQ1QsV0FBMEUsRUFDMUUsWUFBNEQ7SUFFNUQsT0FBTyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUM1Qix3Q0FBQSx1QkFBQSxLQUFLLEVBQU8sQ0FBQyxDQUFDLEVBQ2UsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDbEMsd0JBQUEsb0NBQUEsQ0FBQyxFQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNwQyxDQUFBO0FBQ1AsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQ25CLENBQVMsRUFDVCxXQUErRSxFQUMvRSxZQUE0RDtJQUU1RCxPQUFPLENBQUMsS0FBa0IsRUFBRSxFQUFFLENBQzVCLHFDQUFBLHVCQUFBLEtBQUssRUFBTyxDQUFDLENBQUMsRUFDWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUMvQix3QkFBQSxvQ0FBQSxDQUFDLEVBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDMUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3BDLENBQUE7QUFDUCxDQUFDO0FBRUQsTUFBTTtBQUNOLHlDQUF5QztBQUN6QyxpREFBaUQ7QUFDakQsTUFBTTtBQUNOLDZCQUE2QjtBQUM3QixlQUFlO0FBQ2YsV0FBVztBQUNYLE1BQU07QUFDTixzQ0FBc0M7QUFDdEMsNkJBQTZCO0FBQzdCLGdEQUFnRDtBQUNoRCwwREFBMEQ7QUFDMUQsV0FBVztBQUNYLHFDQUFxQztBQUNyQyxzQkFBc0I7QUFDdEIsd0NBQXdDO0FBQ3hDLG1GQUFtRjtBQUNuRixzQkFBc0I7QUFDdEIsSUFBSTtBQUVKOzs7R0FHRztBQUVILE1BQU0sVUFBVSxjQUFjLENBQzVCLENBQVMsRUFDVCxDQUFNO0lBRU4sT0FBTyxDQUFJLEtBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDakMsV0FBc0MsRUFDdEMsWUFBaUQsRUFDakQsRUFBRSxDQUNGLHFDQUFBLHVCQUFBLEtBQUssRUFBTyxDQUFDLENBQUMsRUFDWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNuQyx5QkFBQSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQWEsQ0FBQyxDQUFDLDRDQUFrQixDQUFDLENBQUMsQ0FBQyxFQUU1Qyx3QkFBQSxnQ0FBQSxxQ0FBQSxLQUFLLEVBQWtCLFdBQVcsQ0FBQyxFQUNoQixDQUFDLENBQUMsRUFDVixZQUFZLENBQUMsQ0FDekIsQ0FDSixDQUFDLENBQUE7QUFDUixDQUFDIn0=
|
|
@@ -7,9 +7,10 @@ import * as tsplus_module_6 from "@effect/io/Cause";
|
|
|
7
7
|
import * as tsplus_module_7 from "@effect-app/prelude/schema";
|
|
8
8
|
import * as tsplus_module_8 from "@effect-app/core/Option";
|
|
9
9
|
import * as tsplus_module_9 from "@effect-app/prelude/_ext/misc";
|
|
10
|
-
import * as tsplus_module_10 from "@effect-app/
|
|
11
|
-
import * as tsplus_module_11 from "@
|
|
12
|
-
import * as tsplus_module_12 from "@
|
|
10
|
+
import * as tsplus_module_10 from "@effect-app/prelude/service";
|
|
11
|
+
import * as tsplus_module_11 from "@fp-ts/data/Duration";
|
|
12
|
+
import * as tsplus_module_12 from "@effect-app/core/Effect";
|
|
13
|
+
import * as tsplus_module_13 from "@effect/io/Layer";
|
|
13
14
|
import { RequestException } from "@effect-app/infra/api/reportError";
|
|
14
15
|
import { reportError } from "@effect-app/infra/errorReporter";
|
|
15
16
|
import { Failure, Operation, OperationId, Success } from "@effect-app/prelude/Operations";
|
|
@@ -65,23 +66,23 @@ const make = tsplus_module_1.sync(() => {
|
|
|
65
66
|
ops.set(id, { ..._.value, updatedAt: new Date(), progress });
|
|
66
67
|
}));
|
|
67
68
|
}
|
|
68
|
-
return
|
|
69
|
+
return tsplus_module_10.make(Operations, {
|
|
69
70
|
cleanup,
|
|
70
|
-
register: tsplus_module_1.tap(makeOp, id =>
|
|
71
|
+
register: tsplus_module_1.tap(makeOp, id => tsplus_module_1.zipRight(tsplus_module_1.acquireRelease(addOp(id), (_, exit) => finishOp(id, exit)))(tsplus_module_9.logAnnotateScoped("operationId", id))),
|
|
71
72
|
find: findOp,
|
|
72
73
|
update
|
|
73
74
|
});
|
|
74
75
|
});
|
|
75
76
|
const cleanupLoop = tsplus_module_1.forkScoped(tsplus_module_1.forever(tsplus_module_1.delay(tsplus_module_1.flatMap(tsplus_module_1.exit(tsplus_module_1.serviceWithEffect(Operations, _ => _.cleanup)), _ => {
|
|
76
77
|
if (tsplus_module_5.isSuccess(_)) {
|
|
77
|
-
return
|
|
78
|
+
return tsplus_module_12.unit;
|
|
78
79
|
}
|
|
79
80
|
else {
|
|
80
81
|
return reportAppError(_.cause);
|
|
81
82
|
}
|
|
82
|
-
}),
|
|
83
|
+
}), tsplus_module_11.minutes(1))));
|
|
83
84
|
/**
|
|
84
85
|
* @tsplus static Operations.Ops Live
|
|
85
86
|
*/
|
|
86
|
-
export const Live =
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
export const Live = tsplus_module_13.provideMerge(tsplus_module_12.toScopedDiscardLayer(cleanupLoop))(tsplus_module_1.toLayer(make, Operations));
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvT3BlcmF0aW9ucy9saXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFFN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFekMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBRXhFLE1BQU0sSUFBSSxHQUFHLHFCQUFPLEdBQUcsRUFBRTtJQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxxQkFBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUUvQyxNQUFNLE9BQU8sR0FBRyxxQkFBTyxHQUFHLEVBQUU7UUFDMUIsTUFBTSxNQUFNLEdBQUcsNkJBQUEsSUFBSSxJQUFJLEVBQUUsRUFBVSxDQUFDLENBQUMsQ0FBQTtRQUNyQyw4QkFBQSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBRVYsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQixNQUFNLFdBQVcsR0FBRywwQkFBNEMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBOUQsNkJBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBOEIsQ0FBQTtZQUNuRixJQUFJLFdBQVcsR0FBRyxNQUFNLEVBQUU7Z0JB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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Cause } from "@effect/io/Cause";
|
|
2
|
+
import { Effect } from "@effect/io/Effect";
|
|
3
|
+
import { CauseException } from "@effect-app/infra/errors";
|
|
4
|
+
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
5
|
+
export declare class MessageException<E> extends CauseException<E> {
|
|
6
|
+
constructor(cause: Cause<E>);
|
|
7
|
+
}
|
|
8
|
+
export declare class FatalQueueException<E> extends CauseException<E> {
|
|
9
|
+
constructor(cause: Cause<E>);
|
|
10
|
+
}
|
|
11
|
+
export declare const reportQueueError: (cause: Cause<unknown>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<RequestContext, never, import("@effect/io/Effect").Effect<never, never, void>>;
|
|
12
|
+
/**
|
|
13
|
+
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
14
|
+
* new fiber is attached to the global scope, when the fiber executing the
|
|
15
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
16
|
+
*
|
|
17
|
+
* Reports errors.
|
|
18
|
+
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
19
|
+
* @tsplus location "@effect-app/infra/services/QueueMaker/errors"
|
|
20
|
+
*/
|
|
21
|
+
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, never, import("@effect/io/Fiber").RuntimeFiber<E, A>>;
|
|
22
|
+
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 reportFailure(name: string): <R, E, A>(self: import("@effect/io/Effect").Effect<R, E, A>) => import("@effect/io/Effect").Effect<R, never, import("@effect/io/Exit").Exit<E, A>>;
|
|
24
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/errors.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEjE,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,UAAW,MAAM,OAAO,CAAC,YAAY,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,sHAGlG,CAAA;;;;;;;;;;AAWH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gHAEnE;AAED,eAAO,MAAM,qBAAqB,6JAEjC,CAAA;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,sJAOzC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
2
|
+
import * as tsplus_module_2 from "@effect-app/infra/RequestContext";
|
|
3
|
+
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
4
|
+
import { reportError } from "@effect-app/infra/errorReporter";
|
|
5
|
+
import { CauseException } from "@effect-app/infra/errors";
|
|
6
|
+
import "@effect-app/infra/RequestContext";
|
|
7
|
+
export class MessageException extends CauseException {
|
|
8
|
+
constructor(cause) {
|
|
9
|
+
super(cause, "Message");
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class FatalQueueException extends CauseException {
|
|
13
|
+
constructor(cause) {
|
|
14
|
+
super(cause, "Message");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const reportQueueError_ = reportError(cause => new MessageException(cause));
|
|
18
|
+
export const reportQueueError = (cause, context) => tsplus_module_1.serviceWithEffect(tsplus_module_2.tag, requestContext => tsplus_module_1.sync(() => reportQueueError_(cause, { requestContext, ...context })));
|
|
19
|
+
/**
|
|
20
|
+
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
21
|
+
* new fiber is attached to the global scope, when the fiber executing the
|
|
22
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
23
|
+
*
|
|
24
|
+
* Reports errors.
|
|
25
|
+
*
|
|
26
|
+
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
27
|
+
*/
|
|
28
|
+
export function forkDaemonReportQueue(self) {
|
|
29
|
+
return tsplus_module_1.daemonChildren(tsplus_module_1.fork(tsplus_module_1.tapErrorCause(self, reportQueueError)));
|
|
30
|
+
}
|
|
31
|
+
export const reportFatalQueueError = reportError(cause => new FatalQueueException(cause));
|
|
32
|
+
export function reportFailure(name) {
|
|
33
|
+
return (self) => tsplus_module_1.tap(tsplus_module_1.exit(self), exit => exit._tag === "Failure"
|
|
34
|
+
? reportFatalQueueError(exit.cause, { name })
|
|
35
|
+
: tsplus_module_3.unit);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9RdWV1ZU1ha2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3pELE9BQStCLGtDQUFrQyxDQUFBO0FBRWpFLE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxjQUFpQjtJQUN4RCxZQUFZLEtBQWU7UUFDekIsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sbUJBQXVCLFNBQVEsY0FBaUI7SUFDM0QsWUFBWSxLQUFlO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDekIsQ0FBQztDQUNGO0FBRUQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFxQixFQUFFLE9BQTZDLEVBQUUsRUFBRSxDQUN2Ryx1REFBb0MsY0FBYyxDQUFDLEVBQUUsQ0FDbkQsMkJBQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNqRSxDQUFBO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQVUsSUFBcUI7SUFDbEUsMkRBQU8sOEJBQUEsSUFBSSxFQUFlLGdCQUFnQixDQUFDLEdBQW9CO0FBQ2pFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxXQUFXLENBQzlDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDeEMsQ0FBQTtBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWTtJQUN4QyxPQUFPLENBQVUsSUFBcUIsRUFBRSxFQUFFLENBQ3hDLHlDQUFBLElBQUksR0FBVSxJQUFJLENBQUMsRUFBRSxDQUNuQixJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDckIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxDQUFDLHFCQUFZLENBQ2hCLENBQUE7QUFDTCxDQUFDIn0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { StringId, Parser } from "@effect-app/prelude/schema";
|
|
2
|
+
import { Effect } from "@effect/io/Effect";
|
|
3
|
+
import { Cause } from "@effect/io/Cause";
|
|
4
|
+
import { MemQueue } from "@effect-app/infra-adapters/memQueue";
|
|
5
|
+
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
6
|
+
import type { CustomSchemaException } from "@effect-app/prelude/schema";
|
|
7
|
+
/**
|
|
8
|
+
* @tsplus static QueueMaker.Ops makeMem
|
|
9
|
+
* @tsplus location "@effect-app/infra/services/QueueMaker/memQueue"
|
|
10
|
+
*/
|
|
11
|
+
export declare function makeMemQueue<DrainR, Evt, DrainEvt extends {
|
|
12
|
+
id: StringId;
|
|
13
|
+
_tag: string;
|
|
14
|
+
}, RContext, EvtE, DrainE>(queueName: string, queueDrainName: string, encoder: (e: {
|
|
15
|
+
body: Evt;
|
|
16
|
+
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, {
|
|
18
|
+
body: DrainEvt;
|
|
19
|
+
meta: RequestContext;
|
|
20
|
+
}>): import("@effect/io/Effect").Effect<MemQueue, never, {
|
|
21
|
+
publish: (messages_0: Evt, ...messages_1: Evt[]) => import("@effect/io/Effect").Effect<RequestContext, never, import("@effect/io/Fiber").RuntimeFiber<never, import("@fp-ts/data/Chunk").Chunk<void>>>;
|
|
22
|
+
drain: import("@effect/io/Effect").Effect<import("@effect/io/Scope").Scope | DrainR, never, import("@effect/io/Fiber").RuntimeFiber<never, import("@effect/io/Exit").Exit<never, never>>>;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function silence<R, E, A>(inp: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
|
|
25
|
+
//# sourceMappingURL=memQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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;;;;;AAOvE,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAC/G,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,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvC,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;;;GA2DpF;AAID,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,uEAkBpD"}
|