@effect-app/infra 4.0.0-beta.23 → 4.0.0-beta.231

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 (339) hide show
  1. package/CHANGELOG.md +1726 -0
  2. package/_check.sh +1 -1
  3. package/dist/CUPS.d.ts +12 -7
  4. package/dist/CUPS.d.ts.map +1 -1
  5. package/dist/CUPS.js +16 -12
  6. package/dist/Emailer/Sendgrid.d.ts +15 -15
  7. package/dist/Emailer/Sendgrid.d.ts.map +1 -1
  8. package/dist/Emailer/Sendgrid.js +21 -17
  9. package/dist/Emailer/fake.d.ts +1 -1
  10. package/dist/Emailer/fake.js +3 -3
  11. package/dist/Emailer/service.d.ts +13 -4
  12. package/dist/Emailer/service.d.ts.map +1 -1
  13. package/dist/Emailer/service.js +4 -3
  14. package/dist/Emailer.d.ts +1 -1
  15. package/dist/MainFiberSet.d.ts +12 -9
  16. package/dist/MainFiberSet.d.ts.map +1 -1
  17. package/dist/MainFiberSet.js +10 -6
  18. package/dist/Model/Repository/Registry.d.ts +21 -0
  19. package/dist/Model/Repository/Registry.d.ts.map +1 -0
  20. package/dist/Model/Repository/Registry.js +18 -0
  21. package/dist/Model/Repository/ext.d.ts +35 -16
  22. package/dist/Model/Repository/ext.d.ts.map +1 -1
  23. package/dist/Model/Repository/ext.js +60 -3
  24. package/dist/Model/Repository/internal/internal.d.ts +9 -6
  25. package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
  26. package/dist/Model/Repository/internal/internal.js +141 -59
  27. package/dist/Model/Repository/legacy.d.ts +4 -2
  28. package/dist/Model/Repository/legacy.d.ts.map +1 -1
  29. package/dist/Model/Repository/makeRepo.d.ts +10 -6
  30. package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
  31. package/dist/Model/Repository/makeRepo.js +5 -2
  32. package/dist/Model/Repository/service.d.ts +32 -24
  33. package/dist/Model/Repository/service.d.ts.map +1 -1
  34. package/dist/Model/Repository/validation.d.ts +47 -18
  35. package/dist/Model/Repository/validation.d.ts.map +1 -1
  36. package/dist/Model/Repository/validation.js +6 -6
  37. package/dist/Model/Repository.d.ts +2 -1
  38. package/dist/Model/Repository.d.ts.map +1 -1
  39. package/dist/Model/Repository.js +2 -1
  40. package/dist/Model/dsl.d.ts +6 -5
  41. package/dist/Model/dsl.d.ts.map +1 -1
  42. package/dist/Model/dsl.js +2 -3
  43. package/dist/Model/filter/filterApi.d.ts +5 -5
  44. package/dist/Model/filter/filterApi.d.ts.map +1 -1
  45. package/dist/Model/filter/types/errors.d.ts +1 -1
  46. package/dist/Model/filter/types/fields.d.ts +1 -1
  47. package/dist/Model/filter/types/path/common.d.ts +1 -1
  48. package/dist/Model/filter/types/path/eager.d.ts +1 -1
  49. package/dist/Model/filter/types/path/eager.d.ts.map +1 -1
  50. package/dist/Model/filter/types/path/eager.js +1 -1
  51. package/dist/Model/filter/types/path/index.d.ts +1 -1
  52. package/dist/Model/filter/types/utils.d.ts +1 -1
  53. package/dist/Model/filter/types/validator.d.ts +1 -1
  54. package/dist/Model/filter/types.d.ts +1 -1
  55. package/dist/Model/query/dsl.d.ts +216 -18
  56. package/dist/Model/query/dsl.d.ts.map +1 -1
  57. package/dist/Model/query/dsl.js +240 -5
  58. package/dist/Model/query/new-kid-interpreter.d.ts +116 -8
  59. package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
  60. package/dist/Model/query/new-kid-interpreter.js +177 -6
  61. package/dist/Model/query.d.ts +1 -1
  62. package/dist/Model.d.ts +2 -1
  63. package/dist/Model.d.ts.map +1 -1
  64. package/dist/Model.js +2 -1
  65. package/dist/QueueMaker/SQLQueue.d.ts +7 -8
  66. package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
  67. package/dist/QueueMaker/SQLQueue.js +135 -117
  68. package/dist/QueueMaker/errors.d.ts +5 -3
  69. package/dist/QueueMaker/errors.d.ts.map +1 -1
  70. package/dist/QueueMaker/errors.js +4 -2
  71. package/dist/QueueMaker/memQueue.d.ts +9 -5
  72. package/dist/QueueMaker/memQueue.d.ts.map +1 -1
  73. package/dist/QueueMaker/memQueue.js +81 -65
  74. package/dist/QueueMaker/sbqueue.d.ts +8 -4
  75. package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
  76. package/dist/QueueMaker/sbqueue.js +57 -55
  77. package/dist/QueueMaker/service.d.ts +4 -2
  78. package/dist/QueueMaker/service.d.ts.map +1 -1
  79. package/dist/QueueMaker/service.js +1 -1
  80. package/dist/RequestContext.d.ts +75 -35
  81. package/dist/RequestContext.d.ts.map +1 -1
  82. package/dist/RequestContext.js +14 -14
  83. package/dist/RequestFiberSet.d.ts +10 -7
  84. package/dist/RequestFiberSet.d.ts.map +1 -1
  85. package/dist/RequestFiberSet.js +12 -7
  86. package/dist/Store/ContextMapContainer.d.ts +22 -3
  87. package/dist/Store/ContextMapContainer.d.ts.map +1 -1
  88. package/dist/Store/ContextMapContainer.js +18 -4
  89. package/dist/Store/Cosmos/query.d.ts +13 -2
  90. package/dist/Store/Cosmos/query.d.ts.map +1 -1
  91. package/dist/Store/Cosmos/query.js +179 -41
  92. package/dist/Store/Cosmos.d.ts +2 -2
  93. package/dist/Store/Cosmos.d.ts.map +1 -1
  94. package/dist/Store/Cosmos.js +343 -244
  95. package/dist/Store/Disk.d.ts +3 -3
  96. package/dist/Store/Disk.d.ts.map +1 -1
  97. package/dist/Store/Disk.js +76 -36
  98. package/dist/Store/Memory.d.ts +7 -4
  99. package/dist/Store/Memory.d.ts.map +1 -1
  100. package/dist/Store/Memory.js +327 -62
  101. package/dist/Store/SQL/Pg.d.ts +4 -0
  102. package/dist/Store/SQL/Pg.d.ts.map +1 -0
  103. package/dist/Store/SQL/Pg.js +233 -0
  104. package/dist/Store/SQL/query.d.ts +49 -0
  105. package/dist/Store/SQL/query.d.ts.map +1 -0
  106. package/dist/Store/SQL/query.js +527 -0
  107. package/dist/Store/SQL.d.ts +21 -0
  108. package/dist/Store/SQL.d.ts.map +1 -0
  109. package/dist/Store/SQL.js +450 -0
  110. package/dist/Store/codeFilter.d.ts +2 -2
  111. package/dist/Store/codeFilter.d.ts.map +1 -1
  112. package/dist/Store/codeFilter.js +6 -3
  113. package/dist/Store/index.d.ts +6 -3
  114. package/dist/Store/index.d.ts.map +1 -1
  115. package/dist/Store/index.js +18 -4
  116. package/dist/Store/service.d.ts +32 -8
  117. package/dist/Store/service.d.ts.map +1 -1
  118. package/dist/Store/service.js +25 -6
  119. package/dist/Store/utils.d.ts +3 -2
  120. package/dist/Store/utils.d.ts.map +1 -1
  121. package/dist/Store/utils.js +5 -5
  122. package/dist/Store.d.ts +1 -1
  123. package/dist/adapters/SQL/Model.d.ts +32 -43
  124. package/dist/adapters/SQL/Model.d.ts.map +1 -1
  125. package/dist/adapters/SQL/Model.js +30 -39
  126. package/dist/adapters/SQL.d.ts +1 -1
  127. package/dist/adapters/ServiceBus.d.ts +14 -11
  128. package/dist/adapters/ServiceBus.d.ts.map +1 -1
  129. package/dist/adapters/ServiceBus.js +30 -21
  130. package/dist/adapters/cosmos-client.d.ts +5 -3
  131. package/dist/adapters/cosmos-client.d.ts.map +1 -1
  132. package/dist/adapters/cosmos-client.js +6 -4
  133. package/dist/adapters/index.d.ts +8 -2
  134. package/dist/adapters/index.d.ts.map +1 -1
  135. package/dist/adapters/index.js +8 -2
  136. package/dist/adapters/logger.d.ts +2 -2
  137. package/dist/adapters/logger.d.ts.map +1 -1
  138. package/dist/adapters/memQueue.d.ts +5 -3
  139. package/dist/adapters/memQueue.d.ts.map +1 -1
  140. package/dist/adapters/memQueue.js +6 -5
  141. package/dist/adapters/mongo-client.d.ts +4 -3
  142. package/dist/adapters/mongo-client.d.ts.map +1 -1
  143. package/dist/adapters/mongo-client.js +5 -3
  144. package/dist/adapters/redis-client.d.ts +6 -3
  145. package/dist/adapters/redis-client.d.ts.map +1 -1
  146. package/dist/adapters/redis-client.js +7 -3
  147. package/dist/api/ContextProvider.d.ts +12 -9
  148. package/dist/api/ContextProvider.d.ts.map +1 -1
  149. package/dist/api/ContextProvider.js +9 -7
  150. package/dist/api/codec.d.ts +1 -1
  151. package/dist/api/internal/RequestContextMiddleware.d.ts +3 -3
  152. package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
  153. package/dist/api/internal/RequestContextMiddleware.js +11 -7
  154. package/dist/api/internal/auth.d.ts +45 -7
  155. package/dist/api/internal/auth.d.ts.map +1 -1
  156. package/dist/api/internal/auth.js +162 -29
  157. package/dist/api/internal/events.d.ts +6 -4
  158. package/dist/api/internal/events.d.ts.map +1 -1
  159. package/dist/api/internal/events.js +16 -9
  160. package/dist/api/internal/health.d.ts +1 -1
  161. package/dist/api/layerUtils.d.ts +15 -7
  162. package/dist/api/layerUtils.d.ts.map +1 -1
  163. package/dist/api/layerUtils.js +7 -6
  164. package/dist/api/middlewares.d.ts +1 -1
  165. package/dist/api/reportError.d.ts +2 -2
  166. package/dist/api/reportError.d.ts.map +1 -1
  167. package/dist/api/reportError.js +3 -2
  168. package/dist/api/routing/middleware/RouterMiddleware.d.ts +5 -4
  169. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
  170. package/dist/api/routing/middleware/middleware.d.ts +42 -3
  171. package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
  172. package/dist/api/routing/middleware/middleware.js +53 -17
  173. package/dist/api/routing/middleware.d.ts +1 -2
  174. package/dist/api/routing/middleware.d.ts.map +1 -1
  175. package/dist/api/routing/middleware.js +1 -2
  176. package/dist/api/routing/schema/jwt.d.ts +1 -1
  177. package/dist/api/routing/schema/jwt.d.ts.map +1 -1
  178. package/dist/api/routing/schema/jwt.js +3 -2
  179. package/dist/api/routing/tsort.d.ts +1 -1
  180. package/dist/api/routing/tsort.d.ts.map +1 -1
  181. package/dist/api/routing/utils.d.ts +4 -4
  182. package/dist/api/routing/utils.d.ts.map +1 -1
  183. package/dist/api/routing/utils.js +3 -2
  184. package/dist/api/routing.d.ts +84 -38
  185. package/dist/api/routing.d.ts.map +1 -1
  186. package/dist/api/routing.js +115 -45
  187. package/dist/api/setupRequest.d.ts +10 -6
  188. package/dist/api/setupRequest.d.ts.map +1 -1
  189. package/dist/api/setupRequest.js +19 -11
  190. package/dist/api/util.d.ts +1 -1
  191. package/dist/arbs.d.ts +2 -2
  192. package/dist/arbs.d.ts.map +1 -1
  193. package/dist/arbs.js +5 -3
  194. package/dist/errorReporter.d.ts +7 -5
  195. package/dist/errorReporter.d.ts.map +1 -1
  196. package/dist/errorReporter.js +22 -26
  197. package/dist/errors.d.ts +1 -1
  198. package/dist/fileUtil.d.ts +2 -2
  199. package/dist/fileUtil.d.ts.map +1 -1
  200. package/dist/fileUtil.js +2 -2
  201. package/dist/index.d.ts +1 -1
  202. package/dist/logger/jsonLogger.d.ts +2 -2
  203. package/dist/logger/jsonLogger.d.ts.map +1 -1
  204. package/dist/logger/jsonLogger.js +4 -2
  205. package/dist/logger/logFmtLogger.d.ts +2 -2
  206. package/dist/logger/logFmtLogger.d.ts.map +1 -1
  207. package/dist/logger/logFmtLogger.js +2 -2
  208. package/dist/logger/shared.d.ts +2 -2
  209. package/dist/logger/shared.d.ts.map +1 -1
  210. package/dist/logger/shared.js +3 -3
  211. package/dist/logger.d.ts +1 -1
  212. package/dist/logger.d.ts.map +1 -1
  213. package/dist/otel.d.ts +75 -0
  214. package/dist/otel.d.ts.map +1 -0
  215. package/dist/otel.js +65 -0
  216. package/dist/rateLimit.d.ts +12 -4
  217. package/dist/rateLimit.d.ts.map +1 -1
  218. package/dist/rateLimit.js +7 -12
  219. package/dist/test.d.ts +3 -3
  220. package/dist/test.d.ts.map +1 -1
  221. package/dist/test.js +2 -2
  222. package/dist/vitest.d.ts +1 -1
  223. package/examples/query.ts +46 -38
  224. package/package.json +46 -37
  225. package/src/CUPS.ts +15 -11
  226. package/src/Emailer/Sendgrid.ts +65 -57
  227. package/src/Emailer/fake.ts +2 -2
  228. package/src/Emailer/service.ts +13 -3
  229. package/src/MainFiberSet.ts +12 -10
  230. package/src/Model/Repository/Registry.ts +34 -0
  231. package/src/Model/Repository/ext.ts +103 -11
  232. package/src/Model/Repository/internal/internal.ts +266 -151
  233. package/src/Model/Repository/legacy.ts +3 -1
  234. package/src/Model/Repository/makeRepo.ts +15 -10
  235. package/src/Model/Repository/service.ts +35 -23
  236. package/src/Model/Repository/validation.ts +5 -5
  237. package/src/Model/Repository.ts +1 -0
  238. package/src/Model/dsl.ts +5 -4
  239. package/src/Model/filter/types/path/eager.ts +1 -2
  240. package/src/Model/query/dsl.ts +456 -20
  241. package/src/Model/query/new-kid-interpreter.ts +281 -7
  242. package/src/Model.ts +1 -0
  243. package/src/QueueMaker/SQLQueue.ts +150 -153
  244. package/src/QueueMaker/errors.ts +3 -1
  245. package/src/QueueMaker/memQueue.ts +111 -105
  246. package/src/QueueMaker/sbqueue.ts +76 -88
  247. package/src/QueueMaker/service.ts +3 -1
  248. package/src/RequestContext.ts +15 -16
  249. package/src/RequestFiberSet.ts +12 -7
  250. package/src/Store/ContextMapContainer.ts +46 -3
  251. package/src/Store/Cosmos/query.ts +214 -50
  252. package/src/Store/Cosmos.ts +491 -350
  253. package/src/Store/Disk.ts +106 -66
  254. package/src/Store/Memory.ts +365 -91
  255. package/src/Store/SQL/Pg.ts +364 -0
  256. package/src/Store/SQL/query.ts +603 -0
  257. package/src/Store/SQL.ts +736 -0
  258. package/src/Store/codeFilter.ts +5 -2
  259. package/src/Store/index.ts +20 -3
  260. package/src/Store/service.ts +51 -10
  261. package/src/Store/utils.ts +25 -23
  262. package/src/adapters/SQL/Model.ts +42 -41
  263. package/src/adapters/ServiceBus.ts +131 -121
  264. package/src/adapters/cosmos-client.ts +5 -3
  265. package/src/adapters/index.ts +7 -0
  266. package/src/adapters/memQueue.ts +5 -4
  267. package/src/adapters/mongo-client.ts +4 -2
  268. package/src/adapters/redis-client.ts +6 -2
  269. package/src/api/ContextProvider.ts +19 -16
  270. package/src/api/internal/RequestContextMiddleware.ts +17 -6
  271. package/src/api/internal/auth.ts +248 -44
  272. package/src/api/internal/events.ts +19 -10
  273. package/src/api/layerUtils.ts +13 -9
  274. package/src/api/reportError.ts +2 -1
  275. package/src/api/routing/middleware/RouterMiddleware.ts +5 -4
  276. package/src/api/routing/middleware/middleware.ts +60 -15
  277. package/src/api/routing/middleware.ts +0 -2
  278. package/src/api/routing/schema/jwt.ts +2 -1
  279. package/src/api/routing/utils.ts +2 -1
  280. package/src/api/routing.ts +309 -139
  281. package/src/api/setupRequest.ts +35 -12
  282. package/src/arbs.ts +5 -3
  283. package/src/errorReporter.ts +65 -75
  284. package/src/fileUtil.ts +1 -1
  285. package/src/logger/jsonLogger.ts +3 -1
  286. package/src/logger/logFmtLogger.ts +1 -1
  287. package/src/logger/shared.ts +3 -2
  288. package/src/otel.ts +152 -0
  289. package/src/rateLimit.ts +34 -23
  290. package/src/test.ts +2 -2
  291. package/test/auth.test.ts +101 -0
  292. package/test/contextProvider.test.ts +14 -11
  293. package/test/controller.test.ts +25 -29
  294. package/test/cosmos-query.test.ts +159 -0
  295. package/test/dist/auth.test.d.ts.map +1 -0
  296. package/test/dist/contextProvider.test.d.ts.map +1 -1
  297. package/test/dist/controller.test.d.ts.map +1 -1
  298. package/test/dist/cosmos-query.test.d.ts.map +1 -0
  299. package/test/dist/date-query.test.d.ts.map +1 -0
  300. package/test/dist/fixtures.d.ts +30 -12
  301. package/test/dist/fixtures.d.ts.map +1 -1
  302. package/test/dist/fixtures.js +17 -10
  303. package/test/dist/query.test.d.ts.map +1 -1
  304. package/test/dist/rawQuery.test.d.ts.map +1 -1
  305. package/test/dist/repository-ext.test.d.ts.map +1 -0
  306. package/test/dist/requires.test.d.ts.map +1 -1
  307. package/test/dist/router-generator.test.d.ts.map +1 -0
  308. package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
  309. package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
  310. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  311. package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
  312. package/test/dist/sql-store.test.d.ts.map +1 -0
  313. package/test/fixtures.ts +16 -9
  314. package/test/layerUtils.test.ts +1 -1
  315. package/test/query.test.ts +901 -38
  316. package/test/rawQuery.test.ts +338 -20
  317. package/test/repository-ext.test.ts +62 -0
  318. package/test/requires.test.ts +10 -5
  319. package/test/router-generator.test.ts +187 -0
  320. package/test/routing-interruptibility.test.ts +66 -0
  321. package/test/rpc-e2e-invalidation.test.ts +256 -0
  322. package/test/rpc-multi-middleware.test.ts +84 -9
  323. package/test/rpc-stream-fullstack.test.ts +304 -0
  324. package/test/sql-store.test.ts +1711 -0
  325. package/test/validateSample.test.ts +17 -12
  326. package/tsconfig.examples.json +1 -1
  327. package/tsconfig.json +0 -1
  328. package/tsconfig.json.bak +2 -2
  329. package/tsconfig.src.json +35 -35
  330. package/tsconfig.test.json +2 -2
  331. package/dist/Operations.d.ts +0 -55
  332. package/dist/Operations.d.ts.map +0 -1
  333. package/dist/Operations.js +0 -102
  334. package/dist/OperationsRepo.d.ts +0 -41
  335. package/dist/OperationsRepo.d.ts.map +0 -1
  336. package/dist/OperationsRepo.js +0 -14
  337. package/eslint.config.mjs +0 -24
  338. package/src/Operations.ts +0 -235
  339. package/src/OperationsRepo.ts +0 -16
@@ -1,23 +1,259 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { Array, Effect, flow, Option, Order, pipe, Ref, Result, Semaphore, ServiceMap, Struct } from "effect-app";
2
+ import * as Array from "effect-app/Array";
3
+ import * as Context from "effect-app/Context";
4
+ import * as Effect from "effect-app/Effect";
5
+ import * as Option from "effect-app/Option";
3
6
  import { NonEmptyString255 } from "effect-app/Schema";
4
- import { get } from "effect-app/utils";
7
+ import { assertUnreachable } from "effect-app/utils";
8
+ import { flow, pipe } from "effect/Function";
9
+ import * as Order from "effect/Order";
10
+ import * as Ref from "effect/Ref";
11
+ import * as Result from "effect/Result";
12
+ import * as Semaphore from "effect/Semaphore";
13
+ import * as Struct from "effect/Struct";
5
14
  import { InfraLogger } from "../logger.js";
15
+ import { annotateDb } from "../otel.js";
6
16
  import { codeFilter, codeFilter3_ } from "./codeFilter.js";
7
17
  import { StoreMaker } from "./service.js";
8
18
  import { makeUpdateETag } from "./utils.js";
19
+ /** Traverse an object by a dot-separated path string, e.g. `"a.b.c"`. */
20
+ export function get(obj, path) {
21
+ return path.split(".").reduce((res, key) => (res != null ? res[key] : res), obj);
22
+ }
23
+ const stripRelationFilterPaths = (state, relationPath) => {
24
+ const prefix = `${relationPath}.-1.`;
25
+ return state.map((entry) => "path" in entry
26
+ ? {
27
+ ...entry,
28
+ path: entry.path.startsWith(prefix) ? entry.path.slice(prefix.length) : entry.path
29
+ }
30
+ : {
31
+ ...entry,
32
+ result: stripRelationFilterPaths(entry.result, relationPath)
33
+ });
34
+ };
35
+ const emptyValueFor = (tag) => {
36
+ switch (tag) {
37
+ case "relation-count":
38
+ case "relation-distinct-count":
39
+ case "relation-sum":
40
+ case "relation-sum-expr":
41
+ case "relation-sum-expr-normalized":
42
+ return 0;
43
+ case "relation-sum-expr-by":
44
+ return [];
45
+ case "relation-any":
46
+ return false;
47
+ case "relation-every":
48
+ return true;
49
+ case "relation-collect":
50
+ return [];
51
+ case "relation-collect-fields":
52
+ return [];
53
+ case "relation-length":
54
+ return 0;
55
+ default:
56
+ return assertUnreachable(tag);
57
+ }
58
+ };
59
+ const computeProjectionValue = (row, computed) => {
60
+ const relation = get(row, computed.path);
61
+ if (!Array.isArray(relation)) {
62
+ return emptyValueFor(computed._tag);
63
+ }
64
+ if (computed._tag === "relation-length") {
65
+ return relation.length;
66
+ }
67
+ const filter = stripRelationFilterPaths(computed.filter, computed.path);
68
+ // empty filter = unconditional match (codeFilter3_ uses eval on a built
69
+ // string and chokes on `( )`, so short-circuit before invoking it).
70
+ const matches = filter.length === 0
71
+ ? (_value) => true
72
+ : (value) => codeFilter3_(filter, value);
73
+ const evalExpr = (value, expression) => {
74
+ switch (expression._tag) {
75
+ case "field": {
76
+ const v = get(value, expression.field);
77
+ return typeof v === "number" ? v : Number(v) || 0;
78
+ }
79
+ case "mul":
80
+ return evalExpr(value, expression.left) * evalExpr(value, expression.right);
81
+ default:
82
+ return assertUnreachable(expression);
83
+ }
84
+ };
85
+ switch (computed._tag) {
86
+ case "relation-count":
87
+ return relation.reduce((acc, value) => matches(value) ? acc + 1 : acc, 0);
88
+ case "relation-any":
89
+ return relation.some(matches);
90
+ case "relation-every":
91
+ return relation.every(matches);
92
+ case "relation-distinct-count": {
93
+ const seen = new Set();
94
+ for (const value of relation) {
95
+ if (matches(value))
96
+ seen.add(get(value, computed.field));
97
+ }
98
+ return seen.size;
99
+ }
100
+ case "relation-sum":
101
+ return relation.reduce((acc, value) => {
102
+ if (!matches(value))
103
+ return acc;
104
+ const v = get(value, computed.field);
105
+ return acc + (typeof v === "number" ? v : Number(v) || 0);
106
+ }, 0);
107
+ case "relation-sum-expr":
108
+ return relation.reduce((acc, value) => {
109
+ if (!matches(value))
110
+ return acc;
111
+ return acc + evalExpr(value, computed.expression);
112
+ }, 0);
113
+ case "relation-sum-expr-by": {
114
+ const totals = new Map();
115
+ for (const value of relation) {
116
+ if (!matches(value))
117
+ continue;
118
+ const unit = get(value, computed.unit);
119
+ const current = totals.get(unit) ?? 0;
120
+ totals.set(unit, current + evalExpr(value, computed.expression));
121
+ }
122
+ return [...totals.entries()].map(([unit, total]) => ({ unit, total }));
123
+ }
124
+ case "relation-sum-expr-normalized":
125
+ return relation.reduce((acc, value) => {
126
+ if (!matches(value))
127
+ return acc;
128
+ const unit = get(value, computed.unit);
129
+ const factor = unit === computed.toBase ? 1 : computed.factors[String(unit)];
130
+ if (factor === undefined || !Number.isFinite(factor))
131
+ return acc;
132
+ return acc + evalExpr(value, computed.expression) * factor;
133
+ }, 0);
134
+ case "relation-collect": {
135
+ const out = [];
136
+ const seen = computed.distinct ? new Set() : undefined;
137
+ for (const value of relation) {
138
+ if (!matches(value))
139
+ continue;
140
+ const v = get(value, computed.field);
141
+ if (seen) {
142
+ if (seen.has(v))
143
+ continue;
144
+ seen.add(v);
145
+ }
146
+ out.push(v);
147
+ }
148
+ return out;
149
+ }
150
+ case "relation-collect-fields": {
151
+ const out = [];
152
+ const seen = computed.distinct ? new Set() : undefined;
153
+ for (const value of relation) {
154
+ if (!matches(value))
155
+ continue;
156
+ for (const field of computed.fields) {
157
+ const v = get(value, field);
158
+ if (seen) {
159
+ if (seen.has(v))
160
+ continue;
161
+ seen.add(v);
162
+ }
163
+ out.push(v);
164
+ }
165
+ }
166
+ return out;
167
+ }
168
+ default:
169
+ return assertUnreachable(computed);
170
+ }
171
+ };
172
+ const computeAggregateValue = (rows, agg) => {
173
+ switch (agg._tag) {
174
+ case "agg-count":
175
+ return rows.length;
176
+ case "agg-count-when": {
177
+ const filter = agg.filter;
178
+ const matches = filter.length === 0 ? () => true : (row) => codeFilter3_(filter, row);
179
+ return rows.filter((row) => matches(row)).length;
180
+ }
181
+ case "agg-sum":
182
+ return rows.reduce((acc, row) => {
183
+ const v = get(row, agg.field);
184
+ return acc + (typeof v === "number" ? v : Number(v) || 0);
185
+ }, 0);
186
+ case "agg-min": {
187
+ let min = undefined;
188
+ for (const row of rows) {
189
+ const v = get(row, agg.field);
190
+ if (v == null)
191
+ continue;
192
+ if (min === undefined || v < min)
193
+ min = v;
194
+ }
195
+ return min ?? null;
196
+ }
197
+ case "agg-max": {
198
+ let max = undefined;
199
+ for (const row of rows) {
200
+ const v = get(row, agg.field);
201
+ if (v == null)
202
+ continue;
203
+ if (max === undefined || v > max)
204
+ max = v;
205
+ }
206
+ return max ?? null;
207
+ }
208
+ default:
209
+ return assertUnreachable(agg);
210
+ }
211
+ };
9
212
  export function memFilter(f) {
10
213
  return ((c) => {
11
- const select = (r) => {
12
- const sel = f.select;
214
+ const sel = f.select;
215
+ const selectPerRow = (r) => {
13
216
  if (!sel)
14
217
  return r;
218
+ // Detect aggregate mode: any select item has `aggregate` key
219
+ const hasAggregates = sel.some((s) => typeof s === "object" && s !== null && "aggregate" in s);
220
+ if (hasAggregates) {
221
+ // GROUP BY + aggregate
222
+ const fieldItems = sel.filter((s) => typeof s === "object" && s !== null && "path" in s && !("aggregate" in s));
223
+ const aggregateItems = sel.filter((s) => typeof s === "object" && s !== null && "aggregate" in s);
224
+ const groups = new Map();
225
+ for (const row of r) {
226
+ const key = fieldItems.map((fi) => JSON.stringify(get(row, fi.path))).join("\0");
227
+ const existing = groups.get(key) ?? [];
228
+ existing.push(row);
229
+ groups.set(key, existing);
230
+ }
231
+ return [...groups.values()].map((rows) => {
232
+ const result = {};
233
+ for (const fi of fieldItems)
234
+ result[fi.key] = get(rows[0], fi.path);
235
+ for (const ai of aggregateItems)
236
+ result[ai.key] = computeAggregateValue(rows, ai.aggregate);
237
+ return result;
238
+ });
239
+ }
15
240
  return r.map((i) => {
16
- const [keys, subKeys] = pipe(sel, Array.partition((r) => typeof r === "string" ? Result.fail(String(r)) : Result.succeed(r)));
241
+ const [keys, entries] = pipe(sel, Array.partition((entry) => typeof entry === "string" ? Result.fail(String(entry)) : Result.succeed(entry)));
242
+ const subKeys = entries.filter((entry) => typeof entry === "object" && entry !== null && "subKeys" in entry);
243
+ const computedKeys = entries.filter((entry) => typeof entry === "object" && entry !== null && "computed" in entry);
244
+ const pathKeys = entries.filter((entry) => typeof entry === "object" && entry !== null && "path" in entry && !("aggregate" in entry));
17
245
  const n = Struct.pick(i, keys);
18
246
  subKeys.forEach((subKey) => {
19
247
  n[subKey.key] = i[subKey.key].map(Struct.pick(subKey.subKeys));
20
248
  });
249
+ computedKeys.forEach((entry) => {
250
+ ;
251
+ n[entry.key] = computeProjectionValue(i, entry.computed);
252
+ });
253
+ pathKeys.forEach((entry) => {
254
+ ;
255
+ n[entry.key] = get(i, entry.path);
256
+ });
21
257
  return n;
22
258
  });
23
259
  };
@@ -39,7 +275,7 @@ export function memFilter(f) {
39
275
  c = Array.sortBy(...ords.value)(c);
40
276
  }
41
277
  if (!skip && limit === 1) {
42
- return select(Array.findFirst(c, f.filter ? codeFilter(f.filter) : (_) => Option.some(_)).pipe(Option.map(Array.make), Option.getOrElse(() => [])));
278
+ return selectPerRow(Array.findFirst(c, f.filter ? codeFilter(f.filter) : (_) => Option.some(_)).pipe(Option.map(Array.make), Option.getOrElse(() => [])));
43
279
  }
44
280
  let r = f.filter ? Array.filter(c, (x) => codeFilter3_(f.filter, x)) : c;
45
281
  if (skip) {
@@ -48,11 +284,11 @@ export function memFilter(f) {
48
284
  if (limit !== undefined) {
49
285
  r = Array.take(r, limit);
50
286
  }
51
- return select(r);
287
+ return selectPerRow(r);
52
288
  });
53
289
  }
54
290
  const defaultNs = NonEmptyString255("primary");
55
- export class storeId extends ServiceMap.Reference("StoreId", { defaultValue: () => defaultNs }) {
291
+ export class storeId extends Context.Reference("StoreId", { defaultValue: () => defaultNs }) {
56
292
  }
57
293
  function logQuery(f, defaultValues) {
58
294
  return InfraLogger
@@ -99,84 +335,113 @@ export function makeMemoryStoreInt(modelName, idKey, namespace, seed, _defaultVa
99
335
  .flatMap((_) => Ref.set(store, _)))
100
336
  .pipe(withPermit);
101
337
  const s = {
338
+ seedNamespace: () => Effect.void,
102
339
  queryRaw: (query) => all
103
340
  .pipe(
104
341
  // Effect.tap(() => logQuery(query, defaultValues)),
105
- Effect.map(query.memory), Effect.withSpan("Memory.queryRaw [effect-app/infra/Store]", {
106
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
107
- }, { captureStackTrace: false })),
108
- all: all.pipe(Effect.withSpan("Memory.all [effect-app/infra/Store]", {
109
- attributes: {
110
- modelName,
111
- namespace
112
- }
113
- }, { captureStackTrace: false })),
342
+ Effect.map(query.memory), annotateDb({
343
+ operation: "queryRaw",
344
+ system: "memory",
345
+ collection: modelName,
346
+ namespace,
347
+ entity: modelName
348
+ })),
349
+ all: all.pipe(annotateDb({
350
+ operation: "all",
351
+ system: "memory",
352
+ collection: modelName,
353
+ namespace,
354
+ entity: modelName
355
+ })),
114
356
  find: (id) => Ref
115
357
  .get(store)
116
- .pipe(Effect.map((_) => Option.fromNullishOr(_.get(id))), Effect
117
- .withSpan("Memory.find [effect-app/infra/Store]", {
118
- attributes: {
119
- modelName,
120
- namespace
121
- }
122
- }, { captureStackTrace: false })),
358
+ .pipe(Effect.map((_) => Option.fromNullishOr(_.get(id))), annotateDb({
359
+ operation: "find",
360
+ system: "memory",
361
+ collection: modelName,
362
+ namespace,
363
+ entity: modelName,
364
+ extra: { "app.entity.id": id }
365
+ })),
123
366
  filter: (f) => all
124
- .pipe(Effect.tap(() => logQuery(f, defaultValues)), Effect.map(memFilter(f)), Effect.withSpan("Memory.filter [effect-app/infra/Store]", {
125
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
126
- }, { captureStackTrace: false })),
367
+ .pipe(Effect.tap(() => logQuery(f, defaultValues)), Effect.map(memFilter(f)), annotateDb({
368
+ operation: "filter",
369
+ system: "memory",
370
+ collection: modelName,
371
+ namespace,
372
+ entity: modelName
373
+ })),
127
374
  set: (e) => s
128
375
  .find(e[idKey])
129
376
  .pipe(Effect.flatMap((current) => updateETag(e, idKey, current)), Effect
130
- .tap((e) => Ref.get(store).pipe(Effect.map((_) => new Map([..._, [e[idKey], e]])), Effect.flatMap((_) => Ref.set(store, _)))), withPermit, Effect
131
- .withSpan("Memory.set [effect-app/infra/Store]", {
132
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
133
- }, { captureStackTrace: false })),
377
+ .tap((e) => Ref.get(store).pipe(Effect.map((_) => new Map([..._, [e[idKey], e]])), Effect.flatMap((_) => Ref.set(store, _)))), withPermit, annotateDb({
378
+ operation: "set",
379
+ system: "memory",
380
+ collection: modelName,
381
+ namespace,
382
+ entity: modelName,
383
+ extra: { "app.entity.id": e[idKey] }
384
+ })),
134
385
  batchRemove: (items) => pipe(Effect
135
386
  .sync(() => items)
136
387
  // align with CosmosDB
137
- .pipe(Effect.filterOrFail((_) => _.length <= 100, () => "BatchRemove: a batch may not exceed 100 items"), Effect.orDie, Effect.andThen(batchRemove), Effect
138
- .withSpan("Memory.batchRemove [effect-app/infra/Store]", {
139
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
140
- }, { captureStackTrace: false }))),
388
+ .pipe(Effect.filterOrFail((_) => _.length <= 100, () => "BatchRemove: a batch may not exceed 100 items"), Effect.orDie, Effect.andThen(batchRemove), annotateDb({
389
+ operation: "batchRemove",
390
+ system: "memory",
391
+ collection: modelName,
392
+ namespace,
393
+ entity: modelName
394
+ }))),
141
395
  batchSet: (items) => pipe(Effect
142
396
  .sync(() => items)
143
397
  // align with CosmosDB
144
- .pipe(Effect.filterOrFail((_) => _.length <= 100, () => "BatchSet: a batch may not exceed 100 items"), Effect.orDie, Effect.andThen(batchSet), Effect
145
- .withSpan("Memory.batchSet [effect-app/infra/Store]", {
146
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
147
- }, { captureStackTrace: false }))),
148
- bulkSet: flow(batchSet, (_) => _.pipe(Effect.withSpan("Memory.bulkSet [effect-app/infra/Store]", {
149
- attributes: { "repository.model_name": modelName, "repository.namespace": namespace }
150
- }, { captureStackTrace: false })))
398
+ .pipe(Effect.filterOrFail((_) => _.length <= 100, () => "BatchSet: a batch may not exceed 100 items"), Effect.orDie, Effect.andThen(batchSet), annotateDb({
399
+ operation: "batchSet",
400
+ system: "memory",
401
+ collection: modelName,
402
+ namespace,
403
+ entity: modelName
404
+ }))),
405
+ bulkSet: flow(batchSet, (_) => _.pipe(annotateDb({
406
+ operation: "bulkSet",
407
+ system: "memory",
408
+ collection: modelName,
409
+ namespace,
410
+ entity: modelName
411
+ })))
151
412
  };
152
413
  return s;
153
414
  });
154
415
  }
155
416
  export const makeMemoryStore = () => ({
156
- make: (modelName, idKey, seed, config) => Effect.gen(function* () {
157
- const storesSem = Semaphore.makeUnsafe(1);
417
+ make: Effect.fnUntraced(function* (modelName, idKey, seed, config) {
158
418
  const primary = yield* makeMemoryStoreInt(modelName, idKey, "primary", seed, config?.defaultValues);
159
- const ctx = yield* Effect.services();
419
+ const ctx = yield* Effect.context();
160
420
  const stores = new Map([["primary", primary]]);
421
+ const semaphores = new Map();
422
+ const getSem = (ns) => {
423
+ let sem = semaphores.get(ns);
424
+ if (!sem) {
425
+ sem = Semaphore.makeUnsafe(1);
426
+ semaphores.set(ns, sem);
427
+ }
428
+ return sem;
429
+ };
430
+ const ensureStore = (namespace) => getSem(namespace).withPermits(1)(Effect.suspend(() => {
431
+ const store = stores.get(namespace);
432
+ if (store)
433
+ return Effect.succeed(store);
434
+ if (config?.allowNamespace && !config.allowNamespace(namespace)) {
435
+ throw new Error(`Namespace ${namespace} not allowed!`);
436
+ }
437
+ return makeMemoryStoreInt(modelName, idKey, namespace, seed, config?.defaultValues)
438
+ .pipe(Effect.orDie, Effect.provide(ctx), Effect.tap((store) => Effect.sync(() => stores.set(namespace, store))));
439
+ }));
161
440
  const getStore = !config?.allowNamespace
162
441
  ? Effect.succeed(primary)
163
- : storeId.asEffect().pipe(Effect.flatMap((namespace) => {
164
- const store = stores.get(namespace);
165
- if (store) {
166
- return Effect.succeed(store);
167
- }
168
- if (!config.allowNamespace(namespace)) {
169
- throw new Error(`Namespace ${namespace} not allowed!`);
170
- }
171
- return storesSem.withPermits(1)(Effect.suspend(() => {
172
- const store = stores.get(namespace);
173
- if (store)
174
- return Effect.sync(() => store);
175
- return makeMemoryStoreInt(modelName, idKey, namespace, seed, config?.defaultValues)
176
- .pipe(Effect.orDie, Effect.provide(ctx), Effect.tap((store) => Effect.sync(() => stores.set(namespace, store))));
177
- }));
178
- }));
442
+ : storeId.pipe(Effect.flatMap((namespace) => ensureStore(namespace)));
179
443
  const s = {
444
+ seedNamespace: (namespace) => ensureStore(namespace).pipe(Effect.asVoid),
180
445
  all: Effect.flatMap(getStore, (_) => _.all),
181
446
  queryRaw: (...args) => Effect.flatMap(getStore, (_) => _.queryRaw(...args)),
182
447
  find: (...args) => Effect.flatMap(getStore, (_) => _.find(...args)),
@@ -190,4 +455,4 @@ export const makeMemoryStore = () => ({
190
455
  })
191
456
  });
192
457
  export const MemoryStoreLive = StoreMaker.toLayer(Effect.sync(() => makeMemoryStore()));
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL01lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUE4QixNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzdJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUQsT0FBTyxFQUE0RSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDbkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUUzQyxNQUFNLFVBQVUsU0FBUyxDQUFtRCxDQUFtQjtJQUU3RixPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQU8sRUFBRTtRQUN0QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQU0sRUFBTyxFQUFFO1lBQzdCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7WUFDcEIsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxDQUFRLENBQUE7WUFDekIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUMxQixHQUFHLEVBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3BCLE9BQU8sQ0FBQyxLQUFLLFFB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
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL01lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUV6QyxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFBO0FBQ2pDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxTQUFTLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUkxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUQsT0FBTyxFQUE0RSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDbkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUUzQyx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFRLEVBQUUsSUFBWTtJQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENB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
@@ -0,0 +1,4 @@
1
+ import { SqlClient } from "effect/unstable/sql";
2
+ import { type StorageConfig, StoreMaker } from "../service.js";
3
+ export declare function PgStoreLayer(cfg: StorageConfig): import("effect/Layer").Layer<StoreMaker, never, SqlClient.SqlClient>;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGcuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9TdG9yZS9TUUwvUGcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBTy9DLE9BQU8sRUFBOEMsS0FBSyxhQUFhLEVBQWdDLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQTBWeEksd0JBQWdCLFlBQVksQ0FBQyxHQUFHLEVBQUUsYUFBYSx3RUFHOUMifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pg.d.ts","sourceRoot":"","sources":["../../../src/Store/SQL/Pg.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAO/C,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,eAAe,CAAA;AA0VxI,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,wEAG9C"}