@effect-app/infra 0.198.1 → 0.199.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 (360) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/_cjs/RequestContext.cjs +14 -9
  3. package/_cjs/RequestContext.cjs.map +1 -1
  4. package/_cjs/_ext/Array.cjs +3 -7
  5. package/_cjs/_ext/Array.cjs.map +1 -1
  6. package/_cjs/api/reportError.cjs +3 -6
  7. package/_cjs/api/reportError.cjs.map +1 -1
  8. package/_cjs/api/routing/base.cjs +27 -61
  9. package/_cjs/api/routing/base.cjs.map +1 -1
  10. package/_cjs/api/routing/defaultErrorHandler.cjs +14 -21
  11. package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
  12. package/_cjs/api/routing/makeRequestHandler.cjs +44 -51
  13. package/_cjs/api/routing/makeRequestHandler.cjs.map +1 -1
  14. package/_cjs/api/routing/match.cjs +6 -13
  15. package/_cjs/api/routing/match.cjs.map +1 -1
  16. package/_cjs/api/{express → routing}/schema/jwt.cjs +3 -4
  17. package/_cjs/api/routing/schema/jwt.cjs.map +1 -0
  18. package/_cjs/api/routing/schema/routing.cjs +136 -0
  19. package/_cjs/api/routing/schema/routing.cjs.map +1 -0
  20. package/_cjs/api/setupRequest.cjs +16 -22
  21. package/_cjs/api/setupRequest.cjs.map +1 -1
  22. package/_cjs/errorReporter.cjs +16 -17
  23. package/_cjs/errorReporter.cjs.map +1 -1
  24. package/_cjs/errors.cjs +2 -4
  25. package/_cjs/errors.cjs.map +1 -1
  26. package/_cjs/filter/types/path/index.cjs +0 -2
  27. package/_cjs/filter/types/path/index.cjs.map +1 -1
  28. package/_cjs/filter.cjs +35 -0
  29. package/_cjs/filter.cjs.map +1 -1
  30. package/_cjs/logger/jsonLogger.cjs +9 -15
  31. package/_cjs/logger/jsonLogger.cjs.map +1 -1
  32. package/_cjs/logger/logFmtLogger.cjs +7 -11
  33. package/_cjs/logger/logFmtLogger.cjs.map +1 -1
  34. package/_cjs/logger/shared.cjs +6 -8
  35. package/_cjs/logger/shared.cjs.map +1 -1
  36. package/_cjs/rateLimit.cjs +9 -12
  37. package/_cjs/rateLimit.cjs.map +1 -1
  38. package/_cjs/services/Emailer/Sendgrid.cjs +9 -16
  39. package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
  40. package/_cjs/services/Emailer/fake.cjs +5 -8
  41. package/_cjs/services/Emailer/fake.cjs.map +1 -1
  42. package/_cjs/services/Emailer/service.cjs +2 -4
  43. package/_cjs/services/Emailer/service.cjs.map +1 -1
  44. package/_cjs/services/Operations/live.cjs +29 -42
  45. package/_cjs/services/Operations/live.cjs.map +1 -1
  46. package/_cjs/services/Operations/service.cjs +15 -15
  47. package/_cjs/services/Operations/service.cjs.map +1 -1
  48. package/_cjs/services/QueueMaker/errors.cjs +8 -12
  49. package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
  50. package/_cjs/services/QueueMaker/memQueue.cjs +27 -33
  51. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  52. package/_cjs/services/QueueMaker/sbqueue.cjs +31 -40
  53. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  54. package/_cjs/services/QueueMaker/service.cjs +7 -9
  55. package/_cjs/services/QueueMaker/service.cjs.map +1 -1
  56. package/_cjs/services/Repository/dsl.cjs +11 -14
  57. package/_cjs/services/Repository/dsl.cjs.map +1 -1
  58. package/_cjs/services/Repository/ext.cjs +62 -71
  59. package/_cjs/services/Repository/ext.cjs.map +1 -1
  60. package/_cjs/services/RepositoryBase.cjs +171 -169
  61. package/_cjs/services/RepositoryBase.cjs.map +1 -1
  62. package/_cjs/services/RequestContextContainer.cjs +17 -23
  63. package/_cjs/services/RequestContextContainer.cjs.map +1 -1
  64. package/_cjs/services/Store/ContextMapContainer.cjs +10 -16
  65. package/_cjs/services/Store/ContextMapContainer.cjs.map +1 -1
  66. package/_cjs/services/Store/Cosmos/query.cjs +5 -9
  67. package/_cjs/services/Store/Cosmos/query.cjs.map +1 -1
  68. package/_cjs/services/Store/Cosmos.cjs +58 -68
  69. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  70. package/_cjs/services/Store/Disk.cjs +34 -36
  71. package/_cjs/services/Store/Disk.cjs.map +1 -1
  72. package/_cjs/services/Store/Memory.cjs +55 -65
  73. package/_cjs/services/Store/Memory.cjs.map +1 -1
  74. package/_cjs/services/Store/codeFilter.cjs +2 -4
  75. package/_cjs/services/Store/codeFilter.cjs.map +1 -1
  76. package/_cjs/services/Store/codeFilter.test.cjs +13 -12
  77. package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
  78. package/_cjs/services/Store/filterApi/query.cjs +2 -4
  79. package/_cjs/services/Store/filterApi/query.cjs.map +1 -1
  80. package/_cjs/services/Store/index.cjs +6 -9
  81. package/_cjs/services/Store/index.cjs.map +1 -1
  82. package/_cjs/services/Store/service.cjs +5 -7
  83. package/_cjs/services/Store/service.cjs.map +1 -1
  84. package/_cjs/services/Store/utils.cjs +16 -20
  85. package/_cjs/services/Store/utils.cjs.map +1 -1
  86. package/_cjs/services/query.cjs +4 -2
  87. package/_cjs/services/query.cjs.map +1 -1
  88. package/_cjs/test.arbs.cjs +3 -4
  89. package/_cjs/test.arbs.cjs.map +1 -1
  90. package/dist/RequestContext.d.ts +20 -20
  91. package/dist/RequestContext.d.ts.map +1 -1
  92. package/dist/RequestContext.js +15 -8
  93. package/dist/_ext/Array.d.ts +2 -3
  94. package/dist/_ext/Array.d.ts.map +1 -1
  95. package/dist/_ext/Array.js +5 -5
  96. package/dist/api/reportError.d.ts +5 -5
  97. package/dist/api/reportError.d.ts.map +1 -1
  98. package/dist/api/reportError.js +6 -6
  99. package/dist/api/routing/base.d.ts +11 -15
  100. package/dist/api/routing/base.d.ts.map +1 -1
  101. package/dist/api/routing/base.js +48 -67
  102. package/dist/api/routing/defaultErrorHandler.d.ts +4 -6
  103. package/dist/api/routing/defaultErrorHandler.d.ts.map +1 -1
  104. package/dist/api/routing/defaultErrorHandler.js +26 -28
  105. package/dist/api/routing/makeRequestHandler.d.ts +6 -7
  106. package/dist/api/routing/makeRequestHandler.d.ts.map +1 -1
  107. package/dist/api/routing/makeRequestHandler.js +69 -59
  108. package/dist/api/routing/match.d.ts +7 -8
  109. package/dist/api/routing/match.d.ts.map +1 -1
  110. package/dist/api/routing/match.js +7 -11
  111. package/dist/api/routing/schema/jwt.d.ts +4 -0
  112. package/dist/api/routing/schema/jwt.d.ts.map +1 -0
  113. package/dist/api/routing/schema/jwt.js +11 -0
  114. package/dist/api/{express → routing}/schema/routing.d.ts +2 -2
  115. package/dist/api/routing/schema/routing.d.ts.map +1 -0
  116. package/dist/api/routing/schema/routing.js +123 -0
  117. package/dist/api/routing.js +3 -1
  118. package/dist/api/setupRequest.d.ts +3 -5
  119. package/dist/api/setupRequest.d.ts.map +1 -1
  120. package/dist/api/setupRequest.js +20 -24
  121. package/dist/errorReporter.d.ts +4 -4
  122. package/dist/errorReporter.d.ts.map +1 -1
  123. package/dist/errorReporter.js +20 -17
  124. package/dist/errors.d.ts +1 -1
  125. package/dist/errors.d.ts.map +1 -1
  126. package/dist/errors.js +3 -3
  127. package/dist/filter/types/path/index.d.ts +2 -2
  128. package/dist/filter/types/path/index.d.ts.map +1 -1
  129. package/dist/filter/types/path/index.js +2 -3
  130. package/dist/filter/types.js +2 -1
  131. package/dist/filter.d.ts.map +1 -1
  132. package/dist/filter.js +36 -1
  133. package/dist/logger/jsonLogger.d.ts +2 -1
  134. package/dist/logger/jsonLogger.d.ts.map +1 -1
  135. package/dist/logger/jsonLogger.js +9 -13
  136. package/dist/logger/logFmtLogger.d.ts +2 -1
  137. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  138. package/dist/logger/logFmtLogger.js +9 -11
  139. package/dist/logger/shared.d.ts +2 -1
  140. package/dist/logger/shared.d.ts.map +1 -1
  141. package/dist/logger/shared.js +7 -9
  142. package/dist/rateLimit.d.ts +7 -10
  143. package/dist/rateLimit.d.ts.map +1 -1
  144. package/dist/rateLimit.js +17 -16
  145. package/dist/services/Emailer/Sendgrid.d.ts +1 -2
  146. package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
  147. package/dist/services/Emailer/Sendgrid.js +16 -20
  148. package/dist/services/Emailer/fake.d.ts +2 -2
  149. package/dist/services/Emailer/fake.d.ts.map +1 -1
  150. package/dist/services/Emailer/fake.js +10 -8
  151. package/dist/services/Emailer/service.d.ts +7 -10
  152. package/dist/services/Emailer/service.d.ts.map +1 -1
  153. package/dist/services/Emailer/service.js +3 -3
  154. package/dist/services/Operations/live.d.ts +2 -3
  155. package/dist/services/Operations/live.d.ts.map +1 -1
  156. package/dist/services/Operations/live.js +44 -51
  157. package/dist/services/Operations/service.d.ts +14 -19
  158. package/dist/services/Operations/service.d.ts.map +1 -1
  159. package/dist/services/Operations/service.js +23 -28
  160. package/dist/services/QueueMaker/errors.d.ts +5 -7
  161. package/dist/services/QueueMaker/errors.d.ts.map +1 -1
  162. package/dist/services/QueueMaker/errors.js +11 -11
  163. package/dist/services/QueueMaker/memQueue.d.ts +6 -9
  164. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
  165. package/dist/services/QueueMaker/memQueue.js +37 -39
  166. package/dist/services/QueueMaker/sbqueue.d.ts +6 -9
  167. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  168. package/dist/services/QueueMaker/sbqueue.js +41 -39
  169. package/dist/services/QueueMaker/service.d.ts +2 -4
  170. package/dist/services/QueueMaker/service.d.ts.map +1 -1
  171. package/dist/services/QueueMaker/service.js +8 -8
  172. package/dist/services/Repository/dsl.d.ts +8 -10
  173. package/dist/services/Repository/dsl.d.ts.map +1 -1
  174. package/dist/services/Repository/dsl.js +12 -13
  175. package/dist/services/Repository/ext.d.ts +34 -62
  176. package/dist/services/Repository/ext.d.ts.map +1 -1
  177. package/dist/services/Repository/ext.js +59 -70
  178. package/dist/services/RepositoryBase.d.ts +41 -47
  179. package/dist/services/RepositoryBase.d.ts.map +1 -1
  180. package/dist/services/RepositoryBase.js +182 -194
  181. package/dist/services/RequestContextContainer.d.ts +13 -21
  182. package/dist/services/RequestContextContainer.d.ts.map +1 -1
  183. package/dist/services/RequestContextContainer.js +21 -25
  184. package/dist/services/Store/ContextMapContainer.d.ts +11 -18
  185. package/dist/services/Store/ContextMapContainer.d.ts.map +1 -1
  186. package/dist/services/Store/ContextMapContainer.js +17 -18
  187. package/dist/services/Store/Cosmos/query.d.ts +3 -2
  188. package/dist/services/Store/Cosmos/query.d.ts.map +1 -1
  189. package/dist/services/Store/Cosmos/query.js +10 -11
  190. package/dist/services/Store/Cosmos.d.ts +2 -3
  191. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  192. package/dist/services/Store/Cosmos.js +107 -90
  193. package/dist/services/Store/Disk.d.ts +4 -4
  194. package/dist/services/Store/Disk.d.ts.map +1 -1
  195. package/dist/services/Store/Disk.js +54 -50
  196. package/dist/services/Store/Memory.d.ts +6 -8
  197. package/dist/services/Store/Memory.d.ts.map +1 -1
  198. package/dist/services/Store/Memory.js +93 -89
  199. package/dist/services/Store/codeFilter.d.ts.map +1 -1
  200. package/dist/services/Store/codeFilter.js +3 -3
  201. package/dist/services/Store/codeFilter.test.d.ts.map +1 -1
  202. package/dist/services/Store/filterApi/query.d.ts +1 -1
  203. package/dist/services/Store/filterApi/query.d.ts.map +1 -1
  204. package/dist/services/Store/filterApi/query.js +3 -3
  205. package/dist/services/Store/index.d.ts +1 -2
  206. package/dist/services/Store/index.d.ts.map +1 -1
  207. package/dist/services/Store/index.js +7 -8
  208. package/dist/services/Store/service.d.ts +20 -23
  209. package/dist/services/Store/service.d.ts.map +1 -1
  210. package/dist/services/Store/service.js +6 -6
  211. package/dist/services/Store/utils.d.ts +3 -3
  212. package/dist/services/Store/utils.d.ts.map +1 -1
  213. package/dist/services/Store/utils.js +26 -28
  214. package/dist/services/query.d.ts +6 -6
  215. package/dist/services/query.d.ts.map +1 -1
  216. package/dist/services/query.js +5 -4
  217. package/dist/test.arbs.d.ts +0 -2
  218. package/dist/test.arbs.d.ts.map +1 -1
  219. package/dist/test.arbs.js +3 -4
  220. package/package.json +28 -168
  221. package/src/RequestContext.ts +1 -0
  222. package/src/_ext/Array.ts +5 -2
  223. package/src/api/reportError.ts +14 -10
  224. package/src/api/routing/base.ts +77 -110
  225. package/src/api/routing/defaultErrorHandler.ts +64 -54
  226. package/src/api/routing/makeRequestHandler.ts +165 -135
  227. package/src/api/routing/match.ts +14 -8
  228. package/src/api/{express → routing}/schema/jwt.ts +6 -5
  229. package/src/api/{express → routing}/schema/routing.ts +2 -1
  230. package/src/api/setupRequest.ts +30 -24
  231. package/src/errorReporter.ts +12 -11
  232. package/src/errors.ts +1 -0
  233. package/src/filter/types/path/index.ts +2 -2
  234. package/src/logger/jsonLogger.ts +6 -5
  235. package/src/logger/logFmtLogger.ts +4 -5
  236. package/src/logger/shared.ts +4 -3
  237. package/src/rateLimit.ts +37 -34
  238. package/src/services/Emailer/Sendgrid.ts +12 -10
  239. package/src/services/Emailer/fake.ts +7 -4
  240. package/src/services/Emailer/service.ts +4 -1
  241. package/src/services/Operations/live.ts +66 -59
  242. package/src/services/Operations/service.ts +41 -34
  243. package/src/services/QueueMaker/errors.ts +15 -11
  244. package/src/services/QueueMaker/memQueue.ts +59 -40
  245. package/src/services/QueueMaker/sbqueue.ts +54 -33
  246. package/src/services/QueueMaker/service.ts +7 -6
  247. package/src/services/Repository/dsl.ts +12 -8
  248. package/src/services/Repository/ext.ts +52 -44
  249. package/src/services/RepositoryBase.ts +278 -240
  250. package/src/services/RequestContextContainer.ts +30 -18
  251. package/src/services/Store/ContextMapContainer.ts +26 -13
  252. package/src/services/Store/Cosmos/query.ts +17 -11
  253. package/src/services/Store/Cosmos.ts +209 -168
  254. package/src/services/Store/Disk.ts +69 -53
  255. package/src/services/Store/Memory.ts +138 -97
  256. package/src/services/Store/{Redis.ts → Redis.ts.bak} +7 -5
  257. package/src/services/Store/codeFilter.test.ts +61 -36
  258. package/src/services/Store/codeFilter.ts +1 -0
  259. package/src/services/Store/filterApi/query.ts +1 -0
  260. package/src/services/Store/index.ts +7 -6
  261. package/src/services/Store/service.ts +4 -1
  262. package/src/services/Store/utils.ts +25 -23
  263. package/src/services/query.ts +3 -3
  264. package/src/services/simpledb/{cosmosdb.ts → cosmosdb.ts.bak} +1 -0
  265. package/src/services/simpledb/{diskdb.ts → diskdb.ts.bak} +2 -1
  266. package/src/services/simpledb/{memdb.ts → memdb.ts.bak} +3 -2
  267. package/src/services/simpledb/{mongodb.ts → mongodb.ts.bak} +1 -0
  268. package/src/services/simpledb/{redisdb.ts → redisdb.ts.bak} +17 -14
  269. package/src/services/simpledb/{shared.ts → shared.ts.bak} +2 -1
  270. package/src/services/simpledb/{simpledb.ts → simpledb.ts.bak} +6 -2
  271. package/tsconfig.json +4 -21
  272. package/tsconfig.json.bak +0 -4
  273. package/_cjs/_global.cjs +0 -6
  274. package/_cjs/_global.cjs.map +0 -1
  275. package/_cjs/_global.ext.cjs +0 -5
  276. package/_cjs/_global.ext.cjs.map +0 -1
  277. package/_cjs/_global.schema.cjs +0 -5
  278. package/_cjs/_global.schema.cjs.map +0 -1
  279. package/_cjs/api/defaultErrorHandler.cjs +0 -37
  280. package/_cjs/api/defaultErrorHandler.cjs.map +0 -1
  281. package/_cjs/api/express/schema/jwt.cjs.map +0 -1
  282. package/_cjs/api/express/schema/routing.cjs +0 -23
  283. package/_cjs/api/express/schema/routing.cjs.map +0 -1
  284. package/_cjs/api/http.cjs +0 -42
  285. package/_cjs/api/http.cjs.map +0 -1
  286. package/_cjs/services/Store/Redis.cjs +0 -73
  287. package/_cjs/services/Store/Redis.cjs.map +0 -1
  288. package/_cjs/services/simpledb/cosmosdb.cjs +0 -109
  289. package/_cjs/services/simpledb/cosmosdb.cjs.map +0 -1
  290. package/_cjs/services/simpledb/diskdb.cjs +0 -125
  291. package/_cjs/services/simpledb/diskdb.cjs.map +0 -1
  292. package/_cjs/services/simpledb/index.cjs +0 -38
  293. package/_cjs/services/simpledb/index.cjs.map +0 -1
  294. package/_cjs/services/simpledb/memdb.cjs +0 -72
  295. package/_cjs/services/simpledb/memdb.cjs.map +0 -1
  296. package/_cjs/services/simpledb/mongodb.cjs +0 -99
  297. package/_cjs/services/simpledb/mongodb.cjs.map +0 -1
  298. package/_cjs/services/simpledb/redisdb.cjs +0 -135
  299. package/_cjs/services/simpledb/redisdb.cjs.map +0 -1
  300. package/_cjs/services/simpledb/shared.cjs +0 -79
  301. package/_cjs/services/simpledb/shared.cjs.map +0 -1
  302. package/_cjs/services/simpledb/simpledb.cjs +0 -85
  303. package/_cjs/services/simpledb/simpledb.cjs.map +0 -1
  304. package/dist/_global.d.ts +0 -10
  305. package/dist/_global.d.ts.map +0 -1
  306. package/dist/_global.ext.d.ts +0 -34
  307. package/dist/_global.ext.d.ts.map +0 -1
  308. package/dist/_global.ext.js +0 -6
  309. package/dist/_global.js +0 -12
  310. package/dist/_global.schema.d.ts +0 -6
  311. package/dist/_global.schema.d.ts.map +0 -1
  312. package/dist/_global.schema.js +0 -9
  313. package/dist/api/defaultErrorHandler.d.ts +0 -6
  314. package/dist/api/defaultErrorHandler.d.ts.map +0 -1
  315. package/dist/api/defaultErrorHandler.js +0 -34
  316. package/dist/api/express/schema/jwt.d.ts +0 -6
  317. package/dist/api/express/schema/jwt.d.ts.map +0 -1
  318. package/dist/api/express/schema/jwt.js +0 -11
  319. package/dist/api/express/schema/routing.d.ts.map +0 -1
  320. package/dist/api/express/schema/routing.js +0 -10
  321. package/dist/api/http.d.ts +0 -16
  322. package/dist/api/http.d.ts.map +0 -1
  323. package/dist/api/http.js +0 -12
  324. package/dist/services/Store/Redis.d.ts +0 -6
  325. package/dist/services/Store/Redis.d.ts.map +0 -1
  326. package/dist/services/Store/Redis.js +0 -76
  327. package/dist/services/simpledb/cosmosdb.d.ts +0 -14
  328. package/dist/services/simpledb/cosmosdb.d.ts.map +0 -1
  329. package/dist/services/simpledb/cosmosdb.js +0 -103
  330. package/dist/services/simpledb/diskdb.d.ts +0 -12
  331. package/dist/services/simpledb/diskdb.d.ts.map +0 -1
  332. package/dist/services/simpledb/diskdb.js +0 -109
  333. package/dist/services/simpledb/index.d.ts +0 -7
  334. package/dist/services/simpledb/index.d.ts.map +0 -1
  335. package/dist/services/simpledb/index.js +0 -7
  336. package/dist/services/simpledb/memdb.d.ts +0 -11
  337. package/dist/services/simpledb/memdb.d.ts.map +0 -1
  338. package/dist/services/simpledb/memdb.js +0 -58
  339. package/dist/services/simpledb/mongodb.d.ts +0 -13
  340. package/dist/services/simpledb/mongodb.d.ts.map +0 -1
  341. package/dist/services/simpledb/mongodb.js +0 -68
  342. package/dist/services/simpledb/redisdb.d.ts +0 -35
  343. package/dist/services/simpledb/redisdb.d.ts.map +0 -1
  344. package/dist/services/simpledb/redisdb.js +0 -126
  345. package/dist/services/simpledb/shared.d.ts +0 -87
  346. package/dist/services/simpledb/shared.d.ts.map +0 -1
  347. package/dist/services/simpledb/shared.js +0 -52
  348. package/dist/services/simpledb/simpledb.d.ts +0 -23
  349. package/dist/services/simpledb/simpledb.d.ts.map +0 -1
  350. package/dist/services/simpledb/simpledb.js +0 -69
  351. package/src/_global.ext.ts +0 -36
  352. package/src/_global.schema.ts +0 -10
  353. package/src/_global.ts +0 -14
  354. package/src/api/defaultErrorHandler.ts +0 -59
  355. package/src/api/express/makeJsonSchema.test.ts.bak +0 -76
  356. package/src/api/express/makeJsonSchema.ts.bak +0 -166
  357. package/src/api/express/makeOpenApiSpecs.ts.bak +0 -62
  358. package/src/api/http.ts +0 -26
  359. package/tsplus.config.json +0 -9
  360. /package/src/services/simpledb/{index.ts → index.ts.bak} +0 -0
@@ -5,10 +5,11 @@ import * as S from "effect-app/schema"
5
5
 
6
6
  import type { EnforceNonEmptyRecord } from "@effect-app/core/utils"
7
7
  import { ValidationError } from "@effect-app/infra/errors"
8
+ import type { Context } from "effect-app"
9
+ import { Cause, Effect, Exit, Option } from "effect-app"
10
+ import type { HttpRouter, HttpServerError } from "effect-app/http"
8
11
  import type { REST, StructFields } from "effect-app/schema"
9
12
  import type { Simplify } from "effect/Types"
10
- import type express from "express"
11
- import type { HttpRequestError, HttpRoute } from "../http.js"
12
13
 
13
14
  export type Flatten<T extends object> = object extends T ? object : {
14
15
  [K in keyof T]-?: (
@@ -53,7 +54,7 @@ export type RouteMatch<
53
54
  // PR = never
54
55
  Effect<
55
56
  // RouteDescriptor<R, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, SupportedErrors, Methods>
56
- HttpRoute<Exclude<Exclude<R, EnforceNonEmptyRecord<M>>, PR>, HttpRequestError>
57
+ HttpRouter.Route<Exclude<Exclude<R, EnforceNonEmptyRecord<M>>, PR>, HttpServerError.RequestError>
57
58
  >
58
59
 
59
60
  export interface ReqHandler<
@@ -125,6 +126,20 @@ export function parseRequestParams<
125
126
  >(
126
127
  parsers: RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA>
127
128
  ) {
129
+ const handleParse = <A, E, R>(effect: Effect<A, E, R>) =>
130
+ effect.pipe(
131
+ Effect.exit,
132
+ Effect
133
+ .flatMap((_) =>
134
+ Exit.isFailure(_) && !Cause.isFailure(_.cause)
135
+ ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError>)
136
+ : Effect.sync(() =>
137
+ Exit.isSuccess(_)
138
+ ? { _tag: "Success" as const, value: _.value }
139
+ : { _tag: "Failure", errors: Cause.failures(_.cause) }
140
+ )
141
+ )
142
+ )
128
143
  return (
129
144
  { body, cookies, headers, params, query }: {
130
145
  body: unknown
@@ -138,93 +153,49 @@ export function parseRequestParams<
138
153
  .all({
139
154
  body: parsers
140
155
  .parseBody(body)
141
- .exit
142
- .flatMap((_) =>
143
- _.isFailure() && !_.cause.isFailure()
144
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError>)
145
- : Effect.sync(() =>
146
- _.isSuccess()
147
- ? { _tag: "Success" as const, value: _.value }
148
- : { _tag: "Failure", errors: _.cause.failures }
149
- )
150
- ),
156
+ .pipe(handleParse),
151
157
  cookie: parsers
152
158
  .parseCookie(cookies)
153
- .exit
154
- .flatMap((_) =>
155
- _.isFailure() && !_.cause.isFailure()
156
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError>)
157
- : Effect.sync(() =>
158
- _.isSuccess()
159
- ? { _tag: "Success" as const, value: _.value }
160
- : { _tag: "Failure", errors: _.cause.failures }
161
- )
162
- ),
159
+ .pipe(handleParse),
163
160
  headers: parsers
164
161
  .parseHeaders(headers)
165
- .exit
166
- .flatMap((_) =>
167
- _.isFailure() && !_.cause.isFailure()
168
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError>)
169
- : Effect.sync(() =>
170
- _.isSuccess()
171
- ? { _tag: "Success" as const, value: _.value }
172
- : { _tag: "Failure", errors: _.cause.failures }
173
- )
174
- ),
162
+ .pipe(handleParse),
175
163
  query: parsers
176
164
  .parseQuery(query)
177
- .exit
178
- .flatMap((_) =>
179
- _.isFailure() && !_.cause.isFailure()
180
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError>)
181
- : Effect.sync(() =>
182
- _.isSuccess()
183
- ? { _tag: "Success" as const, value: _.value }
184
- : { _tag: "Failure", errors: _.cause.failures }
185
- )
186
- ),
165
+ .pipe(handleParse),
187
166
  path: parsers
188
167
  .parsePath(params)
189
- .exit
190
- .flatMap((_) =>
191
- _.isFailure() && !_.cause.isFailure()
192
- ? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError>)
193
- : Effect.sync(() =>
194
- _.isSuccess()
195
- ? { _tag: "Success" as const, value: _.value }
196
- : { _tag: "Failure", errors: _.cause.failures }
197
- )
198
- )
168
+ .pipe(handleParse)
199
169
  })
200
- .flatMap(({ body, cookie, headers, path, query }) => {
201
- const errors: unknown[] = []
202
- if (body._tag === "Failure") {
203
- errors.push(makeError("body")(body.errors))
204
- }
205
- if (cookie._tag === "Failure") {
206
- errors.push(makeError("cookie")(cookie.errors))
207
- }
208
- if (headers._tag === "Failure") {
209
- errors.push(makeError("headers")(headers.errors))
210
- }
211
- if (path._tag === "Failure") {
212
- errors.push(makeError("path")(path.errors))
213
- }
214
- if (query._tag === "Failure") {
215
- errors.push(makeError("query")(query.errors))
216
- }
217
- if (errors.length) {
218
- return new ValidationError({ errors })
219
- }
220
- return Effect.sync(() => ({
221
- body: body.value!,
222
- cookie: cookie.value!,
223
- headers: headers.value!,
224
- path: path.value!,
225
- query: query.value!
170
+ .pipe(Effect
171
+ .flatMap(({ body, cookie, headers, path, query }) => {
172
+ const errors: unknown[] = []
173
+ if (body._tag === "Failure") {
174
+ errors.push(makeError("body")(body.errors))
175
+ }
176
+ if (cookie._tag === "Failure") {
177
+ errors.push(makeError("cookie")(cookie.errors))
178
+ }
179
+ if (headers._tag === "Failure") {
180
+ errors.push(makeError("headers")(headers.errors))
181
+ }
182
+ if (path._tag === "Failure") {
183
+ errors.push(makeError("path")(path.errors))
184
+ }
185
+ if (query._tag === "Failure") {
186
+ errors.push(makeError("query")(query.errors))
187
+ }
188
+ if (errors.length) {
189
+ return new ValidationError({ errors })
190
+ }
191
+ return Effect.sync(() => ({
192
+ body: body.value!,
193
+ cookie: cookie.value!,
194
+ headers: headers.value!,
195
+ path: path.value!,
196
+ query: query.value!
197
+ }))
226
198
  }))
227
- })
228
199
  }
229
200
 
230
201
  // // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -249,20 +220,6 @@ function makeError(type: string) {
249
220
  return (e: unknown) => [{ type, errors: decodeErrors(e) }]
250
221
  }
251
222
 
252
- export function respondSuccess<ReqA, A, E>(
253
- encodeResponse: (req: ReqA) => Encode<A, E>
254
- ) {
255
- return (req: ReqA, res: express.Response) =>
256
- flow(encodeResponse(req), Effect.succeed, (_) =>
257
- _.flatMap((r) =>
258
- Effect.sync(() => {
259
- r === undefined
260
- ? res.status(204).send()
261
- : res.status(200).send(JSON.stringify(r))
262
- })
263
- ))
264
- }
265
-
266
223
  export function makeRequestParsers<
267
224
  R,
268
225
  M,
@@ -299,42 +256,52 @@ export function makeRequestParsers<
299
256
  const ph = Effect.sync(() =>
300
257
  Option
301
258
  .fromNullable(Request.Headers)
302
- .map((s) => s as unknown as Schema<any>)
303
- .map(S.decodeUnknown)
259
+ .pipe(
260
+ Option.map((s) => s as unknown as S.Schema<any>),
261
+ Option.map(S.decodeUnknown)
262
+ )
304
263
  )
305
- const parseHeaders = (u: unknown) => ph.flatMapOpt((d) => d(u))
264
+ const parseHeaders = (u: unknown) => Effect.flatMapOption(ph, (d) => d(u))
306
265
 
307
266
  const pq = Effect.sync(() =>
308
267
  Option
309
268
  .fromNullable(Request.Query)
310
- .map((s) => s as unknown as Schema<any>)
311
- .map(S.decodeUnknown)
269
+ .pipe(
270
+ Option.map((s) => s as unknown as S.Schema<any>),
271
+ Option.map(S.decodeUnknown)
272
+ )
312
273
  )
313
- const parseQuery = (u: unknown) => pq.flatMapOpt((d) => d(u))
274
+ const parseQuery = (u: unknown) => Effect.flatMapOption(pq, (d) => d(u))
314
275
 
315
276
  const pb = Effect.sync(() =>
316
277
  Option
317
278
  .fromNullable(Request.Body)
318
- .map((s) => s as unknown as Schema<any>)
319
- .map(S.decodeUnknown)
279
+ .pipe(
280
+ Option.map((s) => s as unknown as S.Schema<any>),
281
+ Option.map(S.decodeUnknown)
282
+ )
320
283
  )
321
- const parseBody = (u: unknown) => pb.flatMapOpt((d) => d(u))
284
+ const parseBody = (u: unknown) => Effect.flatMapOption(pb, (d) => d(u))
322
285
 
323
286
  const pp = Effect.sync(() =>
324
287
  Option
325
288
  .fromNullable(Request.Path)
326
- .map((s) => s as unknown as Schema<any>)
327
- .map(S.decodeUnknown)
289
+ .pipe(
290
+ Option.map((s) => s as unknown as S.Schema<any>),
291
+ Option.map(S.decodeUnknown)
292
+ )
328
293
  )
329
- const parsePath = (u: unknown) => pp.flatMapOpt((d) => d(u))
294
+ const parsePath = (u: unknown) => Effect.flatMapOption(pp, (d) => d(u))
330
295
 
331
296
  const pc = Effect.sync(() =>
332
297
  Option
333
298
  .fromNullable(Request.Cookie)
334
- .map((s) => s as unknown as Schema<any>)
335
- .map(S.decodeUnknown)
299
+ .pipe(
300
+ Option.map((s) => s as unknown as S.Schema<any>),
301
+ Option.map(S.decodeUnknown)
302
+ )
336
303
  )
337
- const parseCookie = (u: unknown) => pc.flatMapOpt((d) => d(u))
304
+ const parseCookie = (u: unknown) => Effect.flatMapOption(pc, (d) => d(u))
338
305
 
339
306
  return {
340
307
  parseBody,
@@ -382,7 +349,7 @@ export type Request<
382
349
  Body?: BodyA
383
350
  Query?: QueryA
384
351
  Headers?: HeaderA
385
- Tag: Tag<M, M>
352
+ Tag: Context.Tag<M, M>
386
353
  ReqA?: ReqA
387
354
  }
388
355
 
@@ -1,4 +1,7 @@
1
1
  import { logError } from "@effect-app/infra/errorReporter"
2
+ import type { Schema } from "@effect-app/schema"
3
+ import { setBody, setStatus } from "@effect/platform/Http/ServerResponse"
4
+ import { Cause, Data, Effect, S, Schedule } from "effect-app"
2
5
  import type { SupportedErrors } from "effect-app/client/errors"
3
6
  import {
4
7
  InvalidStateError,
@@ -8,8 +11,7 @@ import {
8
11
  UnauthorizedError,
9
12
  ValidationError
10
13
  } from "effect-app/client/errors"
11
- import { HttpBody, HttpHeaders, type HttpServerRequest, type HttpServerResponse } from "../http.js"
12
-
14
+ import { HttpBody, HttpHeaders, type HttpServerRequest, HttpServerResponse } from "effect-app/http"
13
15
  import type {
14
16
  InsufficientScopeError,
15
17
  InvalidRequestError,
@@ -28,73 +30,81 @@ export class JWTError extends Data.TaggedClass("JWTError")<{
28
30
  const logRequestError = logError("Request")
29
31
 
30
32
  export function defaultBasicErrorHandler<R>(
31
- _req: HttpServerRequest,
32
- res: HttpServerResponse,
33
- r2: Effect<HttpServerResponse, ValidationError, R>
33
+ _req: HttpServerRequest.ServerRequest,
34
+ res: HttpServerResponse.ServerResponse,
35
+ r2: Effect<HttpServerResponse.ServerResponse, ValidationError, R>
34
36
  ) {
35
37
  const sendError = (code: number) => (body: unknown) =>
36
- Effect.sync(() => res.setBody(HttpBody.unsafeJson(body)).setStatus(code))
37
- return r2
38
- .tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
39
- .catchTag("ValidationError", (err) => sendError(400)(err.errors))
40
- // final catch all; expecting never so that unhandled known errors will show up
41
- .catchAll((err: never) =>
42
- Effect
43
- .logError(
44
- "Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
45
- )
46
- .map(() => err as unknown)
47
- .flatMap(Effect.die)
48
- )
38
+ Effect.sync(() => setBody(res, HttpBody.unsafeJson(body)).pipe(setStatus(code)))
39
+ return r2.pipe(
40
+ Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.unit),
41
+ Effect.catchTag("ValidationError", (err) => sendError(400)(err.errors)),
42
+ Effect
43
+ // final catch all; expecting never so that unhandled known errors will show up
44
+ .catchAll((err: never) =>
45
+ Effect
46
+ .logError(
47
+ "Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
48
+ )
49
+ .pipe(
50
+ Effect.map(() => err as unknown),
51
+ Effect.flatMap(Effect.die)
52
+ )
53
+ )
54
+ )
49
55
  }
50
56
 
51
57
  const optimisticConcurrencySchedule = Schedule.once
52
58
  && Schedule.recurWhile<SupportedErrors | JWTError>((a) => a._tag === "OptimisticConcurrencyException")
53
59
 
54
60
  export function defaultErrorHandler<R>(
55
- req: HttpServerRequest,
56
- res: HttpServerResponse,
57
- r2: Effect<HttpServerResponse, SupportedErrors | JWTError, R>
61
+ req: HttpServerRequest.ServerRequest,
62
+ res: HttpServerResponse.ServerResponse,
63
+ r2: Effect<HttpServerResponse.ServerResponse, SupportedErrors | JWTError, R>
58
64
  ) {
59
65
  const r3 = req.method === "PATCH"
60
- ? r2.retry(optimisticConcurrencySchedule)
66
+ ? Effect.retry(r2, optimisticConcurrencySchedule)
61
67
  : r2
62
68
  const sendError = <R, From, To>(code: number, schema: Schema<To, From, R>) => (body: To) =>
63
- schema
64
- .encode(body)
65
- .orDie
66
- .andThen((body) =>
67
- res
68
- .setStatus(code)
69
- .setBody(HttpBody.unsafeJson(body))
69
+ S
70
+ .encode(schema)(body)
71
+ .pipe(
72
+ Effect.orDie,
73
+ Effect.andThen((body) => res.pipe(setStatus(code), setBody(HttpBody.unsafeJson(body))))
70
74
  )
71
75
  return r3
72
- .tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
73
- .catchTags({
74
- "JWTError": (err) =>
75
- Effect.succeed(
76
- HttpServerResponse.unsafeJson({ message: err.error.message }, {
77
- status: err
78
- .error
79
- .status,
80
- headers: HttpHeaders.fromInput(err.error.headers)
81
- })
82
- ),
83
- "ValidationError": sendError(400, ValidationError),
84
- "NotFoundError": sendError(404, NotFoundError),
85
- "NotLoggedInError": sendError(401, NotLoggedInError),
86
- "UnauthorizedError": sendError(403, UnauthorizedError),
87
- "InvalidStateError": sendError(422, InvalidStateError),
88
- // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
89
- "OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
90
- })
91
- // final catch all; expecting never so that unhandled known errors will show up
92
- .catchAll((err: never) =>
76
+ .pipe(
77
+ Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.unit),
78
+ Effect
79
+ .catchTags({
80
+ "JWTError": (err) =>
81
+ Effect.succeed(
82
+ HttpServerResponse.unsafeJson({ message: err.error.message }, {
83
+ status: err
84
+ .error
85
+ .status,
86
+ headers: HttpHeaders.fromInput(err.error.headers)
87
+ })
88
+ ),
89
+ "ValidationError": sendError(400, ValidationError),
90
+ "NotFoundError": sendError(404, NotFoundError),
91
+ "NotLoggedInError": sendError(401, NotLoggedInError),
92
+ "UnauthorizedError": sendError(403, UnauthorizedError),
93
+ "InvalidStateError": sendError(422, InvalidStateError),
94
+ // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
95
+ "OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
96
+ }),
93
97
  Effect
94
- .logError(
95
- "Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
98
+ // final catch all; expecting never so that unhandled known errors will show up
99
+ .catchAll((err: never) =>
100
+ Effect
101
+ .logError(
102
+ "Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
103
+ )
104
+ .pipe(
105
+ Effect.map(() => err as unknown),
106
+ Effect.flatMap(Effect.die)
107
+ )
96
108
  )
97
- .map(() => err as unknown)
98
- .flatMap(Effect.die)
99
109
  )
100
110
  }