@effect-app/infra 2.48.0 → 2.49.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.
@@ -2,7 +2,7 @@
2
2
  import type { Effect, Option, PubSub, S } from "effect-app"
3
3
  import type { InvalidStateError, NotFoundError, OptimisticConcurrencyException } from "effect-app/client/errors"
4
4
  import type { NonNegativeInt } from "effect-app/Schema/numbers"
5
- import type { FieldValues, ResolveFirstLevel } from "../filter/types.js"
5
+ import type { FieldValues, IsNever, ResolveFirstLevel } from "../filter/types.js"
6
6
  import type { QAll, Query, QueryProjection } from "../query.js"
7
7
  import type { Mapped } from "./legacy.js"
8
8
 
@@ -35,11 +35,12 @@ export interface Repository<
35
35
  A,
36
36
  R,
37
37
  From extends FieldValues,
38
- TType extends "one" | "many" | "count" = "many"
38
+ TType extends "one" | "many" | "count" = "many",
39
+ E extends boolean = false
39
40
  >(
40
41
  q: (
41
42
  initial: Query<Encoded>
42
- ) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
43
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
43
44
  ): Effect.Effect<
44
45
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
45
46
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -51,14 +52,15 @@ export interface Repository<
51
52
  R,
52
53
  From extends FieldValues,
53
54
  TType extends "one" | "many" | "count" = "many",
54
- $A = never
55
+ $A = never,
56
+ E extends boolean = false
55
57
  >(
56
58
  q1: (
57
59
  initial: Query<Encoded>
58
60
  ) => $A,
59
61
  q2: (
60
62
  _: $A
61
- ) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
63
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
62
64
  ): Effect.Effect<
63
65
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
64
66
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -71,7 +73,8 @@ export interface Repository<
71
73
  From extends FieldValues,
72
74
  TType extends "one" | "many" | "count" = "many",
73
75
  $A = never,
74
- $B = never
76
+ $B = never,
77
+ E extends boolean = false
75
78
  >(
76
79
  q1: (
77
80
  initial: Query<Encoded>
@@ -79,7 +82,7 @@ export interface Repository<
79
82
  q2: (_: $A) => $B,
80
83
  q3: (
81
84
  _: $B
82
- ) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
85
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
83
86
  ): Effect.Effect<
84
87
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
85
88
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -93,7 +96,8 @@ export interface Repository<
93
96
  TType extends "one" | "many" | "count" = "many",
94
97
  $A = never,
95
98
  $B = never,
96
- $C = never
99
+ $C = never,
100
+ E extends boolean = false
97
101
  >(
98
102
  q1: (
99
103
  initial: Query<Encoded>
@@ -102,7 +106,7 @@ export interface Repository<
102
106
  q3: (_: $B) => $C,
103
107
  q4: (
104
108
  _: $C
105
- ) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
109
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
106
110
  ): Effect.Effect<
107
111
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
108
112
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -117,7 +121,8 @@ export interface Repository<
117
121
  $A = never,
118
122
  $B = never,
119
123
  $C = never,
120
- $D = never
124
+ $D = never,
125
+ E extends boolean = false
121
126
  >(
122
127
  q1: (
123
128
  initial: Query<Encoded>
@@ -127,7 +132,7 @@ export interface Repository<
127
132
  q4: (_: $C) => $D,
128
133
  q5: (
129
134
  _: $D
130
- ) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
135
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
131
136
  ): Effect.Effect<
132
137
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
133
138
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -143,7 +148,8 @@ export interface Repository<
143
148
  $B = never,
144
149
  $C = never,
145
150
  $D = never,
146
- $E = never
151
+ $E = never,
152
+ E extends boolean = false
147
153
  >(
148
154
  q1: (
149
155
  initial: Query<Encoded>
@@ -152,7 +158,7 @@ export interface Repository<
152
158
  q3: (_: $B) => $C,
153
159
  q4: (_: $C) => $D,
154
160
  q5: (_: $D) => $E,
155
- q6: (_: $E) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
161
+ q6: (_: $E) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
156
162
  ): Effect.Effect<
157
163
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
158
164
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -169,7 +175,8 @@ export interface Repository<
169
175
  $C = never,
170
176
  $D = never,
171
177
  $E = never,
172
- $F = never
178
+ $F = never,
179
+ E extends boolean = false
173
180
  >(
174
181
  q1: (
175
182
  initial: Query<Encoded>
@@ -179,7 +186,7 @@ export interface Repository<
179
186
  q4: (_: $C) => $D,
180
187
  q5: (_: $D) => $E,
181
188
  q6: (_: $E) => $F,
182
- q7: (_: $F) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
189
+ q7: (_: $F) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
183
190
  ): Effect.Effect<
184
191
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
185
192
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -197,7 +204,8 @@ export interface Repository<
197
204
  $D = never,
198
205
  $E = never,
199
206
  $F = never,
200
- $G = never
207
+ $G = never,
208
+ E extends boolean = false
201
209
  >(
202
210
  q1: (
203
211
  initial: Query<Encoded>
@@ -208,7 +216,7 @@ export interface Repository<
208
216
  q5: (_: $D) => $E,
209
217
  q6: (_: $E) => $F,
210
218
  q7: (_: $F) => $G,
211
- q8: (_: $G) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
219
+ q8: (_: $G) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
212
220
  ): Effect.Effect<
213
221
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
214
222
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -227,7 +235,8 @@ export interface Repository<
227
235
  $E = never,
228
236
  $F = never,
229
237
  $G = never,
230
- $H = never
238
+ $H = never,
239
+ E extends boolean = false
231
240
  >(
232
241
  q1: (
233
242
  initial: Query<Encoded>
@@ -239,7 +248,7 @@ export interface Repository<
239
248
  q6: (_: $E) => $F,
240
249
  q7: (_: $F) => $G,
241
250
  q8: (_: $G) => $H,
242
- q9: (_: $H) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
251
+ q9: (_: $H) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
243
252
  ): Effect.Effect<
244
253
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
245
254
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -259,7 +268,8 @@ export interface Repository<
259
268
  $F = never,
260
269
  $G = never,
261
270
  $H = never,
262
- $I = never
271
+ $I = never,
272
+ E extends boolean = false
263
273
  >(
264
274
  q1: (
265
275
  initial: Query<Encoded>
@@ -272,7 +282,7 @@ export interface Repository<
272
282
  q7: (_: $F) => $G,
273
283
  q8: (_: $G) => $H,
274
284
  q9: (_: $H) => $I,
275
- q10: (_: $I) => QueryProjection<From extends Encoded ? From : never, A, R, TType>
285
+ q10: (_: $I) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
276
286
  ): Effect.Effect<
277
287
  TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
278
288
  | (TType extends "many" ? never : NotFoundError<ItemType>)
@@ -284,11 +294,12 @@ export interface Repository<
284
294
  <
285
295
  R = never,
286
296
  TType extends "one" | "many" = "many",
287
- EncodedRefined extends Encoded = Encoded
297
+ EncodedRefined extends Encoded = Encoded,
298
+ E extends boolean = false
288
299
  >(
289
- q: (initial: Query<Encoded>) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
300
+ q: (initial: Query<Encoded>) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
290
301
  ): Effect.Effect<
291
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
302
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
292
303
  TType extends "many" ? never : NotFoundError<ItemType>,
293
304
  R | RSchema
294
305
  >
@@ -296,14 +307,15 @@ export interface Repository<
296
307
  R = never,
297
308
  TType extends "one" | "many" = "many",
298
309
  EncodedRefined extends Encoded = Encoded,
299
- $A = never
310
+ $A = never,
311
+ E extends boolean = false
300
312
  >(
301
313
  q1: (initial: Query<Encoded>) => $A,
302
314
  q2: (
303
315
  _: $A
304
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
316
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
305
317
  ): Effect.Effect<
306
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
318
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
307
319
  TType extends "many" ? never : NotFoundError<ItemType>,
308
320
  R | RSchema
309
321
  >
@@ -312,7 +324,8 @@ export interface Repository<
312
324
  TType extends "one" | "many" = "many",
313
325
  EncodedRefined extends Encoded = Encoded,
314
326
  $A = never,
315
- $B = never
327
+ $B = never,
328
+ E extends boolean = false
316
329
  >(
317
330
  q1: (initial: Query<Encoded>) => $A,
318
331
  q2: (
@@ -320,9 +333,9 @@ export interface Repository<
320
333
  ) => $B,
321
334
  q3: (
322
335
  _: $B
323
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
336
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
324
337
  ): Effect.Effect<
325
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
338
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
326
339
  TType extends "many" ? never : NotFoundError<ItemType>,
327
340
  R | RSchema
328
341
  >
@@ -332,16 +345,17 @@ export interface Repository<
332
345
  EncodedRefined extends Encoded = Encoded,
333
346
  $A = never,
334
347
  $B = never,
335
- $C = never
348
+ $C = never,
349
+ E extends boolean = false
336
350
  >(
337
351
  q1: (initial: Query<Encoded>) => $A,
338
352
  q2: (_: $A) => $B,
339
353
  q3: (_: $B) => $C,
340
354
  q4: (
341
355
  _: $C
342
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
356
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
343
357
  ): Effect.Effect<
344
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
358
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
345
359
  TType extends "many" ? never : NotFoundError<ItemType>,
346
360
  R | RSchema
347
361
  >
@@ -352,7 +366,8 @@ export interface Repository<
352
366
  $A = never,
353
367
  $B = never,
354
368
  $C = never,
355
- $D = never
369
+ $D = never,
370
+ E extends boolean = false
356
371
  >(
357
372
  q1: (initial: Query<Encoded>) => $A,
358
373
  q2: (_: $A) => $B,
@@ -360,9 +375,9 @@ export interface Repository<
360
375
  q4: (_: $C) => $D,
361
376
  q5: (
362
377
  _: $D
363
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
378
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
364
379
  ): Effect.Effect<
365
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
380
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
366
381
  TType extends "many" ? never : NotFoundError<ItemType>,
367
382
  R | RSchema
368
383
  >
@@ -374,7 +389,8 @@ export interface Repository<
374
389
  $B = never,
375
390
  $C = never,
376
391
  $D = never,
377
- $E = never
392
+ $E = never,
393
+ E extends boolean = false
378
394
  >(
379
395
  q1: (initial: Query<Encoded>) => $A,
380
396
  q2: (_: $A) => $B,
@@ -383,9 +399,9 @@ export interface Repository<
383
399
  q5: (_: $D) => $E,
384
400
  q6: (
385
401
  _: $E
386
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
402
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
387
403
  ): Effect.Effect<
388
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
404
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
389
405
  TType extends "many" ? never : NotFoundError<ItemType>,
390
406
  R | RSchema
391
407
  >
@@ -398,7 +414,8 @@ export interface Repository<
398
414
  $C = never,
399
415
  $D = never,
400
416
  $E = never,
401
- $F = never
417
+ $F = never,
418
+ E extends boolean = false
402
419
  >(
403
420
  q1: (initial: Query<Encoded>) => $A,
404
421
  q2: (_: $A) => $B,
@@ -408,9 +425,9 @@ export interface Repository<
408
425
  q6: (_: $E) => $F,
409
426
  q7: (
410
427
  _: $F
411
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
428
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
412
429
  ): Effect.Effect<
413
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
430
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
414
431
  TType extends "many" ? never : NotFoundError<ItemType>,
415
432
  R | RSchema
416
433
  >
@@ -424,7 +441,8 @@ export interface Repository<
424
441
  $D = never,
425
442
  $E = never,
426
443
  $F = never,
427
- $G = never
444
+ $G = never,
445
+ E extends boolean = false
428
446
  >(
429
447
  q1: (initial: Query<Encoded>) => $A,
430
448
  q2: (_: $A) => $B,
@@ -435,9 +453,10 @@ export interface Repository<
435
453
  q7: (_: $F) => $G,
436
454
  q8: (
437
455
  _: $G
438
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
456
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
439
457
  ): Effect.Effect<
440
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
458
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined>
459
+ : RefineTHelper<T, EncodedRefined>,
441
460
  TType extends "many" ? never : NotFoundError<ItemType>,
442
461
  R | RSchema
443
462
  >
@@ -452,7 +471,8 @@ export interface Repository<
452
471
  $E = never,
453
472
  $F = never,
454
473
  $G = never,
455
- $H = never
474
+ $H = never,
475
+ E extends boolean = false
456
476
  >(
457
477
  q1: (initial: Query<Encoded>) => $A,
458
478
  q2: (_: $A) => $B,
@@ -464,9 +484,10 @@ export interface Repository<
464
484
  q8: (_: $G) => $H,
465
485
  q9: (
466
486
  _: $H
467
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
487
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
468
488
  ): Effect.Effect<
469
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
489
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined>
490
+ : RefineTHelper<T, EncodedRefined>,
470
491
  TType extends "many" ? never : NotFoundError<ItemType>,
471
492
  R | RSchema
472
493
  >
@@ -482,7 +503,8 @@ export interface Repository<
482
503
  $F = never,
483
504
  $G = never,
484
505
  $H = never,
485
- $I = never
506
+ $I = never,
507
+ E extends boolean = false
486
508
  >(
487
509
  q1: (initial: Query<Encoded>) => $A,
488
510
  q2: (_: $A) => $B,
@@ -495,9 +517,10 @@ export interface Repository<
495
517
  q9: (_: $H) => $I,
496
518
  q10: (
497
519
  _: $I
498
- ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType>
520
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
499
521
  ): Effect.Effect<
500
- TType extends "many" ? readonly RefineTHelper<T, EncodedRefined>[] : RefineTHelper<T, EncodedRefined>,
522
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined>
523
+ : RefineTHelper<T, EncodedRefined>,
501
524
  TType extends "many" ? never : NotFoundError<ItemType>,
502
525
  R | RSchema
503
526
  >
@@ -507,6 +530,13 @@ export interface Repository<
507
530
  readonly mapped: Mapped<Encoded>
508
531
  }
509
532
 
533
+ type DistributeQueryIfExclusiveOnArray<Exclusive extends boolean, T, EncodedRefined> = [Exclusive] extends [true]
534
+ ? T extends any ? RefineTHelper<T, EncodedRefined> extends infer R ? IsNever<R> extends true ? never
535
+ : readonly R[]
536
+ : never
537
+ : never
538
+ : readonly RefineTHelper<T, EncodedRefined>[]
539
+
510
540
  type NullableRefined<T, EncodedRefined> = {
511
541
  // EncodedRefined may be a union, so if you just keyof you'll get just common keys
512
542
  // p.s. NullableRefined is homomorphic in T so it distributes itself over T