@effect-app/infra 4.0.0-beta.121 → 4.0.0-beta.123

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 (74) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/CUPS.d.ts.map +1 -1
  3. package/dist/CUPS.js +8 -10
  4. package/dist/Model/Repository/ext.d.ts +15 -3
  5. package/dist/Model/Repository/ext.d.ts.map +1 -1
  6. package/dist/Model/Repository/ext.js +25 -2
  7. package/dist/Model/Repository/internal/internal.d.ts +1 -1
  8. package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
  9. package/dist/Model/Repository/internal/internal.js +9 -8
  10. package/dist/Model/Repository/makeRepo.d.ts +3 -3
  11. package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
  12. package/dist/Model/Repository/service.d.ts +21 -21
  13. package/dist/Model/Repository/service.d.ts.map +1 -1
  14. package/dist/Model/query/new-kid-interpreter.d.ts +2 -2
  15. package/dist/Operations.d.ts +2 -2
  16. package/dist/Operations.d.ts.map +1 -1
  17. package/dist/Operations.js +54 -57
  18. package/dist/OperationsRepo.d.ts +2 -2
  19. package/dist/QueueMaker/SQLQueue.d.ts +2 -3
  20. package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
  21. package/dist/QueueMaker/SQLQueue.js +104 -115
  22. package/dist/QueueMaker/memQueue.d.ts +2 -2
  23. package/dist/QueueMaker/memQueue.d.ts.map +1 -1
  24. package/dist/QueueMaker/memQueue.js +51 -62
  25. package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
  26. package/dist/QueueMaker/sbqueue.js +34 -50
  27. package/dist/Store/ContextMapContainer.d.ts +1 -1
  28. package/dist/Store/Cosmos.d.ts.map +1 -1
  29. package/dist/Store/Cosmos.js +304 -306
  30. package/dist/Store/Disk.d.ts +1 -1
  31. package/dist/Store/Disk.d.ts.map +1 -1
  32. package/dist/Store/Disk.js +2 -2
  33. package/dist/Store/Memory.d.ts +1 -1
  34. package/dist/Store/Memory.d.ts.map +1 -1
  35. package/dist/Store/Memory.js +2 -2
  36. package/dist/Store/SQL/Pg.d.ts.map +1 -1
  37. package/dist/Store/SQL/Pg.js +147 -149
  38. package/dist/Store/SQL.d.ts.map +1 -1
  39. package/dist/Store/SQL.js +6 -6
  40. package/dist/Store/utils.d.ts.map +1 -1
  41. package/dist/Store/utils.js +3 -4
  42. package/dist/adapters/ServiceBus.d.ts.map +1 -1
  43. package/dist/adapters/ServiceBus.js +7 -9
  44. package/dist/api/internal/auth.d.ts.map +1 -1
  45. package/dist/api/internal/auth.js +1 -1
  46. package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
  47. package/dist/api/routing/middleware/middleware.js +2 -2
  48. package/dist/errorReporter.d.ts +3 -3
  49. package/dist/errorReporter.d.ts.map +1 -1
  50. package/dist/errorReporter.js +16 -23
  51. package/package.json +14 -14
  52. package/src/CUPS.ts +7 -9
  53. package/src/Model/Repository/ext.ts +71 -6
  54. package/src/Model/Repository/internal/internal.ts +13 -25
  55. package/src/Model/Repository/makeRepo.ts +4 -4
  56. package/src/Model/Repository/service.ts +22 -21
  57. package/src/Operations.ts +76 -111
  58. package/src/QueueMaker/SQLQueue.ts +119 -150
  59. package/src/QueueMaker/memQueue.ts +81 -102
  60. package/src/QueueMaker/sbqueue.ts +51 -81
  61. package/src/Store/Cosmos.ts +481 -484
  62. package/src/Store/Disk.ts +52 -53
  63. package/src/Store/Memory.ts +49 -50
  64. package/src/Store/SQL/Pg.ts +247 -250
  65. package/src/Store/SQL.ts +420 -426
  66. package/src/Store/utils.ts +23 -22
  67. package/src/adapters/ServiceBus.ts +106 -110
  68. package/src/api/internal/auth.ts +8 -6
  69. package/src/api/routing/middleware/middleware.ts +10 -11
  70. package/src/errorReporter.ts +58 -72
  71. package/test/dist/auth.test.d.ts.map +1 -0
  72. package/test/dist/fixtures.d.ts +1 -1
  73. package/test/dist/repository-ext.test.d.ts.map +1 -0
  74. package/test/repository-ext.test.ts +58 -0
package/src/Store/Disk.ts CHANGED
@@ -132,66 +132,65 @@ export function makeDiskStore({ prefix }: StorageConfig, dir: string) {
132
132
  fs.mkdirSync(dir)
133
133
  }
134
134
  return {
135
- make: <IdKey extends keyof Encoded, Encoded extends FieldValues, R, E>(
135
+ make: Effect.fnUntraced(function*<IdKey extends keyof Encoded, Encoded extends FieldValues, R, E>(
136
136
  name: string,
137
137
  idKey: IdKey,
138
138
  seed?: Effect.Effect<Iterable<Encoded>, E, R>,
139
139
  config?: StoreConfig<Encoded>
140
- ) =>
141
- Effect.gen(function*() {
142
- const primary = yield* makeDiskStoreInt(prefix, idKey, "primary", dir, name, seed, config?.defaultValues)
143
- const stores = new Map<string, Store<IdKey, Encoded>>([["primary", primary]])
144
- const ctx = yield* Effect.context<R>()
145
- const semaphores = new Map<string, Semaphore.Semaphore>()
146
- const getSem = (ns: string) => {
147
- let sem = semaphores.get(ns)
148
- if (!sem) {
149
- sem = Semaphore.makeUnsafe(1)
150
- semaphores.set(ns, sem)
151
- }
152
- return sem
140
+ ) {
141
+ const primary = yield* makeDiskStoreInt(prefix, idKey, "primary", dir, name, seed, config?.defaultValues)
142
+ const stores = new Map<string, Store<IdKey, Encoded>>([["primary", primary]])
143
+ const ctx = yield* Effect.context<R>()
144
+ const semaphores = new Map<string, Semaphore.Semaphore>()
145
+ const getSem = (ns: string) => {
146
+ let sem = semaphores.get(ns)
147
+ if (!sem) {
148
+ sem = Semaphore.makeUnsafe(1)
149
+ semaphores.set(ns, sem)
153
150
  }
154
- const ensureStore = (namespace: string) =>
155
- getSem(namespace).withPermits(1)(
156
- Effect.suspend(() => {
157
- const existing = stores.get(namespace)
158
- if (existing) return Effect.succeed(existing)
159
- if (config?.allowNamespace && !config.allowNamespace(namespace)) {
160
- throw new Error(`Namespace ${namespace} not allowed!`)
161
- }
162
- return makeDiskStoreInt<IdKey, Encoded, R, E>(
163
- prefix,
164
- idKey,
165
- namespace,
166
- dir,
167
- name,
168
- seed,
169
- config?.defaultValues
151
+ return sem
152
+ }
153
+ const ensureStore = (namespace: string) =>
154
+ getSem(namespace).withPermits(1)(
155
+ Effect.suspend(() => {
156
+ const existing = stores.get(namespace)
157
+ if (existing) return Effect.succeed(existing)
158
+ if (config?.allowNamespace && !config.allowNamespace(namespace)) {
159
+ throw new Error(`Namespace ${namespace} not allowed!`)
160
+ }
161
+ return makeDiskStoreInt<IdKey, Encoded, R, E>(
162
+ prefix,
163
+ idKey,
164
+ namespace,
165
+ dir,
166
+ name,
167
+ seed,
168
+ config?.defaultValues
169
+ )
170
+ .pipe(
171
+ Effect.orDie,
172
+ Effect.provide(ctx),
173
+ Effect.tap((store) => Effect.sync(() => stores.set(namespace, store)))
170
174
  )
171
- .pipe(
172
- Effect.orDie,
173
- Effect.provide(ctx),
174
- Effect.tap((store) => Effect.sync(() => stores.set(namespace, store)))
175
- )
176
- })
177
- )
178
- const getStore = !config?.allowNamespace
179
- ? Effect.succeed(primary)
180
- : storeId.asEffect().pipe(Effect.flatMap((namespace) => ensureStore(namespace)))
175
+ })
176
+ )
177
+ const getStore = !config?.allowNamespace
178
+ ? Effect.succeed(primary)
179
+ : storeId.asEffect().pipe(Effect.flatMap((namespace) => ensureStore(namespace)))
181
180
 
182
- const s: Store<IdKey, Encoded> = {
183
- seedNamespace: (namespace) => ensureStore(namespace).pipe(Effect.asVoid),
184
- all: Effect.flatMap(getStore, (_) => _.all),
185
- find: (...args) => Effect.flatMap(getStore, (_) => _.find(...args)),
186
- filter: (...args) => Effect.flatMap(getStore, (_) => _.filter(...args)),
187
- set: (...args) => Effect.flatMap(getStore, (_) => _.set(...args)),
188
- batchSet: (...args) => Effect.flatMap(getStore, (_) => _.batchSet(...args)),
189
- bulkSet: (...args) => Effect.flatMap(getStore, (_) => _.bulkSet(...args)),
190
- batchRemove: (...args) => Effect.flatMap(getStore, (_) => _.batchRemove(...args)),
191
- queryRaw: (...args) => Effect.flatMap(getStore, (_) => _.queryRaw(...args))
192
- }
193
- return s
194
- })
181
+ const s: Store<IdKey, Encoded> = {
182
+ seedNamespace: (namespace) => ensureStore(namespace).pipe(Effect.asVoid),
183
+ all: Effect.flatMap(getStore, (_) => _.all),
184
+ find: (...args) => Effect.flatMap(getStore, (_) => _.find(...args)),
185
+ filter: (...args) => Effect.flatMap(getStore, (_) => _.filter(...args)),
186
+ set: (...args) => Effect.flatMap(getStore, (_) => _.set(...args)),
187
+ batchSet: (...args) => Effect.flatMap(getStore, (_) => _.batchSet(...args)),
188
+ bulkSet: (...args) => Effect.flatMap(getStore, (_) => _.bulkSet(...args)),
189
+ batchRemove: (...args) => Effect.flatMap(getStore, (_) => _.batchRemove(...args)),
190
+ queryRaw: (...args) => Effect.flatMap(getStore, (_) => _.queryRaw(...args))
191
+ }
192
+ return s
193
+ })
195
194
  }
196
195
  })
197
196
  }
@@ -252,61 +252,60 @@ export function makeMemoryStoreInt<IdKey extends keyof Encoded, Encoded extends
252
252
  }
253
253
 
254
254
  export const makeMemoryStore = () => ({
255
- make: <IdKey extends keyof Encoded, Encoded extends FieldValues, R, E>(
255
+ make: Effect.fnUntraced(function*<IdKey extends keyof Encoded, Encoded extends FieldValues, R, E>(
256
256
  modelName: string,
257
257
  idKey: IdKey,
258
258
  seed?: Effect.Effect<Iterable<Encoded>, E, R>,
259
259
  config?: StoreConfig<Encoded>
260
- ) =>
261
- Effect.gen(function*() {
262
- const primary = yield* makeMemoryStoreInt<IdKey, Encoded, R, E>(
263
- modelName,
264
- idKey,
265
- "primary",
266
- seed,
267
- config?.defaultValues
268
- )
269
- const ctx = yield* Effect.context<R>()
270
- const stores = new Map([["primary", primary]])
271
- const semaphores = new Map<string, Semaphore.Semaphore>()
272
- const getSem = (ns: string) => {
273
- let sem = semaphores.get(ns)
274
- if (!sem) {
275
- sem = Semaphore.makeUnsafe(1)
276
- semaphores.set(ns, sem)
277
- }
278
- return sem
279
- }
280
- const ensureStore = (namespace: string) =>
281
- getSem(namespace).withPermits(1)(Effect.suspend(() => {
282
- const store = stores.get(namespace)
283
- if (store) return Effect.succeed(store)
284
- if (config?.allowNamespace && !config.allowNamespace(namespace)) {
285
- throw new Error(`Namespace ${namespace} not allowed!`)
286
- }
287
- return makeMemoryStoreInt(modelName, idKey, namespace, seed, config?.defaultValues)
288
- .pipe(
289
- Effect.orDie,
290
- Effect.provide(ctx),
291
- Effect.tap((store) => Effect.sync(() => stores.set(namespace, store)))
292
- )
293
- }))
294
- const getStore = !config?.allowNamespace
295
- ? Effect.succeed(primary)
296
- : storeId.asEffect().pipe(Effect.flatMap((namespace) => ensureStore(namespace)))
297
- const s: Store<IdKey, Encoded> = {
298
- seedNamespace: (namespace) => ensureStore(namespace).pipe(Effect.asVoid),
299
- all: Effect.flatMap(getStore, (_) => _.all),
300
- queryRaw: (...args) => Effect.flatMap(getStore, (_) => _.queryRaw(...args)),
301
- find: (...args) => Effect.flatMap(getStore, (_) => _.find(...args)),
302
- filter: (...args) => Effect.flatMap(getStore, (_) => _.filter(...args)),
303
- set: (...args) => Effect.flatMap(getStore, (_) => _.set(...args)),
304
- batchSet: (...args) => Effect.flatMap(getStore, (_) => _.batchSet(...args)),
305
- bulkSet: (...args) => Effect.flatMap(getStore, (_) => _.bulkSet(...args)),
306
- batchRemove: (...args) => Effect.flatMap(getStore, (_) => _.batchRemove(...args))
260
+ ) {
261
+ const primary = yield* makeMemoryStoreInt<IdKey, Encoded, R, E>(
262
+ modelName,
263
+ idKey,
264
+ "primary",
265
+ seed,
266
+ config?.defaultValues
267
+ )
268
+ const ctx = yield* Effect.context<R>()
269
+ const stores = new Map([["primary", primary]])
270
+ const semaphores = new Map<string, Semaphore.Semaphore>()
271
+ const getSem = (ns: string) => {
272
+ let sem = semaphores.get(ns)
273
+ if (!sem) {
274
+ sem = Semaphore.makeUnsafe(1)
275
+ semaphores.set(ns, sem)
307
276
  }
308
- return s
309
- })
277
+ return sem
278
+ }
279
+ const ensureStore = (namespace: string) =>
280
+ getSem(namespace).withPermits(1)(Effect.suspend(() => {
281
+ const store = stores.get(namespace)
282
+ if (store) return Effect.succeed(store)
283
+ if (config?.allowNamespace && !config.allowNamespace(namespace)) {
284
+ throw new Error(`Namespace ${namespace} not allowed!`)
285
+ }
286
+ return makeMemoryStoreInt(modelName, idKey, namespace, seed, config?.defaultValues)
287
+ .pipe(
288
+ Effect.orDie,
289
+ Effect.provide(ctx),
290
+ Effect.tap((store) => Effect.sync(() => stores.set(namespace, store)))
291
+ )
292
+ }))
293
+ const getStore = !config?.allowNamespace
294
+ ? Effect.succeed(primary)
295
+ : storeId.asEffect().pipe(Effect.flatMap((namespace) => ensureStore(namespace)))
296
+ const s: Store<IdKey, Encoded> = {
297
+ seedNamespace: (namespace) => ensureStore(namespace).pipe(Effect.asVoid),
298
+ all: Effect.flatMap(getStore, (_) => _.all),
299
+ queryRaw: (...args) => Effect.flatMap(getStore, (_) => _.queryRaw(...args)),
300
+ find: (...args) => Effect.flatMap(getStore, (_) => _.find(...args)),
301
+ filter: (...args) => Effect.flatMap(getStore, (_) => _.filter(...args)),
302
+ set: (...args) => Effect.flatMap(getStore, (_) => _.set(...args)),
303
+ batchSet: (...args) => Effect.flatMap(getStore, (_) => _.batchSet(...args)),
304
+ bulkSet: (...args) => Effect.flatMap(getStore, (_) => _.bulkSet(...args)),
305
+ batchRemove: (...args) => Effect.flatMap(getStore, (_) => _.batchRemove(...args))
306
+ }
307
+ return s
308
+ })
310
309
  })
311
310
 
312
311
  export const MemoryStoreLive = StoreMaker.toLayer(Effect.sync(() => makeMemoryStore()))