@effect-app/infra 0.118.0 → 0.120.0
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/services/Emailer/Sendgrid.cjs +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +4 -38
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +39 -36
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos/query.cjs +291 -0
- package/_cjs/services/Store/Cosmos/query.cjs.map +1 -0
- package/_cjs/services/Store/Cosmos.cjs +38 -183
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.test.cjs +7 -7
- package/_cjs/services/Store/Cosmos.test.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +1 -1
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +20 -17
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +2 -2
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.cjs +151 -0
- package/_cjs/services/Store/codeFilter.cjs.map +1 -0
- package/_cjs/services/Store/filterApi/proxy.cjs +40 -0
- package/_cjs/services/Store/filterApi/proxy.cjs.map +1 -0
- package/_cjs/services/Store/filterApi/query.cjs +173 -0
- package/_cjs/services/Store/filterApi/query.cjs.map +1 -0
- package/_cjs/services/Store/filterApi.test.cjs +164 -0
- package/_cjs/services/Store/filterApi.test.cjs.map +1 -0
- package/_cjs/services/Store/index.cjs +1 -1
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +8 -1
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_src/services/Emailer/Sendgrid.ts +0 -1
- package/_src/services/Repository.ts +124 -70
- package/_src/services/RepositoryBase.ts +26 -12
- package/_src/services/Store/Cosmos/query.ts +390 -0
- package/_src/services/Store/Cosmos.test.ts +5 -5
- package/_src/services/Store/Cosmos.ts +39 -245
- package/_src/services/Store/Disk.ts +0 -1
- package/_src/services/Store/Memory.ts +21 -18
- package/_src/services/Store/Redis.ts +3 -4
- package/_src/services/Store/codeFilter.ts +150 -0
- package/_src/services/Store/filterApi/proxy.ts +109 -0
- package/_src/services/Store/filterApi/query.ts +256 -0
- package/_src/services/Store/filterApi.test.ts +263 -0
- package/_src/services/Store/index.ts +0 -1
- package/_src/services/Store/service.ts +17 -5
- package/_src/services/Store/utils.ts +10 -7
- package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/services/Emailer/Sendgrid.js +2 -2
- package/dist/services/Repository.d.ts +44 -104
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +6 -30
- package/dist/services/RepositoryBase.d.ts +11 -21
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +41 -37
- package/dist/services/Store/Cosmos/query.d.ts +61 -0
- package/dist/services/Store/Cosmos/query.d.ts.map +1 -0
- package/dist/services/Store/Cosmos/query.js +302 -0
- package/dist/services/Store/Cosmos.d.ts +3 -47
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +39 -193
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +2 -2
- package/dist/services/Store/Memory.d.ts +2 -7
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +17 -15
- package/dist/services/Store/Redis.d.ts.map +1 -1
- package/dist/services/Store/Redis.js +3 -3
- package/dist/services/Store/codeFilter.d.ts +5 -0
- package/dist/services/Store/codeFilter.d.ts.map +1 -0
- package/dist/services/Store/codeFilter.js +140 -0
- package/dist/services/Store/filterApi/proxy.d.ts +41 -0
- package/dist/services/Store/filterApi/proxy.d.ts.map +1 -0
- package/dist/services/Store/filterApi/proxy.js +41 -0
- package/dist/services/Store/filterApi/query.d.ts +64 -0
- package/dist/services/Store/filterApi/query.d.ts.map +1 -0
- package/dist/services/Store/filterApi/query.js +134 -0
- package/dist/services/Store/filterApi.test.d.ts.map +1 -0
- package/dist/services/Store/index.d.ts.map +1 -1
- package/dist/services/Store/index.js +2 -2
- package/dist/services/Store/service.d.ts +12 -5
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/service.js +1 -1
- package/dist/services/Store/utils.d.ts +7 -1
- package/dist/services/Store/utils.d.ts.map +1 -1
- package/dist/services/Store/utils.js +118 -115
- package/package.json +48 -8
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import type { FixEnv, PureLogT } from "@effect-app/prelude/Pure"
|
|
5
5
|
import { Pure } from "@effect-app/prelude/Pure"
|
|
6
6
|
import { NotFoundError } from "../errors.js"
|
|
7
|
-
import type { Filter } from "../services/Store.js"
|
|
7
|
+
import type { Filter, PersistenceModelType } from "../services/Store.js"
|
|
8
8
|
import type { RepositoryBaseC } from "./RepositoryBase.js"
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -12,7 +12,7 @@ import type { RepositoryBaseC } from "./RepositoryBase.js"
|
|
|
12
12
|
*/
|
|
13
13
|
export interface Repository<
|
|
14
14
|
T extends { id: string },
|
|
15
|
-
PM extends
|
|
15
|
+
PM extends PersistenceModelType<string>,
|
|
16
16
|
Evt,
|
|
17
17
|
ItemType extends string
|
|
18
18
|
> extends RepositoryBaseC<T, PM, Evt, ItemType> {}
|
|
@@ -34,7 +34,7 @@ export const AnyPureDSL: PureDSL<any, any, any> = {
|
|
|
34
34
|
*/
|
|
35
35
|
export function get<
|
|
36
36
|
T extends { id: string },
|
|
37
|
-
PM extends
|
|
37
|
+
PM extends PersistenceModelType<string>,
|
|
38
38
|
Evt,
|
|
39
39
|
ItemType extends string
|
|
40
40
|
>(
|
|
@@ -44,50 +44,12 @@ export function get<
|
|
|
44
44
|
return self.find(id).flatMap((_) => _.encaseInEffect(() => new NotFoundError({ type: self.itemType, id })))
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* @tsplus fluent Repository filter
|
|
49
|
-
*/
|
|
50
|
-
export function filter<
|
|
51
|
-
T extends { id: string },
|
|
52
|
-
PM extends { id: string },
|
|
53
|
-
Evt,
|
|
54
|
-
ItemType extends string
|
|
55
|
-
>(self: RepositoryBaseC<T, PM, Evt, ItemType>, filter: Predicate<T>) {
|
|
56
|
-
return self.all.map((_) => _.filter(filter))
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* @tsplus fluent Repository filterAll
|
|
61
|
-
*/
|
|
62
|
-
export function filterAll<
|
|
63
|
-
T extends { id: string },
|
|
64
|
-
PM extends { id: string },
|
|
65
|
-
Evt,
|
|
66
|
-
ItemType extends string,
|
|
67
|
-
S extends T
|
|
68
|
-
>(self: RepositoryBaseC<T, PM, Evt, ItemType>, map: (items: T[]) => S[]) {
|
|
69
|
-
return self.all.map(map)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* @tsplus fluent Repository collect
|
|
74
|
-
*/
|
|
75
|
-
export function collect<
|
|
76
|
-
T extends { id: string },
|
|
77
|
-
PM extends { id: string },
|
|
78
|
-
Evt,
|
|
79
|
-
ItemType extends string,
|
|
80
|
-
S extends T
|
|
81
|
-
>(self: RepositoryBaseC<T, PM, Evt, ItemType>, collect: (item: T) => Option<S>) {
|
|
82
|
-
return self.all.map((_) => _.filterMap(collect))
|
|
83
|
-
}
|
|
84
|
-
|
|
85
47
|
/**
|
|
86
48
|
* @tsplus getter Repository log
|
|
87
49
|
*/
|
|
88
50
|
export function log<
|
|
89
51
|
T extends { id: string },
|
|
90
|
-
PM extends
|
|
52
|
+
PM extends PersistenceModelType<string>,
|
|
91
53
|
Evt,
|
|
92
54
|
ItemType extends string
|
|
93
55
|
>(_: RepositoryBaseC<T, PM, Evt, ItemType>) {
|
|
@@ -100,7 +62,7 @@ export function log<
|
|
|
100
62
|
*/
|
|
101
63
|
export function projectEffect<
|
|
102
64
|
T extends { id: string },
|
|
103
|
-
PM extends
|
|
65
|
+
PM extends PersistenceModelType<string>,
|
|
104
66
|
Evt,
|
|
105
67
|
ItemType extends string,
|
|
106
68
|
R,
|
|
@@ -108,11 +70,66 @@ export function projectEffect<
|
|
|
108
70
|
S = PM
|
|
109
71
|
>(
|
|
110
72
|
self: RepositoryBaseC<T, PM, Evt, ItemType>,
|
|
111
|
-
map: Effect<
|
|
112
|
-
|
|
73
|
+
map: Effect<
|
|
74
|
+
R,
|
|
75
|
+
E,
|
|
76
|
+
{
|
|
77
|
+
filter?: Filter<PM>
|
|
78
|
+
collect?: (t: PM) => Option<S>
|
|
79
|
+
limit?: number
|
|
80
|
+
skip?: number
|
|
81
|
+
}
|
|
82
|
+
>
|
|
83
|
+
): Effect<R, E, S[]>
|
|
84
|
+
export function projectEffect<
|
|
85
|
+
T extends { id: string },
|
|
86
|
+
PM extends PersistenceModelType<string>,
|
|
87
|
+
Evt,
|
|
88
|
+
ItemType extends string,
|
|
89
|
+
R,
|
|
90
|
+
E,
|
|
91
|
+
U extends keyof PM
|
|
92
|
+
>(
|
|
93
|
+
self: RepositoryBaseC<T, PM, Evt, ItemType>,
|
|
94
|
+
map: Effect<
|
|
95
|
+
R,
|
|
96
|
+
E,
|
|
97
|
+
{
|
|
98
|
+
filter?: Filter<PM>
|
|
99
|
+
select: readonly U[]
|
|
100
|
+
limit?: number
|
|
101
|
+
skip?: number
|
|
102
|
+
}
|
|
103
|
+
>
|
|
104
|
+
): Effect<R, E, Pick<PM, U>[]>
|
|
105
|
+
export function projectEffect<
|
|
106
|
+
T extends { id: string },
|
|
107
|
+
PM extends PersistenceModelType<string>,
|
|
108
|
+
Evt,
|
|
109
|
+
ItemType extends string,
|
|
110
|
+
R,
|
|
111
|
+
E,
|
|
112
|
+
U extends keyof PM,
|
|
113
|
+
S = Pick<PM, U>
|
|
114
|
+
>(
|
|
115
|
+
self: RepositoryBaseC<T, PM, Evt, ItemType>,
|
|
116
|
+
map: Effect<
|
|
117
|
+
R,
|
|
118
|
+
E,
|
|
119
|
+
{
|
|
120
|
+
filter?: Filter<PM>
|
|
121
|
+
select?: readonly U[]
|
|
122
|
+
collect?: (t: Pick<PM, U>) => Option<S>
|
|
123
|
+
limit?: number
|
|
124
|
+
skip?: number
|
|
125
|
+
}
|
|
126
|
+
>
|
|
127
|
+
): Effect<R, E, S[]> {
|
|
113
128
|
// TODO: a projection that gets sent to the db instead.
|
|
114
129
|
return map.flatMap((f) =>
|
|
115
|
-
|
|
130
|
+
self
|
|
131
|
+
.utils
|
|
132
|
+
.filter(f)
|
|
116
133
|
.map((_) => f.collect ? _.filterMap(f.collect) : _ as unknown as S[])
|
|
117
134
|
)
|
|
118
135
|
}
|
|
@@ -123,14 +140,51 @@ export function projectEffect<
|
|
|
123
140
|
*/
|
|
124
141
|
export function project<
|
|
125
142
|
T extends { id: string },
|
|
126
|
-
PM extends
|
|
143
|
+
PM extends PersistenceModelType<string>,
|
|
127
144
|
Evt,
|
|
128
145
|
ItemType extends string,
|
|
129
146
|
S = PM
|
|
130
147
|
>(
|
|
131
148
|
self: RepositoryBaseC<T, PM, Evt, ItemType>,
|
|
132
|
-
map: {
|
|
133
|
-
|
|
149
|
+
map: {
|
|
150
|
+
filter?: Filter<PM>
|
|
151
|
+
collect?: (t: PM) => Option<S>
|
|
152
|
+
limit?: number
|
|
153
|
+
skip?: number
|
|
154
|
+
}
|
|
155
|
+
): Effect<never, never, S[]>
|
|
156
|
+
export function project<
|
|
157
|
+
T extends { id: string },
|
|
158
|
+
PM extends PersistenceModelType<string>,
|
|
159
|
+
Evt,
|
|
160
|
+
ItemType extends string,
|
|
161
|
+
U extends keyof PM
|
|
162
|
+
>(
|
|
163
|
+
self: RepositoryBaseC<T, PM, Evt, ItemType>,
|
|
164
|
+
map: {
|
|
165
|
+
filter?: Filter<PM>
|
|
166
|
+
select: readonly U[]
|
|
167
|
+
limit?: number
|
|
168
|
+
skip?: number
|
|
169
|
+
}
|
|
170
|
+
): Effect<never, never, Pick<PM, U>[]>
|
|
171
|
+
export function project<
|
|
172
|
+
T extends { id: string },
|
|
173
|
+
PM extends PersistenceModelType<string>,
|
|
174
|
+
Evt,
|
|
175
|
+
ItemType extends string,
|
|
176
|
+
U extends keyof PM,
|
|
177
|
+
S = Pick<PM, U>
|
|
178
|
+
>(
|
|
179
|
+
self: RepositoryBaseC<T, PM, Evt, ItemType>,
|
|
180
|
+
map: {
|
|
181
|
+
filter?: Filter<PM>
|
|
182
|
+
select?: readonly U[]
|
|
183
|
+
collect?: (t: Pick<PM, U>) => Option<S>
|
|
184
|
+
limit?: number
|
|
185
|
+
skip?: number
|
|
186
|
+
}
|
|
187
|
+
): Effect<never, never, S[]> {
|
|
134
188
|
return self.projectEffect(Effect(map))
|
|
135
189
|
}
|
|
136
190
|
|
|
@@ -140,7 +194,7 @@ export function project<
|
|
|
140
194
|
*/
|
|
141
195
|
export function count<
|
|
142
196
|
T extends { id: string },
|
|
143
|
-
PM extends
|
|
197
|
+
PM extends PersistenceModelType<string>,
|
|
144
198
|
Evt,
|
|
145
199
|
ItemType extends string
|
|
146
200
|
>(
|
|
@@ -157,7 +211,7 @@ export function count<
|
|
|
157
211
|
*/
|
|
158
212
|
export function queryEffect<
|
|
159
213
|
T extends { id: string },
|
|
160
|
-
PM extends
|
|
214
|
+
PM extends PersistenceModelType<string>,
|
|
161
215
|
Evt,
|
|
162
216
|
ItemType extends string,
|
|
163
217
|
R,
|
|
@@ -169,7 +223,7 @@ export function queryEffect<
|
|
|
169
223
|
map: Effect<R, E, { filter?: Filter<PM>; collect?: (t: T) => Option<S>; limit?: number; skip?: number }>
|
|
170
224
|
) {
|
|
171
225
|
return map.flatMap((f) =>
|
|
172
|
-
(f.filter ? self.utils.filter(f
|
|
226
|
+
(f.filter ? self.utils.filter(f) : self.utils.all)
|
|
173
227
|
.flatMap((_) => self.utils.parseMany(_))
|
|
174
228
|
.map((_) => f.collect ? _.filterMap(f.collect) : _ as any as S[])
|
|
175
229
|
)
|
|
@@ -180,7 +234,7 @@ export function queryEffect<
|
|
|
180
234
|
*/
|
|
181
235
|
export function queryOneEffect<
|
|
182
236
|
T extends { id: string },
|
|
183
|
-
PM extends
|
|
237
|
+
PM extends PersistenceModelType<string>,
|
|
184
238
|
Evt,
|
|
185
239
|
ItemType extends string,
|
|
186
240
|
R,
|
|
@@ -192,7 +246,7 @@ export function queryOneEffect<
|
|
|
192
246
|
map: Effect<R, E, { filter?: Filter<PM>; collect?: (t: T) => Option<S> }>
|
|
193
247
|
) {
|
|
194
248
|
return map.flatMap((f) =>
|
|
195
|
-
(f.filter ? self.utils.filter(f.filter,
|
|
249
|
+
(f.filter ? self.utils.filter({ filter: f.filter, limit: 1 }) : self.utils.all)
|
|
196
250
|
.flatMap((_) => self.utils.parseMany(_))
|
|
197
251
|
.flatMap((_) =>
|
|
198
252
|
(f.collect ? _.filterMap(f.collect) : _ as any as S[])
|
|
@@ -208,7 +262,7 @@ export function queryOneEffect<
|
|
|
208
262
|
*/
|
|
209
263
|
export function query<
|
|
210
264
|
T extends { id: string },
|
|
211
|
-
PM extends
|
|
265
|
+
PM extends PersistenceModelType<string>,
|
|
212
266
|
Evt,
|
|
213
267
|
ItemType extends string,
|
|
214
268
|
S = T
|
|
@@ -225,7 +279,7 @@ export function query<
|
|
|
225
279
|
*/
|
|
226
280
|
export function queryOne<
|
|
227
281
|
T extends { id: string },
|
|
228
|
-
PM extends
|
|
282
|
+
PM extends PersistenceModelType<string>,
|
|
229
283
|
Evt,
|
|
230
284
|
ItemType extends string,
|
|
231
285
|
S = T
|
|
@@ -242,7 +296,7 @@ export function queryOne<
|
|
|
242
296
|
*/
|
|
243
297
|
export function queryAndSavePureEffect<
|
|
244
298
|
T extends { id: string },
|
|
245
|
-
PM extends
|
|
299
|
+
PM extends PersistenceModelType<string>,
|
|
246
300
|
Evt,
|
|
247
301
|
ItemType extends string,
|
|
248
302
|
R,
|
|
@@ -263,7 +317,7 @@ export function queryAndSavePureEffect<
|
|
|
263
317
|
*/
|
|
264
318
|
export function queryAndSavePure<
|
|
265
319
|
T extends { id: string },
|
|
266
|
-
PM extends
|
|
320
|
+
PM extends PersistenceModelType<string>,
|
|
267
321
|
Evt,
|
|
268
322
|
ItemType extends string,
|
|
269
323
|
S extends T = T
|
|
@@ -280,7 +334,7 @@ export function queryAndSavePure<
|
|
|
280
334
|
*/
|
|
281
335
|
export function saveManyWithPure<
|
|
282
336
|
T extends { id: string },
|
|
283
|
-
PM extends
|
|
337
|
+
PM extends PersistenceModelType<string>,
|
|
284
338
|
Evt,
|
|
285
339
|
ItemType extends string
|
|
286
340
|
>(self: RepositoryBaseC<T, PM, Evt, ItemType>) {
|
|
@@ -293,7 +347,7 @@ export function saveManyWithPure<
|
|
|
293
347
|
*/
|
|
294
348
|
export function byIdAndSaveWithPure<
|
|
295
349
|
T extends { id: string },
|
|
296
|
-
PM extends
|
|
350
|
+
PM extends PersistenceModelType<string>,
|
|
297
351
|
Evt,
|
|
298
352
|
ItemType extends string
|
|
299
353
|
>(self: RepositoryBaseC<T, PM, Evt, ItemType>, id: T["id"]) {
|
|
@@ -307,7 +361,7 @@ export function byIdAndSaveWithPure<
|
|
|
307
361
|
*/
|
|
308
362
|
export function handleByIdAndSaveWithPure<
|
|
309
363
|
T extends { id: string },
|
|
310
|
-
PM extends
|
|
364
|
+
PM extends PersistenceModelType<string>,
|
|
311
365
|
Evt,
|
|
312
366
|
ItemType extends string
|
|
313
367
|
>(self: RepositoryBaseC<T, PM, Evt, ItemType>) {
|
|
@@ -324,7 +378,7 @@ export function saveManyWithPure_<
|
|
|
324
378
|
Id extends string,
|
|
325
379
|
R,
|
|
326
380
|
T extends { id: Id },
|
|
327
|
-
PM extends
|
|
381
|
+
PM extends PersistenceModelType<string>,
|
|
328
382
|
A,
|
|
329
383
|
E,
|
|
330
384
|
Evt,
|
|
@@ -349,7 +403,7 @@ export function saveWithPure_<
|
|
|
349
403
|
Id extends string,
|
|
350
404
|
R,
|
|
351
405
|
T extends { id: Id },
|
|
352
|
-
PM extends
|
|
406
|
+
PM extends PersistenceModelType<string>,
|
|
353
407
|
A,
|
|
354
408
|
E,
|
|
355
409
|
Evt,
|
|
@@ -371,7 +425,7 @@ export function saveWithPure_<
|
|
|
371
425
|
|
|
372
426
|
export function saveAllWithEffectInt<
|
|
373
427
|
T extends { id: string },
|
|
374
|
-
PM extends
|
|
428
|
+
PM extends PersistenceModelType<string>,
|
|
375
429
|
P extends T,
|
|
376
430
|
Evt,
|
|
377
431
|
ItemType extends string,
|
|
@@ -393,7 +447,7 @@ export function saveAllWithEffectInt<
|
|
|
393
447
|
*/
|
|
394
448
|
export function queryAndSavePureEffectBatched<
|
|
395
449
|
T extends { id: string },
|
|
396
|
-
PM extends
|
|
450
|
+
PM extends PersistenceModelType<string>,
|
|
397
451
|
Evt,
|
|
398
452
|
ItemType extends string,
|
|
399
453
|
R,
|
|
@@ -415,7 +469,7 @@ export function queryAndSavePureEffectBatched<
|
|
|
415
469
|
*/
|
|
416
470
|
export function queryAndSavePureBatched<
|
|
417
471
|
T extends { id: string },
|
|
418
|
-
PM extends
|
|
472
|
+
PM extends PersistenceModelType<string>,
|
|
419
473
|
Evt,
|
|
420
474
|
ItemType extends string,
|
|
421
475
|
S extends T = T
|
|
@@ -433,7 +487,7 @@ export function queryAndSavePureBatched<
|
|
|
433
487
|
*/
|
|
434
488
|
export function saveManyWithPureBatched<
|
|
435
489
|
T extends { id: string },
|
|
436
|
-
PM extends
|
|
490
|
+
PM extends PersistenceModelType<string>,
|
|
437
491
|
Evt,
|
|
438
492
|
ItemType extends string
|
|
439
493
|
>(self: RepositoryBaseC<T, PM, Evt, ItemType>, batchSize = 100) {
|
|
@@ -448,7 +502,7 @@ export function saveManyWithPureBatched_<
|
|
|
448
502
|
Id extends string,
|
|
449
503
|
R,
|
|
450
504
|
T extends { id: Id },
|
|
451
|
-
PM extends
|
|
505
|
+
PM extends PersistenceModelType<string>,
|
|
452
506
|
A,
|
|
453
507
|
E,
|
|
454
508
|
Evt,
|
|
@@ -600,7 +654,7 @@ export function ifAny_<T, R, E, A>(items: Iterable<T>, fn: (items: NonEmptyReado
|
|
|
600
654
|
*/
|
|
601
655
|
export function save<
|
|
602
656
|
T extends { id: string },
|
|
603
|
-
PM extends
|
|
657
|
+
PM extends PersistenceModelType<string>,
|
|
604
658
|
Evt,
|
|
605
659
|
ItemType extends string
|
|
606
660
|
>(
|
|
@@ -614,7 +668,7 @@ export function save<
|
|
|
614
668
|
*/
|
|
615
669
|
export function saveWithEvents<
|
|
616
670
|
T extends { id: string },
|
|
617
|
-
PM extends
|
|
671
|
+
PM extends PersistenceModelType<string>,
|
|
618
672
|
Evt,
|
|
619
673
|
ItemType extends string
|
|
620
674
|
>(
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import type { ParserEnv } from "@effect-app/schema/custom/Parser"
|
|
4
4
|
import type { Repository } from "./Repository.js"
|
|
5
5
|
import { StoreMaker } from "./Store.js"
|
|
6
|
-
import type { Filter, StoreConfig, Where } from "./Store.js"
|
|
6
|
+
import type { Filter, FilterArgs, FilterFunc, PersistenceModelType, StoreConfig, Where } from "./Store.js"
|
|
7
7
|
import type {} from "effect/Equal"
|
|
8
8
|
import type {} from "effect/Hash"
|
|
9
9
|
import type { Opt } from "@effect-app/core/Option"
|
|
@@ -13,13 +13,14 @@ import type { Schema } from "@effect-app/prelude"
|
|
|
13
13
|
import { EParserFor } from "@effect-app/prelude/schema"
|
|
14
14
|
import type { InvalidStateError, OptimisticConcurrencyException } from "../errors.js"
|
|
15
15
|
import { ContextMapContainer } from "./Store/ContextMapContainer.js"
|
|
16
|
+
import { QueryBuilder } from "./Store/filterApi/query.js"
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* @tsplus type Repository
|
|
19
20
|
*/
|
|
20
21
|
export abstract class RepositoryBaseC<
|
|
21
22
|
T extends { id: string },
|
|
22
|
-
PM extends
|
|
23
|
+
PM extends PersistenceModelType<string>,
|
|
23
24
|
Evt,
|
|
24
25
|
ItemType extends string
|
|
25
26
|
> {
|
|
@@ -33,7 +34,7 @@ export abstract class RepositoryBaseC<
|
|
|
33
34
|
abstract readonly utils: {
|
|
34
35
|
parseMany: (a: readonly PM[], env?: ParserEnv | undefined) => Effect<never, never, readonly T[]>
|
|
35
36
|
all: Effect<never, never, PM[]>
|
|
36
|
-
filter:
|
|
37
|
+
filter: FilterFunc<PM>
|
|
37
38
|
// count: (filter?: Filter<PM>) => Effect<never, never, PositiveInt>
|
|
38
39
|
}
|
|
39
40
|
abstract readonly changeFeed: PubSub<[T[], "save" | "remove"]>
|
|
@@ -45,7 +46,7 @@ export abstract class RepositoryBaseC<
|
|
|
45
46
|
|
|
46
47
|
export abstract class RepositoryBaseC1<
|
|
47
48
|
T extends { id: string },
|
|
48
|
-
PM extends
|
|
49
|
+
PM extends PersistenceModelType<string>,
|
|
49
50
|
Evt,
|
|
50
51
|
ItemType extends string
|
|
51
52
|
> extends RepositoryBaseC<T, PM, Evt, ItemType> {
|
|
@@ -56,9 +57,12 @@ export abstract class RepositoryBaseC1<
|
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
export class RepositoryBaseC2<
|
|
60
|
-
extends
|
|
61
|
-
|
|
60
|
+
export class RepositoryBaseC2<
|
|
61
|
+
T extends { id: string },
|
|
62
|
+
PM extends PersistenceModelType<string>,
|
|
63
|
+
Evt,
|
|
64
|
+
ItemType extends string
|
|
65
|
+
> extends RepositoryBaseC1<T, PM, Evt, ItemType> {
|
|
62
66
|
constructor(
|
|
63
67
|
itemType: ItemType,
|
|
64
68
|
protected readonly impl: Repository<T, PM, Evt, ItemType>
|
|
@@ -212,9 +216,14 @@ export function makeRepo<
|
|
|
212
216
|
*/
|
|
213
217
|
utils: {
|
|
214
218
|
parseMany: (items) => cms.get.map((cm) => items.map((_) => p(mapReverse(_, cm.set)))),
|
|
215
|
-
filter:
|
|
216
|
-
|
|
217
|
-
|
|
219
|
+
filter: <U extends keyof PM = keyof PM>(args: FilterArgs<PM, U>) =>
|
|
220
|
+
store
|
|
221
|
+
.filter(args)
|
|
222
|
+
.tap((items) =>
|
|
223
|
+
args.select
|
|
224
|
+
? Effect.unit
|
|
225
|
+
: cms.get.map(({ set }) => items.forEach((_) => set((_ as PM).id, (_ as PM)._etag)))
|
|
226
|
+
),
|
|
218
227
|
all: store.all.tap((items) => cms.get.map(({ set }) => items.forEach((_) => set(_.id, _._etag))))
|
|
219
228
|
},
|
|
220
229
|
changeFeed,
|
|
@@ -232,7 +241,8 @@ export function makeRepo<
|
|
|
232
241
|
|
|
233
242
|
return {
|
|
234
243
|
make,
|
|
235
|
-
where
|
|
244
|
+
where,
|
|
245
|
+
query: QueryBuilder.make<PM>()
|
|
236
246
|
}
|
|
237
247
|
}
|
|
238
248
|
}
|
|
@@ -243,7 +253,7 @@ export function makeRepo<
|
|
|
243
253
|
*/
|
|
244
254
|
export function removeById<
|
|
245
255
|
T extends { id: string },
|
|
246
|
-
PM extends
|
|
256
|
+
PM extends PersistenceModelType<string>,
|
|
247
257
|
Evt,
|
|
248
258
|
ItemType extends string
|
|
249
259
|
>(
|
|
@@ -391,7 +401,9 @@ export interface Repos<
|
|
|
391
401
|
E,
|
|
392
402
|
Out
|
|
393
403
|
>
|
|
404
|
+
/** @deprecated use `query` instead */
|
|
394
405
|
readonly where: ReturnType<typeof makeWhere<PM>>
|
|
406
|
+
readonly query: ReturnType<typeof QueryBuilder.make<PM>>
|
|
395
407
|
readonly type: Repository<T, PM, Evt, ItemType>
|
|
396
408
|
}
|
|
397
409
|
|
|
@@ -431,6 +443,7 @@ export const RepositoryBaseImpl = <Service>() => {
|
|
|
431
443
|
static readonly makeWith = ((a: any, b: any) => mkRepo.make(a).map(b)) as any
|
|
432
444
|
|
|
433
445
|
static readonly where = makeWhere<PM>()
|
|
446
|
+
static readonly query = QueryBuilder.make<PM>()
|
|
434
447
|
static readonly type: Repository<T, PM, Evt, ItemType> = undefined as any
|
|
435
448
|
}
|
|
436
449
|
return assignTag<Service>()(Cls) as any
|
|
@@ -475,6 +488,7 @@ export const RepositoryDefaultImpl = <Service>() => {
|
|
|
475
488
|
static readonly makeWith = ((a: any, b: any) => mkRepo.make(a).map(b)) as any
|
|
476
489
|
|
|
477
490
|
static readonly where = makeWhere<PM>()
|
|
491
|
+
static readonly query = QueryBuilder.make<PM>()
|
|
478
492
|
|
|
479
493
|
static readonly type: Repository<T, PM, Evt, ItemType> = undefined as any
|
|
480
494
|
}
|