@effect-app/infra 0.142.1 → 0.144.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/_cjs/RequestContext.cjs +1 -1
- package/_cjs/RequestContext.cjs.map +1 -1
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/jwt.cjs +1 -1
- package/_cjs/api/express/schema/jwt.cjs.map +1 -1
- package/_cjs/api/routing/base.cjs +5 -5
- package/_cjs/api/routing/base.cjs.map +1 -1
- package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/routing/makeRequestHandler.cjs.map +1 -1
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +3 -3
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +3 -6
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/RequestContextContainer.cjs.map +1 -1
- package/_cjs/services/Store/ContextMapContainer.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +1 -1
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.cjs +2 -2
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +1 -1
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +1 -1
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/RequestContext.ts +1 -1
- package/_src/api/codec.ts +2 -2
- package/_src/api/defaultErrorHandler.ts +2 -2
- package/_src/api/express/schema/jwt.ts +3 -3
- package/_src/api/express/schema/routing.ts +11 -11
- package/_src/api/routing/base.ts +27 -27
- package/_src/api/routing/defaultErrorHandler.ts +2 -2
- package/_src/api/routing/makeRequestHandler.ts +2 -2
- package/_src/errorReporter.ts +1 -1
- package/_src/services/Emailer/Sendgrid.ts +1 -1
- package/_src/services/Operations/live.ts +3 -3
- package/_src/services/QueueMaker/errors.ts +1 -1
- package/_src/services/QueueMaker/memQueue.ts +9 -9
- package/_src/services/QueueMaker/sbqueue.ts +4 -4
- package/_src/services/Repository.ts +11 -11
- package/_src/services/RepositoryBase.ts +24 -17
- package/_src/services/RequestContextContainer.ts +1 -1
- package/_src/services/Store/ContextMapContainer.ts +1 -1
- package/_src/services/Store/Cosmos.ts +27 -19
- package/_src/services/Store/Disk.ts +2 -2
- package/_src/services/Store/Memory.ts +3 -3
- package/_src/services/Store/Redis.ts +1 -1
- package/_src/services/Store/codeFilter.ts +2 -2
- package/_src/services/Store/index.test.ts.bak +5 -5
- package/_src/services/Store/utils.ts +9 -9
- package/_src/services/simpledb/diskdb.ts +1 -1
- package/_src/services/simpledb/memdb.ts +1 -1
- package/_src/services/simpledb/redisdb.ts +2 -2
- package/_src/services/simpledb/shared.ts +2 -2
- package/_src/services/simpledb/simpledb.ts +2 -2
- package/dist/RequestContext.d.ts +21 -21
- package/dist/RequestContext.js +2 -2
- package/dist/api/codec.d.ts +2 -2
- package/dist/api/codec.d.ts.map +1 -1
- package/dist/api/codec.js +1 -1
- package/dist/api/defaultErrorHandler.js +1 -1
- package/dist/api/express/schema/jwt.d.ts +1 -1
- package/dist/api/express/schema/jwt.d.ts.map +1 -1
- package/dist/api/express/schema/jwt.js +2 -2
- package/dist/api/routing/base.d.ts +4 -4
- package/dist/api/routing/base.d.ts.map +1 -1
- package/dist/api/routing/base.js +6 -6
- package/dist/api/routing/defaultErrorHandler.js +1 -1
- package/dist/api/routing/makeRequestHandler.js +1 -1
- package/dist/errorReporter.js +1 -1
- package/dist/services/Emailer/Sendgrid.js +1 -1
- package/dist/services/Operations/live.js +1 -1
- package/dist/services/Operations/service.d.ts +4 -4
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +1 -1
- package/dist/services/QueueMaker/memQueue.d.ts +1 -1
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/memQueue.js +3 -3
- package/dist/services/QueueMaker/sbqueue.d.ts +1 -1
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +2 -2
- package/dist/services/QueueMaker/service.d.ts +3 -3
- package/dist/services/Repository.js +1 -1
- package/dist/services/RepositoryBase.d.ts +21 -33
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +5 -5
- package/dist/services/RequestContextContainer.d.ts +1 -1
- package/dist/services/RequestContextContainer.js +1 -1
- package/dist/services/Store/ContextMapContainer.js +1 -1
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +2 -2
- package/dist/services/Store/Disk.js +1 -1
- package/dist/services/Store/Memory.js +1 -1
- package/dist/services/Store/Redis.js +1 -1
- package/dist/services/Store/codeFilter.js +3 -3
- package/dist/services/Store/utils.js +1 -1
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.js +1 -1
- package/dist/services/simpledb/memdb.d.ts +3 -3
- package/dist/services/simpledb/memdb.js +2 -2
- package/dist/services/simpledb/mongodb.d.ts +1 -1
- package/dist/services/simpledb/redisdb.d.ts +9 -9
- package/dist/services/simpledb/redisdb.js +2 -2
- package/dist/services/simpledb/shared.d.ts +10 -10
- package/dist/services/simpledb/shared.d.ts.map +1 -1
- package/dist/services/simpledb/shared.js +1 -1
- package/dist/services/simpledb/simpledb.d.ts +2 -2
- package/dist/services/simpledb/simpledb.d.ts.map +1 -1
- package/dist/services/simpledb/simpledb.js +1 -1
- package/package.json +11 -11
|
@@ -87,11 +87,11 @@ export function makeRepo<
|
|
|
87
87
|
>() {
|
|
88
88
|
return <
|
|
89
89
|
ItemType extends string,
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
From extends { id: string },
|
|
91
|
+
T extends { id: unknown }
|
|
92
92
|
>(
|
|
93
93
|
name: ItemType,
|
|
94
|
-
schema: S.Schema<From, T>,
|
|
94
|
+
schema: S.Schema<never, From, T>,
|
|
95
95
|
mapFrom: (pm: Omit<PM, "_etag">) => From,
|
|
96
96
|
mapTo: (e: From, etag: string | undefined) => PM
|
|
97
97
|
) => {
|
|
@@ -147,7 +147,7 @@ export function makeRepo<
|
|
|
147
147
|
})
|
|
148
148
|
)
|
|
149
149
|
|
|
150
|
-
const parse = (e: From) => schema.
|
|
150
|
+
const parse = (e: From) => schema.decodeUnknown(e).orDie
|
|
151
151
|
|
|
152
152
|
const all = allE.flatMap((_) => _.forEachEffect((_) => parse(_)))
|
|
153
153
|
|
|
@@ -157,6 +157,7 @@ export function makeRepo<
|
|
|
157
157
|
// grab id from the first type for now
|
|
158
158
|
// we need to get the TypeLiteral, incase of class it's behind a transform...
|
|
159
159
|
? (S.make(_.ast.types[0]._tag === "Transform" ? _.ast.types[0].from : _.ast.types[0]) as unknown as Schema<
|
|
160
|
+
never,
|
|
160
161
|
From,
|
|
161
162
|
T
|
|
162
163
|
>)
|
|
@@ -164,9 +165,13 @@ export function makeRepo<
|
|
|
164
165
|
: _.pipe(S.pick("id"))
|
|
165
166
|
)
|
|
166
167
|
function findE(_id: T["id"]) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
.
|
|
168
|
+
return S
|
|
169
|
+
.encode(i)({ id: _id })
|
|
170
|
+
.orDie
|
|
171
|
+
.andThen((id) =>
|
|
172
|
+
store
|
|
173
|
+
.find(id as unknown as string)
|
|
174
|
+
)
|
|
170
175
|
.flatMap((items) =>
|
|
171
176
|
Do(($) => {
|
|
172
177
|
const { set } = $(cms)
|
|
@@ -180,7 +185,8 @@ export function makeRepo<
|
|
|
180
185
|
}
|
|
181
186
|
|
|
182
187
|
const saveAllE = (a: Iterable<From>) =>
|
|
183
|
-
Effect
|
|
188
|
+
Effect
|
|
189
|
+
.sync(() => a.toNonEmptyArray)
|
|
184
190
|
.flatMapOpt((a) =>
|
|
185
191
|
Do(($) => {
|
|
186
192
|
const { get, set } = $(cms)
|
|
@@ -197,7 +203,7 @@ export function makeRepo<
|
|
|
197
203
|
const saveAndPublish = (items: Iterable<T>, events: Iterable<Evt> = []) => {
|
|
198
204
|
const it = items.toChunk
|
|
199
205
|
return saveAll(it)
|
|
200
|
-
.andThen(Effect(events.toNonEmptyArray))
|
|
206
|
+
.andThen(Effect.sync(() => events.toNonEmptyArray))
|
|
201
207
|
// TODO: for full consistency the events should be stored within the same database transaction, and then picked up.
|
|
202
208
|
.flatMapOpt(pub)
|
|
203
209
|
.andThen(changeFeed
|
|
@@ -216,7 +222,8 @@ export function makeRepo<
|
|
|
216
222
|
set(e.id, undefined)
|
|
217
223
|
}
|
|
218
224
|
yield* $(
|
|
219
|
-
Effect
|
|
225
|
+
Effect
|
|
226
|
+
.sync(() => events.toNonEmptyArray)
|
|
220
227
|
// TODO: for full consistency the events should be stored within the same database transaction, and then picked up.
|
|
221
228
|
.flatMapOpt(pub)
|
|
222
229
|
)
|
|
@@ -317,11 +324,11 @@ export function makeStore<
|
|
|
317
324
|
>() {
|
|
318
325
|
return <
|
|
319
326
|
ItemType extends string,
|
|
320
|
-
|
|
321
|
-
|
|
327
|
+
E extends { id: string },
|
|
328
|
+
T extends { id: unknown }
|
|
322
329
|
>(
|
|
323
330
|
name: ItemType,
|
|
324
|
-
schema: S.Schema<E, T>,
|
|
331
|
+
schema: S.Schema<never, E, T>,
|
|
325
332
|
mapTo: (e: E, etag: string | undefined) => PM
|
|
326
333
|
) => {
|
|
327
334
|
const [_dec, encode] = makeCodec(schema)
|
|
@@ -429,9 +436,9 @@ export const RepositoryBaseImpl = <Service>() => {
|
|
|
429
436
|
PM extends { id: string; _etag: string | undefined },
|
|
430
437
|
Evt = never
|
|
431
438
|
>() =>
|
|
432
|
-
<ItemType extends string,
|
|
439
|
+
<ItemType extends string, From extends { id: string }, T extends { id: unknown }>(
|
|
433
440
|
itemType: ItemType,
|
|
434
|
-
schema: S.Schema<From, T>,
|
|
441
|
+
schema: S.Schema<never, From, T>,
|
|
435
442
|
jitM?: (pm: From) => From
|
|
436
443
|
): Exact<PM, From & { _etag: string | undefined }> extends true ?
|
|
437
444
|
& (abstract new() => RepositoryBaseC1<T, PM, Evt, ItemType>)
|
|
@@ -470,9 +477,9 @@ export const RepositoryDefaultImpl = <Service>() => {
|
|
|
470
477
|
PM extends { id: string; _etag: string | undefined },
|
|
471
478
|
Evt = never
|
|
472
479
|
>() =>
|
|
473
|
-
<ItemType extends string,
|
|
480
|
+
<ItemType extends string, From extends { id: string }, T extends { id: unknown }>(
|
|
474
481
|
itemType: ItemType,
|
|
475
|
-
schema: S.Schema<From, T>,
|
|
482
|
+
schema: S.Schema<never, From, T>,
|
|
476
483
|
jitM?: (pm: From) => From
|
|
477
484
|
): Exact<PM, From & { _etag: string | undefined }> extends true ?
|
|
478
485
|
& (abstract new(
|
|
@@ -19,7 +19,7 @@ export class RequestContextContainer extends TagClass<RequestContextContainer, {
|
|
|
19
19
|
.flatMap((requestContext) =>
|
|
20
20
|
requestContext.isSome()
|
|
21
21
|
? requestContext.value.requestContext.map(Option.some)
|
|
22
|
-
: Effect(Option.none)
|
|
22
|
+
: Effect.sync(() => Option.none)
|
|
23
23
|
)
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -199,10 +199,11 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
const s: Store<PM, Id> = {
|
|
202
|
-
all: Effect
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
202
|
+
all: Effect
|
|
203
|
+
.sync(() => ({
|
|
204
|
+
query: `SELECT * FROM ${name} f WHERE f.id != @id`,
|
|
205
|
+
parameters: [{ name: "@id", value: importedMarkerId }]
|
|
206
|
+
}))
|
|
206
207
|
.tap((q) => logQuery(q))
|
|
207
208
|
.flatMap((q) =>
|
|
208
209
|
Effect.promise(() =>
|
|
@@ -223,7 +224,8 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
223
224
|
filter
|
|
224
225
|
.keys
|
|
225
226
|
.forEachEffect((k) =>
|
|
226
|
-
Effect
|
|
227
|
+
Effect
|
|
228
|
+
.sync(() => buildFilterJoinSelectCosmosQuery(filter, k, name, cursor?.skip, cursor?.limit))
|
|
227
229
|
.tap((q) => logQuery(q))
|
|
228
230
|
.flatMap((q) =>
|
|
229
231
|
Effect.promise(() =>
|
|
@@ -266,7 +268,8 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
266
268
|
? filter
|
|
267
269
|
.keys
|
|
268
270
|
.forEachEffect((k) =>
|
|
269
|
-
Effect
|
|
271
|
+
Effect
|
|
272
|
+
.sync(() => buildFindJoinCosmosQuery(filter, k, name, skip, limit))
|
|
270
273
|
.tap((q) => logQuery(q))
|
|
271
274
|
.flatMap((q) =>
|
|
272
275
|
Effect.promise(() =>
|
|
@@ -280,15 +283,18 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
280
283
|
)
|
|
281
284
|
.map((_) => _.flatMap((_) => _))
|
|
282
285
|
: (filter.type === "new-kid"
|
|
283
|
-
? Effect
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
286
|
+
? Effect
|
|
287
|
+
.sync(() =>
|
|
288
|
+
buildWhereCosmosQuery3(
|
|
289
|
+
filter.build(),
|
|
290
|
+
name,
|
|
291
|
+
importedMarkerId,
|
|
292
|
+
defaultValues,
|
|
293
|
+
f.select as NonEmptyReadonlyArray<string> | undefined,
|
|
294
|
+
skip,
|
|
295
|
+
limit
|
|
296
|
+
)
|
|
297
|
+
)
|
|
292
298
|
.tap((q) => logQuery(q))
|
|
293
299
|
.flatMap((q) =>
|
|
294
300
|
Effect.promise(() =>
|
|
@@ -307,7 +313,8 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
307
313
|
.then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._.f })))
|
|
308
314
|
)
|
|
309
315
|
)
|
|
310
|
-
: Effect
|
|
316
|
+
: Effect
|
|
317
|
+
.sync(() => buildCosmosQuery(filter, name, importedMarkerId, defaultValues, skip, limit))
|
|
311
318
|
.tap((q) => logQuery(q))
|
|
312
319
|
.flatMap((q) =>
|
|
313
320
|
Effect.promise(() =>
|
|
@@ -370,10 +377,10 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
370
377
|
)
|
|
371
378
|
)
|
|
372
379
|
}
|
|
373
|
-
return Effect({
|
|
380
|
+
return Effect.sync(() => ({
|
|
374
381
|
...e,
|
|
375
382
|
_etag: x.etag
|
|
376
|
-
})
|
|
383
|
+
}))
|
|
377
384
|
})
|
|
378
385
|
.withSpan("Cosmos.set [effect-app/infra/Store]", {
|
|
379
386
|
attributes: { "repository.container_id": containerId, "repository.model_name": name }
|
|
@@ -403,7 +410,8 @@ function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
403
410
|
if (seed) {
|
|
404
411
|
const m = yield* $(seed)
|
|
405
412
|
yield* $(
|
|
406
|
-
Effect
|
|
413
|
+
Effect
|
|
414
|
+
.succeed(m.toNonEmptyArray)
|
|
407
415
|
.flatMapOpt((a) =>
|
|
408
416
|
s
|
|
409
417
|
.bulkSet(a)
|
|
@@ -64,7 +64,7 @@ function makeDiskStoreInt<Id extends string, PM extends PersistenceModelType<Id>
|
|
|
64
64
|
const withPermit = sem.withPermits(1)
|
|
65
65
|
const flushToDisk = store.all.flatMap(fsStore.setRaw).pipe(withPermit)
|
|
66
66
|
const flushToDiskInBackground = flushToDisk
|
|
67
|
-
.tapErrorCause((err) => Effect(console.error(err)))
|
|
67
|
+
.tapErrorCause((err) => Effect.sync(() => console.error(err)))
|
|
68
68
|
.uninterruptible
|
|
69
69
|
.forkDaemon
|
|
70
70
|
|
|
@@ -121,7 +121,7 @@ export function makeDiskStore({ prefix }: StorageConfig, dir: string) {
|
|
|
121
121
|
return storesSem.withPermits(1)(
|
|
122
122
|
Effect.suspend(() => {
|
|
123
123
|
const existing = stores.get(namespace)
|
|
124
|
-
if (existing) return Effect(existing)
|
|
124
|
+
if (existing) return Effect.sync(() => existing)
|
|
125
125
|
return makeDiskStoreInt<Id, PM, R, E>(prefix, namespace, dir, name, seed, config?.defaultValues)
|
|
126
126
|
.orDie
|
|
127
127
|
.provide(ctx)
|
|
@@ -62,7 +62,7 @@ export function makeMemoryStoreInt<Id extends string, PM extends PersistenceMode
|
|
|
62
62
|
) {
|
|
63
63
|
return Effect.gen(function*($) {
|
|
64
64
|
const updateETag = makeUpdateETag(modelName)
|
|
65
|
-
const items_ = yield* $(seed ?? Effect([]))
|
|
65
|
+
const items_ = yield* $(seed ?? Effect.sync(() => []))
|
|
66
66
|
const defaultValues = _defaultValues ?? {}
|
|
67
67
|
|
|
68
68
|
const items = new Map(items_.toChunk.map((_) => [_.id, { ...defaultValues, ..._ }] as const))
|
|
@@ -134,7 +134,7 @@ export function makeMemoryStoreInt<Id extends string, PM extends PersistenceMode
|
|
|
134
134
|
}),
|
|
135
135
|
batchSet: (items: readonly [PM, ...PM[]]) =>
|
|
136
136
|
pipe(
|
|
137
|
-
Effect(items)
|
|
137
|
+
Effect.sync(() => items)
|
|
138
138
|
// align with CosmosDB
|
|
139
139
|
.filterOrDieMessage((_) => _.length <= 100, "BatchSet: a batch may not exceed 100 items")
|
|
140
140
|
.andThen(batchSet)
|
|
@@ -184,7 +184,7 @@ export const makeMemoryStore = () => ({
|
|
|
184
184
|
}
|
|
185
185
|
return storesSem.withPermits(1)(Effect.suspend(() => {
|
|
186
186
|
const store = stores.get(namespace)
|
|
187
|
-
if (store) return Effect(store)
|
|
187
|
+
if (store) return Effect.sync(() => store)
|
|
188
188
|
return makeMemoryStoreInt(modelName, namespace, seed, config?.defaultValues)
|
|
189
189
|
.orDie
|
|
190
190
|
.provide(ctx)
|
|
@@ -21,7 +21,7 @@ function makeRedisStore({ prefix }: StorageConfig) {
|
|
|
21
21
|
const key = `${prefix}${name}`
|
|
22
22
|
const current = yield* $(redis.get(key).orDie)
|
|
23
23
|
if (!current.isSome()) {
|
|
24
|
-
const m = yield* $(seed ?? Effect([]))
|
|
24
|
+
const m = yield* $(seed ?? Effect.sync(() => []))
|
|
25
25
|
yield* $(
|
|
26
26
|
redis
|
|
27
27
|
.set(key, JSON.stringify({ data: [...m].map((e) => makeETag(e)) }))
|
|
@@ -66,7 +66,7 @@ export const codeFilterStatement = <E>(p: FilterR, x: E) => {
|
|
|
66
66
|
// }
|
|
67
67
|
// return codeFilterStatement(p, x)
|
|
68
68
|
// })
|
|
69
|
-
// ? Option(x as unknown as NE)
|
|
69
|
+
// ? Option.some(x as unknown as NE)
|
|
70
70
|
// : Option.none
|
|
71
71
|
|
|
72
72
|
// export const and = <E extends { id: string }, NE extends E>(filters: readonly FilterResult[], x: E): Option<NE> =>
|
|
@@ -83,7 +83,7 @@ export const codeFilterStatement = <E>(p: FilterR, x: E) => {
|
|
|
83
83
|
// }
|
|
84
84
|
// return codeFilterStatement(p, x)
|
|
85
85
|
// })
|
|
86
|
-
// ? Option(x as unknown as NE)
|
|
86
|
+
// ? Option.some(x as unknown as NE)
|
|
87
87
|
// : Option.none
|
|
88
88
|
|
|
89
89
|
// // TODO: how to handle and/or outside scopes.
|
|
@@ -17,7 +17,7 @@ describe("Optimistic Concurrency", () => {
|
|
|
17
17
|
{ _etag: string | undefined; id: string; a: string }
|
|
18
18
|
>()
|
|
19
19
|
const { make } = makeMemoryStore()
|
|
20
|
-
const store = yield* $(make("test", Effect(existing)))
|
|
20
|
+
const store = yield* $(make("test", Effect.sync(() => existing)))
|
|
21
21
|
|
|
22
22
|
const result1 = yield* $(store.set({ id: "1", a: "string", _etag: undefined }))
|
|
23
23
|
const result2_1 = yield* $(
|
|
@@ -51,7 +51,7 @@ describe("Optimistic Concurrency", () => {
|
|
|
51
51
|
{ _etag: string | undefined; id: string; a: string }
|
|
52
52
|
>()
|
|
53
53
|
const { make } = makeMemoryStore()
|
|
54
|
-
const store = yield* $(make("test", Effect(existing)))
|
|
54
|
+
const store = yield* $(make("test", Effect.sync(() => existing)))
|
|
55
55
|
|
|
56
56
|
const [result1] = yield* $(
|
|
57
57
|
store.bulkSet([{ id: "1", a: "string", _etag: undefined }])
|
|
@@ -89,7 +89,7 @@ describe("Optimistic Concurrency", () => {
|
|
|
89
89
|
{ _etag: string | undefined; id: string; a: string }
|
|
90
90
|
>()
|
|
91
91
|
const { make } = makeMemoryStore()
|
|
92
|
-
const store = yield* $(make("test", Effect(existing)))
|
|
92
|
+
const store = yield* $(make("test", Effect.sync(() => existing)))
|
|
93
93
|
|
|
94
94
|
const item1 = { id: "1", a: "string", _etag: undefined }
|
|
95
95
|
const item2 = { id: "2", a: "string", _etag: undefined }
|
|
@@ -102,8 +102,8 @@ describe("Optimistic Concurrency", () => {
|
|
|
102
102
|
const failResult = yield* $(
|
|
103
103
|
store.batchSet([{ id: "1", a: "another-string3", _etag: "abc" }]).result
|
|
104
104
|
)
|
|
105
|
-
expect(result1).toEqual(Option({ ...item1, _etag: expect.any(String) }))
|
|
106
|
-
expect(result2).toEqual(Option({ ...item2, _etag: expect.any(String) }))
|
|
105
|
+
expect(result1).toEqual(Option.some({ ...item1, _etag: expect.any(String) }))
|
|
106
|
+
expect(result2).toEqual(Option.some({ ...item2, _etag: expect.any(String) }))
|
|
107
107
|
expect(Exit.untraced(failResult)).toEqual(
|
|
108
108
|
Exit.fail(new OptimisticConcurrencyException("test", "1"))
|
|
109
109
|
)
|
|
@@ -40,22 +40,22 @@ export const makeUpdateETag =
|
|
|
40
40
|
export function codeFilter<E extends { id: string }, NE extends E>(filter: Filter<NE>) {
|
|
41
41
|
return (x: E) =>
|
|
42
42
|
filter.type === "new-kid"
|
|
43
|
-
? codeFilter3_(filter.build(), x) ? Option(x as unknown as NE) : Option.none
|
|
43
|
+
? codeFilter3_(filter.build(), x) ? Option.some(x as unknown as NE) : Option.none
|
|
44
44
|
: filter.type === "startsWith"
|
|
45
45
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
46
|
? lowercaseIfString((x as any)[filter.by]).startsWith(filter.value.toLowerCase())
|
|
47
|
-
? Option(x as unknown as NE)
|
|
47
|
+
? Option.some(x as unknown as NE)
|
|
48
48
|
: Option.none
|
|
49
49
|
: filter.type === "endsWith"
|
|
50
50
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
51
|
? lowercaseIfString((x as any)[filter.by]).endsWith(filter.value.toLowerCase())
|
|
52
|
-
? Option(x as unknown as NE)
|
|
52
|
+
? Option.some(x as unknown as NE)
|
|
53
53
|
: Option.none
|
|
54
54
|
: filter.type === "contains"
|
|
55
55
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
56
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
57
57
|
? lowercaseIfString((x as any)[filter.by]).includes(filter.value.toLowerCase())
|
|
58
|
-
? Option(x as unknown as NE)
|
|
58
|
+
? Option.some(x as unknown as NE)
|
|
59
59
|
: Option.none
|
|
60
60
|
: filter.type === "join_find"
|
|
61
61
|
? filter.keys.some((k) => {
|
|
@@ -66,7 +66,7 @@ export function codeFilter<E extends { id: string }, NE extends E>(filter: Filte
|
|
|
66
66
|
&& value.some((v) => compare(v[filter.valueKey], filter.value))
|
|
67
67
|
)
|
|
68
68
|
})
|
|
69
|
-
? Option(x as unknown as NE)
|
|
69
|
+
? Option.some(x as unknown as NE)
|
|
70
70
|
: Option.none
|
|
71
71
|
// TODO: support mixed or/and
|
|
72
72
|
: filter.mode === "or"
|
|
@@ -110,7 +110,7 @@ export function codeFilter<E extends { id: string }, NE extends E>(filter: Filte
|
|
|
110
110
|
return compare(k, p.value)
|
|
111
111
|
}
|
|
112
112
|
})
|
|
113
|
-
? Option(x as unknown as NE)
|
|
113
|
+
? Option.some(x as unknown as NE)
|
|
114
114
|
: Option.none
|
|
115
115
|
: filter
|
|
116
116
|
.where
|
|
@@ -160,7 +160,7 @@ export function codeFilter<E extends { id: string }, NE extends E>(filter: Filte
|
|
|
160
160
|
: compare(k, p.value)
|
|
161
161
|
}
|
|
162
162
|
})
|
|
163
|
-
? Option(x as unknown as NE)
|
|
163
|
+
? Option.some(x as unknown as NE)
|
|
164
164
|
: Option.none
|
|
165
165
|
}
|
|
166
166
|
|
|
@@ -174,11 +174,11 @@ export function codeFilterJoinSelect<E extends { id: string }, NE>(
|
|
|
174
174
|
const value = get(x, k)
|
|
175
175
|
// we mimic the behavior of cosmosdb; if the shape in db does not match what we're looking for, we imagine false hit
|
|
176
176
|
return value
|
|
177
|
-
? Option(
|
|
177
|
+
? Option.some(
|
|
178
178
|
(value as readonly NE[]).filterMap((v) =>
|
|
179
179
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
180
|
compare((v as any)[filter.valueKey], filter.value)
|
|
181
|
-
? Option({ ...v, _rootId: x.id })
|
|
181
|
+
? Option.some({ ...v, _rootId: x.id })
|
|
182
182
|
: Option.none
|
|
183
183
|
)
|
|
184
184
|
)
|
|
@@ -133,7 +133,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
133
133
|
function tryRead(filePath: string) {
|
|
134
134
|
return fu
|
|
135
135
|
.fileExists(filePath)
|
|
136
|
-
.flatMap((exists) => !exists ? Effect(Option.none) : readFile(filePath).map(Option.some))
|
|
136
|
+
.flatMap((exists) => !exists ? Effect.sync(() => Option.none) : readFile(filePath).map(Option.some))
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
function getFilename(type: string, id: string) {
|
|
@@ -9,7 +9,7 @@ import type { Version } from "./simpledb.js"
|
|
|
9
9
|
// Do not try this at home.
|
|
10
10
|
const storage = makeMap<string, string>()
|
|
11
11
|
|
|
12
|
-
const parseSDB = SerializedDBRecord.
|
|
12
|
+
const parseSDB = SerializedDBRecord.decodeUnknown
|
|
13
13
|
|
|
14
14
|
export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>() {
|
|
15
15
|
return <REncode, RDecode, EDecode>(
|
|
@@ -30,7 +30,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
30
30
|
.flatMap((_) => _.hmgetAll(getKey(id)))
|
|
31
31
|
.flatMapOpt((v) =>
|
|
32
32
|
RedisSerializedDBRecord
|
|
33
|
-
.
|
|
33
|
+
.decodeUnknown(v)
|
|
34
34
|
.map(({ data, version }) => ({
|
|
35
35
|
data: JSON.parse(data) as EA,
|
|
36
36
|
version
|
|
@@ -184,7 +184,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
184
184
|
(err) =>
|
|
185
185
|
err
|
|
186
186
|
? res(new ConnectionException(err))
|
|
187
|
-
: res(Effect(void 0))
|
|
187
|
+
: res(Effect.sync(() => void 0))
|
|
188
188
|
)
|
|
189
189
|
})
|
|
190
190
|
.uninterruptible
|
|
@@ -34,7 +34,7 @@ export class SerializedDBRecord extends S.Class<SerializedDBRecord>()({
|
|
|
34
34
|
}) {}
|
|
35
35
|
|
|
36
36
|
// unknown -> string -> SDB?
|
|
37
|
-
export function makeSerialisedDBRecord(s: Schema<
|
|
37
|
+
export function makeSerialisedDBRecord(s: Schema<never, any>) {
|
|
38
38
|
return S.struct({
|
|
39
39
|
version: S.number,
|
|
40
40
|
timestamp: S.Date,
|
|
@@ -63,7 +63,7 @@ export function getRecordName(type: string, id: string) {
|
|
|
63
63
|
export function makeMap<TKey, T>() {
|
|
64
64
|
const map = new Map<TKey, T>()
|
|
65
65
|
return {
|
|
66
|
-
find: (k: TKey) => Effect(Option.fromNullable(map.get(k))),
|
|
66
|
+
find: (k: TKey) => Effect.sync(() => Option.fromNullable(map.get(k))),
|
|
67
67
|
[Symbol.iterator]: () => map[Symbol.iterator](),
|
|
68
68
|
set: (k: TKey, v: T) =>
|
|
69
69
|
Effect.sync(() => {
|
|
@@ -28,7 +28,7 @@ export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {}
|
|
|
28
28
|
// module tag
|
|
29
29
|
export const RecordCache = Tag<RecordCache>()
|
|
30
30
|
|
|
31
|
-
export const LiveRecordCache = Effect(makeLiveRecordCache()).toLayer(RecordCache)
|
|
31
|
+
export const LiveRecordCache = Effect.sync(() => makeLiveRecordCache()).toLayer(RecordCache)
|
|
32
32
|
|
|
33
33
|
const getM = <T>(type: string) => <R, E, A>(eff: (m: EffectMap<string, CachedRecord<T>>) => Effect<R, E, A>) =>
|
|
34
34
|
Effect.gen(function*($) {
|
|
@@ -110,7 +110,7 @@ export function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<
|
|
|
110
110
|
? new OptimisticLockException(type, record.id)
|
|
111
111
|
: Effect.unit
|
|
112
112
|
)
|
|
113
|
-
.zipRight(save(record, Option(cv)))
|
|
113
|
+
.zipRight(save(record, Option.some(cv)))
|
|
114
114
|
)
|
|
115
115
|
.scoped
|
|
116
116
|
}
|
package/dist/RequestContext.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useClassFeaturesForSchema, TaggedClass, NonEmptyString255, struct, literal, FromClass } from "@effect-app/schema";
|
|
2
2
|
import { S } from "@effect-app/prelude";
|
|
3
|
-
declare const RequestContextParent_base: S.Class<{
|
|
3
|
+
declare const RequestContextParent_base: S.Class<never, {
|
|
4
4
|
readonly _tag: "RequestContext";
|
|
5
5
|
readonly id: string;
|
|
6
6
|
readonly name: string;
|
|
@@ -27,27 +27,27 @@ declare const RequestContextParent_base: S.Class<{
|
|
|
27
27
|
readonly id?: S.NonEmptyString255;
|
|
28
28
|
readonly createdAt?: Date;
|
|
29
29
|
}, RequestContextParent, {
|
|
30
|
-
id: S.WithDefaults<S.Schema<string, S.NonEmptyString255> & {
|
|
30
|
+
id: S.WithDefaults<S.Schema<never, string, S.NonEmptyString255> & {
|
|
31
31
|
make: () => S.NonEmptyString255;
|
|
32
|
-
withDefault: () => S.Schema<string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<string, S.NonEmptyString255>;
|
|
33
|
-
}> & S.Schema<string, S.NonEmptyString255> & {
|
|
32
|
+
withDefault: () => S.Schema<never, string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<never, string, S.NonEmptyString255>;
|
|
33
|
+
}> & S.Schema<never, string, S.NonEmptyString255> & {
|
|
34
34
|
make: () => S.NonEmptyString255;
|
|
35
|
-
withDefault: () => S.Schema<string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<string, S.NonEmptyString255>;
|
|
35
|
+
withDefault: () => S.Schema<never, string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<never, string, S.NonEmptyString255>;
|
|
36
36
|
};
|
|
37
|
-
name: S.WithDefaults<S.Schema<string, string & S.NonEmptyString255Brand>> & S.Schema<string, string & S.NonEmptyString255Brand>;
|
|
38
|
-
userProfile: S.PropertySignature<{
|
|
37
|
+
name: S.WithDefaults<S.Schema<never, string, string & S.NonEmptyString255Brand>> & S.Schema<never, string, string & S.NonEmptyString255Brand>;
|
|
38
|
+
userProfile: S.PropertySignature<never, {
|
|
39
39
|
readonly sub: string;
|
|
40
40
|
} | undefined, true, {
|
|
41
41
|
readonly sub: string & import("@effect-app/prelude/ids").UserProfileIdBrand;
|
|
42
42
|
} | undefined, true>;
|
|
43
|
-
locale: S.Schema<"en" | "de", "en" | "de"> & {
|
|
43
|
+
locale: S.Schema<never, "en" | "de", "en" | "de"> & {
|
|
44
44
|
literals: ["en", "de"];
|
|
45
45
|
};
|
|
46
|
-
createdAt: S.Schema<string, Date> & S.ConstructorPropertyDescriptor<string, Date>;
|
|
46
|
+
createdAt: S.Schema<never, string, Date> & S.ConstructorPropertyDescriptor<never, string, Date>;
|
|
47
47
|
}, import("effect/Data").Case>;
|
|
48
48
|
export declare class RequestContextParent extends RequestContextParent_base {
|
|
49
49
|
}
|
|
50
|
-
declare const RequestContext_base: S.Class<{
|
|
50
|
+
declare const RequestContext_base: S.Class<never, {
|
|
51
51
|
readonly _tag: "RequestContext";
|
|
52
52
|
readonly id: string;
|
|
53
53
|
readonly name: string;
|
|
@@ -92,15 +92,15 @@ declare const RequestContext_base: S.Class<{
|
|
|
92
92
|
readonly createdAt?: Date;
|
|
93
93
|
readonly rootId?: S.NonEmptyString255;
|
|
94
94
|
}, RequestContext, {
|
|
95
|
-
id: S.Schema<string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<string, S.NonEmptyString255>;
|
|
96
|
-
rootId: S.WithDefaults<S.Schema<string, S.NonEmptyString255> & {
|
|
95
|
+
id: S.Schema<never, string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<never, string, S.NonEmptyString255>;
|
|
96
|
+
rootId: S.WithDefaults<S.Schema<never, string, S.NonEmptyString255> & {
|
|
97
97
|
make: () => S.NonEmptyString255;
|
|
98
|
-
withDefault: () => S.Schema<string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<string, S.NonEmptyString255>;
|
|
99
|
-
}> & S.Schema<string, S.NonEmptyString255> & {
|
|
98
|
+
withDefault: () => S.Schema<never, string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<never, string, S.NonEmptyString255>;
|
|
99
|
+
}> & S.Schema<never, string, S.NonEmptyString255> & {
|
|
100
100
|
make: () => S.NonEmptyString255;
|
|
101
|
-
withDefault: () => S.Schema<string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<string, S.NonEmptyString255>;
|
|
101
|
+
withDefault: () => S.Schema<never, string, S.NonEmptyString255> & S.ConstructorPropertyDescriptor<never, string, S.NonEmptyString255>;
|
|
102
102
|
};
|
|
103
|
-
parent: S.PropertySignature<{
|
|
103
|
+
parent: S.PropertySignature<never, {
|
|
104
104
|
readonly _tag: "RequestContext";
|
|
105
105
|
readonly id: string;
|
|
106
106
|
readonly name: string;
|
|
@@ -110,17 +110,17 @@ declare const RequestContext_base: S.Class<{
|
|
|
110
110
|
readonly sub: string;
|
|
111
111
|
} | undefined;
|
|
112
112
|
} | undefined, true, RequestContextParent | undefined, true>;
|
|
113
|
-
namespace: S.PropertySignature<string | undefined, true, (string & S.NonEmptyString255Brand) | undefined, true>;
|
|
114
|
-
name: S.WithDefaults<S.Schema<string, string & S.NonEmptyString255Brand>> & S.Schema<string, string & S.NonEmptyString255Brand>;
|
|
115
|
-
userProfile: S.PropertySignature<{
|
|
113
|
+
namespace: S.PropertySignature<never, string | undefined, true, (string & S.NonEmptyString255Brand) | undefined, true>;
|
|
114
|
+
name: S.WithDefaults<S.Schema<never, string, string & S.NonEmptyString255Brand>> & S.Schema<never, string, string & S.NonEmptyString255Brand>;
|
|
115
|
+
userProfile: S.PropertySignature<never, {
|
|
116
116
|
readonly sub: string;
|
|
117
117
|
} | undefined, true, {
|
|
118
118
|
readonly sub: string & import("@effect-app/prelude/ids").UserProfileIdBrand;
|
|
119
119
|
} | undefined, true>;
|
|
120
|
-
locale: S.Schema<"en" | "de", "en" | "de"> & {
|
|
120
|
+
locale: S.Schema<never, "en" | "de", "en" | "de"> & {
|
|
121
121
|
literals: ["en", "de"];
|
|
122
122
|
};
|
|
123
|
-
createdAt: S.Schema<string, Date> & S.ConstructorPropertyDescriptor<string, Date>;
|
|
123
|
+
createdAt: S.Schema<never, string, Date> & S.ConstructorPropertyDescriptor<never, string, Date>;
|
|
124
124
|
}, import("effect/Data").Case>;
|
|
125
125
|
/**
|
|
126
126
|
* @tsplus type RequestContext
|
package/dist/RequestContext.js
CHANGED
|
@@ -26,7 +26,7 @@ export { RequestContextParent };
|
|
|
26
26
|
* @tsplus type RequestContext
|
|
27
27
|
* @tsplus companion RequestContext.Ops
|
|
28
28
|
*/
|
|
29
|
-
let RequestContext = RequestContext_1 = class RequestContext extends
|
|
29
|
+
let RequestContext = RequestContext_1 = class RequestContext extends tsplus_module_1.TaggedClass()("RequestContext", {
|
|
30
30
|
...tsplus_module_3.RecordOmitold(tsplus_module_3.object$(RequestContextParent.fields), "id"),
|
|
31
31
|
id: RequestId.withDefault(),
|
|
32
32
|
rootId: RequestId,
|
|
@@ -83,4 +83,4 @@ export { RequestContext };
|
|
|
83
83
|
}
|
|
84
84
|
RequestContext.From = From;
|
|
85
85
|
})(RequestContext || (RequestContext = {}));
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdENvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9fc3JjL1JlcXVlc3RDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUczRCxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFxQixTQUFRLGdCQUFBLFdBQVcsRUFFbEQsQ0FBQyxnQkFBZ0IsRUFBRTtJQUNwQixFQUFFLEVBQUUsU0FBUztJQUNiLElBQUksa0JBQUUsaUJBQWlCO0lBQ3ZCLFdBQVcsRUFBRSx5QkFBQSxnQkFBQSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBVztJQUN0RCxNQUFNLEVBQUUsZ0JBQUEsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDM0IsU0FBUyxFQUFFLHVDQUFBLENBQUMsQ0FBQyxJQUFJLEVBQWlCLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPO0NBQzVELENBQUM7Q0FBRyxDQUFBO0FBUlEsb0JBQW9CO29CQURoQyx5QkFBeUI7R0FDYixvQkFBb0IsQ0FRNUI7O0FBRUw7OztHQUdHO0FBRUksSUFBTSxjQUFjLHNCQUFwQixNQUFNLGNBQWUsU0FBUSxnQkFBQSxXQUFXLEVBRTVDLENBQUMsZ0JBQWdCLEVBQUU7SUFDcEIsR0FBRyxzREFBQSxvQkFBb0IsQ0FBQyxNQUFNLEdBQVMsSUFBSSxDQUFDO0lBQzVDLEVBQUUsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFO0lBQzNCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSx5QkFBQSxvQkFBb0IsQ0FBVztJQUN2QyxTQUFTLEVBQUUseUNBQUEsaUJBQWlCLENBQVc7SUFDdkMsOENBQThDO0lBQzlDLGlDQUFpQztJQUNqQyx1QkFBdUI7SUFDdkIsNkNBQTZDO0lBQzdDLDRDQUE0QztJQUM1QyxLQUFLO0NBQ04sQ0FBQztJQUNBLDZDQUE2QztJQUM3QyxNQUFNLENBQUMsT0FBTyxDQUVaLE1BQXNCLEVBQ3RCLE9BQThEO1FBRTlELE9BQU8sSUFBSSxnQkFBYyxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUztZQUM1QixHQUFHLE9BQU87WUFDVixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsTUFBTTtTQUNQLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFhLElBQW9CO1FBQ2xELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDYixDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzdFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUF0Q1ksY0FBYztvQkFEMUIseUJBQXlCO0dBQ2IsY0FBYyxDQXNDMUI7O0FBRUQsZ0NBQWdDO0FBQ2hDLEVBQUU7QUFDRixvQkFBb0I7QUFDcEIsV0FBaUIsb0JBQW9CO0lBQ25DOzs7T0FHRztJQUNILE1BQWEsSUFBSyxTQUFRLGdCQUFBLFNBQVMsRUFBK0I7S0FBRztJQUF4RCx5QkFBSSxPQUFvRCxDQUFBO0FBQ3ZFLENBQUMsRUFOZ0Isb0JBQW9CLEtBQXBCLG9CQUFvQixRQU1wQztBQUNELFdBQWlCLGNBQWM7SUFDN0I7OztPQUdHO0lBQ0gsTUFBYSxJQUFLLFNBQVEsZ0JBQUEsU0FBUyxFQUF5QjtLQUFHO0lBQWxELG1CQUFJLE9BQThDLENBQUE7QUFDakUsQ0FBQyxFQU5nQixjQUFjLEtBQWQsY0FBYyxRQU05QiJ9
|
package/dist/api/codec.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as S from "@effect-app/schema";
|
|
2
|
-
export declare function makeCodec<To extends {
|
|
2
|
+
export declare function makeCodec<From, To extends {
|
|
3
3
|
id: Id;
|
|
4
|
-
},
|
|
4
|
+
}, Id>(self: S.Schema<never, From, To>): readonly [(i: From, overrideOptions?: S.AST.ParseOptions | undefined) => To, (a: To, overrideOptions?: S.AST.ParseOptions | undefined) => From];
|
|
5
5
|
//# sourceMappingURL=codec.d.ts.map
|
package/dist/api/codec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../_src/api/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,oBAAoB,CAAA;AAEvC,wBAAgB,SAAS,CACvB,EAAE,SAAS;IAAE,EAAE,EAAE,EAAE,CAAA;CAAE,EACrB,
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../_src/api/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,oBAAoB,CAAA;AAEvC,wBAAgB,SAAS,CACvB,IAAI,EACJ,EAAE,SAAS;IAAE,EAAE,EAAE,EAAE,CAAA;CAAE,EACrB,EAAE,EACF,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mJAEhC"}
|
package/dist/api/codec.js
CHANGED
|
@@ -2,4 +2,4 @@ import * as S from "@effect-app/schema";
|
|
|
2
2
|
export function makeCodec(self) {
|
|
3
3
|
return [S.decodeSync(self), S.encodeSync(self)];
|
|
4
4
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLG9CQUFvQixDQUFBO0FBRXZDLE1BQU0sVUFBVSxTQUFTLENBSXZCLElBQStCO0lBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQVUsQ0FBQTtBQUMxRCxDQUFDIn0=
|
|
@@ -27,4 +27,4 @@ export function defaultErrorHandler(req, res, r2) {
|
|
|
27
27
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
28
28
|
, (err) => tsplus_module_1.flatMap(tsplus_module_1.map(tsplus_module_1.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_1.die));
|
|
29
29
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTlDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUzQyxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLEVBQW9DO0lBRXBDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMscUJBQVksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNyRyxPQUFPLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDekUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakUsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBRUksZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNJLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLEdBQUcsd0JBQ2pDLDJCQUFxQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBRTdGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMscUJBQVksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNyRyxPQUFPLHlCQUFBLDBCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDeEU7UUFDVCxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDdEQsZUFBZSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDL0Isa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNsQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ25DLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDbkMsNElBQTRJO1FBQzVJLGdDQUFnQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7S0FDakQsQ0FBQztJQUNGLCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUVJLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDSSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FBQTtBQUNMLENBQUMifQ==
|