@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.
Files changed (124) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/_cjs/RequestContext.cjs +1 -1
  3. package/_cjs/RequestContext.cjs.map +1 -1
  4. package/_cjs/api/codec.cjs.map +1 -1
  5. package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
  6. package/_cjs/api/express/schema/jwt.cjs +1 -1
  7. package/_cjs/api/express/schema/jwt.cjs.map +1 -1
  8. package/_cjs/api/routing/base.cjs +5 -5
  9. package/_cjs/api/routing/base.cjs.map +1 -1
  10. package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
  11. package/_cjs/api/routing/makeRequestHandler.cjs.map +1 -1
  12. package/_cjs/errorReporter.cjs.map +1 -1
  13. package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
  14. package/_cjs/services/Operations/live.cjs.map +1 -1
  15. package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
  16. package/_cjs/services/QueueMaker/memQueue.cjs +3 -3
  17. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  18. package/_cjs/services/QueueMaker/sbqueue.cjs +1 -1
  19. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  20. package/_cjs/services/Repository.cjs.map +1 -1
  21. package/_cjs/services/RepositoryBase.cjs +3 -6
  22. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  23. package/_cjs/services/RequestContextContainer.cjs.map +1 -1
  24. package/_cjs/services/Store/ContextMapContainer.cjs.map +1 -1
  25. package/_cjs/services/Store/Cosmos.cjs +1 -1
  26. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  27. package/_cjs/services/Store/Disk.cjs.map +1 -1
  28. package/_cjs/services/Store/Memory.cjs.map +1 -1
  29. package/_cjs/services/Store/Redis.cjs.map +1 -1
  30. package/_cjs/services/Store/codeFilter.cjs +2 -2
  31. package/_cjs/services/Store/utils.cjs.map +1 -1
  32. package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
  33. package/_cjs/services/simpledb/memdb.cjs +1 -1
  34. package/_cjs/services/simpledb/memdb.cjs.map +1 -1
  35. package/_cjs/services/simpledb/redisdb.cjs +1 -1
  36. package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
  37. package/_cjs/services/simpledb/shared.cjs.map +1 -1
  38. package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
  39. package/_src/RequestContext.ts +1 -1
  40. package/_src/api/codec.ts +2 -2
  41. package/_src/api/defaultErrorHandler.ts +2 -2
  42. package/_src/api/express/schema/jwt.ts +3 -3
  43. package/_src/api/express/schema/routing.ts +11 -11
  44. package/_src/api/routing/base.ts +27 -27
  45. package/_src/api/routing/defaultErrorHandler.ts +2 -2
  46. package/_src/api/routing/makeRequestHandler.ts +2 -2
  47. package/_src/errorReporter.ts +1 -1
  48. package/_src/services/Emailer/Sendgrid.ts +1 -1
  49. package/_src/services/Operations/live.ts +3 -3
  50. package/_src/services/QueueMaker/errors.ts +1 -1
  51. package/_src/services/QueueMaker/memQueue.ts +9 -9
  52. package/_src/services/QueueMaker/sbqueue.ts +4 -4
  53. package/_src/services/Repository.ts +11 -11
  54. package/_src/services/RepositoryBase.ts +24 -17
  55. package/_src/services/RequestContextContainer.ts +1 -1
  56. package/_src/services/Store/ContextMapContainer.ts +1 -1
  57. package/_src/services/Store/Cosmos.ts +27 -19
  58. package/_src/services/Store/Disk.ts +2 -2
  59. package/_src/services/Store/Memory.ts +3 -3
  60. package/_src/services/Store/Redis.ts +1 -1
  61. package/_src/services/Store/codeFilter.ts +2 -2
  62. package/_src/services/Store/index.test.ts.bak +5 -5
  63. package/_src/services/Store/utils.ts +9 -9
  64. package/_src/services/simpledb/diskdb.ts +1 -1
  65. package/_src/services/simpledb/memdb.ts +1 -1
  66. package/_src/services/simpledb/redisdb.ts +2 -2
  67. package/_src/services/simpledb/shared.ts +2 -2
  68. package/_src/services/simpledb/simpledb.ts +2 -2
  69. package/dist/RequestContext.d.ts +21 -21
  70. package/dist/RequestContext.js +2 -2
  71. package/dist/api/codec.d.ts +2 -2
  72. package/dist/api/codec.d.ts.map +1 -1
  73. package/dist/api/codec.js +1 -1
  74. package/dist/api/defaultErrorHandler.js +1 -1
  75. package/dist/api/express/schema/jwt.d.ts +1 -1
  76. package/dist/api/express/schema/jwt.d.ts.map +1 -1
  77. package/dist/api/express/schema/jwt.js +2 -2
  78. package/dist/api/routing/base.d.ts +4 -4
  79. package/dist/api/routing/base.d.ts.map +1 -1
  80. package/dist/api/routing/base.js +6 -6
  81. package/dist/api/routing/defaultErrorHandler.js +1 -1
  82. package/dist/api/routing/makeRequestHandler.js +1 -1
  83. package/dist/errorReporter.js +1 -1
  84. package/dist/services/Emailer/Sendgrid.js +1 -1
  85. package/dist/services/Operations/live.js +1 -1
  86. package/dist/services/Operations/service.d.ts +4 -4
  87. package/dist/services/Operations/service.d.ts.map +1 -1
  88. package/dist/services/QueueMaker/errors.js +1 -1
  89. package/dist/services/QueueMaker/memQueue.d.ts +1 -1
  90. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
  91. package/dist/services/QueueMaker/memQueue.js +3 -3
  92. package/dist/services/QueueMaker/sbqueue.d.ts +1 -1
  93. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  94. package/dist/services/QueueMaker/sbqueue.js +2 -2
  95. package/dist/services/QueueMaker/service.d.ts +3 -3
  96. package/dist/services/Repository.js +1 -1
  97. package/dist/services/RepositoryBase.d.ts +21 -33
  98. package/dist/services/RepositoryBase.d.ts.map +1 -1
  99. package/dist/services/RepositoryBase.js +5 -5
  100. package/dist/services/RequestContextContainer.d.ts +1 -1
  101. package/dist/services/RequestContextContainer.js +1 -1
  102. package/dist/services/Store/ContextMapContainer.js +1 -1
  103. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  104. package/dist/services/Store/Cosmos.js +2 -2
  105. package/dist/services/Store/Disk.js +1 -1
  106. package/dist/services/Store/Memory.js +1 -1
  107. package/dist/services/Store/Redis.js +1 -1
  108. package/dist/services/Store/codeFilter.js +3 -3
  109. package/dist/services/Store/utils.js +1 -1
  110. package/dist/services/simpledb/cosmosdb.d.ts +2 -2
  111. package/dist/services/simpledb/diskdb.d.ts +2 -2
  112. package/dist/services/simpledb/diskdb.js +1 -1
  113. package/dist/services/simpledb/memdb.d.ts +3 -3
  114. package/dist/services/simpledb/memdb.js +2 -2
  115. package/dist/services/simpledb/mongodb.d.ts +1 -1
  116. package/dist/services/simpledb/redisdb.d.ts +9 -9
  117. package/dist/services/simpledb/redisdb.js +2 -2
  118. package/dist/services/simpledb/shared.d.ts +10 -10
  119. package/dist/services/simpledb/shared.d.ts.map +1 -1
  120. package/dist/services/simpledb/shared.js +1 -1
  121. package/dist/services/simpledb/simpledb.d.ts +2 -2
  122. package/dist/services/simpledb/simpledb.d.ts.map +1 -1
  123. package/dist/services/simpledb/simpledb.js +1 -1
  124. package/package.json +11 -11
@@ -87,11 +87,11 @@ export function makeRepo<
87
87
  >() {
88
88
  return <
89
89
  ItemType extends string,
90
- T extends { id: unknown },
91
- From extends { id: string }
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.parse(e).orDie
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
- const { id } = i.encodeSync({ id: _id })
168
- return store
169
- .find(id)
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(a.toNonEmptyArray)
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(events.toNonEmptyArray)
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
- T extends { id: unknown },
321
- E extends { id: string }
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, T extends { id: unknown }, From extends { id: 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, T extends { id: unknown }, From extends { id: 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
  }
@@ -22,7 +22,7 @@ export class ContextMapContainer extends TagClass<ContextMapContainer, {
22
22
  .flatMap((ctx) =>
23
23
  ctx.isSome()
24
24
  ? ctx.value.get.map(Option.some)
25
- : Effect(Option.none)
25
+ : Effect.sync(() => Option.none)
26
26
  )
27
27
  }
28
28
  }
@@ -199,10 +199,11 @@ function makeCosmosStore({ prefix }: StorageConfig) {
199
199
  }
200
200
 
201
201
  const s: Store<PM, Id> = {
202
- all: Effect({
203
- query: `SELECT * FROM ${name} f WHERE f.id != @id`,
204
- parameters: [{ name: "@id", value: importedMarkerId }]
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(buildFilterJoinSelectCosmosQuery(filter, k, name, cursor?.skip, cursor?.limit))
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(buildFindJoinCosmosQuery(filter, k, name, skip, limit))
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(buildWhereCosmosQuery3(
284
- filter.build(),
285
- name,
286
- importedMarkerId,
287
- defaultValues,
288
- f.select as NonEmptyReadonlyArray<string> | undefined,
289
- skip,
290
- limit
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(buildCosmosQuery(filter, name, importedMarkerId, defaultValues, skip, limit))
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(m.toNonEmptyArray)
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.parse
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
- .parse(v)
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<any, any>) {
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
  }
@@ -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
@@ -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 S.TaggedClass()("RequestContext", {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdENvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9fc3JjL1JlcXVlc3RDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUczRCxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFxQixTQUFRLGdCQUFBLFdBQVcsRUFFbEQsQ0FBQyxnQkFBZ0IsRUFBRTtJQUNwQixFQUFFLEVBQUUsU0FBUztJQUNiLElBQUksa0JBQUUsaUJBQWlCO0lBQ3ZCLFdBQVcsRUFBRSx5QkFBQSxnQkFBQSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBVztJQUN0RCxNQUFNLEVBQUUsZ0JBQUEsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDM0IsU0FBUyxFQUFFLHVDQUFBLENBQUMsQ0FBQyxJQUFJLEVBQWlCLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPO0NBQzVELENBQUM7Q0FBRyxDQUFBO0FBUlEsb0JBQW9CO29CQURoQyx5QkFBeUI7R0FDYixvQkFBb0IsQ0FRNUI7O0FBRUw7OztHQUdHO0FBRUksSUFBTSxjQUFjLHNCQUFwQixNQUFNLGNBQWUsU0FBUSxDQUFDLENBQUMsV0FBVyxFQUU5QyxDQUFDLGdCQUFnQixFQUFFO0lBQ3BCLEdBQUcsc0RBQUEsb0JBQW9CLENBQUMsTUFBTSxHQUFTLElBQUksQ0FBQztJQUM1QyxFQUFFLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRTtJQUMzQixNQUFNLEVBQUUsU0FBUztJQUNqQixNQUFNLEVBQUUseUJBQUEsb0JBQW9CLENBQVc7SUFDdkMsU0FBUyxFQUFFLHlDQUFBLGlCQUFpQixDQUFXO0lBQ3ZDLDhDQUE4QztJQUM5QyxpQ0FBaUM7SUFDakMsdUJBQXVCO0lBQ3ZCLDZDQUE2QztJQUM3Qyw0Q0FBNEM7SUFDNUMsS0FBSztDQUNOLENBQUM7SUFDQSw2Q0FBNkM7SUFDN0MsTUFBTSxDQUFDLE9BQU8sQ0FFWixNQUFzQixFQUN0QixPQUE4RDtRQUU5RCxPQUFPLElBQUksZ0JBQWMsQ0FBQztZQUN4QixTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVM7WUFDNUIsR0FBRyxPQUFPO1lBQ1YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLE1BQU07U0FDUCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBYSxJQUFvQjtRQUNsRCxPQUFPO1lBQ0wsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQ2IsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUM3RSxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQTtJQUNILENBQUM7Q0FDRixDQUFBO0FBdENZLGNBQWM7b0JBRDFCLHlCQUF5QjtHQUNiLGNBQWMsQ0FzQzFCOztBQUVELGdDQUFnQztBQUNoQyxFQUFFO0FBQ0Ysb0JBQW9CO0FBQ3BCLFdBQWlCLG9CQUFvQjtJQUNuQzs7O09BR0c7SUFDSCxNQUFhLElBQUssU0FBUSxnQkFBQSxTQUFTLEVBQStCO0tBQUc7SUFBeEQseUJBQUksT0FBb0QsQ0FBQTtBQUN2RSxDQUFDLEVBTmdCLG9CQUFvQixLQUFwQixvQkFBb0IsUUFNcEM7QUFDRCxXQUFpQixjQUFjO0lBQzdCOzs7T0FHRztJQUNILE1BQWEsSUFBSyxTQUFRLGdCQUFBLFNBQVMsRUFBeUI7S0FBRztJQUFsRCxtQkFBSSxPQUE4QyxDQUFBO0FBQ2pFLENBQUMsRUFOZ0IsY0FBYyxLQUFkLGNBQWMsUUFNOUIifQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdENvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9fc3JjL1JlcXVlc3RDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUczRCxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFxQixTQUFRLGdCQUFBLFdBQVcsRUFFbEQsQ0FBQyxnQkFBZ0IsRUFBRTtJQUNwQixFQUFFLEVBQUUsU0FBUztJQUNiLElBQUksa0JBQUUsaUJBQWlCO0lBQ3ZCLFdBQVcsRUFBRSx5QkFBQSxnQkFBQSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBVztJQUN0RCxNQUFNLEVBQUUsZ0JBQUEsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFDM0IsU0FBUyxFQUFFLHVDQUFBLENBQUMsQ0FBQyxJQUFJLEVBQWlCLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPO0NBQzVELENBQUM7Q0FBRyxDQUFBO0FBUlEsb0JBQW9CO29CQURoQyx5QkFBeUI7R0FDYixvQkFBb0IsQ0FRNUI7O0FBRUw7OztHQUdHO0FBRUksSUFBTSxjQUFjLHNCQUFwQixNQUFNLGNBQWUsU0FBUSxnQkFBQSxXQUFXLEVBRTVDLENBQUMsZ0JBQWdCLEVBQUU7SUFDcEIsR0FBRyxzREFBQSxvQkFBb0IsQ0FBQyxNQUFNLEdBQVMsSUFBSSxDQUFDO0lBQzVDLEVBQUUsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFO0lBQzNCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE1BQU0sRUFBRSx5QkFBQSxvQkFBb0IsQ0FBVztJQUN2QyxTQUFTLEVBQUUseUNBQUEsaUJBQWlCLENBQVc7SUFDdkMsOENBQThDO0lBQzlDLGlDQUFpQztJQUNqQyx1QkFBdUI7SUFDdkIsNkNBQTZDO0lBQzdDLDRDQUE0QztJQUM1QyxLQUFLO0NBQ04sQ0FBQztJQUNBLDZDQUE2QztJQUM3QyxNQUFNLENBQUMsT0FBTyxDQUVaLE1BQXNCLEVBQ3RCLE9BQThEO1FBRTlELE9BQU8sSUFBSSxnQkFBYyxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUztZQUM1QixHQUFHLE9BQU87WUFDVixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsTUFBTTtTQUNQLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFhLElBQW9CO1FBQ2xELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDYixDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzdFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUF0Q1ksY0FBYztvQkFEMUIseUJBQXlCO0dBQ2IsY0FBYyxDQXNDMUI7O0FBRUQsZ0NBQWdDO0FBQ2hDLEVBQUU7QUFDRixvQkFBb0I7QUFDcEIsV0FBaUIsb0JBQW9CO0lBQ25DOzs7T0FHRztJQUNILE1BQWEsSUFBSyxTQUFRLGdCQUFBLFNBQVMsRUFBK0I7S0FBRztJQUF4RCx5QkFBSSxPQUFvRCxDQUFBO0FBQ3ZFLENBQUMsRUFOZ0Isb0JBQW9CLEtBQXBCLG9CQUFvQixRQU1wQztBQUNELFdBQWlCLGNBQWM7SUFDN0I7OztPQUdHO0lBQ0gsTUFBYSxJQUFLLFNBQVEsZ0JBQUEsU0FBUyxFQUF5QjtLQUFHO0lBQWxELG1CQUFJLE9BQThDLENBQUE7QUFDakUsQ0FBQyxFQU5nQixjQUFjLEtBQWQsY0FBYyxRQU05QiJ9
@@ -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
- }, From, Id>(self: S.Schema<From, To>): readonly [(i: From, overrideOptions?: S.AST.ParseOptions | undefined) => To, (a: To, overrideOptions?: S.AST.ParseOptions | undefined) => From];
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
@@ -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,IAAI,EACJ,EAAE,EACF,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,mJAEzB"}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9fc3JjL2FwaS9jb2RlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLG9CQUFvQixDQUFBO0FBRXZDLE1BQU0sVUFBVSxTQUFTLENBSXZCLElBQXdCO0lBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQVUsQ0FBQTtBQUMxRCxDQUFDIn0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTlDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUzQyxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLEVBQW9DO0lBRXBDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsMkJBQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMxRixPQUFPLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDekUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakUsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBRUksZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNJLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLEdBQUcsd0JBQ2pDLDJCQUFxQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBRTdGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsMkJBQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMxRixPQUFPLHlCQUFBLDBCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDeEU7UUFDVCxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDdEQsZUFBZSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDL0Isa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNsQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ25DLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDbkMsNElBQTRJO1FBQzVJLGdDQUFnQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7S0FDakQsQ0FBQztJQUNGLCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUVJLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDSSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FBQTtBQUNMLENBQUMifQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvYXBpL2RlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTlDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUzQyxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLEVBQW9DO0lBRXBDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMscUJBQVksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNyRyxPQUFPLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDekUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakUsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBRUksZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNJLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLEdBQUcsd0JBQ2pDLDJCQUFxQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBRTdGLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBb0IsRUFDcEIsR0FBcUIsRUFDckIsRUFBb0M7SUFFcEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMscUJBQVksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNyRyxPQUFPLHlCQUFBLDBCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDeEU7UUFDVCxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDdEQsZUFBZSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDL0Isa0JBQWtCLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNsQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ25DLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDbkMsNElBQTRJO1FBQzVJLGdDQUFnQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7S0FDakQsQ0FBQztJQUNGLCtFQUErRTtNQUNyRSxDQUFDLEdBQVUsRUFBRSxFQUFFLENBQ3ZCLHdCQUFBLG9CQUFBLHlCQUVJLGdHQUFnRyxHQUFHLEdBQUcsQ0FDdkcsRUFDSSxHQUFHLEVBQUUsQ0FBQyxHQUFjLENBQUMsc0JBQ04sQ0FDdkIsQ0FBQTtBQUNMLENBQUMifQ==