@gaganref/confect-server 0.0.0-stage → 10.3.1-fork.1

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 (367) hide show
  1. package/CHANGELOG.md +2119 -0
  2. package/LICENSE +7 -0
  3. package/README.md +16 -2
  4. package/dist/ActionCtx.d.ts +10 -0
  5. package/dist/ActionCtx.d.ts.map +1 -0
  6. package/dist/ActionCtx.js +18 -0
  7. package/dist/ActionCtx.js.map +1 -0
  8. package/dist/ActionRunner.d.ts +16 -0
  9. package/dist/ActionRunner.d.ts.map +1 -0
  10. package/dist/ActionRunner.js +18 -0
  11. package/dist/ActionRunner.js.map +1 -0
  12. package/dist/AiGatewayDecisionClient.d.ts +20 -0
  13. package/dist/AiGatewayDecisionClient.d.ts.map +1 -0
  14. package/dist/AiGatewayDecisionClient.js +31 -0
  15. package/dist/AiGatewayDecisionClient.js.map +1 -0
  16. package/dist/AiGatewayDecisionModel.d.ts +24 -0
  17. package/dist/AiGatewayDecisionModel.d.ts.map +1 -0
  18. package/dist/AiGatewayDecisionModel.js +27 -0
  19. package/dist/AiGatewayDecisionModel.js.map +1 -0
  20. package/dist/AiGatewayLanguageClient.d.ts +21 -0
  21. package/dist/AiGatewayLanguageClient.d.ts.map +1 -0
  22. package/dist/AiGatewayLanguageClient.js +32 -0
  23. package/dist/AiGatewayLanguageClient.js.map +1 -0
  24. package/dist/AiGatewayLanguageModel.d.ts +95 -0
  25. package/dist/AiGatewayLanguageModel.d.ts.map +1 -0
  26. package/dist/AiGatewayLanguageModel.js +42 -0
  27. package/dist/AiGatewayLanguageModel.js.map +1 -0
  28. package/dist/Auth.d.ts +20 -0
  29. package/dist/Auth.d.ts.map +1 -0
  30. package/dist/Auth.js +31 -0
  31. package/dist/Auth.js.map +1 -0
  32. package/dist/BlobNotFoundError.d.ts +9 -0
  33. package/dist/BlobNotFoundError.d.ts.map +1 -0
  34. package/dist/BlobNotFoundError.js +13 -0
  35. package/dist/BlobNotFoundError.js.map +1 -0
  36. package/dist/Callback.d.ts +31 -0
  37. package/dist/Callback.d.ts.map +1 -0
  38. package/dist/Callback.js +182 -0
  39. package/dist/Callback.js.map +1 -0
  40. package/dist/ComponentCtx.d.ts +71 -0
  41. package/dist/ComponentCtx.d.ts.map +1 -0
  42. package/dist/ComponentCtx.js +0 -0
  43. package/dist/ConvexConfigProvider.d.ts +21 -0
  44. package/dist/ConvexConfigProvider.d.ts.map +1 -0
  45. package/dist/ConvexConfigProvider.js +36 -0
  46. package/dist/ConvexConfigProvider.js.map +1 -0
  47. package/dist/ConvexFunctionDefinitions.d.ts +25 -0
  48. package/dist/ConvexFunctionDefinitions.d.ts.map +1 -0
  49. package/dist/ConvexFunctionDefinitions.js +25 -0
  50. package/dist/ConvexFunctionDefinitions.js.map +1 -0
  51. package/dist/ConvexLogger.d.ts +17 -0
  52. package/dist/ConvexLogger.d.ts.map +1 -0
  53. package/dist/ConvexLogger.js +33 -0
  54. package/dist/ConvexLogger.js.map +1 -0
  55. package/dist/CronJob.d.ts +14 -0
  56. package/dist/CronJob.d.ts.map +1 -0
  57. package/dist/CronJob.js +22 -0
  58. package/dist/CronJob.js.map +1 -0
  59. package/dist/CronJobs.d.ts +22 -0
  60. package/dist/CronJobs.d.ts.map +1 -0
  61. package/dist/CronJobs.js +83 -0
  62. package/dist/CronJobs.js.map +1 -0
  63. package/dist/DataModel.d.ts +28 -0
  64. package/dist/DataModel.d.ts.map +1 -0
  65. package/dist/DataModel.js +7 -0
  66. package/dist/DataModel.js.map +1 -0
  67. package/dist/DatabaseReader.d.ts +26 -0
  68. package/dist/DatabaseReader.d.ts.map +1 -0
  69. package/dist/DatabaseReader.js +33 -0
  70. package/dist/DatabaseReader.js.map +1 -0
  71. package/dist/DatabaseSchema.d.ts +67 -0
  72. package/dist/DatabaseSchema.d.ts.map +1 -0
  73. package/dist/DatabaseSchema.js +61 -0
  74. package/dist/DatabaseSchema.js.map +1 -0
  75. package/dist/DatabaseWriter.d.ts +44 -0
  76. package/dist/DatabaseWriter.d.ts.map +1 -0
  77. package/dist/DatabaseWriter.js +47 -0
  78. package/dist/DatabaseWriter.js.map +1 -0
  79. package/dist/Document.d.ts +37 -0
  80. package/dist/Document.d.ts.map +1 -0
  81. package/dist/Document.js +54 -0
  82. package/dist/Document.js.map +1 -0
  83. package/dist/ExecutionMetadata.d.ts +13 -0
  84. package/dist/ExecutionMetadata.d.ts.map +1 -0
  85. package/dist/ExecutionMetadata.js +19 -0
  86. package/dist/ExecutionMetadata.js.map +1 -0
  87. package/dist/FunctionImpl.d.ts +39 -0
  88. package/dist/FunctionImpl.d.ts.map +1 -0
  89. package/dist/FunctionImpl.js +46 -0
  90. package/dist/FunctionImpl.js.map +1 -0
  91. package/dist/FunctionRegistryItem.d.ts +36 -0
  92. package/dist/FunctionRegistryItem.d.ts.map +1 -0
  93. package/dist/FunctionRegistryItem.js +34 -0
  94. package/dist/FunctionRegistryItem.js.map +1 -0
  95. package/dist/GroupImpl.d.ts +77 -0
  96. package/dist/GroupImpl.d.ts.map +1 -0
  97. package/dist/GroupImpl.js +81 -0
  98. package/dist/GroupImpl.js.map +1 -0
  99. package/dist/GroupRegistry.d.ts +8 -0
  100. package/dist/GroupRegistry.d.ts.map +1 -0
  101. package/dist/GroupRegistry.js +26 -0
  102. package/dist/GroupRegistry.js.map +1 -0
  103. package/dist/Handler.d.ts +47 -0
  104. package/dist/Handler.d.ts.map +1 -0
  105. package/dist/Handler.js +7 -0
  106. package/dist/Handler.js.map +1 -0
  107. package/dist/HttpRouter.d.ts +80 -0
  108. package/dist/HttpRouter.d.ts.map +1 -0
  109. package/dist/HttpRouter.js +195 -0
  110. package/dist/HttpRouter.js.map +1 -0
  111. package/dist/MiddlewareImpl.d.ts +79 -0
  112. package/dist/MiddlewareImpl.d.ts.map +1 -0
  113. package/dist/MiddlewareImpl.js +58 -0
  114. package/dist/MiddlewareImpl.js.map +1 -0
  115. package/dist/MiddlewareRegistryItem.d.ts +12 -0
  116. package/dist/MiddlewareRegistryItem.d.ts.map +1 -0
  117. package/dist/MiddlewareRegistryItem.js +15 -0
  118. package/dist/MiddlewareRegistryItem.js.map +1 -0
  119. package/dist/MutationCtx.d.ts +10 -0
  120. package/dist/MutationCtx.d.ts.map +1 -0
  121. package/dist/MutationCtx.js +18 -0
  122. package/dist/MutationCtx.js.map +1 -0
  123. package/dist/MutationRunner.d.ts +27 -0
  124. package/dist/MutationRunner.d.ts.map +1 -0
  125. package/dist/MutationRunner.js +28 -0
  126. package/dist/MutationRunner.js.map +1 -0
  127. package/dist/MutationTransactionContext.d.ts +17 -0
  128. package/dist/MutationTransactionContext.d.ts.map +1 -0
  129. package/dist/MutationTransactionContext.js +20 -0
  130. package/dist/MutationTransactionContext.js.map +1 -0
  131. package/dist/OrderedQuery.d.ts +32 -0
  132. package/dist/OrderedQuery.d.ts.map +1 -0
  133. package/dist/OrderedQuery.js +36 -0
  134. package/dist/OrderedQuery.js.map +1 -0
  135. package/dist/QueryCtx.d.ts +10 -0
  136. package/dist/QueryCtx.d.ts.map +1 -0
  137. package/dist/QueryCtx.js +18 -0
  138. package/dist/QueryCtx.js.map +1 -0
  139. package/dist/QueryInitializer.d.ts +75 -0
  140. package/dist/QueryInitializer.d.ts.map +1 -0
  141. package/dist/QueryInitializer.js +105 -0
  142. package/dist/QueryInitializer.js.map +1 -0
  143. package/dist/QueryRunner.d.ts +46 -0
  144. package/dist/QueryRunner.d.ts.map +1 -0
  145. package/dist/QueryRunner.js +30 -0
  146. package/dist/QueryRunner.js.map +1 -0
  147. package/dist/QueryStream.d.ts +678 -0
  148. package/dist/QueryStream.d.ts.map +1 -0
  149. package/dist/QueryStream.js +943 -0
  150. package/dist/QueryStream.js.map +1 -0
  151. package/dist/QueryStreamCursor.d.ts +39 -0
  152. package/dist/QueryStreamCursor.d.ts.map +1 -0
  153. package/dist/QueryStreamCursor.js +52 -0
  154. package/dist/QueryStreamCursor.js.map +1 -0
  155. package/dist/QueryStreamIndexPrefix.d.ts +48 -0
  156. package/dist/QueryStreamIndexPrefix.d.ts.map +1 -0
  157. package/dist/QueryStreamIndexPrefix.js +38 -0
  158. package/dist/QueryStreamIndexPrefix.js.map +1 -0
  159. package/dist/QueryStreamIndexRange.d.ts +193 -0
  160. package/dist/QueryStreamIndexRange.d.ts.map +1 -0
  161. package/dist/QueryStreamIndexRange.js +241 -0
  162. package/dist/QueryStreamIndexRange.js.map +1 -0
  163. package/dist/QueryStreamKey.d.ts +64 -0
  164. package/dist/QueryStreamKey.d.ts.map +1 -0
  165. package/dist/QueryStreamKey.js +69 -0
  166. package/dist/QueryStreamKey.js.map +1 -0
  167. package/dist/QueryStreamKeyBounds.d.ts +136 -0
  168. package/dist/QueryStreamKeyBounds.d.ts.map +1 -0
  169. package/dist/QueryStreamKeyBounds.js +208 -0
  170. package/dist/QueryStreamKeyBounds.js.map +1 -0
  171. package/dist/QueryStreamKeyLabels.d.ts +27 -0
  172. package/dist/QueryStreamKeyLabels.d.ts.map +1 -0
  173. package/dist/QueryStreamKeyLabels.js +22 -0
  174. package/dist/QueryStreamKeyLabels.js.map +1 -0
  175. package/dist/QueryStreamKeyLayout.d.ts +179 -0
  176. package/dist/QueryStreamKeyLayout.d.ts.map +1 -0
  177. package/dist/QueryStreamKeyLayout.js +167 -0
  178. package/dist/QueryStreamKeyLayout.js.map +1 -0
  179. package/dist/QueryStreamKeyValues.d.ts +40 -0
  180. package/dist/QueryStreamKeyValues.d.ts.map +1 -0
  181. package/dist/QueryStreamKeyValues.js +57 -0
  182. package/dist/QueryStreamKeyValues.js.map +1 -0
  183. package/dist/QueryStreamOrderDirection.d.ts +24 -0
  184. package/dist/QueryStreamOrderDirection.d.ts.map +1 -0
  185. package/dist/QueryStreamOrderDirection.js +11 -0
  186. package/dist/QueryStreamOrderDirection.js.map +1 -0
  187. package/dist/QueryStreamPagination.d.ts +264 -0
  188. package/dist/QueryStreamPagination.d.ts.map +1 -0
  189. package/dist/QueryStreamPagination.js +172 -0
  190. package/dist/QueryStreamPagination.js.map +1 -0
  191. package/dist/QueryStreamReadBudget.d.ts +63 -0
  192. package/dist/QueryStreamReadBudget.d.ts.map +1 -0
  193. package/dist/QueryStreamReadBudget.js +81 -0
  194. package/dist/QueryStreamReadBudget.js.map +1 -0
  195. package/dist/QueryTransactionContext.d.ts +16 -0
  196. package/dist/QueryTransactionContext.d.ts.map +1 -0
  197. package/dist/QueryTransactionContext.js +17 -0
  198. package/dist/QueryTransactionContext.js.map +1 -0
  199. package/dist/RegisteredConvexFunction.d.ts +359 -0
  200. package/dist/RegisteredConvexFunction.d.ts.map +1 -0
  201. package/dist/RegisteredConvexFunction.js +154 -0
  202. package/dist/RegisteredConvexFunction.js.map +1 -0
  203. package/dist/RegisteredFunction.d.ts +143 -0
  204. package/dist/RegisteredFunction.d.ts.map +1 -0
  205. package/dist/RegisteredFunction.js +125 -0
  206. package/dist/RegisteredFunction.js.map +1 -0
  207. package/dist/RegisteredFunctions.d.ts +57 -0
  208. package/dist/RegisteredFunctions.d.ts.map +1 -0
  209. package/dist/RegisteredFunctions.js +32 -0
  210. package/dist/RegisteredFunctions.js.map +1 -0
  211. package/dist/RegisteredNodeFunction.d.ts +11 -0
  212. package/dist/RegisteredNodeFunction.d.ts.map +1 -0
  213. package/dist/RegisteredNodeFunction.js +45 -0
  214. package/dist/RegisteredNodeFunction.js.map +1 -0
  215. package/dist/Registry.d.ts +12 -0
  216. package/dist/Registry.d.ts.map +1 -0
  217. package/dist/Registry.js +17 -0
  218. package/dist/Registry.js.map +1 -0
  219. package/dist/RegistryItems.d.ts +21 -0
  220. package/dist/RegistryItems.d.ts.map +1 -0
  221. package/dist/RegistryItems.js +27 -0
  222. package/dist/RegistryItems.js.map +1 -0
  223. package/dist/RequestMetadata.d.ts +12 -0
  224. package/dist/RequestMetadata.d.ts.map +1 -0
  225. package/dist/RequestMetadata.js +16 -0
  226. package/dist/RequestMetadata.js.map +1 -0
  227. package/dist/ResolvedMiddleware.d.ts +24 -0
  228. package/dist/ResolvedMiddleware.d.ts.map +1 -0
  229. package/dist/ResolvedMiddleware.js +34 -0
  230. package/dist/ResolvedMiddleware.js.map +1 -0
  231. package/dist/Scheduler.d.ts +31 -0
  232. package/dist/Scheduler.d.ts.map +1 -0
  233. package/dist/Scheduler.js +35 -0
  234. package/dist/Scheduler.js.map +1 -0
  235. package/dist/Storage.d.ts +22 -0
  236. package/dist/Storage.d.ts.map +1 -0
  237. package/dist/Storage.js +27 -0
  238. package/dist/Storage.js.map +1 -0
  239. package/dist/StorageActionWriter.d.ts +35 -0
  240. package/dist/StorageActionWriter.d.ts.map +1 -0
  241. package/dist/StorageActionWriter.js +24 -0
  242. package/dist/StorageActionWriter.js.map +1 -0
  243. package/dist/StorageReader.d.ts +26 -0
  244. package/dist/StorageReader.d.ts.map +1 -0
  245. package/dist/StorageReader.js +22 -0
  246. package/dist/StorageReader.js.map +1 -0
  247. package/dist/StorageWriter.d.ts +29 -0
  248. package/dist/StorageWriter.d.ts.map +1 -0
  249. package/dist/StorageWriter.js +24 -0
  250. package/dist/StorageWriter.js.map +1 -0
  251. package/dist/Table.d.ts +274 -0
  252. package/dist/Table.d.ts.map +1 -0
  253. package/dist/Table.js +70 -0
  254. package/dist/Table.js.map +1 -0
  255. package/dist/TableInfo.d.ts +44 -0
  256. package/dist/TableInfo.d.ts.map +1 -0
  257. package/dist/TableInfo.js +7 -0
  258. package/dist/TableInfo.js.map +1 -0
  259. package/dist/TransactionMetadata.d.ts +12 -0
  260. package/dist/TransactionMetadata.d.ts.map +1 -0
  261. package/dist/TransactionMetadata.js +16 -0
  262. package/dist/TransactionMetadata.js.map +1 -0
  263. package/dist/VectorSearch.d.ts +23 -0
  264. package/dist/VectorSearch.d.ts.map +1 -0
  265. package/dist/VectorSearch.js +17 -0
  266. package/dist/VectorSearch.js.map +1 -0
  267. package/dist/_virtual/_rolldown/runtime.js +13 -0
  268. package/dist/index.d.ts +88 -0
  269. package/dist/index.d.ts.map +1 -0
  270. package/dist/index.js +61 -0
  271. package/dist/internal/AiGatewayDecisionClient.d.ts +7 -0
  272. package/dist/internal/AiGatewayDecisionClient.d.ts.map +1 -0
  273. package/dist/internal/AiGatewayDecisionClient.js +19 -0
  274. package/dist/internal/AiGatewayDecisionClient.js.map +1 -0
  275. package/dist/internal/AiGatewayLanguageClient.d.ts +7 -0
  276. package/dist/internal/AiGatewayLanguageClient.d.ts.map +1 -0
  277. package/dist/internal/AiGatewayLanguageClient.js +19 -0
  278. package/dist/internal/AiGatewayLanguageClient.js.map +1 -0
  279. package/dist/internal/AiGatewayServiceToken.d.ts +46 -0
  280. package/dist/internal/AiGatewayServiceToken.d.ts.map +1 -0
  281. package/dist/internal/AiGatewayServiceToken.js +62 -0
  282. package/dist/internal/AiGatewayServiceToken.js.map +1 -0
  283. package/dist/internal/constants.d.ts +2 -0
  284. package/dist/internal/constants.d.ts.map +1 -0
  285. package/dist/internal/constants.js +6 -0
  286. package/dist/internal/constants.js.map +1 -0
  287. package/dist/internal/utils.d.ts +13 -0
  288. package/dist/internal/utils.d.ts.map +1 -0
  289. package/dist/internal/utils.js +50 -0
  290. package/dist/internal/utils.js.map +1 -0
  291. package/dist/node.d.ts +2 -0
  292. package/dist/node.d.ts.map +1 -0
  293. package/dist/node.js +1 -0
  294. package/package.json +68 -3
  295. package/src/ActionCtx.ts +45 -0
  296. package/src/ActionRunner.ts +36 -0
  297. package/src/AiGatewayDecisionClient.ts +40 -0
  298. package/src/AiGatewayDecisionModel.ts +46 -0
  299. package/src/AiGatewayLanguageClient.ts +41 -0
  300. package/src/AiGatewayLanguageModel.ts +61 -0
  301. package/src/Auth.ts +51 -0
  302. package/src/BlobNotFoundError.ts +12 -0
  303. package/src/Callback.ts +313 -0
  304. package/src/ComponentCtx.ts +192 -0
  305. package/src/ConvexConfigProvider.ts +39 -0
  306. package/src/ConvexFunctionDefinitions.ts +91 -0
  307. package/src/ConvexLogger.ts +43 -0
  308. package/src/CronJob.ts +42 -0
  309. package/src/CronJobs.ts +165 -0
  310. package/src/DataModel.ts +81 -0
  311. package/src/DatabaseReader.ts +118 -0
  312. package/src/DatabaseSchema.ts +139 -0
  313. package/src/DatabaseWriter.ts +232 -0
  314. package/src/Document.ts +146 -0
  315. package/src/ExecutionMetadata.ts +26 -0
  316. package/src/FunctionImpl.ts +96 -0
  317. package/src/FunctionRegistryItem.ts +85 -0
  318. package/src/GroupImpl.ts +167 -0
  319. package/src/GroupRegistry.ts +41 -0
  320. package/src/Handler.ts +191 -0
  321. package/src/HttpRouter.ts +388 -0
  322. package/src/MiddlewareImpl.ts +247 -0
  323. package/src/MiddlewareRegistryItem.ts +21 -0
  324. package/src/MutationCtx.ts +45 -0
  325. package/src/MutationRunner.ts +66 -0
  326. package/src/MutationTransactionContext.ts +48 -0
  327. package/src/OrderedQuery.ts +136 -0
  328. package/src/QueryCtx.ts +45 -0
  329. package/src/QueryInitializer.ts +537 -0
  330. package/src/QueryRunner.ts +91 -0
  331. package/src/QueryStream.ts +2476 -0
  332. package/src/QueryStreamCursor.ts +99 -0
  333. package/src/QueryStreamIndexPrefix.ts +79 -0
  334. package/src/QueryStreamIndexRange.ts +489 -0
  335. package/src/QueryStreamKey.ts +118 -0
  336. package/src/QueryStreamKeyBounds.ts +395 -0
  337. package/src/QueryStreamKeyLabels.ts +56 -0
  338. package/src/QueryStreamKeyLayout.ts +382 -0
  339. package/src/QueryStreamKeyValues.ts +112 -0
  340. package/src/QueryStreamOrderDirection.ts +29 -0
  341. package/src/QueryStreamPagination.ts +357 -0
  342. package/src/QueryStreamReadBudget.ts +167 -0
  343. package/src/QueryTransactionContext.ts +37 -0
  344. package/src/RegisteredConvexFunction.ts +415 -0
  345. package/src/RegisteredFunction.ts +391 -0
  346. package/src/RegisteredFunctions.ts +88 -0
  347. package/src/RegisteredNodeFunction.ts +120 -0
  348. package/src/Registry.ts +17 -0
  349. package/src/RegistryItems.ts +40 -0
  350. package/src/RequestMetadata.ts +20 -0
  351. package/src/ResolvedMiddleware.ts +70 -0
  352. package/src/Scheduler.ts +85 -0
  353. package/src/Storage.ts +37 -0
  354. package/src/StorageActionWriter.ts +59 -0
  355. package/src/StorageReader.ts +59 -0
  356. package/src/StorageWriter.ts +58 -0
  357. package/src/Table.ts +156 -0
  358. package/src/TableInfo.ts +106 -0
  359. package/src/TransactionMetadata.ts +20 -0
  360. package/src/VectorSearch.ts +75 -0
  361. package/src/index.ts +87 -0
  362. package/src/internal/AiGatewayDecisionClient.ts +16 -0
  363. package/src/internal/AiGatewayLanguageClient.ts +16 -0
  364. package/src/internal/AiGatewayServiceToken.ts +129 -0
  365. package/src/internal/constants.ts +1 -0
  366. package/src/internal/utils.ts +89 -0
  367. package/src/node.ts +1 -0
@@ -0,0 +1,167 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { hasPrefix, make as make$1 } from "./QueryStreamKeyLabels.js";
3
+ import { identity } from "effect/Function";
4
+ import * as Option from "effect/Option";
5
+ import * as Array from "effect/Array";
6
+ import * as Result from "effect/Result";
7
+ import * as Data from "effect/Data";
8
+ import * as Equivalence_ from "effect/Equivalence";
9
+ //#region src/QueryStreamKeyLayout.ts
10
+ var QueryStreamKeyLayout_exports = /* @__PURE__ */ __exportAll({
11
+ Equivalence: () => Equivalence,
12
+ InvalidEqualityPrefixError: () => InvalidEqualityPrefixError,
13
+ InvalidLabelPrefixError: () => InvalidLabelPrefixError,
14
+ KeyLayoutMismatchError: () => KeyLayoutMismatchError,
15
+ LabelCountMismatchError: () => LabelCountMismatchError,
16
+ concat: () => concat,
17
+ format: () => format,
18
+ fromIndex: () => fromIndex,
19
+ positions: () => positions,
20
+ rename: () => rename,
21
+ resolvePrefix: () => resolvePrefix,
22
+ runtimeWidth: () => runtimeWidth,
23
+ validateEquivalence: () => validateEquivalence,
24
+ visibleLabels: () => visibleLabels
25
+ });
26
+ const Position = Data.taggedEnum();
27
+ const TypeId = "@confect/server/QueryStreamKeyLayout";
28
+ const make = (positions) => ({ [TypeId]: {
29
+ _Labels: identity,
30
+ positions
31
+ } });
32
+ /**
33
+ * The runtime positions, including implicit ID tiebreakers.
34
+ *
35
+ * @experimental
36
+ */
37
+ const positions = (self) => self[TypeId].positions;
38
+ /**
39
+ * The equality prefix cannot select a whole number of source field paths.
40
+ *
41
+ * @experimental
42
+ */
43
+ var InvalidEqualityPrefixError = class extends Data.TaggedError("InvalidEqualityPrefixError") {
44
+ get message() {
45
+ return `QueryStreamKeyLayout.fromIndex: invalid equality prefix length (${this.eqCount}) for ${this.fieldPaths.length} field paths`;
46
+ }
47
+ };
48
+ /**
49
+ * The requested labels do not form a prefix of the layout's visible labels.
50
+ *
51
+ * @experimental
52
+ */
53
+ var InvalidLabelPrefixError = class extends Data.TaggedError("InvalidLabelPrefixError") {
54
+ get message() {
55
+ return `Labels ([${Array.join(this.prefixKeyLabels, ", ")}]) must be a prefix of the ordering labels ([${Array.join(this.keyLabels, ", ")}])`;
56
+ }
57
+ };
58
+ /**
59
+ * The replacement labels cannot fill exactly the layout's visible positions.
60
+ *
61
+ * @experimental
62
+ */
63
+ var LabelCountMismatchError = class extends Data.TaggedError("LabelCountMismatchError") {
64
+ get message() {
65
+ return `Replacement labels ([${Array.join(this.replacementKeyLabels, ", ")}]) must have as many labels as the ordering labels ([${Array.join(this.keyLabels, ", ")}])`;
66
+ }
67
+ };
68
+ function fromIndex(fieldPaths, eqCount = 0) {
69
+ if (!Number.isInteger(eqCount) || eqCount < 0 || eqCount > fieldPaths.length) return Result.fail(new InvalidEqualityPrefixError({
70
+ fieldPaths,
71
+ eqCount
72
+ }));
73
+ const visible = Array.map(Array.drop(fieldPaths, eqCount), (label) => Position.Visible({ label }));
74
+ const keyPositions = Option.exists(Array.last(fieldPaths), (fieldPath) => fieldPath === "_id") ? visible : Array.append(visible, Position.ImplicitId());
75
+ return Result.succeed(make(keyPositions));
76
+ }
77
+ /**
78
+ * Concatenate layouts without losing component tiebreakers.
79
+ *
80
+ * @experimental
81
+ */
82
+ const concat = (self, that) => make(Array.appendAll(positions(self), positions(that)));
83
+ /**
84
+ * Format visible labels and implicit IDs for diagnostics.
85
+ *
86
+ * @experimental
87
+ */
88
+ const format = (self) => {
89
+ const tokens = Array.map(positions(self), Position.$match({
90
+ Visible: ({ label }) => JSON.stringify(label),
91
+ ImplicitId: () => "<implicit _id>"
92
+ }));
93
+ return `[${Array.join(tokens, ", ")}]`;
94
+ };
95
+ function visibleLabels(self) {
96
+ return make$1(Array.filterMap(positions(self), Position.$match({
97
+ Visible: ({ label }) => Result.succeed(label),
98
+ ImplicitId: () => Result.failVoid
99
+ })));
100
+ }
101
+ /**
102
+ * Number of positions in an element's runtime key.
103
+ *
104
+ * @experimental
105
+ */
106
+ const runtimeWidth = (self) => positions(self).length;
107
+ const visiblePositions = (self) => Array.filterMap(positions(self), (position, index) => Position.$is("Visible")(position) ? Result.succeed(index) : Result.failVoid);
108
+ const PositionsEquivalence = Equivalence_.Array((self, that) => Position.$match(self, {
109
+ Visible: ({ label }) => Position.$is("Visible")(that) && label === that.label,
110
+ ImplicitId: () => Position.$is("ImplicitId")(that)
111
+ }));
112
+ /**
113
+ * @experimental
114
+ */
115
+ const Equivalence = Equivalence_.mapInput(PositionsEquivalence, positions);
116
+ /**
117
+ * @experimental
118
+ */
119
+ var KeyLayoutMismatchError = class extends Data.TaggedError("KeyLayoutMismatchError") {
120
+ get message() {
121
+ return `Key layout (${format(this.actualKeyLayout)}) does not match the expected layout (${format(this.expectedKeyLayout)})`;
122
+ }
123
+ };
124
+ /**
125
+ * @experimental
126
+ */
127
+ const validateEquivalence = (expectedKeyLayout, actualKeyLayout) => Equivalence(expectedKeyLayout, actualKeyLayout) ? Result.succeed(void 0) : Result.fail(new KeyLayoutMismatchError({
128
+ expectedKeyLayout,
129
+ actualKeyLayout
130
+ }));
131
+ /**
132
+ * Parse a visible label prefix and resolve its runtime width. Implicit IDs
133
+ * before the last selected label are included; implicit IDs after it are not.
134
+ *
135
+ * @experimental
136
+ */
137
+ const resolvePrefix = (self, prefixKeyLabels) => {
138
+ const keyLabels = visibleLabels(self);
139
+ if (!hasPrefix(keyLabels, prefixKeyLabels)) return Result.fail(new InvalidLabelPrefixError({
140
+ keyLabels,
141
+ prefixKeyLabels
142
+ }));
143
+ return Result.succeed(Option.match(Array.get(visiblePositions(self), prefixKeyLabels.length - 1), {
144
+ onNone: () => 0,
145
+ onSome: (position) => position + 1
146
+ }));
147
+ };
148
+ /**
149
+ * Relabel visible positions, preserving every implicit ID.
150
+ *
151
+ * @experimental
152
+ */
153
+ const rename = (self, replacementKeyLabels) => {
154
+ const [consumed, renamed] = Array.mapAccum(positions(self), 0, (index, position) => Position.$match(position, {
155
+ ImplicitId: () => [index, Option.some(position)],
156
+ Visible: () => [index + 1, Option.map(Array.get(replacementKeyLabels, index), (label) => Position.Visible({ label }))]
157
+ }));
158
+ const parsed = consumed === replacementKeyLabels.length ? Option.all(renamed) : Option.none();
159
+ return Result.fromOption(Option.map(parsed, make), () => new LabelCountMismatchError({
160
+ keyLabels: visibleLabels(self),
161
+ replacementKeyLabels
162
+ }));
163
+ };
164
+ //#endregion
165
+ export { Equivalence, InvalidEqualityPrefixError, InvalidLabelPrefixError, KeyLayoutMismatchError, LabelCountMismatchError, QueryStreamKeyLayout_exports, concat, format, fromIndex, positions, rename, resolvePrefix, runtimeWidth, validateEquivalence, visibleLabels };
166
+
167
+ //# sourceMappingURL=QueryStreamKeyLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamKeyLayout.js","names":["QueryStreamKeyLabels.make","QueryStreamKeyLabels.hasPrefix"],"sources":["../src/QueryStreamKeyLayout.ts"],"sourcesContent":["import * as Array from \"effect/Array\";\nimport * as Data from \"effect/Data\";\nimport * as Equivalence_ from \"effect/Equivalence\";\nimport { identity } from \"effect/Function\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport type * as Types from \"effect/Types\";\n\nimport * as QueryStreamKeyLabels from \"./QueryStreamKeyLabels\";\n\n/**\n * One runtime position of a stream key. Explicit IDs and their aliases are\n * visible; implicit ID tiebreakers have no label. Empty keys have no\n * positions.\n *\n * @experimental\n */\nexport type Position = Data.TaggedEnum<{\n Visible: { readonly label: string };\n ImplicitId: {};\n}>;\n\nconst Position = Data.taggedEnum<Position>();\nconst TypeId = \"@confect/server/QueryStreamKeyLayout\";\n\n/**\n * Describes the positions in a stream's keys: their sequence, their labels, and\n * where implicit document-ID tiebreakers occur. Every element has its own key\n * values; the stream has one shared layout.\n *\n * For example, labels `[\"text\", \"_creationTime\"]` describe the labeled\n * positions in a key such as `[\"apple\", 1, \"n1\"]`. Its layout also records the\n * final implicit ID position. Joined layouts retain each component's ID, so\n * their labels alone do not describe every key position.\n *\n * Layouts are compatible when they have the same total width, labels in the\n * same positions, and implicit-ID positions. Direction is separate. Layouts\n * contain no key values, value-type schemas, table identity, or equality-pinned\n * values. Labels start as index field paths but may be renamed. An explicit ID,\n * such as in `by_id`, has a label.\n *\n * Reuse a stream's `keyLayout` with `empty` or `flatMap`'s `innerKeyLayout`.\n * Creating a stream to obtain its layout does not read documents. The\n * `KeyLabels` parameter tracks only labels; implicit-ID positions are checked\n * at runtime. Normally this type is inferred from the source stream.\n *\n * @experimental\n */\nexport interface QueryStreamKeyLayout<\n out KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels =\n QueryStreamKeyLabels.QueryStreamKeyLabels,\n> {\n readonly [TypeId]: {\n readonly _Labels: Types.Covariant<KeyLabels>;\n readonly positions: ReadonlyArray<Position>;\n };\n}\n\n// Private construction keeps the visible label witness with the operations\n// that derive it from index fields, concatenation, or renaming.\nconst make = <KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels>(\n positions: ReadonlyArray<Position>,\n): QueryStreamKeyLayout<KeyLabels> => ({\n [TypeId]: { _Labels: identity, positions },\n});\n\n/**\n * The runtime positions, including implicit ID tiebreakers.\n *\n * @experimental\n */\nexport const positions = (\n self: QueryStreamKeyLayout,\n): ReadonlyArray<Position> => self[TypeId].positions;\n\n/**\n * The source field paths remaining after an equality prefix.\n *\n * @experimental\n */\nexport type RemainingFieldPaths<\n FieldPaths extends ReadonlyArray<string>,\n Count extends number,\n> = Count extends unknown ? DropPrefix<FieldPaths, Count> : never;\n\ntype DropPrefix<\n FieldPaths extends ReadonlyArray<string>,\n Count extends number,\n Prefix extends ReadonlyArray<unknown> = [],\n> = number extends Count\n ? ReadonlyArray<string>\n : Prefix[\"length\"] extends Count\n ? Types.Mutable<FieldPaths>\n : FieldPaths extends readonly [\n string,\n ...infer TailFieldPaths extends ReadonlyArray<string>,\n ]\n ? DropPrefix<TailFieldPaths, Count, readonly [...Prefix, unknown]>\n : FieldPaths extends readonly []\n ? []\n : ReadonlyArray<string>;\n\n/**\n * The equality prefix cannot select a whole number of source field paths.\n *\n * @experimental\n */\nexport class InvalidEqualityPrefixError extends Data.TaggedError(\n \"InvalidEqualityPrefixError\",\n)<{\n readonly fieldPaths: ReadonlyArray<string>;\n readonly eqCount: number;\n}> {\n override get message(): string {\n return `QueryStreamKeyLayout.fromIndex: invalid equality prefix length (${this.eqCount}) for ${this.fieldPaths.length} field paths`;\n }\n}\n\n/**\n * The requested labels do not form a prefix of the layout's visible labels.\n *\n * @experimental\n */\nexport class InvalidLabelPrefixError extends Data.TaggedError(\n \"InvalidLabelPrefixError\",\n)<{\n readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n readonly prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n}> {\n override get message(): string {\n return `Labels ([${Array.join(this.prefixKeyLabels, \", \")}]) must be a prefix of the ordering labels ([${Array.join(this.keyLabels, \", \")}])`;\n }\n}\n\n/**\n * The replacement labels cannot fill exactly the layout's visible positions.\n *\n * @experimental\n */\nexport class LabelCountMismatchError extends Data.TaggedError(\n \"LabelCountMismatchError\",\n)<{\n readonly keyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n readonly replacementKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels;\n}> {\n override get message(): string {\n return `Replacement labels ([${Array.join(this.replacementKeyLabels, \", \")}]) must have as many labels as the ordering labels ([${Array.join(this.keyLabels, \", \")}])`;\n }\n}\n\n/**\n * Construct a scan layout from the original index field paths, before equality\n * pinning. Only an ID absent from the end of that original key is implicit.\n * Pinning every field of `by_id` produces a zero-width layout; pinning every\n * visible field of another index leaves its implicit ID. Invalid equality\n * prefix lengths return `InvalidEqualityPrefixError`.\n *\n * @experimental\n */\nexport function fromIndex<const FieldPaths extends ReadonlyArray<string>>(\n fieldPaths: FieldPaths,\n): Result.Result<\n QueryStreamKeyLayout<QueryStreamKeyLabels.QueryStreamKeyLabels<FieldPaths>>,\n InvalidEqualityPrefixError\n>;\n/**\n * @experimental\n */\nexport function fromIndex<\n const FieldPaths extends ReadonlyArray<string>,\n const Count extends number,\n>(\n fieldPaths: FieldPaths,\n eqCount: Count,\n): Result.Result<\n QueryStreamKeyLayout<\n QueryStreamKeyLabels.QueryStreamKeyLabels<\n RemainingFieldPaths<FieldPaths, Count>\n >\n >,\n InvalidEqualityPrefixError\n>;\nexport function fromIndex(\n fieldPaths: ReadonlyArray<string>,\n eqCount = 0,\n): Result.Result<QueryStreamKeyLayout, InvalidEqualityPrefixError> {\n if (\n !Number.isInteger(eqCount) ||\n eqCount < 0 ||\n eqCount > fieldPaths.length\n ) {\n return Result.fail(new InvalidEqualityPrefixError({ fieldPaths, eqCount }));\n }\n const visible = Array.map(Array.drop(fieldPaths, eqCount), (label) =>\n Position.Visible({ label }),\n );\n const keyPositions = Option.exists(\n Array.last(fieldPaths),\n (fieldPath) => fieldPath === \"_id\",\n )\n ? visible\n : Array.append(visible, Position.ImplicitId());\n return Result.succeed(make(keyPositions));\n}\n\n/**\n * Concatenate layouts without losing component tiebreakers.\n *\n * @experimental\n */\nexport const concat = <\n LeftKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n RightKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n>(\n self: QueryStreamKeyLayout<LeftKeyLabels>,\n that: QueryStreamKeyLayout<RightKeyLabels>,\n): QueryStreamKeyLayout<\n QueryStreamKeyLabels.Concat<LeftKeyLabels, RightKeyLabels>\n> => make(Array.appendAll(positions(self), positions(that)));\n\n/**\n * Format visible labels and implicit IDs for diagnostics.\n *\n * @experimental\n */\nexport const format = (self: QueryStreamKeyLayout): string => {\n const tokens = Array.map(\n positions(self),\n Position.$match({\n Visible: ({ label }) => JSON.stringify(label),\n ImplicitId: () => \"<implicit _id>\",\n }),\n );\n return `[${Array.join(tokens, \", \")}]`;\n};\n\n/**\n * The labels available to `distinct` and `renameKey`.\n *\n * @experimental\n */\nexport function visibleLabels<\n KeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n>(self: QueryStreamKeyLayout<KeyLabels>): KeyLabels;\nexport function visibleLabels(\n self: QueryStreamKeyLayout,\n): QueryStreamKeyLabels.QueryStreamKeyLabels {\n return QueryStreamKeyLabels.make(\n Array.filterMap(\n positions(self),\n Position.$match({\n Visible: ({ label }) => Result.succeed(label),\n ImplicitId: () => Result.failVoid,\n }),\n ),\n );\n}\n\n/**\n * Number of positions in an element's runtime key.\n *\n * @experimental\n */\nexport const runtimeWidth = (self: QueryStreamKeyLayout): number =>\n positions(self).length;\n\n// Runtime offsets of visible labels, used to resolve label prefixes.\nconst visiblePositions = (self: QueryStreamKeyLayout): ReadonlyArray<number> =>\n Array.filterMap(positions(self), (position, index) =>\n Position.$is(\"Visible\")(position) ? Result.succeed(index) : Result.failVoid,\n );\n\nconst PositionsEquivalence = Equivalence_.Array<Position>((self, that) =>\n Position.$match(self, {\n Visible: ({ label }) =>\n Position.$is(\"Visible\")(that) && label === that.label,\n ImplicitId: () => Position.$is(\"ImplicitId\")(that),\n }),\n);\n\n/**\n * @experimental\n */\nexport const Equivalence: Equivalence_.Equivalence<QueryStreamKeyLayout> =\n Equivalence_.mapInput(PositionsEquivalence, positions);\n\n/**\n * @experimental\n */\nexport class KeyLayoutMismatchError extends Data.TaggedError(\n \"KeyLayoutMismatchError\",\n)<{\n readonly expectedKeyLayout: QueryStreamKeyLayout;\n readonly actualKeyLayout: QueryStreamKeyLayout;\n}> {\n override get message(): string {\n return `Key layout (${format(this.actualKeyLayout)}) does not match the expected layout (${format(this.expectedKeyLayout)})`;\n }\n}\n\n/**\n * @experimental\n */\nexport const validateEquivalence = (\n expectedKeyLayout: QueryStreamKeyLayout,\n actualKeyLayout: QueryStreamKeyLayout,\n): Result.Result<void, KeyLayoutMismatchError> =>\n Equivalence(expectedKeyLayout, actualKeyLayout)\n ? Result.succeed(undefined)\n : Result.fail(\n new KeyLayoutMismatchError({ expectedKeyLayout, actualKeyLayout }),\n );\n\n/**\n * Parse a visible label prefix and resolve its runtime width. Implicit IDs\n * before the last selected label are included; implicit IDs after it are not.\n *\n * @experimental\n */\nexport const resolvePrefix = (\n self: QueryStreamKeyLayout,\n prefixKeyLabels: QueryStreamKeyLabels.QueryStreamKeyLabels,\n): Result.Result<number, InvalidLabelPrefixError> => {\n const keyLabels = visibleLabels(self);\n if (!QueryStreamKeyLabels.hasPrefix(keyLabels, prefixKeyLabels)) {\n return Result.fail(\n new InvalidLabelPrefixError({ keyLabels, prefixKeyLabels }),\n );\n }\n return Result.succeed(\n Option.match(\n Array.get(visiblePositions(self), prefixKeyLabels.length - 1),\n {\n onNone: () => 0,\n onSome: (position) => position + 1,\n },\n ),\n );\n};\n\n/**\n * Relabel visible positions, preserving every implicit ID.\n *\n * @experimental\n */\nexport const rename = <\n ReplacementKeyLabels extends QueryStreamKeyLabels.QueryStreamKeyLabels,\n>(\n self: QueryStreamKeyLayout,\n replacementKeyLabels: ReplacementKeyLabels,\n): Result.Result<\n QueryStreamKeyLayout<ReplacementKeyLabels>,\n LabelCountMismatchError\n> => {\n const [consumed, renamed] = Array.mapAccum(\n positions(self),\n 0,\n (index, position): readonly [number, Option.Option<Position>] =>\n Position.$match(position, {\n ImplicitId: () => [index, Option.some(position)] as const,\n Visible: () =>\n [\n index + 1,\n Option.map(Array.get(replacementKeyLabels, index), (label) =>\n Position.Visible({ label }),\n ),\n ] as const,\n }),\n );\n const parsed =\n consumed === replacementKeyLabels.length\n ? Option.all(renamed)\n : Option.none();\n return Result.fromOption(\n Option.map(parsed, make<ReplacementKeyLabels>),\n () =>\n new LabelCountMismatchError({\n keyLabels: visibleLabels(self),\n replacementKeyLabels,\n }),\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type Value } from "convex/values";
2
+ import * as Order_ from "effect/Order";
3
+ import type * as Record from "effect/Record";
4
+ import * as Schema from "effect/Schema";
5
+ import type * as QueryStreamOrderDirection from "./QueryStreamOrderDirection";
6
+ declare const KeyValue: Schema.decodeTo<Schema.declare<Value | undefined, Value | undefined>, Schema.Codec<Schema.Json, Schema.Json, never, never>, never, never>;
7
+ /**
8
+ * @experimental
9
+ */
10
+ export type KeyValue = typeof KeyValue.Type;
11
+ /**
12
+ * @experimental
13
+ */
14
+ export declare const QueryStreamKeyValues: Schema.$Array<Schema.decodeTo<Schema.declare<Value | undefined, Value | undefined>, Schema.Codec<Schema.Json, Schema.Json, never, never>, never, never>>;
15
+ /**
16
+ * @experimental
17
+ */
18
+ export type QueryStreamKeyValues = typeof QueryStreamKeyValues.Type;
19
+ /**
20
+ * `Order` over Convex values, matching Convex's index ordering—a wrapper around
21
+ * the canonical `compareValues` from `convex/values` (type rank first, then
22
+ * within the type, including UTF-8 string order and NaN bit-level ordering).
23
+ *
24
+ * @experimental
25
+ */
26
+ export declare const ValueOrder: Order_.Order<KeyValue>;
27
+ /**
28
+ * Compare key values in the requested direction. Ascending order is
29
+ * lexicographic by `ValueOrder`, then by length, matching Convex array values;
30
+ * descending order reverses it.
31
+ *
32
+ * @experimental
33
+ */
34
+ export declare const Order: (orderDirection: QueryStreamOrderDirection.QueryStreamOrderDirection) => Order_.Order<QueryStreamKeyValues>;
35
+ /**
36
+ * @experimental
37
+ */
38
+ export declare const extract: (encoded: Record.ReadonlyRecord<string, unknown>, keyPaths: ReadonlyArray<ReadonlyArray<string>>) => QueryStreamKeyValues;
39
+ export {};
40
+ //# sourceMappingURL=QueryStreamKeyValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamKeyValues.d.ts","sourceRoot":"","sources":["../src/QueryStreamKeyValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,KAAK,EACX,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,KAAK,yBAAyB,MAAM,6BAA6B,CAAC;AAG9E,QAAA,MAAM,QAAQ,2IAmCb,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,oBAAoB,0JAAyB,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAEpE;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAE7C,CAAC;AAKF;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,mBACA,yBAAyB,CAAC,yBAAyB,KAClE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CACyB,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,OAAO,YACT,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,YACrC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAC7C,oBAUwB,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Schema from "effect/Schema";
4
+ import { compareValues, convexToJson, jsonToConvex } from "convex/values";
5
+ import * as Array from "effect/Array";
6
+ import * as Order_ from "effect/Order";
7
+ import * as Result from "effect/Result";
8
+ import * as SchemaIssue from "effect/SchemaIssue";
9
+ import * as SchemaGetter from "effect/SchemaGetter";
10
+ //#region src/QueryStreamKeyValues.ts
11
+ var QueryStreamKeyValues_exports = /* @__PURE__ */ __exportAll({
12
+ Order: () => Order,
13
+ QueryStreamKeyValues: () => QueryStreamKeyValues,
14
+ ValueOrder: () => ValueOrder,
15
+ extract: () => extract
16
+ });
17
+ const UNDEFINED_SENTINEL = { $undefined: true };
18
+ const KeyValue = Schema.Json.pipe(Schema.decodeTo(Schema.declare((value) => value === void 0 || Result.isSuccess(Result.try(() => convexToJson(value)))), {
19
+ decode: SchemaGetter.transformEffect((value, options) => Effect.try({
20
+ try: () => Result.match(Schema.decodeUnknownResult(Schema.Struct({ $undefined: Schema.Literal(true) }), { onExcessProperty: "error" })(value), {
21
+ onSuccess: () => void 0,
22
+ onFailure: () => jsonToConvex(value)
23
+ }),
24
+ catch: () => new SchemaIssue.InvalidValue({ message: "Invalid Convex key value" }, value, options)
25
+ })),
26
+ encode: SchemaGetter.transform((value) => value === void 0 ? UNDEFINED_SENTINEL : convexToJson(value))
27
+ }));
28
+ /**
29
+ * @experimental
30
+ */
31
+ const QueryStreamKeyValues = Schema.Array(KeyValue);
32
+ /**
33
+ * `Order` over Convex values, matching Convex's index ordering—a wrapper around
34
+ * the canonical `compareValues` from `convex/values` (type rank first, then
35
+ * within the type, including UTF-8 string order and NaN bit-level ordering).
36
+ *
37
+ * @experimental
38
+ */
39
+ const ValueOrder = Order_.make((self, that) => Math.sign(compareValues(self, that)));
40
+ const AscendingOrder = Order_.Array(ValueOrder);
41
+ const DescendingOrder = Order_.flip(AscendingOrder);
42
+ /**
43
+ * Compare key values in the requested direction. Ascending order is
44
+ * lexicographic by `ValueOrder`, then by length, matching Convex array values;
45
+ * descending order reverses it.
46
+ *
47
+ * @experimental
48
+ */
49
+ const Order = (orderDirection) => orderDirection === "asc" ? AscendingOrder : DescendingOrder;
50
+ /**
51
+ * @experimental
52
+ */
53
+ const extract = (encoded, keyPaths) => Array.map(keyPaths, (path) => Array.reduce(path, encoded, (value, segment) => value?.[segment]));
54
+ //#endregion
55
+ export { Order, QueryStreamKeyValues, QueryStreamKeyValues_exports, ValueOrder, extract };
56
+
57
+ //# sourceMappingURL=QueryStreamKeyValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamKeyValues.js","names":[],"sources":["../src/QueryStreamKeyValues.ts"],"sourcesContent":["import {\n convexToJson,\n jsonToConvex,\n compareValues,\n type Value,\n} from \"convex/values\";\nimport * as Array from \"effect/Array\";\nimport * as Effect from \"effect/Effect\";\nimport * as Order_ from \"effect/Order\";\nimport type * as Record from \"effect/Record\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaGetter from \"effect/SchemaGetter\";\nimport * as SchemaIssue from \"effect/SchemaIssue\";\nimport type * as QueryStreamOrderDirection from \"./QueryStreamOrderDirection\";\n\nconst UNDEFINED_SENTINEL = { $undefined: true } as const;\nconst KeyValue = Schema.Json.pipe(\n Schema.decodeTo(\n Schema.declare<Value | undefined>(\n (value): value is Value | undefined =>\n value === undefined ||\n Result.isSuccess(Result.try(() => convexToJson(value as Value))),\n ),\n {\n decode: SchemaGetter.transformEffect((value, options) =>\n Effect.try({\n try: () =>\n Result.match(\n Schema.decodeUnknownResult(\n Schema.Struct({ $undefined: Schema.Literal(true) }),\n { onExcessProperty: \"error\" },\n )(value),\n {\n onSuccess: () => undefined,\n onFailure: () =>\n jsonToConvex(value as Parameters<typeof jsonToConvex>[0]),\n },\n ),\n catch: () =>\n new SchemaIssue.InvalidValue(\n { message: \"Invalid Convex key value\" },\n value,\n options,\n ),\n }),\n ),\n encode: SchemaGetter.transform((value) =>\n value === undefined ? UNDEFINED_SENTINEL : convexToJson(value),\n ),\n },\n ),\n);\n\n/**\n * @experimental\n */\nexport type KeyValue = typeof KeyValue.Type;\n\n/**\n * @experimental\n */\nexport const QueryStreamKeyValues = Schema.Array(KeyValue);\n\n/**\n * @experimental\n */\nexport type QueryStreamKeyValues = typeof QueryStreamKeyValues.Type;\n\n/**\n * `Order` over Convex values, matching Convex's index ordering—a wrapper around\n * the canonical `compareValues` from `convex/values` (type rank first, then\n * within the type, including UTF-8 string order and NaN bit-level ordering).\n *\n * @experimental\n */\nexport const ValueOrder: Order_.Order<KeyValue> = Order_.make(\n (self, that) => Math.sign(compareValues(self, that)) as -1 | 0 | 1,\n);\n\nconst AscendingOrder = Order_.Array(ValueOrder);\nconst DescendingOrder = Order_.flip(AscendingOrder);\n\n/**\n * Compare key values in the requested direction. Ascending order is\n * lexicographic by `ValueOrder`, then by length, matching Convex array values;\n * descending order reverses it.\n *\n * @experimental\n */\nexport const Order = (\n orderDirection: QueryStreamOrderDirection.QueryStreamOrderDirection,\n): Order_.Order<QueryStreamKeyValues> =>\n orderDirection === \"asc\" ? AscendingOrder : DescendingOrder;\n\n/**\n * @experimental\n */\nexport const extract = (\n encoded: Record.ReadonlyRecord<string, unknown>,\n keyPaths: ReadonlyArray<ReadonlyArray<string>>,\n): QueryStreamKeyValues =>\n Array.map(keyPaths, (path) =>\n Array.reduce(\n path,\n encoded as unknown,\n (value, segment) =>\n (value as Record.ReadonlyRecord<string, unknown> | undefined)?.[\n segment\n ],\n ),\n ) as QueryStreamKeyValues;\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAM,qBAAqB,EAAE,YAAY,KAAK;AAC9C,MAAM,WAAW,OAAO,KAAK,KAC3B,OAAO,SACL,OAAO,SACJ,UACC,UAAU,KAAA,KACV,OAAO,UAAU,OAAO,UAAU,aAAa,KAAc,CAAC,CAAC,CACnE,GACA;CACE,QAAQ,aAAa,iBAAiB,OAAO,YAC3C,OAAO,IAAI;EACT,WACE,OAAO,MACL,OAAO,oBACL,OAAO,OAAO,EAAE,YAAY,OAAO,QAAQ,IAAI,EAAE,CAAC,GAClD,EAAE,kBAAkB,QAAQ,CAC9B,CAAC,CAAC,KAAK,GACP;GACE,iBAAiB,KAAA;GACjB,iBACE,aAAa,KAA2C;EAC5D,CACF;EACF,aACE,IAAI,YAAY,aACd,EAAE,SAAS,2BAA2B,GACtC,OACA,OACF;CACJ,CAAC,CACH;CACA,QAAQ,aAAa,WAAW,UAC9B,UAAU,KAAA,IAAY,qBAAqB,aAAa,KAAK,CAC/D;AACF,CACF,CACF;;;;AAUA,MAAa,uBAAuB,OAAO,MAAM,QAAQ;;;;;;;;AAczD,MAAa,aAAqC,OAAO,MACtD,MAAM,SAAS,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC,CACrD;AAEA,MAAM,iBAAiB,OAAO,MAAM,UAAU;AAC9C,MAAM,kBAAkB,OAAO,KAAK,cAAc;;;;;;;;AASlD,MAAa,SACX,mBAEA,mBAAmB,QAAQ,iBAAiB;;;;AAK9C,MAAa,WACX,SACA,aAEA,MAAM,IAAI,WAAW,SACnB,MAAM,OACJ,MACA,UACC,OAAO,YACL,QACC,QAEN,CACF"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The direction a stream is ordered in. Tracked covariantly in the type: a
3
+ * stream of a known direction is also a stream of `"asc" | "desc"`, the class
4
+ * default, so annotations that omit the direction accept every stream.
5
+ * Combining streams of different known directions—`merge`, or a `flatMap` whose
6
+ * inner streams run the other way—is a type error; a direction chosen at
7
+ * runtime types as the union, and the runtime check catches what the types
8
+ * can't see (`merge` throws when the streams are combined, `flatMap` fails when
9
+ * the join runs).
10
+ *
11
+ * @experimental
12
+ */
13
+ export type QueryStreamOrderDirection = "asc" | "desc";
14
+ /**
15
+ * The opposite of a direction; a runtime-chosen direction stays the union.
16
+ *
17
+ * @experimental
18
+ */
19
+ export type Flip<OrderDirection extends QueryStreamOrderDirection> = OrderDirection extends "asc" ? "desc" : "asc";
20
+ /**
21
+ * @experimental
22
+ */
23
+ export declare const flip: <OrderDirection extends QueryStreamOrderDirection>(orderDirection: OrderDirection) => Flip<OrderDirection>;
24
+ //# sourceMappingURL=QueryStreamOrderDirection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamOrderDirection.d.ts","sourceRoot":"","sources":["../src/QueryStreamOrderDirection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,IAAI,CAAC,cAAc,SAAS,yBAAyB,IAC/D,cAAc,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,cAAc,SAAS,yBAAyB,kBACnD,cAAc,KAC7B,IAAI,CAAC,cAAc,CAC+C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ //#region src/QueryStreamOrderDirection.ts
3
+ var QueryStreamOrderDirection_exports = /* @__PURE__ */ __exportAll({ flip: () => flip });
4
+ /**
5
+ * @experimental
6
+ */
7
+ const flip = (orderDirection) => orderDirection === "asc" ? "desc" : "asc";
8
+ //#endregion
9
+ export { QueryStreamOrderDirection_exports, flip };
10
+
11
+ //# sourceMappingURL=QueryStreamOrderDirection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamOrderDirection.js","names":[],"sources":["../src/QueryStreamOrderDirection.ts"],"sourcesContent":["/**\n * The direction a stream is ordered in. Tracked covariantly in the type: a\n * stream of a known direction is also a stream of `\"asc\" | \"desc\"`, the class\n * default, so annotations that omit the direction accept every stream.\n * Combining streams of different known directions—`merge`, or a `flatMap` whose\n * inner streams run the other way—is a type error; a direction chosen at\n * runtime types as the union, and the runtime check catches what the types\n * can't see (`merge` throws when the streams are combined, `flatMap` fails when\n * the join runs).\n *\n * @experimental\n */\nexport type QueryStreamOrderDirection = \"asc\" | \"desc\";\n\n/**\n * The opposite of a direction; a runtime-chosen direction stays the union.\n *\n * @experimental\n */\nexport type Flip<OrderDirection extends QueryStreamOrderDirection> =\n OrderDirection extends \"asc\" ? \"desc\" : \"asc\";\n\n/**\n * @experimental\n */\nexport const flip = <OrderDirection extends QueryStreamOrderDirection>(\n orderDirection: OrderDirection,\n): Flip<OrderDirection> =>\n (orderDirection === \"asc\" ? \"desc\" : \"asc\") as Flip<OrderDirection>;\n"],"mappings":";;;;;;AAyBA,MAAa,QACX,mBAEC,mBAAmB,QAAQ,SAAS"}
@@ -0,0 +1,264 @@
1
+ import * as Chunk from "effect/Chunk";
2
+ import * as Data from "effect/Data";
3
+ import * as Option from "effect/Option";
4
+ import * as Result from "effect/Result";
5
+ import * as Schema from "effect/Schema";
6
+ import type * as QueryStreamKey from "./QueryStreamKey";
7
+ declare const PageSize: Schema.brand<Schema.Natural, "~@confect/server/QueryStreamPagination/PageSize">;
8
+ type PageSize = typeof PageSize.Type;
9
+ declare const InvalidPageSizeError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
10
+ readonly _tag: "InvalidPageSizeError";
11
+ } & Readonly<A>;
12
+ /**
13
+ * @experimental
14
+ */
15
+ export declare class InvalidPageSizeError extends InvalidPageSizeError_base<{
16
+ readonly numItems: number;
17
+ }> {
18
+ get message(): string;
19
+ }
20
+ declare const EmptyInitialPageError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
21
+ readonly _tag: "EmptyInitialPageError";
22
+ } & Readonly<A>;
23
+ /**
24
+ * @experimental
25
+ */
26
+ export declare class EmptyInitialPageError extends EmptyInitialPageError_base {
27
+ get message(): string;
28
+ }
29
+ /**
30
+ * @experimental
31
+ */
32
+ export type Range = Data.TaggedEnum<{
33
+ Unpinned: {};
34
+ ThroughKey: {
35
+ readonly key: QueryStreamKey.Complete;
36
+ };
37
+ ThroughEnd: {};
38
+ }>;
39
+ /**
40
+ * @experimental
41
+ */
42
+ export declare const Range: {
43
+ readonly $is: <Tag extends "ThroughEnd" | "ThroughKey" | "Unpinned">(tag: Tag) => (u: unknown) => u is Extract<{
44
+ readonly _tag: "ThroughEnd";
45
+ }, {
46
+ readonly _tag: Tag;
47
+ }> | Extract<{
48
+ readonly _tag: "ThroughKey";
49
+ readonly key: QueryStreamKey.Complete;
50
+ }, {
51
+ readonly _tag: Tag;
52
+ }> | Extract<{
53
+ readonly _tag: "Unpinned";
54
+ }, {
55
+ readonly _tag: Tag;
56
+ }>;
57
+ readonly $match: {
58
+ <Cases extends { readonly [Tag in "ThroughEnd" | "ThroughKey" | "Unpinned"]: (args: Extract<{
59
+ readonly _tag: "ThroughEnd";
60
+ } | {
61
+ readonly _tag: "ThroughKey";
62
+ readonly key: QueryStreamKey.Complete;
63
+ } | {
64
+ readonly _tag: "Unpinned";
65
+ }, {
66
+ readonly _tag: Tag;
67
+ }>) => any; }>(cases: Cases): (value: {
68
+ readonly _tag: "ThroughEnd";
69
+ } | {
70
+ readonly _tag: "ThroughKey";
71
+ readonly key: QueryStreamKey.Complete;
72
+ } | {
73
+ readonly _tag: "Unpinned";
74
+ }) => import("effect/Unify").Unify<ReturnType<Cases["ThroughEnd" | "ThroughKey" | "Unpinned"]>>;
75
+ <Cases extends { readonly [Tag in "ThroughEnd" | "ThroughKey" | "Unpinned"]: (args: Extract<{
76
+ readonly _tag: "ThroughEnd";
77
+ } | {
78
+ readonly _tag: "ThroughKey";
79
+ readonly key: QueryStreamKey.Complete;
80
+ } | {
81
+ readonly _tag: "Unpinned";
82
+ }, {
83
+ readonly _tag: Tag;
84
+ }>) => any; }>(value: {
85
+ readonly _tag: "ThroughEnd";
86
+ } | {
87
+ readonly _tag: "ThroughKey";
88
+ readonly key: QueryStreamKey.Complete;
89
+ } | {
90
+ readonly _tag: "Unpinned";
91
+ }, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["ThroughEnd" | "ThroughKey" | "Unpinned"]>>;
92
+ };
93
+ readonly ThroughEnd: Data.TaggedEnum.ConstructorFrom<{
94
+ readonly _tag: "ThroughEnd";
95
+ }, "_tag">;
96
+ readonly ThroughKey: Data.TaggedEnum.ConstructorFrom<{
97
+ readonly _tag: "ThroughKey";
98
+ readonly key: QueryStreamKey.Complete;
99
+ }, "_tag">;
100
+ readonly Unpinned: Data.TaggedEnum.ConstructorFrom<{
101
+ readonly _tag: "Unpinned";
102
+ }, "_tag">;
103
+ };
104
+ /**
105
+ * @experimental
106
+ */
107
+ export type Start = Data.TaggedEnum<{
108
+ Beginning: {};
109
+ After: {
110
+ readonly key: QueryStreamKey.Complete;
111
+ readonly cursor: string;
112
+ };
113
+ }>;
114
+ /**
115
+ * @experimental
116
+ */
117
+ export declare const Start: {
118
+ readonly $is: <Tag extends "After" | "Beginning">(tag: Tag) => (u: unknown) => u is Extract<{
119
+ readonly _tag: "After";
120
+ readonly key: QueryStreamKey.Complete;
121
+ readonly cursor: string;
122
+ }, {
123
+ readonly _tag: Tag;
124
+ }> | Extract<{
125
+ readonly _tag: "Beginning";
126
+ }, {
127
+ readonly _tag: Tag;
128
+ }>;
129
+ readonly $match: {
130
+ <Cases extends { readonly [Tag in "After" | "Beginning"]: (args: Extract<{
131
+ readonly _tag: "After";
132
+ readonly key: QueryStreamKey.Complete;
133
+ readonly cursor: string;
134
+ } | {
135
+ readonly _tag: "Beginning";
136
+ }, {
137
+ readonly _tag: Tag;
138
+ }>) => any; }>(cases: Cases): (value: {
139
+ readonly _tag: "After";
140
+ readonly key: QueryStreamKey.Complete;
141
+ readonly cursor: string;
142
+ } | {
143
+ readonly _tag: "Beginning";
144
+ }) => import("effect/Unify").Unify<ReturnType<Cases["After" | "Beginning"]>>;
145
+ <Cases extends { readonly [Tag in "After" | "Beginning"]: (args: Extract<{
146
+ readonly _tag: "After";
147
+ readonly key: QueryStreamKey.Complete;
148
+ readonly cursor: string;
149
+ } | {
150
+ readonly _tag: "Beginning";
151
+ }, {
152
+ readonly _tag: Tag;
153
+ }>) => any; }>(value: {
154
+ readonly _tag: "After";
155
+ readonly key: QueryStreamKey.Complete;
156
+ readonly cursor: string;
157
+ } | {
158
+ readonly _tag: "Beginning";
159
+ }, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["After" | "Beginning"]>>;
160
+ };
161
+ readonly After: Data.TaggedEnum.ConstructorFrom<{
162
+ readonly _tag: "After";
163
+ readonly key: QueryStreamKey.Complete;
164
+ readonly cursor: string;
165
+ }, "_tag">;
166
+ readonly Beginning: Data.TaggedEnum.ConstructorFrom<{
167
+ readonly _tag: "Beginning";
168
+ }, "_tag">;
169
+ };
170
+ /**
171
+ * @experimental
172
+ */
173
+ export interface ScanRequest {
174
+ readonly numItems: PageSize;
175
+ readonly after: Option.Option<QueryStreamKey.Complete>;
176
+ readonly range: Range;
177
+ }
178
+ /**
179
+ * @experimental
180
+ */
181
+ export type Request = Data.TaggedEnum<{
182
+ Unchanged: {
183
+ readonly cursor: string;
184
+ };
185
+ Scan: ScanRequest;
186
+ }>;
187
+ /**
188
+ * @experimental
189
+ */
190
+ export declare const parseRequest: (numItems: number, start: Start, range: Range) => Result.Result<Request, InvalidPageSizeError | EmptyInitialPageError>;
191
+ /**
192
+ * A nonempty scan, including filtered markers.
193
+ */
194
+ type Progress = Chunk.NonEmptyChunk<QueryStreamKey.Complete>;
195
+ interface Stopped<Doc> {
196
+ readonly page: Chunk.Chunk<Doc>;
197
+ readonly progress: Progress;
198
+ }
199
+ /**
200
+ * @experimental
201
+ */
202
+ export type QueryStreamPagination<Doc> = Data.TaggedEnum<{
203
+ Reading: {
204
+ readonly page: Chunk.Chunk<Doc>;
205
+ readonly progress: Option.Option<Progress>;
206
+ };
207
+ ItemLimit: Stopped<Doc>;
208
+ ReadLimit: Stopped<Doc>;
209
+ }>;
210
+ /**
211
+ * @experimental
212
+ */
213
+ export declare const initial: <Doc>() => QueryStreamPagination<Doc>;
214
+ /**
215
+ * @experimental
216
+ */
217
+ export declare const record: <Doc>(request: ScanRequest, self: QueryStreamPagination<Doc>, doc: Option.Option<Doc>, key: QueryStreamKey.Complete, readLimit: boolean) => QueryStreamPagination<Doc>;
218
+ /**
219
+ * @experimental
220
+ */
221
+ export type Continuation = Data.TaggedEnum<{
222
+ End: {};
223
+ Key: {
224
+ readonly key: QueryStreamKey.Complete;
225
+ };
226
+ }>;
227
+ interface Split<Doc> {
228
+ readonly page: ReadonlyArray<Doc>;
229
+ readonly continuation: Continuation;
230
+ readonly splitKey: QueryStreamKey.Complete;
231
+ }
232
+ /**
233
+ * @experimental
234
+ */
235
+ export type Outcome<Doc> = Data.TaggedEnum<{
236
+ Done: {
237
+ readonly page: ReadonlyArray<Doc>;
238
+ };
239
+ Continue: {
240
+ readonly page: ReadonlyArray<Doc>;
241
+ readonly key: QueryStreamKey.Complete;
242
+ };
243
+ SplitRequired: Split<Doc>;
244
+ SplitRecommended: Split<Doc>;
245
+ }>;
246
+ declare const UnsafePageBoundaryError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
247
+ readonly _tag: "UnsafePageBoundaryError";
248
+ } & Readonly<A>;
249
+ /**
250
+ * @experimental
251
+ */
252
+ export declare class UnsafePageBoundaryError extends UnsafePageBoundaryError_base<{
253
+ readonly reason: "NoProgress" | "NoInteriorSplit";
254
+ }> {
255
+ get message(): string;
256
+ }
257
+ /**
258
+ * Decide the page result without reading a stream or serializing a cursor.
259
+ *
260
+ * @experimental
261
+ */
262
+ export declare const finish: <Doc>(request: ScanRequest, self: QueryStreamPagination<Doc>, upstreamStopped: boolean) => Result.Result<Outcome<Doc>, UnsafePageBoundaryError>;
263
+ export {};
264
+ //# sourceMappingURL=QueryStreamPagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamPagination.d.ts","sourceRoot":"","sources":["../src/QueryStreamPagination.ts"],"names":[],"mappings":"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"}