@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.
Files changed (54) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/_cjs/api/defaultErrorHandler.cjs +1 -1
  3. package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
  4. package/_cjs/api/setupRequest.cjs +22 -4
  5. package/_cjs/api/setupRequest.cjs.map +1 -1
  6. package/_cjs/rateLimit.cjs +6 -6
  7. package/_cjs/rateLimit.cjs.map +1 -1
  8. package/_cjs/services/Operations/live.cjs +9 -8
  9. package/_cjs/services/Operations/live.cjs.map +1 -1
  10. package/_cjs/services/QueueMaker/errors.cjs +54 -0
  11. package/_cjs/services/QueueMaker/errors.cjs.map +1 -0
  12. package/_cjs/services/QueueMaker/memQueue.cjs +79 -0
  13. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -0
  14. package/_cjs/services/QueueMaker/sbqueue.cjs +80 -0
  15. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -0
  16. package/_cjs/services/QueueMaker/service.cjs +9 -0
  17. package/_cjs/services/QueueMaker/service.cjs.map +1 -0
  18. package/_cjs/services/Store/Cosmos.test.cjs +3 -4
  19. package/_cjs/services/Store/Cosmos.test.cjs.map +1 -1
  20. package/_cjs/services/Store/codeFilter.test.cjs +6 -7
  21. package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
  22. package/_src/_global.ext.ts +4 -0
  23. package/_src/api/setupRequest.ts +19 -0
  24. package/_src/services/QueueMaker/errors.ts +48 -0
  25. package/_src/services/QueueMaker/memQueue.ts +102 -0
  26. package/_src/services/QueueMaker/sbqueue.ts +118 -0
  27. package/_src/services/QueueMaker/service.ts +14 -0
  28. package/_src/services/Store/Cosmos.test.ts +0 -1
  29. package/_src/services/Store/codeFilter.test.ts +0 -1
  30. package/dist/_global.ext.d.ts +4 -0
  31. package/dist/_global.ext.d.ts.map +1 -1
  32. package/dist/api/defaultErrorHandler.js +2 -3
  33. package/dist/api/setupRequest.d.ts +5 -0
  34. package/dist/api/setupRequest.d.ts.map +1 -1
  35. package/dist/api/setupRequest.js +20 -3
  36. package/dist/rateLimit.js +7 -7
  37. package/dist/services/Operations/live.js +10 -9
  38. package/dist/services/QueueMaker/errors.d.ts +24 -0
  39. package/dist/services/QueueMaker/errors.d.ts.map +1 -0
  40. package/dist/services/QueueMaker/errors.js +37 -0
  41. package/dist/services/QueueMaker/memQueue.d.ts +25 -0
  42. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -0
  43. package/dist/services/QueueMaker/memQueue.js +60 -0
  44. package/dist/services/QueueMaker/sbqueue.d.ts +31 -0
  45. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -0
  46. package/dist/services/QueueMaker/sbqueue.js +61 -0
  47. package/dist/services/QueueMaker/service.d.ts +15 -0
  48. package/dist/services/QueueMaker/service.d.ts.map +1 -0
  49. package/dist/services/QueueMaker/service.js +2 -0
  50. package/dist/services/Store/Cosmos.test.d.ts.map +1 -1
  51. package/dist/services/Store/codeFilter.test.d.ts.map +1 -1
  52. package/package.json +48 -7
  53. package/tsconfig.json +5 -3
  54. 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 = {}
@@ -1,5 +1,4 @@
1
1
  import type { StoreWhereFilter, Where } from "@effect-app/infra/services/Store"
2
- import { expect, test } from "vitest"
3
2
  import { makeFilters } from "../../filter.js"
4
3
  import { buildWhereCosmosQuery } from "./Cosmos.js"
5
4
 
@@ -1,5 +1,4 @@
1
1
  import type { StoreWhereFilter, Where } from "@effect-app/infra/services/Store"
2
- import { expect, test } from "vitest"
3
2
  import { makeFilters } from "../../filter.js"
4
3
  import { codeFilter } from "./utils.js"
5
4
 
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLGVBQStCLEVBQy9CLEVBQW9DO0lBRXBDLE9BQU8seUJBQUEseUJBQUEsOEJBQUEsRUFBRSxFQUNRLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNNLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLEdBQUcsc0JBQWU7SUFDbkQsMkJBQXFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBRXhGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsQ0FBaUIsRUFDakIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE9BQU8seUJBQUEseUJBQUEseUJBQUEseUJBQUEseUJBQUEseUJBQUEseUJBQUEsOEJBQUEsRUFBRSxFQUNRLEtBQUssQ0FBQyxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDakMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUMsQ0FBQyxDQUFDLEVBQ0ssZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQy9CLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssa0JBQWtCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDbEMscUJBQU8sR0FBRyxFQUFFO1FBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsQ0FBQyxDQUFDLENBQUMsRUFDSyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNuQyxxQkFBTyxHQUFHLEVBQUU7UUFDVixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQixDQUFDLENBQUMsQ0FBQyxFQUNLLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ25DLHFCQUFPLEdBQUcsRUFBRTtRQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDLEVBQ0ssZ0NBQWdDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FDaEQscUJBQU8sR0FBRyxFQUFFO1FBQ1YsNElBQTRJO1FBQzVJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBQ0UsZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNNLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQyJ9
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"}
@@ -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
- import "../RequestContext.js";
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
- export function setupRequestFrom(self) {
22
+ function setupRequestFrom_1(self) {
21
23
  return tsplus_module_1.serviceWithEffect(tsplus_module_4.tag, requestContext => setupRequest_1(self, requestContext));
22
24
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9hcGkvc2V0dXBSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7YUFLZ0IsWUFBWTtBQUw1QixPQUErQixzQkFBc0IsQ0FBQTtBQUVyRDs7R0FFRztBQUNILHdCQUFzQyxJQUFxQixFQUFFLGNBQThCO0lBQ3pGLE9BQU8sZ0JBQUEsSUFBSSxDQUNULHdCQUFBLElBQUksRUFBUyxTQUFTLENBQUMsRUFDdkIsNkJBQW9CO1FBQ2xCLGFBQWEsRUFBRSxjQUFjLENBQUMsTUFBTTtRQUNwQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUU7UUFDNUIsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJO0tBQ2pDLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFVLElBQXFCO0lBQzdELE9BQU8sdURBQW9DLGNBQWMsQ0FBQyxFQUFFLENBQUMsZUFBQSxJQUFJLEVBQWMsY0FBYyxDQUFDLENBQUMsQ0FBQTtBQUNqRyxDQUFDIn0=
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/Effect";
3
- import * as tsplus_module_3 from "@effect-app/core/Array";
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 => tsplus_module_2.EffectZipRight(tsplus_module_1.ensuring(restore(effect), tsplus_module_1.delay(self.release(permits), duration)))(restore(self.take(permits))));
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) => tsplus_module_3.ext_forEachParWithIndex(tsplus_module_3.chunk_(items, n), (_, i) => tsplus_module_1.flatMap(tsplus_module_1.forEachParWithIndex(_, (_, j) => forEachItem(_, j, i)), _ => forEachBatch(_, i)));
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) => tsplus_module_3.ext_forEachWithIndex(tsplus_module_3.chunk_(items, n), (_, i) => tsplus_module_1.flatMap(tsplus_module_1.forEachParWithIndex(_, (_, j) => forEachItem(_, j, i)), _ => forEachBatch(_, i)));
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) => tsplus_module_3.ext_forEachWithIndex(tsplus_module_3.chunk_(items, n), (batch, i) => tsplus_module_1.zipRight(((i === 0) ? tsplus_module_2.unit : tsplus_module_1.delay(tsplus_module_2.unit, d)), tsplus_module_1.flatMap(tsplus_module_1.withParallelism(tsplus_module_3.ext_forEachEffectPar(batch, forEachItem), n), 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZUxpbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vX3NyYy9yYXRlTGltaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBTTtBQUNOLDhFQUE4RTtBQUM5RSx1RUFBdUU7QUFDdkUsbUZBQW1GO0FBQ25GLCtCQUErQjtBQUMvQixLQUFLO0FBQ0wsa0VBQWtFO0FBQ2xFLGdFQUFnRTtBQUNoRSxNQUFNO0FBQ04sNkVBQTZFO0FBQzdFLDBGQUEwRjtBQUMxRix1QkFBdUI7QUFDdkIsb0NBQW9DO0FBQ3BDLHFCQUFxQjtBQUNyQixtREFBbUQ7QUFDbkQsZ0NBQWdDO0FBQ2hDLDJCQUEyQjtBQUMzQix5Q0FBeUM7QUFDekMsNEJBQTRCO0FBQzVCLHFDQUFxQztBQUNyQyxrQkFBa0I7QUFDbEIsVUFBVTtBQUNWLE1BQU07QUFDTixJQUFJO0FBRUo7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBZSxFQUFFLFFBQWtCO0lBQ3pFLE9BQU8sQ0FBQyxJQUFlLEVBQXlELEVBQUU7UUFDaEYsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUNkLG9DQUNFLE9BQU8sQ0FBQyxFQUFFLGdDQUVKLHlCQUFBLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFFYixzQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUNaLFFBQVEsQ0FBQyxDQUNuQixFQUxMLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBS3RCLENBQ1IsQ0FBQTtJQUNMLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixDQUFTLEVBQ1QsV0FBMEUsRUFDMUUsWUFBNEQ7SUFFNUQsT0FBTyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUM1Qix3Q0FBQSx1QkFBQSxLQUFLLEVBQU8sQ0FBQyxDQUFDLEVBQ2UsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDbEMsd0JBQUEsb0NBQUEsQ0FBQyxFQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNwQyxDQUFBO0FBQ1AsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQ25CLENBQVMsRUFDVCxXQUErRSxFQUMvRSxZQUE0RDtJQUU1RCxPQUFPLENBQUMsS0FBa0IsRUFBRSxFQUFFLENBQzVCLHFDQUFBLHVCQUFBLEtBQUssRUFBTyxDQUFDLENBQUMsRUFDWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUMvQix3QkFBQSxvQ0FBQSxDQUFDLEVBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDMUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3BDLENBQUE7QUFDUCxDQUFDO0FBRUQsTUFBTTtBQUNOLHlDQUF5QztBQUN6QyxpREFBaUQ7QUFDakQsTUFBTTtBQUNOLDZCQUE2QjtBQUM3QixlQUFlO0FBQ2YsV0FBVztBQUNYLE1BQU07QUFDTixzQ0FBc0M7QUFDdEMsNkJBQTZCO0FBQzdCLGdEQUFnRDtBQUNoRCwwREFBMEQ7QUFDMUQsV0FBVztBQUNYLHFDQUFxQztBQUNyQyxzQkFBc0I7QUFDdEIsd0NBQXdDO0FBQ3hDLG1GQUFtRjtBQUNuRixzQkFBc0I7QUFDdEIsSUFBSTtBQUVKOzs7R0FHRztBQUVILE1BQU0sVUFBVSxjQUFjLENBQzVCLENBQVMsRUFDVCxDQUFNO0lBRU4sT0FBTyxDQUFJLEtBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDakMsV0FBc0MsRUFDdEMsWUFBaUQsRUFDakQsRUFBRSxDQUNGLHFDQUFBLHVCQUFBLEtBQUssRUFBTyxDQUFDLENBQUMsRUFDWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNuQyx5QkFBQSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQWEsQ0FBQyxDQUFDLDRDQUFrQixDQUFDLENBQUMsQ0FBQyxFQUU1Qyx3QkFBQSxnQ0FBQSxxQ0FBQSxLQUFLLEVBQWtCLFdBQVcsQ0FBQyxFQUNoQixDQUFDLENBQUMsRUFDVixZQUFZLENBQUMsQ0FDekIsQ0FDSixDQUFDLENBQUE7QUFDUixDQUFDIn0=
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/core/Effect";
11
- import * as tsplus_module_11 from "@effect-app/prelude/service";
12
- import * as tsplus_module_12 from "@fp-ts/data/Duration";
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 tsplus_module_11.make(Operations, {
69
+ return tsplus_module_10.make(Operations, {
69
70
  cleanup,
70
- register: tsplus_module_1.tap(makeOp, id => tsplus_module_10.EffectZipRight(tsplus_module_1.acquireRelease(addOp(id), (_, exit) => finishOp(id, exit)))(tsplus_module_9.logAnnotateScoped("operationId", 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 tsplus_module_10.unit;
78
+ return tsplus_module_12.unit;
78
79
  }
79
80
  else {
80
81
  return reportAppError(_.cause);
81
82
  }
82
- }), tsplus_module_12.minutes(1))));
83
+ }), tsplus_module_11.minutes(1))));
83
84
  /**
84
85
  * @tsplus static Operations.Ops Live
85
86
  */
86
- export const Live = tsplus_module_10.LayerProvideMerge(tsplus_module_10.toScopedDiscardLayer(cleanupLoop))(tsplus_module_1.toLayer(make, Operations));
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvT3BlcmF0aW9ucy9saXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV6QyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFeEUsTUFBTSxJQUFJLEdBQUcscUJBQU8sR0FBRyxFQUFFO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFBO0lBQzdDLE1BQU0sTUFBTSxHQUFHLHFCQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRS9DLE1BQU0sT0FBTyxHQUFHLHFCQUFPLEdBQUcsRUFBRTtRQUMxQixNQUFNLE1BQU0sR0FBRyw2QkFBQSxJQUFJLElBQUksRUFBRSxFQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLDhCQUFBLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFFVixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sV0FBVyxHQUFHLDBCQUE0QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUE5RCw2QkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUE4QixDQUFBO1lBQ25GLElBQUksV0FBVyxHQUFHLE1BQU0sRUFBRTtnQkFD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
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"}