@effect-app/infra 3.10.0 → 4.0.0-beta.1
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 +19 -0
- package/_check.sh +3 -0
- package/dist/CUPS.d.ts +22 -12
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +28 -29
- package/dist/Emailer/Sendgrid.js +13 -12
- package/dist/Emailer/service.d.ts +3 -13
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/Emailer/service.js +3 -3
- package/dist/MainFiberSet.d.ts +18 -41
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +10 -10
- package/dist/Model/Repository/ext.d.ts.map +1 -1
- package/dist/Model/Repository/ext.js +13 -10
- package/dist/Model/Repository/internal/internal.d.ts +5 -5
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +52 -42
- package/dist/Model/Repository/legacy.d.ts +9 -9
- package/dist/Model/Repository/legacy.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.d.ts +4 -4
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.js +1 -1
- package/dist/Model/Repository/service.d.ts +11 -11
- package/dist/Model/Repository/service.d.ts.map +1 -1
- package/dist/Model/Repository/validation.d.ts +17 -47
- package/dist/Model/Repository/validation.d.ts.map +1 -1
- package/dist/Model/Repository/validation.js +2 -2
- package/dist/Model/query/dsl.d.ts +22 -22
- package/dist/Model/query/dsl.d.ts.map +1 -1
- package/dist/Model/query/dsl.js +1 -1
- package/dist/Model/query/new-kid-interpreter.d.ts +1 -1
- package/dist/Model/query/new-kid-interpreter.js +7 -7
- package/dist/Operations.d.ts +22 -63
- package/dist/Operations.d.ts.map +1 -1
- package/dist/Operations.js +14 -14
- package/dist/OperationsRepo.d.ts +23 -7
- package/dist/OperationsRepo.d.ts.map +1 -1
- package/dist/OperationsRepo.js +4 -5
- package/dist/QueueMaker/SQLQueue.d.ts +6 -8
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +20 -24
- package/dist/QueueMaker/errors.js +1 -1
- package/dist/QueueMaker/memQueue.d.ts +2 -5
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +22 -26
- package/dist/QueueMaker/sbqueue.d.ts +2 -5
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +24 -28
- package/dist/RequestContext.d.ts +28 -41
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +4 -4
- package/dist/RequestFiberSet.d.ts +23 -50
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +14 -14
- package/dist/Store/ContextMapContainer.d.ts +4 -4
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +5 -5
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +21 -28
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +12 -16
- package/dist/Store/Memory.d.ts +2 -2
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +25 -33
- package/dist/Store/index.js +2 -2
- package/dist/Store/service.d.ts +9 -34
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +4 -4
- package/dist/Store/utils.d.ts.map +1 -1
- package/dist/Store/utils.js +10 -2
- package/dist/adapters/SQL/Model.d.ts +106 -162
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +92 -130
- package/dist/adapters/ServiceBus.d.ts +13 -44
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +13 -15
- package/dist/adapters/cosmos-client.d.ts +7 -3
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/cosmos-client.js +5 -4
- package/dist/adapters/logger.d.ts +1 -1
- package/dist/adapters/logger.d.ts.map +1 -1
- package/dist/adapters/memQueue.d.ts +8 -21
- package/dist/adapters/memQueue.d.ts.map +1 -1
- package/dist/adapters/memQueue.js +4 -4
- package/dist/adapters/mongo-client.d.ts +6 -6
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.js +5 -4
- package/dist/adapters/redis-client.d.ts +14 -4
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +19 -18
- package/dist/api/ContextProvider.d.ts +10 -15
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/ContextProvider.js +8 -8
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/codec.d.ts.map +1 -1
- package/dist/api/codec.js +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
- package/dist/api/internal/auth.d.ts +3 -3
- package/dist/api/internal/auth.d.ts.map +1 -1
- package/dist/api/internal/auth.js +8 -8
- package/dist/api/internal/events.d.ts +2 -2
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +9 -9
- package/dist/api/internal/health.d.ts +1 -1
- package/dist/api/internal/health.d.ts.map +1 -1
- package/dist/api/internal/health.js +2 -2
- package/dist/api/layerUtils.d.ts +14 -14
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +5 -5
- package/dist/api/middlewares.d.ts +0 -75
- package/dist/api/middlewares.d.ts.map +1 -1
- package/dist/api/middlewares.js +6 -51
- package/dist/api/reportError.js +4 -4
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +4 -4
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.d.ts +6 -7
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +9 -13
- package/dist/api/routing/schema/jwt.d.ts +1 -1
- package/dist/api/routing/schema/jwt.d.ts.map +1 -1
- package/dist/api/routing/schema/jwt.js +5 -4
- package/dist/api/routing/utils.d.ts +2 -2
- package/dist/api/routing/utils.d.ts.map +1 -1
- package/dist/api/routing/utils.js +10 -8
- package/dist/api/routing.d.ts +39 -37
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +17 -21
- package/dist/api/setupRequest.d.ts +4 -6
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +10 -9
- package/dist/arbs.d.ts +3 -3
- package/dist/arbs.d.ts.map +1 -1
- package/dist/arbs.js +2 -2
- package/dist/errorReporter.d.ts +1 -1
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +12 -12
- package/dist/fileUtil.d.ts +6 -6
- package/dist/fileUtil.d.ts.map +1 -1
- package/dist/logger/jsonLogger.d.ts.map +1 -1
- package/dist/logger/jsonLogger.js +19 -18
- package/dist/logger/logFmtLogger.d.ts.map +1 -1
- package/dist/logger/logFmtLogger.js +11 -13
- package/dist/logger/shared.d.ts +2 -2
- package/dist/logger/shared.d.ts.map +1 -1
- package/dist/logger/shared.js +7 -9
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/rateLimit.d.ts +2 -2
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +5 -5
- package/dist/test.d.ts +2 -2
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +6 -24
- package/package.json +19 -22
- package/src/CUPS.ts +15 -14
- package/src/Emailer/Sendgrid.ts +15 -13
- package/src/Emailer/service.ts +3 -3
- package/src/MainFiberSet.ts +16 -12
- package/src/Model/Repository/ext.ts +18 -16
- package/src/Model/Repository/internal/internal.ts +80 -69
- package/src/Model/Repository/legacy.ts +9 -9
- package/src/Model/Repository/makeRepo.ts +5 -5
- package/src/Model/Repository/service.ts +12 -12
- package/src/Model/Repository/validation.ts +1 -1
- package/src/Model/query/dsl.ts +13 -13
- package/src/Model/query/new-kid-interpreter.ts +8 -8
- package/src/Operations.ts +17 -14
- package/src/OperationsRepo.ts +3 -4
- package/src/QueueMaker/SQLQueue.ts +86 -89
- package/src/QueueMaker/errors.ts +1 -1
- package/src/QueueMaker/memQueue.ts +90 -91
- package/src/QueueMaker/sbqueue.ts +90 -92
- package/src/RequestContext.ts +3 -3
- package/src/RequestFiberSet.ts +17 -15
- package/src/Store/ContextMapContainer.ts +4 -4
- package/src/Store/Cosmos.ts +20 -27
- package/src/Store/Disk.ts +13 -17
- package/src/Store/Memory.ts +28 -34
- package/src/Store/index.ts +1 -1
- package/src/Store/service.ts +4 -4
- package/src/Store/utils.ts +9 -5
- package/src/adapters/SQL/Model.ts +255 -268
- package/src/adapters/ServiceBus.ts +17 -20
- package/src/adapters/cosmos-client.ts +5 -5
- package/src/adapters/memQueue.ts +3 -3
- package/src/adapters/mongo-client.ts +5 -5
- package/src/adapters/redis-client.ts +25 -19
- package/src/api/ContextProvider.ts +24 -34
- package/src/api/codec.ts +1 -1
- package/src/api/internal/auth.ts +11 -13
- package/src/api/internal/events.ts +11 -11
- package/src/api/internal/health.ts +1 -1
- package/src/api/layerUtils.ts +20 -20
- package/src/api/middlewares.ts +0 -97
- package/src/api/reportError.ts +3 -3
- package/src/api/routing/middleware/RouterMiddleware.ts +5 -6
- package/src/api/routing/middleware/middleware.ts +13 -25
- package/src/api/routing/schema/jwt.ts +9 -7
- package/src/api/routing/utils.ts +12 -10
- package/src/api/routing.ts +77 -79
- package/src/api/setupRequest.ts +9 -8
- package/src/arbs.ts +3 -3
- package/src/errorReporter.ts +12 -12
- package/src/logger/jsonLogger.ts +18 -17
- package/src/logger/logFmtLogger.ts +10 -12
- package/src/logger/shared.ts +6 -8
- package/src/rateLimit.ts +7 -7
- package/src/test.ts +7 -29
- package/test/contextProvider.test.ts +77 -70
- package/test/controller.test.ts +51 -39
- package/test/dist/contextProvider.test.d.ts.map +1 -1
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/fixtures.d.ts +33 -81
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +9 -8
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/dist/rawQuery.test.d.ts.map +1 -1
- package/test/dist/requires.test.d.ts.map +1 -1
- package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
- package/test/fixtures.ts +9 -7
- package/test/query.test.ts +49 -41
- package/test/rawQuery.test.ts +44 -40
- package/test/requires.test.ts +40 -31
- package/test/rpc-multi-middleware.test.ts +13 -14
- package/test/validateSample.test.ts +2 -2
- package/tsconfig.json +1 -27
- package/dist/api/internal/middlewares.d.ts +0 -15
- package/dist/api/internal/middlewares.d.ts.map +0 -1
- package/dist/api/internal/middlewares.js +0 -168
- package/src/api/internal/middlewares.ts +0 -279
|
@@ -7,19 +7,22 @@
|
|
|
7
7
|
/**
|
|
8
8
|
* @since 1.0.0
|
|
9
9
|
*/
|
|
10
|
-
import * as
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import * as
|
|
14
|
-
import * as SqlSchema from "@effect/sql/SqlSchema"
|
|
10
|
+
import * as VariantSchema from "effect/unstable/schema/VariantSchema"
|
|
11
|
+
import { SqlClient } from "effect/unstable/sql/SqlClient"
|
|
12
|
+
import * as SqlResolver from "effect/unstable/sql/SqlResolver"
|
|
13
|
+
import * as SqlSchema from "effect/unstable/sql/SqlSchema"
|
|
15
14
|
import crypto from "crypto" // TODO
|
|
16
15
|
import type { Brand } from "effect/Brand"
|
|
17
16
|
import * as DateTime from "effect/DateTime"
|
|
18
|
-
import type {
|
|
17
|
+
import type { Input } from "effect/Duration"
|
|
19
18
|
import * as Effect from "effect/Effect"
|
|
19
|
+
import { identity } from "effect/Function"
|
|
20
20
|
import * as Option from "effect/Option"
|
|
21
|
-
import * as
|
|
21
|
+
import * as Predicate from "effect/Predicate"
|
|
22
|
+
import * as RequestResolver from "effect/RequestResolver"
|
|
22
23
|
import * as Schema from "effect/Schema"
|
|
24
|
+
import * as Getter from "effect/SchemaGetter"
|
|
25
|
+
import * as Transformation from "effect/SchemaTransformation"
|
|
23
26
|
import type { Scope } from "effect/Scope"
|
|
24
27
|
|
|
25
28
|
const {
|
|
@@ -30,8 +33,7 @@ const {
|
|
|
30
33
|
Struct,
|
|
31
34
|
Union,
|
|
32
35
|
extract,
|
|
33
|
-
fieldEvolve
|
|
34
|
-
fieldFromKey
|
|
36
|
+
fieldEvolve
|
|
35
37
|
} = VariantSchema.make({
|
|
36
38
|
variants: ["select", "insert", "update", "json", "jsonCreate", "jsonUpdate"],
|
|
37
39
|
defaultVariant: "select"
|
|
@@ -41,26 +43,13 @@ const {
|
|
|
41
43
|
* @since 1.0.0
|
|
42
44
|
* @category models
|
|
43
45
|
*/
|
|
44
|
-
export type Any = Schema.
|
|
45
|
-
readonly fields: Schema.Struct.Fields
|
|
46
|
-
readonly insert: Schema.Schema.Any
|
|
47
|
-
readonly update: Schema.Schema.Any
|
|
48
|
-
readonly json: Schema.Schema.Any
|
|
49
|
-
readonly jsonCreate: Schema.Schema.Any
|
|
50
|
-
readonly jsonUpdate: Schema.Schema.Any
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @since 1.0.0
|
|
55
|
-
* @category models
|
|
56
|
-
*/
|
|
57
|
-
export type AnyNoContext = Schema.Schema.AnyNoContext & {
|
|
46
|
+
export type Any = Schema.Top & {
|
|
58
47
|
readonly fields: Schema.Struct.Fields
|
|
59
|
-
readonly insert: Schema.
|
|
60
|
-
readonly update: Schema.
|
|
61
|
-
readonly json: Schema.
|
|
62
|
-
readonly jsonCreate: Schema.
|
|
63
|
-
readonly jsonUpdate: Schema.
|
|
48
|
+
readonly insert: Schema.Top
|
|
49
|
+
readonly update: Schema.Top
|
|
50
|
+
readonly json: Schema.Top
|
|
51
|
+
readonly jsonCreate: Schema.Top
|
|
52
|
+
readonly jsonUpdate: Schema.Top
|
|
64
53
|
}
|
|
65
54
|
|
|
66
55
|
/**
|
|
@@ -84,14 +73,14 @@ export {
|
|
|
84
73
|
* @since 1.0.0
|
|
85
74
|
* @category constructors
|
|
86
75
|
* @example
|
|
87
|
-
* import { Schema } from "effect
|
|
88
|
-
* import { Model } from "
|
|
76
|
+
* import { Schema } from "effect"
|
|
77
|
+
* import { Model } from "effect/unstable/schema"
|
|
89
78
|
*
|
|
90
79
|
* export const GroupId = Schema.Number.pipe(Schema.brand("GroupId"))
|
|
91
80
|
*
|
|
92
81
|
* export class Group extends Model.Class<Group>("Group")({
|
|
93
82
|
* id: Model.Generated(GroupId),
|
|
94
|
-
* name: Schema.
|
|
83
|
+
* name: Schema.String,
|
|
95
84
|
* createdAt: Model.DateTimeInsertFromDate,
|
|
96
85
|
* updatedAt: Model.DateTimeUpdateFromDate
|
|
97
86
|
* }) {}
|
|
@@ -138,11 +127,6 @@ export {
|
|
|
138
127
|
* @category fields
|
|
139
128
|
*/
|
|
140
129
|
FieldExcept,
|
|
141
|
-
/**
|
|
142
|
-
* @since 1.0.0
|
|
143
|
-
* @category fields
|
|
144
|
-
*/
|
|
145
|
-
fieldFromKey,
|
|
146
130
|
/**
|
|
147
131
|
* @since 1.0.0
|
|
148
132
|
* @category fields
|
|
@@ -164,7 +148,8 @@ export {
|
|
|
164
148
|
* @since 1.0.0
|
|
165
149
|
* @category fields
|
|
166
150
|
*/
|
|
167
|
-
export const fields: <A extends VariantSchema.Struct<any>>(self: A) => A[VariantSchema.TypeId] =
|
|
151
|
+
export const fields: <A extends VariantSchema.Struct<any>>(self: A) => A[typeof VariantSchema.TypeId] =
|
|
152
|
+
VariantSchema.fields
|
|
168
153
|
|
|
169
154
|
/**
|
|
170
155
|
* @since 1.0.0
|
|
@@ -176,7 +161,7 @@ export const Override: <A>(value: A) => A & Brand<"Override"> = VariantSchema.Ov
|
|
|
176
161
|
* @since 1.0.0
|
|
177
162
|
* @category generated
|
|
178
163
|
*/
|
|
179
|
-
export interface Generated<S extends Schema.
|
|
164
|
+
export interface Generated<S extends Schema.Top> extends
|
|
180
165
|
VariantSchema.Field<{
|
|
181
166
|
readonly select: S
|
|
182
167
|
readonly update: S
|
|
@@ -192,7 +177,7 @@ export interface Generated<S extends Schema.Schema.All | Schema.PropertySignatur
|
|
|
192
177
|
* @since 1.0.0
|
|
193
178
|
* @category generated
|
|
194
179
|
*/
|
|
195
|
-
export const Generated = <S extends Schema.
|
|
180
|
+
export const Generated = <S extends Schema.Top>(
|
|
196
181
|
schema: S
|
|
197
182
|
): Generated<S> =>
|
|
198
183
|
Field({
|
|
@@ -205,7 +190,7 @@ export const Generated = <S extends Schema.Schema.All | Schema.PropertySignature
|
|
|
205
190
|
* @since 1.0.0
|
|
206
191
|
* @category generated
|
|
207
192
|
*/
|
|
208
|
-
export interface GeneratedByApp<S extends Schema.
|
|
193
|
+
export interface GeneratedByApp<S extends Schema.Top>
|
|
209
194
|
extends
|
|
210
195
|
VariantSchema.Field<{
|
|
211
196
|
readonly select: S
|
|
@@ -223,7 +208,7 @@ export interface GeneratedByApp<S extends Schema.Schema.All | Schema.PropertySig
|
|
|
223
208
|
* @since 1.0.0
|
|
224
209
|
* @category generated
|
|
225
210
|
*/
|
|
226
|
-
export const GeneratedByApp = <S extends Schema.
|
|
211
|
+
export const GeneratedByApp = <S extends Schema.Top>(
|
|
227
212
|
schema: S
|
|
228
213
|
): GeneratedByApp<S> =>
|
|
229
214
|
Field({
|
|
@@ -237,7 +222,7 @@ export const GeneratedByApp = <S extends Schema.Schema.All | Schema.PropertySign
|
|
|
237
222
|
* @since 1.0.0
|
|
238
223
|
* @category sensitive
|
|
239
224
|
*/
|
|
240
|
-
export interface Sensitive<S extends Schema.
|
|
225
|
+
export interface Sensitive<S extends Schema.Top> extends
|
|
241
226
|
VariantSchema.Field<{
|
|
242
227
|
readonly select: S
|
|
243
228
|
readonly insert: S
|
|
@@ -252,7 +237,7 @@ export interface Sensitive<S extends Schema.Schema.All | Schema.PropertySignatur
|
|
|
252
237
|
* @since 1.0.0
|
|
253
238
|
* @category sensitive
|
|
254
239
|
*/
|
|
255
|
-
export const Sensitive = <S extends Schema.
|
|
240
|
+
export const Sensitive = <S extends Schema.Top>(
|
|
256
241
|
schema: S
|
|
257
242
|
): Sensitive<S> =>
|
|
258
243
|
Field({
|
|
@@ -261,6 +246,29 @@ export const Sensitive = <S extends Schema.Schema.All | Schema.PropertySignature
|
|
|
261
246
|
update: schema
|
|
262
247
|
})
|
|
263
248
|
|
|
249
|
+
/**
|
|
250
|
+
* @since 1.0.0
|
|
251
|
+
* @category optional
|
|
252
|
+
*/
|
|
253
|
+
export interface optionalOption<S extends Schema.Top>
|
|
254
|
+
extends Schema.decodeTo<Schema.Option<Schema.toType<S>>, Schema.optionalKey<Schema.NullOr<S>>>
|
|
255
|
+
{}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* @since 1.0.0
|
|
259
|
+
* @category optional
|
|
260
|
+
*/
|
|
261
|
+
export const optionalOption = <S extends Schema.Top>(schema: S): optionalOption<S> =>
|
|
262
|
+
Schema.optionalKey(Schema.NullOr(schema)).pipe(
|
|
263
|
+
Schema.decodeTo(
|
|
264
|
+
Schema.Option(Schema.toType(schema)),
|
|
265
|
+
Transformation.transformOptional<Option.Option<S["Type"]>, S["Type"] | null>({
|
|
266
|
+
decode: (oe) => oe.pipe(Option.filter(Predicate.isNotNull), Option.some),
|
|
267
|
+
encode: Option.flatten
|
|
268
|
+
}) as any
|
|
269
|
+
)
|
|
270
|
+
)
|
|
271
|
+
|
|
264
272
|
/**
|
|
265
273
|
* Convert a field to one that is optional for all variants.
|
|
266
274
|
*
|
|
@@ -270,14 +278,14 @@ export const Sensitive = <S extends Schema.Schema.All | Schema.PropertySignature
|
|
|
270
278
|
* @since 1.0.0
|
|
271
279
|
* @category optional
|
|
272
280
|
*/
|
|
273
|
-
export interface FieldOption<S extends Schema.
|
|
281
|
+
export interface FieldOption<S extends Schema.Top> extends
|
|
274
282
|
VariantSchema.Field<{
|
|
275
283
|
readonly select: Schema.OptionFromNullOr<S>
|
|
276
284
|
readonly insert: Schema.OptionFromNullOr<S>
|
|
277
285
|
readonly update: Schema.OptionFromNullOr<S>
|
|
278
|
-
readonly json:
|
|
279
|
-
readonly jsonCreate:
|
|
280
|
-
readonly jsonUpdate:
|
|
286
|
+
readonly json: optionalOption<S>
|
|
287
|
+
readonly jsonCreate: optionalOption<S>
|
|
288
|
+
readonly jsonUpdate: optionalOption<S>
|
|
281
289
|
}>
|
|
282
290
|
{}
|
|
283
291
|
|
|
@@ -290,14 +298,14 @@ export interface FieldOption<S extends Schema.Schema.Any> extends
|
|
|
290
298
|
* @since 1.0.0
|
|
291
299
|
* @category optional
|
|
292
300
|
*/
|
|
293
|
-
export const FieldOption: <Field extends VariantSchema.Field<any> | Schema.
|
|
301
|
+
export const FieldOption: <Field extends VariantSchema.Field<any> | Schema.Top>(
|
|
294
302
|
self: Field
|
|
295
|
-
) => Field extends Schema.
|
|
303
|
+
) => Field extends Schema.Top ? FieldOption<Field>
|
|
296
304
|
: Field extends VariantSchema.Field<infer S> ? VariantSchema.Field<
|
|
297
305
|
{
|
|
298
|
-
readonly [K in keyof S]: S[K] extends Schema.
|
|
306
|
+
readonly [K in keyof S]: S[K] extends Schema.Top
|
|
299
307
|
? K extends VariantsDatabase ? Schema.OptionFromNullOr<S[K]>
|
|
300
|
-
:
|
|
308
|
+
: optionalOption<S[K]>
|
|
301
309
|
: never
|
|
302
310
|
}
|
|
303
311
|
>
|
|
@@ -305,40 +313,16 @@ export const FieldOption: <Field extends VariantSchema.Field<any> | Schema.Schem
|
|
|
305
313
|
select: Schema.OptionFromNullOr,
|
|
306
314
|
insert: Schema.OptionFromNullOr,
|
|
307
315
|
update: Schema.OptionFromNullOr,
|
|
308
|
-
json:
|
|
309
|
-
jsonCreate:
|
|
310
|
-
jsonUpdate:
|
|
316
|
+
json: optionalOption,
|
|
317
|
+
jsonCreate: optionalOption,
|
|
318
|
+
jsonUpdate: optionalOption
|
|
311
319
|
}) as any
|
|
312
320
|
|
|
313
321
|
/**
|
|
314
322
|
* @since 1.0.0
|
|
315
323
|
* @category date & time
|
|
316
324
|
*/
|
|
317
|
-
export interface
|
|
318
|
-
Schema.transform<
|
|
319
|
-
typeof Schema.ValidDateFromSelf,
|
|
320
|
-
typeof Schema.DateTimeUtcFromSelf
|
|
321
|
-
>
|
|
322
|
-
{}
|
|
323
|
-
|
|
324
|
-
/**
|
|
325
|
-
* @since 1.0.0
|
|
326
|
-
* @category date & time
|
|
327
|
-
*/
|
|
328
|
-
export const DateTimeFromDate: DateTimeFromDate = Schema.transform(
|
|
329
|
-
Schema.ValidDateFromSelf,
|
|
330
|
-
Schema.DateTimeUtcFromSelf,
|
|
331
|
-
{
|
|
332
|
-
decode: DateTime.unsafeFromDate,
|
|
333
|
-
encode: DateTime.toDateUtc
|
|
334
|
-
}
|
|
335
|
-
)
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* @since 1.0.0
|
|
339
|
-
* @category date & time
|
|
340
|
-
*/
|
|
341
|
-
export interface Date extends Schema.transformOrFail<typeof Schema.String, typeof Schema.DateTimeUtcFromSelf> {}
|
|
325
|
+
export interface Date extends Schema.decodeTo<Schema.instanceOf<DateTime.Utc>, Schema.String> {}
|
|
342
326
|
|
|
343
327
|
/**
|
|
344
328
|
* A schema for a `DateTime.Utc` that is serialized as a date string in the
|
|
@@ -347,64 +331,43 @@ export interface Date extends Schema.transformOrFail<typeof Schema.String, typeo
|
|
|
347
331
|
* @since 1.0.0
|
|
348
332
|
* @category date & time
|
|
349
333
|
*/
|
|
350
|
-
export const Date: Date = Schema.
|
|
351
|
-
Schema.
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
DateTime.make(s).pipe(
|
|
356
|
-
Option.map(DateTime.removeTime),
|
|
357
|
-
Option.match({
|
|
358
|
-
onNone: () => ParseResult.fail(new ParseResult.Type(ast, s)),
|
|
359
|
-
onSome: (dt) => ParseResult.succeed(dt)
|
|
360
|
-
})
|
|
361
|
-
),
|
|
362
|
-
encode: (dt) => ParseResult.succeed(DateTime.formatIsoDate(dt))
|
|
363
|
-
}
|
|
334
|
+
export const Date: Date = Schema.String.pipe(
|
|
335
|
+
Schema.decodeTo(Schema.DateTimeUtc, {
|
|
336
|
+
decode: Getter.dateTimeUtcFromInput().map(DateTime.removeTime),
|
|
337
|
+
encode: Getter.transform(DateTime.formatIsoDate)
|
|
338
|
+
})
|
|
364
339
|
)
|
|
365
340
|
|
|
366
341
|
/**
|
|
367
342
|
* @since 1.0.0
|
|
368
343
|
* @category date & time
|
|
369
344
|
*/
|
|
370
|
-
export const DateWithNow = VariantSchema.Overrideable(Date,
|
|
371
|
-
|
|
372
|
-
onNone: () => Effect.map(DateTime.now, DateTime.removeTime),
|
|
373
|
-
onSome: (dt) => Effect.succeed(DateTime.removeTime(dt))
|
|
374
|
-
})
|
|
345
|
+
export const DateWithNow = VariantSchema.Overrideable(Date, {
|
|
346
|
+
defaultValue: Effect.map(DateTime.now, DateTime.removeTime)
|
|
375
347
|
})
|
|
376
348
|
|
|
377
349
|
/**
|
|
378
350
|
* @since 1.0.0
|
|
379
351
|
* @category date & time
|
|
380
352
|
*/
|
|
381
|
-
export const DateTimeWithNow = VariantSchema.Overrideable(Schema.
|
|
382
|
-
|
|
383
|
-
onNone: () => Effect.map(DateTime.now, DateTime.formatIso),
|
|
384
|
-
onSome: (dt) => Effect.succeed(DateTime.formatIso(dt))
|
|
385
|
-
})
|
|
353
|
+
export const DateTimeWithNow = VariantSchema.Overrideable(Schema.DateTimeUtcFromString, {
|
|
354
|
+
defaultValue: DateTime.now
|
|
386
355
|
})
|
|
387
356
|
|
|
388
357
|
/**
|
|
389
358
|
* @since 1.0.0
|
|
390
359
|
* @category date & time
|
|
391
360
|
*/
|
|
392
|
-
export const DateTimeFromDateWithNow = VariantSchema.Overrideable(Schema.
|
|
393
|
-
|
|
394
|
-
onNone: () => Effect.map(DateTime.now, DateTime.toDateUtc),
|
|
395
|
-
onSome: (dt) => Effect.succeed(DateTime.toDateUtc(dt))
|
|
396
|
-
})
|
|
361
|
+
export const DateTimeFromDateWithNow = VariantSchema.Overrideable(Schema.DateTimeUtcFromDate, {
|
|
362
|
+
defaultValue: DateTime.now
|
|
397
363
|
})
|
|
398
364
|
|
|
399
365
|
/**
|
|
400
366
|
* @since 1.0.0
|
|
401
367
|
* @category date & time
|
|
402
368
|
*/
|
|
403
|
-
export const DateTimeFromNumberWithNow = VariantSchema.Overrideable(Schema.
|
|
404
|
-
|
|
405
|
-
onNone: () => Effect.map(DateTime.now, DateTime.toEpochMillis),
|
|
406
|
-
onSome: (dt) => Effect.succeed(DateTime.toEpochMillis(dt))
|
|
407
|
-
})
|
|
369
|
+
export const DateTimeFromNumberWithNow = VariantSchema.Overrideable(Schema.DateTimeUtcFromMillis, {
|
|
370
|
+
defaultValue: DateTime.now
|
|
408
371
|
})
|
|
409
372
|
|
|
410
373
|
/**
|
|
@@ -413,9 +376,9 @@ export const DateTimeFromNumberWithNow = VariantSchema.Overrideable(Schema.Numbe
|
|
|
413
376
|
*/
|
|
414
377
|
export interface DateTimeInsert extends
|
|
415
378
|
VariantSchema.Field<{
|
|
416
|
-
readonly select:
|
|
417
|
-
readonly insert: VariantSchema.Overrideable<
|
|
418
|
-
readonly json:
|
|
379
|
+
readonly select: Schema.DateTimeUtcFromString
|
|
380
|
+
readonly insert: VariantSchema.Overrideable<Schema.DateTimeUtcFromString>
|
|
381
|
+
readonly json: Schema.DateTimeUtcFromString
|
|
419
382
|
}>
|
|
420
383
|
{}
|
|
421
384
|
|
|
@@ -429,9 +392,9 @@ export interface DateTimeInsert extends
|
|
|
429
392
|
* @category date & time
|
|
430
393
|
*/
|
|
431
394
|
export const DateTimeInsert: DateTimeInsert = Field({
|
|
432
|
-
select: Schema.
|
|
395
|
+
select: Schema.DateTimeUtcFromString,
|
|
433
396
|
insert: DateTimeWithNow,
|
|
434
|
-
json: Schema.
|
|
397
|
+
json: Schema.DateTimeUtcFromString
|
|
435
398
|
})
|
|
436
399
|
|
|
437
400
|
/**
|
|
@@ -440,9 +403,9 @@ export const DateTimeInsert: DateTimeInsert = Field({
|
|
|
440
403
|
*/
|
|
441
404
|
export interface DateTimeInsertFromDate extends
|
|
442
405
|
VariantSchema.Field<{
|
|
443
|
-
readonly select:
|
|
444
|
-
readonly insert: VariantSchema.Overrideable<
|
|
445
|
-
readonly json:
|
|
406
|
+
readonly select: Schema.DateTimeUtcFromDate
|
|
407
|
+
readonly insert: VariantSchema.Overrideable<Schema.DateTimeUtcFromDate>
|
|
408
|
+
readonly json: Schema.DateTimeUtcFromString
|
|
446
409
|
}>
|
|
447
410
|
{}
|
|
448
411
|
|
|
@@ -456,9 +419,9 @@ export interface DateTimeInsertFromDate extends
|
|
|
456
419
|
* @category date & time
|
|
457
420
|
*/
|
|
458
421
|
export const DateTimeInsertFromDate: DateTimeInsertFromDate = Field({
|
|
459
|
-
select:
|
|
422
|
+
select: Schema.DateTimeUtcFromDate,
|
|
460
423
|
insert: DateTimeFromDateWithNow,
|
|
461
|
-
json: Schema.
|
|
424
|
+
json: Schema.DateTimeUtcFromString
|
|
462
425
|
})
|
|
463
426
|
|
|
464
427
|
/**
|
|
@@ -467,9 +430,9 @@ export const DateTimeInsertFromDate: DateTimeInsertFromDate = Field({
|
|
|
467
430
|
*/
|
|
468
431
|
export interface DateTimeInsertFromNumber extends
|
|
469
432
|
VariantSchema.Field<{
|
|
470
|
-
readonly select:
|
|
471
|
-
readonly insert: VariantSchema.Overrideable<
|
|
472
|
-
readonly json:
|
|
433
|
+
readonly select: Schema.DateTimeUtcFromMillis
|
|
434
|
+
readonly insert: VariantSchema.Overrideable<Schema.DateTimeUtcFromMillis>
|
|
435
|
+
readonly json: Schema.DateTimeUtcFromMillis
|
|
473
436
|
}>
|
|
474
437
|
{}
|
|
475
438
|
|
|
@@ -483,9 +446,9 @@ export interface DateTimeInsertFromNumber extends
|
|
|
483
446
|
* @category date & time
|
|
484
447
|
*/
|
|
485
448
|
export const DateTimeInsertFromNumber: DateTimeInsertFromNumber = Field({
|
|
486
|
-
select: Schema.
|
|
449
|
+
select: Schema.DateTimeUtcFromMillis,
|
|
487
450
|
insert: DateTimeFromNumberWithNow,
|
|
488
|
-
json: Schema.
|
|
451
|
+
json: Schema.DateTimeUtcFromMillis
|
|
489
452
|
})
|
|
490
453
|
|
|
491
454
|
/**
|
|
@@ -494,10 +457,10 @@ export const DateTimeInsertFromNumber: DateTimeInsertFromNumber = Field({
|
|
|
494
457
|
*/
|
|
495
458
|
export interface DateTimeUpdate extends
|
|
496
459
|
VariantSchema.Field<{
|
|
497
|
-
readonly select:
|
|
498
|
-
readonly insert: VariantSchema.Overrideable<
|
|
499
|
-
readonly update: VariantSchema.Overrideable<
|
|
500
|
-
readonly json:
|
|
460
|
+
readonly select: Schema.DateTimeUtcFromString
|
|
461
|
+
readonly insert: VariantSchema.Overrideable<Schema.DateTimeUtcFromString>
|
|
462
|
+
readonly update: VariantSchema.Overrideable<Schema.DateTimeUtcFromString>
|
|
463
|
+
readonly json: Schema.DateTimeUtcFromString
|
|
501
464
|
}>
|
|
502
465
|
{}
|
|
503
466
|
|
|
@@ -512,10 +475,10 @@ export interface DateTimeUpdate extends
|
|
|
512
475
|
* @category date & time
|
|
513
476
|
*/
|
|
514
477
|
export const DateTimeUpdate: DateTimeUpdate = Field({
|
|
515
|
-
select: Schema.
|
|
478
|
+
select: Schema.DateTimeUtcFromString,
|
|
516
479
|
insert: DateTimeWithNow,
|
|
517
480
|
update: DateTimeWithNow,
|
|
518
|
-
json: Schema.
|
|
481
|
+
json: Schema.DateTimeUtcFromString
|
|
519
482
|
})
|
|
520
483
|
|
|
521
484
|
/**
|
|
@@ -524,10 +487,10 @@ export const DateTimeUpdate: DateTimeUpdate = Field({
|
|
|
524
487
|
*/
|
|
525
488
|
export interface DateTimeUpdateFromDate extends
|
|
526
489
|
VariantSchema.Field<{
|
|
527
|
-
readonly select:
|
|
528
|
-
readonly insert: VariantSchema.Overrideable<
|
|
529
|
-
readonly update: VariantSchema.Overrideable<
|
|
530
|
-
readonly json:
|
|
490
|
+
readonly select: Schema.DateTimeUtcFromDate
|
|
491
|
+
readonly insert: VariantSchema.Overrideable<Schema.DateTimeUtcFromDate>
|
|
492
|
+
readonly update: VariantSchema.Overrideable<Schema.DateTimeUtcFromDate>
|
|
493
|
+
readonly json: Schema.DateTimeUtcFromString
|
|
531
494
|
}>
|
|
532
495
|
{}
|
|
533
496
|
|
|
@@ -542,10 +505,10 @@ export interface DateTimeUpdateFromDate extends
|
|
|
542
505
|
* @category date & time
|
|
543
506
|
*/
|
|
544
507
|
export const DateTimeUpdateFromDate: DateTimeUpdateFromDate = Field({
|
|
545
|
-
select:
|
|
508
|
+
select: Schema.DateTimeUtcFromDate,
|
|
546
509
|
insert: DateTimeFromDateWithNow,
|
|
547
510
|
update: DateTimeFromDateWithNow,
|
|
548
|
-
json: Schema.
|
|
511
|
+
json: Schema.DateTimeUtcFromString
|
|
549
512
|
})
|
|
550
513
|
|
|
551
514
|
/**
|
|
@@ -554,10 +517,10 @@ export const DateTimeUpdateFromDate: DateTimeUpdateFromDate = Field({
|
|
|
554
517
|
*/
|
|
555
518
|
export interface DateTimeUpdateFromNumber extends
|
|
556
519
|
VariantSchema.Field<{
|
|
557
|
-
readonly select:
|
|
558
|
-
readonly insert: VariantSchema.Overrideable<
|
|
559
|
-
readonly update: VariantSchema.Overrideable<
|
|
560
|
-
readonly json:
|
|
520
|
+
readonly select: Schema.DateTimeUtcFromMillis
|
|
521
|
+
readonly insert: VariantSchema.Overrideable<Schema.DateTimeUtcFromMillis>
|
|
522
|
+
readonly update: VariantSchema.Overrideable<Schema.DateTimeUtcFromMillis>
|
|
523
|
+
readonly json: Schema.DateTimeUtcFromMillis
|
|
561
524
|
}>
|
|
562
525
|
{}
|
|
563
526
|
|
|
@@ -572,22 +535,22 @@ export interface DateTimeUpdateFromNumber extends
|
|
|
572
535
|
* @category date & time
|
|
573
536
|
*/
|
|
574
537
|
export const DateTimeUpdateFromNumber: DateTimeUpdateFromNumber = Field({
|
|
575
|
-
select: Schema.
|
|
538
|
+
select: Schema.DateTimeUtcFromMillis,
|
|
576
539
|
insert: DateTimeFromNumberWithNow,
|
|
577
540
|
update: DateTimeFromNumberWithNow,
|
|
578
|
-
json: Schema.
|
|
541
|
+
json: Schema.DateTimeUtcFromMillis
|
|
579
542
|
})
|
|
580
543
|
|
|
581
544
|
/**
|
|
582
545
|
* @since 1.0.0
|
|
583
546
|
* @category json
|
|
584
547
|
*/
|
|
585
|
-
export interface JsonFromString<S extends Schema.
|
|
548
|
+
export interface JsonFromString<S extends Schema.Top>
|
|
586
549
|
extends
|
|
587
550
|
VariantSchema.Field<{
|
|
588
|
-
readonly select: Schema.
|
|
589
|
-
readonly insert: Schema.
|
|
590
|
-
readonly update: Schema.
|
|
551
|
+
readonly select: Schema.fromJsonString<S>
|
|
552
|
+
readonly insert: Schema.fromJsonString<S>
|
|
553
|
+
readonly update: Schema.fromJsonString<S>
|
|
591
554
|
readonly json: S
|
|
592
555
|
readonly jsonCreate: S
|
|
593
556
|
readonly jsonUpdate: S
|
|
@@ -602,10 +565,10 @@ export interface JsonFromString<S extends Schema.Schema.All | Schema.PropertySig
|
|
|
602
565
|
* @since 1.0.0
|
|
603
566
|
* @category json
|
|
604
567
|
*/
|
|
605
|
-
export const JsonFromString = <S extends Schema.
|
|
568
|
+
export const JsonFromString = <S extends Schema.Top>(
|
|
606
569
|
schema: S
|
|
607
570
|
): JsonFromString<S> => {
|
|
608
|
-
const parsed = Schema.
|
|
571
|
+
const parsed = Schema.fromJsonString(schema)
|
|
609
572
|
return Field({
|
|
610
573
|
select: parsed,
|
|
611
574
|
insert: parsed,
|
|
@@ -613,7 +576,7 @@ export const JsonFromString = <S extends Schema.Schema.All | Schema.PropertySign
|
|
|
613
576
|
json: schema,
|
|
614
577
|
jsonCreate: schema,
|
|
615
578
|
jsonUpdate: schema
|
|
616
|
-
})
|
|
579
|
+
})
|
|
617
580
|
}
|
|
618
581
|
|
|
619
582
|
/**
|
|
@@ -634,80 +597,79 @@ export const makeRepository = <
|
|
|
634
597
|
{
|
|
635
598
|
readonly insert: (
|
|
636
599
|
insert: S["insert"]["Type"]
|
|
637
|
-
) => Effect.Effect<S["Type"],
|
|
600
|
+
) => Effect.Effect<S["Type"], Schema.SchemaError, S["DecodingServices"] | S["insert"]["EncodingServices"]>
|
|
638
601
|
readonly insertVoid: (
|
|
639
602
|
insert: S["insert"]["Type"]
|
|
640
|
-
) => Effect.Effect<void,
|
|
603
|
+
) => Effect.Effect<void, Schema.SchemaError, S["insert"]["EncodingServices"]>
|
|
641
604
|
readonly update: (
|
|
642
605
|
update: S["update"]["Type"]
|
|
643
|
-
) => Effect.Effect<S["Type"],
|
|
606
|
+
) => Effect.Effect<S["Type"], Schema.SchemaError, S["DecodingServices"] | S["update"]["EncodingServices"]>
|
|
644
607
|
readonly updateVoid: (
|
|
645
608
|
update: S["update"]["Type"]
|
|
646
|
-
) => Effect.Effect<void,
|
|
609
|
+
) => Effect.Effect<void, Schema.SchemaError, S["update"]["EncodingServices"]>
|
|
647
610
|
readonly findById: (
|
|
648
|
-
id:
|
|
649
|
-
) => Effect.Effect<
|
|
611
|
+
id: S["fields"][Id]["Type"]
|
|
612
|
+
) => Effect.Effect<
|
|
613
|
+
Option.Option<S["Type"]>,
|
|
614
|
+
Schema.SchemaError,
|
|
615
|
+
S["DecodingServices"] | S["fields"][Id]["EncodingServices"]
|
|
616
|
+
>
|
|
650
617
|
readonly delete: (
|
|
651
|
-
id:
|
|
652
|
-
) => Effect.Effect<void,
|
|
618
|
+
id: S["fields"][Id]["Type"]
|
|
619
|
+
) => Effect.Effect<void, Schema.SchemaError, S["fields"][Id]["EncodingServices"]>
|
|
653
620
|
},
|
|
654
621
|
never,
|
|
655
622
|
SqlClient
|
|
656
623
|
> =>
|
|
657
624
|
Effect.gen(function*() {
|
|
658
625
|
const sql = yield* SqlClient
|
|
659
|
-
const idSchema = Model.fields[options.idColumn] as Schema.
|
|
626
|
+
const idSchema = Model.fields[options.idColumn] as Schema.Top
|
|
660
627
|
const idColumn = options.idColumn as string
|
|
661
628
|
const versionColumn = options.versionColumn
|
|
662
629
|
|
|
663
|
-
|
|
664
|
-
// I guess we should hide the versionColumn and insert it in the schema instead
|
|
665
|
-
const insertSchema = SqlSchema.single({
|
|
630
|
+
const insertSchema = SqlSchema.findOne({
|
|
666
631
|
Request: Model.insert,
|
|
667
632
|
Result: Model,
|
|
668
633
|
execute: (request) =>
|
|
669
634
|
sql.onDialectOrElse({
|
|
670
635
|
mysql: () =>
|
|
671
|
-
sql`insert into ${sql(options.tableName)} ${sql.insert(request)};
|
|
636
|
+
sql`insert into ${sql(options.tableName)} ${sql.insert(request as any)};
|
|
672
637
|
select * from ${sql(options.tableName)} where ${sql(idColumn)} = LAST_INSERT_ID();`
|
|
673
638
|
.unprepared
|
|
674
639
|
.pipe(
|
|
675
640
|
Effect.map(([, results]) => results as any)
|
|
676
641
|
),
|
|
677
|
-
orElse: () => sql`insert into ${sql(options.tableName)} ${sql.insert(request).returning("*")}`
|
|
642
|
+
orElse: () => sql`insert into ${sql(options.tableName)} ${sql.insert(request as any).returning("*")}`
|
|
678
643
|
})
|
|
679
644
|
})
|
|
680
645
|
const insert = (
|
|
681
646
|
insert: S["insert"]["Type"]
|
|
682
|
-
): Effect.Effect<S["Type"],
|
|
647
|
+
): Effect.Effect<S["Type"], Schema.SchemaError, S["DecodingServices"] | S["insert"]["EncodingServices"]> =>
|
|
683
648
|
insertSchema(insert).pipe(
|
|
684
|
-
Effect.
|
|
685
|
-
Effect.withSpan(`${options.spanPrefix}.insert`, {
|
|
686
|
-
captureStackTrace: false
|
|
687
|
-
attributes: { insert }
|
|
649
|
+
Effect.catchTag("NoSuchElementError", Effect.die),
|
|
650
|
+
Effect.withSpan(`${options.spanPrefix}.insert`, {}, {
|
|
651
|
+
captureStackTrace: false
|
|
688
652
|
})
|
|
689
653
|
) as any
|
|
690
654
|
|
|
691
655
|
const insertVoidSchema = SqlSchema.void({
|
|
692
656
|
Request: Model.insert,
|
|
693
|
-
execute: (request) => sql`insert into ${sql(options.tableName)} ${sql.insert(request)}`
|
|
657
|
+
execute: (request) => sql`insert into ${sql(options.tableName)} ${sql.insert(request as any)}`
|
|
694
658
|
})
|
|
695
659
|
const insertVoid = (
|
|
696
660
|
insert: S["insert"]["Type"]
|
|
697
|
-
): Effect.Effect<void,
|
|
661
|
+
): Effect.Effect<void, Schema.SchemaError, S["insert"]["EncodingServices"]> =>
|
|
698
662
|
insertVoidSchema(insert).pipe(
|
|
699
|
-
Effect.
|
|
700
|
-
|
|
701
|
-
captureStackTrace: false,
|
|
702
|
-
attributes: { insert }
|
|
663
|
+
Effect.withSpan(`${options.spanPrefix}.insertVoid`, {}, {
|
|
664
|
+
captureStackTrace: false
|
|
703
665
|
})
|
|
704
666
|
) as any
|
|
705
667
|
|
|
706
|
-
const updateSchema = SqlSchema.
|
|
668
|
+
const updateSchema = SqlSchema.findOne({
|
|
707
669
|
Request: Model.update,
|
|
708
670
|
Result: Model,
|
|
709
671
|
execute: versionColumn
|
|
710
|
-
? (request) =>
|
|
672
|
+
? (request: any) =>
|
|
711
673
|
sql.onDialectOrElse({
|
|
712
674
|
mysql: () =>
|
|
713
675
|
sql`update ${sql(options.tableName)} set ${
|
|
@@ -725,7 +687,7 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${request[idCol
|
|
|
725
687
|
request[versionColumn]
|
|
726
688
|
} returning *`
|
|
727
689
|
})
|
|
728
|
-
: (request) =>
|
|
690
|
+
: (request: any) =>
|
|
729
691
|
sql.onDialectOrElse({
|
|
730
692
|
mysql: () =>
|
|
731
693
|
sql`update ${sql(options.tableName)} set ${sql.update(request, [idColumn])} where ${sql(idColumn)} = ${
|
|
@@ -744,66 +706,69 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${request[idCol
|
|
|
744
706
|
})
|
|
745
707
|
const update = (
|
|
746
708
|
update: S["update"]["Type"]
|
|
747
|
-
): Effect.Effect<S["Type"],
|
|
709
|
+
): Effect.Effect<S["Type"], Schema.SchemaError, S["DecodingServices"] | S["update"]["EncodingServices"]> =>
|
|
748
710
|
updateSchema(update).pipe(
|
|
749
|
-
Effect.
|
|
711
|
+
Effect.catchTag("NoSuchElementError", Effect.die),
|
|
750
712
|
Effect.withSpan(`${options.spanPrefix}.update`, {
|
|
751
|
-
|
|
752
|
-
|
|
713
|
+
attributes: { id: (update as any)[idColumn] }
|
|
714
|
+
}, {
|
|
715
|
+
captureStackTrace: false
|
|
753
716
|
})
|
|
754
717
|
) as any
|
|
755
718
|
|
|
756
719
|
const updateVoidSchema = SqlSchema.void({
|
|
757
720
|
Request: Model.update,
|
|
758
721
|
execute: versionColumn
|
|
759
|
-
? (request) =>
|
|
722
|
+
? (request: any) =>
|
|
760
723
|
sql`update ${sql(options.tableName)} set ${
|
|
761
724
|
sql.update({ ...request, [versionColumn]: crypto.randomUUID() }, [idColumn])
|
|
762
725
|
} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]}`
|
|
763
|
-
: (request) =>
|
|
726
|
+
: (request: any) =>
|
|
764
727
|
sql`update ${sql(options.tableName)} set ${sql.update(request, [idColumn])} where ${sql(idColumn)} = ${
|
|
765
728
|
request[idColumn]
|
|
766
729
|
}`
|
|
767
730
|
})
|
|
768
731
|
const updateVoid = (
|
|
769
732
|
update: S["update"]["Type"]
|
|
770
|
-
): Effect.Effect<void,
|
|
733
|
+
): Effect.Effect<void, Schema.SchemaError, S["update"]["EncodingServices"]> =>
|
|
771
734
|
updateVoidSchema(update).pipe(
|
|
772
|
-
Effect.orDie,
|
|
773
735
|
Effect.withSpan(`${options.spanPrefix}.updateVoid`, {
|
|
774
|
-
|
|
775
|
-
|
|
736
|
+
attributes: { id: (update as any)[idColumn] }
|
|
737
|
+
}, {
|
|
738
|
+
captureStackTrace: false
|
|
776
739
|
})
|
|
777
740
|
) as any
|
|
778
741
|
|
|
779
|
-
const findByIdSchema = SqlSchema.
|
|
742
|
+
const findByIdSchema = SqlSchema.findOneOption({
|
|
780
743
|
Request: idSchema,
|
|
781
744
|
Result: Model,
|
|
782
|
-
execute: (id) => sql`select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${id}`
|
|
745
|
+
execute: (id: any) => sql`select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${id}`
|
|
783
746
|
})
|
|
784
747
|
const findById = (
|
|
785
|
-
id:
|
|
786
|
-
): Effect.Effect<
|
|
748
|
+
id: S["fields"][Id]["Type"]
|
|
749
|
+
): Effect.Effect<
|
|
750
|
+
Option.Option<S["Type"]>,
|
|
751
|
+
Schema.SchemaError,
|
|
752
|
+
S["DecodingServices"] | S["fields"][Id]["EncodingServices"]
|
|
753
|
+
> =>
|
|
787
754
|
findByIdSchema(id).pipe(
|
|
788
|
-
Effect.
|
|
789
|
-
|
|
790
|
-
captureStackTrace: false,
|
|
791
|
-
attributes: { id }
|
|
755
|
+
Effect.withSpan(`${options.spanPrefix}.findById`, { attributes: { id } }, {
|
|
756
|
+
captureStackTrace: false
|
|
792
757
|
})
|
|
793
758
|
) as any
|
|
794
759
|
|
|
795
760
|
const deleteSchema = SqlSchema.void({
|
|
796
761
|
Request: idSchema,
|
|
797
|
-
execute: (id) => sql`delete from ${sql(options.tableName)} where ${sql(idColumn)} = ${id}`
|
|
762
|
+
execute: (id: any) => sql`delete from ${sql(options.tableName)} where ${sql(idColumn)} = ${id}`
|
|
798
763
|
})
|
|
799
764
|
const delete_ = (
|
|
800
|
-
id:
|
|
801
|
-
): Effect.Effect<void,
|
|
765
|
+
id: S["fields"][Id]["Type"]
|
|
766
|
+
): Effect.Effect<void, Schema.SchemaError, S["fields"][Id]["EncodingServices"]> =>
|
|
802
767
|
deleteSchema(id).pipe(
|
|
803
|
-
Effect.orDie,
|
|
804
768
|
Effect.withSpan(`${options.spanPrefix}.delete`, {
|
|
805
|
-
captureStackTrace: false,
|
|
806
769
|
attributes: { id }
|
|
770
|
+
}, {
|
|
771
|
+
captureStackTrace: false
|
|
807
772
|
})
|
|
808
773
|
) as any
|
|
809
774
|
|
|
@@ -817,7 +782,7 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${request[idCol
|
|
|
817
782
|
* @category repository
|
|
818
783
|
*/
|
|
819
784
|
export const makeDataLoaders = <
|
|
820
|
-
S extends
|
|
785
|
+
S extends Any,
|
|
821
786
|
Id extends (keyof S["Type"]) & (keyof S["update"]["Type"]) & (keyof S["fields"])
|
|
822
787
|
>(
|
|
823
788
|
Model: S,
|
|
@@ -825,113 +790,135 @@ export const makeDataLoaders = <
|
|
|
825
790
|
readonly tableName: string
|
|
826
791
|
readonly spanPrefix: string
|
|
827
792
|
readonly idColumn: Id
|
|
828
|
-
readonly window:
|
|
793
|
+
readonly window: Input
|
|
829
794
|
readonly maxBatchSize?: number | undefined
|
|
830
795
|
}
|
|
831
796
|
): Effect.Effect<
|
|
832
797
|
{
|
|
833
|
-
readonly insert: (
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
798
|
+
readonly insert: (
|
|
799
|
+
insert: S["insert"]["Type"]
|
|
800
|
+
) => Effect.Effect<
|
|
801
|
+
S["Type"],
|
|
802
|
+
Schema.SchemaError,
|
|
803
|
+
S["DecodingServices"] | S["insert"]["EncodingServices"]
|
|
804
|
+
>
|
|
805
|
+
readonly insertVoid: (
|
|
806
|
+
insert: S["insert"]["Type"]
|
|
807
|
+
) => Effect.Effect<void, Schema.SchemaError, S["insert"]["EncodingServices"]>
|
|
808
|
+
readonly findById: (
|
|
809
|
+
id: S["fields"][Id]["Type"]
|
|
810
|
+
) => Effect.Effect<
|
|
811
|
+
S["Type"],
|
|
812
|
+
Schema.SchemaError,
|
|
813
|
+
S["DecodingServices"] | S["fields"][Id]["EncodingServices"]
|
|
814
|
+
>
|
|
815
|
+
readonly delete: (
|
|
816
|
+
id: S["fields"][Id]["Type"]
|
|
817
|
+
) => Effect.Effect<void, Schema.SchemaError, S["fields"][Id]["EncodingServices"]>
|
|
837
818
|
},
|
|
838
819
|
never,
|
|
839
820
|
SqlClient | Scope
|
|
840
821
|
> =>
|
|
841
822
|
Effect.gen(function*() {
|
|
842
823
|
const sql = yield* SqlClient
|
|
843
|
-
const idSchema = Model.fields[options.idColumn] as Schema.
|
|
824
|
+
const idSchema = Model.fields[options.idColumn] as Schema.Top
|
|
844
825
|
const idColumn = options.idColumn as string
|
|
826
|
+
const setMaxBatchSize = options.maxBatchSize ? RequestResolver.batchN(options.maxBatchSize) : identity
|
|
845
827
|
|
|
846
|
-
const insertResolver =
|
|
828
|
+
const insertResolver = SqlResolver.ordered({
|
|
847
829
|
Request: Model.insert,
|
|
848
830
|
Result: Model,
|
|
849
|
-
execute: (request) =>
|
|
831
|
+
execute: (request: any) =>
|
|
850
832
|
sql.onDialectOrElse({
|
|
851
833
|
mysql: () =>
|
|
852
|
-
Effect.forEach(request, (request) =>
|
|
834
|
+
Effect.forEach(request, (request: any) =>
|
|
853
835
|
sql`insert into ${sql(options.tableName)} ${sql.insert(request)};
|
|
854
836
|
select * from ${sql(options.tableName)} where ${sql(idColumn)} = LAST_INSERT_ID();`
|
|
855
837
|
.unprepared
|
|
856
838
|
.pipe(
|
|
857
|
-
Effect.map(([, results]) => results as any)
|
|
839
|
+
Effect.map(([, results]) => results![0] as any)
|
|
858
840
|
), { concurrency: 10 }),
|
|
859
841
|
orElse: () => sql`insert into ${sql(options.tableName)} ${sql.insert(request).returning("*")}`
|
|
860
842
|
})
|
|
861
|
-
})
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
const insertExecute =
|
|
843
|
+
}).pipe(
|
|
844
|
+
RequestResolver.setDelay(options.window),
|
|
845
|
+
setMaxBatchSize,
|
|
846
|
+
RequestResolver.withSpan(`${options.spanPrefix}.insertResolver`)
|
|
847
|
+
)
|
|
848
|
+
const insertExecute = SqlResolver.request(insertResolver)
|
|
867
849
|
const insert = (
|
|
868
850
|
insert: S["insert"]["Type"]
|
|
869
|
-
): Effect.Effect<
|
|
851
|
+
): Effect.Effect<
|
|
852
|
+
S["Type"],
|
|
853
|
+
Schema.SchemaError,
|
|
854
|
+
S["DecodingServices"] | S["insert"]["EncodingServices"]
|
|
855
|
+
> =>
|
|
870
856
|
insertExecute(insert).pipe(
|
|
871
|
-
Effect.
|
|
872
|
-
Effect.withSpan(`${options.spanPrefix}.insert`, {
|
|
873
|
-
captureStackTrace: false
|
|
874
|
-
attributes: { insert }
|
|
857
|
+
Effect.catchTag("ResultLengthMismatch", Effect.die),
|
|
858
|
+
Effect.withSpan(`${options.spanPrefix}.insert`, {}, {
|
|
859
|
+
captureStackTrace: false
|
|
875
860
|
})
|
|
876
|
-
)
|
|
861
|
+
) as any
|
|
877
862
|
|
|
878
|
-
const insertVoidResolver =
|
|
863
|
+
const insertVoidResolver = SqlResolver.void({
|
|
879
864
|
Request: Model.insert,
|
|
880
|
-
execute: (request) => sql`insert into ${sql(options.tableName)} ${sql.insert(request)}`
|
|
881
|
-
})
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
const insertVoidExecute =
|
|
865
|
+
execute: (request: any) => sql`insert into ${sql(options.tableName)} ${sql.insert(request)}`
|
|
866
|
+
}).pipe(
|
|
867
|
+
RequestResolver.setDelay(options.window),
|
|
868
|
+
setMaxBatchSize,
|
|
869
|
+
RequestResolver.withSpan(`${options.spanPrefix}.insertVoidResolver`)
|
|
870
|
+
)
|
|
871
|
+
const insertVoidExecute = SqlResolver.request(insertVoidResolver)
|
|
887
872
|
const insertVoid = (
|
|
888
873
|
insert: S["insert"]["Type"]
|
|
889
|
-
): Effect.Effect<void,
|
|
874
|
+
): Effect.Effect<void, Schema.SchemaError, S["insert"]["EncodingServices"]> =>
|
|
890
875
|
insertVoidExecute(insert).pipe(
|
|
891
|
-
Effect.
|
|
892
|
-
|
|
893
|
-
captureStackTrace: false,
|
|
894
|
-
attributes: { insert }
|
|
876
|
+
Effect.withSpan(`${options.spanPrefix}.insertVoid`, {}, {
|
|
877
|
+
captureStackTrace: false
|
|
895
878
|
})
|
|
896
|
-
)
|
|
879
|
+
) as any
|
|
897
880
|
|
|
898
|
-
const findByIdResolver =
|
|
881
|
+
const findByIdResolver = SqlResolver.findById({
|
|
899
882
|
Id: idSchema,
|
|
900
883
|
Result: Model,
|
|
901
|
-
ResultId(request) {
|
|
884
|
+
ResultId(request: any) {
|
|
902
885
|
return request[idColumn]
|
|
903
886
|
},
|
|
904
|
-
execute: (ids) => sql`select * from ${sql(options.tableName)} where ${sql.in(idColumn, ids)}`
|
|
905
|
-
})
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
const findByIdExecute =
|
|
911
|
-
const findById = (
|
|
887
|
+
execute: (ids: any) => sql`select * from ${sql(options.tableName)} where ${sql.in(idColumn, ids)}`
|
|
888
|
+
}).pipe(
|
|
889
|
+
RequestResolver.setDelay(options.window),
|
|
890
|
+
setMaxBatchSize,
|
|
891
|
+
RequestResolver.withSpan(`${options.spanPrefix}.findByIdResolver`)
|
|
892
|
+
)
|
|
893
|
+
const findByIdExecute = SqlResolver.request(findByIdResolver)
|
|
894
|
+
const findById = (
|
|
895
|
+
id: S["fields"][Id]["Type"]
|
|
896
|
+
): Effect.Effect<
|
|
897
|
+
S["Type"],
|
|
898
|
+
Schema.SchemaError,
|
|
899
|
+
S["DecodingServices"] | S["fields"][Id]["EncodingServices"]
|
|
900
|
+
> =>
|
|
912
901
|
findByIdExecute(id).pipe(
|
|
913
|
-
Effect.
|
|
914
|
-
|
|
915
|
-
captureStackTrace: false,
|
|
916
|
-
attributes: { id }
|
|
902
|
+
Effect.withSpan(`${options.spanPrefix}.findById`, { attributes: { id } }, {
|
|
903
|
+
captureStackTrace: false
|
|
917
904
|
})
|
|
918
905
|
) as any
|
|
919
906
|
|
|
920
|
-
const deleteResolver =
|
|
907
|
+
const deleteResolver = SqlResolver.void({
|
|
921
908
|
Request: idSchema,
|
|
922
|
-
execute: (ids) => sql`delete from ${sql(options.tableName)} where ${sql.in(idColumn, ids)}`
|
|
923
|
-
})
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
const deleteExecute =
|
|
929
|
-
const delete_ = (
|
|
909
|
+
execute: (ids: any) => sql`delete from ${sql(options.tableName)} where ${sql.in(idColumn, ids)}`
|
|
910
|
+
}).pipe(
|
|
911
|
+
RequestResolver.setDelay(options.window),
|
|
912
|
+
setMaxBatchSize,
|
|
913
|
+
RequestResolver.withSpan(`${options.spanPrefix}.deleteResolver`)
|
|
914
|
+
)
|
|
915
|
+
const deleteExecute = SqlResolver.request(deleteResolver)
|
|
916
|
+
const delete_ = (
|
|
917
|
+
id: S["fields"][Id]["Type"]
|
|
918
|
+
): Effect.Effect<void, Schema.SchemaError, S["fields"][Id]["EncodingServices"]> =>
|
|
930
919
|
deleteExecute(id).pipe(
|
|
931
|
-
Effect.
|
|
932
|
-
|
|
933
|
-
captureStackTrace: false,
|
|
934
|
-
attributes: { id }
|
|
920
|
+
Effect.withSpan(`${options.spanPrefix}.delete`, { attributes: { id } }, {
|
|
921
|
+
captureStackTrace: false
|
|
935
922
|
})
|
|
936
923
|
) as any
|
|
937
924
|
|