@effect-app/infra 0.201.2 → 0.201.4

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.
@@ -8,10 +8,10 @@ import type { S } from "effect-app"
8
8
  import { Data } from "effect-app"
9
9
  import type { Covariant } from "effect/Types"
10
10
 
11
- export type QAll<TFieldValues extends FieldValues, A = TFieldValues, R = never> =
11
+ export type QAll<TFieldValues extends FieldValues, A = TFieldValues, R = never, TType extends "one" | "many" = "many"> =
12
12
  | Query<TFieldValues>
13
13
  | QueryWhere<TFieldValues>
14
- | QueryEnd<TFieldValues>
14
+ | QueryEnd<TFieldValues, TType>
15
15
  | QueryProjection<TFieldValues, A, R>
16
16
 
17
17
  export const QId = Symbol()
@@ -21,28 +21,41 @@ export interface QueryTogether<
21
21
  out TFieldValues extends FieldValues,
22
22
  out T extends "initial" | "where" | "end" | "projection" = "initial",
23
23
  out A = TFieldValues,
24
- out R = never
24
+ out R = never,
25
+ out TType extends "many" | "one" = "many"
25
26
  > {
26
27
  readonly [QId]: {
27
28
  readonly _TFieldValues: Covariant<TFieldValues>
28
29
  readonly _T: Covariant<T>
29
30
  readonly _A: Covariant<A>
30
31
  readonly _R: Covariant<R>
32
+ readonly _TT: Covariant<TType>
31
33
  }
32
34
  }
33
35
 
34
36
  export type Query<TFieldValues extends FieldValues> = QueryTogether<TFieldValues, "initial">
35
37
  export type QueryWhere<TFieldValues extends FieldValues> = QueryTogether<TFieldValues, "where">
36
38
 
37
- export type QueryEnd<TFieldValues extends FieldValues> = QueryTogether<TFieldValues, "end">
39
+ export type QueryEnd<TFieldValues extends FieldValues, TType extends "many" | "one" = "many"> = QueryTogether<
40
+ TFieldValues,
41
+ "end",
42
+ TFieldValues,
43
+ never,
44
+ TType
45
+ >
38
46
 
39
- export type QueryProjection<TFieldValues extends FieldValues, A = TFieldValues, R = never> = QueryTogether<
47
+ export type QueryProjection<
48
+ TFieldValues extends FieldValues,
49
+ A = TFieldValues,
50
+ R = never,
51
+ TType extends "many" | "one" = "many"
52
+ > = QueryTogether<
40
53
  TFieldValues,
41
54
  "projection",
42
55
  A,
43
- R
56
+ R,
57
+ TType
44
58
  >
45
-
46
59
  export type Q<TFieldValues extends FieldValues> =
47
60
  | Initial<TFieldValues>
48
61
  | Where<TFieldValues>
@@ -51,6 +64,7 @@ export type Q<TFieldValues extends FieldValues> =
51
64
  | Order<TFieldValues, any>
52
65
  | Page<TFieldValues>
53
66
  | Project<any, TFieldValues, any>
67
+ | One<TFieldValues>
54
68
 
55
69
  export class Initial<TFieldValues extends FieldValues> extends Data.TaggedClass("value")<{ value: "initial" }>
56
70
  implements Query<TFieldValues>
@@ -90,6 +104,12 @@ export class Page<TFieldValues extends FieldValues> extends Data.TaggedClass("pa
90
104
  readonly [QId]!: any
91
105
  }
92
106
 
107
+ export class One<TFieldValues extends FieldValues> extends Data.TaggedClass("one")<{
108
+ current: Query<TFieldValues> | QueryWhere<TFieldValues> | QueryEnd<TFieldValues>
109
+ }> implements QueryEnd<TFieldValues, "many"> {
110
+ readonly [QId]!: any
111
+ }
112
+
93
113
  export class Order<TFieldValues extends FieldValues, TFieldName extends FieldPath<TFieldValues>>
94
114
  extends Data.TaggedClass("order")<{
95
115
  current: Query<TFieldValues> | QueryWhere<TFieldValues> | QueryEnd<TFieldValues>
@@ -101,10 +121,13 @@ export class Order<TFieldValues extends FieldValues, TFieldName extends FieldPat
101
121
  readonly [QId]!: any
102
122
  }
103
123
 
104
- export class Project<A, TFieldValues extends FieldValues, R> extends Data.TaggedClass("project")<{
105
- current: Query<TFieldValues> | QueryWhere<TFieldValues> | QueryEnd<TFieldValues>
106
- schema: S.Schema<A, TFieldValues, R>
107
- }> implements QueryProjection<TFieldValues, A, R> {
124
+ export class Project<A, TFieldValues extends FieldValues, R, TType extends "one" | "many" = "many">
125
+ extends Data.TaggedClass("project")<{
126
+ current: Query<TFieldValues> | QueryWhere<TFieldValues> | QueryEnd<TFieldValues, TType>
127
+ schema: S.Schema<A, TFieldValues, R>
128
+ }>
129
+ implements QueryProjection<TFieldValues, A, R>
130
+ {
108
131
  readonly [QId]!: any
109
132
  }
110
133
 
@@ -134,11 +157,31 @@ export const page: <TFieldValues extends FieldValues>(
134
157
  skip
135
158
  })
136
159
 
137
- export const project: <TFieldValues extends FieldValues, A = FieldValues, R = never>(
160
+ export const one: <TFieldValues extends FieldValues>(
161
+ current: Query<TFieldValues> | QueryWhere<TFieldValues> | QueryEnd<TFieldValues>
162
+ ) => QueryEnd<TFieldValues, "one"> = (current) =>
163
+ new One({
164
+ current
165
+ })
166
+ /*
167
+ .andThen(flow(
168
+ toNonEmptyArray,
169
+ Effect.mapError(() => new NotFoundError<"User">({ id: auth0Id, type: "User" })),
170
+ Effect.map((_) => _[0])
171
+ ))
172
+ */
173
+
174
+ export const project: <
175
+ TFieldValues extends FieldValues,
176
+ A = FieldValues,
177
+ R = never,
178
+ TType extends "one" | "many" = "many"
179
+ >(
138
180
  schema: S.Schema<A, TFieldValues, R>
139
181
  ) => (
140
- current: Query<TFieldValues> | QueryWhere<TFieldValues> | QueryEnd<TFieldValues>
141
- ) => QueryProjection<TFieldValues, A, R> = (schema) => (current) => new Project({ current, schema })
182
+ current: Query<TFieldValues> | QueryWhere<TFieldValues> | QueryEnd<TFieldValues, TType>
183
+ ) => QueryProjection<TFieldValues, A, R, TType> = (schema) => (current) =>
184
+ new Project({ current: current as any, /* TODO: why */ schema })
142
185
 
143
186
  export type FilterWheres = {
144
187
  <
@@ -14,6 +14,7 @@ type Result<TFieldValues extends FieldValues, A = TFieldValues, R = never> = {
14
14
  limit: number | undefined
15
15
  skip: number | undefined
16
16
  order: { key: FieldPath<TFieldValues>; direction: "ASC" | "DESC" }[]
17
+ ttype: "one" | "many" | undefined
17
18
  }
18
19
 
19
20
  const interpret = <TFieldValues extends FieldValues, A = TFieldValues, R = never>(_: QAll<TFieldValues, A, R>) => {
@@ -24,7 +25,8 @@ const interpret = <TFieldValues extends FieldValues, A = TFieldValues, R = never
24
25
  schema: undefined,
25
26
  limit: undefined,
26
27
  skip: undefined,
27
- order: []
28
+ order: [],
29
+ ttype: undefined
28
30
  }
29
31
 
30
32
  const upd = (
@@ -88,6 +90,11 @@ const interpret = <TFieldValues extends FieldValues, A = TFieldValues, R = never
88
90
  )
89
91
  }
90
92
  },
93
+ one: ({ current }) => {
94
+ upd(interpret(current))
95
+ data.limit = 1
96
+ data.ttype = "one"
97
+ },
91
98
  order: ({ current, direction, field }) => {
92
99
  upd(interpret(current))
93
100
  data.order.push({ key: field, direction })
@@ -133,6 +140,7 @@ export const toFilter = <
133
140
  select: Option.getOrUndefined(toNonEmptyArray(select)),
134
141
  schema,
135
142
  order: Option.getOrUndefined(toNonEmptyArray(a.order)),
143
+ ttype: a.ttype,
136
144
  filter: a.filter.length
137
145
  ? {
138
146
  type: "new-kid" as const,