@effect-app/infra 4.0.0-beta.28 → 4.0.0-beta.280

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 (477) hide show
  1. package/CHANGELOG.md +2122 -0
  2. package/_check.sh +1 -1
  3. package/dist/CUPS.d.ts +29 -10
  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 +547 -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 +110 -146
  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 +1 -1
  19. package/dist/Emailer/fake.d.ts.map +1 -1
  20. package/dist/Emailer/fake.js +4 -4
  21. package/dist/MainFiberSet.d.ts +11 -8
  22. package/dist/MainFiberSet.d.ts.map +1 -1
  23. package/dist/MainFiberSet.js +10 -6
  24. package/dist/QueueMaker/SQLQueue.d.ts +7 -8
  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 +4 -2
  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 +9 -5
  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 +8 -4
  34. package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
  35. package/dist/QueueMaker/sbqueue.js +60 -58
  36. package/dist/RequestFiberSet.d.ts +9 -6
  37. package/dist/RequestFiberSet.d.ts.map +1 -1
  38. package/dist/RequestFiberSet.js +13 -8
  39. package/dist/{adapters/SQL → SQL}/Model.d.ts +31 -42
  40. package/dist/SQL/Model.d.ts.map +1 -0
  41. package/dist/SQL/Model.js +469 -0
  42. package/dist/SQL.d.ts.map +1 -0
  43. package/dist/{adapters/SQL.js → SQL.js} +1 -1
  44. package/dist/{adapters/ServiceBus.d.ts → ServiceBus.d.ts} +13 -10
  45. package/dist/ServiceBus.d.ts.map +1 -0
  46. package/dist/ServiceBus.js +108 -0
  47. package/dist/Store/Cosmos/query.d.ts +14 -3
  48. package/dist/Store/Cosmos/query.d.ts.map +1 -1
  49. package/dist/Store/Cosmos/query.js +179 -41
  50. package/dist/Store/Cosmos.d.ts +2 -2
  51. package/dist/Store/Cosmos.d.ts.map +1 -1
  52. package/dist/Store/Cosmos.js +385 -254
  53. package/dist/Store/Disk.d.ts +4 -4
  54. package/dist/Store/Disk.d.ts.map +1 -1
  55. package/dist/Store/Disk.js +79 -39
  56. package/dist/Store/Memory.d.ts +5 -9
  57. package/dist/Store/Memory.d.ts.map +1 -1
  58. package/dist/Store/Memory.js +324 -67
  59. package/dist/Store/SQL/Pg.d.ts +4 -0
  60. package/dist/Store/SQL/Pg.d.ts.map +1 -0
  61. package/dist/Store/SQL/Pg.js +232 -0
  62. package/dist/Store/SQL/query.d.ts +49 -0
  63. package/dist/Store/SQL/query.d.ts.map +1 -0
  64. package/dist/Store/SQL/query.js +527 -0
  65. package/dist/Store/SQL.d.ts +21 -0
  66. package/dist/Store/SQL.d.ts.map +1 -0
  67. package/dist/Store/SQL.js +456 -0
  68. package/dist/Store/codeFilter.d.ts +4 -4
  69. package/dist/Store/codeFilter.d.ts.map +1 -1
  70. package/dist/Store/codeFilter.js +6 -4
  71. package/dist/Store/index.d.ts +6 -4
  72. package/dist/Store/index.d.ts.map +1 -1
  73. package/dist/Store/index.js +18 -5
  74. package/dist/Store/utils.d.ts +5 -2
  75. package/dist/Store/utils.d.ts.map +1 -1
  76. package/dist/Store/utils.js +9 -5
  77. package/dist/WorkflowEngineCosmos.d.ts +29 -0
  78. package/dist/WorkflowEngineCosmos.d.ts.map +1 -0
  79. package/dist/WorkflowEngineCosmos.js +542 -0
  80. package/dist/WorkflowEngineSqlite.d.ts +24 -0
  81. package/dist/WorkflowEngineSqlite.d.ts.map +1 -0
  82. package/dist/WorkflowEngineSqlite.js +550 -0
  83. package/dist/arbs.d.ts +1 -1
  84. package/dist/arbs.d.ts.map +1 -1
  85. package/dist/arbs.js +5 -3
  86. package/dist/codec.d.ts.map +1 -0
  87. package/dist/codec.js +5 -0
  88. package/dist/{adapters/cosmos-client.d.ts → cosmos-client.d.ts} +4 -2
  89. package/dist/cosmos-client.d.ts.map +1 -0
  90. package/dist/cosmos-client.js +11 -0
  91. package/dist/errorReporter.d.ts +6 -4
  92. package/dist/errorReporter.d.ts.map +1 -1
  93. package/dist/errorReporter.js +23 -27
  94. package/dist/fileUtil.d.ts +1 -1
  95. package/dist/fileUtil.d.ts.map +1 -1
  96. package/dist/fileUtil.js +2 -2
  97. package/dist/index.d.ts +2 -1
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +3 -2
  100. package/dist/internal/RequestContextMiddleware.d.ts +5 -0
  101. package/dist/internal/RequestContextMiddleware.d.ts.map +1 -0
  102. package/dist/internal/RequestContextMiddleware.js +45 -0
  103. package/dist/internal/auth.d.ts +53 -0
  104. package/dist/internal/auth.d.ts.map +1 -0
  105. package/dist/internal/auth.js +180 -0
  106. package/dist/internal/events.d.ts +11 -0
  107. package/dist/internal/events.d.ts.map +1 -0
  108. package/dist/internal/events.js +49 -0
  109. package/dist/internal/health.d.ts.map +1 -0
  110. package/dist/internal/health.js +5 -0
  111. package/dist/{api/layerUtils.d.ts → layerUtils.d.ts} +14 -6
  112. package/dist/layerUtils.d.ts.map +1 -0
  113. package/dist/layerUtils.js +17 -0
  114. package/dist/logger/jsonLogger.d.ts +1 -1
  115. package/dist/logger/jsonLogger.d.ts.map +1 -1
  116. package/dist/logger/jsonLogger.js +5 -3
  117. package/dist/logger/logFmtLogger.d.ts +1 -1
  118. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  119. package/dist/logger/logFmtLogger.js +3 -3
  120. package/dist/logger/shared.d.ts +2 -2
  121. package/dist/logger/shared.d.ts.map +1 -1
  122. package/dist/logger/shared.js +5 -5
  123. package/dist/logger.d.ts.map +1 -1
  124. package/dist/{adapters/memQueue.d.ts → memQueue.d.ts} +4 -2
  125. package/dist/memQueue.d.ts.map +1 -0
  126. package/dist/memQueue.js +21 -0
  127. package/dist/middlewares.d.ts.map +1 -0
  128. package/dist/{api/middlewares.js → middlewares.js} +1 -1
  129. package/dist/{adapters/mongo-client.d.ts → mongo-client.d.ts} +3 -2
  130. package/dist/mongo-client.d.ts.map +1 -0
  131. package/dist/mongo-client.js +15 -0
  132. package/dist/otel.d.ts +75 -0
  133. package/dist/otel.d.ts.map +1 -0
  134. package/dist/otel.js +65 -0
  135. package/dist/rateLimit.d.ts +11 -3
  136. package/dist/rateLimit.d.ts.map +1 -1
  137. package/dist/rateLimit.js +7 -12
  138. package/dist/{adapters/redis-client.d.ts → redis-client.d.ts} +5 -2
  139. package/dist/redis-client.d.ts.map +1 -0
  140. package/dist/redis-client.js +98 -0
  141. package/dist/{api/reportError.d.ts → reportError.d.ts} +1 -1
  142. package/dist/reportError.d.ts.map +1 -0
  143. package/dist/reportError.js +28 -0
  144. package/dist/{api/routing → routing}/middleware/RouterMiddleware.d.ts +4 -3
  145. package/dist/routing/middleware/RouterMiddleware.d.ts.map +1 -0
  146. package/dist/{api/routing → routing}/middleware/RouterMiddleware.js +1 -1
  147. package/dist/routing/middleware/middleware.d.ts +48 -0
  148. package/dist/routing/middleware/middleware.d.ts.map +1 -0
  149. package/dist/routing/middleware/middleware.js +128 -0
  150. package/dist/{api/routing → routing}/middleware.d.ts +0 -1
  151. package/dist/routing/middleware.d.ts.map +1 -0
  152. package/dist/{api/routing → routing}/middleware.js +1 -2
  153. package/dist/routing/schema/jwt.d.ts.map +1 -0
  154. package/dist/routing/schema/jwt.js +13 -0
  155. package/dist/routing/tsort.d.ts.map +1 -0
  156. package/dist/routing/tsort.js +51 -0
  157. package/dist/{api/routing → routing}/utils.d.ts +3 -3
  158. package/dist/routing/utils.d.ts.map +1 -0
  159. package/dist/routing/utils.js +45 -0
  160. package/dist/routing.d.ts +182 -0
  161. package/dist/routing.d.ts.map +1 -0
  162. package/dist/routing.js +235 -0
  163. package/dist/test.d.ts +2 -2
  164. package/dist/test.d.ts.map +1 -1
  165. package/dist/test.js +2 -2
  166. package/dist/util.d.ts.map +1 -0
  167. package/dist/util.js +14 -0
  168. package/docs/cluster-storage.md +26 -0
  169. package/docs/workflow-engine.md +262 -0
  170. package/examples/query.ts +47 -39
  171. package/package.json +33 -352
  172. package/src/CUPS.ts +53 -14
  173. package/src/ClusterCosmos.ts +1118 -0
  174. package/src/ClusterServiceBus.ts +242 -0
  175. package/src/{api/ContextProvider.ts → ContextProvider.ts} +20 -17
  176. package/src/Emailer/Sendgrid.ts +83 -60
  177. package/src/Emailer/fake.ts +4 -4
  178. package/src/MainFiberSet.ts +15 -13
  179. package/src/QueueMaker/SQLQueue.ts +154 -157
  180. package/src/QueueMaker/errors.ts +3 -1
  181. package/src/QueueMaker/memQueue.ts +115 -109
  182. package/src/QueueMaker/sbqueue.ts +80 -92
  183. package/src/RequestFiberSet.ts +14 -9
  184. package/src/{adapters/SQL → SQL}/Model.ts +42 -41
  185. package/src/SQL.ts +1 -0
  186. package/src/ServiceBus.ts +219 -0
  187. package/src/Store/Cosmos/query.ts +218 -54
  188. package/src/Store/Cosmos.ts +529 -365
  189. package/src/Store/Disk.ts +112 -70
  190. package/src/Store/Memory.ts +365 -99
  191. package/src/Store/SQL/Pg.ts +363 -0
  192. package/src/Store/SQL/query.ts +603 -0
  193. package/src/Store/SQL.ts +746 -0
  194. package/src/Store/codeFilter.ts +8 -6
  195. package/src/Store/index.ts +25 -10
  196. package/src/Store/utils.ts +32 -25
  197. package/src/WorkflowEngineCosmos.ts +749 -0
  198. package/src/WorkflowEngineSqlite.ts +813 -0
  199. package/src/arbs.ts +5 -3
  200. package/src/{adapters/cosmos-client.ts → cosmos-client.ts} +5 -3
  201. package/src/errorReporter.ts +68 -78
  202. package/src/fileUtil.ts +1 -1
  203. package/src/index.ts +2 -1
  204. package/src/{api/internal → internal}/RequestContextMiddleware.ts +23 -6
  205. package/src/internal/auth.ts +272 -0
  206. package/src/{api/internal → internal}/events.ts +22 -13
  207. package/src/{api/layerUtils.ts → layerUtils.ts} +14 -10
  208. package/src/logger/jsonLogger.ts +5 -3
  209. package/src/logger/logFmtLogger.ts +3 -3
  210. package/src/logger/shared.ts +5 -4
  211. package/src/{adapters/memQueue.ts → memQueue.ts} +5 -4
  212. package/src/middlewares.ts +10 -0
  213. package/src/{adapters/mongo-client.ts → mongo-client.ts} +4 -2
  214. package/src/otel.ts +152 -0
  215. package/src/rateLimit.ts +34 -23
  216. package/src/{adapters/redis-client.ts → redis-client.ts} +7 -3
  217. package/src/{api/reportError.ts → reportError.ts} +3 -2
  218. package/src/{api/routing → routing}/middleware/RouterMiddleware.ts +5 -4
  219. package/src/{api/routing → routing}/middleware/middleware.ts +62 -17
  220. package/src/routing/middleware.ts +4 -0
  221. package/src/{api/routing → routing}/schema/jwt.ts +2 -1
  222. package/src/{api/routing → routing}/utils.ts +2 -1
  223. package/src/routing.ts +766 -0
  224. package/src/test.ts +4 -4
  225. package/src/vitest.ts +1 -1
  226. package/test/auth.test.ts +101 -0
  227. package/test/cluster-cosmos.test.ts +612 -0
  228. package/test/cluster-servicebus.test.ts +180 -0
  229. package/test/cluster-sqlite.test.ts +205 -0
  230. package/test/contextProvider.test.ts +15 -12
  231. package/test/controller.test.ts +28 -32
  232. package/test/cosmos-query.test.ts +159 -0
  233. package/test/dist/auth.test.d.ts.map +1 -0
  234. package/test/dist/cluster-cosmos.test.d.ts.map +1 -0
  235. package/test/dist/cluster-servicebus.test.d.ts.map +1 -0
  236. package/test/dist/cluster-sqlite.test.d.ts.map +1 -0
  237. package/test/dist/contextProvider.test.d.ts.map +1 -1
  238. package/test/dist/controller.test.d.ts.map +1 -1
  239. package/test/dist/cosmos-query.test.d.ts.map +1 -0
  240. package/test/dist/fixtures.d.ts +29 -11
  241. package/test/dist/fixtures.d.ts.map +1 -1
  242. package/test/dist/fixtures.js +17 -10
  243. package/test/dist/query.test.d.ts.map +1 -1
  244. package/test/dist/rawQuery.test.d.ts.map +1 -1
  245. package/test/dist/repository-ext.test.d.ts.map +1 -0
  246. package/test/dist/requires.test.d.ts.map +1 -1
  247. package/test/dist/router-generator.test.d.ts.map +1 -0
  248. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  249. package/test/dist/rpc-context-map-streaming.test.d.ts.map +1 -0
  250. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  251. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  252. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  253. package/test/dist/sql-store.test.d.ts.map +1 -0
  254. package/test/dist/workflow-engine-cosmos.test.d.ts.map +1 -0
  255. package/test/dist/workflow-engine-sqlite.test.d.ts.map +1 -0
  256. package/test/fixtures.ts +16 -9
  257. package/test/layerUtils.test.ts +2 -2
  258. package/test/query.test.ts +905 -40
  259. package/test/rawQuery.test.ts +340 -22
  260. package/test/repository-ext.test.ts +62 -0
  261. package/test/requires.test.ts +10 -5
  262. package/test/router-generator.test.ts +187 -0
  263. package/test/routing-interruptibility.test.ts +66 -0
  264. package/test/rpc-context-map-streaming.test.ts +262 -0
  265. package/test/rpc-e2e-invalidation.test.ts +256 -0
  266. package/test/rpc-multi-middleware.test.ts +85 -10
  267. package/test/rpc-stream-fullstack.test.ts +304 -0
  268. package/test/sql-store.test.ts +1711 -0
  269. package/test/validateSample.test.ts +26 -14
  270. package/test/workflow-engine-cosmos.test.ts +345 -0
  271. package/test/workflow-engine-sqlite.test.ts +297 -0
  272. package/tsconfig.examples.json +1 -1
  273. package/tsconfig.json +3 -1
  274. package/tsconfig.src.json +35 -35
  275. package/tsconfig.test.json +2 -2
  276. package/dist/Emailer/service.d.ts +0 -55
  277. package/dist/Emailer/service.d.ts.map +0 -1
  278. package/dist/Emailer/service.js +0 -6
  279. package/dist/Emailer.d.ts +0 -2
  280. package/dist/Emailer.d.ts.map +0 -1
  281. package/dist/Emailer.js +0 -2
  282. package/dist/Model/Repository/ext.d.ts +0 -41
  283. package/dist/Model/Repository/ext.d.ts.map +0 -1
  284. package/dist/Model/Repository/ext.js +0 -65
  285. package/dist/Model/Repository/internal/internal.d.ts +0 -59
  286. package/dist/Model/Repository/internal/internal.d.ts.map +0 -1
  287. package/dist/Model/Repository/internal/internal.js +0 -316
  288. package/dist/Model/Repository/legacy.d.ts +0 -19
  289. package/dist/Model/Repository/legacy.d.ts.map +0 -1
  290. package/dist/Model/Repository/legacy.js +0 -2
  291. package/dist/Model/Repository/makeRepo.d.ts +0 -49
  292. package/dist/Model/Repository/makeRepo.d.ts.map +0 -1
  293. package/dist/Model/Repository/makeRepo.js +0 -24
  294. package/dist/Model/Repository/service.d.ts +0 -89
  295. package/dist/Model/Repository/service.d.ts.map +0 -1
  296. package/dist/Model/Repository/service.js +0 -2
  297. package/dist/Model/Repository/validation.d.ts +0 -42
  298. package/dist/Model/Repository/validation.d.ts.map +0 -1
  299. package/dist/Model/Repository/validation.js +0 -32
  300. package/dist/Model/Repository.d.ts +0 -6
  301. package/dist/Model/Repository.d.ts.map +0 -1
  302. package/dist/Model/Repository.js +0 -6
  303. package/dist/Model/dsl.d.ts +0 -32
  304. package/dist/Model/dsl.d.ts.map +0 -1
  305. package/dist/Model/dsl.js +0 -44
  306. package/dist/Model/filter/filterApi.d.ts +0 -30
  307. package/dist/Model/filter/filterApi.d.ts.map +0 -1
  308. package/dist/Model/filter/filterApi.js +0 -2
  309. package/dist/Model/filter/types/errors.d.ts +0 -29
  310. package/dist/Model/filter/types/errors.d.ts.map +0 -1
  311. package/dist/Model/filter/types/errors.js +0 -2
  312. package/dist/Model/filter/types/fields.d.ts +0 -15
  313. package/dist/Model/filter/types/fields.d.ts.map +0 -1
  314. package/dist/Model/filter/types/fields.js +0 -2
  315. package/dist/Model/filter/types/path/common.d.ts +0 -316
  316. package/dist/Model/filter/types/path/common.d.ts.map +0 -1
  317. package/dist/Model/filter/types/path/common.js +0 -2
  318. package/dist/Model/filter/types/path/eager.d.ts +0 -95
  319. package/dist/Model/filter/types/path/eager.d.ts.map +0 -1
  320. package/dist/Model/filter/types/path/eager.js +0 -31
  321. package/dist/Model/filter/types/path/index.d.ts +0 -4
  322. package/dist/Model/filter/types/path/index.d.ts.map +0 -1
  323. package/dist/Model/filter/types/path/index.js +0 -3
  324. package/dist/Model/filter/types/utils.d.ts +0 -79
  325. package/dist/Model/filter/types/utils.d.ts.map +0 -1
  326. package/dist/Model/filter/types/utils.js +0 -2
  327. package/dist/Model/filter/types/validator.d.ts +0 -30
  328. package/dist/Model/filter/types/validator.d.ts.map +0 -1
  329. package/dist/Model/filter/types/validator.js +0 -2
  330. package/dist/Model/filter/types.d.ts +0 -5
  331. package/dist/Model/filter/types.d.ts.map +0 -1
  332. package/dist/Model/filter/types.js +0 -7
  333. package/dist/Model/query/dsl.d.ts +0 -248
  334. package/dist/Model/query/dsl.d.ts.map +0 -1
  335. package/dist/Model/query/dsl.js +0 -104
  336. package/dist/Model/query/new-kid-interpreter.d.ts +0 -28
  337. package/dist/Model/query/new-kid-interpreter.d.ts.map +0 -1
  338. package/dist/Model/query/new-kid-interpreter.js +0 -165
  339. package/dist/Model/query.d.ts +0 -15
  340. package/dist/Model/query.d.ts.map +0 -1
  341. package/dist/Model/query.js +0 -3
  342. package/dist/Model.d.ts +0 -4
  343. package/dist/Model.d.ts.map +0 -1
  344. package/dist/Model.js +0 -4
  345. package/dist/Operations.d.ts +0 -55
  346. package/dist/Operations.d.ts.map +0 -1
  347. package/dist/Operations.js +0 -102
  348. package/dist/OperationsRepo.d.ts +0 -41
  349. package/dist/OperationsRepo.d.ts.map +0 -1
  350. package/dist/OperationsRepo.js +0 -14
  351. package/dist/QueueMaker/service.d.ts +0 -11
  352. package/dist/QueueMaker/service.d.ts.map +0 -1
  353. package/dist/QueueMaker/service.js +0 -4
  354. package/dist/RequestContext.d.ts +0 -63
  355. package/dist/RequestContext.d.ts.map +0 -1
  356. package/dist/RequestContext.js +0 -49
  357. package/dist/Store/ContextMapContainer.d.ts +0 -14
  358. package/dist/Store/ContextMapContainer.d.ts.map +0 -1
  359. package/dist/Store/ContextMapContainer.js +0 -16
  360. package/dist/Store/service.d.ts +0 -108
  361. package/dist/Store/service.d.ts.map +0 -1
  362. package/dist/Store/service.js +0 -71
  363. package/dist/Store.d.ts +0 -2
  364. package/dist/Store.d.ts.map +0 -1
  365. package/dist/Store.js +0 -2
  366. package/dist/adapters/SQL/Model.d.ts.map +0 -1
  367. package/dist/adapters/SQL/Model.js +0 -478
  368. package/dist/adapters/SQL.d.ts.map +0 -1
  369. package/dist/adapters/ServiceBus.d.ts.map +0 -1
  370. package/dist/adapters/ServiceBus.js +0 -99
  371. package/dist/adapters/cosmos-client.d.ts.map +0 -1
  372. package/dist/adapters/cosmos-client.js +0 -9
  373. package/dist/adapters/index.d.ts +0 -2
  374. package/dist/adapters/index.d.ts.map +0 -1
  375. package/dist/adapters/index.js +0 -2
  376. package/dist/adapters/logger.d.ts +0 -9
  377. package/dist/adapters/logger.d.ts.map +0 -1
  378. package/dist/adapters/logger.js +0 -3
  379. package/dist/adapters/memQueue.d.ts.map +0 -1
  380. package/dist/adapters/memQueue.js +0 -20
  381. package/dist/adapters/mongo-client.d.ts.map +0 -1
  382. package/dist/adapters/mongo-client.js +0 -13
  383. package/dist/adapters/redis-client.d.ts.map +0 -1
  384. package/dist/adapters/redis-client.js +0 -94
  385. package/dist/api/ContextProvider.d.ts +0 -31
  386. package/dist/api/ContextProvider.d.ts.map +0 -1
  387. package/dist/api/ContextProvider.js +0 -38
  388. package/dist/api/codec.d.ts.map +0 -1
  389. package/dist/api/codec.js +0 -5
  390. package/dist/api/internal/RequestContextMiddleware.d.ts +0 -5
  391. package/dist/api/internal/RequestContextMiddleware.d.ts.map +0 -1
  392. package/dist/api/internal/RequestContextMiddleware.js +0 -35
  393. package/dist/api/internal/auth.d.ts +0 -15
  394. package/dist/api/internal/auth.d.ts.map +0 -1
  395. package/dist/api/internal/auth.js +0 -47
  396. package/dist/api/internal/events.d.ts +0 -9
  397. package/dist/api/internal/events.d.ts.map +0 -1
  398. package/dist/api/internal/events.js +0 -42
  399. package/dist/api/internal/health.d.ts.map +0 -1
  400. package/dist/api/internal/health.js +0 -5
  401. package/dist/api/layerUtils.d.ts.map +0 -1
  402. package/dist/api/layerUtils.js +0 -16
  403. package/dist/api/middlewares.d.ts.map +0 -1
  404. package/dist/api/reportError.d.ts.map +0 -1
  405. package/dist/api/reportError.js +0 -27
  406. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +0 -1
  407. package/dist/api/routing/middleware/middleware.d.ts +0 -9
  408. package/dist/api/routing/middleware/middleware.d.ts.map +0 -1
  409. package/dist/api/routing/middleware/middleware.js +0 -92
  410. package/dist/api/routing/middleware.d.ts.map +0 -1
  411. package/dist/api/routing/schema/jwt.d.ts.map +0 -1
  412. package/dist/api/routing/schema/jwt.js +0 -12
  413. package/dist/api/routing/tsort.d.ts.map +0 -1
  414. package/dist/api/routing/tsort.js +0 -51
  415. package/dist/api/routing/utils.d.ts.map +0 -1
  416. package/dist/api/routing/utils.js +0 -44
  417. package/dist/api/routing.d.ts +0 -138
  418. package/dist/api/routing.d.ts.map +0 -1
  419. package/dist/api/routing.js +0 -166
  420. package/dist/api/setupRequest.d.ts +0 -12
  421. package/dist/api/setupRequest.d.ts.map +0 -1
  422. package/dist/api/setupRequest.js +0 -44
  423. package/dist/api/util.d.ts.map +0 -1
  424. package/dist/api/util.js +0 -14
  425. package/eslint.config.mjs +0 -24
  426. package/src/Emailer/service.ts +0 -52
  427. package/src/Emailer.ts +0 -1
  428. package/src/Model/Repository/ext.ts +0 -283
  429. package/src/Model/Repository/internal/internal.ts +0 -577
  430. package/src/Model/Repository/legacy.ts +0 -27
  431. package/src/Model/Repository/makeRepo.ts +0 -139
  432. package/src/Model/Repository/service.ts +0 -627
  433. package/src/Model/Repository/validation.ts +0 -31
  434. package/src/Model/Repository.ts +0 -5
  435. package/src/Model/dsl.ts +0 -128
  436. package/src/Model/filter/filterApi.ts +0 -60
  437. package/src/Model/filter/types/errors.ts +0 -47
  438. package/src/Model/filter/types/fields.ts +0 -50
  439. package/src/Model/filter/types/path/common.ts +0 -404
  440. package/src/Model/filter/types/path/eager.ts +0 -298
  441. package/src/Model/filter/types/path/index.ts +0 -4
  442. package/src/Model/filter/types/utils.ts +0 -128
  443. package/src/Model/filter/types/validator.ts +0 -46
  444. package/src/Model/filter/types.ts +0 -6
  445. package/src/Model/query/dsl.ts +0 -2110
  446. package/src/Model/query/new-kid-interpreter.ts +0 -210
  447. package/src/Model/query.ts +0 -13
  448. package/src/Model.ts +0 -3
  449. package/src/Operations.ts +0 -235
  450. package/src/OperationsRepo.ts +0 -16
  451. package/src/QueueMaker/service.ts +0 -17
  452. package/src/RequestContext.ts +0 -63
  453. package/src/Store/ContextMapContainer.ts +0 -20
  454. package/src/Store/index.test.ts.bak +0 -112
  455. package/src/Store/service.ts +0 -184
  456. package/src/Store.ts +0 -1
  457. package/src/adapters/SQL.ts +0 -1
  458. package/src/adapters/ServiceBus.ts +0 -209
  459. package/src/adapters/index.ts +0 -0
  460. package/src/adapters/logger.ts +0 -3
  461. package/src/api/internal/auth.ts +0 -68
  462. package/src/api/middlewares.ts +0 -10
  463. package/src/api/routing/middleware.ts +0 -6
  464. package/src/api/routing.ts +0 -598
  465. package/src/api/setupRequest.ts +0 -84
  466. package/tsconfig.json.bak +0 -12
  467. /package/dist/{adapters/SQL.d.ts → SQL.d.ts} +0 -0
  468. /package/dist/{api/codec.d.ts → codec.d.ts} +0 -0
  469. /package/dist/{api/internal → internal}/health.d.ts +0 -0
  470. /package/dist/{api/middlewares.d.ts → middlewares.d.ts} +0 -0
  471. /package/dist/{api/routing → routing}/schema/jwt.d.ts +0 -0
  472. /package/dist/{api/routing → routing}/tsort.d.ts +0 -0
  473. /package/dist/{api/util.d.ts → util.d.ts} +0 -0
  474. /package/src/{api/codec.ts → codec.ts} +0 -0
  475. /package/src/{api/internal → internal}/health.ts +0 -0
  476. /package/src/{api/routing → routing}/tsort.ts +0 -0
  477. /package/src/{api/util.ts → util.ts} +0 -0
@@ -1,44 +0,0 @@
1
- import { Effect, Layer, Tracer } from "effect-app";
2
- import { NonEmptyString255 } from "effect-app/Schema";
3
- import { LocaleRef, RequestContext, spanAttributes } from "../RequestContext.js";
4
- import { ContextMapContainer } from "../Store/ContextMapContainer.js";
5
- import { storeId } from "../Store/Memory.js";
6
- export const getRequestContext = Effect
7
- .all({
8
- span: Effect.currentSpan.pipe(Effect.orDie),
9
- locale: LocaleRef.asEffect(),
10
- namespace: storeId.asEffect()
11
- })
12
- .pipe(Effect.map(({ locale, namespace, span }) => new RequestContext({
13
- span: Tracer.externalSpan(span),
14
- locale,
15
- namespace,
16
- name: NonEmptyString255(span.name)
17
- })));
18
- export const getRC = Effect.all({
19
- locale: LocaleRef.asEffect(),
20
- namespace: storeId.asEffect()
21
- });
22
- const withRequestSpan = (name = "request", options) => (f) => Effect.andThen(getRC, (ctx) => f.pipe(Effect.withSpan(name, {
23
- ...options,
24
- attributes: { ...spanAttributes({ ...ctx, name: NonEmptyString255(name) }), ...options?.attributes }
25
- }, {
26
- captureStackTrace: options?.captureStackTrace ?? false
27
- }),
28
- // TODO: false
29
- // request context info is picked up directly in the logger for annotations.
30
- Effect.withLogSpan(name)));
31
- export const setupRequestContextFromCurrent = (name = "request", options) => (self) => self
32
- .pipe(withRequestSpan(name, options), Effect.provide(ContextMapContainer.layer));
33
- // TODO: consider integrating Effect.withParentSpan
34
- export function setupRequestContext(self, requestContext) {
35
- const layer = Layer.mergeAll(ContextMapContainer.layer, Layer.succeed(LocaleRef, requestContext.locale), Layer.succeed(storeId, requestContext.namespace));
36
- return self
37
- .pipe(withRequestSpan(requestContext.name), Effect.provide(layer));
38
- }
39
- export function setupRequestContextWithCustomSpan(self, requestContext, name, options) {
40
- const layer = Layer.mergeAll(ContextMapContainer.layer, Layer.succeed(LocaleRef, requestContext.locale), Layer.succeed(storeId, requestContext.namespace));
41
- return self
42
- .pipe(withRequestSpan(name, options), Effect.provide(layer));
43
- }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zZXR1cFJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUU1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNO0tBQ3BDLEdBQUcsQ0FBQztJQUNILElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNDLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO0lBQzVCLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUM7S0FDRCxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQ3pDLElBQUksY0FBYyxDQUFDO0lBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNO0lBQ04sU0FBUztJQUNULElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ25DLENBQUMsQ0FDSCxDQUNGLENBQUE7QUFFSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUM5QixNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRTtJQUM1QixTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRTtDQUM5QixDQUFDLENBQUE7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLEVBQUUsT0FBNEIsRUFBRSxFQUFFLENBQUMsQ0FBVSxDQUF5QixFQUFFLEVBQUUsQ0FDakgsTUFBTSxDQUFDLE9BQU8sQ0FDWixLQUFLLEVBQ0wsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLENBQUMsQ0FBQyxJQUFJLENBQ0osTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7SUFDcEIsR0FBRyxPQUFPO0lBQ1YsVUFBVSxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRTtDQUNyRyxFQUFFO0lBQ0QsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixJQUFJLEtBQUs7Q0FDdkQsQ0FBQztBQUNGLGNBQWM7QUFDZCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FDekIsQ0FDSixDQUFBO0FBRUgsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQ3pDLENBQUMsSUFBSSxHQUFHLFNBQVMsRUFBRSxPQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFVLElBQTRCLEVBQUUsRUFBRSxDQUM1RixJQUFJO0tBQ0QsSUFBSSxDQUNILGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQzFDLENBQUE7QUFFUCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLG1CQUFtQixDQUFVLElBQTRCLEVBQUUsY0FBOEI7SUFDdkcsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FDMUIsbUJBQW1CLENBQUMsS0FBSyxFQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQy9DLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FDakQsQ0FBQTtJQUNELE9BQU8sSUFBSTtTQUNSLElBQUksQ0FDSCxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUN0QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxpQ0FBaUMsQ0FDL0MsSUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsSUFBWSxFQUNaLE9BQTRCO0lBRTVCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQzFCLG1CQUFtQixDQUFDLEtBQUssRUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUMvQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQ2pELENBQUE7SUFDRCxPQUFPLElBQUk7U0FDUixJQUFJLENBQ0gsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FDdEIsQ0FBQTtBQUNMLENBQUMifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/api/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,0CAStE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,UAEvC"}
package/dist/api/util.js DELETED
@@ -1,14 +0,0 @@
1
- export function snipValue(value) {
2
- if (!value) {
3
- return value;
4
- }
5
- return Array.isArray(value)
6
- ? value.map(snipString)
7
- : typeof value === "string" && value.length > 50
8
- ? snipString(value)
9
- : value;
10
- }
11
- export function snipString(value) {
12
- return value.length > 255 ? value.slice(0, 255) + "...snip" : value;
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQTZDO0lBQ3JFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFO1lBQ2hELENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0FBQ3JFLENBQUMifQ==
package/eslint.config.mjs DELETED
@@ -1,24 +0,0 @@
1
- import path from "node:path"
2
- import { fileURLToPath } from "node:url"
3
- import { augmentedConfig } from "@effect-app/eslint-shared-config/eslint.base.config"
4
-
5
- const __filename = fileURLToPath(import.meta.url)
6
- const __dirname = path.dirname(__filename)
7
-
8
- export default [
9
- ...augmentedConfig(__dirname, false),
10
- {
11
- ignores: [
12
- "**/*.js",
13
- "**/*.jsx",
14
- "**/*.d.ts",
15
- "node_modules/"
16
- ]
17
- },
18
- {
19
- rules: {
20
- "@typescript-eslint/no-empty-interface": "off",
21
- "@typescript-eslint/no-explicit-any": "warn",
22
- }
23
- }
24
- ]
@@ -1,52 +0,0 @@
1
- import type { MailContent, MailData } from "@sendgrid/helpers/classes/mail.js"
2
- import type { ResponseError } from "@sendgrid/mail"
3
- import { Data, type Effect, type NonEmptyReadonlyArray, type Redacted, ServiceMap } from "effect-app"
4
- import type { Email } from "effect-app/Schema"
5
-
6
- export class SendMailError extends Data.TaggedError("SendMailError")<{
7
- readonly raw: Error | ResponseError
8
- }> {}
9
-
10
- export class Emailer extends ServiceMap.Opaque<Emailer, {
11
- sendMail: (msg: EmailMsgOptionalFrom) => Effect.Effect<void, SendMailError>
12
- }>()("effect-app/Emailer") {}
13
-
14
- export type EmailData = Email | {
15
- name?: string
16
- email: Email
17
- }
18
-
19
- export interface SendgridConfig {
20
- defaultReplyTo?: EmailData
21
- subjectPrefix: string
22
- realMail: boolean
23
- defaultFrom: EmailData
24
- apiKey: Redacted.Redacted<string>
25
- }
26
- export type EmailTemplateMsg = MailData & { templateId: string }
27
-
28
- export type EmailRecipients = EmailData | NonEmptyReadonlyArray<EmailData>
29
-
30
- export type EmailMsgBase =
31
- & Omit<MailData, "from" | "to" | "bcc" | "cc" | "content">
32
- & {
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
-
44
- export type EmailContent = { text: string } | { html: string } | { templateId: string } | {
45
- content: NonEmptyReadonlyArray<MailContent>
46
- }
47
-
48
- export type EmailMsg =
49
- & EmailMsgBase
50
- & EmailContent
51
-
52
- export type EmailMsgOptionalFrom = Omit<EmailMsgBase, "from"> & Partial<Pick<EmailMsg, "from">> & EmailContent
package/src/Emailer.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./Emailer/service.js"
@@ -1,283 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/no-unsafe-return */
3
- import { Array, Effect, Exit, type NonEmptyArray, Option, Request, RequestResolver } from "effect-app"
4
- import { type InvalidStateError, NotFoundError, type OptimisticConcurrencyException } from "effect-app/client/errors"
5
- import { type FixEnv, type PureEnv, runTerm } from "effect-app/Pure"
6
- import { AnyPureDSL } from "../dsl.js"
7
- import type { FieldValues } from "../filter/types.js"
8
- import type { Query, QueryEnd, QueryWhere } from "../query.js"
9
- import * as Q from "../query.js"
10
- import type { Repository } from "./service.js"
11
-
12
- export const extendRepo = <
13
- T,
14
- Encoded extends FieldValues,
15
- Evt,
16
- ItemType extends string,
17
- IdKey extends keyof T & keyof Encoded,
18
- RSchema,
19
- RPublish
20
- >(
21
- repo: Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>
22
- ) => {
23
- const get = (id: T[IdKey]) =>
24
- repo.find(id).pipe(
25
- Effect.flatMap(Option.match({
26
- onNone: () => Effect.fail(new NotFoundError<ItemType>({ type: repo.itemType, id })),
27
- onSome: Effect.succeed
28
- }))
29
- )
30
- function saveManyWithPure_<
31
- R,
32
- A,
33
- E,
34
- S1 extends T,
35
- S2 extends T
36
- >(
37
- items: Iterable<S1>,
38
- pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
39
- ) {
40
- return saveAllWithEffectInt(
41
- runTerm(pure, [...items])
42
- )
43
- }
44
-
45
- function saveWithPure_<
46
- R,
47
- A,
48
- E,
49
- S1 extends T,
50
- S2 extends T
51
- >(
52
- item: S1,
53
- pure: Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>>
54
- ) {
55
- return saveAllWithEffectInt(
56
- runTerm(pure, item)
57
- .pipe(Effect
58
- .map(([item, events, a]) => [[item], events, a]))
59
- )
60
- }
61
-
62
- function saveAllWithEffectInt<
63
- P extends T,
64
- R,
65
- E,
66
- A
67
- >(
68
- gen: Effect.Effect<readonly [Iterable<P>, Iterable<Evt>, A], E, R>
69
- ) {
70
- return Effect.flatMap(gen, ([items, events, a]) => repo.saveAndPublish(items, events).pipe(Effect.map(() => a)))
71
- }
72
-
73
- function saveManyWithPureBatched_<
74
- R,
75
- A,
76
- E,
77
- S1 extends T,
78
- S2 extends T
79
- >(
80
- items: Iterable<S1>,
81
- pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>,
82
- batchSize = 100
83
- ) {
84
- return Effect.forEach(
85
- Array.chunksOf(items, batchSize),
86
- (batch) =>
87
- saveAllWithEffectInt(
88
- runTerm(pure, batch)
89
- )
90
- )
91
- }
92
-
93
- const queryAndSavePure: {
94
- <A, E2, R2, T2 extends T>(
95
- q: (
96
- q: Query<Encoded>
97
- ) => QueryEnd<Encoded, "one">,
98
- pure: Effect.Effect<A, E2, FixEnv<R2, Evt, T, T2>>
99
- ): Effect.Effect<
100
- A,
101
- InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E2,
102
- Exclude<R2, {
103
- env: PureEnv<Evt, T, T2>
104
- }>
105
- >
106
- <A, E2, R2, T2 extends T>(
107
- q: (
108
- q: Query<Encoded>
109
- ) =>
110
- | Query<Encoded>
111
- | QueryWhere<Encoded>
112
- | QueryEnd<Encoded, "many">,
113
- pure: Effect.Effect<A, E2, FixEnv<R2, Evt, readonly T[], readonly T2[]>>
114
- ): Effect.Effect<
115
- A,
116
- InvalidStateError | OptimisticConcurrencyException | E2,
117
- | RSchema
118
- | RPublish
119
- | Exclude<R2, {
120
- env: PureEnv<Evt, readonly T[], readonly T2[]>
121
- }>
122
- >
123
- <A, E2, R2, T2 extends T>(
124
- q: (
125
- q: Query<Encoded>
126
- ) =>
127
- | Query<Encoded>
128
- | QueryWhere<Encoded>
129
- | QueryEnd<Encoded, "many">,
130
- pure: Effect.Effect<A, E2, FixEnv<R2, Evt, readonly T[], readonly T2[]>>,
131
- batch: "batched" | number
132
- ): Effect.Effect<
133
- A[],
134
- InvalidStateError | OptimisticConcurrencyException | E2,
135
- | RSchema
136
- | RPublish
137
- | Exclude<R2, {
138
- env: PureEnv<Evt, readonly T[], readonly T2[]>
139
- }>
140
- >
141
- } = (q, pure, batch?: "batched" | number) =>
142
- repo.query(q).pipe(
143
- Effect.andThen((_) =>
144
- Array.isArray(_)
145
- ? batch === undefined
146
- ? saveManyWithPure_(_ as any, pure as any)
147
- : saveManyWithPureBatched_(_ as any, pure as any, batch === "batched" ? 100 : batch)
148
- : saveWithPure_(_ as any, pure as any)
149
- )
150
- ) as any
151
-
152
- const saveManyWithPure: {
153
- <R, A, E, S1 extends T, S2 extends T>(
154
- items: Iterable<S1>,
155
- pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>
156
- ): Effect.Effect<
157
- A,
158
- InvalidStateError | OptimisticConcurrencyException | E,
159
- | RSchema
160
- | RPublish
161
- | Exclude<R, {
162
- env: PureEnv<Evt, readonly S1[], readonly S2[]>
163
- }>
164
- >
165
- <R, A, E, S1 extends T, S2 extends T>(
166
- items: Iterable<S1>,
167
- pure: Effect.Effect<A, E, FixEnv<R, Evt, readonly S1[], readonly S2[]>>,
168
- batch: "batched" | number
169
- ): Effect.Effect<
170
- A[],
171
- InvalidStateError | OptimisticConcurrencyException | E,
172
- | RSchema
173
- | RPublish
174
- | Exclude<R, {
175
- env: PureEnv<Evt, readonly S1[], readonly S2[]>
176
- }>
177
- >
178
- } = (items, pure, batch?: "batched" | number) =>
179
- batch
180
- ? Effect.forEach(
181
- Array.chunksOf(items, batch === "batched" ? 100 : batch),
182
- (batch) =>
183
- saveAllWithEffectInt(
184
- runTerm(pure, batch)
185
- )
186
- )
187
- : saveAllWithEffectInt(
188
- runTerm(pure, [...items])
189
- )
190
-
191
- const byIdAndSaveWithPure: {
192
- <R, A, E, S2 extends T>(
193
- id: T[IdKey],
194
- pure: Effect.Effect<A, E, FixEnv<R, Evt, T, S2>>
195
- ): Effect.Effect<
196
- A,
197
- InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E,
198
- | RSchema
199
- | RPublish
200
- | Exclude<R, {
201
- env: PureEnv<Evt, T, S2>
202
- }>
203
- >
204
- } = (id, pure): any => get(id).pipe(Effect.flatMap((item) => saveWithPure_(item, pure)))
205
-
206
- type Req =
207
- & Request.Request<T, NotFoundError<ItemType>>
208
- & { _tag: `Get${ItemType}`; id: T[IdKey] }
209
- const _request = Request.tagged<Req>(`Get${repo.itemType}`)
210
-
211
- const requestResolver = RequestResolver
212
- .make((
213
- entries: NonEmptyArray<Request.Entry<Req>>,
214
- _key: unknown
215
- ) =>
216
- (repo.query(Q.where(repo.idKey as any, "in" as any, entries.map((_) => _.request.id)) as any) as Effect.Effect<
217
- readonly T[],
218
- never
219
- >)
220
- // TODO
221
- .pipe(
222
- Effect.andThen((items) =>
223
- Effect.forEach(entries, (entry) =>
224
- Request.complete(
225
- Array
226
- .findFirst(items, (_) => _[repo.idKey] === entry.request.id)
227
- .pipe(Option.match({
228
- onNone: () => Exit.fail(new NotFoundError({ type: repo.itemType, id: entry.request.id })),
229
- onSome: Exit.succeed
230
- }))
231
- )(entry), { discard: true })
232
- ),
233
- Effect
234
- .catchCause((cause) =>
235
- Effect.forEach(entries, (entry) => Request.complete(Exit.failCause(cause))(entry), { discard: true })
236
- )
237
- )
238
- )
239
- .pipe(
240
- RequestResolver.batchN(20)
241
- )
242
-
243
- const exts = {
244
- request: (id: T[IdKey]) => Effect.request(_request({ id }), requestResolver),
245
- get,
246
- log: (evt: Evt) => AnyPureDSL.log(evt),
247
- save: (...items: NonEmptyArray<T>) => repo.saveAndPublish(items),
248
- saveWithEvents: (events: Iterable<Evt>) => (...items: NonEmptyArray<T>) => repo.saveAndPublish(items, events),
249
- queryAndSavePure,
250
- saveManyWithPure,
251
- byIdAndSaveWithPure,
252
- saveWithPure: <
253
- R,
254
- A,
255
- E,
256
- S1 extends T,
257
- S2 extends T
258
- >(
259
- item: S1,
260
- pure: Effect.Effect<A, E, FixEnv<R, Evt, S1, S2>>
261
- ) =>
262
- saveAllWithEffectInt(
263
- runTerm(pure, item)
264
- .pipe(Effect.map(([item, events, a]) => [[item], events, a]))
265
- )
266
- }
267
-
268
- return {
269
- ...repo,
270
- ...exts
271
- } as Repository<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish> & typeof exts
272
- }
273
-
274
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
275
- export interface ExtendedRepository<
276
- T,
277
- Encoded extends FieldValues,
278
- Evt,
279
- ItemType extends string,
280
- IdKey extends keyof T & keyof Encoded,
281
- RSchema,
282
- RPublish
283
- > extends ReturnType<typeof extendRepo<T, Encoded, Evt, ItemType, IdKey, RSchema, RPublish>> {}