@effect-app/infra 4.0.0-beta.99 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/CHANGELOG.md +2884 -0
  2. package/_check.sh +1 -1
  3. package/dist/CUPS.d.ts +28 -9
  4. package/dist/CUPS.d.ts.map +1 -1
  5. package/dist/CUPS.js +35 -14
  6. package/dist/ClusterCosmos.d.ts +67 -0
  7. package/dist/ClusterCosmos.d.ts.map +1 -0
  8. package/dist/ClusterCosmos.js +588 -0
  9. package/dist/ClusterServiceBus.d.ts +67 -0
  10. package/dist/ClusterServiceBus.d.ts.map +1 -0
  11. package/dist/ClusterServiceBus.js +84 -0
  12. package/dist/{api/ContextProvider.d.ts → ContextProvider.d.ts} +7 -4
  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 -7
  22. package/dist/MainFiberSet.d.ts.map +1 -1
  23. package/dist/MainFiberSet.js +22 -6
  24. package/dist/QueueMaker/errors.d.ts +3 -1
  25. package/dist/QueueMaker/errors.d.ts.map +1 -1
  26. package/dist/QueueMaker/errors.js +4 -2
  27. package/dist/{adapters/SQL → SQL}/Model.d.ts +34 -45
  28. package/dist/SQL/Model.d.ts.map +1 -0
  29. package/dist/SQL/Model.js +469 -0
  30. package/dist/SQL.d.ts.map +1 -0
  31. package/dist/{adapters/SQL.js → SQL.js} +1 -1
  32. package/dist/Store/Cosmos/query.d.ts +16 -4
  33. package/dist/Store/Cosmos/query.d.ts.map +1 -1
  34. package/dist/Store/Cosmos/query.js +238 -42
  35. package/dist/Store/Cosmos.d.ts +2 -2
  36. package/dist/Store/Cosmos.d.ts.map +1 -1
  37. package/dist/Store/Cosmos.js +394 -319
  38. package/dist/Store/Disk.d.ts +4 -4
  39. package/dist/Store/Disk.d.ts.map +1 -1
  40. package/dist/Store/Disk.js +91 -39
  41. package/dist/Store/Memory.d.ts +7 -10
  42. package/dist/Store/Memory.d.ts.map +1 -1
  43. package/dist/Store/Memory.js +348 -78
  44. package/dist/Store/SQL/Pg.d.ts +2 -2
  45. package/dist/Store/SQL/Pg.d.ts.map +1 -1
  46. package/dist/Store/SQL/Pg.js +229 -154
  47. package/dist/Store/SQL/query.d.ts +19 -3
  48. package/dist/Store/SQL/query.d.ts.map +1 -1
  49. package/dist/Store/SQL/query.js +306 -12
  50. package/dist/Store/SQL.d.ts +22 -5
  51. package/dist/Store/SQL.d.ts.map +1 -1
  52. package/dist/Store/SQL.js +369 -98
  53. package/dist/Store/codeFilter.d.ts +4 -4
  54. package/dist/Store/codeFilter.d.ts.map +1 -1
  55. package/dist/Store/codeFilter.js +71 -22
  56. package/dist/Store/index.d.ts +6 -4
  57. package/dist/Store/index.d.ts.map +1 -1
  58. package/dist/Store/index.js +9 -6
  59. package/dist/Store/jsonDocument.d.ts +67 -0
  60. package/dist/Store/jsonDocument.d.ts.map +1 -0
  61. package/dist/Store/jsonDocument.js +107 -0
  62. package/dist/Store/utils.d.ts +21 -2
  63. package/dist/Store/utils.d.ts.map +1 -1
  64. package/dist/Store/utils.js +253 -10
  65. package/dist/WorkflowEngineCosmos.d.ts +30 -0
  66. package/dist/WorkflowEngineCosmos.d.ts.map +1 -0
  67. package/dist/WorkflowEngineCosmos.js +542 -0
  68. package/dist/WorkflowEngineSqlite.d.ts +24 -0
  69. package/dist/WorkflowEngineSqlite.d.ts.map +1 -0
  70. package/dist/WorkflowEngineSqlite.js +550 -0
  71. package/dist/arbs.d.ts +6 -3
  72. package/dist/arbs.d.ts.map +1 -1
  73. package/dist/arbs.js +20 -4
  74. package/dist/codec.d.ts.map +1 -0
  75. package/dist/codec.js +5 -0
  76. package/dist/cosmos-client.d.ts +40 -0
  77. package/dist/cosmos-client.d.ts.map +1 -0
  78. package/dist/cosmos-client.js +41 -0
  79. package/dist/errorReporter.d.ts +6 -4
  80. package/dist/errorReporter.d.ts.map +1 -1
  81. package/dist/errorReporter.js +23 -27
  82. package/dist/fileUtil.d.ts +1 -1
  83. package/dist/fileUtil.d.ts.map +1 -1
  84. package/dist/fileUtil.js +2 -2
  85. package/dist/index.d.ts +2 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +3 -2
  88. package/dist/internal/RequestContextMiddleware.d.ts +5 -0
  89. package/dist/internal/RequestContextMiddleware.d.ts.map +1 -0
  90. package/dist/internal/RequestContextMiddleware.js +45 -0
  91. package/dist/internal/auth.d.ts +53 -0
  92. package/dist/internal/auth.d.ts.map +1 -0
  93. package/dist/internal/auth.js +180 -0
  94. package/dist/internal/events.d.ts +11 -0
  95. package/dist/internal/events.d.ts.map +1 -0
  96. package/dist/internal/events.js +49 -0
  97. package/dist/{api/internal → internal}/health.d.ts +1 -1
  98. package/dist/internal/health.d.ts.map +1 -0
  99. package/dist/internal/health.js +5 -0
  100. package/dist/{api/layerUtils.d.ts → layerUtils.d.ts} +10 -2
  101. package/dist/layerUtils.d.ts.map +1 -0
  102. package/dist/layerUtils.js +17 -0
  103. package/dist/logger/jsonLogger.d.ts +1 -1
  104. package/dist/logger/jsonLogger.d.ts.map +1 -1
  105. package/dist/logger/jsonLogger.js +5 -3
  106. package/dist/logger/logFmtLogger.d.ts +1 -1
  107. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  108. package/dist/logger/logFmtLogger.js +3 -3
  109. package/dist/logger/shared.d.ts +2 -2
  110. package/dist/logger/shared.d.ts.map +1 -1
  111. package/dist/logger/shared.js +6 -6
  112. package/dist/logger.d.ts.map +1 -1
  113. package/dist/middlewares.d.ts.map +1 -0
  114. package/dist/{api/middlewares.js → middlewares.js} +1 -1
  115. package/dist/{adapters/mongo-client.d.ts → mongo-client.d.ts} +2 -1
  116. package/dist/mongo-client.d.ts.map +1 -0
  117. package/dist/mongo-client.js +15 -0
  118. package/dist/otel.d.ts +75 -0
  119. package/dist/otel.d.ts.map +1 -0
  120. package/dist/otel.js +84 -0
  121. package/dist/rateLimit.d.ts +11 -3
  122. package/dist/rateLimit.d.ts.map +1 -1
  123. package/dist/rateLimit.js +7 -12
  124. package/dist/{adapters/redis-client.d.ts → redis-client.d.ts} +4 -1
  125. package/dist/redis-client.d.ts.map +1 -0
  126. package/dist/redis-client.js +98 -0
  127. package/dist/{api/reportError.d.ts → reportError.d.ts} +1 -1
  128. package/dist/reportError.d.ts.map +1 -0
  129. package/dist/reportError.js +28 -0
  130. package/dist/{api/routing → routing}/middleware/RouterMiddleware.d.ts +2 -1
  131. package/dist/routing/middleware/RouterMiddleware.d.ts.map +1 -0
  132. package/dist/{api/routing → routing}/middleware/RouterMiddleware.js +1 -1
  133. package/dist/{api/routing → routing}/middleware/middleware.d.ts +11 -6
  134. package/dist/routing/middleware/middleware.d.ts.map +1 -0
  135. package/dist/routing/middleware/middleware.js +152 -0
  136. package/dist/{api/routing → routing}/middleware.d.ts +0 -1
  137. package/dist/routing/middleware.d.ts.map +1 -0
  138. package/dist/{api/routing → routing}/middleware.js +1 -2
  139. package/dist/routing/schema/jwt.d.ts.map +1 -0
  140. package/dist/routing/schema/jwt.js +12 -0
  141. package/dist/routing/tsort.d.ts.map +1 -0
  142. package/dist/routing/tsort.js +51 -0
  143. package/dist/{api/routing → routing}/utils.d.ts +3 -3
  144. package/dist/routing/utils.d.ts.map +1 -0
  145. package/dist/routing/utils.js +45 -0
  146. package/dist/routing.d.ts +182 -0
  147. package/dist/routing.d.ts.map +1 -0
  148. package/dist/routing.js +256 -0
  149. package/dist/test.d.ts +2 -2
  150. package/dist/test.d.ts.map +1 -1
  151. package/dist/test.js +5 -5
  152. package/dist/util.d.ts.map +1 -0
  153. package/dist/util.js +14 -0
  154. package/docs/cluster-storage.md +26 -0
  155. package/docs/workflow-engine.md +262 -0
  156. package/examples/query.ts +23 -19
  157. package/package.json +36 -364
  158. package/src/CUPS.ts +53 -14
  159. package/src/ClusterCosmos.ts +1170 -0
  160. package/src/ClusterServiceBus.ts +244 -0
  161. package/src/{api/ContextProvider.ts → ContextProvider.ts} +10 -7
  162. package/src/Emailer/Sendgrid.ts +83 -60
  163. package/src/Emailer/fake.ts +4 -4
  164. package/src/MainFiberSet.ts +31 -12
  165. package/src/QueueMaker/errors.ts +3 -1
  166. package/src/{adapters/SQL → SQL}/Model.ts +48 -47
  167. package/src/SQL.ts +1 -0
  168. package/src/Store/Cosmos/query.ts +275 -55
  169. package/src/Store/Cosmos.ts +597 -511
  170. package/src/Store/Disk.ts +145 -71
  171. package/src/Store/Memory.ts +420 -115
  172. package/src/Store/SQL/Pg.ts +352 -268
  173. package/src/Store/SQL/query.ts +366 -20
  174. package/src/Store/SQL.ts +742 -293
  175. package/src/Store/codeFilter.ts +78 -28
  176. package/src/Store/index.ts +18 -13
  177. package/src/Store/jsonDocument.ts +143 -0
  178. package/src/Store/utils.ts +307 -30
  179. package/src/WorkflowEngineCosmos.ts +749 -0
  180. package/src/WorkflowEngineSqlite.ts +813 -0
  181. package/src/arbs.ts +25 -5
  182. package/src/cosmos-client.ts +72 -0
  183. package/src/errorReporter.ts +68 -78
  184. package/src/fileUtil.ts +1 -1
  185. package/src/index.ts +2 -1
  186. package/src/{api/internal → internal}/RequestContextMiddleware.ts +23 -6
  187. package/src/internal/auth.ts +272 -0
  188. package/src/{api/internal → internal}/events.ts +18 -9
  189. package/src/{api/layerUtils.ts → layerUtils.ts} +7 -3
  190. package/src/logger/jsonLogger.ts +5 -3
  191. package/src/logger/logFmtLogger.ts +3 -3
  192. package/src/logger/shared.ts +6 -5
  193. package/src/middlewares.ts +10 -0
  194. package/src/{adapters/mongo-client.ts → mongo-client.ts} +3 -1
  195. package/src/otel.ts +177 -0
  196. package/src/rateLimit.ts +35 -24
  197. package/src/{adapters/redis-client.ts → redis-client.ts} +6 -2
  198. package/src/{api/reportError.ts → reportError.ts} +3 -2
  199. package/src/{api/routing → routing}/middleware/RouterMiddleware.ts +2 -1
  200. package/src/{api/routing → routing}/middleware/middleware.ts +75 -50
  201. package/src/routing/middleware.ts +4 -0
  202. package/src/{api/routing → routing}/schema/jwt.ts +2 -2
  203. package/src/{api/routing → routing}/utils.ts +2 -1
  204. package/src/routing.ts +823 -0
  205. package/src/test.ts +6 -6
  206. package/src/vitest.ts +1 -1
  207. package/test/arbs-magnitude.test.ts +33 -0
  208. package/test/arbs.test.ts +41 -0
  209. package/test/auth.test.ts +101 -0
  210. package/test/cluster-cosmos.test.ts +634 -0
  211. package/test/cluster-servicebus.test.ts +180 -0
  212. package/test/cluster-sqlite.test.ts +207 -0
  213. package/test/contextProvider.test.ts +11 -8
  214. package/test/controller.test.ts +23 -28
  215. package/test/cosmos-container-throughput.test.ts +80 -0
  216. package/test/cosmos-query.test.ts +368 -0
  217. package/test/dist/arbs-magnitude.test.d.ts.map +1 -0
  218. package/test/dist/arbs.test.d.ts.map +1 -0
  219. package/test/dist/auth.test.d.ts.map +1 -0
  220. package/test/dist/cluster-cosmos.test.d.ts.map +1 -0
  221. package/test/dist/cluster-servicebus.test.d.ts.map +1 -0
  222. package/test/dist/cluster-sqlite.test.d.ts.map +1 -0
  223. package/test/dist/contextProvider.test.d.ts.map +1 -1
  224. package/test/dist/controller.test.d.ts.map +1 -1
  225. package/test/dist/cosmos-container-throughput.test.d.ts.map +1 -0
  226. package/test/dist/cosmos-query.test.d.ts.map +1 -0
  227. package/test/dist/fixtures.d.ts +17 -9
  228. package/test/dist/fixtures.d.ts.map +1 -1
  229. package/test/dist/fixtures.js +8 -3
  230. package/test/dist/json-lower.test.d.ts.map +1 -0
  231. package/test/dist/query.test.d.ts.map +1 -1
  232. package/test/dist/rawQuery.test.d.ts.map +1 -1
  233. package/test/dist/repository-ext.test.d.ts.map +1 -0
  234. package/test/dist/repository-legacy-document.test.d.ts.map +1 -0
  235. package/test/dist/requires.test.d.ts.map +1 -1
  236. package/test/dist/router-generator.test.d.ts.map +1 -0
  237. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  238. package/test/dist/rpc-context-map-streaming.test.d.ts.map +1 -0
  239. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  240. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  241. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  242. package/test/dist/workflow-engine-cosmos.test.d.ts.map +1 -0
  243. package/test/dist/workflow-engine-sqlite.test.d.ts.map +1 -0
  244. package/test/fixtures.ts +7 -2
  245. package/test/json-lower.test.ts +129 -0
  246. package/test/layerUtils.test.ts +2 -2
  247. package/test/query.test.ts +1232 -42
  248. package/test/rawQuery.test.ts +432 -7
  249. package/test/repository-ext.test.ts +456 -0
  250. package/test/repository-legacy-document.test.ts +394 -0
  251. package/test/requires.test.ts +7 -3
  252. package/test/router-generator.test.ts +187 -0
  253. package/test/routing-interruptibility.test.ts +66 -0
  254. package/test/rpc-context-map-streaming.test.ts +265 -0
  255. package/test/rpc-e2e-invalidation.test.ts +421 -0
  256. package/test/rpc-multi-middleware.test.ts +17 -11
  257. package/test/rpc-stream-fullstack.test.ts +307 -0
  258. package/test/sql-store.test.ts +1202 -47
  259. package/test/validateSample.test.ts +70 -42
  260. package/test/workflow-engine-cosmos.test.ts +345 -0
  261. package/test/workflow-engine-sqlite.test.ts +297 -0
  262. package/tsconfig.examples.json +1 -1
  263. package/tsconfig.json +9 -1
  264. package/tsconfig.src.json +35 -35
  265. package/tsconfig.test.json +2 -2
  266. package/dist/Emailer/service.d.ts +0 -55
  267. package/dist/Emailer/service.d.ts.map +0 -1
  268. package/dist/Emailer/service.js +0 -6
  269. package/dist/Emailer.d.ts +0 -2
  270. package/dist/Emailer.d.ts.map +0 -1
  271. package/dist/Emailer.js +0 -2
  272. package/dist/Model/Repository/ext.d.ts +0 -41
  273. package/dist/Model/Repository/ext.d.ts.map +0 -1
  274. package/dist/Model/Repository/ext.js +0 -65
  275. package/dist/Model/Repository/internal/internal.d.ts +0 -59
  276. package/dist/Model/Repository/internal/internal.d.ts.map +0 -1
  277. package/dist/Model/Repository/internal/internal.js +0 -320
  278. package/dist/Model/Repository/legacy.d.ts +0 -19
  279. package/dist/Model/Repository/legacy.d.ts.map +0 -1
  280. package/dist/Model/Repository/legacy.js +0 -2
  281. package/dist/Model/Repository/makeRepo.d.ts +0 -49
  282. package/dist/Model/Repository/makeRepo.d.ts.map +0 -1
  283. package/dist/Model/Repository/makeRepo.js +0 -24
  284. package/dist/Model/Repository/service.d.ts +0 -89
  285. package/dist/Model/Repository/service.d.ts.map +0 -1
  286. package/dist/Model/Repository/service.js +0 -2
  287. package/dist/Model/Repository/validation.d.ts +0 -43
  288. package/dist/Model/Repository/validation.d.ts.map +0 -1
  289. package/dist/Model/Repository/validation.js +0 -32
  290. package/dist/Model/Repository.d.ts +0 -6
  291. package/dist/Model/Repository.d.ts.map +0 -1
  292. package/dist/Model/Repository.js +0 -6
  293. package/dist/Model/dsl.d.ts +0 -32
  294. package/dist/Model/dsl.d.ts.map +0 -1
  295. package/dist/Model/dsl.js +0 -44
  296. package/dist/Model/filter/filterApi.d.ts +0 -30
  297. package/dist/Model/filter/filterApi.d.ts.map +0 -1
  298. package/dist/Model/filter/filterApi.js +0 -2
  299. package/dist/Model/filter/types/errors.d.ts +0 -29
  300. package/dist/Model/filter/types/errors.d.ts.map +0 -1
  301. package/dist/Model/filter/types/errors.js +0 -2
  302. package/dist/Model/filter/types/fields.d.ts +0 -15
  303. package/dist/Model/filter/types/fields.d.ts.map +0 -1
  304. package/dist/Model/filter/types/fields.js +0 -2
  305. package/dist/Model/filter/types/path/common.d.ts +0 -316
  306. package/dist/Model/filter/types/path/common.d.ts.map +0 -1
  307. package/dist/Model/filter/types/path/common.js +0 -2
  308. package/dist/Model/filter/types/path/eager.d.ts +0 -95
  309. package/dist/Model/filter/types/path/eager.d.ts.map +0 -1
  310. package/dist/Model/filter/types/path/eager.js +0 -31
  311. package/dist/Model/filter/types/path/index.d.ts +0 -4
  312. package/dist/Model/filter/types/path/index.d.ts.map +0 -1
  313. package/dist/Model/filter/types/path/index.js +0 -3
  314. package/dist/Model/filter/types/utils.d.ts +0 -79
  315. package/dist/Model/filter/types/utils.d.ts.map +0 -1
  316. package/dist/Model/filter/types/utils.js +0 -2
  317. package/dist/Model/filter/types/validator.d.ts +0 -30
  318. package/dist/Model/filter/types/validator.d.ts.map +0 -1
  319. package/dist/Model/filter/types/validator.js +0 -2
  320. package/dist/Model/filter/types.d.ts +0 -5
  321. package/dist/Model/filter/types.d.ts.map +0 -1
  322. package/dist/Model/filter/types.js +0 -7
  323. package/dist/Model/query/dsl.d.ts +0 -248
  324. package/dist/Model/query/dsl.d.ts.map +0 -1
  325. package/dist/Model/query/dsl.js +0 -104
  326. package/dist/Model/query/new-kid-interpreter.d.ts +0 -28
  327. package/dist/Model/query/new-kid-interpreter.d.ts.map +0 -1
  328. package/dist/Model/query/new-kid-interpreter.js +0 -165
  329. package/dist/Model/query.d.ts +0 -15
  330. package/dist/Model/query.d.ts.map +0 -1
  331. package/dist/Model/query.js +0 -3
  332. package/dist/Model.d.ts +0 -4
  333. package/dist/Model.d.ts.map +0 -1
  334. package/dist/Model.js +0 -4
  335. package/dist/Operations.d.ts +0 -55
  336. package/dist/Operations.d.ts.map +0 -1
  337. package/dist/Operations.js +0 -102
  338. package/dist/OperationsRepo.d.ts +0 -41
  339. package/dist/OperationsRepo.d.ts.map +0 -1
  340. package/dist/OperationsRepo.js +0 -14
  341. package/dist/QueueMaker/SQLQueue.d.ts +0 -14
  342. package/dist/QueueMaker/SQLQueue.d.ts.map +0 -1
  343. package/dist/QueueMaker/SQLQueue.js +0 -132
  344. package/dist/QueueMaker/memQueue.d.ts +0 -11
  345. package/dist/QueueMaker/memQueue.d.ts.map +0 -1
  346. package/dist/QueueMaker/memQueue.js +0 -76
  347. package/dist/QueueMaker/sbqueue.d.ts +0 -12
  348. package/dist/QueueMaker/sbqueue.d.ts.map +0 -1
  349. package/dist/QueueMaker/sbqueue.js +0 -91
  350. package/dist/QueueMaker/service.d.ts +0 -11
  351. package/dist/QueueMaker/service.d.ts.map +0 -1
  352. package/dist/QueueMaker/service.js +0 -4
  353. package/dist/RequestContext.d.ts +0 -68
  354. package/dist/RequestContext.d.ts.map +0 -1
  355. package/dist/RequestContext.js +0 -49
  356. package/dist/RequestFiberSet.d.ts +0 -36
  357. package/dist/RequestFiberSet.d.ts.map +0 -1
  358. package/dist/RequestFiberSet.js +0 -78
  359. package/dist/Store/ContextMapContainer.d.ts +0 -25
  360. package/dist/Store/ContextMapContainer.d.ts.map +0 -1
  361. package/dist/Store/ContextMapContainer.js +0 -77
  362. package/dist/Store/service.d.ts +0 -111
  363. package/dist/Store/service.d.ts.map +0 -1
  364. package/dist/Store/service.js +0 -79
  365. package/dist/Store.d.ts +0 -2
  366. package/dist/Store.d.ts.map +0 -1
  367. package/dist/Store.js +0 -2
  368. package/dist/adapters/SQL/Model.d.ts.map +0 -1
  369. package/dist/adapters/SQL/Model.js +0 -478
  370. package/dist/adapters/SQL.d.ts.map +0 -1
  371. package/dist/adapters/ServiceBus.d.ts +0 -58
  372. package/dist/adapters/ServiceBus.d.ts.map +0 -1
  373. package/dist/adapters/ServiceBus.js +0 -99
  374. package/dist/adapters/cosmos-client.d.ts +0 -14
  375. package/dist/adapters/cosmos-client.d.ts.map +0 -1
  376. package/dist/adapters/cosmos-client.js +0 -9
  377. package/dist/adapters/index.d.ts +0 -2
  378. package/dist/adapters/index.d.ts.map +0 -1
  379. package/dist/adapters/index.js +0 -2
  380. package/dist/adapters/logger.d.ts +0 -9
  381. package/dist/adapters/logger.d.ts.map +0 -1
  382. package/dist/adapters/logger.js +0 -3
  383. package/dist/adapters/memQueue.d.ts +0 -13
  384. package/dist/adapters/memQueue.d.ts.map +0 -1
  385. package/dist/adapters/memQueue.js +0 -20
  386. package/dist/adapters/mongo-client.d.ts.map +0 -1
  387. package/dist/adapters/mongo-client.js +0 -13
  388. package/dist/adapters/redis-client.d.ts.map +0 -1
  389. package/dist/adapters/redis-client.js +0 -94
  390. package/dist/api/ContextProvider.d.ts.map +0 -1
  391. package/dist/api/ContextProvider.js +0 -38
  392. package/dist/api/codec.d.ts.map +0 -1
  393. package/dist/api/codec.js +0 -5
  394. package/dist/api/internal/RequestContextMiddleware.d.ts +0 -5
  395. package/dist/api/internal/RequestContextMiddleware.d.ts.map +0 -1
  396. package/dist/api/internal/RequestContextMiddleware.js +0 -35
  397. package/dist/api/internal/auth.d.ts +0 -15
  398. package/dist/api/internal/auth.d.ts.map +0 -1
  399. package/dist/api/internal/auth.js +0 -47
  400. package/dist/api/internal/events.d.ts +0 -9
  401. package/dist/api/internal/events.d.ts.map +0 -1
  402. package/dist/api/internal/events.js +0 -42
  403. package/dist/api/internal/health.d.ts.map +0 -1
  404. package/dist/api/internal/health.js +0 -5
  405. package/dist/api/layerUtils.d.ts.map +0 -1
  406. package/dist/api/layerUtils.js +0 -16
  407. package/dist/api/middlewares.d.ts.map +0 -1
  408. package/dist/api/reportError.d.ts.map +0 -1
  409. package/dist/api/reportError.js +0 -27
  410. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +0 -1
  411. package/dist/api/routing/middleware/middleware.d.ts.map +0 -1
  412. package/dist/api/routing/middleware/middleware.js +0 -130
  413. package/dist/api/routing/middleware.d.ts.map +0 -1
  414. package/dist/api/routing/schema/jwt.d.ts.map +0 -1
  415. package/dist/api/routing/schema/jwt.js +0 -12
  416. package/dist/api/routing/tsort.d.ts.map +0 -1
  417. package/dist/api/routing/tsort.js +0 -51
  418. package/dist/api/routing/utils.d.ts.map +0 -1
  419. package/dist/api/routing/utils.js +0 -44
  420. package/dist/api/routing.d.ts +0 -134
  421. package/dist/api/routing.d.ts.map +0 -1
  422. package/dist/api/routing.js +0 -167
  423. package/dist/api/setupRequest.d.ts +0 -15
  424. package/dist/api/setupRequest.d.ts.map +0 -1
  425. package/dist/api/setupRequest.js +0 -49
  426. package/dist/api/util.d.ts.map +0 -1
  427. package/dist/api/util.js +0 -14
  428. package/eslint.config.mjs +0 -24
  429. package/src/Emailer/service.ts +0 -52
  430. package/src/Emailer.ts +0 -1
  431. package/src/Model/Repository/ext.ts +0 -283
  432. package/src/Model/Repository/internal/internal.ts +0 -580
  433. package/src/Model/Repository/legacy.ts +0 -27
  434. package/src/Model/Repository/makeRepo.ts +0 -139
  435. package/src/Model/Repository/service.ts +0 -627
  436. package/src/Model/Repository/validation.ts +0 -31
  437. package/src/Model/Repository.ts +0 -5
  438. package/src/Model/dsl.ts +0 -128
  439. package/src/Model/filter/filterApi.ts +0 -60
  440. package/src/Model/filter/types/errors.ts +0 -47
  441. package/src/Model/filter/types/fields.ts +0 -50
  442. package/src/Model/filter/types/path/common.ts +0 -404
  443. package/src/Model/filter/types/path/eager.ts +0 -298
  444. package/src/Model/filter/types/path/index.ts +0 -4
  445. package/src/Model/filter/types/utils.ts +0 -128
  446. package/src/Model/filter/types/validator.ts +0 -46
  447. package/src/Model/filter/types.ts +0 -6
  448. package/src/Model/query/dsl.ts +0 -2110
  449. package/src/Model/query/new-kid-interpreter.ts +0 -210
  450. package/src/Model/query.ts +0 -13
  451. package/src/Model.ts +0 -3
  452. package/src/Operations.ts +0 -235
  453. package/src/OperationsRepo.ts +0 -16
  454. package/src/QueueMaker/SQLQueue.ts +0 -190
  455. package/src/QueueMaker/memQueue.ts +0 -130
  456. package/src/QueueMaker/sbqueue.ts +0 -137
  457. package/src/QueueMaker/service.ts +0 -17
  458. package/src/RequestContext.ts +0 -63
  459. package/src/RequestFiberSet.ts +0 -105
  460. package/src/Store/ContextMapContainer.ts +0 -116
  461. package/src/Store/index.test.ts.bak +0 -112
  462. package/src/Store/service.ts +0 -193
  463. package/src/Store.ts +0 -1
  464. package/src/adapters/SQL.ts +0 -1
  465. package/src/adapters/ServiceBus.ts +0 -209
  466. package/src/adapters/cosmos-client.ts +0 -16
  467. package/src/adapters/index.ts +0 -0
  468. package/src/adapters/logger.ts +0 -3
  469. package/src/adapters/memQueue.ts +0 -21
  470. package/src/api/internal/auth.ts +0 -68
  471. package/src/api/middlewares.ts +0 -10
  472. package/src/api/routing/middleware.ts +0 -6
  473. package/src/api/routing.ts +0 -598
  474. package/src/api/setupRequest.ts +0 -104
  475. package/test/dist/date-query.test.d.ts.map +0 -1
  476. package/tsconfig.json.bak +0 -12
  477. /package/dist/{adapters/SQL.d.ts → SQL.d.ts} +0 -0
  478. /package/dist/{api/codec.d.ts → codec.d.ts} +0 -0
  479. /package/dist/{api/middlewares.d.ts → middlewares.d.ts} +0 -0
  480. /package/dist/{api/routing → routing}/schema/jwt.d.ts +0 -0
  481. /package/dist/{api/routing → routing}/tsort.d.ts +0 -0
  482. /package/dist/{api/util.d.ts → util.d.ts} +0 -0
  483. /package/src/{api/codec.ts → codec.ts} +0 -0
  484. /package/src/{api/internal → internal}/health.ts +0 -0
  485. /package/src/{api/routing → routing}/tsort.ts +0 -0
  486. /package/src/{api/util.ts → util.ts} +0 -0
@@ -0,0 +1,456 @@
1
+ import { describe, expect, it } from "@effect/vitest"
2
+ import * as DataDependencies from "effect-app/DataDependencies"
3
+ import * as Effect from "effect-app/Effect"
4
+ import * as Layer from "effect-app/Layer"
5
+ import { Q } from "effect-app/Model"
6
+ import { makeRepo, repositoryDependency } from "effect-app/Model/Repository"
7
+ import { RepositoryRegistryLive } from "effect-app/Model/Repository/Registry"
8
+ import * as S from "effect-app/Schema"
9
+ import { setupRequestContextFromCurrent } from "effect-app/setupRequest"
10
+ import * as Ref from "effect/Ref"
11
+ import * as Tracer from "effect/Tracer"
12
+ import { MemoryStoreLive } from "../src/Store/Memory.js"
13
+
14
+ class BatchItem extends S.Class<BatchItem>("BatchItem")({
15
+ id: S.String,
16
+ label: S.String
17
+ }) {}
18
+
19
+ class DependencyItem extends S.Class<DependencyItem>("DependencyItem")({
20
+ id: S.String,
21
+ label: repositoryDependency(S.StringId)
22
+ }) {}
23
+
24
+ class NestedDependencyItem extends S.Class<NestedDependencyItem>("NestedDependencyItem")({
25
+ id: S.String,
26
+ parts: S.Array(S.Struct({ id: repositoryDependency(S.String) }))
27
+ }) {}
28
+
29
+ const TestStoreLive = Layer.merge(MemoryStoreLive, RepositoryRegistryLive)
30
+
31
+ const A = S.TaggedStruct("A", { id: S.String })
32
+ const B = S.TaggedStruct("B", { id: S.String })
33
+ const C = S.TaggedStruct("C", { id: S.String })
34
+
35
+ const union = S.Union([A, B, C])
36
+
37
+ const a = S.Struct({ id: S.String })
38
+
39
+ const nestedSourceItem = S.TaggedStruct("source-item", {
40
+ id: S.StringId,
41
+ label: S.String
42
+ })
43
+ const nestedProjectedItem = S.TaggedStruct("source-item", {
44
+ id: S.StringId
45
+ })
46
+ type NestedProjectedItem = typeof nestedProjectedItem.Type
47
+ const nestedSource = S.Struct({
48
+ id: S.String,
49
+ items: S.NonEmptyArray(nestedSourceItem),
50
+ label: S.String
51
+ })
52
+ const nestedProjection = S.Struct({
53
+ id: S.String,
54
+ items: S.NonEmptyArray(nestedProjectedItem)
55
+ })
56
+
57
+ const nestedProjectedItemsOf = (
58
+ items: readonly [NestedProjectedItem, ...NestedProjectedItem[]]
59
+ ) => items
60
+
61
+ const nestedUnionSourceA = S.TaggedStruct("nested-a", {
62
+ id: S.String,
63
+ items: S.NonEmptyArray(nestedSourceItem),
64
+ label: S.String
65
+ })
66
+ const nestedUnionSourceB = S.TaggedStruct("nested-b", {
67
+ id: S.String,
68
+ items: S.NonEmptyArray(nestedSourceItem),
69
+ count: S.Number
70
+ })
71
+ const nestedUnionSource = S.Union([nestedUnionSourceA, nestedUnionSourceB])
72
+ const nestedUnionProjection = S.Union([
73
+ nestedUnionSourceA.mapFields((fields) => ({
74
+ id: fields.id,
75
+ _tag: fields._tag,
76
+ items: S.NonEmptyArray(nestedProjectedItem)
77
+ })),
78
+ nestedUnionSourceB.mapFields((fields) => ({
79
+ id: fields.id,
80
+ _tag: fields._tag,
81
+ items: S.NonEmptyArray(nestedProjectedItem)
82
+ }))
83
+ ])
84
+
85
+ describe("repository ext save/remove batching", () => {
86
+ it.effect("supports projecting full repository schema", () =>
87
+ Effect
88
+ .gen(function*() {
89
+ const unionRepo = yield* makeRepo("UnionItem", union, {})
90
+ const aRepo = yield* makeRepo("AItem", a, {})
91
+ const ARepo = yield* makeRepo("TaggedAItem", A, {})
92
+
93
+ expect(yield* unionRepo.query(Q.project(union))).toEqual([])
94
+ expect(yield* aRepo.query(Q.project(a))).toEqual([])
95
+ expect(yield* ARepo.query(Q.project(A))).toEqual([])
96
+ })
97
+ .pipe(
98
+ setupRequestContextFromCurrent(),
99
+ Effect.provide(TestStoreLive)
100
+ ))
101
+
102
+ it.effect("supports nested DTO subset projections", () =>
103
+ Effect
104
+ .gen(function*() {
105
+ const repo = yield* makeRepo("NestedProjectionItem", nestedSource, {})
106
+ const unionRepo = yield* makeRepo("NestedUnionProjectionItem", nestedUnionSource, {})
107
+ const result = yield* repo.query(Q.project(nestedProjection, "project"))
108
+ const unionResult = yield* unionRepo.query(Q.project(nestedUnionProjection, "project"))
109
+
110
+ result.forEach((_) => nestedProjectedItemsOf(_.items))
111
+ unionResult.forEach((_) => nestedProjectedItemsOf(_.items))
112
+ expect(result).toEqual([])
113
+ expect(unionResult).toEqual([])
114
+ })
115
+ .pipe(
116
+ setupRequestContextFromCurrent(),
117
+ Effect.provide(TestStoreLive)
118
+ ))
119
+
120
+ it.effect("supports save batching overload", () =>
121
+ Effect
122
+ .gen(function*() {
123
+ const repo = yield* makeRepo("BatchItem", BatchItem, {})
124
+ const items = [
125
+ new BatchItem({ id: "1", label: "one" }),
126
+ new BatchItem({ id: "2", label: "two" }),
127
+ new BatchItem({ id: "3", label: "three" }),
128
+ new BatchItem({ id: "4", label: "four" })
129
+ ] as const
130
+
131
+ yield* repo.save(items, { batch: 2 })
132
+
133
+ const all = yield* repo.all
134
+ expect(all).toHaveLength(4)
135
+ expect(all.map((_) => _.id).toSorted()).toEqual(["1", "2", "3", "4"])
136
+ })
137
+ .pipe(
138
+ setupRequestContextFromCurrent(),
139
+ Effect.provide(TestStoreLive)
140
+ ))
141
+
142
+ it.effect("supports remove batching overload", () =>
143
+ Effect
144
+ .gen(function*() {
145
+ const repo = yield* makeRepo("BatchItem", BatchItem, {})
146
+ const items = [
147
+ new BatchItem({ id: "1", label: "one" }),
148
+ new BatchItem({ id: "2", label: "two" }),
149
+ new BatchItem({ id: "3", label: "three" }),
150
+ new BatchItem({ id: "4", label: "four" })
151
+ ] as const
152
+
153
+ yield* repo.save(items)
154
+ yield* repo.remove([items[0], items[1], items[2]], { batch: true })
155
+
156
+ const all = yield* repo.all
157
+ expect(all).toHaveLength(1)
158
+ expect(all[0]?.id).toBe("4")
159
+ })
160
+ .pipe(
161
+ setupRequestContextFromCurrent(),
162
+ Effect.provide(TestStoreLive)
163
+ ))
164
+
165
+ it.effect("records repository read and write dependencies", () =>
166
+ Effect
167
+ .gen(function*() {
168
+ const readsRef = yield* Ref.make(DataDependencies.empty())
169
+ const writesRef = yield* Ref.make(DataDependencies.empty())
170
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
171
+
172
+ yield* Effect
173
+ .gen(function*() {
174
+ const repo = yield* makeRepo("DependencyItem", BatchItem, {})
175
+ yield* repo.save(new BatchItem({ id: "1", label: "one" }))
176
+ yield* repo.all
177
+ yield* repo.find("1")
178
+ yield* repo.removeById("1")
179
+ })
180
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
181
+
182
+ expect(yield* Ref.get(readsRef)).toEqual(new Set([DataDependencies.repo("DependencyItem")]))
183
+ expect(yield* Ref.get(writesRef)).toEqual(new Set([DataDependencies.repo("DependencyItem", ["1"])]))
184
+ })
185
+ .pipe(
186
+ setupRequestContextFromCurrent(),
187
+ Effect.provide(TestStoreLive)
188
+ ))
189
+
190
+ it.effect("narrows direct repository reads to the requested entity", () =>
191
+ Effect
192
+ .gen(function*() {
193
+ const readsRef = yield* Ref.make(DataDependencies.empty())
194
+ const writesRef = yield* Ref.make(DataDependencies.empty())
195
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
196
+
197
+ yield* Effect
198
+ .gen(function*() {
199
+ const repo = yield* makeRepo("DependencyItem", BatchItem, {})
200
+ yield* repo.find("1")
201
+ })
202
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
203
+
204
+ expect(yield* Ref.get(readsRef)).toEqual(new Set([DataDependencies.repo("DependencyItem", ["1"])]))
205
+ })
206
+ .pipe(
207
+ setupRequestContextFromCurrent(),
208
+ Effect.provide(TestStoreLive)
209
+ ))
210
+
211
+ it("matches entity dependencies by overlapping ids with a coarse fallback", () => {
212
+ const item1 = new Set([DataDependencies.repo("DependencyItem", ["1"])])
213
+ const item2 = new Set([DataDependencies.repo("DependencyItem", ["2"])])
214
+ const collection = new Set([DataDependencies.repo("DependencyItem")])
215
+
216
+ expect(DataDependencies.intersects(item1, item2)).toBe(false)
217
+ expect(DataDependencies.intersects(item1, item1)).toBe(true)
218
+ expect(DataDependencies.intersects(collection, item2)).toBe(true)
219
+ })
220
+
221
+ it("decodes repository dependencies produced before entity ids were added", () => {
222
+ expect(
223
+ S.decodeUnknownSync(DataDependencies.DataDependency)({
224
+ type: "repo",
225
+ name: "DependencyItem"
226
+ })
227
+ )
228
+ .toEqual(DataDependencies.repo("DependencyItem"))
229
+ })
230
+
231
+ it.effect("derives matching read and write scopes from a schema annotation", () =>
232
+ Effect
233
+ .gen(function*() {
234
+ const readsRef = yield* Ref.make(DataDependencies.empty())
235
+ const writesRef = yield* Ref.make(DataDependencies.empty())
236
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
237
+
238
+ yield* Effect
239
+ .gen(function*() {
240
+ const repo = yield* makeRepo("DependencyItem", DependencyItem, {})
241
+ yield* repo.save(new DependencyItem({ id: "1", label: S.StringId("label-one") }))
242
+ yield* repo.query(Q.where("label", "label-one"))
243
+ })
244
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
245
+
246
+ expect(yield* Ref.get(readsRef)).toEqual(new Set([DataDependencies.repo("DependencyItem", ["label-one"])]))
247
+ expect(yield* Ref.get(writesRef)).toEqual(
248
+ new Set([DataDependencies.repo("DependencyItem", ["1", "label-one"])])
249
+ )
250
+ })
251
+ .pipe(
252
+ setupRequestContextFromCurrent(),
253
+ Effect.provide(TestStoreLive)
254
+ ))
255
+
256
+ it.effect("derives a nested annotated relationship scope from whereSome", () =>
257
+ Effect
258
+ .gen(function*() {
259
+ const readsRef = yield* Ref.make(DataDependencies.empty())
260
+ const writesRef = yield* Ref.make(DataDependencies.empty())
261
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
262
+
263
+ yield* Effect
264
+ .gen(function*() {
265
+ const repo = yield* makeRepo("NestedDependencyItem", NestedDependencyItem, {})
266
+ yield* repo.save(new NestedDependencyItem({ id: "root", parts: [{ id: "part-1" }] }))
267
+ yield* repo.query(Q.whereSome("parts", Q.where("id", "part-1")))
268
+ })
269
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
270
+
271
+ expect(yield* Ref.get(readsRef)).toEqual(
272
+ new Set([DataDependencies.repo("NestedDependencyItem", ["part-1"])])
273
+ )
274
+ expect(yield* Ref.get(writesRef)).toEqual(
275
+ new Set([DataDependencies.repo("NestedDependencyItem", ["root", "part-1"])])
276
+ )
277
+ })
278
+ .pipe(
279
+ setupRequestContextFromCurrent(),
280
+ Effect.provide(TestStoreLive)
281
+ ))
282
+
283
+ it.effect("records previous and next relationship aliases", () =>
284
+ Effect
285
+ .gen(function*() {
286
+ const readsRef = yield* Ref.make(DataDependencies.empty())
287
+ const writesRef = yield* Ref.make(DataDependencies.empty())
288
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
289
+
290
+ yield* Effect
291
+ .gen(function*() {
292
+ const repo = yield* makeRepo("DependencyItem", BatchItem, {
293
+ dependencyIds: (item) => [item.id, `label-${item.label}`]
294
+ })
295
+ yield* repo.save(new BatchItem({ id: "1", label: "old" }))
296
+ yield* recorder.drainWrites
297
+
298
+ yield* repo.save(new BatchItem({ id: "1", label: "new" }))
299
+ expect(yield* recorder.drainWrites).toEqual(
300
+ new Set([DataDependencies.repo("DependencyItem", ["1", "label-new", "label-old"])])
301
+ )
302
+
303
+ yield* repo.removeById("1")
304
+ expect(yield* recorder.drainWrites).toEqual(
305
+ new Set([DataDependencies.repo("DependencyItem", ["1", "label-new"])])
306
+ )
307
+ })
308
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
309
+ })
310
+ .pipe(
311
+ setupRequestContextFromCurrent(),
312
+ Effect.provide(TestStoreLive)
313
+ ))
314
+
315
+ it.effect("records repository and affected-query write dependencies", () =>
316
+ Effect
317
+ .gen(function*() {
318
+ const readsRef = yield* Ref.make(DataDependencies.empty())
319
+ const writesRef = yield* Ref.make(DataDependencies.empty())
320
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
321
+
322
+ yield* Effect
323
+ .gen(function*() {
324
+ const repo = yield* makeRepo("DependencyItem", BatchItem, {
325
+ dependencyIds: (item) => [item.id, `alias-${item.id}`],
326
+ additionalWriteDependencies: (item) => [
327
+ DataDependencies.signal("DependencyItem.List", [item.label])
328
+ ]
329
+ })
330
+ yield* repo.save(new BatchItem({ id: "1", label: "one" }))
331
+ yield* DataDependencies.read(DataDependencies.signal("DependencyItem.List", ["one"]))
332
+ })
333
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
334
+
335
+ expect(yield* Ref.get(readsRef)).toEqual(
336
+ new Set([DataDependencies.signal("DependencyItem.List", ["one"])])
337
+ )
338
+ expect(yield* Ref.get(writesRef)).toEqual(
339
+ new Set([
340
+ DataDependencies.repo("DependencyItem", ["1", "alias-1"]),
341
+ DataDependencies.signal("DependencyItem.List", ["one"])
342
+ ])
343
+ )
344
+ })
345
+ .pipe(
346
+ setupRequestContextFromCurrent(),
347
+ Effect.provide(TestStoreLive)
348
+ ))
349
+
350
+ it.effect("invalidates derived dependencies from previous saves and removeById", () =>
351
+ Effect
352
+ .gen(function*() {
353
+ const readsRef = yield* Ref.make(DataDependencies.empty())
354
+ const writesRef = yield* Ref.make(DataDependencies.empty())
355
+ const recorder = DataDependencies.makeDataDependencyRecorder(readsRef, writesRef)
356
+
357
+ yield* Effect
358
+ .gen(function*() {
359
+ const repo = yield* makeRepo("DerivedDependencyItem", BatchItem, {
360
+ additionalWriteDependencies: (item) => [
361
+ DataDependencies.signal("DerivedDependencyItem.List", [item.label])
362
+ ]
363
+ })
364
+ yield* repo.save(new BatchItem({ id: "1", label: "old" }))
365
+ yield* recorder.drainWrites
366
+
367
+ yield* repo.save(new BatchItem({ id: "1", label: "new" }))
368
+ expect(yield* recorder.drainWrites).toEqual(
369
+ new Set([
370
+ DataDependencies.repo("DerivedDependencyItem", ["1"]),
371
+ DataDependencies.signal("DerivedDependencyItem.List", ["new", "old"])
372
+ ])
373
+ )
374
+
375
+ yield* repo.removeById("1")
376
+ expect(yield* recorder.drainWrites).toEqual(
377
+ new Set([
378
+ DataDependencies.repo("DerivedDependencyItem", ["1"]),
379
+ DataDependencies.signal("DerivedDependencyItem.List", ["new"])
380
+ ])
381
+ )
382
+ })
383
+ .pipe(Effect.provideService(DataDependencies.DataDependencyRecorder, recorder))
384
+ })
385
+ .pipe(
386
+ setupRequestContextFromCurrent(),
387
+ Effect.provide(TestStoreLive)
388
+ ))
389
+
390
+ it.effect("records schema timing on repository spans without codec child spans", () =>
391
+ Effect
392
+ .gen(function*() {
393
+ const spans: Tracer.NativeSpan[] = []
394
+ const tracer = Tracer.make({
395
+ span(options) {
396
+ const span = new Tracer.NativeSpan(options)
397
+ spans.push(span)
398
+ return span
399
+ }
400
+ })
401
+
402
+ yield* Effect
403
+ .gen(function*() {
404
+ const repo = yield* makeRepo("TelemetryItem", BatchItem, {})
405
+ yield* repo.save(new BatchItem({ id: "1", label: "one" }))
406
+ yield* repo.all
407
+ })
408
+ .pipe(Effect.provideService(Tracer.Tracer, tracer))
409
+
410
+ expect(spans.map((_) => _.name)).not.toContain("parseMany")
411
+ expect(spans.map((_) => _.name)).not.toContain("encodeMany")
412
+
413
+ const saveSpan = spans.find((_) => _.name === "Repository.saveAndPublish")
414
+ const allSpan = spans.find((_) => _.name === "Repository.all")
415
+ expect(saveSpan?.attributes.get("app.schema.encode.duration_ms")).toEqual(expect.any(Number))
416
+ expect(saveSpan?.attributes.get("app.schema.item_count")).toBe(1)
417
+ expect(saveSpan?.attributes.get("app.schema.slow")).toBe(false)
418
+ expect(saveSpan?.attributes.get("db.operation.duration_ms")).toEqual(expect.any(Number))
419
+ expect(allSpan?.attributes.get("app.schema.decode.duration_ms")).toEqual(expect.any(Number))
420
+ expect(allSpan?.attributes.get("app.schema.item_count")).toBe(1)
421
+ expect(allSpan?.attributes.get("app.schema.slow")).toBe(false)
422
+ expect(allSpan?.attributes.get("db.operation.duration_ms")).toEqual(expect.any(Number))
423
+ })
424
+ .pipe(
425
+ setupRequestContextFromCurrent(),
426
+ Effect.provide(TestStoreLive)
427
+ ))
428
+
429
+ it.effect("annotates entity state tag on encode when items are tagged", () =>
430
+ Effect
431
+ .gen(function*() {
432
+ const spans: Tracer.NativeSpan[] = []
433
+ const tracer = Tracer.make({
434
+ span(options) {
435
+ const span = new Tracer.NativeSpan(options)
436
+ spans.push(span)
437
+ return span
438
+ }
439
+ })
440
+
441
+ yield* Effect
442
+ .gen(function*() {
443
+ const repo = yield* makeRepo("TaggedTelemetry", union, {})
444
+ yield* repo.save({ _tag: "A", id: "1" })
445
+ })
446
+ .pipe(Effect.provideService(Tracer.Tracer, tracer))
447
+
448
+ const saveSpan = spans.find((_) => _.name === "Repository.saveAndPublish")
449
+ expect(saveSpan?.attributes.get("app.entity.state")).toBe("A")
450
+ expect(saveSpan?.attributes.get("app.schema.slow")).toBe(false)
451
+ })
452
+ .pipe(
453
+ setupRequestContextFromCurrent(),
454
+ Effect.provide(TestStoreLive)
455
+ ))
456
+ })