@effect-app/infra 0.198.2 → 0.199.2

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 +32 -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 +212 -197
  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 -1
  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 +11 -13
  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 +101 -71
  179. package/dist/services/RepositoryBase.d.ts.map +1 -1
  180. package/dist/services/RepositoryBase.js +229 -226
  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 -3
  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 +18 -14
  248. package/src/services/Repository/ext.ts +58 -50
  249. package/src/services/RepositoryBase.ts +478 -351
  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 -2
  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
@@ -3,6 +3,7 @@ import * as fu from "@effect-app/infra-adapters/fileUtil"
3
3
 
4
4
  import fs from "fs"
5
5
 
6
+ import { Effect, FiberRef, flow } from "effect-app"
6
7
  import { makeMemoryStoreInt, storeId } from "./Memory.js"
7
8
  import type { PersistenceModelType, StorageConfig, Store, StoreConfig } from "./service.js"
8
9
  import { StoreMaker } from "./service.js"
@@ -26,25 +27,34 @@ function makeDiskStoreInt<Id extends string, PM extends PersistenceModelType<Id>
26
27
  const fsStore = {
27
28
  get: fu
28
29
  .readTextFile(file)
29
- .withSpan("Disk.read.readFile [effect-app/infra/Store]")
30
- .flatMap((x) => Effect.sync(() => JSON.parse(x) as PM[]).withSpan("Disk.read.parse [effect-app/infra/Store]"))
31
- .orDie
32
- .withSpan("Disk.read [effect-app/infra/Store]", { attributes: { "disk.file": file } }),
30
+ .pipe(
31
+ Effect.withSpan("Disk.read.readFile [effect-app/infra/Store]"),
32
+ Effect.flatMap((x) =>
33
+ Effect.sync(() => JSON.parse(x) as PM[]).pipe(Effect.withSpan("Disk.read.parse [effect-app/infra/Store]"))
34
+ ),
35
+ Effect.orDie,
36
+ Effect.withSpan("Disk.read [effect-app/infra/Store]", { attributes: { "disk.file": file } })
37
+ ),
33
38
  setRaw: (v: Iterable<PM>) =>
34
39
  Effect
35
40
  .sync(() => JSON.stringify([...v], undefined, 2))
36
- .withSpan("Disk.stringify [effect-app/infra/Store]", { attributes: { "disk.file": file } })
37
- .flatMap(
38
- (json) =>
39
- fu
40
- .writeTextFile(file, json)
41
- .withSpan("Disk.write.writeFile [effect-app/infra/Store]", {
42
- attributes: { "disk.file_size": json.length }
43
- })
41
+ .pipe(
42
+ Effect.withSpan("Disk.stringify [effect-app/infra/Store]", { attributes: { "disk.file": file } }),
43
+ Effect
44
+ .flatMap(
45
+ (json) =>
46
+ fu
47
+ .writeTextFile(file, json)
48
+ .pipe(Effect
49
+ .withSpan("Disk.write.writeFile [effect-app/infra/Store]", {
50
+ attributes: { "disk.file_size": json.length }
51
+ }))
52
+ ),
53
+ Effect
54
+ .withSpan("Disk.write [effect-app/infra/Store]", {
55
+ attributes: { "disk.file": file }
56
+ })
44
57
  )
45
- .withSpan("Disk.write [effect-app/infra/Store]", {
46
- attributes: { "disk.file": file }
47
- })
48
58
  }
49
59
 
50
60
  const store = yield* $(
@@ -58,33 +68,35 @@ function makeDiskStoreInt<Id extends string, PM extends PersistenceModelType<Id>
58
68
  )
59
69
  )
60
70
 
61
- yield* $(store.all.flatMap(fsStore.setRaw))
71
+ yield* $(store.all.pipe(Effect.flatMap(fsStore.setRaw)))
62
72
 
63
- const sem = Semaphore.unsafeMake(1)
73
+ const sem = Effect.unsafeMakeSemaphore(1)
64
74
  const withPermit = sem.withPermits(1)
65
- const flushToDisk = store.all.flatMap(fsStore.setRaw).pipe(withPermit)
75
+ const flushToDisk = Effect.flatMap(store.all, fsStore.setRaw).pipe(withPermit)
66
76
  const flushToDiskInBackground = flushToDisk
67
- .tapErrorCause((err) => Effect.sync(() => console.error(err)))
68
- .uninterruptible
69
- .forkDaemon
77
+ .pipe(
78
+ Effect.tapErrorCause((err) => Effect.sync(() => console.error(err))),
79
+ Effect.uninterruptible,
80
+ Effect.forkDaemon
81
+ )
70
82
 
71
83
  return {
72
84
  ...store,
73
85
  batchSet: flow(
74
86
  store.batchSet,
75
- (t) => t.tap(() => flushToDiskInBackground)
87
+ Effect.tap(flushToDiskInBackground)
76
88
  ),
77
89
  bulkSet: flow(
78
90
  store.bulkSet,
79
- (t) => t.tap(() => flushToDiskInBackground)
91
+ Effect.tap(flushToDiskInBackground)
80
92
  ),
81
93
  set: flow(
82
94
  store.set,
83
- (t) => t.tap(() => flushToDiskInBackground)
95
+ Effect.tap(flushToDiskInBackground)
84
96
  ),
85
97
  remove: flow(
86
98
  store.remove,
87
- (t) => t.tap(() => flushToDiskInBackground)
99
+ Effect.tap(flushToDiskInBackground)
88
100
  )
89
101
  } satisfies Store<PM, Id>
90
102
  })
@@ -106,39 +118,43 @@ export function makeDiskStore({ prefix }: StorageConfig, dir: string) {
106
118
  config?: StoreConfig<PM>
107
119
  ) =>
108
120
  Effect.gen(function*($) {
109
- const storesSem = Semaphore.unsafeMake(1)
121
+ const storesSem = Effect.unsafeMakeSemaphore(1)
110
122
  const primary = yield* $(makeDiskStoreInt(prefix, "primary", dir, name, seed, config?.defaultValues))
111
123
  const stores = new Map<string, Store<PM, Id>>([["primary", primary]])
112
124
  const ctx = yield* $(Effect.context<R>())
113
- const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap((namespace) => {
114
- const store = stores.get(namespace)
115
- if (store) {
116
- return Effect.succeed(store)
117
- }
118
- if (!config.allowNamespace!(namespace)) {
119
- throw new Error(`Namespace ${namespace} not allowed!`)
120
- }
121
- return storesSem.withPermits(1)(
122
- Effect.suspend(() => {
123
- const existing = stores.get(namespace)
124
- if (existing) return Effect.sync(() => existing)
125
- return makeDiskStoreInt<Id, PM, R, E>(prefix, namespace, dir, name, seed, config?.defaultValues)
126
- .orDie
127
- .provide(ctx)
128
- .tap((store) => Effect.sync(() => stores.set(namespace, store)))
129
- })
130
- )
131
- })
125
+ const getStore = !config?.allowNamespace
126
+ ? Effect.succeed(primary)
127
+ : FiberRef.get(storeId).pipe(Effect.flatMap((namespace) => {
128
+ const store = stores.get(namespace)
129
+ if (store) {
130
+ return Effect.succeed(store)
131
+ }
132
+ if (!config.allowNamespace!(namespace)) {
133
+ throw new Error(`Namespace ${namespace} not allowed!`)
134
+ }
135
+ return storesSem.withPermits(1)(
136
+ Effect.suspend(() => {
137
+ const existing = stores.get(namespace)
138
+ if (existing) return Effect.sync(() => existing)
139
+ return makeDiskStoreInt<Id, PM, R, E>(prefix, namespace, dir, name, seed, config?.defaultValues)
140
+ .pipe(
141
+ Effect.orDie,
142
+ Effect.provide(ctx),
143
+ Effect.tap((store) => Effect.sync(() => stores.set(namespace, store)))
144
+ )
145
+ })
146
+ )
147
+ }))
132
148
 
133
149
  const s: Store<PM, Id> = {
134
- all: getStore.flatMap((_) => _.all),
135
- find: (...args) => getStore.flatMap((_) => _.find(...args)),
136
- filter: (...args) => getStore.flatMap((_) => _.filter(...args)),
137
- filterJoinSelect: (...args) => getStore.flatMap((_) => _.filterJoinSelect(...args)),
138
- set: (...args) => getStore.flatMap((_) => _.set(...args)),
139
- batchSet: (...args) => getStore.flatMap((_) => _.batchSet(...args)),
140
- bulkSet: (...args) => getStore.flatMap((_) => _.bulkSet(...args)),
141
- remove: (...args) => getStore.flatMap((_) => _.remove(...args))
150
+ all: Effect.flatMap(getStore, (_) => _.all),
151
+ find: (...args) => Effect.flatMap(getStore, (_) => _.find(...args)),
152
+ filter: (...args) => Effect.flatMap(getStore, (_) => _.filter(...args)),
153
+ filterJoinSelect: (...args) => Effect.flatMap(getStore, (_) => _.filterJoinSelect(...args)),
154
+ set: (...args) => Effect.flatMap(getStore, (_) => _.set(...args)),
155
+ batchSet: (...args) => Effect.flatMap(getStore, (_) => _.batchSet(...args)),
156
+ bulkSet: (...args) => Effect.flatMap(getStore, (_) => _.bulkSet(...args)),
157
+ remove: (...args) => Effect.flatMap(getStore, (_) => _.remove(...args))
142
158
  }
143
159
  return s
144
160
  })
@@ -1,5 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
+ import { Effect, FiberRef, flow, Option, Order, pipe, ReadonlyArray, Ref } from "effect-app"
4
+ import type { NonEmptyArray, NonEmptyReadonlyArray } from "effect-app"
3
5
  import { get, pick } from "effect-app/utils"
4
6
  import type { RequestContext } from "../../RequestContext.js"
5
7
  import type { FilterArgs, FilterJoinSelect, PersistenceModelType, Store, StoreConfig } from "./service.js"
@@ -12,7 +14,7 @@ export function memFilter<T extends PersistenceModelType<string>, U extends keyo
12
14
  const select = (r: T[]): M[] => (f.select ? r.map((_) => pick(_, f.select!)) : r) as any
13
15
  const skip = f?.skip
14
16
  const limit = f?.limit
15
- const ords = Option.fromNullable(f.order).map((_) =>
17
+ const ords = Option.map(Option.fromNullable(f.order), (_) =>
16
18
  _.map((_) =>
17
19
  Order.make<T>((self, that) => {
18
20
  // TODO: inspect data types for the right comparison?
@@ -26,24 +28,26 @@ export function memFilter<T extends PersistenceModelType<string>, U extends keyo
26
28
  }
27
29
  return selfV < thatV ? 1 : -1
28
30
  })
29
- )
30
- )
31
- if (ords.value) {
32
- c = c.sortBy(...ords.value)
31
+ ))
32
+ if (Option.isSome(ords)) {
33
+ c = ReadonlyArray.sortBy(...ords.value)(c)
33
34
  }
34
35
  if (!skip && limit === 1) {
35
36
  return select(
36
- c.findFirstMap(f.filter ? codeFilter(f.filter) : (_) => Option.some(_)).map(ReadonlyArray.make).getOrElse(
37
- () => []
37
+ ReadonlyArray.findFirst(c, f.filter ? codeFilter(f.filter) : (_) => Option.some(_)).pipe(
38
+ Option.map(ReadonlyArray.make),
39
+ Option.getOrElse(
40
+ () => []
41
+ )
38
42
  )
39
43
  )
40
44
  }
41
- let r = f.filter ? c.filterMap(codeFilter(f.filter)) : c
45
+ let r = f.filter ? ReadonlyArray.filterMap(c, codeFilter(f.filter)) : c
42
46
  if (skip) {
43
- r = r.drop(skip)
47
+ r = ReadonlyArray.drop(r, skip)
44
48
  }
45
49
  if (limit !== undefined) {
46
- r = r.take(limit)
50
+ r = ReadonlyArray.take(r, limit)
47
51
  }
48
52
 
49
53
  return select(r)
@@ -55,7 +59,7 @@ export const storeId = FiberRef.unsafeMake("primary")
55
59
  /**
56
60
  * @tsplus getter RequestContext restoreStoreId
57
61
  */
58
- export const restoreFromRequestContext = (ctx: RequestContext) => storeId.set(ctx.namespace ?? "primary")
62
+ export const restoreFromRequestContext = (ctx: RequestContext) => FiberRef.set(storeId, ctx.namespace ?? "primary")
59
63
 
60
64
  function logQuery(f: FilterArgs<any, any>, defaultValues?: any) {
61
65
  return Effect
@@ -85,100 +89,131 @@ export function makeMemoryStoreInt<Id extends string, PM extends PersistenceMode
85
89
  const items_ = yield* $(seed ?? Effect.sync(() => []))
86
90
  const defaultValues = _defaultValues ?? {}
87
91
 
88
- const items = new Map(items_.toChunk.map((_) => [_.id, { ...defaultValues, ..._ }] as const))
92
+ const items = new Map([...items_].map((_) => [_.id, { ...defaultValues, ..._ }] as const))
89
93
  const store = Ref.unsafeMake<ReadonlyMap<Id, PM>>(items)
90
- const sem = Semaphore.unsafeMake(1)
94
+ const sem = Effect.unsafeMakeSemaphore(1)
91
95
  const withPermit = sem.withPermits(1)
92
- const values = store.get.map((s) => s.values())
96
+ const values = Effect.map(Ref.get(store), (s) => s.values())
93
97
 
94
- const all = values.map(ReadonlyArray.fromIterable)
98
+ const all = Effect.map(values, ReadonlyArray.fromIterable)
95
99
 
96
100
  const batchSet = (items: NonEmptyReadonlyArray<PM>) =>
97
- items
98
- .forEachEffect((i) => s.find(i.id).flatMap((current) => updateETag(i, current)))
99
- .tap((items) =>
100
- store
101
- .get
102
- .map((m) => {
103
- const mut = m as Map<Id, PM>
104
- items.forEach((e) => mut.set(e.id, e))
105
- return mut
106
- })
107
- .flatMap((_) => store.set(_))
101
+ Effect
102
+ .forEach(items, (i) => Effect.flatMap(s.find(i.id), (current) => updateETag(i, current)))
103
+ .pipe(
104
+ Effect
105
+ .tap((items) =>
106
+ Ref
107
+ .get(store)
108
+ .pipe(
109
+ Effect
110
+ .map((m) => {
111
+ const mut = m as Map<Id, PM>
112
+ items.forEach((e) => mut.set(e.id, e))
113
+ return mut
114
+ }),
115
+ Effect
116
+ .flatMap((_) => Ref.set(store, _))
117
+ )
118
+ ),
119
+ Effect
120
+ .map((_) => _ as NonEmptyArray<PM>),
121
+ withPermit
108
122
  )
109
- .map((_) => _ as NonEmptyArray<PM>)
110
- .pipe(withPermit)
111
123
  const s: Store<PM, Id> = {
112
- all: all.withSpan("Memory.all [effect-app/infra/Store]", {
124
+ all: all.pipe(Effect.withSpan("Memory.all [effect-app/infra/Store]", {
113
125
  attributes: {
114
126
  modelName,
115
127
  namespace
116
128
  }
117
- }),
129
+ })),
118
130
  find: (id) =>
119
- store
120
- .get
121
- .map((_) => Option.fromNullable(_.get(id)))
122
- .withSpan("Memory.find [effect-app/infra/Store]", {
123
- attributes: {
124
- modelName,
125
- namespace
126
- }
127
- }),
131
+ Ref
132
+ .get(store)
133
+ .pipe(
134
+ Effect.map((_) => Option.fromNullable(_.get(id))),
135
+ Effect
136
+ .withSpan("Memory.find [effect-app/infra/Store]", {
137
+ attributes: {
138
+ modelName,
139
+ namespace
140
+ }
141
+ })
142
+ ),
128
143
  filter: (f) =>
129
144
  all
130
- .tap(() => logQuery(f, defaultValues))
131
- .map(memFilter(f))
132
- .withSpan("Memory.filter [effect-app/infra/Store]", {
133
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
134
- }),
145
+ .pipe(
146
+ Effect.tap(() => logQuery(f, defaultValues)),
147
+ Effect.map(memFilter(f)),
148
+ Effect.withSpan("Memory.filter [effect-app/infra/Store]", {
149
+ attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
150
+ })
151
+ ),
135
152
  filterJoinSelect: <T extends object>(filter: FilterJoinSelect) =>
136
153
  all
137
- .map((c) => c.flatMap(codeFilterJoinSelect<PM, T>(filter)))
138
- .withSpan(
139
- "Memory.filterJoinSelect [effect-app/infra/Store]",
140
- {
141
- attributes: {
142
- modelName
143
- }
144
- }
154
+ .pipe(
155
+ Effect.map((c) => c.flatMap(codeFilterJoinSelect<PM, T>(filter))),
156
+ Effect
157
+ .withSpan(
158
+ "Memory.filterJoinSelect [effect-app/infra/Store]",
159
+ {
160
+ attributes: {
161
+ modelName
162
+ }
163
+ }
164
+ )
145
165
  ),
146
166
  set: (e) =>
147
167
  s
148
168
  .find(e.id)
149
- .flatMap((current) => updateETag(e, current))
150
- .tap((e) => store.get.map((_) => new Map([..._, [e.id, e]])).flatMap((_) => store.set(_)))
151
- .pipe(withPermit)
152
- .withSpan("Memory.set [effect-app/infra/Store]", {
153
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
154
- }),
169
+ .pipe(
170
+ Effect.flatMap((current) => updateETag(e, current)),
171
+ Effect
172
+ .tap((e) =>
173
+ Ref.get(store).pipe(
174
+ Effect.map((_) => new Map([..._, [e.id, e]])),
175
+ Effect.flatMap((_) => Ref.set(store, _))
176
+ )
177
+ ),
178
+ withPermit,
179
+ Effect
180
+ .withSpan("Memory.set [effect-app/infra/Store]", {
181
+ attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
182
+ })
183
+ ),
155
184
  batchSet: (items: readonly [PM, ...PM[]]) =>
156
185
  pipe(
157
186
  Effect
158
187
  .sync(() => items)
159
188
  // align with CosmosDB
160
- .filterOrDieMessage((_) => _.length <= 100, "BatchSet: a batch may not exceed 100 items")
161
- .andThen(batchSet)
162
- .withSpan("Memory.batchSet [effect-app/infra/Store]", {
163
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
164
- })
189
+ .pipe(
190
+ Effect.filterOrDieMessage((_) => _.length <= 100, "BatchSet: a batch may not exceed 100 items"),
191
+ Effect
192
+ .andThen(batchSet),
193
+ Effect
194
+ .withSpan("Memory.batchSet [effect-app/infra/Store]", {
195
+ attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
196
+ })
197
+ )
165
198
  ),
166
199
  bulkSet: flow(
167
200
  batchSet,
168
201
  (_) =>
169
- _.withSpan("Memory.bulkSet [effect-app/infra/Store]", {
202
+ _.pipe(Effect.withSpan("Memory.bulkSet [effect-app/infra/Store]", {
170
203
  attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
171
- })
204
+ }))
172
205
  ),
173
206
  remove: (e: PM) =>
174
- store
175
- .get
176
- .map((_) => new Map([..._].filter(([_]) => _ !== e.id)))
177
- .flatMap((_) => store.set(_))
178
- .pipe(withPermit)
179
- .withSpan("Memory.remove [effect-app/infra/Store]", {
180
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
181
- })
207
+ Ref
208
+ .get(store)
209
+ .pipe(
210
+ Effect.map((_) => new Map([..._].filter(([_]) => _ !== e.id))),
211
+ Effect.flatMap((_) => Ref.set(store, _)),
212
+ withPermit,
213
+ Effect.withSpan("Memory.remove [effect-app/infra/Store]", {
214
+ attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
215
+ })
216
+ )
182
217
  }
183
218
  return s
184
219
  })
@@ -191,36 +226,42 @@ export const makeMemoryStore = () => ({
191
226
  config?: StoreConfig<PM>
192
227
  ) =>
193
228
  Effect.gen(function*($) {
194
- const storesSem = Semaphore.unsafeMake(1)
229
+ const storesSem = Effect.unsafeMakeSemaphore(1)
195
230
  const primary = yield* $(makeMemoryStoreInt<Id, PM, R, E>(modelName, "primary", seed, config?.defaultValues))
196
231
  const ctx = yield* $(Effect.context<R>())
197
232
  const stores = new Map([["primary", primary]])
198
- const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap((namespace) => {
199
- const store = stores.get(namespace)
200
- if (store) {
201
- return Effect.succeed(store)
202
- }
203
- if (!config.allowNamespace!(namespace)) {
204
- throw new Error(`Namespace ${namespace} not allowed!`)
205
- }
206
- return storesSem.withPermits(1)(Effect.suspend(() => {
233
+ const getStore = !config?.allowNamespace
234
+ ? Effect.succeed(primary)
235
+ : FiberRef.get(storeId).pipe(Effect.flatMap((namespace) => {
207
236
  const store = stores.get(namespace)
208
- if (store) return Effect.sync(() => store)
209
- return makeMemoryStoreInt(modelName, namespace, seed, config?.defaultValues)
210
- .orDie
211
- .provide(ctx)
212
- .tap((store) => Effect.sync(() => stores.set(namespace, store)))
237
+ if (store) {
238
+ return Effect.succeed(store)
239
+ }
240
+ if (!config.allowNamespace!(namespace)) {
241
+ throw new Error(`Namespace ${namespace} not allowed!`)
242
+ }
243
+ return storesSem.withPermits(1)(Effect.suspend(() => {
244
+ const store = stores.get(namespace)
245
+ if (store) return Effect.sync(() => store)
246
+ return makeMemoryStoreInt(modelName, namespace, seed, config?.defaultValues)
247
+ .pipe(
248
+ Effect.orDie,
249
+ Effect
250
+ .provide(ctx),
251
+ Effect
252
+ .tap((store) => Effect.sync(() => stores.set(namespace, store)))
253
+ )
254
+ }))
213
255
  }))
214
- })
215
256
  const s: Store<PM, Id> = {
216
- all: getStore.flatMap((_) => _.all),
217
- find: (...args) => getStore.flatMap((_) => _.find(...args)),
218
- filter: (...args) => getStore.flatMap((_) => _.filter(...args)),
219
- filterJoinSelect: (...args) => getStore.flatMap((_) => _.filterJoinSelect(...args)),
220
- set: (...args) => getStore.flatMap((_) => _.set(...args)),
221
- batchSet: (...args) => getStore.flatMap((_) => _.batchSet(...args)),
222
- bulkSet: (...args) => getStore.flatMap((_) => _.bulkSet(...args)),
223
- remove: (...args) => getStore.flatMap((_) => _.remove(...args))
257
+ all: Effect.flatMap(getStore, (_) => _.all),
258
+ find: (...args) => Effect.flatMap(getStore, (_) => _.find(...args)),
259
+ filter: (...args) => Effect.flatMap(getStore, (_) => _.filter(...args)),
260
+ filterJoinSelect: (...args) => Effect.flatMap(getStore, (_) => _.filterJoinSelect(...args)),
261
+ set: (...args) => Effect.flatMap(getStore, (_) => _.set(...args)),
262
+ batchSet: (...args) => Effect.flatMap(getStore, (_) => _.batchSet(...args)),
263
+ bulkSet: (...args) => Effect.flatMap(getStore, (_) => _.bulkSet(...args)),
264
+ remove: (...args) => Effect.flatMap(getStore, (_) => _.remove(...args))
224
265
  }
225
266
  return s
226
267
  })
@@ -1,5 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { RedisClient, RedisClientLayer } from "@effect-app/infra-adapters/redis-client"
3
+ import { Effect, Layer, Option, ReadonlyArray, Secret } from "effect-app"
4
+ import type { NonEmptyArray, NonEmptyReadonlyArray } from "effect-app"
3
5
  import { NotFoundError } from "../../errors.js"
4
6
  import { memFilter } from "./Memory.js"
5
7
  import type { FilterJoinSelect, PersistenceModelType, StorageConfig, Store, StoreConfig } from "./service.js"
@@ -30,21 +32,21 @@ function makeRedisStore({ prefix }: StorageConfig) {
30
32
  }
31
33
  const get = redis
32
34
  .get(key)
33
- .flatMap((x) => x.encaseInEffect(() => new NotFoundError<"data">({ type: "data", id: "" })))
35
+ .flatMap((x) => x.mapError(() => new NotFoundError<"data">({ type: "data", id: "" })))
34
36
  .orDie
35
37
  .map((x) => JSON.parse(x) as { data: readonly PM[] })
36
38
  .map((_) => _.data)
37
39
 
38
40
  const set = (i: ReadonlyMap<Id, PM>) => redis.set(key, JSON.stringify({ data: [...i.values()] })).orDie
39
41
 
40
- const sem = Semaphore.unsafeMake(1)
42
+ const sem = Effect.unsafeMakeSemaphore(1)
41
43
  const withPermit = sem.withPermits(1)
42
44
 
43
45
  const asMap = get.map((x) => new Map(x.map((x) => [x.id, x] as const)))
44
46
  const all = get.map(ReadonlyArray.fromIterable)
45
47
  const batchSet = (items: NonEmptyReadonlyArray<PM>) =>
46
- items
47
- .forEachEffect((e) => s.find(e.id).flatMap((current) => updateETag(e, current)))
48
+ Effect
49
+ .forEach(items, (e) => s.find(e.id).flatMap((current) => updateETag(e, current)))
48
50
  .tap((items) =>
49
51
  asMap
50
52
  .map((m) => {
@@ -84,5 +86,5 @@ function makeRedisStore({ prefix }: StorageConfig) {
84
86
  export function RedisStoreLayer(cfg: StorageConfig) {
85
87
  return StoreMaker
86
88
  .toLayer(makeRedisStore(cfg))
87
- .provide(RedisClientLayer(cfg.url.value))
89
+ .pipe(Layer.provide(RedisClientLayer(Secret.value(cfg.url))))
88
90
  }