@effect-app/infra 4.0.0-beta.2 → 4.0.0-beta.200

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 (308) hide show
  1. package/CHANGELOG.md +1514 -0
  2. package/_check.sh +1 -1
  3. package/dist/CUPS.d.ts +15 -7
  4. package/dist/CUPS.d.ts.map +1 -1
  5. package/dist/CUPS.js +10 -12
  6. package/dist/Emailer/Sendgrid.d.ts +14 -14
  7. package/dist/Emailer/Sendgrid.d.ts.map +1 -1
  8. package/dist/Emailer/Sendgrid.js +16 -15
  9. package/dist/Emailer/fake.d.ts +1 -1
  10. package/dist/Emailer/service.d.ts +11 -5
  11. package/dist/Emailer/service.d.ts.map +1 -1
  12. package/dist/Emailer/service.js +3 -3
  13. package/dist/Emailer.d.ts +1 -1
  14. package/dist/MainFiberSet.d.ts +9 -9
  15. package/dist/MainFiberSet.d.ts.map +1 -1
  16. package/dist/MainFiberSet.js +3 -3
  17. package/dist/Model/Repository/Registry.d.ts +20 -0
  18. package/dist/Model/Repository/Registry.d.ts.map +1 -0
  19. package/dist/Model/Repository/Registry.js +17 -0
  20. package/dist/Model/Repository/ext.d.ts +33 -15
  21. package/dist/Model/Repository/ext.d.ts.map +1 -1
  22. package/dist/Model/Repository/ext.js +54 -2
  23. package/dist/Model/Repository/internal/internal.d.ts +6 -6
  24. package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
  25. package/dist/Model/Repository/internal/internal.js +43 -32
  26. package/dist/Model/Repository/legacy.d.ts +1 -1
  27. package/dist/Model/Repository/makeRepo.d.ts +7 -6
  28. package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
  29. package/dist/Model/Repository/makeRepo.js +5 -1
  30. package/dist/Model/Repository/service.d.ts +28 -23
  31. package/dist/Model/Repository/service.d.ts.map +1 -1
  32. package/dist/Model/Repository/validation.d.ts +142 -17
  33. package/dist/Model/Repository/validation.d.ts.map +1 -1
  34. package/dist/Model/Repository/validation.js +5 -5
  35. package/dist/Model/Repository.d.ts +2 -1
  36. package/dist/Model/Repository.d.ts.map +1 -1
  37. package/dist/Model/Repository.js +2 -1
  38. package/dist/Model/dsl.d.ts +4 -4
  39. package/dist/Model/dsl.d.ts.map +1 -1
  40. package/dist/Model/filter/filterApi.d.ts +5 -5
  41. package/dist/Model/filter/filterApi.d.ts.map +1 -1
  42. package/dist/Model/filter/types/errors.d.ts +1 -1
  43. package/dist/Model/filter/types/fields.d.ts +1 -1
  44. package/dist/Model/filter/types/path/common.d.ts +1 -1
  45. package/dist/Model/filter/types/path/eager.d.ts +1 -1
  46. package/dist/Model/filter/types/path/eager.d.ts.map +1 -1
  47. package/dist/Model/filter/types/path/eager.js +1 -1
  48. package/dist/Model/filter/types/path/index.d.ts +1 -1
  49. package/dist/Model/filter/types/utils.d.ts +1 -1
  50. package/dist/Model/filter/types/validator.d.ts +1 -1
  51. package/dist/Model/filter/types.d.ts +1 -1
  52. package/dist/Model/query/dsl.d.ts +25 -25
  53. package/dist/Model/query/dsl.d.ts.map +1 -1
  54. package/dist/Model/query/new-kid-interpreter.d.ts +6 -6
  55. package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
  56. package/dist/Model/query/new-kid-interpreter.js +3 -3
  57. package/dist/Model/query.d.ts +1 -1
  58. package/dist/Model.d.ts +2 -1
  59. package/dist/Model.d.ts.map +1 -1
  60. package/dist/Model.js +2 -1
  61. package/dist/QueueMaker/SQLQueue.d.ts +6 -8
  62. package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
  63. package/dist/QueueMaker/SQLQueue.js +106 -115
  64. package/dist/QueueMaker/errors.d.ts +2 -2
  65. package/dist/QueueMaker/errors.d.ts.map +1 -1
  66. package/dist/QueueMaker/memQueue.d.ts +7 -4
  67. package/dist/QueueMaker/memQueue.d.ts.map +1 -1
  68. package/dist/QueueMaker/memQueue.js +52 -62
  69. package/dist/QueueMaker/sbqueue.d.ts +6 -3
  70. package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
  71. package/dist/QueueMaker/sbqueue.js +39 -53
  72. package/dist/QueueMaker/service.d.ts +1 -1
  73. package/dist/RequestContext.d.ts +117 -31
  74. package/dist/RequestContext.d.ts.map +1 -1
  75. package/dist/RequestContext.js +7 -8
  76. package/dist/RequestFiberSet.d.ts +7 -7
  77. package/dist/RequestFiberSet.d.ts.map +1 -1
  78. package/dist/RequestFiberSet.js +5 -5
  79. package/dist/Store/ContextMapContainer.d.ts +20 -4
  80. package/dist/Store/ContextMapContainer.d.ts.map +1 -1
  81. package/dist/Store/ContextMapContainer.js +13 -3
  82. package/dist/Store/Cosmos/query.d.ts +1 -1
  83. package/dist/Store/Cosmos/query.d.ts.map +1 -1
  84. package/dist/Store/Cosmos/query.js +10 -12
  85. package/dist/Store/Cosmos.d.ts +1 -1
  86. package/dist/Store/Cosmos.d.ts.map +1 -1
  87. package/dist/Store/Cosmos.js +318 -240
  88. package/dist/Store/Disk.d.ts +2 -2
  89. package/dist/Store/Disk.d.ts.map +1 -1
  90. package/dist/Store/Disk.js +25 -22
  91. package/dist/Store/Memory.d.ts +4 -4
  92. package/dist/Store/Memory.d.ts.map +1 -1
  93. package/dist/Store/Memory.js +27 -22
  94. package/dist/Store/SQL/Pg.d.ts +4 -0
  95. package/dist/Store/SQL/Pg.d.ts.map +1 -0
  96. package/dist/Store/SQL/Pg.js +189 -0
  97. package/dist/Store/SQL/query.d.ts +38 -0
  98. package/dist/Store/SQL/query.d.ts.map +1 -0
  99. package/dist/Store/SQL/query.js +367 -0
  100. package/dist/Store/SQL.d.ts +20 -0
  101. package/dist/Store/SQL.d.ts.map +1 -0
  102. package/dist/Store/SQL.js +381 -0
  103. package/dist/Store/codeFilter.d.ts +1 -1
  104. package/dist/Store/codeFilter.d.ts.map +1 -1
  105. package/dist/Store/codeFilter.js +2 -1
  106. package/dist/Store/index.d.ts +5 -2
  107. package/dist/Store/index.d.ts.map +1 -1
  108. package/dist/Store/index.js +15 -3
  109. package/dist/Store/service.d.ts +18 -7
  110. package/dist/Store/service.d.ts.map +1 -1
  111. package/dist/Store/service.js +24 -6
  112. package/dist/Store/utils.d.ts +1 -1
  113. package/dist/Store/utils.d.ts.map +1 -1
  114. package/dist/Store/utils.js +3 -4
  115. package/dist/Store.d.ts +1 -1
  116. package/dist/adapters/SQL/Model.d.ts +30 -47
  117. package/dist/adapters/SQL/Model.d.ts.map +1 -1
  118. package/dist/adapters/SQL/Model.js +22 -14
  119. package/dist/adapters/SQL.d.ts +1 -1
  120. package/dist/adapters/ServiceBus.d.ts +11 -11
  121. package/dist/adapters/ServiceBus.d.ts.map +1 -1
  122. package/dist/adapters/ServiceBus.js +15 -17
  123. package/dist/adapters/cosmos-client.d.ts +3 -3
  124. package/dist/adapters/cosmos-client.d.ts.map +1 -1
  125. package/dist/adapters/cosmos-client.js +3 -3
  126. package/dist/adapters/index.d.ts +8 -2
  127. package/dist/adapters/index.d.ts.map +1 -1
  128. package/dist/adapters/index.js +8 -2
  129. package/dist/adapters/logger.d.ts +2 -2
  130. package/dist/adapters/logger.d.ts.map +1 -1
  131. package/dist/adapters/memQueue.d.ts +3 -3
  132. package/dist/adapters/memQueue.d.ts.map +1 -1
  133. package/dist/adapters/memQueue.js +3 -3
  134. package/dist/adapters/mongo-client.d.ts +3 -3
  135. package/dist/adapters/mongo-client.d.ts.map +1 -1
  136. package/dist/adapters/mongo-client.js +3 -3
  137. package/dist/adapters/redis-client.d.ts +4 -4
  138. package/dist/adapters/redis-client.d.ts.map +1 -1
  139. package/dist/adapters/redis-client.js +3 -3
  140. package/dist/api/ContextProvider.d.ts +8 -8
  141. package/dist/api/ContextProvider.d.ts.map +1 -1
  142. package/dist/api/ContextProvider.js +6 -6
  143. package/dist/api/codec.d.ts +1 -1
  144. package/dist/api/internal/RequestContextMiddleware.d.ts +2 -2
  145. package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
  146. package/dist/api/internal/RequestContextMiddleware.js +2 -2
  147. package/dist/api/internal/auth.d.ts +45 -7
  148. package/dist/api/internal/auth.d.ts.map +1 -1
  149. package/dist/api/internal/auth.js +160 -29
  150. package/dist/api/internal/events.d.ts +3 -3
  151. package/dist/api/internal/events.d.ts.map +1 -1
  152. package/dist/api/internal/events.js +12 -8
  153. package/dist/api/internal/health.d.ts +1 -1
  154. package/dist/api/layerUtils.d.ts +6 -6
  155. package/dist/api/layerUtils.d.ts.map +1 -1
  156. package/dist/api/layerUtils.js +5 -5
  157. package/dist/api/middlewares.d.ts +1 -1
  158. package/dist/api/reportError.d.ts +1 -1
  159. package/dist/api/routing/middleware/RouterMiddleware.d.ts +4 -4
  160. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
  161. package/dist/api/routing/middleware/middleware.d.ts +50 -4
  162. package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
  163. package/dist/api/routing/middleware/middleware.js +79 -17
  164. package/dist/api/routing/middleware.d.ts +1 -2
  165. package/dist/api/routing/middleware.d.ts.map +1 -1
  166. package/dist/api/routing/middleware.js +1 -2
  167. package/dist/api/routing/schema/jwt.d.ts +2 -2
  168. package/dist/api/routing/schema/jwt.d.ts.map +1 -1
  169. package/dist/api/routing/schema/jwt.js +1 -1
  170. package/dist/api/routing/tsort.d.ts +1 -1
  171. package/dist/api/routing/tsort.d.ts.map +1 -1
  172. package/dist/api/routing/utils.d.ts +3 -3
  173. package/dist/api/routing/utils.d.ts.map +1 -1
  174. package/dist/api/routing.d.ts +32 -35
  175. package/dist/api/routing.d.ts.map +1 -1
  176. package/dist/api/routing.js +84 -36
  177. package/dist/api/setupRequest.d.ts +8 -5
  178. package/dist/api/setupRequest.d.ts.map +1 -1
  179. package/dist/api/setupRequest.js +14 -9
  180. package/dist/api/util.d.ts +1 -1
  181. package/dist/arbs.d.ts +1 -1
  182. package/dist/arbs.d.ts.map +1 -1
  183. package/dist/arbs.js +5 -3
  184. package/dist/errorReporter.d.ts +5 -5
  185. package/dist/errorReporter.d.ts.map +1 -1
  186. package/dist/errorReporter.js +20 -25
  187. package/dist/errors.d.ts +1 -1
  188. package/dist/fileUtil.d.ts +1 -1
  189. package/dist/fileUtil.d.ts.map +1 -1
  190. package/dist/fileUtil.js +3 -2
  191. package/dist/index.d.ts +1 -1
  192. package/dist/logger/jsonLogger.d.ts +1 -1
  193. package/dist/logger/logFmtLogger.d.ts +1 -1
  194. package/dist/logger/shared.d.ts +1 -1
  195. package/dist/logger/shared.js +2 -2
  196. package/dist/logger.d.ts +1 -1
  197. package/dist/logger.d.ts.map +1 -1
  198. package/dist/rateLimit.d.ts +9 -3
  199. package/dist/rateLimit.d.ts.map +1 -1
  200. package/dist/rateLimit.js +5 -11
  201. package/dist/test.d.ts +2 -2
  202. package/dist/test.d.ts.map +1 -1
  203. package/dist/test.js +1 -1
  204. package/dist/vitest.d.ts +1 -1
  205. package/examples/query.ts +39 -35
  206. package/package.json +41 -37
  207. package/src/CUPS.ts +9 -11
  208. package/src/Emailer/Sendgrid.ts +18 -15
  209. package/src/Emailer/service.ts +9 -3
  210. package/src/MainFiberSet.ts +5 -6
  211. package/src/Model/Repository/Registry.ts +33 -0
  212. package/src/Model/Repository/ext.ts +96 -10
  213. package/src/Model/Repository/internal/internal.ts +97 -88
  214. package/src/Model/Repository/makeRepo.ts +12 -10
  215. package/src/Model/Repository/service.ts +31 -22
  216. package/src/Model/Repository/validation.ts +4 -4
  217. package/src/Model/Repository.ts +1 -0
  218. package/src/Model/dsl.ts +3 -3
  219. package/src/Model/filter/types/path/eager.ts +1 -2
  220. package/src/Model/query/dsl.ts +18 -18
  221. package/src/Model/query/new-kid-interpreter.ts +2 -2
  222. package/src/Model.ts +1 -0
  223. package/src/QueueMaker/SQLQueue.ts +123 -154
  224. package/src/QueueMaker/memQueue.ts +85 -107
  225. package/src/QueueMaker/sbqueue.ts +54 -81
  226. package/src/RequestContext.ts +8 -10
  227. package/src/RequestFiberSet.ts +4 -4
  228. package/src/Store/ContextMapContainer.ts +41 -2
  229. package/src/Store/Cosmos/query.ts +16 -20
  230. package/src/Store/Cosmos.ts +452 -342
  231. package/src/Store/Disk.ts +52 -49
  232. package/src/Store/Memory.ts +55 -51
  233. package/src/Store/SQL/Pg.ts +318 -0
  234. package/src/Store/SQL/query.ts +409 -0
  235. package/src/Store/SQL.ts +668 -0
  236. package/src/Store/codeFilter.ts +1 -0
  237. package/src/Store/index.ts +17 -2
  238. package/src/Store/service.ts +32 -8
  239. package/src/Store/utils.ts +23 -22
  240. package/src/adapters/SQL/Model.ts +83 -72
  241. package/src/adapters/ServiceBus.ts +114 -118
  242. package/src/adapters/cosmos-client.ts +2 -2
  243. package/src/adapters/index.ts +7 -0
  244. package/src/adapters/memQueue.ts +2 -2
  245. package/src/adapters/mongo-client.ts +2 -2
  246. package/src/adapters/redis-client.ts +2 -2
  247. package/src/api/ContextProvider.ts +12 -13
  248. package/src/api/internal/RequestContextMiddleware.ts +1 -1
  249. package/src/api/internal/auth.ts +246 -44
  250. package/src/api/internal/events.ts +15 -10
  251. package/src/api/layerUtils.ts +8 -8
  252. package/src/api/routing/middleware/RouterMiddleware.ts +4 -4
  253. package/src/api/routing/middleware/middleware.ts +112 -15
  254. package/src/api/routing/middleware.ts +0 -2
  255. package/src/api/routing/schema/jwt.ts +2 -3
  256. package/src/api/routing.ts +153 -79
  257. package/src/api/setupRequest.ts +30 -10
  258. package/src/arbs.ts +4 -2
  259. package/src/errorReporter.ts +63 -75
  260. package/src/fileUtil.ts +2 -1
  261. package/src/logger/shared.ts +1 -1
  262. package/src/rateLimit.ts +30 -22
  263. package/src/test.ts +1 -1
  264. package/test/auth.test.ts +101 -0
  265. package/test/contextProvider.test.ts +11 -11
  266. package/test/controller.test.ts +27 -21
  267. package/test/dist/auth.test.d.ts.map +1 -0
  268. package/test/dist/contextProvider.test.d.ts.map +1 -1
  269. package/test/dist/controller.test.d.ts.map +1 -1
  270. package/test/dist/fixtures.d.ts +26 -12
  271. package/test/dist/fixtures.d.ts.map +1 -1
  272. package/test/dist/fixtures.js +12 -10
  273. package/test/dist/query.test.d.ts.map +1 -1
  274. package/test/dist/rawQuery.test.d.ts.map +1 -1
  275. package/test/dist/repository-ext.test.d.ts.map +1 -0
  276. package/test/dist/requires.test.d.ts.map +1 -1
  277. package/test/dist/router-generator.test.d.ts.map +1 -0
  278. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  279. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  280. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  281. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  282. package/test/dist/sql-store.test.d.ts.map +1 -0
  283. package/test/fixtures.ts +11 -9
  284. package/test/query.test.ts +216 -36
  285. package/test/rawQuery.test.ts +23 -19
  286. package/test/repository-ext.test.ts +60 -0
  287. package/test/requires.test.ts +6 -6
  288. package/test/router-generator.test.ts +180 -0
  289. package/test/routing-interruptibility.test.ts +63 -0
  290. package/test/rpc-e2e-invalidation.test.ts +507 -0
  291. package/test/rpc-multi-middleware.test.ts +79 -10
  292. package/test/rpc-stream-fullstack.test.ts +325 -0
  293. package/test/sql-store.test.ts +1064 -0
  294. package/test/validateSample.test.ts +15 -12
  295. package/tsconfig.examples.json +1 -1
  296. package/tsconfig.json +0 -1
  297. package/tsconfig.json.bak +2 -2
  298. package/tsconfig.src.json +35 -35
  299. package/tsconfig.test.json +2 -2
  300. package/dist/Operations.d.ts +0 -55
  301. package/dist/Operations.d.ts.map +0 -1
  302. package/dist/Operations.js +0 -102
  303. package/dist/OperationsRepo.d.ts +0 -41
  304. package/dist/OperationsRepo.d.ts.map +0 -1
  305. package/dist/OperationsRepo.js +0 -14
  306. package/eslint.config.mjs +0 -24
  307. package/src/Operations.ts +0 -235
  308. package/src/OperationsRepo.ts +0 -16
@@ -217,8 +217,7 @@ export namespace RefinePathValueTests {
217
217
  | { nested: { a: string; _tag: "a" } | { b: number; _tag: "b" }; _tag: "ab" }
218
218
  | { nested: { b: number; _tag: "b" } | { c: boolean; _tag: "c" }; _tag: "bc" },
219
219
  "nested._tag",
220
- "a",
221
- false
220
+ "a"
222
221
  >
223
222
 
224
223
  expectTypeOf<test10>().toEqualTypeOf<{
@@ -54,7 +54,7 @@ type ExtractFieldValuesRefined<T> = T extends QueryTogether<any, infer TFieldVal
54
54
 
55
55
  export type RelationDirection = "some" | "every"
56
56
  export type Relation = { relation: RelationDirection }
57
- export type Query<TFieldValues extends FieldValues> = QueryTogether<TFieldValues, TFieldValues, false, "initial">
57
+ export type Query<TFieldValues extends FieldValues> = QueryTogether<TFieldValues, TFieldValues>
58
58
  export type QueryWhere<
59
59
  TFieldValues extends FieldValues,
60
60
  TFieldValuesRefined extends TFieldValues = TFieldValues,
@@ -1538,7 +1538,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1538
1538
  fb: (current: Query<TFieldValues>) => QueryWhere<TFieldValues, TFieldValuesRefined2, E2>
1539
1539
  ): (
1540
1540
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1541
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2, false>
1541
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2>
1542
1542
 
1543
1543
  <
1544
1544
  TFieldValues extends FieldValues,
@@ -1555,7 +1555,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1555
1555
  ) => QueryWhere<TFieldValues, TFieldValuesRefined3, E3>
1556
1556
  ): (
1557
1557
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1558
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined3, false>
1558
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined3>
1559
1559
 
1560
1560
  <
1561
1561
  TFieldValues extends FieldValues,
@@ -1577,7 +1577,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1577
1577
  ) => QueryWhere<TFieldValues, TFieldValuesRefined4, E4>
1578
1578
  ): (
1579
1579
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1580
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined4, false>
1580
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined4>
1581
1581
 
1582
1582
  <
1583
1583
  TFieldValues extends FieldValues,
@@ -1604,7 +1604,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1604
1604
  ) => QueryWhere<TFieldValues, TFieldValuesRefined5, E5>
1605
1605
  ): (
1606
1606
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1607
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined5, false>
1607
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined5>
1608
1608
 
1609
1609
  <
1610
1610
  TFieldValues extends FieldValues,
@@ -1636,7 +1636,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1636
1636
  ) => QueryWhere<TFieldValues, TFieldValuesRefined6, E6>
1637
1637
  ): (
1638
1638
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1639
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined6, false>
1639
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined6>
1640
1640
 
1641
1641
  <
1642
1642
  TFieldValues extends FieldValues,
@@ -1673,7 +1673,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1673
1673
  ) => QueryWhere<TFieldValues, TFieldValuesRefined7, E7>
1674
1674
  ): (
1675
1675
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1676
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined7, false>
1676
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined7>
1677
1677
 
1678
1678
  <
1679
1679
  TFieldValues extends FieldValues,
@@ -1715,7 +1715,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1715
1715
  ) => QueryWhere<TFieldValues, TFieldValuesRefined8, E8>
1716
1716
  ): (
1717
1717
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1718
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2, false>
1718
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined2>
1719
1719
 
1720
1720
  <
1721
1721
  TFieldValues extends FieldValues,
@@ -1762,7 +1762,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1762
1762
  ) => QueryWhere<TFieldValues, TFieldValuesRefined9, E9>
1763
1763
  ): (
1764
1764
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1765
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined9, false>
1765
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined9>
1766
1766
 
1767
1767
  <
1768
1768
  TFieldValues extends FieldValues,
@@ -1814,7 +1814,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1814
1814
  ) => QueryWhere<TFieldValues, TFieldValuesRefined10, E10>
1815
1815
  ): (
1816
1816
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1817
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined10, false>
1817
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined10>
1818
1818
 
1819
1819
  <
1820
1820
  TFieldValues extends FieldValues,
@@ -1871,7 +1871,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1871
1871
  ) => QueryWhere<TFieldValues, TFieldValuesRefined11, E11>
1872
1872
  ): (
1873
1873
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1874
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined11, false>
1874
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined11>
1875
1875
 
1876
1876
  <
1877
1877
  TFieldValues extends FieldValues,
@@ -1933,7 +1933,7 @@ export type NestedQueriesFreeDisjointRefinement = {
1933
1933
  ) => QueryWhere<TFieldValues, TFieldValuesRefined12, E12>
1934
1934
  ): (
1935
1935
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
1936
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined12, false>
1936
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined12>
1937
1937
 
1938
1938
  <
1939
1939
  TFieldValues extends FieldValues,
@@ -2000,7 +2000,7 @@ export type NestedQueriesFreeDisjointRefinement = {
2000
2000
  ) => QueryWhere<TFieldValues, TFieldValuesRefined13, E13>
2001
2001
  ): (
2002
2002
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
2003
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined13, false>
2003
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined13>
2004
2004
 
2005
2005
  <
2006
2006
  TFieldValues extends FieldValues,
@@ -2072,7 +2072,7 @@ export type NestedQueriesFreeDisjointRefinement = {
2072
2072
  ) => QueryWhere<TFieldValues, TFieldValuesRefined14, E14>
2073
2073
  ): (
2074
2074
  current: QueryWhere<TFieldValues, TFieldValuesRefined, E>
2075
- ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined14, false>
2075
+ ) => QueryWhere<TFieldValues, TFieldValuesRefined | TFieldValuesRefined14>
2076
2076
  }
2077
2077
 
2078
2078
  export type FilterWhere =
@@ -2099,12 +2099,12 @@ export type WhereEveryOrSome =
2099
2099
  subPath: TFieldName,
2100
2100
  dude: (
2101
2101
  current: Query<TFieldValues[TFieldName][number]>
2102
- ) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number], false>,
2102
+ ) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>,
2103
2103
  ...dudes: ((
2104
- current: QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number], false>
2105
- ) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number], false>)[]
2104
+ current: QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>
2105
+ ) => QueryWhere<TFieldValues[TFieldName][number], TFieldValues[TFieldName][number]>)[]
2106
2106
  ): (
2107
2107
  current: Query<TFieldValues>
2108
- ) => QueryWhere<TFieldValues, TFieldValues, false>
2108
+ ) => QueryWhere<TFieldValues, TFieldValues>
2109
2109
  }
2110
2110
  & FilterContinuationsWithSubpath
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
3
- import { Array, identity, Match, Option, pipe, S } from "effect-app"
3
+ import { Array, identity, Match, Option, pipe, S, SchemaAST } from "effect-app"
4
4
  import { toNonEmptyArray } from "effect-app/Array"
5
5
  import { dropUndefinedT } from "effect-app/utils"
6
6
  import type { FilterResult } from "../filter/filterApi.js"
@@ -165,7 +165,7 @@ export const toFilter = <
165
165
  let select: (keyof TFieldValues | { key: string; subKeys: string[] })[] = []
166
166
  // TODO: support more complex (nested) schemas?
167
167
  if (schema) {
168
- const t = walkTransformation(schema.ast)
168
+ const t = walkTransformation(SchemaAST.toEncoded(schema.ast))
169
169
  if (S.AST.isObjects(t)) {
170
170
  select = t.propertySignatures.map((_) => _.name as string)
171
171
  for (const prop of t.propertySignatures) {
package/src/Model.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from "./Model/dsl.js"
2
2
  export * as Q from "./Model/query.js"
3
3
  export { makeRepo } from "./Model/Repository.js"
4
+ export { type RegisteredRepository, RepositoryRegistry, RepositoryRegistryLive } from "./Model/Repository.js"
@@ -1,20 +1,19 @@
1
1
  import { getRequestContext, setupRequestContextWithCustomSpan } from "@effect-app/infra/api/setupRequest"
2
2
  import { reportNonInterruptedFailure } from "@effect-app/infra/QueueMaker/errors"
3
3
  import { type QueueBase, QueueMeta } from "@effect-app/infra/QueueMaker/service"
4
- import { SqlClient } from "effect/unstable/sql"
5
4
  import { subMinutes } from "date-fns"
6
- import { Effect, Fiber, Option, S, Tracer } from "effect-app"
7
- import type { NonEmptyString255 } from "effect-app/Schema"
5
+ import { Effect, Fiber, type NonEmptyReadonlyArray, Option, S, Tracer } from "effect-app"
6
+ import { type NonEmptyString255 } from "effect-app/Schema"
8
7
  import { pretty } from "effect-app/utils"
9
- import type { NonEmptyReadonlyArray } from "effect-app"
8
+ import { SqlClient } from "effect/unstable/sql"
10
9
  import { SQLModel } from "../adapters/SQL.js"
11
10
  import { InfraLogger } from "../logger.js"
12
11
 
13
- export const QueueId = S.Number.pipe(S.brand("QueueId"))
12
+ export const QueueId = S.Finite.pipe(S.brand("QueueId"))
14
13
  export type QueueId = typeof QueueId.Type
15
14
 
16
15
  // TODO: let the model track and Auto Generate versionColumn on every update instead
17
- export function makeSQLQueue<
16
+ export const makeSQLQueue = Effect.fnUntraced(function*<
18
17
  Evt extends { id: S.StringId; _tag: string },
19
18
  DrainEvt extends { id: S.StringId; _tag: string },
20
19
  EvtE,
@@ -25,166 +24,136 @@ export function makeSQLQueue<
25
24
  schema: S.Codec<Evt, EvtE>,
26
25
  drainSchema: S.Codec<DrainEvt, DrainEvtE>
27
26
  ) {
28
- return Effect.gen(function*() {
29
- const base = {
30
- id: SQLModel.Generated(QueueId),
31
- meta: SQLModel.JsonFromString(QueueMeta),
32
- name: S.NonEmptyString255,
33
- createdAt: SQLModel.DateTimeInsert,
34
- updatedAt: SQLModel.DateTimeUpdate,
35
- // TODO: at+owner
36
- processingAt: SQLModel.FieldOption(S.Date),
37
- finishedAt: SQLModel.FieldOption(S.Date),
38
- etag: S.String // TODO: use a SQLModel thing that auto updates it?
39
- // TODO: record locking.. / optimistic locking
40
- // rowVersion: SQLModel.DateTimeFromNumberWithNow
41
- }
42
- class Queue extends SQLModel.Class<Queue>("Queue")({
43
- body: SQLModel.JsonFromString(schema),
44
- ...base
45
- }) {}
46
- class Drain extends SQLModel.Class<Drain>("Drain")({
47
- body: SQLModel.JsonFromString(drainSchema),
48
- ...base
49
- }) {}
50
- const sql = yield* SqlClient.SqlClient
27
+ const base = {
28
+ id: SQLModel.Generated(QueueId),
29
+ meta: SQLModel.JsonFromString(QueueMeta),
30
+ name: S.NonEmptyString255,
31
+ createdAt: SQLModel.DateTimeInsert,
32
+ updatedAt: SQLModel.DateTimeUpdate,
33
+ // TODO: at+owner
34
+ processingAt: SQLModel.FieldOption(S.Date),
35
+ finishedAt: SQLModel.FieldOption(S.Date),
36
+ etag: S.String // TODO: use a SQLModel thing that auto updates it?
37
+ // TODO: record locking.. / optimistic locking
38
+ // rowVersion: SQLModel.DateTimeFromNumberWithNow
39
+ }
40
+ class Queue extends SQLModel.Class<Queue>("Queue")({
41
+ body: SQLModel.JsonFromString(schema),
42
+ ...base
43
+ }) {}
44
+ class Drain extends SQLModel.Class<Drain>("Drain")({
45
+ body: SQLModel.JsonFromString(drainSchema),
46
+ ...base
47
+ }) {}
48
+ const sql = yield* SqlClient.SqlClient
51
49
 
52
- const queueRepo = yield* SQLModel.makeRepository(Queue, {
53
- tableName: "queue",
54
- spanPrefix: "QueueRepo",
55
- idColumn: "id",
56
- versionColumn: "etag"
57
- })
50
+ const queueRepo = yield* SQLModel.makeRepository(Queue, {
51
+ tableName: "queue",
52
+ spanPrefix: "QueueRepo",
53
+ idColumn: "id",
54
+ versionColumn: "etag"
55
+ })
58
56
 
59
- const drainRepo = yield* SQLModel.makeRepository(Drain, {
60
- tableName: "queue",
61
- spanPrefix: "DrainRepo",
62
- idColumn: "id",
63
- versionColumn: "etag"
64
- })
57
+ const drainRepo = yield* SQLModel.makeRepository(Drain, {
58
+ tableName: "queue",
59
+ spanPrefix: "DrainRepo",
60
+ idColumn: "id",
61
+ versionColumn: "etag"
62
+ })
65
63
 
66
- const decodeDrain = S.decodeEffect(Drain)
64
+ const decodeDrain = S.decodeEffectConcurrently(Drain)
67
65
 
68
- const drain = Effect
69
- .sync(() => subMinutes(new Date(), 15))
70
- .pipe(
71
- Effect
72
- .andThen((limit) =>
73
- sql<typeof Drain.Encoded>`SELECT *
66
+ const drain = Effect.gen(function*() {
67
+ const limit = subMinutes(new Date(), 15)
68
+ return yield* sql<typeof Drain.Encoded>`SELECT *
74
69
  FROM queue
75
70
  WHERE name = ${queueDrainName} AND finishedAt IS NULL AND (processingAt IS NULL OR processingAt < ${limit.getTime()})
76
71
  LIMIT 1`
77
- )
78
- )
72
+ })
79
73
 
80
- const q = {
81
- offer: Effect.fnUntraced(function*(body: Evt, meta: typeof QueueMeta.Type) {
82
- yield* queueRepo.insertVoid({
83
- body,
84
- meta,
85
- name: queueName,
86
- processingAt: Option.none(),
87
- finishedAt: Option.none(),
88
- etag: crypto.randomUUID()
89
- })
90
- }),
91
- take: Effect.gen(function*() {
92
- while (true) {
93
- const [first] = yield* drain.pipe(Effect.withTracerEnabled(false)) // disable sql tracer otherwise we spam it..
94
- if (first) {
95
- const dec = yield* decodeDrain(first)
96
- const { createdAt, updatedAt, ...rest } = dec
97
- return yield* drainRepo.update(
98
- { ...rest, processingAt: Option.some(new Date()) } // auto in lib , etag: crypto.randomUUID()
99
- )
100
- }
101
- if (first) return first
102
- yield* Effect.sleep(250)
74
+ const q = {
75
+ offer: Effect.fnUntraced(function*(body: Evt, meta: typeof QueueMeta.Type) {
76
+ yield* queueRepo.insertVoid(Queue.insert.make({
77
+ body,
78
+ meta,
79
+ name: queueName,
80
+ processingAt: Option.none(),
81
+ finishedAt: Option.none(),
82
+ etag: crypto.randomUUID()
83
+ }))
84
+ }),
85
+ take: Effect.gen(function*() {
86
+ while (true) {
87
+ const [first] = yield* drain.pipe(Effect.withTracerEnabled(false)) // disable sql tracer otherwise we spam it..
88
+ if (first) {
89
+ const dec = yield* decodeDrain(first)
90
+ const { createdAt, updatedAt, ...rest } = dec
91
+ return yield* drainRepo.update(
92
+ Drain.update.make({ ...rest, processingAt: Option.some(new Date()) }) // auto in lib , etag: crypto.randomUUID()
93
+ )
103
94
  }
104
- }),
105
- finish: ({ createdAt, updatedAt, ...q }: Drain) =>
106
- drainRepo.updateVoid({ ...q, finishedAt: Option.some(new Date()) }) // auto in lib , etag: crypto.randomUUID()
107
- }
108
- const queue = {
109
- publish: (...messages: NonEmptyReadonlyArray<Evt>) =>
110
- getRequestContext
95
+ if (first) return first
96
+ yield* Effect.sleep(250)
97
+ }
98
+ }),
99
+ finish: Effect.fn(function*({ createdAt, updatedAt, ...q }: Drain) {
100
+ return yield* drainRepo.updateVoid(Drain.update.make({ ...q, finishedAt: Option.some(new Date()) })) // auto in lib , etag: crypto.randomUUID()
101
+ })
102
+ }
103
+ const queue = {
104
+ publish: Effect.fn("queue.publish: " + queueName, { kind: "producer" })(function*(
105
+ ...messages: NonEmptyReadonlyArray<Evt>
106
+ ) {
107
+ yield* Effect.annotateCurrentSpan({ "message_tags": messages.map((_) => _._tag) })
108
+ const requestContext = yield* getRequestContext
109
+ yield* Effect.forEach(messages, (m) => q.offer(m, requestContext), { discard: true })
110
+ }),
111
+ drain: <DrainE, DrainR>(
112
+ handleEvent: (ks: DrainEvt) => Effect.Effect<void, DrainE, DrainR>,
113
+ sessionId?: string
114
+ ) => {
115
+ const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
116
+ const processMessage = Effect.fnUntraced(function*({ body, meta }: Drain) {
117
+ let effect = InfraLogger
118
+ .logDebug(`[${queueDrainName}] Processing incoming message`)
111
119
  .pipe(
112
- Effect.flatMap((requestContext) =>
113
- Effect
114
- .forEach(
115
- messages,
116
- (m) => q.offer(m, requestContext),
117
- {
118
- discard: true
120
+ Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }),
121
+ Effect.andThen(handleEvent(body)),
122
+ silenceAndReportError,
123
+ (_) =>
124
+ setupRequestContextWithCustomSpan(
125
+ _,
126
+ meta,
127
+ `queue.drain: ${queueDrainName}.${body._tag}`,
128
+ {
129
+ captureStackTrace: false,
130
+ kind: "consumer",
131
+ attributes: {
132
+ "queue.name": queueDrainName,
133
+ "queue.sessionId": sessionId,
134
+ "queue.input": body
119
135
  }
120
- )
121
- ),
122
- Effect.withSpan("queue.publish: " + queueName, {
123
- kind: "producer",
124
- attributes: { "message_tags": messages.map((_) => _._tag) }
125
- }, { captureStackTrace: false })
126
- ),
127
- drain: <DrainE, DrainR>(
128
- handleEvent: (ks: DrainEvt) => Effect.Effect<void, DrainE, DrainR>,
129
- sessionId?: string
130
- ) => {
131
- const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
132
- const processMessage = (msg: Drain) =>
133
- Effect
134
- .succeed(msg)
135
- .pipe(Effect
136
- .flatMap(({ body, meta }) => {
137
- let effect = InfraLogger
138
- .logDebug(`[${queueDrainName}] Processing incoming message`)
139
- .pipe(
140
- Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }),
141
- Effect.andThen(handleEvent(body)),
142
- silenceAndReportError,
143
- (_) =>
144
- setupRequestContextWithCustomSpan(
145
- _,
146
- meta,
147
- `queue.drain: ${queueDrainName}.${body._tag}`,
148
- {
149
- captureStackTrace: false,
150
- kind: "consumer",
151
- attributes: {
152
- "queue.name": queueDrainName,
153
- "queue.sessionId": sessionId,
154
- "queue.input": body
155
- }
156
- }
157
- )
158
- )
159
- if (meta.span) {
160
- effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span))
161
136
  }
162
- return effect
163
- }))
164
-
165
- return q
166
- .take
167
- .pipe(
168
- Effect.flatMap((x) =>
169
- processMessage(x).pipe(
170
- Effect.uninterruptible,
171
- Effect.forkChild,
172
- Effect.flatMap(Fiber.join),
173
- Effect.tap(q.finish(x))
174
137
  )
175
- ),
176
- silenceAndReportError,
177
- Effect.withSpan(`queue.drain: ${queueDrainName}`, {
178
- attributes: {
179
- "queue.type": "sql",
180
- "queue.name": queueDrainName,
181
- "queue.sessionId": sessionId
182
- }
183
- }),
184
- Effect.forever
185
138
  )
186
- }
139
+ if (meta.span) {
140
+ effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span))
141
+ }
142
+ return yield* effect
143
+ })
144
+
145
+ return Effect.fn(`queue.drain: ${queueDrainName}`, {
146
+ attributes: { "queue.type": "sql", "queue.name": queueDrainName, "queue.sessionId": sessionId }
147
+ })(function*() {
148
+ const x = yield* q.take
149
+ yield* processMessage(x).pipe(
150
+ Effect.uninterruptible,
151
+ Effect.forkChild,
152
+ Effect.flatMap(Fiber.join),
153
+ Effect.tap(q.finish(x))
154
+ )
155
+ }, (effect) => effect.pipe(silenceAndReportError, Effect.forever))()
187
156
  }
188
- return queue as QueueBase<Evt, DrainEvt>
189
- })
190
- }
157
+ }
158
+ return queue as QueueBase<Evt, DrainEvt>
159
+ })