@effect-app/infra 0.118.0 → 0.119.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.
Files changed (73) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/_cjs/services/Repository.cjs +4 -38
  3. package/_cjs/services/Repository.cjs.map +1 -1
  4. package/_cjs/services/RepositoryBase.cjs +39 -36
  5. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  6. package/_cjs/services/Store/Cosmos/query.cjs +291 -0
  7. package/_cjs/services/Store/Cosmos/query.cjs.map +1 -0
  8. package/_cjs/services/Store/Cosmos.cjs +38 -183
  9. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  10. package/_cjs/services/Store/Cosmos.test.cjs +7 -7
  11. package/_cjs/services/Store/Cosmos.test.cjs.map +1 -1
  12. package/_cjs/services/Store/Memory.cjs +20 -17
  13. package/_cjs/services/Store/Memory.cjs.map +1 -1
  14. package/_cjs/services/Store/Redis.cjs +1 -1
  15. package/_cjs/services/Store/Redis.cjs.map +1 -1
  16. package/_cjs/services/Store/codeFilter.cjs +151 -0
  17. package/_cjs/services/Store/codeFilter.cjs.map +1 -0
  18. package/_cjs/services/Store/filterApi/proxy.cjs +40 -0
  19. package/_cjs/services/Store/filterApi/proxy.cjs.map +1 -0
  20. package/_cjs/services/Store/filterApi/query.cjs +173 -0
  21. package/_cjs/services/Store/filterApi/query.cjs.map +1 -0
  22. package/_cjs/services/Store/filterApi.test.cjs +164 -0
  23. package/_cjs/services/Store/filterApi.test.cjs.map +1 -0
  24. package/_cjs/services/Store/service.cjs.map +1 -1
  25. package/_cjs/services/Store/utils.cjs +8 -1
  26. package/_cjs/services/Store/utils.cjs.map +1 -1
  27. package/_src/services/Repository.ts +124 -70
  28. package/_src/services/RepositoryBase.ts +26 -12
  29. package/_src/services/Store/Cosmos/query.ts +390 -0
  30. package/_src/services/Store/Cosmos.test.ts +5 -5
  31. package/_src/services/Store/Cosmos.ts +39 -245
  32. package/_src/services/Store/Memory.ts +21 -18
  33. package/_src/services/Store/Redis.ts +2 -3
  34. package/_src/services/Store/codeFilter.ts +150 -0
  35. package/_src/services/Store/filterApi/proxy.ts +109 -0
  36. package/_src/services/Store/filterApi/query.ts +256 -0
  37. package/_src/services/Store/filterApi.test.ts +263 -0
  38. package/_src/services/Store/service.ts +17 -5
  39. package/_src/services/Store/utils.ts +10 -7
  40. package/dist/services/Repository.d.ts +44 -104
  41. package/dist/services/Repository.d.ts.map +1 -1
  42. package/dist/services/Repository.js +6 -30
  43. package/dist/services/RepositoryBase.d.ts +11 -21
  44. package/dist/services/RepositoryBase.d.ts.map +1 -1
  45. package/dist/services/RepositoryBase.js +41 -37
  46. package/dist/services/Store/Cosmos/query.d.ts +61 -0
  47. package/dist/services/Store/Cosmos/query.d.ts.map +1 -0
  48. package/dist/services/Store/Cosmos/query.js +302 -0
  49. package/dist/services/Store/Cosmos.d.ts +3 -47
  50. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  51. package/dist/services/Store/Cosmos.js +39 -193
  52. package/dist/services/Store/Memory.d.ts +2 -7
  53. package/dist/services/Store/Memory.d.ts.map +1 -1
  54. package/dist/services/Store/Memory.js +17 -15
  55. package/dist/services/Store/Redis.d.ts.map +1 -1
  56. package/dist/services/Store/Redis.js +2 -2
  57. package/dist/services/Store/codeFilter.d.ts +5 -0
  58. package/dist/services/Store/codeFilter.d.ts.map +1 -0
  59. package/dist/services/Store/codeFilter.js +140 -0
  60. package/dist/services/Store/filterApi/proxy.d.ts +41 -0
  61. package/dist/services/Store/filterApi/proxy.d.ts.map +1 -0
  62. package/dist/services/Store/filterApi/proxy.js +41 -0
  63. package/dist/services/Store/filterApi/query.d.ts +64 -0
  64. package/dist/services/Store/filterApi/query.d.ts.map +1 -0
  65. package/dist/services/Store/filterApi/query.js +134 -0
  66. package/dist/services/Store/filterApi.test.d.ts.map +1 -0
  67. package/dist/services/Store/service.d.ts +12 -5
  68. package/dist/services/Store/service.d.ts.map +1 -1
  69. package/dist/services/Store/service.js +1 -1
  70. package/dist/services/Store/utils.d.ts +7 -1
  71. package/dist/services/Store/utils.d.ts.map +1 -1
  72. package/dist/services/Store/utils.js +118 -115
  73. package/package.json +44 -4
@@ -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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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<R, E, { filter?: Filter<PM>; collect?: (t: PM) => Option<S>; limit?: number; skip?: number }>
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
- (f.filter ? self.utils.filter(f.filter, { limit: f.limit, skip: f.skip }) : self.utils.all)
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 { id: string },
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: { filter?: Filter<PM>; collect?: (t: PM) => Option<S>; limit?: number; skip?: number }
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 { id: string },
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 { id: string },
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.filter, { limit: f.limit, skip: f.skip }) : self.utils.all)
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 { id: string },
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, { limit: 1 }) : self.utils.all)
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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 { id: string },
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: (filter: Filter<PM>, cursor?: { limit?: number; skip?: number }) => Effect<never, never, PM[]>
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 { id: string },
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<T extends { id: string }, PM extends { id: string }, Evt, ItemType extends string>
60
- extends RepositoryBaseC1<T, PM, Evt, ItemType>
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: store
216
- .filter
217
- .flow((_) => _.tap((items) => cms.get.map(({ set }) => items.forEach((_) => set(_.id, _._etag))))),
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 { id: string },
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
  }