@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,68 +0,0 @@
1
- import * as tsplus_module_1 from "effect/Effect";
2
- import * as tsplus_module_2 from "effect/Option";
3
- import * as tsplus_module_3 from "@effect-app/core/Effect";
4
- import { MongoClient } from "@effect-app/infra-adapters/mongo-client";
5
- import { OptimisticLockException } from "./shared.js";
6
- import * as simpledb from "./simpledb.js";
7
- // const makeFromIndexKeys = (indexKeys: string[], unique: boolean) => indexKeys.reduce((prev, cur) => {
8
- // prev[cur] = 1
9
- // return prev
10
- // }, {} as Record<string, number>)
11
- const setup = (type, indexes) => MongoClient
12
- .tap(({ db }) => tsplus_module_1.tryPromise(() => db.createCollection(type).catch((err) => console.warn(err))))
13
- .flatMap(({ db }) => tsplus_module_1.tryPromise(() => db.collection(type).createIndexes(indexes)));
14
- export function createContext() {
15
- return (type, encode, decode,
16
- // schemaVersion: string,
17
- indexes) => {
18
- return setup(type, indexes).map(() => ({
19
- find: simpledb.find(find, decode, type),
20
- findBy,
21
- save: simpledb.storeDirectly(store, type)
22
- }));
23
- function find(id) {
24
- return tsplus_module_3.mapOption(MongoClient
25
- .flatMap(({ db }) => tsplus_module_1.tryPromise(() => db
26
- .collection(type)
27
- .findOne({ _id: { equals: id } })))
28
- .map(tsplus_module_2.fromNullable), ({ data, version }) => ({ version, data }));
29
- }
30
- function findBy(keys) {
31
- return tsplus_module_3.mapOption(MongoClient
32
- .flatMap(({ db }) => tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, { projection: { _id: 1 } })))
33
- .map(tsplus_module_2.fromNullable), ({ _id }) => _id);
34
- }
35
- function store(record, currentVersion) {
36
- return tsplus_module_1.gen(function* ($) {
37
- const version = currentVersion
38
- .map((cv) => (parseInt(cv) + 1).toString())
39
- .getOrElse(() => "1");
40
- const { db } = yield* $(MongoClient);
41
- const data = yield* $(encode(record));
42
- yield* $(tsplus_module_2.match(currentVersion, {
43
- onNone: () => tsplus_module_1.tryPromise(() => db
44
- .collection(type)
45
- .insertOne({ _id: record.id, version, timestamp: new Date(), data }, {
46
- checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
47
- }))
48
- .asUnit
49
- .orDie,
50
- onSome: (currentVersion) => tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({ _id: record.id, version: currentVersion }, {
51
- version,
52
- timestamp: new Date(),
53
- data
54
- }, { upsert: false }))
55
- .orDie
56
- .flatMap((x) => {
57
- if (!x.modifiedCount) {
58
- return new OptimisticLockException(type, record.id);
59
- }
60
- return tsplus_module_1.unit;
61
- })
62
- }));
63
- return { version, data: record };
64
- });
65
- }
66
- };
67
- }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9tb25nb2RiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUdyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckQsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFHekMsd0dBQXdHO0FBQ3hHLGtCQUFrQjtBQUNsQixnQkFBZ0I7QUFDaEIsbUNBQW1DO0FBRW5DLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQTJCLEVBQUUsRUFBRSxDQUMxRCxXQUFXO0tBQ1IsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsMkJBQWtCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3JHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLDJCQUFrQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFN0YsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxDQUNMLElBQVksRUFDWixNQUFpRCxFQUNqRCxNQUE4QztJQUM5Qyx5QkFBeUI7SUFDekIsT0FBMkIsRUFDM0IsRUFBRTtRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZQUN2QyxNQUFNO1lBQ04sSUFBSSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztTQUMxQyxDQUFDLENBQUMsQ0FBQTtRQUVILFNBQVMsSUFBSSxDQUFDLEVBQVU7WUFDdEIsT0FBTywwQkFBQSxXQUFXO2lCQUNmLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUNsQiwyQkFBa0IsR0FBRyxFQUFFLENBQ3JCLEVBQUU7aUJBQ0MsVUFBVSxDQUFDLElBQUksQ0FBQztpQkFDaEIsT0FBTyxDQUE0QyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQy9FLENBQ0Y7aUJBQ0EsR0FBRyw4QkFBcUIsRUFDakIsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQXVCLENBQUEsQ0FBQyxDQUFBO1FBQzNFLENBQUM7UUFFRCxTQUFTLE1BQU0sQ0FBQyxJQUE0QjtZQUMxQyxPQUFPLDBCQUFBLFdBQVc7aUJBQ2YsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ2xCLDJCQUFrQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBZ0IsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUN0RztpQkFDQSxHQUFHLDhCQUFxQixFQUNqQixDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzdCLENBQUM7UUFFRCxTQUFTLEtBQUssQ0FBQyxNQUFTLEVBQUUsY0FBK0I7WUFDdkQsT0FBTyxvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO2dCQUMzQixNQUFNLE9BQU8sR0FBRyxjQUFjO3FCQUMzQixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUMxQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBRXZCLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUE7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtnQkFDckMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNOLHNCQUFBLGNBQWMsRUFDWjtvQkFDRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQ1gsMkJBQ2MsR0FBRyxFQUFFLENBQ2YsRUFBRTt5QkFDQyxVQUFVLENBQUMsSUFBSSxDQUFDO3lCQUNoQixTQUFTLENBQ1IsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQy9EO3dCQUNFLFNBQVMsRUFBRSxLQUFLLENBQUMsa0dBQWtHO3FCQUNoRyxDQUN0QixDQUNKO3lCQUNBLE1BQU07eUJBQ04sS0FBSztvQkFDVixNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUN6QiwyQkFDYyxHQUFHLEVBQUUsQ0FDZixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDNUIsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQVMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQ2xEO3dCQUNFLE9BQU87d0JBQ1AsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO3dCQUNyQixJQUFJO3FCQUNMLEVBQ0QsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQ2xCLENBQ0Y7eUJBQ0EsS0FBSzt5QkFDTCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDYixJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDOzRCQUNyQixPQUFPLElBQUksdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTt3QkFDckQsQ0FBQzt3QkFDRCw0QkFBa0I7b0JBQ3BCLENBQUMsQ0FBQztpQkFDUCxDQUNGLENBQ0YsQ0FBQTtnQkFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQXFCLENBQUE7WUFDckQsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyJ9
@@ -1,35 +0,0 @@
1
- import { Effect } from "effect/Effect";
2
- import { Option } from "@effect-app/core/Option";
3
- import { RedisClient } from "@effect-app/infra-adapters/redis-client";
4
- import * as S from "effect-app/schema";
5
- import type { DBRecord, Index } from "./shared.js";
6
- import { CouldNotAquireDbLockException } from "./shared.js";
7
- import * as simpledb from "./simpledb.js";
8
- export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<EA, never, REncode>, decode: (d: EA) => Effect<A, EDecode, RDecode>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
9
- find: (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, simpledb.InvalidStateError, RedisClient | simpledb.RecordCache | RDecode>;
10
- findByIndex: (index: Index) => import("effect/Effect").Effect<import("effect/Option").Option<TKey>, import("@effect-app/infra-adapters/redis-client").ConnectionException, RedisClient>;
11
- save: (record: A) => import("effect/Effect").Effect<A, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, RedisClient | simpledb.RecordCache | REncode>;
12
- };
13
- declare const RedisSerializedDBRecord_base: S.EnhancedClass<{
14
- readonly data: string;
15
- readonly version: string;
16
- readonly timestamp: Date;
17
- }, {
18
- readonly data: string;
19
- readonly version: string;
20
- readonly timestamp: string;
21
- }, never, {
22
- readonly data: string;
23
- readonly version: string;
24
- readonly timestamp: Date;
25
- }, RedisSerializedDBRecord, {
26
- version: S.Schema<string, string, never>;
27
- timestamp: S.Schema<Date, string, never> & {
28
- withDefault: S.Schema<Date, string, never> & S.ConstructorPropertyDescriptor<Date, string, never>;
29
- };
30
- data: S.Schema<string, string, never>;
31
- }, {}, {}>;
32
- export declare class RedisSerializedDBRecord extends RedisSerializedDBRecord_base {
33
- }
34
- export {};
35
- //# sourceMappingURL=redisdb.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisdb.d.ts","sourceRoot":"","sources":["../../../src/services/simpledb/redisdb.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAEtC,OAAO,KAAK,EAAgB,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAuB,6BAA6B,EAA+B,MAAM,aAAa,CAAA;AAC7G,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAIzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,KAAK,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,cACrC,EAAE,KAAK,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,iBAC/B,MAAM,oBACH,CAAC,KAAK,KAAK;;yBAsFN,KAAK;;EAwF/B;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,uBAAwB,SAAQ,4BAI3C;CAAG"}
@@ -1,126 +0,0 @@
1
- import * as tsplus_module_1 from "@effect/schema/Schema";
2
- import * as tsplus_module_2 from "effect/Effect";
3
- import * as tsplus_module_3 from "@effect-app/core/Effect";
4
- import * as tsplus_module_4 from "effect/Option";
5
- import * as tsplus_module_5 from "@effect/schema/Parser";
6
- /* eslint-disable @typescript-eslint/no-explicit-any */
7
- import { flow } from "@effect-app/core/Function";
8
- import { RedisClient } from "@effect-app/infra-adapters/redis-client";
9
- import * as S from "effect-app/schema";
10
- import { ConnectionException, CouldNotAquireDbLockException, getIndexName, getRecordName } from "./shared.js";
11
- import * as simpledb from "./simpledb.js";
12
- const ttl = 10 * 1000;
13
- export function createContext() {
14
- return (type, encode, decode, schemaVersion, makeIndexKey) => {
15
- const getData = flow(encode, (_) => _.map(JSON.stringify));
16
- return {
17
- find: simpledb.find(find, decode, type),
18
- findByIndex: getIdx,
19
- save: simpledb.store(find, store, lockRedisRecord, type)
20
- };
21
- function find(id) {
22
- return tsplus_module_3.flatMapOption(RedisClient
23
- .flatMap((_) => _.hmgetAll(getKey(id))), (v) => tsplus_module_2.mapError(tsplus_module_1.decodeUnknown(RedisSerializedDBRecord)(v)
24
- .map(({ data, version }) => ({
25
- data: JSON.parse(data),
26
- version
27
- })), (e) => new ConnectionException(new Error(e.toString()))))
28
- .orDie;
29
- }
30
- function store(record, currentVersion) {
31
- const version = currentVersion
32
- .map((cv) => (parseInt(cv) + 1).toString())
33
- .getOrElse(() => "1");
34
- return tsplus_module_4.match(currentVersion, {
35
- onNone: () => tsplus_module_2.scoped(tsplus_module_2.zipRight(lockIndex(record), tsplus_module_2.zipRight(tsplus_module_2.zipRight(tsplus_module_3.zipRightOption(getIndex(record), tsplus_module_2.fail(() => new Error("Combination already exists, abort"))), getData(record))
36
- // TODO: instead use MULTI & EXEC to make it in one command?
37
- .flatMap((data) => hmSetRec(getKey(record.id), new RedisSerializedDBRecord({
38
- version,
39
- timestamp: new Date(),
40
- data
41
- }))), setIndex(record))
42
- .orDie
43
- .map(() => ({ version, data: record })))),
44
- onSome: () => getData(record)
45
- .flatMap((data) => hmSetRec(getKey(record.id), new RedisSerializedDBRecord({
46
- version,
47
- timestamp: new Date(),
48
- data
49
- })))
50
- .orDie
51
- .map(() => ({ version, data: record }))
52
- });
53
- }
54
- function getIndex(record) {
55
- const index = makeIndexKey(record);
56
- return getIdx(index);
57
- }
58
- function setIndex(record) {
59
- const index = makeIndexKey(record);
60
- return setIdx(index, record);
61
- }
62
- function lockIndex(record) {
63
- const index = makeIndexKey(record);
64
- return lockRedisIdx(index);
65
- }
66
- function getIdx(index) {
67
- return RedisClient.flatMap((_) => _.hget(getIdxKey(index), index.key).map((_) => _.map((i) => i)));
68
- }
69
- function setIdx(index, r) {
70
- return RedisClient.flatMap((_) => _.hset(getIdxKey(index), index.key, r.id));
71
- }
72
- function lockRedisIdx(index) {
73
- const lockKey = getIdxLockKey(index);
74
- // acquire
75
- return tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(RedisClient
76
- .flatMap(({ lock }) => tsplus_module_2.tryPromise(() => lock.lock(lockKey, ttl))), {
77
- onFailure: (err) => new CouldNotAquireDbLockException(type, lockKey, err),
78
- // release
79
- onSuccess: (lock) => ({
80
- release: tsplus_module_2.tryPromise(() => lock.unlock())
81
- .orDie
82
- })
83
- }), (l) => l.release);
84
- }
85
- function lockRedisRecord(id) {
86
- // acquire
87
- return tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(RedisClient
88
- .flatMap(({ lock }) => tsplus_module_2.tryPromise(() => lock.lock(getLockKey(id), ttl))), {
89
- onFailure: (err) => new CouldNotAquireDbLockException(type, id, err),
90
- // release
91
- onSuccess: (lock) => ({
92
- // TODO
93
- release: tsplus_module_2.tryPromise(() => lock.unlock())
94
- .orDie
95
- })
96
- }), (l) => l.release);
97
- }
98
- function getKey(id) {
99
- return `v${schemaVersion}.${getRecordName(type, id)}`;
100
- }
101
- function getLockKey(id) {
102
- return `v${schemaVersion}.locks.${getRecordName(type, id)}`;
103
- }
104
- function getIdxKey(index) {
105
- return `v${schemaVersion}.${getIndexName(type, index.doc)}`;
106
- }
107
- function getIdxLockKey(index) {
108
- return `v${schemaVersion}.locks.${getIndexName(type, index.doc)}_${index.key}`;
109
- }
110
- };
111
- function hmSetRec(key, val) {
112
- const enc = tsplus_module_5.encodeSync(RedisSerializedDBRecord)(val);
113
- return RedisClient.flatMap(({ client }) => tsplus_module_2.uninterruptible(tsplus_module_2.async((res) => {
114
- client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, (err) => err
115
- ? res(new ConnectionException(err))
116
- : res(tsplus_module_2.sync(() => void 0)));
117
- })));
118
- }
119
- }
120
- export class RedisSerializedDBRecord extends S.Class()({
121
- version: S.string,
122
- timestamp: S.Date,
123
- data: S.string
124
- }) {
125
- }
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNkYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9yZWRpc2RiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDckUsT0FBTyxLQUFLLENBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUd0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM3RyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUV6QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFBO0FBRXJCLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FDTCxJQUFZLEVBQ1osTUFBaUQsRUFDakQsTUFBOEMsRUFDOUMsYUFBcUIsRUFDckIsWUFBNkIsRUFDN0IsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDMUQsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ3ZDLFdBQVcsRUFBRSxNQUFNO1lBQ25CLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQztTQUN6RCxDQUFBO1FBRUQsU0FBUyxJQUFJLENBQUMsRUFBVTtZQUN0QixPQUFPLDhCQUFBLFdBQVc7aUJBQ2YsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVB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
@@ -1,87 +0,0 @@
1
- import { Data } from "effect";
2
- import { Schema } from "effect-app/schema";
3
- import { Effect } from "effect/Effect";
4
- import { Option } from "@effect-app/core/Option";
5
- import * as S from "effect-app/schema";
6
- declare const CouldNotAquireDbLockException_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
7
- readonly _tag: "CouldNotAquireDbLockException";
8
- } & Readonly<A>;
9
- export declare class CouldNotAquireDbLockException extends CouldNotAquireDbLockException_base<{
10
- type: string;
11
- id: string;
12
- error: Error;
13
- message: string;
14
- }> {
15
- constructor(type: string, id: string, error: Error);
16
- }
17
- declare const OptimisticLockException_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
18
- readonly _tag: "OptimisticLockException";
19
- } & Readonly<A>;
20
- export declare class OptimisticLockException extends OptimisticLockException_base<{
21
- type: string;
22
- id: string;
23
- message: string;
24
- }> {
25
- constructor(type: string, id: string);
26
- }
27
- declare const ConnectionException_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
28
- readonly _tag: "ConnectionException";
29
- } & Readonly<A>;
30
- export declare class ConnectionException extends ConnectionException_base<{
31
- cause: Error;
32
- message: string;
33
- }> {
34
- readonly _errorTag = "ConnectionException";
35
- constructor(cause: Error);
36
- }
37
- export interface DBRecord<TKey extends string> {
38
- id: TKey;
39
- }
40
- declare const SerializedDBRecord_base: S.EnhancedClass<{
41
- readonly data: string;
42
- readonly version: string;
43
- readonly timestamp: Date;
44
- }, {
45
- readonly data: string;
46
- readonly version: string;
47
- readonly timestamp: string;
48
- }, never, {
49
- readonly data: string;
50
- readonly version: string;
51
- readonly timestamp: Date;
52
- }, SerializedDBRecord, {
53
- version: S.Schema<string, string, never>;
54
- timestamp: S.Schema<Date, string, never> & {
55
- withDefault: S.Schema<Date, string, never> & S.ConstructorPropertyDescriptor<Date, string, never>;
56
- };
57
- data: S.Schema<string, string, never>;
58
- }, {}, {}>;
59
- export declare class SerializedDBRecord extends SerializedDBRecord_base {
60
- }
61
- export declare function makeSerialisedDBRecord(s: Schema<any>): S.Schema<{
62
- readonly data: any;
63
- readonly version: number;
64
- readonly timestamp: Date;
65
- }, {
66
- readonly data: any;
67
- readonly version: number;
68
- readonly timestamp: string;
69
- }, never>;
70
- export interface CachedRecord<T> {
71
- version: string;
72
- data: T;
73
- }
74
- export interface Index {
75
- doc: string;
76
- key: string;
77
- }
78
- export declare function getIndexName(type: string, id: string): string;
79
- export declare function getRecordName(type: string, id: string): string;
80
- export declare function makeMap<TKey, T>(): EffectMap<TKey, T>;
81
- export interface EffectMap<TKey, T> {
82
- [Symbol.iterator](): IterableIterator<[TKey, T]>;
83
- find: (k: TKey) => Effect<Option<T>>;
84
- set: (k: TKey, v: T) => Effect<void>;
85
- }
86
- export {};
87
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/services/simpledb/shared.ts"],"names":[],"mappings":";;;;AAAA,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;;;;AAEtC,qBAAa,6BACX,SAAQ,mCAAkD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;gBAE1G,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAGnD;;;;AAED,qBAAa,uBACX,SAAQ,6BAA4C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;gBAEtF,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;CAGrC;;;;AAED,qBAAa,mBAAoB,SAAQ,yBAAwC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;IACjH,QAAQ,CAAC,SAAS,yBAAwB;gBAC9B,KAAK,EAAE,KAAK;CAGzB;AAED,MAAM,WAAW,QAAQ,CAAC,IAAI,SAAS,MAAM;IAC3C,EAAE,EAAE,IAAI,CAAA;CACT;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,kBAAmB,SAAQ,uBAItC;CAAG;AAIL,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;;;;;;;;UAMpD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,CAAC,CAAA;CACR;AAED,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAEpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAErD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC,wBAU9B;AAED,MAAM,WAAW,SAAS,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAChD,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAA;CACrC"}
@@ -1,52 +0,0 @@
1
- import * as tsplus_module_1 from "effect";
2
- import * as tsplus_module_2 from "effect/Option";
3
- import * as tsplus_module_3 from "effect/Effect";
4
- import * as S from "effect-app/schema";
5
- export class CouldNotAquireDbLockException extends tsplus_module_1.Data.TaggedError("CouldNotAquireDbLockException") {
6
- constructor(type, id, error) {
7
- super({ type, id, error, message: `Couldn't lock db record ${type}: ${id}` });
8
- }
9
- }
10
- export class OptimisticLockException extends tsplus_module_1.Data.TaggedError("OptimisticLockException") {
11
- constructor(type, id) {
12
- super({ type, id, message: `Existing ${type} ${id} record changed` });
13
- }
14
- }
15
- export class ConnectionException extends tsplus_module_1.Data.TaggedError("ConnectionException") {
16
- _errorTag = "ConnectionException";
17
- constructor(cause) {
18
- super({ cause, message: "A connection error ocurred" });
19
- }
20
- }
21
- export class SerializedDBRecord extends S.Class()({
22
- version: S.string,
23
- timestamp: S.Date,
24
- data: S.string
25
- }) {
26
- }
27
- // unknown -> string -> SDB?
28
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
- export function makeSerialisedDBRecord(s) {
30
- return S.struct({
31
- version: S.number,
32
- timestamp: S.Date,
33
- data: s
34
- });
35
- }
36
- export function getIndexName(type, id) {
37
- return `${type}-idx_${id}`;
38
- }
39
- export function getRecordName(type, id) {
40
- return `${type}-r_${id}`;
41
- }
42
- export function makeMap() {
43
- const map = new Map();
44
- return {
45
- find: (k) => tsplus_module_3.sync(() => tsplus_module_2.fromNullable(map.get(k))),
46
- [Symbol.iterator]: () => map[Symbol.iterator](),
47
- set: (k, v) => tsplus_module_3.sync(() => {
48
- map.set(k, v);
49
- })
50
- };
51
- }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3NpbXBsZWRiL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFBO0FBRXRDLE1BQU0sT0FBTyw2QkFDWCxTQUFRLGdCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQThEO0lBRXRILFlBQVksSUFBWSxFQUFFLEVBQVUsRUFBRSxLQUFZO1FBQ2hELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsSUFBSSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMvRSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sdUJBQ1gsU0FBUSxnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFnRDtJQUVsRyxZQUFZLElBQVksRUFBRSxFQUFVO1FBQ2xDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksSUFBSSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFvQztJQUN4RyxTQUFTLEdBQUcscUJBQXFCLENBQUE7SUFDMUMsWUFBWSxLQUFZO1FBQ3RCLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELENBQUM7Q0FDRjtBQU1ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxDQUFDLENBQUMsS0FBSyxFQUFzQixDQUFDO0lBQ3BFLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtJQUNqQixTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUk7SUFDakIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQ2YsQ0FBQztDQUFHO0FBRUwsNEJBQTRCO0FBQzVCLDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsQ0FBYztJQUNuRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDZCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDakIsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxDQUFDO0tBQ1IsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQVlELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBWSxFQUFFLEVBQVU7SUFDbkQsT0FBTyxHQUFHLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQTtBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZLEVBQUUsRUFBVTtJQUNwRCxPQUFPLEdBQUcsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFBO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTztJQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBVyxDQUFBO0lBQzlCLE9BQU87UUFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFPLEVBQUUsRUFBRSxDQUFDLHFCQUFZLEdBQUcsRUFBRSxDQUFDLDZCQUFvQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMvQyxHQUFHLEVBQUUsQ0FBQyxDQUFPLEVBQUUsQ0FBSSxFQUFFLEVBQUUsQ0FDckIscUJBQVksR0FBRyxFQUFFO1lBQ2YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDZixDQUFDLENBQUM7S0FDaUIsQ0FBQTtBQUN6QixDQUFDIn0=
@@ -1,23 +0,0 @@
1
- import { Effect } from "effect/Effect";
2
- import { Option } from "@effect-app/core/Option";
3
- import { Scope } from "effect/Scope";
4
- import type { CachedRecord, DBRecord, EffectMap } from "./shared.js";
5
- import { OptimisticLockException } from "./shared.js";
6
- export type Version = string;
7
- export declare class InvalidStateError {
8
- readonly message: string;
9
- readonly details?: unknown;
10
- readonly _tag = "InvalidStateError";
11
- constructor(message: string, details?: unknown);
12
- }
13
- export declare function makeLiveRecordCache(): {
14
- get: <T>(type: string) => import("effect/Effect").Effect<EffectMap<string, CachedRecord<T>>, never, never>;
15
- };
16
- export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {
17
- }
18
- export declare const RecordCache: import("effect/Context").Tag<RecordCache, RecordCache>;
19
- export declare const LiveRecordCache: import("effect/Layer").Layer<RecordCache, never, never>;
20
- export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, decode: (d: EA) => Effect<A, EDecode, RDecode>, type: string): (id: string) => import("effect/Effect").Effect<import("effect/Option").Option<A>, InvalidStateError | E, RecordCache | R | RDecode>;
21
- export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>, type: string): (record: A) => import("effect/Effect").Effect<A, E, RecordCache | R>;
22
- export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<Option<CachedRecord<EA>>, E, R>, save: (r: A, version: Option<Version>) => Effect<CachedRecord<A>, E, R>, lock: (id: string) => Effect<unknown, E2, R2 | Scope>, type: string): (record: A) => import("effect/Effect").Effect<A, OptimisticLockException | InvalidStateError | E | E2, RecordCache | R | Exclude<R2, import("effect/Scope").Scope>>;
23
- //# sourceMappingURL=simpledb.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simpledb.d.ts","sourceRoot":"","sources":["../../../src/services/simpledb/simpledb.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAW,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAE9D,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B,qBAAa,iBAAiB;IAEhB,QAAQ,CAAC,OAAO,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,CAAC;IADvD,QAAQ,CAAC,IAAI,uBAAsB;gBACd,OAAO,EAAE,MAAM,EAAW,OAAO,CAAC,SAAS;CACjE;AAED,wBAAgB,mBAAmB;mBAGhB,MAAM;EAWxB;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU,CAAC,OAAO,mBAAmB,CAAC;CAAG;AAG9E,eAAO,MAAM,WAAW,wDAAmD,CAAA;AAE3E,eAAO,MAAM,eAAe,yDAAgE,CAAA;AAQ5F,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAChD,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/D,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAC9C,IAAI,EAAE,MAAM,QAcA,MAAM,yHAOnB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,SAAS,MAAM,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,EAC/E,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvE,IAAI,EAAE,MAAM,YAGI,CAAC,2DASlB;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,EACnF,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/D,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACvE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,EACrD,IAAI,EAAE,MAAM,YAGI,CAAC,0JA6BlB"}
@@ -1,69 +0,0 @@
1
- import * as tsplus_module_1 from "effect/Effect";
2
- import * as tsplus_module_2 from "effect/Context";
3
- import * as tsplus_module_3 from "effect/Layer";
4
- import * as tsplus_module_4 from "@effect-app/core/Effect";
5
- import * as tsplus_module_5 from "effect/Option";
6
- import { makeMap, OptimisticLockException } from "./shared.js";
7
- export class InvalidStateError {
8
- message;
9
- details;
10
- _tag = "InvalidStateError";
11
- constructor(message, details) {
12
- this.message = message;
13
- this.details = details;
14
- }
15
- }
16
- export function makeLiveRecordCache() {
17
- const m = new Map();
18
- return {
19
- get: (type) => tsplus_module_1.sync(() => {
20
- const ex = m.get(type);
21
- if (!ex) {
22
- const nm = makeMap();
23
- m.set(type, nm);
24
- return nm;
25
- }
26
- return ex;
27
- })
28
- };
29
- }
30
- // module tag
31
- export const RecordCache = tsplus_module_2.GenericTag("@services/RecordCache");
32
- export const LiveRecordCache = tsplus_module_3.effect(RecordCache)(tsplus_module_1.sync(() => makeLiveRecordCache()));
33
- const getM = (type) => (eff) => tsplus_module_1.gen(function* ($) {
34
- const { get } = yield* $(RecordCache);
35
- return yield* $(get(type).flatMap(eff));
36
- });
37
- export function find(tryRead, decode, type) {
38
- const getCache = getM(type);
39
- const read = (id) => tsplus_module_4.mapOption(tsplus_module_4.tapOption(tsplus_module_4.flatMapOption(tryRead(id), ({ data, version }) => tsplus_module_1.mapBoth(decode(data), {
40
- onFailure: (err) => new InvalidStateError("DB serialisation Issue", err),
41
- onSuccess: (data) => ({ data, version })
42
- })), (r) => getCache((c) => c.set(id, r))), (r) => r.data);
43
- return (id) => getCache((c) => tsplus_module_1.orElse(tsplus_module_4.mapOption(c
44
- .find(id), (existing) => existing.data), () => read(id)));
45
- }
46
- export function storeDirectly(save, type) {
47
- const getCache = getM(type);
48
- return (record) => getCache((c) => tsplus_module_4.mapOption(c
49
- .find(record.id), (x) => x.version)
50
- .flatMap((cv) => save(record, cv))
51
- .tap((r) => c.set(record.id, r))
52
- .map((r) => r.data));
53
- }
54
- export function store(tryRead, save, lock, type) {
55
- const getCache = getM(type);
56
- return (record) => getCache((c) => tsplus_module_4.mapOption(c
57
- .find(record.id), (x) => x.version)
58
- .flatMap((_) => tsplus_module_5.match(_, { onNone: () => save(record, tsplus_module_5.none()), onSome: confirmVersionAndSave(record) }))
59
- .tap((r) => c.set(record.id, r))
60
- .map((r) => r.data));
61
- function confirmVersionAndSave(record) {
62
- return (cv) => tsplus_module_1.scoped(tsplus_module_1.zipRight(lock(record.id), tsplus_module_1.zipRight(tryRead(record.id)
63
- .flatMap((_) => tsplus_module_5.match(_, { onNone: () => tsplus_module_1.fail(new InvalidStateError("record is gone")), onSome: tsplus_module_1.succeed }))
64
- .tap(({ version }) => version !== cv
65
- ? new OptimisticLockException(type, record.id)
66
- : tsplus_module_1.unit), save(record, tsplus_module_5.some(cv)))));
67
- }
68
- }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvc2ltcGxlZGIvc2ltcGxlZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRzlELE1BQU0sT0FBTyxpQkFBaUI7SUFFUDtJQUEwQjtJQUR0QyxJQUFJLEdBQUcsbUJBQW1CLENBQUE7SUFDbkMsWUFBcUIsT0FBZSxFQUFXLE9BQWlCO1FBQTNDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBVyxZQUFPLEdBQVAsT0FBTyxDQUFVO0lBQUcsQ0FBQztDQUNyRTtBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUE7SUFDdkQsT0FBTztRQUNMLEdBQUcsRUFBRSxDQUFJLElBQVksRUFBRSxFQUFFLENBQ3ZCLHFCQUFZLEdBQUcsRUFBRTtZQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBbUIsQ0FBQTtnQkFDckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7Z0JBQ2YsT0FBTyxFQUF3QyxDQUFBO1lBQ2pELENBQUM7WUFDRCxPQUFPLEVBQXdDLENBQUE7UUFDakQsQ0FBQyxDQUFDO0tBQ0wsQ0FBQTtBQUNILENBQUM7QUFJRCxhQUFhO0FBQ2IsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGdCQUFBLFVBQVUsQ0FBYyx1QkFBdUIsQ0FBQyxDQUFBO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx1QkFBaUQsV0FBVyxFQUE1RCxxQkFBWSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFD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
@@ -1,36 +0,0 @@
1
- /**
2
- * @tsplus global
3
- */
4
- import type {} from "@effect-app/infra/services/Emailer/fake"
5
- /**
6
- * @tsplus global
7
- */
8
- import type {} from "@effect-app/infra/services/Emailer/Sendgrid"
9
- /**
10
- * @tsplus global
11
- */
12
- import type {} from "@effect-app/infra/services/Operations/live"
13
- /**
14
- * @tsplus global
15
- */
16
- import type {} from "@effect-app/infra/services/QueueMaker/errors"
17
-
18
- import "@effect-app/infra/test.arbs"
19
- /**
20
- * @tsplus global
21
- */
22
- import type {} from "@effect-app/infra/_ext/Array"
23
- /**
24
- * @tsplus global
25
- */
26
- import type {} from "@effect-app/infra/rateLimit"
27
-
28
- /**
29
- * @tsplus global
30
- */
31
- import type {} from "@effect-app/infra/api/setupRequest"
32
-
33
- /**
34
- * @tsplus global
35
- */
36
- import {} from "@effect-app/infra/api/reportError"
@@ -1,10 +0,0 @@
1
- /* eslint-disable import/no-duplicates */
2
- /* eslint-disable unused-imports/no-unused-imports */
3
- // Required for tsplus with project references in vscode..
4
-
5
- /**
6
- * @tsplus global
7
- */
8
- import { Delete, Get, Patch, Post, Put, Req } from "effect-app/schema"
9
-
10
- import "effect-app/_global.schema"
package/src/_global.ts DELETED
@@ -1,14 +0,0 @@
1
- /* eslint-disable import/no-duplicates */
2
- /* eslint-disable unused-imports/no-unused-imports */
3
-
4
- /**
5
- * @tsplus global
6
- */
7
- import "effect-app/_global"
8
-
9
- /**
10
- * @tsplus global
11
- */
12
- import "@effect-app/infra-adapters/_global"
13
-
14
- import "./_global.ext.js"
@@ -1,59 +0,0 @@
1
- import type { SupportedErrors, ValidationError } from "effect-app/client/errors"
2
- import type express from "express"
3
- import { logError } from "../errorReporter.js"
4
-
5
- const logRequestError = logError("Request")
6
-
7
- export function defaultBasicErrorHandler<R>(
8
- _req: express.Request,
9
- res: express.Response,
10
- r2: Effect<void, ValidationError, R>
11
- ) {
12
- const sendError = (code: number) => (body: unknown) => Effect.sync(() => res.status(code).send(body))
13
- return r2
14
- .tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
15
- .catchTag("ValidationError", (err) => sendError(400)(err.errors))
16
- // final catch all; expecting never so that unhandled known errors will show up
17
- .catchAll((err: never) =>
18
- Effect
19
- .logError(
20
- "Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
21
- )
22
- .map(() => err as unknown)
23
- .flatMap(Effect.die)
24
- )
25
- }
26
-
27
- const optimisticConcurrencySchedule = Schedule.once
28
- && Schedule.recurWhile<SupportedErrors>((a) => a._tag === "OptimisticConcurrencyException")
29
-
30
- export function defaultErrorHandler<R>(
31
- req: express.Request,
32
- res: express.Response,
33
- r2: Effect<void, SupportedErrors, R>
34
- ) {
35
- const r3 = req.method === "PATCH"
36
- ? r2.retry(optimisticConcurrencySchedule)
37
- : r2
38
- const sendError = (code: number) => (body: unknown) => Effect.sync(() => res.status(code).send(body))
39
- return r3
40
- .tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
41
- .catchTags({
42
- "ValidationError": (err) => sendError(400)(err.errors),
43
- "NotFoundError": sendError(404),
44
- "NotLoggedInError": sendError(401),
45
- "UnauthorizedError": sendError(403),
46
- "InvalidStateError": sendError(422),
47
- // 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
48
- "OptimisticConcurrencyException": sendError(412)
49
- })
50
- // final catch all; expecting never so that unhandled known errors will show up
51
- .catchAll((err: never) =>
52
- Effect
53
- .logError(
54
- "Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err
55
- )
56
- .map(() => err as unknown)
57
- .flatMap(Effect.die)
58
- )
59
- }