@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
@@ -1,7 +1,10 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
+ import { toNonEmptyArray } from "@effect-app/core/Array"
3
4
  import { CosmosClient, CosmosClientLayer } from "@effect-app/infra-adapters/cosmos-client"
4
- import { dropUndefinedT, omit, pick } from "effect-app/utils"
5
+ import { Chunk, Duration, Effect, Layer, Option, ReadonlyArray, Secret } from "effect-app"
6
+ import type { NonEmptyReadonlyArray } from "effect-app"
7
+ import { dropUndefinedT, omit, pick, spread } from "effect-app/utils"
5
8
  import { OptimisticConcurrencyException } from "../../errors.js"
6
9
  import {
7
10
  buildCosmosQuery,
@@ -60,7 +63,7 @@ function makeCosmosStore({ prefix }: StorageConfig) {
60
63
  (x) =>
61
64
  [
62
65
  x,
63
- Option.fromNullable(x._etag).match({
66
+ Option.match(Option.fromNullable(x._etag), {
64
67
  onNone: () =>
65
68
  dropUndefinedT({
66
69
  operationType: "Create" as const,
@@ -84,54 +87,58 @@ function makeCosmosStore({ prefix }: StorageConfig) {
84
87
  })
85
88
  ] as const
86
89
  )
87
- const batches = b.chunk(config?.maxBulkSize ?? 10).toReadonlyArray
90
+ const batches = Chunk.toReadonlyArray(ReadonlyArray.chunk_(b, config?.maxBulkSize ?? 10))
88
91
 
89
92
  const batchResult = yield* $(
90
- batches
91
- .map((x, i) => [i, x] as const)
92
- .forEachEffect(
93
- ([i, batch]) =>
94
- Effect
95
- .promise(() => bulk(batch.map(([, op]) => op)))
96
- .delay(Duration.millis(i === 0 ? 0 : 1100))
97
- .flatMap((responses) =>
98
- Effect.gen(function*($) {
99
- const r = responses.find((x) => x.statusCode === 412 || x.statusCode === 404)
100
- if (r) {
101
- return yield* $(
102
- Effect.fail(
103
- new OptimisticConcurrencyException(
104
- { type: name, id: JSON.stringify(r.resourceBody?.["id"]) }
93
+ Effect.forEach(
94
+ batches
95
+ .map((x, i) => [i, x] as const),
96
+ ([i, batch]) =>
97
+ Effect
98
+ .promise(() => bulk(batch.map(([, op]) => op)))
99
+ .pipe(
100
+ Effect
101
+ .delay(Duration.millis(i === 0 ? 0 : 1100)),
102
+ Effect
103
+ .flatMap((responses) =>
104
+ Effect.gen(function*($) {
105
+ const r = responses.find((x) => x.statusCode === 412 || x.statusCode === 404)
106
+ if (r) {
107
+ return yield* $(
108
+ Effect.fail(
109
+ new OptimisticConcurrencyException(
110
+ { type: name, id: JSON.stringify(r.resourceBody?.["id"]) }
111
+ )
105
112
  )
106
113
  )
114
+ }
115
+ const r2 = responses.find(
116
+ (x) => x.statusCode > 299 || x.statusCode < 200
107
117
  )
108
- }
109
- const r2 = responses.find(
110
- (x) => x.statusCode > 299 || x.statusCode < 200
111
- )
112
- if (r2) {
113
- return yield* $(
114
- Effect.die(
115
- new CosmosDbOperationError(
116
- "not able to update record: " + r2.statusCode
118
+ if (r2) {
119
+ return yield* $(
120
+ Effect.die(
121
+ new CosmosDbOperationError(
122
+ "not able to update record: " + r2.statusCode
123
+ )
117
124
  )
118
125
  )
119
- )
120
- }
121
- return batch.map(([e], i) => ({
122
- ...e,
123
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
124
- _etag: responses[i]!.eTag
125
- }))
126
- })
127
- )
128
- )
126
+ }
127
+ return batch.map(([e], i) => ({
128
+ ...e,
129
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
130
+ _etag: responses[i]!.eTag
131
+ }))
132
+ })
133
+ )
134
+ )
135
+ )
129
136
  )
130
137
  return batchResult.flat() as unknown as NonEmptyReadonlyArray<PM>
131
138
  })
132
- .withSpan("Cosmos.bulkSet [effect-app/infra/Store]", {
139
+ .pipe(Effect.withSpan("Cosmos.bulkSet [effect-app/infra/Store]", {
133
140
  attributes: { "repository.container_id": containerId, "repository.model_name": name }
134
- })
141
+ }))
135
142
 
136
143
  const batchSet = (items: NonEmptyReadonlyArray<PM>) => {
137
144
  return Effect
@@ -140,13 +147,13 @@ function makeCosmosStore({ prefix }: StorageConfig) {
140
147
  (x) =>
141
148
  [
142
149
  x,
143
- Option.fromNullable(x._etag).match({
150
+ Option.match(Option.fromNullable(x._etag), {
144
151
  onNone: () => ({
145
152
  operationType: "Create" as const,
146
153
  resourceBody: {
147
154
  ...omit(x, "_etag"),
148
155
  _partitionKey: config?.partitionValue(x)
149
- } as any
156
+ }
150
157
  }),
151
158
  onSome: (eTag) => ({
152
159
  operationType: "Replace" as const,
@@ -154,7 +161,7 @@ function makeCosmosStore({ prefix }: StorageConfig) {
154
161
  resourceBody: {
155
162
  ...omit(x, "_etag"),
156
163
  _partitionKey: config?.partitionValue(x)
157
- } as any,
164
+ },
158
165
  ifMatch: eTag
159
166
  })
160
167
  })
@@ -165,7 +172,7 @@ function makeCosmosStore({ prefix }: StorageConfig) {
165
172
 
166
173
  return Effect
167
174
  .promise(() => execBatch(ex, ex[0]?.resourceBody._partitionKey))
168
- .flatMap((x) =>
175
+ .pipe(Effect.flatMap((x) =>
169
176
  Effect.gen(function*($) {
170
177
  const result = x.result ?? []
171
178
  const firstFailed = result.find(
@@ -191,11 +198,12 @@ function makeCosmosStore({ prefix }: StorageConfig) {
191
198
  _etag: result[i]?.eTag
192
199
  })) as unknown as NonEmptyReadonlyArray<PM>
193
200
  })
194
- )
195
- })
196
- .withSpan("Cosmos.batchSet [effect-app/infra/Store]", {
197
- attributes: { "repository.container_id": containerId, "repository.model_name": name }
201
+ ))
198
202
  })
203
+ .pipe(Effect
204
+ .withSpan("Cosmos.batchSet [effect-app/infra/Store]", {
205
+ attributes: { "repository.container_id": containerId, "repository.model_name": name }
206
+ }))
199
207
  }
200
208
 
201
209
  const s: Store<PM, Id> = {
@@ -204,53 +212,65 @@ function makeCosmosStore({ prefix }: StorageConfig) {
204
212
  query: `SELECT * FROM ${name} f WHERE f.id != @id`,
205
213
  parameters: [{ name: "@id", value: importedMarkerId }]
206
214
  }))
207
- .tap((q) => logQuery(q))
208
- .flatMap((q) =>
209
- Effect.promise(() =>
210
- container
211
- .items
212
- .query<PM>(q)
213
- .fetchAll()
214
- .then(({ resources }) => resources)
215
- )
216
- )
217
- .withSpan("Cosmos.all [effect-app/infra/Store]", {
218
- attributes: { "repository.container_id": containerId, "repository.model_name": name }
219
- }),
215
+ .pipe(
216
+ Effect
217
+ .tap((q) => logQuery(q)),
218
+ Effect.flatMap((q) =>
219
+ Effect.promise(() =>
220
+ container
221
+ .items
222
+ .query<PM>(q)
223
+ .fetchAll()
224
+ .then(({ resources }) => resources)
225
+ )
226
+ ),
227
+ Effect
228
+ .withSpan("Cosmos.all [effect-app/infra/Store]", {
229
+ attributes: { "repository.container_id": containerId, "repository.model_name": name }
230
+ })
231
+ ),
220
232
  filterJoinSelect: <T extends object>(
221
233
  filter: FilterJoinSelect,
222
234
  cursor?: { skip?: number; limit?: number }
223
235
  ) =>
224
- filter
225
- .keys
226
- .forEachEffect((k) =>
227
- Effect
228
- .sync(() => buildFilterJoinSelectCosmosQuery(filter, k, name, cursor?.skip, cursor?.limit))
229
- .tap((q) => logQuery(q))
230
- .flatMap((q) =>
231
- Effect.promise(() =>
232
- container
233
- .items
234
- .query<T>(q)
235
- .fetchAll()
236
- .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._ })))
236
+ Effect
237
+ .forEach(
238
+ filter
239
+ .keys,
240
+ (k) =>
241
+ Effect
242
+ .sync(() => buildFilterJoinSelectCosmosQuery(filter, k, name, cursor?.skip, cursor?.limit))
243
+ .pipe(
244
+ Effect
245
+ .tap((q) => logQuery(q)),
246
+ Effect.flatMap((q) =>
247
+ Effect.promise(() =>
248
+ container
249
+ .items
250
+ .query<T>(q)
251
+ .fetchAll()
252
+ .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._ })))
253
+ )
254
+ )
237
255
  )
238
- )
239
256
  )
240
- .map((a) => {
241
- const v = a
242
- .flatMap((_) => _)
243
- .map((x) =>
244
- spread(
245
- x,
246
- ({ r, ...rest }: any) => ({ ...rest, ...r } as T & { _rootId: string })
257
+ .pipe(
258
+ Effect.map((a) => {
259
+ const v = a
260
+ .flatMap((_) => _)
261
+ .map((x) =>
262
+ spread(
263
+ x,
264
+ ({ r, ...rest }: any) => ({ ...rest, ...r } as T & { _rootId: string })
265
+ )
247
266
  )
248
- )
249
- return v
250
- })
251
- .withSpan("Cosmos.filterJoinSelect [effect-app/infra/Store]", {
252
- attributes: { "repository.container_id": containerId, "repository.model_name": name }
253
- }),
267
+ return v
268
+ }),
269
+ Effect
270
+ .withSpan("Cosmos.filterJoinSelect [effect-app/infra/Store]", {
271
+ attributes: { "repository.container_id": containerId, "repository.model_name": name }
272
+ })
273
+ ),
254
274
  /**
255
275
  * May return duplicate results for "join_find", when matching more than once.
256
276
  */
@@ -265,23 +285,28 @@ function makeCosmosStore({ prefix }: StorageConfig) {
265
285
  // This is a problem if one of the multiple joined arrays can be empty!
266
286
  // https://stackoverflow.com/questions/60320780/azure-cosmosdb-sql-join-not-returning-results-when-the-child-contains-empty-arra
267
287
  // so we use multiple queries instead.
268
- ? filter
269
- .keys
270
- .forEachEffect((k) =>
271
- Effect
272
- .sync(() => buildFindJoinCosmosQuery(filter, k, name, skip, limit))
273
- .tap((q) => logQuery(q))
274
- .flatMap((q) =>
275
- Effect.promise(() =>
276
- container
277
- .items
278
- .query<M>(q)
279
- .fetchAll()
280
- .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._ })))
288
+ ? Effect
289
+ .forEach(
290
+ filter
291
+ .keys,
292
+ (k) =>
293
+ Effect
294
+ .sync(() => buildFindJoinCosmosQuery(filter, k, name, skip, limit))
295
+ .pipe(
296
+ Effect.tap((q) => logQuery(q)),
297
+ Effect
298
+ .flatMap((q) =>
299
+ Effect.promise(() =>
300
+ container
301
+ .items
302
+ .query<M>(q)
303
+ .fetchAll()
304
+ .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._ })))
305
+ )
306
+ )
281
307
  )
282
- )
283
308
  )
284
- .map((_) => _.flatMap((_) => _))
309
+ .pipe(Effect.map((_) => _.flatMap((_) => _)))
285
310
  : (filter.type === "new-kid"
286
311
  ? Effect
287
312
  .sync(() =>
@@ -296,39 +321,45 @@ function makeCosmosStore({ prefix }: StorageConfig) {
296
321
  limit
297
322
  )
298
323
  )
299
- .tap((q) => logQuery(q))
300
- .flatMap((q) =>
301
- Effect.promise(() =>
302
- f.select
303
- ? container
304
- .items
305
- .query<M>(q)
306
- .fetchAll()
307
- .then(({ resources }) =>
308
- resources.map((_) => ({ ...pick(defaultValues, f.select!), ..._ }))
309
- )
310
- : container
311
- .items
312
- .query<{ f: M }>(q)
313
- .fetchAll()
314
- .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._.f })))
315
- )
324
+ .pipe(
325
+ Effect.tap((q) => logQuery(q)),
326
+ Effect
327
+ .flatMap((q) =>
328
+ Effect.promise(() =>
329
+ f.select
330
+ ? container
331
+ .items
332
+ .query<M>(q)
333
+ .fetchAll()
334
+ .then(({ resources }) =>
335
+ resources.map((_) => ({ ...pick(defaultValues, f.select!), ..._ }))
336
+ )
337
+ : container
338
+ .items
339
+ .query<{ f: M }>(q)
340
+ .fetchAll()
341
+ .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._.f })))
342
+ )
343
+ )
316
344
  )
317
345
  : Effect
318
346
  .sync(() => buildCosmosQuery(filter, name, importedMarkerId, defaultValues, skip, limit))
319
- .tap((q) => logQuery(q))
320
- .flatMap((q) =>
321
- Effect.promise(() =>
322
- container
323
- .items
324
- .query<{ f: M }>(q)
325
- .fetchAll()
326
- .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._.f })))
327
- )
347
+ .pipe(
348
+ Effect.tap((q) => logQuery(q)),
349
+ Effect
350
+ .flatMap((q) =>
351
+ Effect.promise(() =>
352
+ container
353
+ .items
354
+ .query<{ f: M }>(q)
355
+ .fetchAll()
356
+ .then(({ resources }) => resources.map((_) => ({ ...defaultValues, ..._.f })))
357
+ )
358
+ )
328
359
  )))
329
- .withSpan("Cosmos.filter [effect-app/infra/Store]", {
360
+ .pipe(Effect.withSpan("Cosmos.filter [effect-app/infra/Store]", {
330
361
  attributes: { "repository.container_id": containerId, "repository.model_name": name }
331
- })
362
+ }))
332
363
  },
333
364
  find: (id) =>
334
365
  Effect
@@ -336,15 +367,19 @@ function makeCosmosStore({ prefix }: StorageConfig) {
336
367
  container
337
368
  .item(id, config?.partitionValue({ id } as PM))
338
369
  .read<PM>()
339
- .then(({ resource }) => Option.fromNullable(resource).map((_) => ({ ...defaultValues, ..._ })))
370
+ .then(({ resource }) =>
371
+ Option.fromNullable(resource).pipe(Option.map((_) => ({ ...defaultValues, ..._ })))
372
+ )
340
373
  )
341
- .withSpan("Cosmos.find [effect-app/infra/Store]", {
342
- attributes: { "repository.container_id": containerId, "repository.model_name": name }
343
- }),
374
+ .pipe(Effect
375
+ .withSpan("Cosmos.find [effect-app/infra/Store]", {
376
+ attributes: { "repository.container_id": containerId, "repository.model_name": name }
377
+ })),
344
378
  set: (e) =>
345
379
  Option
346
- .fromNullable(e._etag)
347
380
  .match(
381
+ Option
382
+ .fromNullable(e._etag),
348
383
  {
349
384
  onNone: () =>
350
385
  Effect.promise(() =>
@@ -367,33 +402,38 @@ function makeCosmosStore({ prefix }: StorageConfig) {
367
402
  )
368
403
  }
369
404
  )
370
- .flatMap((x) => {
371
- if (x.statusCode === 412 || x.statusCode === 404) {
372
- return new OptimisticConcurrencyException({ type: name, id: e.id })
373
- }
374
- if (x.statusCode > 299 || x.statusCode < 200) {
375
- return Effect.die(
376
- new CosmosDbOperationError(
377
- "not able to update record: " + x.statusCode
378
- )
379
- )
380
- }
381
- return Effect.sync(() => ({
382
- ...e,
383
- _etag: x.etag
384
- }))
385
- })
386
- .withSpan("Cosmos.set [effect-app/infra/Store]", {
387
- attributes: { "repository.container_id": containerId, "repository.model_name": name }
388
- }),
405
+ .pipe(
406
+ Effect
407
+ .flatMap((x) => {
408
+ if (x.statusCode === 412 || x.statusCode === 404) {
409
+ return new OptimisticConcurrencyException({ type: name, id: e.id })
410
+ }
411
+ if (x.statusCode > 299 || x.statusCode < 200) {
412
+ return Effect.die(
413
+ new CosmosDbOperationError(
414
+ "not able to update record: " + x.statusCode
415
+ )
416
+ )
417
+ }
418
+ return Effect.sync(() => ({
419
+ ...e,
420
+ _etag: x.etag
421
+ }))
422
+ }),
423
+ Effect
424
+ .withSpan("Cosmos.set [effect-app/infra/Store]", {
425
+ attributes: { "repository.container_id": containerId, "repository.model_name": name }
426
+ })
427
+ ),
389
428
  batchSet,
390
429
  bulkSet,
391
430
  remove: (e: PM) =>
392
431
  Effect
393
432
  .promise(() => container.item(e.id, config?.partitionValue(e)).delete())
394
- .withSpan("Cosmos.remove [effect-app/infra/Store]", {
395
- attributes: { "repository.container_id": containerId, "repository.model_name": name }
396
- })
433
+ .pipe(Effect
434
+ .withSpan("Cosmos.remove [effect-app/infra/Store]", {
435
+ attributes: { "repository.container_id": containerId, "repository.model_name": name }
436
+ }))
397
437
  }
398
438
 
399
439
  // handle mock data
@@ -406,20 +446,21 @@ function makeCosmosStore({ prefix }: StorageConfig) {
406
446
  )
407
447
  )
408
448
 
409
- if (!marker.isSome()) {
449
+ if (!Option.isSome(marker)) {
410
450
  console.log("Creating mock data for " + name)
411
451
  if (seed) {
412
452
  const m = yield* $(seed)
413
453
  yield* $(
414
- Effect
415
- .succeed(m.toNonEmptyArray)
416
- .flatMapOpt((a) =>
417
- s
418
- .bulkSet(a)
419
- .orDie
420
- // we delay extra here, so that initial creation between Companies/POs also have an interval between them.
421
- .delay(Duration.millis(1100))
422
- )
454
+ Effect.flatMapOption(
455
+ Effect.succeed(toNonEmptyArray([...m])),
456
+ (a) =>
457
+ s.bulkSet(a).pipe(
458
+ Effect.orDie,
459
+ Effect
460
+ // we delay extra here, so that initial creation between Companies/POs also have an interval between them.
461
+ .delay(Duration.millis(1100))
462
+ )
463
+ )
423
464
  )
424
465
  }
425
466
  // Mark as imported
@@ -441,5 +482,5 @@ function makeCosmosStore({ prefix }: StorageConfig) {
441
482
  export function CosmosStoreLayer(cfg: StorageConfig) {
442
483
  return StoreMaker
443
484
  .toLayer(makeCosmosStore(cfg))
444
- .provide(CosmosClientLayer(cfg.url.value, cfg.dbName))
485
+ .pipe(Layer.provide(CosmosClientLayer(Secret.value(cfg.url), cfg.dbName)))
445
486
  }