@effect-app/infra 0.83.12 → 0.84.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/_cjs/_ext/Array.cjs +3 -2
  3. package/_cjs/_ext/Array.cjs.map +1 -1
  4. package/_cjs/api/defaultErrorHandler.cjs +11 -10
  5. package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
  6. package/_cjs/api/express/makeJsonSchema.cjs +3 -2
  7. package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
  8. package/_cjs/api/express/makeJsonSchema.test.cjs +2 -2
  9. package/_cjs/api/express/makeJsonSchema.test.cjs.map +1 -1
  10. package/_cjs/api/express/makeOpenApiSpecs.cjs +6 -4
  11. package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
  12. package/_cjs/api/express/schema/requestHandler.cjs +25 -23
  13. package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
  14. package/_cjs/api/express/schema/routing.cjs +22 -20
  15. package/_cjs/api/express/schema/routing.cjs.map +1 -1
  16. package/_cjs/api/reportError.cjs +2 -2
  17. package/_cjs/api/routing.cjs +56 -53
  18. package/_cjs/api/routing.cjs.map +1 -1
  19. package/_cjs/api/setupRequest.cjs +3 -2
  20. package/_cjs/api/setupRequest.cjs.map +1 -1
  21. package/_cjs/api/writeDocs.cjs +6 -4
  22. package/_cjs/api/writeDocs.cjs.map +1 -1
  23. package/_cjs/errorReporter.cjs +12 -11
  24. package/_cjs/errorReporter.cjs.map +1 -1
  25. package/_cjs/errors.cjs +8 -8
  26. package/_cjs/errors.cjs.map +1 -1
  27. package/_cjs/instrument.cjs +2 -1
  28. package/_cjs/instrument.cjs.map +1 -1
  29. package/_cjs/logger/jsonLogger.cjs +11 -10
  30. package/_cjs/logger/jsonLogger.cjs.map +1 -1
  31. package/_cjs/logger/logFmtLogger.cjs +5 -5
  32. package/_cjs/logger/logFmtLogger.cjs.map +1 -1
  33. package/_cjs/logger/shared.cjs +4 -4
  34. package/_cjs/logger/shared.cjs.map +1 -1
  35. package/_cjs/rateLimit.cjs +8 -7
  36. package/_cjs/rateLimit.cjs.map +1 -1
  37. package/_cjs/services/Emailer/Sendgrid.cjs +14 -12
  38. package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
  39. package/_cjs/services/Emailer/fake.cjs +5 -4
  40. package/_cjs/services/Emailer/fake.cjs.map +1 -1
  41. package/_cjs/services/Operations/live.cjs +31 -29
  42. package/_cjs/services/Operations/live.cjs.map +1 -1
  43. package/_cjs/services/Operations/service.cjs +6 -5
  44. package/_cjs/services/Operations/service.cjs.map +1 -1
  45. package/_cjs/services/QueueMaker/errors.cjs +7 -6
  46. package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
  47. package/_cjs/services/QueueMaker/memQueue.cjs +18 -17
  48. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  49. package/_cjs/services/QueueMaker/sbqueue.cjs +16 -15
  50. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  51. package/_cjs/services/Repository.cjs +17 -16
  52. package/_cjs/services/Repository.cjs.map +1 -1
  53. package/_cjs/services/RepositoryBase.cjs +35 -33
  54. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  55. package/_cjs/services/RequestContextContainer.cjs +12 -10
  56. package/_cjs/services/RequestContextContainer.cjs.map +1 -1
  57. package/_cjs/services/Store/Cosmos.cjs +49 -46
  58. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  59. package/_cjs/services/Store/Disk.cjs +19 -18
  60. package/_cjs/services/Store/Disk.cjs.map +1 -1
  61. package/_cjs/services/Store/Memory.cjs +43 -39
  62. package/_cjs/services/Store/Memory.cjs.map +1 -1
  63. package/_cjs/services/Store/Redis.cjs +16 -14
  64. package/_cjs/services/Store/Redis.cjs.map +1 -1
  65. package/_cjs/services/Store/codeFilter.test.cjs +1 -1
  66. package/_cjs/services/Store/index.cjs +7 -6
  67. package/_cjs/services/Store/index.cjs.map +1 -1
  68. package/_cjs/services/Store/service.cjs +1 -1
  69. package/_cjs/services/Store/service.cjs.map +1 -1
  70. package/_cjs/services/Store/utils.cjs +13 -13
  71. package/_cjs/services/Store/utils.cjs.map +1 -1
  72. package/_cjs/services/simpledb/cosmosdb.cjs +19 -17
  73. package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
  74. package/_cjs/services/simpledb/diskdb.cjs +9 -8
  75. package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
  76. package/_cjs/services/simpledb/memdb.cjs +11 -9
  77. package/_cjs/services/simpledb/memdb.cjs.map +1 -1
  78. package/_cjs/services/simpledb/mongodb.cjs +20 -18
  79. package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
  80. package/_cjs/services/simpledb/redisdb.cjs +11 -10
  81. package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
  82. package/_cjs/services/simpledb/shared.cjs +5 -5
  83. package/_cjs/services/simpledb/shared.cjs.map +1 -1
  84. package/_cjs/services/simpledb/simpledb.cjs +18 -17
  85. package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
  86. package/_src/api/authorization.jwt.ts +1 -1
  87. package/_src/api/defaultErrorHandler.ts +2 -2
  88. package/_src/api/express/routing.ts.bak +8 -8
  89. package/_src/api/express/schema/requestHandler.ts +12 -12
  90. package/_src/api/express/schema/routing.ts +11 -11
  91. package/_src/api/routing.ts +14 -13
  92. package/_src/errorReporter.ts +1 -1
  93. package/_src/services/Emailer/Sendgrid.ts +1 -1
  94. package/_src/services/Operations/live.ts +5 -5
  95. package/_src/services/QueueMaker/errors.ts +1 -1
  96. package/_src/services/QueueMaker/memQueue.ts +2 -2
  97. package/_src/services/QueueMaker/sbqueue.ts +1 -1
  98. package/_src/services/Repository.ts +9 -9
  99. package/_src/services/RepositoryBase.ts +8 -6
  100. package/_src/services/RequestContextContainer.ts +1 -1
  101. package/_src/services/Store/Cosmos.ts +17 -12
  102. package/_src/services/Store/Disk.ts +4 -4
  103. package/_src/services/Store/Memory.ts +4 -4
  104. package/_src/services/Store/Redis.ts +1 -1
  105. package/_src/services/Store/index.test.ts.bak +5 -5
  106. package/_src/services/Store/index.ts +1 -1
  107. package/_src/services/Store/utils.ts +16 -16
  108. package/_src/services/simpledb/diskdb.ts +1 -1
  109. package/_src/services/simpledb/memdb.ts +1 -1
  110. package/_src/services/simpledb/redisdb.ts +1 -1
  111. package/_src/services/simpledb/shared.ts +1 -1
  112. package/_src/services/simpledb/simpledb.ts +3 -3
  113. package/dist/RequestContext.d.ts +20 -20
  114. package/dist/_ext/Array.d.ts +1 -1
  115. package/dist/_ext/Array.d.ts.map +1 -1
  116. package/dist/_ext/Array.js +4 -3
  117. package/dist/api/codec.d.ts +1 -1
  118. package/dist/api/codec.d.ts.map +1 -1
  119. package/dist/api/defaultErrorHandler.d.ts +2 -2
  120. package/dist/api/defaultErrorHandler.d.ts.map +1 -1
  121. package/dist/api/defaultErrorHandler.js +13 -11
  122. package/dist/api/express/makeJsonSchema.d.ts +2 -2
  123. package/dist/api/express/makeJsonSchema.d.ts.map +1 -1
  124. package/dist/api/express/makeJsonSchema.js +4 -3
  125. package/dist/api/express/makeOpenApiSpecs.d.ts +1 -1
  126. package/dist/api/express/makeOpenApiSpecs.js +7 -5
  127. package/dist/api/express/schema/requestHandler.d.ts +8 -8
  128. package/dist/api/express/schema/requestHandler.d.ts.map +1 -1
  129. package/dist/api/express/schema/requestHandler.js +36 -34
  130. package/dist/api/express/schema/routing.d.ts +2 -2
  131. package/dist/api/express/schema/routing.js +23 -21
  132. package/dist/api/reportError.d.ts +5 -5
  133. package/dist/api/reportError.d.ts.map +1 -1
  134. package/dist/api/reportError.js +2 -2
  135. package/dist/api/routing.d.ts +6 -6
  136. package/dist/api/routing.d.ts.map +1 -1
  137. package/dist/api/routing.js +60 -57
  138. package/dist/api/setupRequest.d.ts +2 -2
  139. package/dist/api/setupRequest.d.ts.map +1 -1
  140. package/dist/api/setupRequest.js +4 -3
  141. package/dist/api/writeDocs.d.ts +1 -1
  142. package/dist/api/writeDocs.d.ts.map +1 -1
  143. package/dist/api/writeDocs.js +7 -5
  144. package/dist/errorReporter.d.ts +3 -3
  145. package/dist/errorReporter.d.ts.map +1 -1
  146. package/dist/errorReporter.js +13 -12
  147. package/dist/errors.d.ts +7 -7
  148. package/dist/errors.js +9 -9
  149. package/dist/filter.d.ts.map +1 -1
  150. package/dist/instrument.d.ts +1 -1
  151. package/dist/instrument.d.ts.map +1 -1
  152. package/dist/instrument.js +3 -2
  153. package/dist/logger/jsonLogger.d.ts +2 -2
  154. package/dist/logger/jsonLogger.d.ts.map +1 -1
  155. package/dist/logger/jsonLogger.js +12 -11
  156. package/dist/logger/logFmtLogger.d.ts +2 -2
  157. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  158. package/dist/logger/logFmtLogger.js +6 -6
  159. package/dist/logger/shared.d.ts +1 -1
  160. package/dist/logger/shared.d.ts.map +1 -1
  161. package/dist/logger/shared.js +5 -5
  162. package/dist/rateLimit.d.ts +4 -4
  163. package/dist/rateLimit.d.ts.map +1 -1
  164. package/dist/rateLimit.js +9 -8
  165. package/dist/services/Emailer/Sendgrid.d.ts +1 -1
  166. package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
  167. package/dist/services/Emailer/Sendgrid.js +17 -15
  168. package/dist/services/Emailer/fake.d.ts +1 -1
  169. package/dist/services/Emailer/fake.d.ts.map +1 -1
  170. package/dist/services/Emailer/fake.js +6 -5
  171. package/dist/services/Emailer/service.d.ts +4 -4
  172. package/dist/services/Operations/live.d.ts +1 -1
  173. package/dist/services/Operations/live.d.ts.map +1 -1
  174. package/dist/services/Operations/live.js +39 -37
  175. package/dist/services/Operations/service.d.ts +9 -9
  176. package/dist/services/Operations/service.d.ts.map +1 -1
  177. package/dist/services/Operations/service.js +13 -12
  178. package/dist/services/QueueMaker/errors.d.ts +5 -5
  179. package/dist/services/QueueMaker/errors.d.ts.map +1 -1
  180. package/dist/services/QueueMaker/errors.js +7 -6
  181. package/dist/services/QueueMaker/memQueue.d.ts +3 -3
  182. package/dist/services/QueueMaker/memQueue.js +17 -16
  183. package/dist/services/QueueMaker/sbqueue.d.ts +4 -4
  184. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  185. package/dist/services/QueueMaker/sbqueue.js +16 -15
  186. package/dist/services/Repository.d.ts +32 -32
  187. package/dist/services/Repository.d.ts.map +1 -1
  188. package/dist/services/Repository.js +18 -17
  189. package/dist/services/RepositoryBase.d.ts +32 -83
  190. package/dist/services/RepositoryBase.d.ts.map +1 -1
  191. package/dist/services/RepositoryBase.js +37 -35
  192. package/dist/services/RequestContextContainer.d.ts +9 -9
  193. package/dist/services/RequestContextContainer.d.ts.map +1 -1
  194. package/dist/services/RequestContextContainer.js +15 -13
  195. package/dist/services/Store/Cosmos.d.ts +3 -3
  196. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  197. package/dist/services/Store/Cosmos.js +54 -51
  198. package/dist/services/Store/Disk.d.ts +3 -3
  199. package/dist/services/Store/Disk.d.ts.map +1 -1
  200. package/dist/services/Store/Disk.js +20 -19
  201. package/dist/services/Store/Memory.d.ts +5 -5
  202. package/dist/services/Store/Memory.d.ts.map +1 -1
  203. package/dist/services/Store/Memory.js +45 -41
  204. package/dist/services/Store/Redis.d.ts +3 -3
  205. package/dist/services/Store/Redis.d.ts.map +1 -1
  206. package/dist/services/Store/Redis.js +17 -15
  207. package/dist/services/Store/index.d.ts +1 -1
  208. package/dist/services/Store/index.d.ts.map +1 -1
  209. package/dist/services/Store/index.js +8 -7
  210. package/dist/services/Store/service.d.ts +10 -10
  211. package/dist/services/Store/service.d.ts.map +1 -1
  212. package/dist/services/Store/service.js +2 -2
  213. package/dist/services/Store/utils.d.ts +3 -3
  214. package/dist/services/Store/utils.d.ts.map +1 -1
  215. package/dist/services/Store/utils.js +21 -21
  216. package/dist/services/simpledb/cosmosdb.d.ts +5 -5
  217. package/dist/services/simpledb/cosmosdb.d.ts.map +1 -1
  218. package/dist/services/simpledb/cosmosdb.js +19 -17
  219. package/dist/services/simpledb/diskdb.d.ts +5 -5
  220. package/dist/services/simpledb/diskdb.d.ts.map +1 -1
  221. package/dist/services/simpledb/diskdb.js +10 -9
  222. package/dist/services/simpledb/memdb.d.ts +5 -5
  223. package/dist/services/simpledb/memdb.d.ts.map +1 -1
  224. package/dist/services/simpledb/memdb.js +13 -11
  225. package/dist/services/simpledb/mongodb.d.ts +5 -5
  226. package/dist/services/simpledb/mongodb.d.ts.map +1 -1
  227. package/dist/services/simpledb/mongodb.js +16 -14
  228. package/dist/services/simpledb/redisdb.d.ts +11 -11
  229. package/dist/services/simpledb/redisdb.d.ts.map +1 -1
  230. package/dist/services/simpledb/redisdb.js +12 -11
  231. package/dist/services/simpledb/shared.d.ts +13 -13
  232. package/dist/services/simpledb/shared.js +6 -6
  233. package/dist/services/simpledb/simpledb.d.ts +7 -7
  234. package/dist/services/simpledb/simpledb.d.ts.map +1 -1
  235. package/dist/services/simpledb/simpledb.js +16 -15
  236. package/package.json +5 -5
@@ -77,7 +77,7 @@ export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
77
77
  .flatMap((_) =>
78
78
  _.isFailure() && !_.cause.isFailure()
79
79
  ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
80
- : Effect(
80
+ : Effect.sync(() =>
81
81
  _.isSuccess()
82
82
  ? { _tag: "Success" as const, value: _.value }
83
83
  : { _tag: "Failure", errors: _.cause.failures }
@@ -89,7 +89,7 @@ export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
89
89
  .flatMap((_) =>
90
90
  _.isFailure() && !_.cause.isFailure()
91
91
  ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
92
- : Effect(
92
+ : Effect.sync(() =>
93
93
  _.isSuccess()
94
94
  ? { _tag: "Success" as const, value: _.value }
95
95
  : { _tag: "Failure", errors: _.cause.failures }
@@ -101,7 +101,7 @@ export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
101
101
  .flatMap((_) =>
102
102
  _.isFailure() && !_.cause.isFailure()
103
103
  ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
104
- : Effect(
104
+ : Effect.sync(() =>
105
105
  _.isSuccess()
106
106
  ? { _tag: "Success" as const, value: _.value }
107
107
  : { _tag: "Failure", errors: _.cause.failures }
@@ -113,7 +113,7 @@ export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
113
113
  .flatMap((_) =>
114
114
  _.isFailure() && !_.cause.isFailure()
115
115
  ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
116
- : Effect(
116
+ : Effect.sync(() =>
117
117
  _.isSuccess()
118
118
  ? { _tag: "Success" as const, value: _.value }
119
119
  : { _tag: "Failure", errors: _.cause.failures }
@@ -125,7 +125,7 @@ export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
125
125
  .flatMap((_) =>
126
126
  _.isFailure() && !_.cause.isFailure()
127
127
  ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
128
- : Effect(
128
+ : Effect.sync(() =>
129
129
  _.isSuccess()
130
130
  ? { _tag: "Success" as const, value: _.value }
131
131
  : { _tag: "Failure", errors: _.cause.failures }
@@ -152,13 +152,13 @@ export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
152
152
  if (errors.length) {
153
153
  return new ValidationError({ errors })
154
154
  }
155
- return Effect({
155
+ return Effect.sync(() => ({
156
156
  body: body.value!,
157
157
  cookie: cookie.value!,
158
158
  headers: headers.value!,
159
159
  path: path.value!,
160
160
  query: query.value!
161
- })
161
+ }))
162
162
  })
163
163
  }
164
164
 
@@ -307,7 +307,7 @@ export function makeRequestParsers<
307
307
  Errors
308
308
  >["Request"]
309
309
  ): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
310
- const ph = Effect(
310
+ const ph = Effect.sync(() =>
311
311
  Option
312
312
  .fromNullable(Request.Headers)
313
313
  .map((s) => s)
@@ -316,7 +316,7 @@ export function makeRequestParsers<
316
316
  )
317
317
  const parseHeaders = (u: unknown) => ph.flatMapOpt((d) => d(u))
318
318
 
319
- const pq = Effect(
319
+ const pq = Effect.sync(() =>
320
320
  Option
321
321
  .fromNullable(Request.Query)
322
322
  .map((s) => s)
@@ -325,7 +325,7 @@ export function makeRequestParsers<
325
325
  )
326
326
  const parseQuery = (u: unknown) => pq.flatMapOpt((d) => d(u))
327
327
 
328
- const pb = Effect(
328
+ const pb = Effect.sync(() =>
329
329
  Option
330
330
  .fromNullable(Request.Body)
331
331
  .map((s) => s)
@@ -334,7 +334,7 @@ export function makeRequestParsers<
334
334
  )
335
335
  const parseBody = (u: unknown) => pb.flatMapOpt((d) => d(u))
336
336
 
337
- const pp = Effect(
337
+ const pp = Effect.sync(() =>
338
338
  Option
339
339
  .fromNullable(Request.Path)
340
340
  .map((s) => s)
@@ -343,7 +343,7 @@ export function makeRequestParsers<
343
343
  )
344
344
  const parsePath = (u: unknown) => pp.flatMapOpt((d) => d(u))
345
345
 
346
- const pc = Effect(
346
+ const pc = Effect.sync(() =>
347
347
  Option
348
348
  .fromNullable(Request.Cookie)
349
349
  .map((s) => s)
@@ -99,33 +99,33 @@ export function makeFromSchema<ResA>(
99
99
  const Res = r ? MO.extractSchema(r) : MO.Void
100
100
  // TODO EffectOption.fromNullable(Req.Headers).flatMapOpt(jsonSchema)
101
101
  // TODO: use the path vs body etc serialisation also in the Client.
102
- const makeReqQuerySchema = Effect(Option.fromNullable(Req.Query)).flatMap((_) =>
102
+ const makeReqQuerySchema = Effect.sync(() => Option.fromNullable(Req.Query)).flatMap((_) =>
103
103
  _.match({
104
- onNone: () => Effect(Option.none),
104
+ onNone: () => Effect.sync(() => Option.none()),
105
105
  onSome: (_) => jsonSchema(_).map(Option.some)
106
106
  })
107
107
  )
108
- const makeReqHeadersSchema = Effect(Option.fromNullable(Req.Headers)).flatMap((_) =>
108
+ const makeReqHeadersSchema = Effect.sync(() => Option.fromNullable(Req.Headers)).flatMap((_) =>
109
109
  _.match({
110
- onNone: () => Effect(Option.none),
110
+ onNone: () => Effect.sync(() => Option.none()),
111
111
  onSome: (_) => jsonSchema(_).map(Option.some)
112
112
  })
113
113
  )
114
- const makeReqCookieSchema = Effect(Option.fromNullable(Req.Cookie)).flatMap((_) =>
114
+ const makeReqCookieSchema = Effect.sync(() => Option.fromNullable(Req.Cookie)).flatMap((_) =>
115
115
  _.match({
116
- onNone: () => Effect(Option.none),
116
+ onNone: () => Effect.sync(() => Option.none()),
117
117
  onSome: (_) => jsonSchema(_).map(Option.some)
118
118
  })
119
119
  )
120
- const makeReqPathSchema = Effect(Option.fromNullable(Req.Path)).flatMap((_) =>
120
+ const makeReqPathSchema = Effect.sync(() => Option.fromNullable(Req.Path)).flatMap((_) =>
121
121
  _.match({
122
- onNone: () => Effect(Option.none),
122
+ onNone: () => Effect.sync(() => Option.none()),
123
123
  onSome: (_) => jsonSchema(_).map(Option.some)
124
124
  })
125
125
  )
126
- const makeReqBodySchema = Effect(Option.fromNullable(Req.Body)).flatMap((_) =>
126
+ const makeReqBodySchema = Effect.sync(() => Option.fromNullable(Req.Body)).flatMap((_) =>
127
127
  _.match({
128
- onNone: () => Effect(Option.none),
128
+ onNone: () => Effect.sync(() => Option.none()),
129
129
  onSome: (_) => jsonSchema(_).map(Option.some)
130
130
  })
131
131
  )
@@ -136,7 +136,7 @@ export function makeFromSchema<ResA>(
136
136
  function makeParameters(inn: ParameterLocation) {
137
137
  return (a: Option<JSONSchema | SubSchema>) => {
138
138
  return a
139
- .flatMap((o) => (isObjectSchema(o) ? Option(o) : Option.none))
139
+ .flatMap((o) => (isObjectSchema(o) ? Option.some(o) : Option.none()))
140
140
  .map((x) => {
141
141
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
142
142
  return Object.keys(x.properties!).map((p) => {
@@ -47,7 +47,7 @@ export function makeRequestParsers<
47
47
  Errors
48
48
  >["Request"]
49
49
  ): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
50
- const ph = Effect(
50
+ const ph = Effect.sync(() =>
51
51
  Option
52
52
  .fromNullable(Request.Headers)
53
53
  .map((s) => s)
@@ -56,7 +56,7 @@ export function makeRequestParsers<
56
56
  )
57
57
  const parseHeaders = (u: unknown) => ph.flatMapOpt((d) => d(u))
58
58
 
59
- const pq = Effect(
59
+ const pq = Effect.sync(() =>
60
60
  Option
61
61
  .fromNullable(Request.Query)
62
62
  .map((s) => s)
@@ -65,7 +65,7 @@ export function makeRequestParsers<
65
65
  )
66
66
  const parseQuery = (u: unknown) => pq.flatMapOpt((d) => d(u))
67
67
 
68
- const pb = Effect(
68
+ const pb = Effect.sync(() =>
69
69
  Option
70
70
  .fromNullable(Request.Body)
71
71
  .map((s) => s)
@@ -74,7 +74,7 @@ export function makeRequestParsers<
74
74
  )
75
75
  const parseBody = (u: unknown) => pb.flatMapOpt((d) => d(u))
76
76
 
77
- const pp = Effect(
77
+ const pp = Effect.sync(() =>
78
78
  Option
79
79
  .fromNullable(Request.Path)
80
80
  .map((s) => s)
@@ -83,7 +83,7 @@ export function makeRequestParsers<
83
83
  )
84
84
  const parsePath = (u: unknown) => pp.flatMapOpt((d) => d(u))
85
85
 
86
- const pc = Effect(
86
+ const pc = Effect.sync(() =>
87
87
  Option
88
88
  .fromNullable(Request.Cookie)
89
89
  .map((s) => s)
@@ -185,7 +185,7 @@ export function match<
185
185
  )
186
186
  )
187
187
  .zipRight(
188
- Effect(
188
+ Effect.sync(() =>
189
189
  makeRouteDescriptor(
190
190
  requestHandler.Request.path,
191
191
  requestHandler.Request.method,
@@ -199,7 +199,8 @@ export function respondSuccess<ReqA, A, E>(
199
199
  encodeResponse: (req: ReqA) => Encode<A, E>
200
200
  ) {
201
201
  return (req: ReqA, res: express.Response, a: A) =>
202
- Effect(encodeResponse(req)(a))
202
+ Effect
203
+ .sync(() => encodeResponse(req)(a))
203
204
  .flatMap((r) =>
204
205
  Effect.sync(() => {
205
206
  r === undefined
@@ -258,13 +259,13 @@ export function makeRequestHandler<
258
259
  const respond = respondSuccess(encodeResponse)
259
260
 
260
261
  function getParams(req: express.Request) {
261
- return Effect({
262
+ return Effect.sync(() => ({
262
263
  path: req.params,
263
264
  query: req.query,
264
265
  body: req.body,
265
266
  headers: req.headers,
266
267
  cookies: req.cookies
267
- })
268
+ }))
268
269
  }
269
270
 
270
271
  function makeContext(req: express.Request) {
@@ -380,8 +381,8 @@ export function makeRequestHandler<
380
381
  Effect
381
382
  .all(
382
383
  [
383
- Effect(res.status(500).send()),
384
- Effect(
384
+ Effect.sync(() => res.status(500).send()),
385
+ Effect.sync(() =>
385
386
  reportRequestError(cause, {
386
387
  path: req.originalUrl,
387
388
  method: req.method
@@ -418,7 +419,7 @@ export function makeRequestHandler<
418
419
  ],
419
420
  { concurrency: "inherit" }
420
421
  )
421
- .tapErrorCause((cause) => Effect(console.error("Error occurred while reporting error", cause)))
422
+ .tapErrorCause((cause) => Effect.sync(() => console.error("Error occurred while reporting error", cause)))
422
423
  )
423
424
  .tap(() =>
424
425
  RequestSettings
@@ -618,7 +619,7 @@ export interface ReqHandler<
618
619
  * class SayHelloResponse extends Model<SayHelloRequest>()({ message: prop(LongString) }) {}
619
620
  *
620
621
  * export const SayHelloControllers = matchResource({ SayHello: { SayHelloRequest, SayHelloResponse } })({
621
- * SayHello: (req) => Effect({ message: `Hi ${req.name}` })
622
+ * SayHello: (req) => Effect.sync(() => { message: `Hi ${req.name}` })
622
623
  * })
623
624
  * ```
624
625
  */
@@ -73,5 +73,5 @@ export function reportMessage(message: string) {
73
73
  }
74
74
 
75
75
  export function reportMessageM(message: string) {
76
- return Effect(reportMessage(message))
76
+ return Effect.sync(() => reportMessage(message))
77
77
  }
@@ -32,7 +32,7 @@ const makeLiveSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subje
32
32
  void sgMail.send(renderedMsg, false, (err, result) =>
33
33
  err
34
34
  ? cb(Effect.fail(err))
35
- : cb(Effect(result)))
35
+ : cb(Effect.sync(() => result)))
36
36
  )
37
37
  )
38
38
 
@@ -8,7 +8,7 @@ const reportAppError = reportError((cause) => new RequestException(cause))
8
8
 
9
9
  const make = Effect.sync((): Operations => {
10
10
  const ops = new Map<OperationId, Operation>()
11
- const makeOp = Effect(OperationId.make())
11
+ const makeOp = Effect.sync(() => OperationId.make())
12
12
 
13
13
  const cleanup = Effect.sync(() => {
14
14
  const before = new Date().subHours(1)
@@ -29,7 +29,7 @@ const make = Effect.sync((): Operations => {
29
29
  })
30
30
  }
31
31
  function findOp(id: OperationId) {
32
- return Effect(Option.fromNullable(ops.get(id)))
32
+ return Effect.sync(() => Option.fromNullable(ops.get(id)))
33
33
  }
34
34
  function finishOp(id: OperationId, exit: Exit<unknown, unknown>) {
35
35
  return findOp(id).flatMap((_) =>
@@ -52,8 +52,8 @@ const make = Effect.sync((): Operations => {
52
52
  .failureOption
53
53
  .flatMap((_) =>
54
54
  typeof _ === "object" && _ !== null && "message" in _ && LongString.Guard(_.message)
55
- ? Option(_.message)
56
- : Option.none
55
+ ? Option.some(_.message)
56
+ : Option.none()
57
57
  )
58
58
  .value ?? null
59
59
  })
@@ -75,7 +75,7 @@ const make = Effect.sync((): Operations => {
75
75
  cleanup,
76
76
  register: makeOp
77
77
  .tap((id) =>
78
- Effect.annotateLogscoped("operationId", id)
78
+ EffectX.annotateLogscoped("operationId", id)
79
79
  > addOp(id).acquireRelease(
80
80
  (_, exit) => finishOp(id, exit)
81
81
  )
@@ -42,7 +42,7 @@ export function reportNonInterruptedFailure(context?: Record<string, unknown>) {
42
42
  .exit
43
43
  .flatMap((result) =>
44
44
  result.match(
45
- { onFailure: (cause) => report(cause).map(() => result), onSuccess: () => Effect(result) }
45
+ { onFailure: (cause) => report(cause).map(() => result), onSuccess: () => Effect.sync(() => result) }
46
46
  )
47
47
  )
48
48
  }
@@ -43,7 +43,7 @@ export function makeMemQueue<
43
43
  messages
44
44
  .forEachEffect((m) =>
45
45
  // we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
46
- Effect(
46
+ Effect.sync(() =>
47
47
  JSON.stringify(
48
48
  encoder({ body: m, meta: requestContext })
49
49
  )
@@ -60,7 +60,7 @@ export function makeMemQueue<
60
60
  const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
61
61
  const processMessage = (msg: string) =>
62
62
  // we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
63
- Effect(JSON.parse(msg))
63
+ Effect.sync(() => JSON.parse(msg))
64
64
  .flatMap(parseDrain)
65
65
  .orDie
66
66
  .flatMap(({ body, meta }) =>
@@ -81,7 +81,7 @@ export function makeServiceBusQueue<
81
81
  return yield* $(
82
82
  subscribe({
83
83
  processMessage: (x) => processMessage(x.body).uninterruptible,
84
- processError: (err) => Effect(captureException(err.error))
84
+ processError: (err) => Effect.sync(() => captureException(err.error))
85
85
  })
86
86
  .provide(receiverLayer)
87
87
  )
@@ -155,7 +155,7 @@ export function project<
155
155
  self: Repository<T, PM, Evt, ItemType>,
156
156
  map: { filter?: Filter<PM>; collect?: (t: PM) => Option<S>; limit?: number; skip?: number }
157
157
  ) {
158
- return self.projectEffect(Effect(map))
158
+ return self.projectEffect(Effect.sync(() => map))
159
159
  }
160
160
 
161
161
  /**
@@ -235,7 +235,7 @@ export function query<
235
235
  // TODO: think about collectPM, collectE, and collect(Parsed)
236
236
  map: { filter?: Filter<PM>; collect?: (t: T) => Option<S>; limit?: number; skip?: number }
237
237
  ) {
238
- return self.queryEffect(Effect(map))
238
+ return self.queryEffect(Effect.sync(() => map))
239
239
  }
240
240
 
241
241
  /**
@@ -252,7 +252,7 @@ export function queryOne<
252
252
  // TODO: think about collectPM, collectE, and collect(Parsed)
253
253
  map: { filter?: Filter<PM>; collect?: (t: T) => Option<S> }
254
254
  ) {
255
- return self.queryOneEffect(Effect(map))
255
+ return self.queryOneEffect(Effect.sync(() => map))
256
256
  }
257
257
 
258
258
  /**
@@ -290,7 +290,7 @@ export function queryAndSavePure<
290
290
  // TODO: think about collectPM, collectE, and collect(Parsed)
291
291
  map: { filter: Filter<PM>; collect?: (t: T) => Option<S>; limit?: number; skip?: number }
292
292
  ) {
293
- return self.queryAndSavePureEffect(Effect(map))
293
+ return self.queryAndSavePureEffect(Effect.sync(() => map))
294
294
  }
295
295
 
296
296
  /**
@@ -443,7 +443,7 @@ export function queryAndSavePureBatched<
443
443
  map: { filter: Filter<PM>; collect?: (t: T) => Option<S>; limit?: number; skip?: number },
444
444
  batchSize = 100
445
445
  ) {
446
- return self.queryAndSavePureEffectBatched(Effect(map), batchSize)
446
+ return self.queryAndSavePureEffectBatched(Effect.sync(() => map), batchSize)
447
447
  }
448
448
 
449
449
  /**
@@ -536,7 +536,7 @@ export interface OneDSLExt<T, Evt> {
536
536
  * @tsplus fluent DSLExt updateWith
537
537
  */
538
538
  export function updateWithOne<T, Evt, S1 extends T, S2 extends T>(self: OneDSL<T, Evt>, upd: (item: S1) => S2) {
539
- return self.update((_: S1) => Effect(upd(_)))
539
+ return self.update((_: S1) => Effect.sync(() => upd(_)))
540
540
  }
541
541
 
542
542
  /**
@@ -546,7 +546,7 @@ export function updateWith<T, Evt, S1 extends T, S2 extends T>(
546
546
  self: AllDSL<T, Evt>,
547
547
  upd: (item: S1[]) => S2[]
548
548
  ) {
549
- return self.update((_: S1[]) => Effect(upd(_)))
549
+ return self.update((_: S1[]) => Effect.sync(() => upd(_)))
550
550
  }
551
551
 
552
552
  export function makeOneDSL<T, Evt>(): OneDSL<T, Evt> {
@@ -603,14 +603,14 @@ export function makeDSL<S1, S2, Evt>() {
603
603
  export interface DSLExt<S1, S2, Evt> extends ReturnType<typeof makeDSL<S1, S2, Evt>> {}
604
604
 
605
605
  export function ifAny<T, R, E, A>(fn: (items: NonEmptyReadonlyArray<T>) => Effect<R, E, A>) {
606
- return (items: Iterable<T>) => Effect(items.toNonEmptyArray).flatMapOpt(fn)
606
+ return (items: Iterable<T>) => Effect.sync(() => items.toNonEmptyArray).flatMapOpt(fn)
607
607
  }
608
608
 
609
609
  /**
610
610
  * @tsplus fluent Iterable ifAny
611
611
  */
612
612
  export function ifAny_<T, R, E, A>(items: Iterable<T>, fn: (items: NonEmptyReadonlyArray<T>) => Effect<R, E, A>) {
613
- return Effect(items.toNonEmptyArray).flatMapOpt(fn)
613
+ return Effect.sync(() => items.toNonEmptyArray).flatMapOpt(fn)
614
614
  }
615
615
 
616
616
  /**
@@ -5,10 +5,9 @@ import { ContextMap, StoreMaker } from "./Store.js"
5
5
  import type { Filter, StoreConfig, Where } from "./Store.js"
6
6
  import type {} from "effect/Equal"
7
7
  import type {} from "effect/Hash"
8
- import type { Opt } from "@effect-app/core/Option"
9
8
  import { makeCodec } from "@effect-app/infra/api/codec"
10
9
  import { makeFilters } from "@effect-app/infra/filter"
11
- import type { Schema } from "@effect-app/prelude"
10
+ import type { Option, Schema } from "@effect-app/prelude"
12
11
  import { EParserFor } from "@effect-app/prelude/schema"
13
12
  import type { InvalidStateError, OptimisticConcurrencyException } from "../errors.js"
14
13
 
@@ -21,7 +20,7 @@ export const RepositoryBase = <Service>() => {
21
20
  ) => {
22
21
  abstract class RepositoryBaseC implements Repository<T, PM, Evt, ItemType> {
23
22
  itemType: ItemType = itemType
24
- abstract find: (id: T["id"]) => Effect<ContextMap | RequestContextContainer, never, Opt<T>>
23
+ abstract find: (id: T["id"]) => Effect<ContextMap | RequestContextContainer, never, Option<T>>
25
24
  abstract all: Effect<ContextMap, never, T[]>
26
25
  abstract saveAndPublish: (
27
26
  items: Iterable<T>,
@@ -130,7 +129,8 @@ export function makeRepo<
130
129
  }
131
130
 
132
131
  const saveAllE = (a: Iterable<E>) =>
133
- Effect(a.toNonEmptyArray)
132
+ Effect
133
+ .sync(() => a.toNonEmptyArray)
134
134
  .flatMapOpt((a) =>
135
135
  Do(($) => {
136
136
  const { get, set } = $(ContextMap)
@@ -145,7 +145,8 @@ export function makeRepo<
145
145
 
146
146
  const saveAndPublish = (items: Iterable<T>, events: Iterable<Evt> = []) =>
147
147
  saveAll(items)
148
- > Effect(events.toNonEmptyArray)
148
+ > Effect
149
+ .sync(() => events.toNonEmptyArray)
149
150
  // TODO: for full consistency the events should be stored within the same database transaction, and then picked up.
150
151
  .flatMapOpt(publishEvents)
151
152
 
@@ -159,7 +160,8 @@ export function makeRepo<
159
160
  set(e.id, undefined)
160
161
  }
161
162
  yield* $(
162
- Effect(events.toNonEmptyArray)
163
+ Effect
164
+ .sync(() => events.toNonEmptyArray)
163
165
  // TODO: for full consistency the events should be stored within the same database transaction, and then picked up.
164
166
  .flatMapOpt(publishEvents)
165
167
  )
@@ -15,7 +15,7 @@ export abstract class RequestContextContainer extends TagClass<RequestContextCon
15
15
  .flatMap((requestContext) =>
16
16
  requestContext.isSome()
17
17
  ? requestContext.value.requestContext.map(Option.some)
18
- : Effect(Option.none)
18
+ : Effect.sync(() => Option.none())
19
19
  )
20
20
  }
21
21
  }
@@ -84,7 +84,7 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
84
84
  ([i, batch]) =>
85
85
  Effect
86
86
  .promise(() => bulk(batch.map(([, op]) => op)))
87
- .delay(Duration.makeMillis(i === 0 ? 0 : 1100))
87
+ .delay(Duration.millis(i === 0 ? 0 : 1100))
88
88
  .flatMap((responses) =>
89
89
  Effect.gen(function*($) {
90
90
  const r = responses.find((x) => x.statusCode === 412 || x.statusCode === 404)
@@ -188,10 +188,11 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
188
188
  }
189
189
 
190
190
  const s: Store<PM, Id> = {
191
- all: Effect({
192
- query: `SELECT * FROM ${name} f WHERE f.id != @id`,
193
- parameters: [{ name: "@id", value: importedMarkerId }]
194
- })
191
+ all: Effect
192
+ .sync(() => ({
193
+ query: `SELECT * FROM ${name} f WHERE f.id != @id`,
194
+ parameters: [{ name: "@id", value: importedMarkerId }]
195
+ }))
195
196
  .tap((q) => logQuery(q))
196
197
  .flatMap((q) =>
197
198
  Effect.promise(() =>
@@ -211,7 +212,8 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
211
212
  filter
212
213
  .keys
213
214
  .forEachEffect((k) =>
214
- Effect(buildFilterJoinSelectCosmosQuery(filter, k, name, cursor?.skip, cursor?.limit))
215
+ Effect
216
+ .sync(() => buildFilterJoinSelectCosmosQuery(filter, k, name, cursor?.skip, cursor?.limit))
215
217
  .tap((q) => logQuery(q))
216
218
  .flatMap((q) =>
217
219
  Effect.promise(() =>
@@ -249,7 +251,8 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
249
251
  ? filter
250
252
  .keys
251
253
  .forEachEffect((k) =>
252
- Effect(buildFindJoinCosmosQuery(filter, k, name, skip, limit))
254
+ Effect
255
+ .sync(() => buildFindJoinCosmosQuery(filter, k, name, skip, limit))
253
256
  .tap((q) => logQuery(q))
254
257
  .flatMap((q) =>
255
258
  Effect.promise(() =>
@@ -262,7 +265,8 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
262
265
  )
263
266
  )
264
267
  .map((_) => _.flatMap((_) => _))
265
- : Effect(buildCosmosQuery(filter, name, importedMarkerId, skip, limit))
268
+ : Effect
269
+ .sync(() => buildCosmosQuery(filter, name, importedMarkerId, skip, limit))
266
270
  .tap((q) => logQuery(q))
267
271
  .flatMap((q) =>
268
272
  Effect.promise(() =>
@@ -325,10 +329,10 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
325
329
  )
326
330
  )
327
331
  }
328
- return Effect({
332
+ return Effect.sync(() => ({
329
333
  ...e,
330
334
  _etag: x.etag
331
- })
335
+ }))
332
336
  })
333
337
  .instrument("cosmos.set")
334
338
  .annotateLogs("cosmos.db", containerId),
@@ -356,13 +360,14 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
356
360
  if (seed) {
357
361
  const m = yield* $(seed)
358
362
  yield* $(
359
- Effect(m.toNonEmptyArray)
363
+ Effect
364
+ .sync(() => m.toNonEmptyArray)
360
365
  .flatMapOpt((a) =>
361
366
  s
362
367
  .bulkSet(a)
363
368
  .orDie
364
369
  // we delay extra here, so that initial creation between Companies/POs also have an interval between them.
365
- .delay(Duration.makeMillis(1100))
370
+ .delay(Duration.millis(1100))
366
371
  )
367
372
  )
368
373
  }
@@ -39,7 +39,7 @@ function makeDiskStoreInt<Id extends string, PM extends PersistenceModelType<Id>
39
39
  const withPermit = sem.withPermits(1)
40
40
  const flushToDisk = store.all.flatMap(fsStore.setRaw).apply(withPermit)
41
41
  const flushToDiskInBackground = flushToDisk
42
- .tapErrorCause((err) => Effect(console.error(err)))
42
+ .tapErrorCause((err) => Effect.sync(() => console.error(err)))
43
43
  .uninterruptible
44
44
  .forkDaemon
45
45
 
@@ -84,10 +84,10 @@ export function makeDiskStore({ prefix }: StorageConfig, dir: string) {
84
84
  const storesSem = Semaphore.unsafeMake(1)
85
85
  const primary = yield* $(makeDiskStoreInt(prefix, "primary", dir, name, seed))
86
86
  const stores = new Map<string, Store<PM, Id>>([["primary", primary]])
87
- const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap((namespace) => {
87
+ const getStore = !config?.allowNamespace ? Effect.sync(() => primary) : storeId.get.flatMap((namespace) => {
88
88
  const store = stores.get(namespace)
89
89
  if (store) {
90
- return Effect.succeed(store)
90
+ return Effect.sync(() => store)
91
91
  }
92
92
  if (!config.allowNamespace!(namespace)) {
93
93
  throw new Error(`Namespace ${namespace} not allowed!`)
@@ -95,7 +95,7 @@ export function makeDiskStore({ prefix }: StorageConfig, dir: string) {
95
95
  return storesSem.withPermits(1)(
96
96
  Effect.suspend(() => {
97
97
  const existing = stores.get(namespace)
98
- if (existing) return Effect(existing)
98
+ if (existing) return Effect.sync(() => existing)
99
99
  return makeDiskStoreInt<Id, PM>(prefix, namespace, dir, name, seed).tap((store) =>
100
100
  Effect.sync(() => stores.set(namespace, store))
101
101
  )
@@ -47,7 +47,7 @@ export function makeMemoryStoreInt<Id extends string, PM extends PersistenceMode
47
47
  ) {
48
48
  return Effect.gen(function*($) {
49
49
  const updateETag = makeUpdateETag(name)
50
- const items_ = yield* $(seed ?? Effect([]))
50
+ const items_ = yield* $(seed ?? Effect.sync(() => []))
51
51
  const items = new Map(items_.toChunk.map((_) => [_.id, _] as const))
52
52
  const makeStore = (): ReadonlyMap<Id, PM> => new Map([...items.entries()].map(([id, e]) => [id, makeETag(e)]))
53
53
  const store = Ref.unsafeMake(makeStore())
@@ -108,17 +108,17 @@ export const makeMemoryStore = () => ({
108
108
  const storesSem = Semaphore.unsafeMake(1)
109
109
  const primary = yield* $(makeMemoryStoreInt<Id, PM>(name, seed))
110
110
  const stores = new Map([["primary", primary]])
111
- const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap((namespace) => {
111
+ const getStore = !config?.allowNamespace ? Effect.sync(() => primary) : storeId.get.flatMap((namespace) => {
112
112
  const store = stores.get(namespace)
113
113
  if (store) {
114
- return Effect.succeed(store)
114
+ return Effect.sync(() => store)
115
115
  }
116
116
  if (!config.allowNamespace!(namespace)) {
117
117
  throw new Error(`Namespace ${namespace} not allowed!`)
118
118
  }
119
119
  return storesSem.withPermits(1)(Effect.suspend(() => {
120
120
  const store = stores.get(namespace)
121
- if (store) return Effect(store)
121
+ if (store) return Effect.sync(() => store)
122
122
  return makeMemoryStoreInt(name, seed).tap((store) => Effect.sync(() => stores.set(namespace, store)))
123
123
  }))
124
124
  })
@@ -22,7 +22,7 @@ export function makeRedisStore({ prefix }: StorageConfig) {
22
22
  const key = `${prefix}${name}`
23
23
  const current = yield* $(redis.get(key).orDie.provideService(RedisClient, redis))
24
24
  if (!current.isSome()) {
25
- const m = yield* $(seed ?? Effect([]))
25
+ const m = yield* $(seed ?? Effect.sync(() => []))
26
26
  yield* $(
27
27
  redis
28
28
  .set(key, JSON.stringify({ data: [...m].map((e) => makeETag(e)) }))