@effect-app/infra 3.0.13 → 3.0.15
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 +15 -0
- package/dist/Emailer/service.d.ts +4 -4
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/MainFiberSet.d.ts +6 -6
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +1 -1
- package/dist/Model/Repository/ext.d.ts +9 -9
- package/dist/Model/Repository/ext.d.ts.map +1 -1
- package/dist/Model/Repository/ext.js +1 -1
- package/dist/Model/Repository/internal/internal.d.ts +12 -12
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +1 -1
- package/dist/Model/Repository/legacy.d.ts +6 -6
- package/dist/Model/Repository/legacy.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.d.ts +2 -2
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/service.d.ts +5 -5
- package/dist/Model/Repository/service.d.ts.map +1 -1
- package/dist/Model/dsl.d.ts +14 -14
- package/dist/Model/dsl.d.ts.map +1 -1
- package/dist/Model/dsl.js +1 -1
- package/dist/Model/query/dsl.d.ts +1 -1
- package/dist/Model/query/dsl.d.ts.map +1 -1
- package/dist/Operations.d.ts +37 -37
- package/dist/Operations.d.ts.map +1 -1
- package/dist/Operations.js +1 -1
- package/dist/QueueMaker/SQLQueue.d.ts +1 -1
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +1 -1
- package/dist/QueueMaker/errors.d.ts +3 -3
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/QueueMaker/errors.js +1 -1
- package/dist/QueueMaker/memQueue.d.ts +1 -1
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +1 -1
- package/dist/QueueMaker/sbqueue.d.ts +1 -1
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +1 -1
- package/dist/QueueMaker/service.d.ts +2 -2
- package/dist/QueueMaker/service.d.ts.map +1 -1
- package/dist/RequestFiberSet.d.ts +17 -17
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +1 -1
- package/dist/Store/Cosmos.js +1 -1
- package/dist/Store/Disk.d.ts +1 -1
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +1 -1
- package/dist/Store/Memory.d.ts +2 -2
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +1 -1
- package/dist/Store/service.d.ts +12 -12
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/utils.d.ts +1 -1
- package/dist/Store/utils.d.ts.map +1 -1
- package/dist/Store/utils.js +1 -1
- package/dist/adapters/ServiceBus.d.ts +12 -12
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +1 -1
- package/dist/adapters/cosmos-client.d.ts +1 -1
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.d.ts +1 -1
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.d.ts +4 -4
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +1 -1
- package/dist/api/ContextProvider.d.ts +5 -5
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/internal/middlewares.d.ts +1 -1
- package/dist/api/internal/middlewares.d.ts.map +1 -1
- package/dist/api/internal/middlewares.js +1 -1
- package/dist/api/layerUtils.d.ts +1 -1
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +1 -1
- package/dist/api/middlewares.d.ts +1 -1
- package/dist/api/middlewares.d.ts.map +1 -1
- package/dist/api/reportError.d.ts +2 -2
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +2 -2
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +1 -1
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing.d.ts +22 -22
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +1 -1
- package/dist/api/setupRequest.d.ts +3 -3
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +1 -1
- package/dist/errorReporter.d.ts +2 -2
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +1 -1
- package/dist/rateLimit.d.ts +4 -4
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +4 -4
- package/package.json +2 -2
- package/src/Emailer/service.ts +1 -1
- package/src/MainFiberSet.ts +4 -3
- package/src/Model/Repository/ext.ts +13 -13
- package/src/Model/Repository/internal/internal.ts +13 -13
- package/src/Model/Repository/legacy.ts +6 -6
- package/src/Model/Repository/makeRepo.ts +2 -2
- package/src/Model/Repository/service.ts +5 -5
- package/src/Model/dsl.ts +25 -22
- package/src/Model/query/dsl.ts +1 -1
- package/src/Operations.ts +20 -20
- package/src/QueueMaker/SQLQueue.ts +1 -1
- package/src/QueueMaker/errors.ts +4 -4
- package/src/QueueMaker/memQueue.ts +1 -1
- package/src/QueueMaker/sbqueue.ts +1 -1
- package/src/QueueMaker/service.ts +3 -3
- package/src/RequestFiberSet.ts +9 -8
- package/src/Store/Cosmos.ts +1 -1
- package/src/Store/Disk.ts +2 -2
- package/src/Store/Memory.ts +2 -2
- package/src/Store/service.ts +10 -10
- package/src/Store/utils.ts +1 -1
- package/src/adapters/ServiceBus.ts +14 -10
- package/src/adapters/cosmos-client.ts +1 -1
- package/src/adapters/mongo-client.ts +1 -1
- package/src/adapters/redis-client.ts +4 -4
- package/src/api/ContextProvider.ts +11 -11
- package/src/api/internal/middlewares.ts +1 -1
- package/src/api/layerUtils.ts +9 -2
- package/src/api/middlewares.ts +1 -1
- package/src/api/reportError.ts +2 -2
- package/src/api/routing/middleware/RouterMiddleware.ts +1 -1
- package/src/api/routing.ts +42 -39
- package/src/api/setupRequest.ts +4 -4
- package/src/errorReporter.ts +3 -3
- package/src/rateLimit.ts +12 -12
- package/test/controller.test.ts +3 -8
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/fixtures.d.ts +1 -1
- package/test/requires.test.ts +1 -1
package/dist/rateLimit.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// * failure, or interruption.
|
|
6
6
|
// */
|
|
7
7
|
// export function withPermitsDuration(permits: number, duration: Duration) {
|
|
8
|
-
// return (self: TSemaphore): <R, E, A>(effect: Effect<R, E, A>) => Effect<R, E, A> => {
|
|
8
|
+
// return (self: TSemaphore): <R, E, A>(effect: Effect.Effect<R, E, A>) => Effect.Effect<R, E, A> => {
|
|
9
9
|
// return effect =>
|
|
10
10
|
// Effect.uninterruptibleMask(
|
|
11
11
|
// restore =>
|
|
@@ -49,8 +49,8 @@ export function batch(n, forEachItem, forEachBatch) {
|
|
|
49
49
|
// ) {
|
|
50
50
|
// return <T>(items: Iterable<T>) =>
|
|
51
51
|
// <R, E, A, R2, E2, A2>(
|
|
52
|
-
// forEachItem: (i: T) => Effect<R, E, A>,
|
|
53
|
-
// forEachBatch: (a: Chunk<A>) => Effect<R2, E2, A2>
|
|
52
|
+
// forEachItem: (i: T) => Effect.Effect<R, E, A>,
|
|
53
|
+
// forEachBatch: (a: Chunk<A>) => Effect.Effect<R2, E2, A2>
|
|
54
54
|
// ) =>
|
|
55
55
|
// Stream.fromCollection(items)
|
|
56
56
|
// .rechunk(n)
|
|
@@ -66,4 +66,4 @@ export function naiveRateLimit(n, d) {
|
|
|
66
66
|
.forEach(batch, forEachItem, { concurrency: n })
|
|
67
67
|
.pipe(Effect.flatMap(forEachBatch))))));
|
|
68
68
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZUxpbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JhdGVMaW1pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNO0FBQ04sOEVBQThFO0FBQzlFLHVFQUF1RTtBQUN2RSxtRkFBbUY7QUFDbkYsK0JBQStCO0FBQy9CLE1BQU07QUFDTiw2RUFBNkU7QUFDN0Usd0dBQXdHO0FBQ3hHLHVCQUF1QjtBQUN2QixvQ0FBb0M7QUFDcEMscUJBQXFCO0FBQ3JCLG1EQUFtRDtBQUNuRCxnQ0FBZ0M7QUFDaEMsMkJBQTJCO0FBQzNCLHlDQUF5QztBQUN6Qyw0QkFBNEI7QUFDNUIscUNBQXFDO0FBQ3JDLGtCQUFrQjtBQUNsQixVQUFVO0FBQ1YsTUFBTTtBQUNOLElBQUk7QUFFSixPQUFPLEVBQUUsS0FBSyxFQUFpQixNQUFNLEVBQXNCLE1BQU0sWUFBWSxDQUFBO0FBRzdFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQWUsRUFBRSxRQUEyQjtJQUNsRixPQUFPLENBQUMsSUFBZSxFQUF1RSxFQUFFO1FBQzlGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoQixNQUFNLENBQUMsbUJBQW1CLENBQ3hCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQzlDLENBQUMsQ0FDTCxDQUFDLENBQ1AsQ0FBQTtJQUNMLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUN0QixDQUFTLEVBQ1QsV0FBc0YsRUFDdEYs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.15",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "7.0.1",
|
|
15
15
|
"query-string": "^9.2.2",
|
|
16
|
-
"effect-app": "3.0
|
|
16
|
+
"effect-app": "3.1.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.5.0",
|
package/src/Emailer/service.ts
CHANGED
|
@@ -8,7 +8,7 @@ export class SendMailError extends Data.TaggedError("SendMailError")<{
|
|
|
8
8
|
}> {}
|
|
9
9
|
|
|
10
10
|
export class Emailer extends Context.TagId("effect-app/Emailer")<Emailer, {
|
|
11
|
-
sendMail: (msg: EmailMsgOptionalFrom) => Effect<void, SendMailError>
|
|
11
|
+
sendMail: (msg: EmailMsgOptionalFrom) => Effect.Effect<void, SendMailError>
|
|
12
12
|
}>() {}
|
|
13
13
|
|
|
14
14
|
export type EmailData = Email | {
|
package/src/MainFiberSet.ts
CHANGED
|
@@ -39,7 +39,7 @@ const make = Effect.gen(function*() {
|
|
|
39
39
|
* The parent span is set to the root span of the current fiber.
|
|
40
40
|
* Reports and then swallows errors.
|
|
41
41
|
*/
|
|
42
|
-
function forkDaemonReport<A, E, R>(self: Effect<A, E, R>) {
|
|
42
|
+
function forkDaemonReport<A, E, R>(self: Effect.Effect<A, E, R>) {
|
|
43
43
|
return self.pipe(
|
|
44
44
|
Effect.asVoid,
|
|
45
45
|
Effect.catchAllCause(reportNonInterruptedFailureCause({})),
|
|
@@ -66,6 +66,7 @@ const make = Effect.gen(function*() {
|
|
|
66
66
|
export class MainFiberSet extends Context.TagMakeId("MainFiberSet", make)<MainFiberSet>() {
|
|
67
67
|
static readonly Live = this.toLayerScoped()
|
|
68
68
|
static readonly JoinLive = this.pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live))
|
|
69
|
-
static readonly run = <A, R>(self: Effect<A, never, R>) => this.use((_) => _.run(self))
|
|
70
|
-
static readonly forkDaemonReport = <A, E, R>(self: Effect<A, E, R>) =>
|
|
69
|
+
static readonly run = <A, R>(self: Effect.Effect<A, never, R>) => this.use((_) => _.run(self))
|
|
70
|
+
static readonly forkDaemonReport = <A, E, R>(self: Effect.Effect<A, E, R>) =>
|
|
71
|
+
this.use((_) => _.forkDaemonReport(self))
|
|
71
72
|
}
|
|
@@ -33,7 +33,7 @@ export const extendRepo = <
|
|
|
33
33
|
S2 extends T
|
|
34
34
|
>(
|
|
35
35
|
items: Iterable<S1>,
|
|
36
|
-
pure: Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
36
|
+
pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
37
37
|
) {
|
|
38
38
|
return saveAllWithEffectInt(
|
|
39
39
|
runTerm(pure, [...items])
|
|
@@ -48,7 +48,7 @@ export const extendRepo = <
|
|
|
48
48
|
S2 extends T
|
|
49
49
|
>(
|
|
50
50
|
item: S1,
|
|
51
|
-
pure: Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
51
|
+
pure: Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
52
52
|
) {
|
|
53
53
|
return saveAllWithEffectInt(
|
|
54
54
|
runTerm(pure, item)
|
|
@@ -63,7 +63,7 @@ export const extendRepo = <
|
|
|
63
63
|
E,
|
|
64
64
|
A
|
|
65
65
|
>(
|
|
66
|
-
gen: Effect<readonly [Iterable<P>, Iterable<Evt>, A], E, R>
|
|
66
|
+
gen: Effect.Effect<readonly [Iterable<P>, Iterable<Evt>, A], E, R>
|
|
67
67
|
) {
|
|
68
68
|
return Effect.flatMap(gen, ([items, events, a]) => repo.saveAndPublish(items, events).pipe(Effect.map(() => a)))
|
|
69
69
|
}
|
|
@@ -76,7 +76,7 @@ export const extendRepo = <
|
|
|
76
76
|
S2 extends T
|
|
77
77
|
>(
|
|
78
78
|
items: Iterable<S1>,
|
|
79
|
-
pure: Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>,
|
|
79
|
+
pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>,
|
|
80
80
|
batchSize = 100
|
|
81
81
|
) {
|
|
82
82
|
return Effect.forEach(
|
|
@@ -93,7 +93,7 @@ export const extendRepo = <
|
|
|
93
93
|
q: (
|
|
94
94
|
q: Query<Encoded>
|
|
95
95
|
) => QueryEnd<Encoded, "one">,
|
|
96
|
-
pure: Effect<A, E2, FixEnv<R2, Evt, T, T2>>
|
|
96
|
+
pure: Effect.Effect<A, E2, FixEnv<R2, Evt, T, T2>>
|
|
97
97
|
): Effect.Effect<
|
|
98
98
|
A,
|
|
99
99
|
InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E2,
|
|
@@ -108,7 +108,7 @@ export const extendRepo = <
|
|
|
108
108
|
| Query<Encoded>
|
|
109
109
|
| QueryWhere<Encoded>
|
|
110
110
|
| QueryEnd<Encoded, "many">,
|
|
111
|
-
pure: Effect<A, E2, FixEnv<R2, Evt, readonly T[], readonly T2[]>>
|
|
111
|
+
pure: Effect.Effect<A, E2, FixEnv<R2, Evt, readonly T[], readonly T2[]>>
|
|
112
112
|
): Effect.Effect<
|
|
113
113
|
A,
|
|
114
114
|
InvalidStateError | OptimisticConcurrencyException | E2,
|
|
@@ -125,7 +125,7 @@ export const extendRepo = <
|
|
|
125
125
|
| Query<Encoded>
|
|
126
126
|
| QueryWhere<Encoded>
|
|
127
127
|
| QueryEnd<Encoded, "many">,
|
|
128
|
-
pure: Effect<A, E2, FixEnv<R2, Evt, readonly T[], readonly T2[]>>,
|
|
128
|
+
pure: Effect.Effect<A, E2, FixEnv<R2, Evt, readonly T[], readonly T2[]>>,
|
|
129
129
|
batch: "batched" | number
|
|
130
130
|
): Effect.Effect<
|
|
131
131
|
A[],
|
|
@@ -150,7 +150,7 @@ export const extendRepo = <
|
|
|
150
150
|
const saveManyWithPure: {
|
|
151
151
|
<R, A, E, S1 extends T, S2 extends T>(
|
|
152
152
|
items: Iterable<S1>,
|
|
153
|
-
pure: Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
153
|
+
pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
154
154
|
): Effect.Effect<
|
|
155
155
|
A,
|
|
156
156
|
InvalidStateError | OptimisticConcurrencyException | E,
|
|
@@ -162,7 +162,7 @@ export const extendRepo = <
|
|
|
162
162
|
>
|
|
163
163
|
<R, A, E, S1 extends T, S2 extends T>(
|
|
164
164
|
items: Iterable<S1>,
|
|
165
|
-
pure: Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>,
|
|
165
|
+
pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>,
|
|
166
166
|
batch: "batched" | number
|
|
167
167
|
): Effect.Effect<
|
|
168
168
|
A[],
|
|
@@ -189,8 +189,8 @@ export const extendRepo = <
|
|
|
189
189
|
const byIdAndSaveWithPure: {
|
|
190
190
|
<R, A, E, S2 extends T>(
|
|
191
191
|
id: T[IdKey],
|
|
192
|
-
pure: Effect<A, E, FixEnv<R, Evt, T, S2>>
|
|
193
|
-
): Effect<
|
|
192
|
+
pure: Effect.Effect<A, E, FixEnv<R, Evt, T, S2>>
|
|
193
|
+
): Effect.Effect<
|
|
194
194
|
A,
|
|
195
195
|
InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E,
|
|
196
196
|
| RSchema
|
|
@@ -210,7 +210,7 @@ export const extendRepo = <
|
|
|
210
210
|
.makeBatched((
|
|
211
211
|
requests: NonEmptyReadonlyArray<Req>
|
|
212
212
|
) =>
|
|
213
|
-
(repo.query(Q.where(repo.idKey as any, "in" as any, requests.map((_) => _.id)) as any) as Effect<
|
|
213
|
+
(repo.query(Q.where(repo.idKey as any, "in" as any, requests.map((_) => _.id)) as any) as Effect.Effect<
|
|
214
214
|
readonly T[],
|
|
215
215
|
never
|
|
216
216
|
>)
|
|
@@ -256,7 +256,7 @@ export const extendRepo = <
|
|
|
256
256
|
S2 extends T
|
|
257
257
|
>(
|
|
258
258
|
item: S1,
|
|
259
|
-
pure: Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
259
|
+
pure: Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
260
260
|
) =>
|
|
261
261
|
saveAllWithEffectInt(
|
|
262
262
|
runTerm(pure, item)
|
|
@@ -55,15 +55,15 @@ export function makeRepoInternal<
|
|
|
55
55
|
function make<RInitial = never, E = never, RPublish = never, RCtx = never>(
|
|
56
56
|
args: [Evt] extends [never] ? {
|
|
57
57
|
schemaContext?: Context.Context<RCtx>
|
|
58
|
-
makeInitial?: Effect<readonly T[], E, RInitial> | undefined
|
|
58
|
+
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
59
59
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
60
60
|
partitionValue?: (a: Encoded) => string
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
: {
|
|
64
64
|
schemaContext?: Context.Context<RCtx>
|
|
65
|
-
publishEvents: (evt: NonEmptyReadonlyArray<Evt>) => Effect<void, never, RPublish>
|
|
66
|
-
makeInitial?: Effect<readonly T[], E, RInitial> | undefined
|
|
65
|
+
publishEvents: (evt: NonEmptyReadonlyArray<Evt>) => Effect.Effect<void, never, RPublish>
|
|
66
|
+
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
67
67
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
68
68
|
partitionValue?: (a: Encoded) => string
|
|
69
69
|
}
|
|
@@ -71,7 +71,7 @@ export function makeRepoInternal<
|
|
|
71
71
|
) {
|
|
72
72
|
return Effect
|
|
73
73
|
.gen(function*() {
|
|
74
|
-
const rctx: Context<RCtx> = args.schemaContext ?? Context.empty() as any
|
|
74
|
+
const rctx: Context.Context<RCtx> = args.schemaContext ?? Context.empty() as any
|
|
75
75
|
const provideRctx = Effect.provide(rctx)
|
|
76
76
|
const encodeMany = flow(
|
|
77
77
|
S.encode(S.Array(schema)),
|
|
@@ -390,7 +390,7 @@ export function makeStore<Encoded extends FieldValues>() {
|
|
|
390
390
|
idKey: IdKey
|
|
391
391
|
) => {
|
|
392
392
|
function makeStore<RInitial = never, EInitial = never>(
|
|
393
|
-
makeInitial?: Effect<readonly T[], EInitial, RInitial> | undefined,
|
|
393
|
+
makeInitial?: Effect.Effect<readonly T[], EInitial, RInitial> | undefined,
|
|
394
394
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
395
395
|
partitionValue?: (a: Encoded) => string
|
|
396
396
|
}
|
|
@@ -452,35 +452,35 @@ export interface Repos<
|
|
|
452
452
|
> {
|
|
453
453
|
make<RInitial = never, E = never, R2 = never>(
|
|
454
454
|
args: [Evt] extends [never] ? {
|
|
455
|
-
makeInitial?: Effect<readonly T[], E, RInitial> | undefined
|
|
455
|
+
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
456
456
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
457
457
|
partitionValue?: (a: Encoded) => string
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
: {
|
|
461
|
-
publishEvents: (evt: NonEmptyReadonlyArray<Evt>) => Effect<void, never, R2>
|
|
462
|
-
makeInitial?: Effect<readonly T[], E, RInitial> | undefined
|
|
461
|
+
publishEvents: (evt: NonEmptyReadonlyArray<Evt>) => Effect.Effect<void, never, R2>
|
|
462
|
+
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
463
463
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
464
464
|
partitionValue?: (a: Encoded) => string
|
|
465
465
|
}
|
|
466
466
|
}
|
|
467
|
-
): Effect<Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>, E, StoreMaker | RInitial | R2>
|
|
467
|
+
): Effect.Effect<Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>, E, StoreMaker | RInitial | R2>
|
|
468
468
|
makeWith<Out, RInitial = never, E = never, R2 = never>(
|
|
469
469
|
args: [Evt] extends [never] ? {
|
|
470
|
-
makeInitial?: Effect<readonly T[], E, RInitial> | undefined
|
|
470
|
+
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
471
471
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
472
472
|
partitionValue?: (a: Encoded) => string
|
|
473
473
|
}
|
|
474
474
|
}
|
|
475
475
|
: {
|
|
476
|
-
publishEvents: (evt: NonEmptyReadonlyArray<Evt>) => Effect<void, never, R2>
|
|
477
|
-
makeInitial?: Effect<readonly T[], E, RInitial> | undefined
|
|
476
|
+
publishEvents: (evt: NonEmptyReadonlyArray<Evt>) => Effect.Effect<void, never, R2>
|
|
477
|
+
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
478
478
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
479
479
|
partitionValue?: (a: Encoded) => string
|
|
480
480
|
}
|
|
481
481
|
},
|
|
482
482
|
f: (r: Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>) => Out
|
|
483
|
-
): Effect<Out, E, StoreMaker | RInitial | R2>
|
|
483
|
+
): Effect.Effect<Out, E, StoreMaker | RInitial | R2>
|
|
484
484
|
readonly Q: ReturnType<typeof Q.make<Encoded>>
|
|
485
485
|
readonly type: Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>
|
|
486
486
|
}
|
|
@@ -4,14 +4,14 @@ import type { Effect, Option, ParseResult, S } from "effect-app"
|
|
|
4
4
|
import type { OptimisticConcurrencyException } from "effect-app/client/errors"
|
|
5
5
|
|
|
6
6
|
export interface Mapped1<A, IdKey extends keyof A, R> {
|
|
7
|
-
all: Effect<A[], ParseResult.ParseError, R>
|
|
8
|
-
save: (...xes: readonly A[]) => Effect<void, OptimisticConcurrencyException | ParseResult.ParseError, R>
|
|
9
|
-
find: (id: A[IdKey]) => Effect<Option<A>, ParseResult.ParseError, R>
|
|
7
|
+
all: Effect.Effect<A[], ParseResult.ParseError, R>
|
|
8
|
+
save: (...xes: readonly A[]) => Effect.Effect<void, OptimisticConcurrencyException | ParseResult.ParseError, R>
|
|
9
|
+
find: (id: A[IdKey]) => Effect.Effect<Option.Option<A>, ParseResult.ParseError, R>
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
// TODO: auto use project, and select fields from the From side of schema only
|
|
13
13
|
export interface Mapped2<A, R> {
|
|
14
|
-
all: Effect<A[], ParseResult.ParseError, R>
|
|
14
|
+
all: Effect.Effect<A[], ParseResult.ParseError, R>
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export interface Mapped<Encoded> {
|
|
@@ -21,7 +21,7 @@ export interface Mapped<Encoded> {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export interface MM<Repo, Encoded> {
|
|
24
|
-
<A, R, IdKey extends keyof A>(schema: S.Schema<A, Encoded, R>): Effect<Mapped1<A, IdKey, R>, never, Repo>
|
|
24
|
+
<A, R, IdKey extends keyof A>(schema: S.Schema<A, Encoded, R>): Effect.Effect<Mapped1<A, IdKey, R>, never, Repo>
|
|
25
25
|
// TODO: constrain on Encoded2 having to contain only fields that fit Encoded
|
|
26
|
-
<A, Encoded2, R>(schema: S.Schema<A, Encoded2, R>): Effect<Mapped2<A, R>, never, Repo>
|
|
26
|
+
<A, Encoded2, R>(schema: S.Schema<A, Encoded2, R>): Effect.Effect<Mapped2<A, R>, never, Repo>
|
|
27
27
|
}
|
|
@@ -43,11 +43,11 @@ export interface RepositoryOptions<
|
|
|
43
43
|
/**
|
|
44
44
|
* Optional handler to be able to publish events after successfull save.
|
|
45
45
|
*/
|
|
46
|
-
publishEvents?: (evt: NonEmptyReadonlyArray<Evt>) => Effect<void, never, RPublish>
|
|
46
|
+
publishEvents?: (evt: NonEmptyReadonlyArray<Evt>) => Effect.Effect<void, never, RPublish>
|
|
47
47
|
/**
|
|
48
48
|
* Optional creator for initial data in the table when it's created for the first itme.
|
|
49
49
|
*/
|
|
50
|
-
makeInitial?: Effect<readonly T[], E, RInitial> | undefined
|
|
50
|
+
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
51
51
|
/**
|
|
52
52
|
* Optional context to be provided to Schema decode/encode.
|
|
53
53
|
* Useful for effectful transformations like XWithItems, where items is a transformation retrieving elements from another database table or other source.
|
|
@@ -17,22 +17,22 @@ export interface Repository<
|
|
|
17
17
|
> {
|
|
18
18
|
readonly itemType: ItemType
|
|
19
19
|
readonly idKey: IdKey
|
|
20
|
-
readonly find: (id: T[IdKey]) => Effect<Option<T>, never, RSchema>
|
|
21
|
-
readonly all: Effect<T[], never, RSchema>
|
|
20
|
+
readonly find: (id: T[IdKey]) => Effect.Effect<Option.Option<T>, never, RSchema>
|
|
21
|
+
readonly all: Effect.Effect<T[], never, RSchema>
|
|
22
22
|
readonly saveAndPublish: (
|
|
23
23
|
items: Iterable<T>,
|
|
24
24
|
events?: Iterable<Evt>
|
|
25
|
-
) => Effect<void, InvalidStateError | OptimisticConcurrencyException, RSchema | RPublish>
|
|
25
|
+
) => Effect.Effect<void, InvalidStateError | OptimisticConcurrencyException, RSchema | RPublish>
|
|
26
26
|
readonly changeFeed: PubSub.PubSub<[T[], "save" | "remove"]>
|
|
27
27
|
readonly removeAndPublish: (
|
|
28
28
|
items: Iterable<T>,
|
|
29
29
|
events?: Iterable<Evt>
|
|
30
|
-
) => Effect<void, never, RSchema | RPublish>
|
|
30
|
+
) => Effect.Effect<void, never, RSchema | RPublish>
|
|
31
31
|
|
|
32
32
|
readonly queryRaw: <T, Out, R>(
|
|
33
33
|
schema: S.Schema<T, Out, R>,
|
|
34
34
|
raw: RawQuery<Encoded, Out>
|
|
35
|
-
) => Effect<readonly T[], S.ParseResult.ParseError, R>
|
|
35
|
+
) => Effect.Effect<readonly T[], S.ParseResult.ParseError, R>
|
|
36
36
|
|
|
37
37
|
readonly query: {
|
|
38
38
|
// ending with projection
|
package/src/Model/dsl.ts
CHANGED
|
@@ -19,20 +19,20 @@ const anyDSL = makeDSL<any, any, any>()
|
|
|
19
19
|
|
|
20
20
|
export type AllDSL<T, Evt> =
|
|
21
21
|
& (<R, A, E, S1 extends T, S2 extends T>(
|
|
22
|
-
pure: (dsl: PureDSL<S1[], S2[], Evt>) => Effect<A, E, R>
|
|
23
|
-
) => Effect<A, E, FixEnv<R, Evt, S1[], S2[]>>)
|
|
22
|
+
pure: (dsl: PureDSL<S1[], S2[], Evt>) => Effect.Effect<A, E, R>
|
|
23
|
+
) => Effect.Effect<A, E, FixEnv<R, Evt, S1[], S2[]>>)
|
|
24
24
|
& AllDSLExt<T, Evt>
|
|
25
25
|
|
|
26
26
|
export interface AllDSLExt<T, Evt> {
|
|
27
27
|
modify: <R, E, A, S1 extends T, S2 extends T>(
|
|
28
|
-
pure: (items: readonly S1[], dsl: PureDSL<readonly S1[], readonly S2[], Evt>) => Effect<A, E, R>
|
|
29
|
-
) => Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
28
|
+
pure: (items: readonly S1[], dsl: PureDSL<readonly S1[], readonly S2[], Evt>) => Effect.Effect<A, E, R>
|
|
29
|
+
) => Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
30
30
|
update: <R, E, S1 extends T, S2 extends T>(
|
|
31
|
-
pure: (items: readonly S1[], log: (...evt: Evt[]) => PureLogT<Evt>) => Effect<readonly S2[], E, R>
|
|
32
|
-
) => Effect<readonly S2[], E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
31
|
+
pure: (items: readonly S1[], log: (...evt: Evt[]) => PureLogT<Evt>) => Effect.Effect<readonly S2[], E, R>
|
|
32
|
+
) => Effect.Effect<readonly S2[], E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
|
|
33
33
|
updateWith: <S1 extends T, S2 extends T>(
|
|
34
34
|
upd: (item: readonly S1[]) => readonly S2[]
|
|
35
|
-
) => Effect<readonly S2[], never, PureEnvEnv<Evt, readonly S1[], readonly S2[]>>
|
|
35
|
+
) => Effect.Effect<readonly S2[], never, PureEnvEnv<Evt, readonly S1[], readonly S2[]>>
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export function makeAllDSL<T, Evt>() {
|
|
@@ -42,20 +42,20 @@ export function makeAllDSL<T, Evt>() {
|
|
|
42
42
|
|
|
43
43
|
export type OneDSL<T, Evt> =
|
|
44
44
|
& (<R, A, E, S1 extends T, S2 extends T>(
|
|
45
|
-
pure: (dsl: PureDSL<S1, S2, Evt>) => Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
46
|
-
) => Effect<A, E, FixEnv<R, Evt, S1, S2>>)
|
|
45
|
+
pure: (dsl: PureDSL<S1, S2, Evt>) => Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
46
|
+
) => Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>>)
|
|
47
47
|
& OneDSLExt<T, Evt>
|
|
48
48
|
|
|
49
49
|
export interface OneDSLExt<T, Evt> {
|
|
50
50
|
modify: <R, E, A, S1 extends T, S2 extends T>(
|
|
51
|
-
pure: (items: S1, dsl: PureDSL<S1, S2, Evt>) => Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
52
|
-
) => Effect<A, E, FixEnv<R, Evt, S1, S2> | PureEnvEnv<Evt, S1, S1>>
|
|
51
|
+
pure: (items: S1, dsl: PureDSL<S1, S2, Evt>) => Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>>
|
|
52
|
+
) => Effect.Effect<A, E, FixEnv<R, Evt, S1, S2> | PureEnvEnv<Evt, S1, S1>>
|
|
53
53
|
update: <R, E, S1 extends T, S2 extends T>(
|
|
54
|
-
pure: (items: S1, log: (...evt: Evt[]) => PureLogT<Evt>) => Effect<S2, E, FixEnv<R, Evt, S1, S2>>
|
|
55
|
-
) => Effect<S2, E, FixEnv<R, Evt, S1, S2>>
|
|
54
|
+
pure: (items: S1, log: (...evt: Evt[]) => PureLogT<Evt>) => Effect.Effect<S2, E, FixEnv<R, Evt, S1, S2>>
|
|
55
|
+
) => Effect.Effect<S2, E, FixEnv<R, Evt, S1, S2>>
|
|
56
56
|
updateWith: <S1 extends T, S2 extends T>(
|
|
57
57
|
upd: (item: S1) => S2
|
|
58
|
-
) => Effect<S2, never, PureEnvEnv<Evt, S1, S2>>
|
|
58
|
+
) => Effect.Effect<S2, never, PureEnvEnv<Evt, S1, S2>>
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
export function makeOneDSL<T, Evt>(): OneDSL<T, Evt> {
|
|
@@ -73,8 +73,8 @@ export function makeDSL<S1, S2, Evt>() {
|
|
|
73
73
|
pure: (
|
|
74
74
|
items: S1,
|
|
75
75
|
dsl: PureDSL<S1, S2, Evt>
|
|
76
|
-
) => Effect<A, E, R>
|
|
77
|
-
): Effect<A, E, FixEnv<R, Evt, S1, S2>> {
|
|
76
|
+
) => Effect.Effect<A, E, R>
|
|
77
|
+
): Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>> {
|
|
78
78
|
return dsl.get.pipe(Effect.flatMap((items) => pure(items, dsl))) as any
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -85,8 +85,8 @@ export function makeDSL<S1, S2, Evt>() {
|
|
|
85
85
|
pure: (
|
|
86
86
|
items: S1,
|
|
87
87
|
log: (...evt: Evt[]) => PureLogT<Evt>
|
|
88
|
-
) => Effect<S2, E, R>
|
|
89
|
-
): Effect<S2, E, FixEnv<R, Evt, S1, S2>> {
|
|
88
|
+
) => Effect.Effect<S2, E, R>
|
|
89
|
+
): Effect.Effect<S2, E, FixEnv<R, Evt, S1, S2>> {
|
|
90
90
|
return dsl.get.pipe(Effect.flatMap((items) => pure(items, dsl.log).pipe(Effect.tap(dsl.set)))) as any
|
|
91
91
|
}
|
|
92
92
|
|
|
@@ -95,8 +95,8 @@ export function makeDSL<S1, S2, Evt>() {
|
|
|
95
95
|
A,
|
|
96
96
|
E
|
|
97
97
|
>(
|
|
98
|
-
pure: (dsl: PureDSL<S1, S2, Evt>) => Effect<A, E, R>
|
|
99
|
-
): Effect<A, E, FixEnv<R, Evt, S1, S2>> {
|
|
98
|
+
pure: (dsl: PureDSL<S1, S2, Evt>) => Effect.Effect<A, E, R>
|
|
99
|
+
): Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>> {
|
|
100
100
|
return pure(AnyPureDSL) as any
|
|
101
101
|
}
|
|
102
102
|
|
|
@@ -116,10 +116,13 @@ export function makeDSL<S1, S2, Evt>() {
|
|
|
116
116
|
|
|
117
117
|
export interface DSLExt<S1, S2, Evt> extends ReturnType<typeof makeDSL<S1, S2, Evt>> {}
|
|
118
118
|
|
|
119
|
-
export function ifAny<T, R, E, A>(fn: (items: NonEmptyReadonlyArray<T>) => Effect<A, E, R>) {
|
|
119
|
+
export function ifAny<T, R, E, A>(fn: (items: NonEmptyReadonlyArray<T>) => Effect.Effect<A, E, R>) {
|
|
120
120
|
return (items: Iterable<T>) => Effect.flatMapOption(Effect.sync(() => toNonEmptyArray([...items])), fn)
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
export function ifAny_<T, R, E, A>(
|
|
123
|
+
export function ifAny_<T, R, E, A>(
|
|
124
|
+
items: Iterable<T>,
|
|
125
|
+
fn: (items: NonEmptyReadonlyArray<T>) => Effect.Effect<A, E, R>
|
|
126
|
+
) {
|
|
124
127
|
return Effect.flatMapOption(Effect.sync(() => toNonEmptyArray([...items])), fn)
|
|
125
128
|
}
|
package/src/Model/query/dsl.ts
CHANGED
package/src/Operations.ts
CHANGED
|
@@ -42,7 +42,7 @@ const make = Effect.gen(function*() {
|
|
|
42
42
|
function findOp(id: OperationId) {
|
|
43
43
|
return repo.find(id)
|
|
44
44
|
}
|
|
45
|
-
function finishOp(id: OperationId, exit: Exit<unknown, unknown>) {
|
|
45
|
+
function finishOp(id: OperationId, exit: Exit.Exit<unknown, unknown>) {
|
|
46
46
|
return Effect
|
|
47
47
|
.flatMap(repo.get(id).pipe(Effect.orDie), (_) =>
|
|
48
48
|
repo
|
|
@@ -79,10 +79,10 @@ const make = Effect.gen(function*() {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
function fork<R, R2, E, E2, A, A2>(
|
|
82
|
-
self: (id: OperationId) => Effect<A, E, R>,
|
|
83
|
-
fnc: (id: OperationId) => Effect<A2, E2, R2>,
|
|
82
|
+
self: (id: OperationId) => Effect.Effect<A, E, R>,
|
|
83
|
+
fnc: (id: OperationId) => Effect.Effect<A2, E2, R2>,
|
|
84
84
|
title: NonEmptyString2k
|
|
85
|
-
): Effect<
|
|
85
|
+
): Effect.Effect<
|
|
86
86
|
RunningOperation<A, E>,
|
|
87
87
|
never,
|
|
88
88
|
Exclude<R, Scope.Scope> | Exclude<R2, Scope.Scope>
|
|
@@ -114,15 +114,15 @@ const make = Effect.gen(function*() {
|
|
|
114
114
|
|
|
115
115
|
const fork2: {
|
|
116
116
|
(title: NonEmptyString2k): <R, E, A>(
|
|
117
|
-
self: (opId: OperationId) => Effect<A, E, R>
|
|
118
|
-
) => Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
117
|
+
self: (opId: OperationId) => Effect.Effect<A, E, R>
|
|
118
|
+
) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
119
119
|
<R, E, A>(
|
|
120
|
-
self: (opId: OperationId) => Effect<A, E, R>,
|
|
120
|
+
self: (opId: OperationId) => Effect.Effect<A, E, R>,
|
|
121
121
|
title: NonEmptyString2k
|
|
122
|
-
): Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
122
|
+
): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
123
123
|
} = dual(
|
|
124
124
|
2,
|
|
125
|
-
<R, E, A>(self: (opId: OperationId) => Effect<A, E, R>, title: NonEmptyString2k) =>
|
|
125
|
+
<R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>, title: NonEmptyString2k) =>
|
|
126
126
|
Effect.flatMap(
|
|
127
127
|
Scope.make(),
|
|
128
128
|
(scope) =>
|
|
@@ -144,15 +144,15 @@ const make = Effect.gen(function*() {
|
|
|
144
144
|
|
|
145
145
|
const forkOperation: {
|
|
146
146
|
(title: NonEmptyString2k): <R, E, A>(
|
|
147
|
-
self: Effect<A, E, R>
|
|
148
|
-
) => Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
147
|
+
self: Effect.Effect<A, E, R>
|
|
148
|
+
) => Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
149
149
|
<R, E, A>(
|
|
150
|
-
self: Effect<A, E, R>,
|
|
150
|
+
self: Effect.Effect<A, E, R>,
|
|
151
151
|
title: NonEmptyString2k
|
|
152
|
-
): Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
152
|
+
): Effect.Effect<RunningOperation<A, E>, never, Exclude<R, Scope.Scope>>
|
|
153
153
|
} = dual(
|
|
154
154
|
2,
|
|
155
|
-
<R, E, A>(self: Effect<A, E, R>, title: NonEmptyString2k) =>
|
|
155
|
+
<R, E, A>(self: Effect.Effect<A, E, R>, title: NonEmptyString2k) =>
|
|
156
156
|
Effect.flatMap(
|
|
157
157
|
Scope.make(),
|
|
158
158
|
(scope) =>
|
|
@@ -172,7 +172,7 @@ const make = Effect.gen(function*() {
|
|
|
172
172
|
)
|
|
173
173
|
)
|
|
174
174
|
|
|
175
|
-
function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect<A, E, R>, title: NonEmptyString2k) {
|
|
175
|
+
function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect.Effect<A, E, R>, title: NonEmptyString2k) {
|
|
176
176
|
return (inp: Inp) => fnc(inp).pipe((_) => forkOperation(_, title))
|
|
177
177
|
}
|
|
178
178
|
|
|
@@ -211,18 +211,18 @@ export class Operations extends Context.TagMakeId("effect-app/Operations", make)
|
|
|
211
211
|
|
|
212
212
|
static readonly Live = this.CleanupLive.pipe(Layer.provideMerge(this.toLayer()), Layer.provide(RequestFiberSet.Live))
|
|
213
213
|
|
|
214
|
-
static readonly forkOperation = (title: NonEmptyString2k) => <R, E, A>(self: Effect<A, E, R>) =>
|
|
214
|
+
static readonly forkOperation = (title: NonEmptyString2k) => <R, E, A>(self: Effect.Effect<A, E, R>) =>
|
|
215
215
|
this.use((_) => _.forkOperation(self, title))
|
|
216
216
|
static readonly forkOperationFunction =
|
|
217
|
-
<R, E, A, Inp>(fnc: (inp: Inp) => Effect<A, E, R>, title: NonEmptyString2k) => (inp: Inp) =>
|
|
217
|
+
<R, E, A, Inp>(fnc: (inp: Inp) => Effect.Effect<A, E, R>, title: NonEmptyString2k) => (inp: Inp) =>
|
|
218
218
|
this.use((_) => _.forkOperationFunction(fnc, title)(inp))
|
|
219
219
|
static readonly fork = <R, R2, E, E2, A, A2>(
|
|
220
|
-
self: (id: OperationId) => Effect<A, E, R>,
|
|
221
|
-
fnc: (id: OperationId) => Effect<A2, E2, R2>,
|
|
220
|
+
self: (id: OperationId) => Effect.Effect<A, E, R>,
|
|
221
|
+
fnc: (id: OperationId) => Effect.Effect<A2, E2, R2>,
|
|
222
222
|
title: NonEmptyString2k
|
|
223
223
|
) => this.use((_) => _.fork(self, fnc, title))
|
|
224
224
|
|
|
225
|
-
static readonly fork2 = (title: NonEmptyString2k) => <R, E, A>(self: (opId: OperationId) => Effect<A, E, R>) =>
|
|
225
|
+
static readonly fork2 = (title: NonEmptyString2k) => <R, E, A>(self: (opId: OperationId) => Effect.Effect<A, E, R>) =>
|
|
226
226
|
this.use((_) => _.fork2(self, title))
|
|
227
227
|
}
|
|
228
228
|
|
|
@@ -128,7 +128,7 @@ export function makeSQLQueue<
|
|
|
128
128
|
})
|
|
129
129
|
),
|
|
130
130
|
drain: <DrainE, DrainR>(
|
|
131
|
-
handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>,
|
|
131
|
+
handleEvent: (ks: DrainEvt) => Effect.Effect<void, DrainE, DrainR>,
|
|
132
132
|
sessionId?: string
|
|
133
133
|
) =>
|
|
134
134
|
Effect.gen(function*() {
|
package/src/QueueMaker/errors.ts
CHANGED
|
@@ -3,12 +3,12 @@ import { Cause, Effect, Exit } from "effect-app"
|
|
|
3
3
|
|
|
4
4
|
const reportQueueError_ = reportError("Queue")
|
|
5
5
|
|
|
6
|
-
export const reportQueueError = <E>(cause: Cause<E>, extras?: Record<string, unknown>) =>
|
|
6
|
+
export const reportQueueError = <E>(cause: Cause.Cause<E>, extras?: Record<string, unknown>) =>
|
|
7
7
|
reportQueueError_(cause, extras)
|
|
8
8
|
|
|
9
9
|
export function reportNonInterruptedFailure(context?: Record<string, unknown>) {
|
|
10
10
|
const report = reportNonInterruptedFailureCause(context)
|
|
11
|
-
return <A, E, R>(inp: Effect<A, E, R>): Effect<Exit<A, E>, never, R> =>
|
|
11
|
+
return <A, E, R>(inp: Effect.Effect<A, E, R>): Effect.Effect<Exit.Exit<A, E>, never, R> =>
|
|
12
12
|
inp.pipe(
|
|
13
13
|
Effect.onExit(
|
|
14
14
|
Exit.match({
|
|
@@ -21,9 +21,9 @@ export function reportNonInterruptedFailure(context?: Record<string, unknown>) {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export function reportNonInterruptedFailureCause(context?: Record<string, unknown>) {
|
|
24
|
-
return <E>(cause: Cause<E>): Effect<void> => {
|
|
24
|
+
return <E>(cause: Cause.Cause<E>): Effect.Effect<void> => {
|
|
25
25
|
if (Cause.isInterruptedOnly(cause)) {
|
|
26
|
-
return Effect.failCause(cause as Cause<never>)
|
|
26
|
+
return Effect.failCause(cause as Cause.Cause<never>)
|
|
27
27
|
}
|
|
28
28
|
return reportQueueError(cause, context)
|
|
29
29
|
}
|
|
@@ -51,7 +51,7 @@ export function makeMemQueue<
|
|
|
51
51
|
})
|
|
52
52
|
),
|
|
53
53
|
drain: <DrainE, DrainR>(
|
|
54
|
-
handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>,
|
|
54
|
+
handleEvent: (ks: DrainEvt) => Effect.Effect<void, DrainE, DrainR>,
|
|
55
55
|
sessionId?: string
|
|
56
56
|
) =>
|
|
57
57
|
Effect.gen(function*() {
|
|
@@ -3,12 +3,12 @@ import { RequestContext } from "../RequestContext.js"
|
|
|
3
3
|
|
|
4
4
|
export interface QueueBase<Evt, DrainEvt> {
|
|
5
5
|
drain: <DrainE, DrainR>(
|
|
6
|
-
makeHandleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>,
|
|
6
|
+
makeHandleEvent: (ks: DrainEvt) => Effect.Effect<void, DrainE, DrainR>,
|
|
7
7
|
sessionId?: string
|
|
8
|
-
) => Effect<never, never, Scope | DrainR>
|
|
8
|
+
) => Effect.Effect<never, never, Scope.Scope | DrainR>
|
|
9
9
|
publish: (
|
|
10
10
|
...messages: NonEmptyReadonlyArray<Evt>
|
|
11
|
-
) => Effect<void>
|
|
11
|
+
) => Effect.Effect<void>
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export interface QueueMakerOps {}
|