@effect-app/infra 2.7.1 → 2.8.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 (480) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/_cjs/{services/CUPS.cjs → CUPS.cjs} +1 -1
  3. package/_cjs/CUPS.cjs.map +1 -0
  4. package/_cjs/{services/Emailer → Emailer}/Sendgrid.cjs +1 -1
  5. package/_cjs/Emailer/Sendgrid.cjs.map +1 -0
  6. package/_cjs/{services/Emailer → Emailer}/fake.cjs +1 -1
  7. package/_cjs/Emailer/fake.cjs.map +1 -0
  8. package/_cjs/Emailer/service.cjs.map +1 -0
  9. package/_cjs/Emailer.cjs.map +1 -0
  10. package/_cjs/{services/MainFiberSet.cjs → MainFiberSet.cjs} +1 -1
  11. package/_cjs/MainFiberSet.cjs.map +1 -0
  12. package/_cjs/{services → Model}/Repository/ext.cjs +1 -1
  13. package/_cjs/Model/Repository/ext.cjs.map +1 -0
  14. package/_cjs/{services → Model}/Repository/legacy.cjs +2 -3
  15. package/_cjs/Model/Repository/legacy.cjs.map +1 -0
  16. package/_cjs/{services/RepositoryBase.cjs → Model/Repository/makeRepo.cjs} +10 -12
  17. package/_cjs/Model/Repository/makeRepo.cjs.map +1 -0
  18. package/_cjs/Model/Repository/service.cjs.map +1 -0
  19. package/_cjs/{services → Model}/Repository.cjs +12 -10
  20. package/_cjs/Model/Repository.cjs.map +1 -0
  21. package/_cjs/Model/dsl.cjs.map +1 -0
  22. package/_cjs/Model/filter/filterApi.cjs +6 -0
  23. package/_cjs/Model/filter/filterApi.cjs.map +1 -0
  24. package/_cjs/Model/filter/types/errors.cjs.map +1 -0
  25. package/_cjs/Model/filter/types/fields.cjs.map +1 -0
  26. package/_cjs/Model/filter/types/path/common.cjs.map +1 -0
  27. package/_cjs/Model/filter/types/path/eager.cjs.map +1 -0
  28. package/_cjs/Model/filter/types/path/index.cjs.map +1 -0
  29. package/_cjs/Model/filter/types/utils.cjs.map +1 -0
  30. package/_cjs/Model/filter/types/validator.cjs.map +1 -0
  31. package/_cjs/Model/filter/types.cjs.map +1 -0
  32. package/_cjs/Model/query/dsl.cjs.map +1 -0
  33. package/_cjs/Model/query/new-kid-interpreter.cjs.map +1 -0
  34. package/_cjs/Model/query.cjs.map +1 -0
  35. package/_cjs/Model.cjs +23 -2
  36. package/_cjs/Model.cjs.map +1 -1
  37. package/_cjs/{services/Operations.cjs → Operations.cjs} +3 -3
  38. package/_cjs/Operations.cjs.map +1 -0
  39. package/_cjs/{services/OperationsRepo.cjs → OperationsRepo.cjs} +2 -2
  40. package/_cjs/OperationsRepo.cjs.map +1 -0
  41. package/_cjs/{services/QueueMaker → QueueMaker}/SQLQueue.cjs +3 -3
  42. package/_cjs/QueueMaker/SQLQueue.cjs.map +1 -0
  43. package/_cjs/QueueMaker/errors.cjs.map +1 -0
  44. package/_cjs/{services/QueueMaker → QueueMaker}/memQueue.cjs +2 -2
  45. package/_cjs/QueueMaker/memQueue.cjs.map +1 -0
  46. package/_cjs/{services/QueueMaker → QueueMaker}/sbqueue.cjs +2 -2
  47. package/_cjs/QueueMaker/sbqueue.cjs.map +1 -0
  48. package/_cjs/{services/QueueMaker → QueueMaker}/service.cjs +1 -1
  49. package/_cjs/QueueMaker/service.cjs.map +1 -0
  50. package/_cjs/{services/RequestFiberSet.cjs → RequestFiberSet.cjs} +2 -2
  51. package/_cjs/RequestFiberSet.cjs.map +1 -0
  52. package/_cjs/Store/ContextMapContainer.cjs.map +1 -0
  53. package/_cjs/{services/Store → Store}/Cosmos/query.cjs +1 -1
  54. package/_cjs/Store/Cosmos/query.cjs.map +1 -0
  55. package/_cjs/{services/Store → Store}/Cosmos.cjs +2 -2
  56. package/_cjs/Store/Cosmos.cjs.map +1 -0
  57. package/_cjs/{services/Store → Store}/Disk.cjs +1 -1
  58. package/_cjs/Store/Disk.cjs.map +1 -0
  59. package/_cjs/{services/Store → Store}/Memory.cjs +1 -1
  60. package/_cjs/Store/Memory.cjs.map +1 -0
  61. package/_cjs/Store/codeFilter.cjs.map +1 -0
  62. package/_cjs/Store/index.cjs.map +1 -0
  63. package/_cjs/Store/service.cjs.map +1 -0
  64. package/_cjs/{services/Store → Store}/utils.cjs +1 -1
  65. package/_cjs/Store/utils.cjs.map +1 -0
  66. package/_cjs/Store.cjs.map +1 -0
  67. package/_cjs/adapters/SQL/Model.cjs.map +1 -0
  68. package/_cjs/adapters/SQL.cjs.map +1 -0
  69. package/_cjs/adapters/ServiceBus.cjs.map +1 -0
  70. package/_cjs/adapters/cosmos-client.cjs.map +1 -0
  71. package/_cjs/adapters/index.cjs.map +1 -0
  72. package/_cjs/adapters/logger.cjs.map +1 -0
  73. package/_cjs/adapters/memQueue.cjs.map +1 -0
  74. package/_cjs/adapters/mongo-client.cjs.map +1 -0
  75. package/_cjs/adapters/redis-client.cjs.map +1 -0
  76. package/_cjs/api/setupRequest.cjs +2 -2
  77. package/_cjs/arbs.cjs.map +1 -0
  78. package/_cjs/logger/shared.cjs +1 -1
  79. package/_cjs/logger/shared.cjs.map +1 -1
  80. package/_cjs/test.cjs +1 -1
  81. package/dist/CUPS.d.ts.map +1 -0
  82. package/dist/CUPS.js +116 -0
  83. package/dist/Emailer/Sendgrid.d.ts.map +1 -0
  84. package/dist/Emailer/Sendgrid.js +99 -0
  85. package/dist/Emailer/fake.d.ts.map +1 -0
  86. package/dist/Emailer/fake.js +18 -0
  87. package/dist/{services/Emailer → Emailer}/service.d.ts +1 -1
  88. package/dist/Emailer/service.d.ts.map +1 -0
  89. package/dist/{services/Emailer → Emailer}/service.js +1 -1
  90. package/dist/Emailer.d.ts.map +1 -0
  91. package/dist/{services/Emailer.js → Emailer.js} +1 -1
  92. package/dist/MainFiberSet.d.ts.map +1 -0
  93. package/dist/MainFiberSet.js +54 -0
  94. package/dist/{services → Model}/Repository/ext.d.ts +12 -12
  95. package/dist/Model/Repository/ext.d.ts.map +1 -0
  96. package/dist/Model/Repository/ext.js +61 -0
  97. package/dist/{services → Model}/Repository/legacy.d.ts +54 -54
  98. package/dist/Model/Repository/legacy.d.ts.map +1 -0
  99. package/dist/Model/Repository/legacy.js +123 -0
  100. package/dist/{services/RepositoryBase.d.ts → Model/Repository/makeRepo.d.ts} +22 -22
  101. package/dist/Model/Repository/makeRepo.d.ts.map +1 -0
  102. package/dist/Model/Repository/makeRepo.js +254 -0
  103. package/dist/{services → Model}/Repository/service.d.ts +8 -8
  104. package/dist/Model/Repository/service.d.ts.map +1 -0
  105. package/dist/{services → Model}/Repository/service.js +1 -1
  106. package/dist/{services → Model}/Repository.d.ts +1 -1
  107. package/dist/Model/Repository.d.ts.map +1 -0
  108. package/dist/Model/Repository.js +5 -0
  109. package/dist/Model/dsl.d.ts.map +1 -0
  110. package/dist/Model/dsl.js +46 -0
  111. package/dist/{services/Store/filterApi/query.d.ts → Model/filter/filterApi.d.ts} +1 -1
  112. package/dist/Model/filter/filterApi.d.ts.map +1 -0
  113. package/dist/Model/filter/filterApi.js +2 -0
  114. package/dist/Model/filter/types/errors.d.ts.map +1 -0
  115. package/dist/{filter → Model/filter}/types/errors.js +1 -1
  116. package/dist/Model/filter/types/fields.d.ts.map +1 -0
  117. package/dist/{filter → Model/filter}/types/fields.js +1 -1
  118. package/dist/Model/filter/types/path/common.d.ts.map +1 -0
  119. package/dist/{filter → Model/filter}/types/path/common.js +1 -1
  120. package/dist/Model/filter/types/path/eager.d.ts.map +1 -0
  121. package/dist/{filter → Model/filter}/types/path/eager.js +1 -1
  122. package/dist/Model/filter/types/path/index.d.ts.map +1 -0
  123. package/dist/{filter → Model/filter}/types/path/index.js +1 -1
  124. package/dist/Model/filter/types/utils.d.ts.map +1 -0
  125. package/dist/{filter → Model/filter}/types/utils.js +1 -1
  126. package/dist/Model/filter/types/validator.d.ts.map +1 -0
  127. package/dist/{filter → Model/filter}/types/validator.js +1 -1
  128. package/dist/Model/filter/types.d.ts.map +1 -0
  129. package/dist/{filter → Model/filter}/types.js +1 -1
  130. package/dist/{services → Model}/query/dsl.d.ts +6 -6
  131. package/dist/Model/query/dsl.d.ts.map +1 -0
  132. package/dist/Model/query/dsl.js +95 -0
  133. package/dist/{services → Model}/query/new-kid-interpreter.d.ts +4 -4
  134. package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -0
  135. package/dist/Model/query/new-kid-interpreter.js +133 -0
  136. package/dist/Model/query.d.ts.map +1 -0
  137. package/dist/{services → Model}/query.js +1 -1
  138. package/dist/Model.d.ts +3 -1
  139. package/dist/Model.d.ts.map +1 -1
  140. package/dist/Model.js +4 -2
  141. package/dist/{services/Operations.d.ts → Operations.d.ts} +3 -3
  142. package/dist/Operations.d.ts.map +1 -0
  143. package/dist/Operations.js +102 -0
  144. package/dist/{services/OperationsRepo.d.ts → OperationsRepo.d.ts} +1 -1
  145. package/dist/OperationsRepo.d.ts.map +1 -0
  146. package/dist/OperationsRepo.js +14 -0
  147. package/dist/QueueMaker/SQLQueue.d.ts.map +1 -0
  148. package/dist/QueueMaker/SQLQueue.js +136 -0
  149. package/dist/QueueMaker/errors.d.ts.map +1 -0
  150. package/dist/QueueMaker/errors.js +20 -0
  151. package/dist/QueueMaker/memQueue.d.ts.map +1 -0
  152. package/dist/QueueMaker/memQueue.js +78 -0
  153. package/dist/QueueMaker/sbqueue.d.ts.map +1 -0
  154. package/dist/QueueMaker/sbqueue.js +102 -0
  155. package/dist/{services/QueueMaker → QueueMaker}/service.d.ts +1 -1
  156. package/dist/QueueMaker/service.d.ts.map +1 -0
  157. package/dist/QueueMaker/service.js +4 -0
  158. package/dist/RequestFiberSet.d.ts.map +1 -0
  159. package/dist/RequestFiberSet.js +79 -0
  160. package/dist/Store/ContextMapContainer.d.ts.map +1 -0
  161. package/dist/{services/Store → Store}/ContextMapContainer.js +1 -1
  162. package/dist/{services/Store → Store}/Cosmos/query.d.ts +1 -1
  163. package/dist/Store/Cosmos/query.d.ts.map +1 -0
  164. package/dist/Store/Cosmos/query.js +164 -0
  165. package/dist/Store/Cosmos.d.ts.map +1 -0
  166. package/dist/Store/Cosmos.js +258 -0
  167. package/dist/Store/Disk.d.ts.map +1 -0
  168. package/dist/Store/Disk.js +109 -0
  169. package/dist/Store/Memory.d.ts.map +1 -0
  170. package/dist/Store/Memory.js +170 -0
  171. package/dist/{services/Store → Store}/codeFilter.d.ts +1 -1
  172. package/dist/Store/codeFilter.d.ts.map +1 -0
  173. package/dist/Store/codeFilter.js +117 -0
  174. package/dist/Store/index.d.ts.map +1 -0
  175. package/dist/Store/index.js +28 -0
  176. package/dist/{services/Store → Store}/service.d.ts +5 -5
  177. package/dist/Store/service.d.ts.map +1 -0
  178. package/dist/{services/Store → Store}/service.js +1 -1
  179. package/dist/{services/Store → Store}/utils.d.ts +1 -1
  180. package/dist/Store/utils.d.ts.map +1 -0
  181. package/dist/Store/utils.js +44 -0
  182. package/dist/Store.d.ts.map +1 -0
  183. package/dist/{services/Store.js → Store.js} +1 -1
  184. package/dist/{services/adapters → adapters}/SQL/Model.d.ts +23 -23
  185. package/dist/adapters/SQL/Model.d.ts.map +1 -0
  186. package/dist/adapters/SQL/Model.js +508 -0
  187. package/dist/adapters/SQL.d.ts.map +1 -0
  188. package/dist/{services/adapters → adapters}/SQL.js +1 -1
  189. package/dist/adapters/ServiceBus.d.ts.map +1 -0
  190. package/dist/adapters/ServiceBus.js +73 -0
  191. package/dist/adapters/cosmos-client.d.ts.map +1 -0
  192. package/dist/adapters/cosmos-client.js +8 -0
  193. package/dist/{services/adapters → adapters}/index.d.ts.map +1 -1
  194. package/dist/{services/adapters → adapters}/index.js +1 -1
  195. package/dist/adapters/logger.d.ts.map +1 -0
  196. package/dist/{services/adapters → adapters}/logger.js +1 -1
  197. package/dist/adapters/memQueue.d.ts.map +1 -0
  198. package/dist/adapters/memQueue.js +24 -0
  199. package/dist/adapters/mongo-client.d.ts.map +1 -0
  200. package/dist/adapters/mongo-client.js +12 -0
  201. package/dist/adapters/redis-client.d.ts.map +1 -0
  202. package/dist/adapters/redis-client.js +93 -0
  203. package/dist/api/setupRequest.js +3 -3
  204. package/dist/arbs.d.ts.map +1 -0
  205. package/dist/arbs.js +21 -0
  206. package/dist/logger/shared.js +2 -2
  207. package/dist/test.d.ts +1 -1
  208. package/dist/test.d.ts.map +1 -1
  209. package/dist/test.js +3 -3
  210. package/examples/query.ts +3 -3
  211. package/package.json +352 -362
  212. package/src/{services/CUPS.ts → CUPS.ts} +1 -1
  213. package/src/{services/Emailer → Emailer}/Sendgrid.ts +1 -1
  214. package/src/{services/Emailer → Emailer}/fake.ts +1 -1
  215. package/src/{services/MainFiberSet.ts → MainFiberSet.ts} +1 -1
  216. package/src/{services → Model}/Repository/ext.ts +23 -11
  217. package/src/{services → Model}/Repository/legacy.ts +76 -49
  218. package/src/{services/RepositoryBase.ts → Model/Repository/makeRepo.ts} +40 -38
  219. package/src/{services → Model}/Repository/service.ts +9 -8
  220. package/src/{services → Model}/Repository.ts +1 -1
  221. package/src/{services → Model}/query/dsl.ts +24 -6
  222. package/src/{services → Model}/query/new-kid-interpreter.ts +3 -3
  223. package/src/Model.ts +3 -1
  224. package/src/{services/Operations.ts → Operations.ts} +3 -3
  225. package/src/{services/OperationsRepo.ts → OperationsRepo.ts} +1 -1
  226. package/src/{services/QueueMaker → QueueMaker}/SQLQueue.ts +4 -4
  227. package/src/{services/QueueMaker → QueueMaker}/memQueue.ts +2 -2
  228. package/src/{services/QueueMaker → QueueMaker}/sbqueue.ts +2 -2
  229. package/src/{services/QueueMaker → QueueMaker}/service.ts +1 -1
  230. package/src/{services/RequestFiberSet.ts → RequestFiberSet.ts} +2 -2
  231. package/src/{services/Store → Store}/Cosmos/query.ts +2 -2
  232. package/src/{services/Store → Store}/Cosmos.ts +2 -2
  233. package/src/{services/Store → Store}/Disk.ts +1 -1
  234. package/src/{services/Store → Store}/Memory.ts +1 -1
  235. package/src/{services/Store → Store}/codeFilter.ts +1 -1
  236. package/src/{services/Store → Store}/service.ts +4 -4
  237. package/src/{services/Store → Store}/utils.ts +1 -1
  238. package/src/api/setupRequest.ts +2 -2
  239. package/src/logger/shared.ts +1 -1
  240. package/src/test.ts +2 -2
  241. package/test/dist/query.test.d.ts.map +1 -1
  242. package/test/query.test.ts +32 -5
  243. package/_cjs/_ext/Array.cjs +0 -22
  244. package/_cjs/_ext/Array.cjs.map +0 -1
  245. package/_cjs/filter/types/errors.cjs.map +0 -1
  246. package/_cjs/filter/types/fields.cjs.map +0 -1
  247. package/_cjs/filter/types/path/common.cjs.map +0 -1
  248. package/_cjs/filter/types/path/eager.cjs.map +0 -1
  249. package/_cjs/filter/types/path/index.cjs.map +0 -1
  250. package/_cjs/filter/types/utils.cjs.map +0 -1
  251. package/_cjs/filter/types/validator.cjs.map +0 -1
  252. package/_cjs/filter/types.cjs.map +0 -1
  253. package/_cjs/services/CUPS.cjs.map +0 -1
  254. package/_cjs/services/Emailer/Sendgrid.cjs.map +0 -1
  255. package/_cjs/services/Emailer/fake.cjs.map +0 -1
  256. package/_cjs/services/Emailer/service.cjs.map +0 -1
  257. package/_cjs/services/Emailer.cjs.map +0 -1
  258. package/_cjs/services/MainFiberSet.cjs.map +0 -1
  259. package/_cjs/services/Operations.cjs.map +0 -1
  260. package/_cjs/services/OperationsRepo.cjs.map +0 -1
  261. package/_cjs/services/QueueMaker/SQLQueue.cjs.map +0 -1
  262. package/_cjs/services/QueueMaker/errors.cjs.map +0 -1
  263. package/_cjs/services/QueueMaker/memQueue.cjs.map +0 -1
  264. package/_cjs/services/QueueMaker/sbqueue.cjs.map +0 -1
  265. package/_cjs/services/QueueMaker/service.cjs.map +0 -1
  266. package/_cjs/services/Repository/dsl.cjs.map +0 -1
  267. package/_cjs/services/Repository/ext.cjs.map +0 -1
  268. package/_cjs/services/Repository/legacy.cjs.map +0 -1
  269. package/_cjs/services/Repository/service.cjs.map +0 -1
  270. package/_cjs/services/Repository.cjs.map +0 -1
  271. package/_cjs/services/RepositoryBase.cjs.map +0 -1
  272. package/_cjs/services/RequestFiberSet.cjs.map +0 -1
  273. package/_cjs/services/Store/ContextMapContainer.cjs.map +0 -1
  274. package/_cjs/services/Store/Cosmos/query.cjs.map +0 -1
  275. package/_cjs/services/Store/Cosmos.cjs.map +0 -1
  276. package/_cjs/services/Store/Disk.cjs.map +0 -1
  277. package/_cjs/services/Store/Memory.cjs.map +0 -1
  278. package/_cjs/services/Store/codeFilter.cjs.map +0 -1
  279. package/_cjs/services/Store/filterApi/query.cjs +0 -6
  280. package/_cjs/services/Store/filterApi/query.cjs.map +0 -1
  281. package/_cjs/services/Store/index.cjs.map +0 -1
  282. package/_cjs/services/Store/service.cjs.map +0 -1
  283. package/_cjs/services/Store/utils.cjs.map +0 -1
  284. package/_cjs/services/Store.cjs.map +0 -1
  285. package/_cjs/services/adapters/SQL/Model.cjs.map +0 -1
  286. package/_cjs/services/adapters/SQL.cjs.map +0 -1
  287. package/_cjs/services/adapters/ServiceBus.cjs.map +0 -1
  288. package/_cjs/services/adapters/cosmos-client.cjs.map +0 -1
  289. package/_cjs/services/adapters/index.cjs.map +0 -1
  290. package/_cjs/services/adapters/logger.cjs.map +0 -1
  291. package/_cjs/services/adapters/memQueue.cjs.map +0 -1
  292. package/_cjs/services/adapters/mongo-client.cjs.map +0 -1
  293. package/_cjs/services/adapters/redis-client.cjs.map +0 -1
  294. package/_cjs/services/query/dsl.cjs.map +0 -1
  295. package/_cjs/services/query/new-kid-interpreter.cjs.map +0 -1
  296. package/_cjs/services/query.cjs.map +0 -1
  297. package/_cjs/test/arbs.cjs.map +0 -1
  298. package/dist/_ext/Array.d.ts +0 -13
  299. package/dist/_ext/Array.d.ts.map +0 -1
  300. package/dist/_ext/Array.js +0 -15
  301. package/dist/filter/types/errors.d.ts.map +0 -1
  302. package/dist/filter/types/fields.d.ts.map +0 -1
  303. package/dist/filter/types/path/common.d.ts.map +0 -1
  304. package/dist/filter/types/path/eager.d.ts.map +0 -1
  305. package/dist/filter/types/path/index.d.ts.map +0 -1
  306. package/dist/filter/types/utils.d.ts.map +0 -1
  307. package/dist/filter/types/validator.d.ts.map +0 -1
  308. package/dist/filter/types.d.ts.map +0 -1
  309. package/dist/services/CUPS.d.ts.map +0 -1
  310. package/dist/services/CUPS.js +0 -116
  311. package/dist/services/Emailer/Sendgrid.d.ts.map +0 -1
  312. package/dist/services/Emailer/Sendgrid.js +0 -99
  313. package/dist/services/Emailer/fake.d.ts.map +0 -1
  314. package/dist/services/Emailer/fake.js +0 -18
  315. package/dist/services/Emailer/service.d.ts.map +0 -1
  316. package/dist/services/Emailer.d.ts.map +0 -1
  317. package/dist/services/MainFiberSet.d.ts.map +0 -1
  318. package/dist/services/MainFiberSet.js +0 -54
  319. package/dist/services/Operations.d.ts.map +0 -1
  320. package/dist/services/Operations.js +0 -102
  321. package/dist/services/OperationsRepo.d.ts.map +0 -1
  322. package/dist/services/OperationsRepo.js +0 -14
  323. package/dist/services/QueueMaker/SQLQueue.d.ts.map +0 -1
  324. package/dist/services/QueueMaker/SQLQueue.js +0 -136
  325. package/dist/services/QueueMaker/errors.d.ts.map +0 -1
  326. package/dist/services/QueueMaker/errors.js +0 -20
  327. package/dist/services/QueueMaker/memQueue.d.ts.map +0 -1
  328. package/dist/services/QueueMaker/memQueue.js +0 -78
  329. package/dist/services/QueueMaker/sbqueue.d.ts.map +0 -1
  330. package/dist/services/QueueMaker/sbqueue.js +0 -102
  331. package/dist/services/QueueMaker/service.d.ts.map +0 -1
  332. package/dist/services/QueueMaker/service.js +0 -4
  333. package/dist/services/Repository/dsl.d.ts.map +0 -1
  334. package/dist/services/Repository/dsl.js +0 -46
  335. package/dist/services/Repository/ext.d.ts.map +0 -1
  336. package/dist/services/Repository/ext.js +0 -61
  337. package/dist/services/Repository/legacy.d.ts.map +0 -1
  338. package/dist/services/Repository/legacy.js +0 -124
  339. package/dist/services/Repository/service.d.ts.map +0 -1
  340. package/dist/services/Repository.d.ts.map +0 -1
  341. package/dist/services/Repository.js +0 -5
  342. package/dist/services/RepositoryBase.d.ts.map +0 -1
  343. package/dist/services/RepositoryBase.js +0 -256
  344. package/dist/services/RequestFiberSet.d.ts.map +0 -1
  345. package/dist/services/RequestFiberSet.js +0 -79
  346. package/dist/services/Store/ContextMapContainer.d.ts.map +0 -1
  347. package/dist/services/Store/Cosmos/query.d.ts.map +0 -1
  348. package/dist/services/Store/Cosmos/query.js +0 -164
  349. package/dist/services/Store/Cosmos.d.ts.map +0 -1
  350. package/dist/services/Store/Cosmos.js +0 -258
  351. package/dist/services/Store/Disk.d.ts.map +0 -1
  352. package/dist/services/Store/Disk.js +0 -109
  353. package/dist/services/Store/Memory.d.ts.map +0 -1
  354. package/dist/services/Store/Memory.js +0 -170
  355. package/dist/services/Store/codeFilter.d.ts.map +0 -1
  356. package/dist/services/Store/codeFilter.js +0 -117
  357. package/dist/services/Store/filterApi/query.d.ts.map +0 -1
  358. package/dist/services/Store/filterApi/query.js +0 -2
  359. package/dist/services/Store/index.d.ts.map +0 -1
  360. package/dist/services/Store/index.js +0 -28
  361. package/dist/services/Store/service.d.ts.map +0 -1
  362. package/dist/services/Store/utils.d.ts.map +0 -1
  363. package/dist/services/Store/utils.js +0 -44
  364. package/dist/services/Store.d.ts.map +0 -1
  365. package/dist/services/adapters/SQL/Model.d.ts.map +0 -1
  366. package/dist/services/adapters/SQL/Model.js +0 -508
  367. package/dist/services/adapters/SQL.d.ts.map +0 -1
  368. package/dist/services/adapters/ServiceBus.d.ts.map +0 -1
  369. package/dist/services/adapters/ServiceBus.js +0 -73
  370. package/dist/services/adapters/cosmos-client.d.ts.map +0 -1
  371. package/dist/services/adapters/cosmos-client.js +0 -8
  372. package/dist/services/adapters/logger.d.ts.map +0 -1
  373. package/dist/services/adapters/memQueue.d.ts.map +0 -1
  374. package/dist/services/adapters/memQueue.js +0 -24
  375. package/dist/services/adapters/mongo-client.d.ts.map +0 -1
  376. package/dist/services/adapters/mongo-client.js +0 -12
  377. package/dist/services/adapters/redis-client.d.ts.map +0 -1
  378. package/dist/services/adapters/redis-client.js +0 -93
  379. package/dist/services/query/dsl.d.ts.map +0 -1
  380. package/dist/services/query/dsl.js +0 -95
  381. package/dist/services/query/new-kid-interpreter.d.ts.map +0 -1
  382. package/dist/services/query/new-kid-interpreter.js +0 -133
  383. package/dist/services/query.d.ts.map +0 -1
  384. package/dist/test/arbs.d.ts.map +0 -1
  385. package/dist/test/arbs.js +0 -21
  386. package/src/_ext/Array.ts +0 -22
  387. /package/_cjs/{services/Emailer → Emailer}/service.cjs +0 -0
  388. /package/_cjs/{services/Emailer.cjs → Emailer.cjs} +0 -0
  389. /package/_cjs/{services → Model}/Repository/service.cjs +0 -0
  390. /package/_cjs/{services/Repository → Model}/dsl.cjs +0 -0
  391. /package/_cjs/{filter → Model/filter}/types/errors.cjs +0 -0
  392. /package/_cjs/{filter → Model/filter}/types/fields.cjs +0 -0
  393. /package/_cjs/{filter → Model/filter}/types/path/common.cjs +0 -0
  394. /package/_cjs/{filter → Model/filter}/types/path/eager.cjs +0 -0
  395. /package/_cjs/{filter → Model/filter}/types/path/index.cjs +0 -0
  396. /package/_cjs/{filter → Model/filter}/types/utils.cjs +0 -0
  397. /package/_cjs/{filter → Model/filter}/types/validator.cjs +0 -0
  398. /package/_cjs/{filter → Model/filter}/types.cjs +0 -0
  399. /package/_cjs/{services → Model}/query/dsl.cjs +0 -0
  400. /package/_cjs/{services → Model}/query/new-kid-interpreter.cjs +0 -0
  401. /package/_cjs/{services → Model}/query.cjs +0 -0
  402. /package/_cjs/{services/QueueMaker → QueueMaker}/errors.cjs +0 -0
  403. /package/_cjs/{services/Store → Store}/ContextMapContainer.cjs +0 -0
  404. /package/_cjs/{services/Store → Store}/codeFilter.cjs +0 -0
  405. /package/_cjs/{services/Store → Store}/index.cjs +0 -0
  406. /package/_cjs/{services/Store → Store}/service.cjs +0 -0
  407. /package/_cjs/{services/Store.cjs → Store.cjs} +0 -0
  408. /package/_cjs/{services/adapters → adapters}/SQL/Model.cjs +0 -0
  409. /package/_cjs/{services/adapters → adapters}/SQL.cjs +0 -0
  410. /package/_cjs/{services/adapters → adapters}/ServiceBus.cjs +0 -0
  411. /package/_cjs/{services/adapters → adapters}/cosmos-client.cjs +0 -0
  412. /package/_cjs/{services/adapters → adapters}/index.cjs +0 -0
  413. /package/_cjs/{services/adapters → adapters}/logger.cjs +0 -0
  414. /package/_cjs/{services/adapters → adapters}/memQueue.cjs +0 -0
  415. /package/_cjs/{services/adapters → adapters}/mongo-client.cjs +0 -0
  416. /package/_cjs/{services/adapters → adapters}/redis-client.cjs +0 -0
  417. /package/_cjs/{test/arbs.cjs → arbs.cjs} +0 -0
  418. /package/dist/{services/CUPS.d.ts → CUPS.d.ts} +0 -0
  419. /package/dist/{services/Emailer → Emailer}/Sendgrid.d.ts +0 -0
  420. /package/dist/{services/Emailer → Emailer}/fake.d.ts +0 -0
  421. /package/dist/{services/Emailer.d.ts → Emailer.d.ts} +0 -0
  422. /package/dist/{services/MainFiberSet.d.ts → MainFiberSet.d.ts} +0 -0
  423. /package/dist/{services/Repository → Model}/dsl.d.ts +0 -0
  424. /package/dist/{filter → Model/filter}/types/errors.d.ts +0 -0
  425. /package/dist/{filter → Model/filter}/types/fields.d.ts +0 -0
  426. /package/dist/{filter → Model/filter}/types/path/common.d.ts +0 -0
  427. /package/dist/{filter → Model/filter}/types/path/eager.d.ts +0 -0
  428. /package/dist/{filter → Model/filter}/types/path/index.d.ts +0 -0
  429. /package/dist/{filter → Model/filter}/types/utils.d.ts +0 -0
  430. /package/dist/{filter → Model/filter}/types/validator.d.ts +0 -0
  431. /package/dist/{filter → Model/filter}/types.d.ts +0 -0
  432. /package/dist/{services → Model}/query.d.ts +0 -0
  433. /package/dist/{services/QueueMaker → QueueMaker}/SQLQueue.d.ts +0 -0
  434. /package/dist/{services/QueueMaker → QueueMaker}/errors.d.ts +0 -0
  435. /package/dist/{services/QueueMaker → QueueMaker}/memQueue.d.ts +0 -0
  436. /package/dist/{services/QueueMaker → QueueMaker}/sbqueue.d.ts +0 -0
  437. /package/dist/{services/RequestFiberSet.d.ts → RequestFiberSet.d.ts} +0 -0
  438. /package/dist/{services/Store → Store}/ContextMapContainer.d.ts +0 -0
  439. /package/dist/{services/Store → Store}/Cosmos.d.ts +0 -0
  440. /package/dist/{services/Store → Store}/Disk.d.ts +0 -0
  441. /package/dist/{services/Store → Store}/Memory.d.ts +0 -0
  442. /package/dist/{services/Store → Store}/index.d.ts +0 -0
  443. /package/dist/{services/Store.d.ts → Store.d.ts} +0 -0
  444. /package/dist/{services/adapters → adapters}/SQL.d.ts +0 -0
  445. /package/dist/{services/adapters → adapters}/ServiceBus.d.ts +0 -0
  446. /package/dist/{services/adapters → adapters}/cosmos-client.d.ts +0 -0
  447. /package/dist/{services/adapters → adapters}/index.d.ts +0 -0
  448. /package/dist/{services/adapters → adapters}/logger.d.ts +0 -0
  449. /package/dist/{services/adapters → adapters}/memQueue.d.ts +0 -0
  450. /package/dist/{services/adapters → adapters}/mongo-client.d.ts +0 -0
  451. /package/dist/{services/adapters → adapters}/redis-client.d.ts +0 -0
  452. /package/dist/{test/arbs.d.ts → arbs.d.ts} +0 -0
  453. /package/src/{services/Emailer → Emailer}/service.ts +0 -0
  454. /package/src/{services/Emailer.ts → Emailer.ts} +0 -0
  455. /package/src/{services/Repository → Model}/dsl.ts +0 -0
  456. /package/src/{services/Store/filterApi/query.ts → Model/filter/filterApi.ts} +0 -0
  457. /package/src/{filter → Model/filter}/types/errors.ts +0 -0
  458. /package/src/{filter → Model/filter}/types/fields.ts +0 -0
  459. /package/src/{filter → Model/filter}/types/path/common.ts +0 -0
  460. /package/src/{filter → Model/filter}/types/path/eager.ts +0 -0
  461. /package/src/{filter → Model/filter}/types/path/index.ts +0 -0
  462. /package/src/{filter → Model/filter}/types/utils.ts +0 -0
  463. /package/src/{filter → Model/filter}/types/validator.ts +0 -0
  464. /package/src/{filter → Model/filter}/types.ts +0 -0
  465. /package/src/{services → Model}/query.ts +0 -0
  466. /package/src/{services/QueueMaker → QueueMaker}/errors.ts +0 -0
  467. /package/src/{services/Store → Store}/ContextMapContainer.ts +0 -0
  468. /package/src/{services/Store → Store}/index.test.ts.bak +0 -0
  469. /package/src/{services/Store → Store}/index.ts +0 -0
  470. /package/src/{services/Store.ts → Store.ts} +0 -0
  471. /package/src/{services/adapters → adapters}/SQL/Model.ts +0 -0
  472. /package/src/{services/adapters → adapters}/SQL.ts +0 -0
  473. /package/src/{services/adapters → adapters}/ServiceBus.ts +0 -0
  474. /package/src/{services/adapters → adapters}/cosmos-client.ts +0 -0
  475. /package/src/{services/adapters → adapters}/index.ts +0 -0
  476. /package/src/{services/adapters → adapters}/logger.ts +0 -0
  477. /package/src/{services/adapters → adapters}/memQueue.ts +0 -0
  478. /package/src/{services/adapters → adapters}/mongo-client.ts +0 -0
  479. /package/src/{services/adapters → adapters}/redis-client.ts +0 -0
  480. /package/src/{test/arbs.ts → arbs.ts} +0 -0
package/dist/CUPS.js ADDED
@@ -0,0 +1,116 @@
1
+ import { tempFile } from "@effect-app/infra/fileUtil";
2
+ import cp from "child_process";
3
+ import { Config, Effect, Layer, Predicate } from "effect-app";
4
+ import { NonEmptyString255 } from "effect-app/Schema";
5
+ import { pretty } from "effect-app/utils";
6
+ import fs from "fs";
7
+ import os from "os";
8
+ import path from "path";
9
+ import util from "util";
10
+ import { InfraLogger } from "./logger.js";
11
+ export const PrinterId = NonEmptyString255;
12
+ const exec_ = util.promisify(cp.exec);
13
+ const exec = (command) => Effect.andThen(InfraLogger.logDebug(`Executing: ${command}`), Effect.tap(Effect
14
+ .tryPromise(() => exec_(command)), (r) => (InfraLogger.logDebug(`Executed`).pipe(Effect.annotateLogs("result", pretty(r))))));
15
+ function printFile(printer, options) {
16
+ return (filePath) => printFile_(filePath, printer, options);
17
+ }
18
+ function printFile_(filePath, printer, options) {
19
+ return exec(["lp", ...buildPrintArgs(filePath, printer, options)].join(" "));
20
+ }
21
+ function* buildPrintArgs(filePath, printer, options) {
22
+ if (printer) {
23
+ if (printer.url) {
24
+ yield `-h ${printer.url.host}`;
25
+ if (printer.url.username) {
26
+ yield `-U ${printer.url.username}`;
27
+ }
28
+ }
29
+ yield `-d "${printer.id}"`;
30
+ for (const o of options) {
31
+ yield `-o ${o}`;
32
+ }
33
+ }
34
+ yield `"${filePath}"`;
35
+ }
36
+ export const prepareTempDir = Effect.sync(() => {
37
+ // TODO
38
+ try {
39
+ fs.mkdirSync(path.join(os.tmpdir(), "effect-ts-app"));
40
+ }
41
+ catch (err) {
42
+ if (`${err}`.includes("EEXIST")) {
43
+ return;
44
+ }
45
+ throw err;
46
+ }
47
+ });
48
+ const makeTempFile = tempFile("effect-ts-app");
49
+ export const makePrintJobTempFile = makeTempFile("print-job");
50
+ export const makePrintJobTempFileArrayBuffer = (buffer, options) => makePrintJobTempFile(Buffer.from(buffer), options);
51
+ function printBuffer(printer, options) {
52
+ return (buffer) => makePrintJobTempFileArrayBuffer(buffer)
53
+ .pipe(Effect.flatMap(printFile(printer, options)), Effect.scoped);
54
+ }
55
+ function getAvailablePrinters(host) {
56
+ return Effect.gen(function* () {
57
+ const { stdout } = yield* exec(["lpstat", ...buildListArgs({ host }), "-s"].join(" "));
58
+ return [...stdout.matchAll(/device for (\w+):/g)]
59
+ .map((_) => _[1])
60
+ .filter(Predicate.isNotNullable)
61
+ .map((_) => NonEmptyString255(_));
62
+ });
63
+ }
64
+ function* buildListArgs(config) {
65
+ if (config?.host) {
66
+ yield `-h ${config.host}`;
67
+ }
68
+ }
69
+ export const CUPSConfig = Config.all({
70
+ server: Config
71
+ .string("server")
72
+ .pipe(Config.map((s) => new URL(s)), Config.option, Config.nested("cups"))
73
+ });
74
+ export class CUPS extends Effect.Service()("effect-app/CUPS", {
75
+ effect: Effect.gen(function* () {
76
+ const config = yield* CUPSConfig;
77
+ function print(buffer, printerId, ...options) {
78
+ const _print = printBuffer({
79
+ id: printerId,
80
+ url: config.server.value
81
+ }, options);
82
+ return _print(buffer);
83
+ }
84
+ return {
85
+ print,
86
+ printFile: (filePath, printerId, ...options) => printFile({
87
+ id: printerId,
88
+ url: config.server.value
89
+ }, options)(filePath),
90
+ getAvailablePrinters: getAvailablePrinters(config.server.value?.host)
91
+ };
92
+ })
93
+ }) {
94
+ static Fake = Layer.effect(this, Effect.sync(() => {
95
+ return this.make({
96
+ print: (buffer, printerId, ...options) => InfraLogger
97
+ .logInfo("Printing to fake printer")
98
+ .pipe(Effect.zipRight(Effect.sync(() => ({ stdout: "fake", stderr: "" }))), Effect
99
+ .annotateLogs({
100
+ printerId,
101
+ "options": pretty(options),
102
+ "bufferSize": buffer.byteLength.toString()
103
+ })),
104
+ printFile: (filePath, printerId, ...options) => InfraLogger
105
+ .logInfo("Printing to fake printer")
106
+ .pipe(Effect.zipRight(Effect.sync(() => ({ stdout: "fake", stderr: "" }))), Effect
107
+ .annotateLogs({
108
+ printerId,
109
+ filePath,
110
+ "options": pretty(options)
111
+ })),
112
+ getAvailablePrinters: Effect.sync(() => [])
113
+ });
114
+ }));
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ1VQUy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DVVBTLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ25CLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUNuQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFekMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFBO0FBRzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3JDLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FDL0IsTUFBTSxDQUFDLE9BQU8sQ0FDWixXQUFXLENBQUMsUUFBUSxDQUFDLGNBQWMsT0FBTyxFQUFFLENBQUMsRUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FDUixNQUFNO0tBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNuQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pGLENBQ0YsQ0FBQTtBQUlILFNBQVMsU0FBUyxDQUFDLE9BQWtDLEVBQUUsT0FBaUI7SUFDdEUsT0FBTyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3JFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFnQixFQUFFLE9BQWtDLEVBQUUsT0FBaUI7SUFDekYsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFFRCxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBZ0IsRUFBRSxPQUFrQyxFQUFFLE9BQWlCO0lBQzlGLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUM5QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQTtRQUMxQixLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxRQUFRLEdBQUcsQ0FBQTtBQUN2QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzdDLE9BQU87SUFDUCxJQUFJLENBQUM7UUFDSCxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUE7SUFDdkQsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTTtRQUNSLENBQUM7UUFDRCxNQUFNLEdBQUcsQ0FBQTtJQUNYLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQTtBQUVGLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUM5QyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDN0QsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxNQUFtQixFQUFFLE9BQXFCLEVBQUUsRUFBRSxDQUM1RixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBRXBELFNBQVMsV0FBVyxDQUFDLE9BQXNCLEVBQUUsT0FBaUI7SUFDNUQsT0FBTyxDQUFDLE1BQW1CLEVBQUUsRUFBRSxDQUM3QiwrQkFBK0IsQ0FBQyxNQUFNLENBQUM7U0FDcEMsSUFBSSxDQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUMzQyxNQUFNLENBQUMsTUFBTSxDQUNkLENBQUE7QUFDUCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFhO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDekIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDdEYsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQzlDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO2FBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBc0M7SUFDNUQsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakIsTUFBTSxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMzQixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ25DLE1BQU0sRUFBRSxNQUFNO1NBQ1gsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUNoQixJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDN0IsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUN0QjtDQUNKLENBQUMsQ0FBQTtBQUVGLE1BQU0sT0FBTyxJQUFLLFNBQVEsTUFBTSxDQUFDLE9BQU8sRUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQ2xFLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUE7UUFDaEMsU0FBUyxLQUFLLENBQUMsTUFBbUIsRUFBRSxTQUFvQixFQUFFLEdBQUcsT0FBaUI7WUFDNUUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDO2dCQUN6QixFQUFFLEVBQUUsU0FBUztnQkFDYixHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ3pCLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDWCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN2QixDQUFDO1FBQ0QsT0FBTztZQUNMLEtBQUs7WUFDTCxTQUFTLEVBQUUsQ0FBQyxRQUFnQixFQUFFLFNBQW9CLEVBQUUsR0FBRyxPQUFpQixFQUFFLEVBQUUsQ0FDMUUsU0FBUyxDQUFDO2dCQUNSLEVBQUUsRUFBRSxTQUFTO2dCQUNiLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDekIsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdkIsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1NBQ3RFLENBQUE7SUFDSCxDQUFDLENBQUM7Q0FDSCxDQUFDO0lBQ0EsTUFBTSxDQUFVLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUNqQyxJQUFJLEVBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDZixLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsQ0FDdkMsV0FBVztpQkFDUixPQUFPLENBQUMsMEJBQTBCLENBQUM7aUJBQ25DLElBQUksQ0FDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNwRSxNQUFNO2lCQUNILFlBQVksQ0FBQztnQkFDWixTQUFTO2dCQUNULFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUMxQixZQUFZLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7YUFDM0MsQ0FBQyxDQUNMO1lBQ0wsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLENBQzdDLFdBQVc7aUJBQ1IsT0FBTyxDQUFDLDBCQUEwQixDQUFDO2lCQUNuQyxJQUFJLENBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDcEUsTUFBTTtpQkFDSCxZQUFZLENBQUM7Z0JBQ1osU0FBUztnQkFDVCxRQUFRO2dCQUNSLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQzNCLENBQUMsQ0FDTDtZQUNMLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzVDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUNILENBQUEifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sendgrid.d.ts","sourceRoot":"","sources":["../../src/Emailer/Sendgrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAA;AAM3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAwB,cAAc,EAAE,MAAM,cAAc,CAAA;AA8ClF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,uDAE9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,OAAO,SAWpC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,WAO1C"}
@@ -0,0 +1,99 @@
1
+ import sgMail from "@sendgrid/mail";
2
+ import { Array, Effect, Equivalence, Secret } from "effect-app";
3
+ import { dropUndefinedT } from "effect-app/utils";
4
+ import { inspect } from "util";
5
+ import { InfraLogger } from "../logger.js";
6
+ import { Emailer } from "./service.js";
7
+ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPrefix }) => Effect.sync(() => {
8
+ sgMail.setApiKey(Secret.value(apiKey));
9
+ return Emailer.of({
10
+ sendMail(msg_) {
11
+ return Effect.gen(function* () {
12
+ const msg = dropUndefinedT({
13
+ ...msg_,
14
+ from: msg_.from ?? defaultFrom,
15
+ replyTo: msg_.replyTo ?? (msg_.from ? undefined : defaultReplyTo)
16
+ });
17
+ const render = renderMessage(!realMail);
18
+ const renderedMsg_ = render(msg);
19
+ const renderedMsg = { ...renderedMsg_, subject: `${subjectPrefix}${renderedMsg_.subject}` };
20
+ yield* InfraLogger.logDebug("Sending email").pipe(Effect.annotateLogs("msg", inspect(renderedMsg, false, 5)));
21
+ const ret = yield* Effect.async((cb) => void sgMail.send(renderedMsg, false, (err, result) => err
22
+ ? cb(Effect.fail(err))
23
+ : cb(Effect.sync(() => result))));
24
+ // const event = {
25
+ // name: "EmailSent",
26
+ // properties: {
27
+ // templateId: msg.templateId
28
+ // }
29
+ // }
30
+ // yield* InfraLogger.logDebug("Tracking email event").annotateLogs("event", event.$$.pretty)
31
+ // const { trackEvent } = yield* AiContextService
32
+ // trackEvent(event)
33
+ return ret;
34
+ });
35
+ }
36
+ });
37
+ });
38
+ /**
39
+ * @tsplus static Emailer.Ops SendgridLayer
40
+ */
41
+ export function Sendgrid(config) {
42
+ return Emailer.toLayer(makeSendgrid(config));
43
+ }
44
+ /**
45
+ * @hidden
46
+ */
47
+ export function renderMessage(forceFake) {
48
+ let i = 0;
49
+ const makeId = () => i++;
50
+ return forceFake
51
+ ? (msg) => dropUndefinedT({
52
+ ...msg,
53
+ to: msg.to && renderFake(msg.to, makeId),
54
+ cc: msg.cc && renderFake(msg.cc, makeId),
55
+ bcc: msg.bcc && renderFake(msg.bcc, makeId)
56
+ })
57
+ : (msg) => dropUndefinedT({
58
+ ...msg,
59
+ to: msg.to && renderFakeIfTest(msg.to, makeId),
60
+ cc: msg.cc && renderFakeIfTest(msg.cc, makeId),
61
+ bcc: msg.bcc && renderFakeIfTest(msg.bcc, makeId)
62
+ });
63
+ }
64
+ /**
65
+ * @hidden
66
+ */
67
+ export function isTestAddress(to) {
68
+ return ((typeof to === "string" && to.toLowerCase().endsWith(".test"))
69
+ || (typeof to === "object"
70
+ && "email" in to
71
+ && to.email.toLowerCase().endsWith(".test")));
72
+ }
73
+ function renderFake(addr, makeId) {
74
+ return {
75
+ name: renderMailData(addr),
76
+ email: `test+${makeId()}@nomizz.com`
77
+ };
78
+ }
79
+ const eq = Equivalence.mapInput(Equivalence.string, (to) => typeof to === "string" ? to.toLowerCase() : to.email.toLowerCase());
80
+ // TODO: should just not add any already added email address
81
+ // https://stackoverflow.com/a/53603076/11595834
82
+ function renderFakeIfTest(addr, makeId) {
83
+ return Array.isArray(addr)
84
+ ? Array.dedupeWith(addr
85
+ .map((x) => (isTestAddress(x) ? renderFake(x, makeId) : x)), eq)
86
+ : isTestAddress(addr)
87
+ ? renderFake(addr, makeId)
88
+ : addr;
89
+ }
90
+ function renderMailData(md) {
91
+ if (Array.isArray(md)) {
92
+ return md.map(renderMailData).join(", ");
93
+ }
94
+ if (typeof md === "string") {
95
+ return md;
96
+ }
97
+ return md.email;
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VuZGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRW1haWxlci9TZW5kZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUd0QyxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBa0IsRUFBRSxFQUFFLENBQ3hHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ2YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFdEMsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2hCLFFBQVEsQ0FBQyxJQUEwQjtZQUNqQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUN6QixNQUFNLEdBQUcsR0FBYSxjQUFjLENBQUM7b0JBQ25DLEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXO29CQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2lCQUNsRSxDQUFDLENBQUE7Z0JBQ0YsTUFBTSxNQUFNLEdB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../../src/Emailer/fake.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AActC;;GAEG;AACH,eAAO,MAAM,YAAY,qDAA4B,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { Effect } from "effect-app";
2
+ import { pretty } from "effect-app/utils";
3
+ import { InfraLogger } from "../logger.js";
4
+ import { Emailer } from "./service.js";
5
+ const makeFake = InfraLogger
6
+ .logInfo("FAKE Emailer Service enabled")
7
+ .pipe(Effect.map(() => Emailer.of({
8
+ sendMail(msg) {
9
+ return InfraLogger
10
+ .logDebug(`Fake send mail`)
11
+ .pipe(Effect.annotateLogs("msg", pretty(msg)));
12
+ }
13
+ })));
14
+ /**
15
+ * @tsplus static Emailer.Ops Fake
16
+ */
17
+ export const FakeSendgrid = Emailer.toLayer(makeFake);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL2Zha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXRDLE1BQU0sUUFBUSxHQUFHLFdBQVc7S0FDekIsT0FBTyxDQUFDLDhCQUE4QixDQUFDO0tBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUNwQixPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ1QsUUFBUSxDQUFDLEdBQUc7UUFDVixPQUFPLFdBQVc7YUFDZixRQUFRLENBQUMsZ0JBQWdCLENBQUM7YUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQztDQUNGLENBQUMsQ0FDSCxDQUFDLENBQUE7QUFFSjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBIn0=
@@ -18,7 +18,7 @@ declare const Emailer_base: (abstract new (service: {
18
18
  } & {
19
19
  use: <X>(body: (_: {
20
20
  sendMail: (msg: EmailMsgOptionalFrom) => Effect<void, Error | ResponseError>;
21
- }) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, R_3 | Emailer> : Effect.Effect<X, never, Emailer>;
21
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, Emailer | R_3> : Effect.Effect<X, never, Emailer>;
22
22
  };
23
23
  /**
24
24
  * @tsplus type Emailer
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/Emailer/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,qBAAqB,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;;cAOrD,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;cAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;cAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;;;;;;;;kBAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;;AAL9E;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,YAEzB;CAAG;AAEP,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,KAAK,GAAG;QAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAA;IACnE,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,KAAK,GAAG;QAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAA;IAC/D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;CACtB;AACD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAA;AAC9C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,oBAAoB,GAC5B,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GACtB,CACA;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;CAAE,CAC/G,GACC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA"}
@@ -5,4 +5,4 @@ import { Context } from "effect-app";
5
5
  */
6
6
  export class Emailer extends Context.TagId("effect-app/Emailer")() {
7
7
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9FbWFpbGVyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBd0QsTUFBTSxZQUFZLENBQUE7QUFHMUY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLE9BQVEsU0FBUSxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBRTVEO0NBQUcifQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBd0QsTUFBTSxZQUFZLENBQUE7QUFHMUY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLE9BQVEsU0FBUSxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBRTVEO0NBQUcifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Emailer.d.ts","sourceRoot":"","sources":["../src/Emailer.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
@@ -1,2 +1,2 @@
1
1
  export * from "./Emailer/service.js";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1haWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9FbWFpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUEifQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1haWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9FbWFpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUEifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MainFiberSet.d.ts","sourceRoot":"","sources":["../src/MainFiberSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAY,KAAK,EAAE,MAAM,YAAY,CAAA;;;;uBAyCxC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;qBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;uBA8BzC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;qBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;uBA8BzC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;qBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;qBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;2BA8BzC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;yBAhChC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;yBAElC,SAAS,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;;;AAiDrE;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,iBAAuD;IACvF,MAAM,CAAC,QAAQ,CAAC,IAAI,0CAAuB;IAC3C,MAAM,CAAC,QAAQ,CAAC,QAAQ,mCAA0F;IAClH,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAI,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,0EAAiC;IACvF,MAAM,CAAC,QAAQ,CAAC,gBAAgB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,6EAA8C;CACjH"}
@@ -0,0 +1,54 @@
1
+ import { Context, Effect, Fiber, FiberSet, Layer } from "effect-app";
2
+ import { InfraLogger } from "./logger.js";
3
+ import { reportNonInterruptedFailureCause } from "./QueueMaker/errors.js";
4
+ import { setRootParentSpan } from "./RequestFiberSet.js";
5
+ const make = Effect.gen(function* () {
6
+ const set = yield* FiberSet.make();
7
+ const add = (...fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
8
+ const addAll = (fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
9
+ const join = FiberSet.size(set).pipe(Effect.andThen((count) => InfraLogger.logDebug(`Joining ${count} current fibers on the MainFiberSet`)), Effect.andThen(FiberSet.join(set)));
10
+ const run = FiberSet.run(set);
11
+ // const waitUntilEmpty = Effect.gen(function*() {
12
+ // const currentSize = yield* FiberSet.size(set)
13
+ // if (currentSize === 0) {
14
+ // return
15
+ // }
16
+ // yield* InfraLogger.logInfo("Waiting MainFiberSet to be empty: " + currentSize)
17
+ // while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
18
+ // yield* InfraLogger.logDebug("MainFiberSet is empty")
19
+ // })
20
+ // TODO: loop and interrupt all fibers in the set continuously?
21
+ const interrupt = Fiber.interruptAll(set);
22
+ /**
23
+ * Forks the effect into a new fiber attached to the MainFiberSet scope. Because the
24
+ * new fiber isn't attached to the parent, when the fiber executing the
25
+ * returned effect terminates, the forked fiber will continue running.
26
+ * The fiber will be interrupted when the MainFiberSet scope is closed.
27
+ *
28
+ * The parent span is set to the root span of the current fiber.
29
+ * Reports and then swallows errors.
30
+ */
31
+ function forkDaemonReport(self) {
32
+ return self.pipe(Effect.asVoid, Effect.catchAllCause(reportNonInterruptedFailureCause({})), setRootParentSpan, Effect.uninterruptible, run);
33
+ }
34
+ return {
35
+ interrupt,
36
+ join,
37
+ forkDaemonReport,
38
+ run,
39
+ add,
40
+ addAll
41
+ };
42
+ });
43
+ /**
44
+ * Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
45
+ * you should register these long running fibers in a FiberSet, and join them at the end of your main program.
46
+ * This way any errors will blow up the main program instead of fibers dying unknowingly.
47
+ */
48
+ export class MainFiberSet extends Context.TagMakeId("MainFiberSet", make)() {
49
+ static Live = this.toLayerScoped();
50
+ static JoinLive = this.pipe(Effect.andThen((_) => _.join), Layer.effectDiscard, Layer.provide(this.Live));
51
+ static run = (self) => this.use((_) => _.run(self));
52
+ static forkDaemonReport = (self) => this.use((_) => _.forkDaemonReport(self));
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFpbkZpYmVyU2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01haW5GaWJlclNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUdwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXhELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQWtCLENBQUE7SUFDbEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQTBDLEVBQUUsRUFBRSxDQUM1RCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0RSxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQW1ELEVBQUUsRUFBRSxDQUNyRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0RSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUsscUNBQXFDLENBQUMsQ0FBQyxFQUN0RyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbkMsQ0FBQTtJQUNELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFN0Isa0RBQWtEO0lBQ2xELGtEQUFrRDtJQUNsRCw2QkFBNkI7SUFDN0IsYUFBYTtJQUNiLE1BQU07SUFDTixtRkFBbUY7SUFDbkYsOEVBQThFO0lBQzlFLHlEQUF5RDtJQUN6RCxLQUFLO0lBRUwsK0RBQStEO0lBQy9ELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFekM7Ozs7Ozs7O09BUUc7SUFDSCxTQUFTLGdCQUFnQixDQUFVLElBQXFCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZCxNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDMUQsaUJBQWlCLEVBQ2pCLE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLEdBQUcsQ0FDSixDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU87UUFDTCxTQUFTO1FBQ1QsSUFBSTtRQUNKLGdCQUFnQjtRQUNoQixHQUFHO1FBQ0gsR0FBRztRQUNILE1BQU07S0FDUCxDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBZ0I7SUFDdkYsTUFBTSxDQUFVLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDM0MsTUFBTSxDQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEgsTUFBTSxDQUFVLEdBQUcsR0FBRyxDQUFPLElBQXlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN2RixNQUFNLENBQVUsZ0JBQWdCLEdBQUcsQ0FBVSxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSJ9
@@ -6,41 +6,41 @@ import type { Query, QueryEnd, QueryWhere } from "../query.js";
6
6
  import type { Repository } from "./service.js";
7
7
  export declare const extendRepo: <T, Encoded extends {
8
8
  id: string;
9
- }, Evt, ItemType extends string, IdKey extends keyof T, R>(repo: Repository<T, Encoded, Evt, ItemType, IdKey, R>) => Repository<T, Encoded, Evt, ItemType, IdKey, R> & {
9
+ }, Evt, ItemType extends string, IdKey extends keyof T, RSchema, RPublish>(repo: Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>) => Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish> & {
10
10
  request: (id: T[IdKey]) => Effect.Effect<T, NotFoundError<ItemType>, never>;
11
- get: (id: T[IdKey]) => Effect.Effect<T, NotFoundError<ItemType>, R>;
11
+ get: (id: T[IdKey]) => Effect.Effect<T, NotFoundError<ItemType>, RSchema>;
12
12
  log: (evt: Evt) => import("effect-app/Pure").PureLogT<any>;
13
- removeById: (id: T[IdKey]) => Effect.Effect<void, NotFoundError<ItemType>, R>;
14
- save: (items_0: T, ...items: T[]) => Effect<void, InvalidStateError | OptimisticConcurrencyException, R>;
15
- saveWithEvents: (events: Iterable<Evt>) => (items_0: T, ...items: T[]) => Effect<void, InvalidStateError | OptimisticConcurrencyException, R>;
13
+ removeById: (id: T[IdKey]) => Effect.Effect<void, NotFoundError<ItemType>, RSchema | RPublish>;
14
+ save: (items_0: T, ...items: T[]) => Effect<void, OptimisticConcurrencyException | InvalidStateError, RSchema | RPublish>;
15
+ saveWithEvents: (events: Iterable<Evt>) => (items_0: T, ...items: T[]) => Effect<void, OptimisticConcurrencyException | InvalidStateError, RSchema | RPublish>;
16
16
  queryAndSavePure: {
17
17
  <A, E2, R2, T2 extends T>(q: (q: Query<Encoded>) => QueryEnd<Encoded, "one">, pure: Effect<A, E2, FixEnv<R2, Evt, T, T2>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E2, Exclude<R2, {
18
18
  env: PureEnv<Evt, T, T2>;
19
19
  }>>;
20
- <A, E2_1, R2_1, T2_1 extends T>(q: (q: Query<Encoded>) => Query<Encoded> | QueryWhere<Encoded> | QueryEnd<Encoded, "many">, pure: Effect<A, E2_1, FixEnv<R2_1, Evt, readonly T[], readonly T2_1[]>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | E2_1, Exclude<R2_1, {
20
+ <A, E2_1, R2_1, T2_1 extends T>(q: (q: Query<Encoded>) => Query<Encoded> | QueryWhere<Encoded> | QueryEnd<Encoded, "many">, pure: Effect<A, E2_1, FixEnv<R2_1, Evt, readonly T[], readonly T2_1[]>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | E2_1, RSchema | RPublish | Exclude<R2_1, {
21
21
  env: PureEnv<Evt, readonly T[], readonly T2_1[]>;
22
22
  }>>;
23
- <A, E2_2, R2_2, T2_2 extends T>(q: (q: Query<Encoded>) => Query<Encoded> | QueryWhere<Encoded> | QueryEnd<Encoded, "many">, pure: Effect<A, E2_2, FixEnv<R2_2, Evt, readonly T[], readonly T2_2[]>>, batch: "batched" | number): Effect.Effect<A[], InvalidStateError | OptimisticConcurrencyException | E2_2, Exclude<R2_2, {
23
+ <A, E2_2, R2_2, T2_2 extends T>(q: (q: Query<Encoded>) => Query<Encoded> | QueryWhere<Encoded> | QueryEnd<Encoded, "many">, pure: Effect<A, E2_2, FixEnv<R2_2, Evt, readonly T[], readonly T2_2[]>>, batch: "batched" | number): Effect.Effect<A[], InvalidStateError | OptimisticConcurrencyException | E2_2, RSchema | RPublish | Exclude<R2_2, {
24
24
  env: PureEnv<Evt, readonly T[], readonly T2_2[]>;
25
25
  }>>;
26
26
  };
27
27
  saveManyWithPure: {
28
- <R_1, A, E, S1 extends T, S2 extends T>(items: Iterable<S1>, pure: Effect<A, E, FixEnv<R_1, Evt, readonly S1[], readonly S2[]>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | E, Exclude<R_1, {
28
+ <R, A, E, S1 extends T, S2 extends T>(items: Iterable<S1>, pure: Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | E, RSchema | RPublish | Exclude<R, {
29
29
  env: PureEnv<Evt, readonly S1[], readonly S2[]>;
30
30
  }>>;
31
- <R_1, A_1, E_1, S1_1 extends T, S2_1 extends T>(items: Iterable<S1_1>, pure: Effect<A_1, E_1, FixEnv<R_1, Evt, readonly S1_1[], readonly S2_1[]>>, batch: "batched" | number): Effect.Effect<A_1[], InvalidStateError | OptimisticConcurrencyException | E_1, Exclude<R_1, {
31
+ <R, A_1, E_1, S1_1 extends T, S2_1 extends T>(items: Iterable<S1_1>, pure: Effect<A_1, E_1, FixEnv<R, Evt, readonly S1_1[], readonly S2_1[]>>, batch: "batched" | number): Effect.Effect<A_1[], InvalidStateError | OptimisticConcurrencyException | E_1, RSchema | RPublish | Exclude<R, {
32
32
  env: PureEnv<Evt, readonly S1_1[], readonly S2_1[]>;
33
33
  }>>;
34
34
  };
35
- byIdAndSaveWithPure: <R_1, A_2, E_2, S2_2 extends T>(id: T[IdKey], pure: Effect<A_2, E_2, FixEnv<R_1, Evt, T, S2_2>>) => Effect<A_2, InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E_2, Exclude<R_1, {
35
+ byIdAndSaveWithPure: <R, A_2, E_2, S2_2 extends T>(id: T[IdKey], pure: Effect<A_2, E_2, FixEnv<R, Evt, T, S2_2>>) => Effect<A_2, InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E_2, RSchema | RPublish | Exclude<R, {
36
36
  env: PureEnv<Evt, T, S2_2>;
37
37
  }>>;
38
- saveWithPure: <R_1, A_3, E_3, S1_2 extends T, S2_3 extends T>(item: S1_2, pure: Effect<A_3, E_3, FixEnv<R_1, Evt, S1_2, S2_3>>) => Effect.Effect<A_3, E_3 | InvalidStateError | OptimisticConcurrencyException, R | Exclude<R_1, {
38
+ saveWithPure: <R, A_3, E_3, S1_2 extends T, S2_3 extends T>(item: S1_2, pure: Effect<A_3, E_3, FixEnv<R, Evt, S1_2, S2_3>>) => Effect.Effect<A_3, OptimisticConcurrencyException | InvalidStateError | E_3, RSchema | RPublish | Exclude<R, {
39
39
  env: PureEnv<Evt, S1_2, S2_3>;
40
40
  }>>;
41
41
  };
42
42
  export interface ExtendedRepository<T, Encoded extends {
43
43
  id: string;
44
- }, Evt, ItemType extends string, IdKey extends keyof T, R> extends ReturnType<typeof extendRepo<T, Encoded, Evt, ItemType, IdKey, R>> {
44
+ }, Evt, ItemType extends string, IdKey extends keyof T, RSchema, RPublish> extends ReturnType<typeof extendRepo<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>> {
45
45
  }
46
46
  //# sourceMappingURL=ext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../../src/Model/Repository/ext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { Array, Effect, Exit, Option, Request, RequestResolver } from "effect-app";
2
+ import { NotFoundError } from "effect-app/client";
3
+ import { runTerm } from "effect-app/Pure";
4
+ import { AnyPureDSL } from "../dsl.js";
5
+ import * as Q from "../query.js";
6
+ export const extendRepo = (repo) => {
7
+ const get = (id) => Effect.flatMap(repo.find(id), (_) => Effect.mapError(_, () => new NotFoundError({ type: repo.itemType, id })));
8
+ function saveManyWithPure_(items, pure) {
9
+ return saveAllWithEffectInt(runTerm(pure, [...items]));
10
+ }
11
+ function saveWithPure_(item, pure) {
12
+ return saveAllWithEffectInt(runTerm(pure, item)
13
+ .pipe(Effect
14
+ .map(([item, events, a]) => [[item], events, a])));
15
+ }
16
+ function saveAllWithEffectInt(gen) {
17
+ return Effect.flatMap(gen, ([items, events, a]) => repo.saveAndPublish(items, events).pipe(Effect.map(() => a)));
18
+ }
19
+ function saveManyWithPureBatched_(items, pure, batchSize = 100) {
20
+ return Effect.forEach(Array.chunk_(items, batchSize), (batch) => saveAllWithEffectInt(runTerm(pure, batch)));
21
+ }
22
+ const queryAndSavePure = (q, pure, batch) => repo.query(q).pipe(Effect.andThen((_) => Array.isArray(_)
23
+ ? batch === undefined
24
+ ? saveManyWithPure_(_, pure)
25
+ : saveManyWithPureBatched_(_, pure, batch === "batched" ? 100 : batch)
26
+ : saveWithPure_(_, pure)));
27
+ const saveManyWithPure = (items, pure, batch) => batch
28
+ ? Effect.forEach(Array.chunk_(items, batch === "batched" ? 100 : batch), (batch) => saveAllWithEffectInt(runTerm(pure, batch)))
29
+ : saveAllWithEffectInt(runTerm(pure, [...items]));
30
+ const byIdAndSaveWithPure = (id, pure) => get(id).pipe(Effect.flatMap((item) => saveWithPure_(item, pure)));
31
+ const _request = Request.tagged(`Get${repo.itemType}`);
32
+ const requestResolver = RequestResolver
33
+ .makeBatched((requests) => repo.query(Q.where("id", "in", requests.map((_) => _.id)))
34
+ // TODO
35
+ .pipe(Effect.andThen((items) => Effect.forEach(requests, (r) => Request.complete(r, Array
36
+ .findFirst(items, (_) => _[repo.idKey] === r.id)
37
+ .pipe(Option.match({
38
+ onNone: () => Exit.fail(new NotFoundError({ type: repo.itemType, id: r.id })),
39
+ onSome: Exit.succeed
40
+ }))), { discard: true })), Effect
41
+ .catchAllCause((cause) => Effect.forEach(requests, Request.complete(Exit.failCause(cause)), { discard: true }))))
42
+ .pipe(RequestResolver.batchN(20));
43
+ const exts = {
44
+ request: (id) => Effect.request(_request({ id }), requestResolver),
45
+ get,
46
+ log: (evt) => AnyPureDSL.log(evt),
47
+ removeById: (id) => Effect.andThen(get(id), (_) => repo.removeAndPublish([_])),
48
+ save: (...items) => repo.saveAndPublish(items),
49
+ saveWithEvents: (events) => (...items) => repo.saveAndPublish(items, events),
50
+ queryAndSavePure,
51
+ saveManyWithPure,
52
+ byIdAndSaveWithPure,
53
+ saveWithPure: (item, pure) => saveAllWithEffectInt(runTerm(pure, item)
54
+ .pipe(Effect.map(([item, events, a]) => [[item], events, a])))
55
+ };
56
+ return {
57
+ ...repo,
58
+ ...exts
59
+ };
60
+ };
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL01vZGVsL1JlcG9zaXRvcnkvZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFdEMsT0FBTyxLQUFLLENBQUMsTUFBTSxhQUFhLENBQUE7QUFHaEMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBU3hCLElBQXFFLEVBQ3JFLEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQVksRUFBRSxFQUFFLENBQzNCLE1BQU0sQ0FBQyxPQUFPLENBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDYixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQzFGLENBQUE7SUFDSCxTQUFTLGlCQUFpQixDQU94QixLQUFtQixFQUNuQixJQUFnRTtRQUVoRSxPQUFPLG9CQUFvQixDQUN6QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUMxQixDQUFBO0lBQ0gsQ0FBQztJQUVELFNBQVMsYUFBYSxDQU9wQixJQUFRLEVBQ1IsSUFBMEM7UUFFMUMsT0FBTyxvQkFBb0IsQ0FDekIsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7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