@effect-app/infra 4.0.0-beta.26 → 4.0.0-beta.260

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 (503) hide show
  1. package/CHANGELOG.md +1966 -0
  2. package/_check.sh +1 -1
  3. package/dist/CUPS.d.ts +30 -11
  4. package/dist/CUPS.d.ts.map +1 -1
  5. package/dist/CUPS.js +35 -14
  6. package/dist/ClusterCosmos.d.ts +64 -0
  7. package/dist/ClusterCosmos.d.ts.map +1 -0
  8. package/dist/ClusterCosmos.js +487 -0
  9. package/dist/ClusterServiceBus.d.ts +67 -0
  10. package/dist/ClusterServiceBus.d.ts.map +1 -0
  11. package/dist/ClusterServiceBus.js +82 -0
  12. package/dist/ContextProvider.d.ts +34 -0
  13. package/dist/ContextProvider.d.ts.map +1 -0
  14. package/dist/ContextProvider.js +40 -0
  15. package/dist/Emailer/Sendgrid.d.ts +111 -147
  16. package/dist/Emailer/Sendgrid.d.ts.map +1 -1
  17. package/dist/Emailer/Sendgrid.js +24 -19
  18. package/dist/Emailer/fake.d.ts +2 -2
  19. package/dist/Emailer/fake.d.ts.map +1 -1
  20. package/dist/Emailer/fake.js +4 -4
  21. package/dist/MainFiberSet.d.ts +12 -9
  22. package/dist/MainFiberSet.d.ts.map +1 -1
  23. package/dist/MainFiberSet.js +10 -6
  24. package/dist/QueueMaker/SQLQueue.d.ts +8 -9
  25. package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
  26. package/dist/QueueMaker/SQLQueue.js +138 -120
  27. package/dist/QueueMaker/errors.d.ts +5 -3
  28. package/dist/QueueMaker/errors.d.ts.map +1 -1
  29. package/dist/QueueMaker/errors.js +4 -2
  30. package/dist/QueueMaker/memQueue.d.ts +10 -6
  31. package/dist/QueueMaker/memQueue.d.ts.map +1 -1
  32. package/dist/QueueMaker/memQueue.js +84 -68
  33. package/dist/QueueMaker/sbqueue.d.ts +9 -5
  34. package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
  35. package/dist/QueueMaker/sbqueue.js +60 -58
  36. package/dist/RequestFiberSet.d.ts +10 -7
  37. package/dist/RequestFiberSet.d.ts.map +1 -1
  38. package/dist/RequestFiberSet.js +13 -8
  39. package/dist/SQL/Model.d.ts +468 -0
  40. package/dist/SQL/Model.d.ts.map +1 -0
  41. package/dist/SQL/Model.js +469 -0
  42. package/dist/SQL.d.ts +2 -0
  43. package/dist/SQL.d.ts.map +1 -0
  44. package/dist/{adapters/SQL.js → SQL.js} +1 -1
  45. package/dist/ServiceBus.d.ts +61 -0
  46. package/dist/ServiceBus.d.ts.map +1 -0
  47. package/dist/ServiceBus.js +108 -0
  48. package/dist/Store/Cosmos/query.d.ts +15 -4
  49. package/dist/Store/Cosmos/query.d.ts.map +1 -1
  50. package/dist/Store/Cosmos/query.js +179 -41
  51. package/dist/Store/Cosmos.d.ts +3 -3
  52. package/dist/Store/Cosmos.d.ts.map +1 -1
  53. package/dist/Store/Cosmos.js +344 -246
  54. package/dist/Store/Disk.d.ts +5 -5
  55. package/dist/Store/Disk.d.ts.map +1 -1
  56. package/dist/Store/Disk.js +78 -38
  57. package/dist/Store/Memory.d.ts +7 -10
  58. package/dist/Store/Memory.d.ts.map +1 -1
  59. package/dist/Store/Memory.js +326 -66
  60. package/dist/Store/SQL/Pg.d.ts +4 -0
  61. package/dist/Store/SQL/Pg.d.ts.map +1 -0
  62. package/dist/Store/SQL/Pg.js +232 -0
  63. package/dist/Store/SQL/query.d.ts +49 -0
  64. package/dist/Store/SQL/query.d.ts.map +1 -0
  65. package/dist/Store/SQL/query.js +527 -0
  66. package/dist/Store/SQL.d.ts +21 -0
  67. package/dist/Store/SQL.d.ts.map +1 -0
  68. package/dist/Store/SQL.js +449 -0
  69. package/dist/Store/codeFilter.d.ts +5 -5
  70. package/dist/Store/codeFilter.d.ts.map +1 -1
  71. package/dist/Store/codeFilter.js +6 -3
  72. package/dist/Store/index.d.ts +7 -5
  73. package/dist/Store/index.d.ts.map +1 -1
  74. package/dist/Store/index.js +18 -5
  75. package/dist/Store/utils.d.ts +4 -3
  76. package/dist/Store/utils.d.ts.map +1 -1
  77. package/dist/Store/utils.js +5 -5
  78. package/dist/WorkflowEngineCosmos.d.ts +29 -0
  79. package/dist/WorkflowEngineCosmos.d.ts.map +1 -0
  80. package/dist/WorkflowEngineCosmos.js +521 -0
  81. package/dist/WorkflowEngineSqlite.d.ts +24 -0
  82. package/dist/WorkflowEngineSqlite.d.ts.map +1 -0
  83. package/dist/WorkflowEngineSqlite.js +550 -0
  84. package/dist/arbs.d.ts +2 -2
  85. package/dist/arbs.d.ts.map +1 -1
  86. package/dist/arbs.js +5 -3
  87. package/dist/codec.d.ts +5 -0
  88. package/dist/codec.d.ts.map +1 -0
  89. package/dist/codec.js +5 -0
  90. package/dist/cosmos-client.d.ts +16 -0
  91. package/dist/cosmos-client.d.ts.map +1 -0
  92. package/dist/cosmos-client.js +11 -0
  93. package/dist/errorReporter.d.ts +7 -5
  94. package/dist/errorReporter.d.ts.map +1 -1
  95. package/dist/errorReporter.js +23 -27
  96. package/dist/errors.d.ts +1 -1
  97. package/dist/fileUtil.d.ts +2 -2
  98. package/dist/fileUtil.d.ts.map +1 -1
  99. package/dist/fileUtil.js +2 -2
  100. package/dist/index.d.ts +3 -2
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +3 -2
  103. package/dist/internal/RequestContextMiddleware.d.ts +5 -0
  104. package/dist/internal/RequestContextMiddleware.d.ts.map +1 -0
  105. package/dist/internal/RequestContextMiddleware.js +45 -0
  106. package/dist/internal/auth.d.ts +53 -0
  107. package/dist/internal/auth.d.ts.map +1 -0
  108. package/dist/internal/auth.js +180 -0
  109. package/dist/internal/events.d.ts +11 -0
  110. package/dist/internal/events.d.ts.map +1 -0
  111. package/dist/internal/events.js +49 -0
  112. package/dist/internal/health.d.ts +3 -0
  113. package/dist/internal/health.d.ts.map +1 -0
  114. package/dist/internal/health.js +5 -0
  115. package/dist/layerUtils.d.ts +32 -0
  116. package/dist/layerUtils.d.ts.map +1 -0
  117. package/dist/layerUtils.js +17 -0
  118. package/dist/logger/jsonLogger.d.ts +2 -2
  119. package/dist/logger/jsonLogger.d.ts.map +1 -1
  120. package/dist/logger/jsonLogger.js +5 -3
  121. package/dist/logger/logFmtLogger.d.ts +2 -2
  122. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  123. package/dist/logger/logFmtLogger.js +3 -3
  124. package/dist/logger/shared.d.ts +3 -3
  125. package/dist/logger/shared.d.ts.map +1 -1
  126. package/dist/logger/shared.js +5 -5
  127. package/dist/logger.d.ts +1 -1
  128. package/dist/logger.d.ts.map +1 -1
  129. package/dist/memQueue.d.ts +15 -0
  130. package/dist/memQueue.d.ts.map +1 -0
  131. package/dist/memQueue.js +21 -0
  132. package/dist/middlewares.d.ts +10 -0
  133. package/dist/middlewares.d.ts.map +1 -0
  134. package/dist/{api/middlewares.js → middlewares.js} +1 -1
  135. package/dist/mongo-client.d.ts +11 -0
  136. package/dist/mongo-client.d.ts.map +1 -0
  137. package/dist/mongo-client.js +15 -0
  138. package/dist/otel.d.ts +75 -0
  139. package/dist/otel.d.ts.map +1 -0
  140. package/dist/otel.js +65 -0
  141. package/dist/rateLimit.d.ts +12 -4
  142. package/dist/rateLimit.d.ts.map +1 -1
  143. package/dist/rateLimit.js +7 -12
  144. package/dist/redis-client.d.ts +42 -0
  145. package/dist/redis-client.d.ts.map +1 -0
  146. package/dist/redis-client.js +98 -0
  147. package/dist/reportError.d.ts +4 -0
  148. package/dist/reportError.d.ts.map +1 -0
  149. package/dist/reportError.js +28 -0
  150. package/dist/routing/middleware/RouterMiddleware.d.ts +16 -0
  151. package/dist/routing/middleware/RouterMiddleware.d.ts.map +1 -0
  152. package/dist/{api/routing → routing}/middleware/RouterMiddleware.js +1 -1
  153. package/dist/routing/middleware/middleware.d.ts +48 -0
  154. package/dist/routing/middleware/middleware.d.ts.map +1 -0
  155. package/dist/routing/middleware/middleware.js +128 -0
  156. package/dist/routing/middleware.d.ts +3 -0
  157. package/dist/routing/middleware.d.ts.map +1 -0
  158. package/dist/{api/routing → routing}/middleware.js +1 -2
  159. package/dist/routing/schema/jwt.d.ts +4 -0
  160. package/dist/routing/schema/jwt.d.ts.map +1 -0
  161. package/dist/routing/schema/jwt.js +13 -0
  162. package/dist/routing/tsort.d.ts +8 -0
  163. package/dist/routing/tsort.d.ts.map +1 -0
  164. package/dist/routing/tsort.js +51 -0
  165. package/dist/routing/utils.d.ts +19 -0
  166. package/dist/routing/utils.d.ts.map +1 -0
  167. package/dist/routing/utils.js +45 -0
  168. package/dist/routing.d.ts +184 -0
  169. package/dist/routing.d.ts.map +1 -0
  170. package/dist/routing.js +236 -0
  171. package/dist/test.d.ts +3 -3
  172. package/dist/test.d.ts.map +1 -1
  173. package/dist/test.js +2 -2
  174. package/dist/util.d.ts +3 -0
  175. package/dist/util.d.ts.map +1 -0
  176. package/dist/util.js +14 -0
  177. package/dist/vitest.d.ts +1 -1
  178. package/docs/cluster-storage.md +26 -0
  179. package/docs/workflow-engine.md +262 -0
  180. package/examples/query.ts +47 -39
  181. package/package.json +31 -345
  182. package/run.sh +1 -0
  183. package/src/CUPS.ts +52 -13
  184. package/src/ClusterCosmos.ts +954 -0
  185. package/src/ClusterServiceBus.ts +242 -0
  186. package/src/{api/ContextProvider.ts → ContextProvider.ts} +19 -16
  187. package/src/Emailer/Sendgrid.ts +82 -59
  188. package/src/Emailer/fake.ts +3 -3
  189. package/src/MainFiberSet.ts +12 -10
  190. package/src/QueueMaker/SQLQueue.ts +153 -156
  191. package/src/QueueMaker/errors.ts +3 -1
  192. package/src/QueueMaker/memQueue.ts +113 -107
  193. package/src/QueueMaker/sbqueue.ts +78 -90
  194. package/src/RequestFiberSet.ts +13 -8
  195. package/src/{adapters/SQL → SQL}/Model.ts +42 -41
  196. package/src/ServiceBus.ts +219 -0
  197. package/src/Store/Cosmos/query.ts +216 -52
  198. package/src/Store/Cosmos.ts +493 -353
  199. package/src/Store/Disk.ts +109 -69
  200. package/src/Store/Memory.ts +365 -96
  201. package/src/Store/SQL/Pg.ts +363 -0
  202. package/src/Store/SQL/query.ts +603 -0
  203. package/src/Store/SQL.ts +735 -0
  204. package/src/Store/codeFilter.ts +8 -5
  205. package/src/Store/index.ts +21 -6
  206. package/src/Store/utils.ts +26 -24
  207. package/src/WorkflowEngineCosmos.ts +719 -0
  208. package/src/WorkflowEngineSqlite.ts +813 -0
  209. package/src/arbs.ts +5 -3
  210. package/src/{adapters/cosmos-client.ts → cosmos-client.ts} +5 -3
  211. package/src/errorReporter.ts +66 -76
  212. package/src/fileUtil.ts +1 -1
  213. package/src/index.ts +2 -1
  214. package/src/{api/internal → internal}/RequestContextMiddleware.ts +23 -6
  215. package/src/internal/auth.ts +272 -0
  216. package/src/{api/internal → internal}/events.ts +22 -13
  217. package/src/{api/layerUtils.ts → layerUtils.ts} +14 -10
  218. package/src/logger/jsonLogger.ts +4 -2
  219. package/src/logger/logFmtLogger.ts +2 -2
  220. package/src/logger/shared.ts +5 -4
  221. package/src/{adapters/memQueue.ts → memQueue.ts} +5 -4
  222. package/src/{adapters/mongo-client.ts → mongo-client.ts} +4 -2
  223. package/src/otel.ts +152 -0
  224. package/src/rateLimit.ts +34 -23
  225. package/src/{adapters/redis-client.ts → redis-client.ts} +7 -3
  226. package/src/{api/reportError.ts → reportError.ts} +3 -2
  227. package/src/{api/routing → routing}/middleware/RouterMiddleware.ts +5 -4
  228. package/src/{api/routing → routing}/middleware/middleware.ts +62 -17
  229. package/src/routing/middleware.ts +4 -0
  230. package/src/{api/routing → routing}/schema/jwt.ts +2 -1
  231. package/src/{api/routing → routing}/utils.ts +2 -1
  232. package/src/routing.ts +768 -0
  233. package/src/test.ts +2 -2
  234. package/test/auth.test.ts +101 -0
  235. package/test/cluster-cosmos.test.ts +503 -0
  236. package/test/cluster-servicebus.test.ts +180 -0
  237. package/test/contextProvider.test.ts +15 -12
  238. package/test/controller.test.ts +28 -32
  239. package/test/cosmos-query.test.ts +159 -0
  240. package/test/dist/_check-agg-infer.test-d.d.ts +2 -0
  241. package/test/dist/_check-agg-infer.test-d.d.ts.map +1 -0
  242. package/test/dist/_check-agg-infer.test-d.js +19 -0
  243. package/test/dist/_check-proj-infer.test-d.d.ts +2 -0
  244. package/test/dist/_check-proj-infer.test-d.d.ts.map +1 -0
  245. package/test/dist/_check-proj-infer.test-d.js +16 -0
  246. package/test/dist/_check-tighten.test-d.d.ts +2 -0
  247. package/test/dist/_check-tighten.test-d.d.ts.map +1 -0
  248. package/test/dist/_check-tighten.test-d.js +21 -0
  249. package/test/dist/auth.test.d.ts.map +1 -0
  250. package/test/dist/cluster-cosmos.test.d.ts.map +1 -0
  251. package/test/dist/cluster-servicebus.test.d.ts.map +1 -0
  252. package/test/dist/contextProvider.test.d.ts.map +1 -1
  253. package/test/dist/controller.test.d.ts.map +1 -1
  254. package/test/dist/cosmos-query.test.d.ts.map +1 -0
  255. package/test/dist/date-query.test.d.ts.map +1 -0
  256. package/test/dist/fixtures.d.ts +30 -12
  257. package/test/dist/fixtures.d.ts.map +1 -1
  258. package/test/dist/fixtures.js +17 -10
  259. package/test/dist/query.test.d.ts.map +1 -1
  260. package/test/dist/rawQuery.test.d.ts.map +1 -1
  261. package/test/dist/repository-ext.test.d.ts.map +1 -0
  262. package/test/dist/requires.test.d.ts.map +1 -1
  263. package/test/dist/router-generator.test.d.ts.map +1 -0
  264. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  265. package/test/dist/rpc-context-map-streaming.test.d.ts.map +1 -0
  266. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  267. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  268. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  269. package/test/dist/sql-store.test.d.ts.map +1 -0
  270. package/test/dist/workflow-engine-cosmos.test.d.ts.map +1 -0
  271. package/test/dist/workflow-engine-sqlite.test.d.ts.map +1 -0
  272. package/test/fixtures.ts +16 -9
  273. package/test/layerUtils.test.ts +2 -2
  274. package/test/query.test.ts +905 -40
  275. package/test/rawQuery.test.ts +340 -22
  276. package/test/repository-ext.test.ts +62 -0
  277. package/test/requires.test.ts +10 -5
  278. package/test/router-generator.test.ts +187 -0
  279. package/test/routing-interruptibility.test.ts +66 -0
  280. package/test/rpc-context-map-streaming.test.ts +262 -0
  281. package/test/rpc-e2e-invalidation.test.ts +256 -0
  282. package/test/rpc-multi-middleware.test.ts +85 -10
  283. package/test/rpc-stream-fullstack.test.ts +304 -0
  284. package/test/sql-store.test.ts +1711 -0
  285. package/test/validateSample.test.ts +26 -14
  286. package/test/workflow-engine-cosmos.test.ts +354 -0
  287. package/test/workflow-engine-sqlite.test.ts +299 -0
  288. package/tsconfig.examples.json +1 -1
  289. package/tsconfig.json +2 -1
  290. package/tsconfig.json.bak +2 -2
  291. package/tsconfig.src.json +35 -35
  292. package/tsconfig.test.json +2 -2
  293. package/dist/Emailer/service.d.ts +0 -55
  294. package/dist/Emailer/service.d.ts.map +0 -1
  295. package/dist/Emailer/service.js +0 -6
  296. package/dist/Emailer.d.ts +0 -2
  297. package/dist/Emailer.d.ts.map +0 -1
  298. package/dist/Emailer.js +0 -2
  299. package/dist/Model/Repository/ext.d.ts +0 -41
  300. package/dist/Model/Repository/ext.d.ts.map +0 -1
  301. package/dist/Model/Repository/ext.js +0 -65
  302. package/dist/Model/Repository/internal/internal.d.ts +0 -59
  303. package/dist/Model/Repository/internal/internal.d.ts.map +0 -1
  304. package/dist/Model/Repository/internal/internal.js +0 -316
  305. package/dist/Model/Repository/legacy.d.ts +0 -19
  306. package/dist/Model/Repository/legacy.d.ts.map +0 -1
  307. package/dist/Model/Repository/legacy.js +0 -2
  308. package/dist/Model/Repository/makeRepo.d.ts +0 -49
  309. package/dist/Model/Repository/makeRepo.d.ts.map +0 -1
  310. package/dist/Model/Repository/makeRepo.js +0 -24
  311. package/dist/Model/Repository/service.d.ts +0 -89
  312. package/dist/Model/Repository/service.d.ts.map +0 -1
  313. package/dist/Model/Repository/service.js +0 -2
  314. package/dist/Model/Repository/validation.d.ts +0 -42
  315. package/dist/Model/Repository/validation.d.ts.map +0 -1
  316. package/dist/Model/Repository/validation.js +0 -32
  317. package/dist/Model/Repository.d.ts +0 -6
  318. package/dist/Model/Repository.d.ts.map +0 -1
  319. package/dist/Model/Repository.js +0 -6
  320. package/dist/Model/dsl.d.ts +0 -32
  321. package/dist/Model/dsl.d.ts.map +0 -1
  322. package/dist/Model/dsl.js +0 -44
  323. package/dist/Model/filter/filterApi.d.ts +0 -30
  324. package/dist/Model/filter/filterApi.d.ts.map +0 -1
  325. package/dist/Model/filter/filterApi.js +0 -2
  326. package/dist/Model/filter/types/errors.d.ts +0 -29
  327. package/dist/Model/filter/types/errors.d.ts.map +0 -1
  328. package/dist/Model/filter/types/errors.js +0 -2
  329. package/dist/Model/filter/types/fields.d.ts +0 -15
  330. package/dist/Model/filter/types/fields.d.ts.map +0 -1
  331. package/dist/Model/filter/types/fields.js +0 -2
  332. package/dist/Model/filter/types/path/common.d.ts +0 -316
  333. package/dist/Model/filter/types/path/common.d.ts.map +0 -1
  334. package/dist/Model/filter/types/path/common.js +0 -2
  335. package/dist/Model/filter/types/path/eager.d.ts +0 -95
  336. package/dist/Model/filter/types/path/eager.d.ts.map +0 -1
  337. package/dist/Model/filter/types/path/eager.js +0 -31
  338. package/dist/Model/filter/types/path/index.d.ts +0 -4
  339. package/dist/Model/filter/types/path/index.d.ts.map +0 -1
  340. package/dist/Model/filter/types/path/index.js +0 -3
  341. package/dist/Model/filter/types/utils.d.ts +0 -79
  342. package/dist/Model/filter/types/utils.d.ts.map +0 -1
  343. package/dist/Model/filter/types/utils.js +0 -2
  344. package/dist/Model/filter/types/validator.d.ts +0 -30
  345. package/dist/Model/filter/types/validator.d.ts.map +0 -1
  346. package/dist/Model/filter/types/validator.js +0 -2
  347. package/dist/Model/filter/types.d.ts +0 -5
  348. package/dist/Model/filter/types.d.ts.map +0 -1
  349. package/dist/Model/filter/types.js +0 -7
  350. package/dist/Model/query/dsl.d.ts +0 -248
  351. package/dist/Model/query/dsl.d.ts.map +0 -1
  352. package/dist/Model/query/dsl.js +0 -104
  353. package/dist/Model/query/new-kid-interpreter.d.ts +0 -28
  354. package/dist/Model/query/new-kid-interpreter.d.ts.map +0 -1
  355. package/dist/Model/query/new-kid-interpreter.js +0 -165
  356. package/dist/Model/query.d.ts +0 -15
  357. package/dist/Model/query.d.ts.map +0 -1
  358. package/dist/Model/query.js +0 -3
  359. package/dist/Model.d.ts +0 -4
  360. package/dist/Model.d.ts.map +0 -1
  361. package/dist/Model.js +0 -4
  362. package/dist/Operations.d.ts +0 -55
  363. package/dist/Operations.d.ts.map +0 -1
  364. package/dist/Operations.js +0 -102
  365. package/dist/OperationsRepo.d.ts +0 -41
  366. package/dist/OperationsRepo.d.ts.map +0 -1
  367. package/dist/OperationsRepo.js +0 -14
  368. package/dist/QueueMaker/service.d.ts +0 -11
  369. package/dist/QueueMaker/service.d.ts.map +0 -1
  370. package/dist/QueueMaker/service.js +0 -4
  371. package/dist/RequestContext.d.ts +0 -63
  372. package/dist/RequestContext.d.ts.map +0 -1
  373. package/dist/RequestContext.js +0 -49
  374. package/dist/Store/ContextMapContainer.d.ts +0 -14
  375. package/dist/Store/ContextMapContainer.d.ts.map +0 -1
  376. package/dist/Store/ContextMapContainer.js +0 -16
  377. package/dist/Store/service.d.ts +0 -108
  378. package/dist/Store/service.d.ts.map +0 -1
  379. package/dist/Store/service.js +0 -71
  380. package/dist/Store.d.ts +0 -2
  381. package/dist/Store.d.ts.map +0 -1
  382. package/dist/Store.js +0 -2
  383. package/dist/adapters/SQL/Model.d.ts +0 -479
  384. package/dist/adapters/SQL/Model.d.ts.map +0 -1
  385. package/dist/adapters/SQL/Model.js +0 -478
  386. package/dist/adapters/SQL.d.ts +0 -2
  387. package/dist/adapters/SQL.d.ts.map +0 -1
  388. package/dist/adapters/ServiceBus.d.ts +0 -58
  389. package/dist/adapters/ServiceBus.d.ts.map +0 -1
  390. package/dist/adapters/ServiceBus.js +0 -99
  391. package/dist/adapters/cosmos-client.d.ts +0 -14
  392. package/dist/adapters/cosmos-client.d.ts.map +0 -1
  393. package/dist/adapters/cosmos-client.js +0 -9
  394. package/dist/adapters/index.d.ts +0 -2
  395. package/dist/adapters/index.d.ts.map +0 -1
  396. package/dist/adapters/index.js +0 -2
  397. package/dist/adapters/logger.d.ts +0 -9
  398. package/dist/adapters/logger.d.ts.map +0 -1
  399. package/dist/adapters/logger.js +0 -3
  400. package/dist/adapters/memQueue.d.ts +0 -13
  401. package/dist/adapters/memQueue.d.ts.map +0 -1
  402. package/dist/adapters/memQueue.js +0 -20
  403. package/dist/adapters/mongo-client.d.ts +0 -10
  404. package/dist/adapters/mongo-client.d.ts.map +0 -1
  405. package/dist/adapters/mongo-client.js +0 -13
  406. package/dist/adapters/redis-client.d.ts +0 -39
  407. package/dist/adapters/redis-client.d.ts.map +0 -1
  408. package/dist/adapters/redis-client.js +0 -94
  409. package/dist/api/ContextProvider.d.ts +0 -31
  410. package/dist/api/ContextProvider.d.ts.map +0 -1
  411. package/dist/api/ContextProvider.js +0 -38
  412. package/dist/api/codec.d.ts +0 -5
  413. package/dist/api/codec.d.ts.map +0 -1
  414. package/dist/api/codec.js +0 -5
  415. package/dist/api/internal/RequestContextMiddleware.d.ts +0 -5
  416. package/dist/api/internal/RequestContextMiddleware.d.ts.map +0 -1
  417. package/dist/api/internal/RequestContextMiddleware.js +0 -35
  418. package/dist/api/internal/auth.d.ts +0 -15
  419. package/dist/api/internal/auth.d.ts.map +0 -1
  420. package/dist/api/internal/auth.js +0 -47
  421. package/dist/api/internal/events.d.ts +0 -9
  422. package/dist/api/internal/events.d.ts.map +0 -1
  423. package/dist/api/internal/events.js +0 -42
  424. package/dist/api/internal/health.d.ts +0 -3
  425. package/dist/api/internal/health.d.ts.map +0 -1
  426. package/dist/api/internal/health.js +0 -5
  427. package/dist/api/layerUtils.d.ts +0 -24
  428. package/dist/api/layerUtils.d.ts.map +0 -1
  429. package/dist/api/layerUtils.js +0 -16
  430. package/dist/api/middlewares.d.ts +0 -10
  431. package/dist/api/middlewares.d.ts.map +0 -1
  432. package/dist/api/reportError.d.ts +0 -4
  433. package/dist/api/reportError.d.ts.map +0 -1
  434. package/dist/api/reportError.js +0 -27
  435. package/dist/api/routing/middleware/RouterMiddleware.d.ts +0 -15
  436. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +0 -1
  437. package/dist/api/routing/middleware/middleware.d.ts +0 -9
  438. package/dist/api/routing/middleware/middleware.d.ts.map +0 -1
  439. package/dist/api/routing/middleware/middleware.js +0 -92
  440. package/dist/api/routing/middleware.d.ts +0 -4
  441. package/dist/api/routing/middleware.d.ts.map +0 -1
  442. package/dist/api/routing/schema/jwt.d.ts +0 -4
  443. package/dist/api/routing/schema/jwt.d.ts.map +0 -1
  444. package/dist/api/routing/schema/jwt.js +0 -12
  445. package/dist/api/routing/tsort.d.ts +0 -8
  446. package/dist/api/routing/tsort.d.ts.map +0 -1
  447. package/dist/api/routing/tsort.js +0 -51
  448. package/dist/api/routing/utils.d.ts +0 -19
  449. package/dist/api/routing/utils.d.ts.map +0 -1
  450. package/dist/api/routing/utils.js +0 -44
  451. package/dist/api/routing.d.ts +0 -138
  452. package/dist/api/routing.d.ts.map +0 -1
  453. package/dist/api/routing.js +0 -166
  454. package/dist/api/setupRequest.d.ts +0 -12
  455. package/dist/api/setupRequest.d.ts.map +0 -1
  456. package/dist/api/setupRequest.js +0 -44
  457. package/dist/api/util.d.ts +0 -3
  458. package/dist/api/util.d.ts.map +0 -1
  459. package/dist/api/util.js +0 -14
  460. package/eslint.config.mjs +0 -24
  461. package/src/Emailer/service.ts +0 -52
  462. package/src/Emailer.ts +0 -1
  463. package/src/Model/Repository/ext.ts +0 -283
  464. package/src/Model/Repository/internal/internal.ts +0 -577
  465. package/src/Model/Repository/legacy.ts +0 -27
  466. package/src/Model/Repository/makeRepo.ts +0 -139
  467. package/src/Model/Repository/service.ts +0 -627
  468. package/src/Model/Repository/validation.ts +0 -31
  469. package/src/Model/Repository.ts +0 -5
  470. package/src/Model/dsl.ts +0 -128
  471. package/src/Model/filter/filterApi.ts +0 -60
  472. package/src/Model/filter/types/errors.ts +0 -47
  473. package/src/Model/filter/types/fields.ts +0 -50
  474. package/src/Model/filter/types/path/common.ts +0 -404
  475. package/src/Model/filter/types/path/eager.ts +0 -298
  476. package/src/Model/filter/types/path/index.ts +0 -4
  477. package/src/Model/filter/types/utils.ts +0 -128
  478. package/src/Model/filter/types/validator.ts +0 -46
  479. package/src/Model/filter/types.ts +0 -6
  480. package/src/Model/query/dsl.ts +0 -2110
  481. package/src/Model/query/new-kid-interpreter.ts +0 -210
  482. package/src/Model/query.ts +0 -13
  483. package/src/Model.ts +0 -3
  484. package/src/Operations.ts +0 -235
  485. package/src/OperationsRepo.ts +0 -16
  486. package/src/QueueMaker/service.ts +0 -17
  487. package/src/RequestContext.ts +0 -63
  488. package/src/Store/ContextMapContainer.ts +0 -20
  489. package/src/Store/service.ts +0 -184
  490. package/src/Store.ts +0 -1
  491. package/src/adapters/ServiceBus.ts +0 -209
  492. package/src/adapters/index.ts +0 -0
  493. package/src/adapters/logger.ts +0 -3
  494. package/src/api/internal/auth.ts +0 -68
  495. package/src/api/routing/middleware.ts +0 -6
  496. package/src/api/routing.ts +0 -598
  497. package/src/api/setupRequest.ts +0 -84
  498. /package/src/{adapters/SQL.ts → SQL.ts} +0 -0
  499. /package/src/{api/codec.ts → codec.ts} +0 -0
  500. /package/src/{api/internal → internal}/health.ts +0 -0
  501. /package/src/{api/middlewares.ts → middlewares.ts} +0 -0
  502. /package/src/{api/routing → routing}/tsort.ts +0 -0
  503. /package/src/{api/util.ts → util.ts} +0 -0
@@ -0,0 +1,299 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { SqliteClient } from "@effect/sql-sqlite-node"
3
+ import { assert, describe, it } from "@effect/vitest"
4
+ import * as Context from "effect-app/Context"
5
+ import * as Effect from "effect-app/Effect"
6
+ import * as Layer from "effect-app/Layer"
7
+ import * as Option from "effect-app/Option"
8
+ import * as S from "effect-app/Schema"
9
+ import * as Duration from "effect/Duration"
10
+ import * as Exit from "effect/Exit"
11
+ import * as Schema from "effect/Schema"
12
+ import { SqlClient } from "effect/unstable/sql"
13
+ import { Activity, DurableDeferred, Workflow } from "effect/unstable/workflow"
14
+ import { layerSqlite } from "../src/WorkflowEngineSqlite.js"
15
+
16
+ // --- Shared mutable counter service -----------------------------------
17
+
18
+ class CounterRef extends Context.Service<CounterRef, { count: number }>()("CounterRef") {
19
+ static readonly layer = Layer.effect(CounterRef, Effect.sync(() => ({ count: 0 })))
20
+ }
21
+
22
+ // --- Workflow definitions --------------------------------------------
23
+
24
+ const Increment = Workflow.make({
25
+ name: "Sqlite/Increment",
26
+ payload: { value: Schema.Number },
27
+ success: Schema.Number,
28
+ idempotencyKey: ({ value }) => `inc-${value}`
29
+ })
30
+
31
+ const IncrementHandler = Increment.toLayer(Effect.fn(function*({ value }) {
32
+ const counter = yield* CounterRef
33
+ yield* Activity.make({
34
+ name: "Bump",
35
+ success: Schema.Number,
36
+ execute: Effect.sync(() => {
37
+ counter.count++
38
+ return counter.count
39
+ })
40
+ })
41
+ return value + 1
42
+ }))
43
+
44
+ const TickHandler = Increment.toLayer(({ value }) => Effect.succeed(value + 1))
45
+
46
+ const EmailReceived = DurableDeferred.make("EmailReceived", { success: Schema.String })
47
+
48
+ const AwaitEmail = Workflow.make({
49
+ name: "Sqlite/AwaitEmail",
50
+ payload: { id: Schema.String },
51
+ success: Schema.String,
52
+ idempotencyKey: ({ id }) => `email-${id}`
53
+ })
54
+
55
+ const AwaitEmailHandler = AwaitEmail.toLayer(Effect.fn(function*() {
56
+ return yield* DurableDeferred.await(EmailReceived)
57
+ }))
58
+
59
+ // Reproduces the adapter's opaque activity-result codec so tests can seed
60
+ // schema-encoded values into the activity table directly.
61
+ const ActivityResultCodec = S.fromJsonString(
62
+ S.toCodecJson(Workflow.Result({ success: S.Union([S.Any, S.Void]), error: S.Union([S.Any, S.Void]) }))
63
+ )
64
+
65
+ // --- Layer wiring ----------------------------------------------------
66
+
67
+ type TestOpts = {
68
+ readonly recoveryInterval?: Duration.Duration
69
+ readonly clockPollInterval?: Duration.Duration
70
+ }
71
+
72
+ const makeBase = (opts?: TestOpts) => {
73
+ const Sqlite = SqliteClient.layer({ filename: ":memory:" })
74
+ const Engine = layerSqlite({
75
+ recoveryInterval: opts?.recoveryInterval ?? Duration.millis(100),
76
+ clockPollInterval: opts?.clockPollInterval ?? Duration.millis(100)
77
+ })
78
+ .pipe(Layer.provide(Sqlite))
79
+ return { Sqlite, Engine }
80
+ }
81
+
82
+ const incrementLayer = (opts?: TestOpts) => {
83
+ const { Sqlite, Engine } = makeBase(opts)
84
+ return IncrementHandler.pipe(
85
+ Layer.provideMerge(CounterRef.layer),
86
+ Layer.provideMerge(Engine),
87
+ Layer.provideMerge(Sqlite)
88
+ )
89
+ }
90
+
91
+ const tickLayer = (opts?: TestOpts) => {
92
+ const { Sqlite, Engine } = makeBase(opts)
93
+ return TickHandler.pipe(Layer.provideMerge(Engine), Layer.provideMerge(Sqlite))
94
+ }
95
+
96
+ const awaitEmailLayer = (opts?: TestOpts) => {
97
+ const { Sqlite, Engine } = makeBase(opts)
98
+ return AwaitEmailHandler.pipe(Layer.provideMerge(Engine), Layer.provideMerge(Sqlite))
99
+ }
100
+
101
+ // --- Tests ------------------------------------------------------------
102
+
103
+ describe("WorkflowEngine (SQLite)", () => {
104
+ it.live("executes a workflow and persists completion", () =>
105
+ Effect
106
+ .gen(function*() {
107
+ const executionId = yield* Increment.execute({ value: 10 }, { discard: true })
108
+ const result = yield* Increment.execute({ value: 10 })
109
+ const polled = yield* Increment.poll(executionId)
110
+
111
+ assert.strictEqual(result, 11)
112
+ assert(
113
+ Option.isSome(polled)
114
+ && polled.value._tag === "Complete"
115
+ && Exit.isSuccess(polled.value.exit)
116
+ )
117
+ assert.strictEqual(polled.value.exit.value, 11)
118
+ })
119
+ .pipe(Effect.provide(incrementLayer())))
120
+
121
+ it.live("re-executing the same id is idempotent (activity runs once)", () =>
122
+ Effect
123
+ .gen(function*() {
124
+ const counter = yield* CounterRef
125
+ yield* Increment.execute({ value: 1 })
126
+ yield* Increment.execute({ value: 1 })
127
+ yield* Increment.execute({ value: 1 })
128
+ assert.strictEqual(counter.count, 1)
129
+ })
130
+ .pipe(Effect.provide(incrementLayer())))
131
+
132
+ it.live("persists activity results across replay", () =>
133
+ Effect
134
+ .gen(function*() {
135
+ const sql = yield* SqlClient.SqlClient
136
+ yield* Increment.execute({ value: 2 })
137
+ const rows = yield* sql
138
+ .unsafe(
139
+ `SELECT execution_id, name, attempt, result FROM workflow_activity`
140
+ )
141
+ .pipe(Effect.orDie)
142
+ assert.strictEqual(rows.length, 1)
143
+ assert.strictEqual((rows[0] as any).name, "Bump")
144
+ // Stored value is schema-encoded JSON, not a raw runtime object.
145
+ const decoded = S.decodeSync(ActivityResultCodec)((rows[0] as any).result)
146
+ assert.strictEqual(decoded._tag, "Complete")
147
+ })
148
+ .pipe(Effect.provide(incrementLayer())))
149
+
150
+ it.live("durable deferred completion resumes a suspended workflow", () =>
151
+ Effect
152
+ .gen(function*() {
153
+ const completion = Effect.gen(function*() {
154
+ yield* Effect.sleep(Duration.millis(50))
155
+ const token = yield* DurableDeferred.tokenFromPayload(EmailReceived, {
156
+ workflow: AwaitEmail,
157
+ payload: { id: "x" }
158
+ })
159
+ yield* DurableDeferred.done(EmailReceived, { token, exit: Exit.succeed("delivered") })
160
+ })
161
+ const [result] = yield* Effect.all(
162
+ [AwaitEmail.execute({ id: "x" }), completion],
163
+ { concurrency: "unbounded" }
164
+ )
165
+ assert.strictEqual(result, "delivered")
166
+ })
167
+ .pipe(Effect.provide(awaitEmailLayer())))
168
+
169
+ it.live("interrupt marks the execution row", () =>
170
+ Effect
171
+ .gen(function*() {
172
+ const sql = yield* SqlClient.SqlClient
173
+ const executionId = yield* AwaitEmail.executionId({ id: "i" })
174
+ // Start the workflow as discard (does not block) so it suspends in the
175
+ // background; then mark it interrupted.
176
+ yield* AwaitEmail.execute({ id: "i" }, { discard: true })
177
+ yield* Effect.sleep(Duration.millis(50))
178
+ yield* AwaitEmail.interrupt(executionId)
179
+ yield* Effect.sleep(Duration.millis(50))
180
+ const rows = yield* sql
181
+ .unsafe(
182
+ `SELECT interrupted FROM workflow_exec WHERE execution_id = ?`,
183
+ [executionId] as any
184
+ )
185
+ .pipe(Effect.orDie)
186
+ assert.strictEqual((rows[0] as any).interrupted, 1)
187
+ })
188
+ .pipe(Effect.provide(awaitEmailLayer())))
189
+
190
+ it.live("clock poller fires past-due clocks", () =>
191
+ Effect
192
+ .gen(function*() {
193
+ const sql = yield* SqlClient.SqlClient
194
+ yield* sql
195
+ .unsafe(
196
+ `INSERT INTO workflow_exec (execution_id, workflow_name, payload, status, suspended, interrupted, etag)
197
+ VALUES ('exec-clock', 'Sqlite/AwaitEmail', '{"id":"x"}', 'running', 0, 0, 'e1')`
198
+ )
199
+ .pipe(Effect.orDie)
200
+ yield* sql
201
+ .unsafe(
202
+ `INSERT INTO workflow_clock (execution_id, name, workflow_name, deferred_name, fire_at)
203
+ VALUES ('exec-clock', 'wake', 'Sqlite/AwaitEmail', 'EmailReceived', ?)`,
204
+ [Date.now() - 1000] as any
205
+ )
206
+ .pipe(Effect.orDie)
207
+
208
+ yield* Effect.sleep(Duration.millis(400))
209
+
210
+ const deferred = yield* sql
211
+ .unsafe(
212
+ `SELECT exit FROM workflow_deferred WHERE execution_id = 'exec-clock' AND name = 'EmailReceived'`
213
+ )
214
+ .pipe(Effect.orDie)
215
+ const clockGone = yield* sql
216
+ .unsafe(
217
+ `SELECT execution_id FROM workflow_clock WHERE execution_id = 'exec-clock' AND name = 'wake'`
218
+ )
219
+ .pipe(Effect.orDie)
220
+ assert.strictEqual(deferred.length, 1)
221
+ assert.strictEqual(clockGone.length, 0)
222
+ })
223
+ .pipe(Effect.provide(awaitEmailLayer())))
224
+
225
+ it.live("recovery poller drives execs with stale leases", () =>
226
+ Effect
227
+ .gen(function*() {
228
+ const sql = yield* SqlClient.SqlClient
229
+ yield* sql
230
+ .unsafe(
231
+ `INSERT INTO workflow_exec (execution_id, workflow_name, payload, status, suspended, interrupted, lease_expires_at, etag)
232
+ VALUES ('recover-1', 'Sqlite/Increment', '{"value":99}', 'running', 0, 0, 0, 'e0')`
233
+ )
234
+ .pipe(Effect.orDie)
235
+
236
+ yield* Effect.sleep(Duration.millis(500))
237
+
238
+ const rows = yield* sql
239
+ .unsafe(
240
+ `SELECT status, completed_result FROM workflow_exec WHERE execution_id = 'recover-1'`
241
+ )
242
+ .pipe(Effect.orDie)
243
+ assert.strictEqual((rows[0] as any).status, "complete")
244
+ const completedResult = JSON.parse((rows[0] as any).completed_result) as { _tag: string }
245
+ assert.strictEqual(completedResult._tag, "Complete")
246
+ })
247
+ .pipe(Effect.provide(tickLayer())))
248
+
249
+ it.live("activity dedup: a pre-existing persisted result wins over a fresh run", () =>
250
+ Effect
251
+ .gen(function*() {
252
+ const sql = yield* SqlClient.SqlClient
253
+ const counter = yield* CounterRef
254
+ const executionId = yield* Increment.executionId({ value: 7 })
255
+ yield* sql
256
+ .unsafe(
257
+ `INSERT INTO workflow_exec (execution_id, workflow_name, payload, status, suspended, interrupted, etag)
258
+ VALUES (?, 'Sqlite/Increment', '{"value":7}', 'running', 0, 0, 'e0')`,
259
+ [executionId] as any
260
+ )
261
+ .pipe(Effect.orDie)
262
+ const seeded = S.encodeSync(ActivityResultCodec)(
263
+ new Workflow.Complete({ exit: Exit.succeed(999) })
264
+ )
265
+ yield* sql
266
+ .unsafe(
267
+ `INSERT INTO workflow_activity (execution_id, name, attempt, result)
268
+ VALUES (?, 'Bump', 1, ?)`,
269
+ [executionId, seeded] as any
270
+ )
271
+ .pipe(Effect.orDie)
272
+
273
+ const result = yield* Increment.execute({ value: 7 })
274
+ assert.strictEqual(result, 8)
275
+ // Bump's user effect must NOT have run — counter stays at 0.
276
+ assert.strictEqual(counter.count, 0)
277
+ })
278
+ .pipe(Effect.provide(incrementLayer())))
279
+
280
+ it.live("deferredDone is idempotent (first-writer-wins)", () =>
281
+ Effect
282
+ .gen(function*() {
283
+ const completion = Effect.gen(function*() {
284
+ yield* Effect.sleep(Duration.millis(50))
285
+ const token = yield* DurableDeferred.tokenFromPayload(EmailReceived, {
286
+ workflow: AwaitEmail,
287
+ payload: { id: "dup" }
288
+ })
289
+ yield* DurableDeferred.done(EmailReceived, { token, exit: Exit.succeed("first") })
290
+ yield* DurableDeferred.done(EmailReceived, { token, exit: Exit.succeed("second") })
291
+ })
292
+ const [result] = yield* Effect.all(
293
+ [AwaitEmail.execute({ id: "dup" }), completion],
294
+ { concurrency: "unbounded" }
295
+ )
296
+ assert.strictEqual(result, "first")
297
+ })
298
+ .pipe(Effect.provide(awaitEmailLayer())))
299
+ })
@@ -12,4 +12,4 @@
12
12
  "tsBuildInfoFile": ".tsbuildinfo/examples.tsbuildinfo",
13
13
  "rootDir": "examples"
14
14
  }
15
- }
15
+ }
package/tsconfig.json CHANGED
@@ -32,9 +32,10 @@
32
32
  "outDir": "build/dist",
33
33
  "resolveJsonModule": true,
34
34
  "moduleResolution": "Node16",
35
- "downlevelIteration": true,
36
35
  "noErrorTruncation": true,
37
36
  "forceConsistentCasingInFileNames": true,
37
+ "rewriteRelativeImportExtensions": true,
38
+ "allowImportingTsExtensions": true,
38
39
  "types": [
39
40
  "node"
40
41
  ]
package/tsconfig.json.bak CHANGED
@@ -8,5 +8,5 @@
8
8
  {
9
9
  "path": "./tsconfig.test.json"
10
10
  }
11
- ],
12
- }
11
+ ]
12
+ }
package/tsconfig.src.json CHANGED
@@ -1,38 +1,38 @@
1
1
  {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "lib": [
5
- "esnext"
6
- ],
7
- "tsBuildInfoFile": "./dist/.tsbuildinfo",
8
- "esModuleInterop": true,
9
- "rootDir": "./src",
10
- // keep in here, cause madge can't detect it from extended tsconfig
11
- "moduleResolution": "Node16",
12
- "types": [
13
- "./types/modules"
14
- ],
15
- "outDir": "./dist"
16
- },
17
- "include": [
18
- "./src/**/*.ts"
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "lib": [
5
+ "esnext"
19
6
  ],
20
- "exclude": [
21
- "./dist",
22
- "*.test.ts",
23
- "node_modules",
24
- "build",
25
- "lib",
26
- "dist",
27
- "**/*.d.ts.map",
28
- ".git",
29
- ".data",
30
- "**/.*",
31
- "**/*.tmp"
7
+ "tsBuildInfoFile": "./dist/.tsbuildinfo",
8
+ "esModuleInterop": true,
9
+ "rootDir": "./src",
10
+ // keep in here, cause madge can't detect it from extended tsconfig
11
+ "moduleResolution": "Node16",
12
+ "types": [
13
+ "./types/modules"
32
14
  ],
33
- "references": [
34
- {
35
- "path": "../effect-app"
36
- },
37
- ]
38
- }
15
+ "outDir": "./dist"
16
+ },
17
+ "include": [
18
+ "./src/**/*.ts"
19
+ ],
20
+ "exclude": [
21
+ "./dist",
22
+ "*.test.ts",
23
+ "node_modules",
24
+ "build",
25
+ "lib",
26
+ "dist",
27
+ "**/*.d.ts.map",
28
+ ".git",
29
+ ".data",
30
+ "**/.*",
31
+ "**/*.tmp"
32
+ ],
33
+ "references": [
34
+ {
35
+ "path": "../effect-app"
36
+ }
37
+ ]
38
+ }
@@ -28,6 +28,6 @@
28
28
  "references": [
29
29
  {
30
30
  "path": "./tsconfig.src.json"
31
- },
31
+ }
32
32
  ]
33
- }
33
+ }
@@ -1,55 +0,0 @@
1
- import type { MailContent, MailData } from "@sendgrid/helpers/classes/mail.js";
2
- import type { ResponseError } from "@sendgrid/mail";
3
- import { type Effect, type NonEmptyReadonlyArray, type Redacted, ServiceMap } from "effect-app";
4
- import type { Email } from "effect-app/Schema";
5
- declare const SendMailError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
6
- readonly _tag: "SendMailError";
7
- } & Readonly<A>;
8
- export declare class SendMailError extends SendMailError_base<{
9
- readonly raw: Error | ResponseError;
10
- }> {
11
- }
12
- declare const Emailer_base: ServiceMap.OpaqueClass<Emailer, "effect-app/Emailer", {
13
- sendMail: (msg: EmailMsgOptionalFrom) => Effect.Effect<void, SendMailError>;
14
- }>;
15
- export declare class Emailer extends Emailer_base {
16
- }
17
- export type EmailData = Email | {
18
- name?: string;
19
- email: Email;
20
- };
21
- export interface SendgridConfig {
22
- defaultReplyTo?: EmailData;
23
- subjectPrefix: string;
24
- realMail: boolean;
25
- defaultFrom: EmailData;
26
- apiKey: Redacted.Redacted<string>;
27
- }
28
- export type EmailTemplateMsg = MailData & {
29
- templateId: string;
30
- };
31
- export type EmailRecipients = EmailData | NonEmptyReadonlyArray<EmailData>;
32
- export type EmailMsgBase = Omit<MailData, "from" | "to" | "bcc" | "cc" | "content"> & {
33
- to: EmailData | NonEmptyReadonlyArray<EmailData>;
34
- cc?: EmailData | NonEmptyReadonlyArray<EmailData>;
35
- bcc?: EmailData | NonEmptyReadonlyArray<EmailData>;
36
- from: EmailData;
37
- /**
38
- * should multiple `to` addresess be considered multiple emails?
39
- * defaults to `true`, not to leak email addresses
40
- */
41
- isMultiple?: boolean;
42
- };
43
- export type EmailContent = {
44
- text: string;
45
- } | {
46
- html: string;
47
- } | {
48
- templateId: string;
49
- } | {
50
- content: NonEmptyReadonlyArray<MailContent>;
51
- };
52
- export type EmailMsg = EmailMsgBase & EmailContent;
53
- export type EmailMsgOptionalFrom = Omit<EmailMsgBase, "from"> & Partial<Pick<EmailMsg, "from">> & EmailContent;
54
- export {};
55
- //# sourceMappingURL=service.d.ts.map
@@ -1 +0,0 @@
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,EAAQ,KAAK,MAAM,EAAE,KAAK,qBAAqB,EAAE,KAAK,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACrG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;;;;AAE9C,qBAAa,aAAc,SAAQ,mBAAkC;IACnE,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,aAAa,CAAA;CACpC,CAAC;CAAG;;cAGO,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;;AAD7E,qBAAa,OAAQ,SAAQ,YAEH;CAAG;AAE7B,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,SAAS,CAAA;IACtB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAClC;AACD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;AAE1E,MAAM,MAAM,YAAY,GACpB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GACxD;IACA,EAAE,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAChD,EAAE,CAAC,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IACjD,GAAG,CAAC,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAClD,IAAI,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAEH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IACxF,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,CAAA;AAEhB,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,YAAY,CAAA"}
@@ -1,6 +0,0 @@
1
- import { Data, ServiceMap } from "effect-app";
2
- export class SendMailError extends Data.TaggedError("SendMailError") {
3
- }
4
- export class Emailer extends ServiceMap.Opaque()("effect-app/Emailer") {
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLElBQUksRUFBMEQsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR3JHLE1BQU0sT0FBTyxhQUFjLFNBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBRWpFO0NBQUc7QUFFTCxNQUFNLE9BQU8sT0FBUSxTQUFRLFVBQVUsQ0FBQyxNQUFNLEVBRTFDLENBQUMsb0JBQW9CLENBQUM7Q0FBRyJ9
package/dist/Emailer.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from "./Emailer/service.js";
2
- //# sourceMappingURL=Emailer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Emailer.d.ts","sourceRoot":"","sources":["../src/Emailer.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
package/dist/Emailer.js DELETED
@@ -1,2 +0,0 @@
1
- export * from "./Emailer/service.js";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1haWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9FbWFpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUEifQ==
@@ -1,41 +0,0 @@
1
- import { Effect, type NonEmptyArray } from "effect-app";
2
- import { type InvalidStateError, NotFoundError, type OptimisticConcurrencyException } from "effect-app/client/errors";
3
- import { type FixEnv, type PureEnv } from "effect-app/Pure";
4
- import type { FieldValues } from "../filter/types.js";
5
- import type { Query, QueryEnd, QueryWhere } from "../query.js";
6
- import type { Repository } from "./service.js";
7
- export declare const extendRepo: <T, Encoded extends FieldValues, Evt, ItemType extends string, IdKey extends keyof T & keyof Encoded, RSchema, RPublish>(repo: Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>) => Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish> & {
8
- request: (id: T[IdKey]) => Effect.Effect<T, NotFoundError<ItemType>, never>;
9
- get: (id: T[IdKey]) => Effect.Effect<T, NotFoundError<ItemType>, RSchema>;
10
- log: (evt: Evt) => import("effect-app/Pure").PureLogT<any>;
11
- save: (items_0: T, ...items: T[]) => Effect.Effect<void, OptimisticConcurrencyException | InvalidStateError, RSchema | RPublish>;
12
- saveWithEvents: (events: Iterable<Evt>) => (...items: NonEmptyArray<T>) => Effect.Effect<void, OptimisticConcurrencyException | InvalidStateError, RSchema | RPublish>;
13
- queryAndSavePure: {
14
- <A, E2, R2, T2 extends T>(q: (q: Query<Encoded>) => QueryEnd<Encoded, "one">, pure: Effect.Effect<A, E2, FixEnv<R2, Evt, T, T2>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E2, Exclude<R2, {
15
- env: PureEnv<Evt, T, T2>;
16
- }>>;
17
- <A, E2_1, R2_1, T2_1 extends T>(q: (q: Query<Encoded>) => Query<Encoded> | QueryWhere<Encoded> | QueryEnd<Encoded, "many">, pure: Effect.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, {
18
- env: PureEnv<Evt, readonly T[], readonly T2_1[]>;
19
- }>>;
20
- <A, E2_2, R2_2, T2_2 extends T>(q: (q: Query<Encoded>) => Query<Encoded> | QueryWhere<Encoded> | QueryEnd<Encoded, "many">, pure: Effect.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, {
21
- env: PureEnv<Evt, readonly T[], readonly T2_2[]>;
22
- }>>;
23
- };
24
- saveManyWithPure: {
25
- <R, A, E, S1 extends T, S2 extends T>(items: Iterable<S1>, pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | E, RSchema | RPublish | Exclude<R, {
26
- env: PureEnv<Evt, readonly S1[], readonly S2[]>;
27
- }>>;
28
- <R, A_1, E_1, S1_1 extends T, S2_1 extends T>(items: Iterable<S1_1>, pure: Effect.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, {
29
- env: PureEnv<Evt, readonly S1_1[], readonly S2_1[]>;
30
- }>>;
31
- };
32
- byIdAndSaveWithPure: <R, A_2, E_2, S2_2 extends T>(id: T[IdKey], pure: Effect.Effect<A_2, E_2, FixEnv<R, Evt, T, S2_2>>) => Effect.Effect<A_2, InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E_2, RSchema | RPublish | Exclude<R, {
33
- env: PureEnv<Evt, T, S2_2>;
34
- }>>;
35
- saveWithPure: <R, A_3, E_3, S1_2 extends T, S2_3 extends T>(item: S1_2, pure: Effect.Effect<A_3, E_3, FixEnv<R, Evt, S1_2, S2_3>>) => Effect.Effect<A_3, OptimisticConcurrencyException | InvalidStateError | E_3, RSchema | RPublish | Exclude<R, {
36
- env: PureEnv<Evt, S1_2, S2_3>;
37
- }>>;
38
- };
39
- export interface ExtendedRepository<T, Encoded extends FieldValues, Evt, ItemType extends string, IdKey extends keyof T & keyof Encoded, RSchema, RPublish> extends ReturnType<typeof extendRepo<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>> {
40
- }
41
- //# sourceMappingURL=ext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../../src/Model/Repository/ext.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/no-unsafe-return */
3
- import { Array, Effect, Exit, Option, Request, RequestResolver } from "effect-app";
4
- import { NotFoundError } from "effect-app/client/errors";
5
- import { runTerm } from "effect-app/Pure";
6
- import { AnyPureDSL } from "../dsl.js";
7
- import * as Q from "../query.js";
8
- export const extendRepo = (repo) => {
9
- const get = (id) => repo.find(id).pipe(Effect.flatMap(Option.match({
10
- onNone: () => Effect.fail(new NotFoundError({ type: repo.itemType, id })),
11
- onSome: Effect.succeed
12
- })));
13
- function saveManyWithPure_(items, pure) {
14
- return saveAllWithEffectInt(runTerm(pure, [...items]));
15
- }
16
- function saveWithPure_(item, pure) {
17
- return saveAllWithEffectInt(runTerm(pure, item)
18
- .pipe(Effect
19
- .map(([item, events, a]) => [[item], events, a])));
20
- }
21
- function saveAllWithEffectInt(gen) {
22
- return Effect.flatMap(gen, ([items, events, a]) => repo.saveAndPublish(items, events).pipe(Effect.map(() => a)));
23
- }
24
- function saveManyWithPureBatched_(items, pure, batchSize = 100) {
25
- return Effect.forEach(Array.chunksOf(items, batchSize), (batch) => saveAllWithEffectInt(runTerm(pure, batch)));
26
- }
27
- const queryAndSavePure = (q, pure, batch) => repo.query(q).pipe(Effect.andThen((_) => Array.isArray(_)
28
- ? batch === undefined
29
- ? saveManyWithPure_(_, pure)
30
- : saveManyWithPureBatched_(_, pure, batch === "batched" ? 100 : batch)
31
- : saveWithPure_(_, pure)));
32
- const saveManyWithPure = (items, pure, batch) => batch
33
- ? Effect.forEach(Array.chunksOf(items, batch === "batched" ? 100 : batch), (batch) => saveAllWithEffectInt(runTerm(pure, batch)))
34
- : saveAllWithEffectInt(runTerm(pure, [...items]));
35
- const byIdAndSaveWithPure = (id, pure) => get(id).pipe(Effect.flatMap((item) => saveWithPure_(item, pure)));
36
- const _request = Request.tagged(`Get${repo.itemType}`);
37
- const requestResolver = RequestResolver
38
- .make((entries, _key) => repo.query(Q.where(repo.idKey, "in", entries.map((_) => _.request.id)))
39
- // TODO
40
- .pipe(Effect.andThen((items) => Effect.forEach(entries, (entry) => Request.complete(Array
41
- .findFirst(items, (_) => _[repo.idKey] === entry.request.id)
42
- .pipe(Option.match({
43
- onNone: () => Exit.fail(new NotFoundError({ type: repo.itemType, id: entry.request.id })),
44
- onSome: Exit.succeed
45
- })))(entry), { discard: true })), Effect
46
- .catchCause((cause) => Effect.forEach(entries, (entry) => Request.complete(Exit.failCause(cause))(entry), { discard: true }))))
47
- .pipe(RequestResolver.batchN(20));
48
- const exts = {
49
- request: (id) => Effect.request(_request({ id }), requestResolver),
50
- get,
51
- log: (evt) => AnyPureDSL.log(evt),
52
- save: (...items) => repo.saveAndPublish(items),
53
- saveWithEvents: (events) => (...items) => repo.saveAndPublish(items, events),
54
- queryAndSavePure,
55
- saveManyWithPure,
56
- byIdAndSaveWithPure,
57
- saveWithPure: (item, pure) => saveAllWithEffectInt(runTerm(pure, item)
58
- .pipe(Effect.map(([item, events, a]) => [[item], events, a])))
59
- };
60
- return {
61
- ...repo,
62
- ...exts
63
- };
64
- };
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL01vZGVsL1JlcG9zaXRvcnkvZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCx3REFBd0Q7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFzQixNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN0RyxPQUFPLEVBQTBCLGFBQWEsRUFBdUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUNySCxPQUFPLEVBQTZCLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFHdEMsT0FBTyxLQUFLLENBQUMsTUFBTSxhQUFhLENBQUE7QUFHaEMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBU3hCLElBQXFFLEVBQ3JFLEVBQUU7SUFDRixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQVksRUFBRSxFQUFFLENBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTztLQUN2QixDQUFDLENBQUMsQ0FDSixDQUFBO0lBQ0gsU0FBUyxpQkFBaUIsQ0FPeEIsS0FBbUIsRUFDbkIsSUFBdUU7UUFFdkUsT0FBTyxvQkFBb0IsQ0FDekIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FDMUIsQ0FBQTtJQUNILENBQUM7SUFF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