@effect-app/infra 0.48.0 → 0.49.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 (163) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/_cjs/_ext/Array.cjs.map +1 -1
  3. package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
  4. package/_cjs/api/express/makeJsonSchema.cjs +2 -2
  5. package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
  6. package/_cjs/api/express/schema/jwt.cjs.map +1 -1
  7. package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
  8. package/_cjs/api/express/schema/routing.cjs.map +1 -1
  9. package/_cjs/api/reportError.cjs.map +1 -1
  10. package/_cjs/api/routing.cjs.map +1 -1
  11. package/_cjs/api/setupRequest.cjs.map +1 -1
  12. package/_cjs/api/writeDocs.cjs.map +1 -1
  13. package/_cjs/rateLimit.cjs.map +1 -1
  14. package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
  15. package/_cjs/services/Emailer/fake.cjs.map +1 -1
  16. package/_cjs/services/Operations/live.cjs.map +1 -1
  17. package/_cjs/services/Operations/service.cjs.map +1 -1
  18. package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
  19. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  20. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  21. package/_cjs/services/Repository.cjs +8 -8
  22. package/_cjs/services/Repository.cjs.map +1 -1
  23. package/_cjs/services/RepositoryBase.cjs +13 -13
  24. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  25. package/_cjs/services/RequestContextContainer.cjs.map +1 -1
  26. package/_cjs/services/Store/Cosmos.cjs +9 -9
  27. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  28. package/_cjs/services/Store/Cosmos.test.cjs.map +1 -1
  29. package/_cjs/services/Store/Disk.cjs.map +1 -1
  30. package/_cjs/services/Store/Memory.cjs +42 -42
  31. package/_cjs/services/Store/Memory.cjs.map +1 -1
  32. package/_cjs/services/Store/Redis.cjs +13 -13
  33. package/_cjs/services/Store/Redis.cjs.map +1 -1
  34. package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
  35. package/_cjs/services/Store/index.cjs.map +1 -1
  36. package/_cjs/services/Store/service.cjs.map +1 -1
  37. package/_cjs/services/Store/utils.cjs +2 -3
  38. package/_cjs/services/Store/utils.cjs.map +1 -1
  39. package/_cjs/services/simpledb/cosmosdb.cjs +12 -4
  40. package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
  41. package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
  42. package/_cjs/services/simpledb/memdb.cjs.map +1 -1
  43. package/_cjs/services/simpledb/mongodb.cjs +15 -5
  44. package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
  45. package/_cjs/services/simpledb/redisdb.cjs +13 -7
  46. package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
  47. package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
  48. package/_src/_ext/Array.ts +3 -2
  49. package/_src/api/defaultErrorHandler.ts +14 -12
  50. package/_src/api/express/makeJsonSchema.ts +6 -5
  51. package/_src/api/express/schema/jwt.ts +1 -1
  52. package/_src/api/express/schema/requestHandler.ts +112 -100
  53. package/_src/api/express/schema/routing.ts +61 -55
  54. package/_src/api/reportError.ts +16 -12
  55. package/_src/api/routing.ts +157 -135
  56. package/_src/api/setupRequest.ts +3 -1
  57. package/_src/api/writeDocs.ts +4 -3
  58. package/_src/rateLimit.ts +21 -14
  59. package/_src/services/Emailer/Sendgrid.ts +11 -10
  60. package/_src/services/Emailer/fake.ts +2 -1
  61. package/_src/services/Operations/live.ts +18 -12
  62. package/_src/services/Operations/service.ts +26 -17
  63. package/_src/services/QueueMaker/errors.ts +7 -6
  64. package/_src/services/QueueMaker/memQueue.ts +13 -11
  65. package/_src/services/QueueMaker/sbqueue.ts +16 -14
  66. package/_src/services/Repository.ts +53 -51
  67. package/_src/services/RepositoryBase.ts +33 -28
  68. package/_src/services/RequestContextContainer.ts +4 -3
  69. package/_src/services/Store/Cosmos.test.ts +31 -29
  70. package/_src/services/Store/Cosmos.ts +203 -180
  71. package/_src/services/Store/Disk.ts +19 -18
  72. package/_src/services/Store/Memory.ts +37 -32
  73. package/_src/services/Store/Redis.ts +31 -27
  74. package/_src/services/Store/codeFilter.test.ts +26 -16
  75. package/_src/services/Store/index.ts +26 -24
  76. package/_src/services/Store/service.ts +5 -5
  77. package/_src/services/Store/utils.ts +27 -24
  78. package/_src/services/simpledb/cosmosdb.ts +61 -51
  79. package/_src/services/simpledb/diskdb.ts +38 -31
  80. package/_src/services/simpledb/memdb.ts +25 -21
  81. package/_src/services/simpledb/mongodb.ts +40 -35
  82. package/_src/services/simpledb/redisdb.ts +66 -55
  83. package/_src/services/simpledb/simpledb.ts +32 -30
  84. package/dist/_ext/Array.d.ts.map +1 -1
  85. package/dist/_ext/Array.js +2 -2
  86. package/dist/api/defaultErrorHandler.d.ts.map +1 -1
  87. package/dist/api/defaultErrorHandler.js +5 -5
  88. package/dist/api/express/makeJsonSchema.d.ts +0 -1
  89. package/dist/api/express/makeJsonSchema.d.ts.map +1 -1
  90. package/dist/api/express/makeJsonSchema.js +4 -4
  91. package/dist/api/express/schema/jwt.js +2 -2
  92. package/dist/api/express/schema/requestHandler.d.ts.map +1 -1
  93. package/dist/api/express/schema/requestHandler.js +17 -17
  94. package/dist/api/express/schema/routing.d.ts.map +1 -1
  95. package/dist/api/express/schema/routing.js +13 -11
  96. package/dist/api/reportError.d.ts.map +1 -1
  97. package/dist/api/reportError.js +6 -6
  98. package/dist/api/routing.d.ts.map +1 -1
  99. package/dist/api/routing.js +29 -25
  100. package/dist/api/setupRequest.d.ts.map +1 -1
  101. package/dist/api/setupRequest.js +2 -2
  102. package/dist/api/writeDocs.d.ts.map +1 -1
  103. package/dist/api/writeDocs.js +5 -4
  104. package/dist/rateLimit.d.ts +4 -4
  105. package/dist/rateLimit.d.ts.map +1 -1
  106. package/dist/rateLimit.js +5 -4
  107. package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
  108. package/dist/services/Emailer/Sendgrid.js +9 -9
  109. package/dist/services/Emailer/fake.d.ts.map +1 -1
  110. package/dist/services/Emailer/fake.js +1 -1
  111. package/dist/services/Operations/live.d.ts.map +1 -1
  112. package/dist/services/Operations/live.js +11 -8
  113. package/dist/services/Operations/service.d.ts.map +1 -1
  114. package/dist/services/Operations/service.js +10 -4
  115. package/dist/services/QueueMaker/errors.d.ts.map +1 -1
  116. package/dist/services/QueueMaker/errors.js +5 -5
  117. package/dist/services/QueueMaker/memQueue.d.ts +1 -1
  118. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
  119. package/dist/services/QueueMaker/memQueue.js +5 -4
  120. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  121. package/dist/services/QueueMaker/sbqueue.js +5 -5
  122. package/dist/services/Repository.d.ts +34 -35
  123. package/dist/services/Repository.d.ts.map +1 -1
  124. package/dist/services/Repository.js +16 -16
  125. package/dist/services/RepositoryBase.d.ts +4 -4
  126. package/dist/services/RepositoryBase.d.ts.map +1 -1
  127. package/dist/services/RepositoryBase.js +25 -22
  128. package/dist/services/RequestContextContainer.d.ts.map +1 -1
  129. package/dist/services/RequestContextContainer.js +3 -3
  130. package/dist/services/Store/Cosmos.d.ts +3 -3
  131. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  132. package/dist/services/Store/Cosmos.js +53 -39
  133. package/dist/services/Store/Disk.d.ts.map +1 -1
  134. package/dist/services/Store/Disk.js +18 -18
  135. package/dist/services/Store/Memory.d.ts +2 -3
  136. package/dist/services/Store/Memory.d.ts.map +1 -1
  137. package/dist/services/Store/Memory.js +44 -44
  138. package/dist/services/Store/Redis.d.ts +4 -4
  139. package/dist/services/Store/Redis.d.ts.map +1 -1
  140. package/dist/services/Store/Redis.js +19 -17
  141. package/dist/services/Store/index.d.ts.map +1 -1
  142. package/dist/services/Store/index.js +4 -4
  143. package/dist/services/Store/service.d.ts +4 -5
  144. package/dist/services/Store/service.d.ts.map +1 -1
  145. package/dist/services/Store/service.js +3 -3
  146. package/dist/services/Store/utils.d.ts +2 -2
  147. package/dist/services/Store/utils.d.ts.map +1 -1
  148. package/dist/services/Store/utils.js +16 -14
  149. package/dist/services/simpledb/cosmosdb.d.ts.map +1 -1
  150. package/dist/services/simpledb/cosmosdb.js +16 -12
  151. package/dist/services/simpledb/diskdb.d.ts.map +1 -1
  152. package/dist/services/simpledb/diskdb.js +15 -15
  153. package/dist/services/simpledb/memdb.d.ts.map +1 -1
  154. package/dist/services/simpledb/memdb.js +6 -6
  155. package/dist/services/simpledb/mongodb.d.ts +5 -5
  156. package/dist/services/simpledb/mongodb.d.ts.map +1 -1
  157. package/dist/services/simpledb/mongodb.js +9 -9
  158. package/dist/services/simpledb/redisdb.d.ts +4 -4
  159. package/dist/services/simpledb/redisdb.d.ts.map +1 -1
  160. package/dist/services/simpledb/redisdb.js +18 -18
  161. package/dist/services/simpledb/simpledb.d.ts.map +1 -1
  162. package/dist/services/simpledb/simpledb.js +9 -9
  163. package/package.json +7 -7
@@ -19,10 +19,13 @@ export abstract class Operations extends ServiceTaggedClass<Operations>()(Operat
19
19
  export function forkOperation<R, E, A>(self: Effect<R, E, A>) {
20
20
  return Debug.untraced(() =>
21
21
  Operations.flatMap(
22
- Operations =>
23
- Scope.make()
24
- .flatMap(scope =>
25
- Operations.register.extend(scope)
22
+ (Operations) =>
23
+ Scope
24
+ .make()
25
+ .flatMap((scope) =>
26
+ Operations
27
+ .register
28
+ .extend(scope)
26
29
  .tap(() => self.use(scope).forkDaemonReportRequestUnexpected)
27
30
  )
28
31
  )
@@ -40,13 +43,16 @@ export function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect<R,
40
43
  * @tsplus static effect/io/Effect.Ops forkOperation
41
44
  */
42
45
  export function forkOperation2<R, E, A>(self: (opId: OperationId) => Effect<R, E, A>) {
43
- return Debug.untraced(restore =>
46
+ return Debug.untraced((restore) =>
44
47
  Operations.flatMap(
45
- Operations =>
46
- Scope.make()
47
- .flatMap(scope =>
48
- Operations.register.extend(scope)
49
- .tap(id => restore(self)(id).use(scope).forkDaemonReportRequestUnexpected)
48
+ (Operations) =>
49
+ Scope
50
+ .make()
51
+ .flatMap((scope) =>
52
+ Operations
53
+ .register
54
+ .extend(scope)
55
+ .tap((id) => restore(self)(id).use(scope).forkDaemonReportRequestUnexpected)
50
56
  )
51
57
  )
52
58
  )
@@ -59,14 +65,17 @@ export function forkOperationWithEffect<R, R2, E, E2, A, A2>(
59
65
  self: (id: OperationId) => Effect<R, E, A>,
60
66
  fnc: (id: OperationId) => Effect<R2, E2, A2>
61
67
  ) {
62
- return Debug.untraced(restore =>
68
+ return Debug.untraced((restore) =>
63
69
  Operations.flatMap(
64
- Operations =>
65
- Scope.make()
66
- .flatMap(scope =>
67
- Operations.register.extend(scope)
68
- .tap(opId => restore(self)(opId).use(scope).forkDaemonReportRequestUnexpected)
69
- .tap(opId => restore(fnc)(opId).interruptible.forkScoped.extend(scope))
70
+ (Operations) =>
71
+ Scope
72
+ .make()
73
+ .flatMap((scope) =>
74
+ Operations
75
+ .register
76
+ .extend(scope)
77
+ .tap((opId) => restore(self)(opId).use(scope).forkDaemonReportRequestUnexpected)
78
+ .tap((opId) => restore(fnc)(opId).interruptible.forkScoped.extend(scope))
70
79
  )
71
80
  )
72
81
  )
@@ -14,10 +14,10 @@ export class FatalQueueException<E> extends CauseException<E> {
14
14
  }
15
15
  }
16
16
 
17
- const reportQueueError_ = reportError(cause => new MessageException(cause))
17
+ const reportQueueError_ = reportError((cause) => new MessageException(cause))
18
18
 
19
19
  export const reportQueueError = <E>(cause: Cause<E>, context?: Record<string, unknown> | undefined) =>
20
- RequestContextContainer.getOption.flatMap(requestContext =>
20
+ RequestContextContainer.getOption.flatMap((requestContext) =>
21
21
  reportQueueError_(cause, { requestContext: requestContext.value, ...context })
22
22
  )
23
23
 
@@ -35,16 +35,17 @@ export function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>) {
35
35
  }
36
36
 
37
37
  export const reportFatalQueueError = reportError(
38
- cause => new FatalQueueException(cause)
38
+ (cause) => new FatalQueueException(cause)
39
39
  )
40
40
 
41
41
  export function reportNonInterruptedFailure(context?: Record<string, unknown>) {
42
42
  const report = reportNonInterruptedFailureCause(context)
43
43
  return <R, E, A>(inp: Effect<R, E, A>): Effect<R, never, Exit<E, A>> =>
44
- inp.exit
45
- .flatMap(result =>
44
+ inp
45
+ .exit
46
+ .flatMap((result) =>
46
47
  result.match(
47
- cause => report(cause).map(() => result),
48
+ (cause) => report(cause).map(() => result),
48
49
  () => Effect(result)
49
50
  )
50
51
  )
@@ -39,17 +39,18 @@ export function makeMemQueue<
39
39
  Effect.gen(function*($) {
40
40
  const requestContext = yield* $(RequestContextContainer.get)
41
41
  return yield* $(
42
- messages.forEachEffect(m =>
43
- // we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
44
- Effect(
45
- JSON.stringify(
46
- encoder({ body: m, meta: requestContext })
42
+ messages
43
+ .forEachEffect((m) =>
44
+ // we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
45
+ Effect(
46
+ JSON.stringify(
47
+ encoder({ body: m, meta: requestContext })
48
+ )
47
49
  )
50
+ // .tap((msg) => info("Publishing Mem Message: " + utils.inspect(msg)))
51
+ .flatMap((_) => q.offer(_))
52
+ .asUnit
48
53
  )
49
- // .tap((msg) => info("Publishing Mem Message: " + utils.inspect(msg)))
50
- .flatMap(_ => q.offer(_))
51
- .asUnit
52
- )
53
54
  .forkDaemonReportQueue
54
55
  )
55
56
  }),
@@ -79,8 +80,9 @@ export function makeMemQueue<
79
80
  )
80
81
  )
81
82
  return yield* $(
82
- qDrain.take()
83
- .flatMap(x => processMessage(x).uninterruptible.fork.flatMap(_ => _.join))
83
+ qDrain
84
+ .take()
85
+ .flatMap((x) => processMessage(x).uninterruptible.fork.flatMap((_) => _.join))
84
86
  // TODO: normally a failed item would be returned to the queue and retried up to X times.
85
87
  // .flatMap(_ => _._tag === "Failure" && !isInterrupted ? qDrain.offer(x) : Effect.unit) // TODO: retry count tracking and max retries.
86
88
  .apply(silenceAndReportError)
@@ -50,8 +50,9 @@ export function makeServiceBusQueue<
50
50
  const handleEvent = yield* $(makeHandleEvent)
51
51
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
52
  function processMessage(messageBody: any) {
53
- return Effect.sync(() => JSON.parse(messageBody))
54
- .flatMap(x => parseDrain(x))
53
+ return Effect
54
+ .sync(() => JSON.parse(messageBody))
55
+ .flatMap((x) => parseDrain(x))
55
56
  .orDie
56
57
  .flatMap(({ body, meta }) =>
57
58
  Effect
@@ -78,8 +79,8 @@ export function makeServiceBusQueue<
78
79
 
79
80
  return yield* $(
80
81
  subscribe({
81
- processMessage: x => processMessage(x.body).uninterruptible.flatMap(_ => _.done),
82
- processError: err => Effect(captureException(err.error))
82
+ processMessage: (x) => processMessage(x.body).uninterruptible.flatMap((_) => _.done),
83
+ processError: (err) => Effect(captureException(err.error))
83
84
  })
84
85
  .provideSomeLayer(receiverLayer)
85
86
  )
@@ -89,17 +90,18 @@ export function makeServiceBusQueue<
89
90
  Effect.gen(function*($) {
90
91
  const requestContext = yield* $(RequestContextContainer.get)
91
92
  return yield* $(
92
- Effect.promise(() =>
93
- s.sendMessages(
94
- messages.map(x => ({
95
- body: JSON.stringify(
96
- encoder({ body: x, meta: requestContext })
97
- ),
98
- messageId: x.id, /* correllationid: requestId */
99
- contentType: "application/json"
100
- }))
93
+ Effect
94
+ .promise(() =>
95
+ s.sendMessages(
96
+ messages.map((x) => ({
97
+ body: JSON.stringify(
98
+ encoder({ body: x, meta: requestContext })
99
+ ),
100
+ messageId: x.id, /* correllationid: requestId */
101
+ contentType: "application/json"
102
+ }))
103
+ )
101
104
  )
102
- )
103
105
  .forkDaemonReportQueue
104
106
  )
105
107
  })
@@ -20,7 +20,7 @@ export interface Repository<
20
20
  > {
21
21
  itemType: ItemType
22
22
  find: (id: T["id"]) => Effect<ContextMap | RequestContextContainer, never, Option<T>>
23
- all: Effect<ContextMap, never, Chunk<T>>
23
+ all: Effect<ContextMap, never, T[]>
24
24
  saveAndPublish: (
25
25
  items: Iterable<T>,
26
26
  events?: Iterable<Evt>
@@ -32,8 +32,8 @@ export interface Repository<
32
32
  setEtag: (id: string, eTag: string | undefined) => void
33
33
  ) => unknown // TODO
34
34
  parse: (a: unknown, env?: ParserEnv | undefined) => T
35
- all: Effect<ContextMap, never, Chunk<PM>>
36
- filter: (filter: Filter<PM>, cursor?: { limit?: number; skip?: number }) => Effect<ContextMap, never, Chunk<PM>>
35
+ all: Effect<ContextMap, never, PM[]>
36
+ filter: (filter: Filter<PM>, cursor?: { limit?: number; skip?: number }) => Effect<ContextMap, never, PM[]>
37
37
  }
38
38
  }
39
39
 
@@ -61,7 +61,7 @@ export function get<
61
61
  self: Repository<T, PM, Evt, ItemType>,
62
62
  id: T["id"]
63
63
  ) {
64
- return self.find(id).flatMap(_ => _.encaseInEffect(() => new NotFoundError(self.itemType, id)))
64
+ return self.find(id).flatMap((_) => _.encaseInEffect(() => new NotFoundError(self.itemType, id)))
65
65
  }
66
66
 
67
67
  /**
@@ -73,7 +73,7 @@ export function filter<
73
73
  Evt,
74
74
  ItemType extends string
75
75
  >(self: Repository<T, PM, Evt, ItemType>, filter: Predicate<T>) {
76
- return self.all.map(_ => _.filter(filter))
76
+ return self.all.map((_) => _.filter(filter))
77
77
  }
78
78
 
79
79
  /**
@@ -85,7 +85,7 @@ export function filterAll<
85
85
  Evt,
86
86
  ItemType extends string,
87
87
  S extends T
88
- >(self: Repository<T, PM, Evt, ItemType>, map: (items: Chunk<T>) => Chunk<S>) {
88
+ >(self: Repository<T, PM, Evt, ItemType>, map: (items: T[]) => S[]) {
89
89
  return self.all.map(map)
90
90
  }
91
91
 
@@ -99,7 +99,7 @@ export function collect<
99
99
  ItemType extends string,
100
100
  S extends T
101
101
  >(self: Repository<T, PM, Evt, ItemType>, collect: (item: T) => Option<S>) {
102
- return self.all.map(_ => _.filterMap(collect))
102
+ return self.all.map((_) => _.filterMap(collect))
103
103
  }
104
104
 
105
105
  /**
@@ -131,9 +131,9 @@ export function projectEffect<
131
131
  map: Effect<R, E, { filter?: Filter<PM>; collect?: (t: PM) => Option<S>; limit?: number; skip?: number }>
132
132
  ) {
133
133
  // TODO: a projection that gets sent to the db instead.
134
- return map.flatMap(f =>
134
+ return map.flatMap((f) =>
135
135
  (f.filter ? self.utils.filter(f.filter, { limit: f.limit, skip: f.skip }) : self.utils.all)
136
- .map(_ => f.collect ? _.filterMap(f.collect) : _ as unknown as Chunk<S>)
136
+ .map((_) => f.collect ? _.filterMap(f.collect) : _ as unknown as S[])
137
137
  )
138
138
  }
139
139
 
@@ -170,16 +170,16 @@ export function queryEffect<
170
170
  // TODO: think about collectPM, collectE, and collect(Parsed)
171
171
  map: Effect<R, E, { filter?: Filter<PM>; collect?: (t: T) => Option<S>; limit?: number; skip?: number }>
172
172
  ) {
173
- return map.flatMap(f =>
173
+ return map.flatMap((f) =>
174
174
  (f.filter ? self.utils.filter(f.filter, { limit: f.limit, skip: f.skip }) : self.utils.all)
175
- .flatMap(items =>
176
- Do($ => {
175
+ .flatMap((items) =>
176
+ Do(($) => {
177
177
  const { set } = $(ContextMap)
178
- return items.map(_ => self.utils.mapReverse(_, set))
178
+ return items.map((_) => self.utils.mapReverse(_, set))
179
179
  })
180
180
  )
181
- .map(_ => _.map(_ => self.utils.parse(_)))
182
- .map(_ => f.collect ? _.filterMap(f.collect) : _ as unknown as Chunk<S>)
181
+ .map((_) => _.map((_) => self.utils.parse(_)))
182
+ .map((_) => f.collect ? _.filterMap(f.collect) : _ as unknown as S[])
183
183
  )
184
184
  }
185
185
 
@@ -199,20 +199,20 @@ export function queryOneEffect<
199
199
  // TODO: think about collectPM, collectE, and collect(Parsed)
200
200
  map: Effect<R, E, { filter?: Filter<PM>; collect?: (t: T) => Option<S> }>
201
201
  ) {
202
- return map.flatMap(f =>
202
+ return map.flatMap((f) =>
203
203
  (f.filter ? self.utils.filter(f.filter, { limit: 1 }) : self.utils.all)
204
- .flatMap(items =>
205
- Do($ => {
204
+ .flatMap((items) =>
205
+ Do(($) => {
206
206
  const { set } = $(ContextMap)
207
- return items.map(_ => self.utils.mapReverse(_, set))
207
+ return items.map((_) => self.utils.mapReverse(_, set))
208
208
  })
209
209
  )
210
- .map(_ => _.map(_ => self.utils.parse(_)))
211
- .flatMap(_ =>
212
- (f.collect ? _.filterMap(f.collect) : _ as unknown as Chunk<S>)
213
- .toNonEmptyArray.encaseInEffect(() => new NotFoundError(self.itemType, JSON.stringify(f.filter))).map(_ =>
214
- _[0]
215
- )
210
+ .map((_) => _.map((_) => self.utils.parse(_)))
211
+ .flatMap((_) =>
212
+ (f.collect ? _.filterMap(f.collect) : _ as unknown as S[])
213
+ .toNonEmpty
214
+ .encaseInEffect(() => new NotFoundError(self.itemType, JSON.stringify(f.filter)))
215
+ .map((_) => _[0])
216
216
  )
217
217
  )
218
218
  }
@@ -267,10 +267,10 @@ export function queryAndSavePureEffect<
267
267
  // TODO: think about collectPM, collectE, and collect(Parsed)
268
268
  map: Effect<R, E, { filter: Filter<PM>; collect?: (t: T) => Option<S>; limit?: number; skip?: number }>
269
269
  ) {
270
- return <R2, A, E2, S2 extends T>(pure: Effect<FixEnv<R2, Evt, Chunk<S>, Chunk<S2>>, E2, A>) =>
271
- Debug.untraced(restore =>
270
+ return <R2, A, E2, S2 extends T>(pure: Effect<FixEnv<R2, Evt, S[], S2[]>, E2, A>) =>
271
+ Debug.untraced((restore) =>
272
272
  queryEffect(self, map)
273
- .flatMap(restore(_ => self.saveManyWithPure_(_, pure)))
273
+ .flatMap(restore((_) => self.saveManyWithPure_(_, pure)))
274
274
  )
275
275
  }
276
276
 
@@ -300,7 +300,7 @@ export function saveManyWithPure<
300
300
  Evt,
301
301
  ItemType extends string
302
302
  >(self: Repository<T, PM, Evt, ItemType>) {
303
- return <R, A, E, S1 extends T, S2 extends T>(pure: Effect<FixEnv<R, Evt, Chunk<S1>, Chunk<S2>>, E, A>) =>
303
+ return <R, A, E, S1 extends T, S2 extends T>(pure: Effect<FixEnv<R, Evt, S1[], S2[]>, E, A>) =>
304
304
  (items: Iterable<S1>) => saveManyWithPure_(self, items, pure)
305
305
  }
306
306
 
@@ -314,7 +314,7 @@ export function byIdAndSaveWithPure<
314
314
  ItemType extends string
315
315
  >(self: Repository<T, PM, Evt, ItemType>, id: T["id"]) {
316
316
  return <R, A, E, S2 extends T>(pure: Effect<FixEnv<R, Evt, T, S2>, E, A>) =>
317
- get(self, id).flatMap(item => saveWithPure_(self, item, pure))
317
+ get(self, id).flatMap((item) => saveWithPure_(self, item, pure))
318
318
  }
319
319
 
320
320
  /**
@@ -350,11 +350,11 @@ export function saveManyWithPure_<
350
350
  >(
351
351
  self: Repository<T, PM, Evt, ItemType>,
352
352
  items: Iterable<S1>,
353
- pure: Effect<FixEnv<R, Evt, Chunk<S1>, Chunk<S2>>, E, A>
353
+ pure: Effect<FixEnv<R, Evt, S1[], S2[]>, E, A>
354
354
  ) {
355
355
  return saveAllWithEffectInt(
356
356
  self,
357
- pure.runTerm(items.toChunk)
357
+ pure.runTerm([...items])
358
358
  )
359
359
  }
360
360
 
@@ -379,7 +379,8 @@ export function saveWithPure_<
379
379
  ) {
380
380
  return saveAllWithEffectInt(
381
381
  self,
382
- pure.runTerm(item)
382
+ pure
383
+ .runTerm(item)
383
384
  .map(([item, events, a]) => [[item], events, a])
384
385
  )
385
386
  }
@@ -397,7 +398,7 @@ export function saveAllWithEffectInt<
397
398
  self: Repository<T, PM, Evt, ItemType>,
398
399
  gen: Effect<R, E, readonly [Iterable<P>, Iterable<Evt>, A]>
399
400
  ) {
400
- return Debug.untraced(restore =>
401
+ return Debug.untraced((restore) =>
401
402
  gen
402
403
  .flatMap(
403
404
  ([items, events, a]) => restore(() => self.saveAndPublish(items, events))().map(() => a)
@@ -422,9 +423,9 @@ export function queryAndSavePureEffectBatched<
422
423
  map: Effect<R, E, { filter: Filter<PM>; collect?: (t: T) => Option<S>; limit?: number; skip?: number }>,
423
424
  batchSize = 100
424
425
  ) {
425
- return <R2, A, E2, S2 extends T>(pure: Effect<FixEnv<R2, Evt, Chunk<S>, Chunk<S2>>, E2, A>) =>
426
+ return <R2, A, E2, S2 extends T>(pure: Effect<FixEnv<R2, Evt, S[], S2[]>, E2, A>) =>
426
427
  queryEffect(self, map)
427
- .flatMap(_ => self.saveManyWithPureBatched_(_, pure, batchSize))
428
+ .flatMap((_) => self.saveManyWithPureBatched_(_, pure, batchSize))
428
429
  }
429
430
 
430
431
  /**
@@ -454,7 +455,7 @@ export function saveManyWithPureBatched<
454
455
  Evt,
455
456
  ItemType extends string
456
457
  >(self: Repository<T, PM, Evt, ItemType>, batchSize = 100) {
457
- return <R, A, E, S1 extends T, S2 extends T>(pure: Effect<FixEnv<R, Evt, Chunk<S1>, Chunk<S2>>, E, A>) =>
458
+ return <R, A, E, S1 extends T, S2 extends T>(pure: Effect<FixEnv<R, Evt, S1[], S2[]>, E, A>) =>
458
459
  (items: Iterable<S1>) => saveManyWithPureBatched_(self, items, pure, batchSize)
459
460
  }
460
461
 
@@ -475,14 +476,15 @@ export function saveManyWithPureBatched_<
475
476
  >(
476
477
  self: Repository<T, PM, Evt, ItemType>,
477
478
  items: Iterable<S1>,
478
- pure: Effect<FixEnv<R, Evt, Chunk<S1>, Chunk<S2>>, E, A>,
479
+ pure: Effect<FixEnv<R, Evt, S1[], S2[]>, E, A>,
479
480
  batchSize = 100
480
481
  ) {
481
- return items.chunk(batchSize)
482
- .forEachEffect(batch =>
482
+ return items
483
+ .chunk(batchSize)
484
+ .forEachEffect((batch) =>
483
485
  saveAllWithEffectInt(
484
486
  self,
485
- pure.runTerm(batch.toChunk)
487
+ pure.runTerm(batch)
486
488
  )
487
489
  )
488
490
  }
@@ -491,8 +493,8 @@ const anyDSL = makeDSL<any, any, any>()
491
493
 
492
494
  export type AllDSL<T, Evt> =
493
495
  & (<R, A, E, S1 extends T, S2 extends T>(
494
- pure: (dsl: PureDSL<Chunk<S1>, Chunk<S2>, Evt>) => Effect<R, E, A>
495
- ) => Effect<FixEnv<R, Evt, Chunk<S1>, Chunk<S2>>, E, A>)
496
+ pure: (dsl: PureDSL<S1[], S2[], Evt>) => Effect<R, E, A>
497
+ ) => Effect<FixEnv<R, Evt, S1[], S2[]>, E, A>)
496
498
  & AllDSLExt<T, Evt>
497
499
 
498
500
  /**
@@ -500,11 +502,11 @@ export type AllDSL<T, Evt> =
500
502
  */
501
503
  export interface AllDSLExt<T, Evt> {
502
504
  modify: <R, E, A, S1 extends T, S2 extends T>(
503
- pure: (items: Chunk<S1>, dsl: PureDSL<Chunk<S1>, Chunk<S2>, Evt>) => Effect<R, E, A>
504
- ) => Effect<FixEnv<R, Evt, Chunk<S1>, Chunk<S2>>, E, A>
505
+ pure: (items: S1[], dsl: PureDSL<S1[], S2[], Evt>) => Effect<R, E, A>
506
+ ) => Effect<FixEnv<R, Evt, S1[], S2[]>, E, A>
505
507
  update: <R, E, S1 extends T, S2 extends T>(
506
- pure: (items: Chunk<S1>, log: (...evt: Evt[]) => PureLogT<Evt>) => Effect<R, E, Chunk<S2>>
507
- ) => Effect<FixEnv<R, Evt, Chunk<S1>, Chunk<S2>>, E, Chunk<S2>>
508
+ pure: (items: S1[], log: (...evt: Evt[]) => PureLogT<Evt>) => Effect<R, E, S2[]>
509
+ ) => Effect<FixEnv<R, Evt, S1[], S2[]>, E, S2[]>
508
510
  }
509
511
 
510
512
  export function makeAllDSL<T, Evt>() {
@@ -542,9 +544,9 @@ export function updateWithOne<T, Evt, S1 extends T, S2 extends T>(self: OneDSL<T
542
544
  */
543
545
  export function updateWith<T, Evt, S1 extends T, S2 extends T>(
544
546
  self: AllDSL<T, Evt>,
545
- upd: (item: Chunk<S1>) => Chunk<S2>
547
+ upd: (item: S1[]) => S2[]
546
548
  ) {
547
- return self.update((_: Chunk<S1>) => Effect(upd(_)))
549
+ return self.update((_: S1[]) => Effect(upd(_)))
548
550
  }
549
551
 
550
552
  export function makeOneDSL<T, Evt>(): OneDSL<T, Evt> {
@@ -564,7 +566,7 @@ export function makeDSL<S1, S2, Evt>() {
564
566
  dsl: PureDSL<S1, S2, Evt>
565
567
  ) => Effect<R, E, A>
566
568
  ): Effect<FixEnv<R, Evt, S1, S2>, E, A> {
567
- return dsl.get.flatMap(items => pure(items, dsl)) as any
569
+ return dsl.get.flatMap((items) => pure(items, dsl)) as any
568
570
  }
569
571
 
570
572
  function update<
@@ -576,7 +578,7 @@ export function makeDSL<S1, S2, Evt>() {
576
578
  log: (...evt: Evt[]) => PureLogT<Evt>
577
579
  ) => Effect<R, E, S2>
578
580
  ): Effect<FixEnv<R, Evt, S1, S2>, E, S2> {
579
- return dsl.get.flatMap(items => pure(items, dsl.log).tap(dsl.set)) as any
581
+ return dsl.get.flatMap((items) => pure(items, dsl.log).tap(dsl.set)) as any
580
582
  }
581
583
 
582
584
  function withDSL<
@@ -8,7 +8,7 @@ import type {} from "@effect/data/Hash"
8
8
  import type { Opt } from "@effect-app/core/Option"
9
9
  import { makeCodec } from "@effect-app/infra/api/codec"
10
10
  import { makeFilters } from "@effect-app/infra/filter"
11
- import type { Chunk, Schema } from "@effect-app/prelude"
11
+ import type { Schema } from "@effect-app/prelude"
12
12
  import { EParserFor } from "@effect-app/prelude/schema"
13
13
  import type { InvalidStateError, OptimisticConcurrencyException } from "../errors.js"
14
14
 
@@ -22,7 +22,7 @@ export const RepositoryBase = <Service>() => {
22
22
  abstract class RepositoryBaseC implements Repository<T, PM, Evt, ItemType> {
23
23
  itemType: ItemType = itemType
24
24
  abstract find: (id: T["id"]) => Effect<ContextMap | RequestContextContainer, never, Opt<T>>
25
- abstract all: Effect<ContextMap, never, Chunk<T>>
25
+ abstract all: Effect<ContextMap, never, T[]>
26
26
  abstract saveAndPublish: (
27
27
  items: Iterable<T>,
28
28
  events?: Iterable<Evt>
@@ -33,8 +33,8 @@ export const RepositoryBase = <Service>() => {
33
33
  setEtag: (id: string, eTag: string | undefined) => void
34
34
  ) => unknown // TODO
35
35
  parse: (a: unknown, env?: ParserEnv | undefined) => T
36
- all: Effect<ContextMap, never, Chunk<PM>>
37
- filter: (filter: Filter<PM>, cursor?: { limit?: number; skip?: number }) => Effect<ContextMap, never, Chunk<PM>>
36
+ all: Effect<ContextMap, never, PM[]>
37
+ filter: (filter: Filter<PM>, cursor?: { limit?: number; skip?: number }) => Effect<ContextMap, never, PM[]>
38
38
  }
39
39
  abstract remove: (item: T) => Effect<ContextMap, never, void>
40
40
  static where = makeWhere<PM>()
@@ -94,24 +94,25 @@ export function makeRepo<
94
94
  partitionValue?: (a: PM) => string
95
95
  }
96
96
  ) {
97
- return Do($ => {
97
+ return Do(($) => {
98
98
  const store = $(mkStore(makeInitial, config))
99
99
 
100
- const allE = store.all.flatMap(items =>
101
- Do($ => {
100
+ const allE = store.all.flatMap((items) =>
101
+ Do(($) => {
102
102
  const { set } = $(ContextMap)
103
- return items.map(_ => mapReverse(_, set))
103
+ return items.map((_) => mapReverse(_, set))
104
104
  })
105
105
  )
106
106
 
107
- const all = allE.flatMap(_ => _.forEachEffect(EParserFor(schema).condemnDie))
107
+ const all = allE.flatMap((_) => _.forEachEffect(EParserFor(schema).condemnDie))
108
108
 
109
109
  function findE(id: T["id"]) {
110
- return store.find(id)
111
- .flatMap(items =>
112
- Do($ => {
110
+ return store
111
+ .find(id)
112
+ .flatMap((items) =>
113
+ Do(($) => {
113
114
  const { set } = $(ContextMap)
114
- return items.map(_ => mapReverse(_, set))
115
+ return items.map((_) => mapReverse(_, set))
115
116
  })
116
117
  )
117
118
  }
@@ -122,12 +123,12 @@ export function makeRepo<
122
123
 
123
124
  const saveAllE = (a: Iterable<E>) =>
124
125
  Effect(a.toNonEmptyArray)
125
- .flatMapOpt(a =>
126
- Do($ => {
126
+ .flatMapOpt((a) =>
127
+ Do(($) => {
127
128
  const { get, set } = $(ContextMap)
128
- const items = a.mapNonEmpty(_ => mapToPersistenceModel(_, get))
129
+ const items = a.mapNonEmpty((_) => mapToPersistenceModel(_, get))
129
130
  const ret = $(store.batchSet(items))
130
- ret.forEach(_ => set(_.id, _._etag))
131
+ ret.forEach((_) => set(_.id, _._etag))
131
132
  })
132
133
  )
133
134
 
@@ -141,7 +142,7 @@ export function makeRepo<
141
142
 
142
143
  const encode = Encoder.for(schema)
143
144
  function remove(item: T) {
144
- return Do($ => {
145
+ return Do(($) => {
145
146
  const { get, set } = $(ContextMap)
146
147
  const e = encode(item)
147
148
  $(store.remove(mapToPersistenceModel(e, get)))
@@ -156,9 +157,10 @@ export function makeRepo<
156
157
  utils: {
157
158
  mapReverse,
158
159
  parse: Parser.for(schema).unsafe,
159
- filter: store.filter
160
- .flow(_ => _.tap(items => ContextMap.map(({ set }) => items.forEach(_ => set(_.id, _._etag))))),
161
- all: store.all.tap(items => ContextMap.map(({ set }) => items.forEach(_ => set(_.id, _._etag))))
160
+ filter: store
161
+ .filter
162
+ .flow((_) => _.tap((items) => ContextMap.map(({ set }) => items.forEach((_) => set(_.id, _._etag))))),
163
+ all: store.all.tap((items) => ContextMap.map(({ set }) => items.forEach((_) => set(_.id, _._etag))))
162
164
  },
163
165
  itemType: name,
164
166
  find,
@@ -189,7 +191,7 @@ export function removeById<
189
191
  self: Repository<T, PM, Evt, ItemType>,
190
192
  id: T["id"]
191
193
  ) {
192
- return self.get(id).flatMap(_ => self.remove(_))
194
+ return self.get(id).flatMap((_) => self.remove(_))
193
195
  }
194
196
 
195
197
  export function makeWhere<PM extends { id: string; _etag: string | undefined }>() {
@@ -206,7 +208,7 @@ export function makeWhere<PM extends { id: string; _etag: string | undefined }>(
206
208
  ) => Where | readonly [Where, ...Where[]],
207
209
  mode?: "or" | "and"
208
210
  ) {
209
- return makeFilter_(f => {
211
+ return makeFilter_((f) => {
210
212
  const m = makeWhere ? makeWhere(f) : []
211
213
  return ({
212
214
  mode,
@@ -241,7 +243,7 @@ export function makeStore<
241
243
  const [_dec, encode] = makeCodec(schema)
242
244
  function encodeToPM() {
243
245
  const getEtag = () => undefined
244
- return flow(encode, v => mapToPersistenceModel(v, getEtag))
246
+ return flow(encode, (v) => mapToPersistenceModel(v, getEtag))
245
247
  }
246
248
 
247
249
  function mapToPersistenceModel(
@@ -257,7 +259,7 @@ export function makeStore<
257
259
  partitionValue?: (a: PM) => string
258
260
  }
259
261
  ) {
260
- return Do($ => {
262
+ return Do(($) => {
261
263
  const { make } = $(StoreMaker)
262
264
 
263
265
  const store = $(
@@ -265,11 +267,12 @@ export function makeStore<
265
267
  pluralize(name),
266
268
  makeInitial
267
269
  ? makeInitial
268
- .map(_ => _.map(encodeToPM()))
270
+ .map((_) => _.map(encodeToPM()))
269
271
  : undefined,
270
272
  {
271
273
  ...config,
272
- partitionValue: config?.partitionValue ?? (_ => "primary") /*(isIntegrationEvent(r) ? r.companyId : r.id*/
274
+ partitionValue: config?.partitionValue
275
+ ?? ((_) => "primary") /*(isIntegrationEvent(r) ? r.companyId : r.id*/
273
276
  }
274
277
  )
275
278
  )
@@ -352,7 +355,9 @@ export const RepositoryDefaultImpl = <Service>() => {
352
355
  partitionValue?: (a: PM) => string
353
356
  }
354
357
  ) {
355
- return this.make(publishEvents, makeInitial, config).map(impl => new this(impl) as any as Service).toLayer(this)
358
+ return this.make(publishEvents, makeInitial, config).map((impl) => new this(impl) as any as Service).toLayer(
359
+ this
360
+ )
356
361
  }
357
362
  static repo: any
358
363
  constructor(
@@ -7,11 +7,12 @@ export abstract class RequestContextContainer extends TagClass<RequestContextCon
7
7
  abstract readonly requestContext: Effect<never, never, RequestContext>
8
8
  abstract readonly update: (f: (rc: RequestContext) => RequestContext) => Effect<never, never, void>
9
9
  static get get(): Effect<RequestContextContainer, never, RequestContext> {
10
- return RequestContextContainer.flatMap(_ => _.requestContext)
10
+ return RequestContextContainer.flatMap((_) => _.requestContext)
11
11
  }
12
12
  static get getOption() {
13
- return Effect.contextWith((_: Context<never>) => Context.getOption(_, RequestContextContainer))
14
- .flatMap(requestContext =>
13
+ return Effect
14
+ .contextWith((_: Context<never>) => Context.getOption(_, RequestContextContainer))
15
+ .flatMap((requestContext) =>
15
16
  requestContext.isSome()
16
17
  ? requestContext.value.requestContext.map(Option.some)
17
18
  : Effect(Option.none)