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

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,193 @@
1
+ import type { GenericDocument, FieldTypeFromFieldPath, IndexRange as ConvexIndexRange, IndexRangeBuilder as ConvexIndexRangeBuilder } from "convex/server";
2
+ import * as Data from "effect/Data";
3
+ import * as Option from "effect/Option";
4
+ import * as Result from "effect/Result";
5
+ import type * as Types from "effect/Types";
6
+ import * as QueryStreamIndexPrefix from "./QueryStreamIndexPrefix.js";
7
+ import * as QueryStreamKeyBounds from "./QueryStreamKeyBounds.js";
8
+ import * as QueryStreamKeyValues from "./QueryStreamKeyValues.js";
9
+ import type * as QueryStreamOrderDirection from "./QueryStreamOrderDirection.js";
10
+ type Head<FieldPaths extends ReadonlyArray<string>> = FieldPaths extends readonly [infer H extends string, ...ReadonlyArray<string>] ? H : never;
11
+ type Tail<FieldPaths extends ReadonlyArray<string>> = FieldPaths extends readonly [
12
+ string,
13
+ ...infer Rest extends ReadonlyArray<string>
14
+ ] ? Rest : ReadonlyArray<string>;
15
+ declare const TypeId = "~@confect/server/QueryStreamIndexRange";
16
+ interface Equality {
17
+ readonly fieldPath: string;
18
+ readonly value: QueryStreamKeyValues.KeyValue;
19
+ }
20
+ interface Endpoint {
21
+ readonly value: QueryStreamKeyValues.KeyValue;
22
+ readonly inclusive: boolean;
23
+ }
24
+ type Interval = Data.TaggedEnum<{
25
+ Lower: {
26
+ readonly lower: Endpoint;
27
+ };
28
+ Upper: {
29
+ readonly upper: Endpoint;
30
+ };
31
+ Between: {
32
+ readonly lower: Endpoint;
33
+ readonly upper: Endpoint;
34
+ };
35
+ }>;
36
+ declare const Interval: {
37
+ readonly $is: <Tag extends "Between" | "Lower" | "Upper">(tag: Tag) => (u: unknown) => u is Extract<{
38
+ readonly _tag: "Between";
39
+ readonly lower: Endpoint;
40
+ readonly upper: Endpoint;
41
+ }, {
42
+ readonly _tag: Tag;
43
+ }> | Extract<{
44
+ readonly _tag: "Lower";
45
+ readonly lower: Endpoint;
46
+ }, {
47
+ readonly _tag: Tag;
48
+ }> | Extract<{
49
+ readonly _tag: "Upper";
50
+ readonly upper: Endpoint;
51
+ }, {
52
+ readonly _tag: Tag;
53
+ }>;
54
+ readonly $match: {
55
+ <Cases extends { readonly [Tag in "Between" | "Lower" | "Upper"]: (args: Extract<{
56
+ readonly _tag: "Between";
57
+ readonly lower: Endpoint;
58
+ readonly upper: Endpoint;
59
+ } | {
60
+ readonly _tag: "Lower";
61
+ readonly lower: Endpoint;
62
+ } | {
63
+ readonly _tag: "Upper";
64
+ readonly upper: Endpoint;
65
+ }, {
66
+ readonly _tag: Tag;
67
+ }>) => any; }>(cases: Cases): (value: {
68
+ readonly _tag: "Between";
69
+ readonly lower: Endpoint;
70
+ readonly upper: Endpoint;
71
+ } | {
72
+ readonly _tag: "Lower";
73
+ readonly lower: Endpoint;
74
+ } | {
75
+ readonly _tag: "Upper";
76
+ readonly upper: Endpoint;
77
+ }) => import("effect/Unify").Unify<ReturnType<Cases["Between" | "Lower" | "Upper"]>>;
78
+ <Cases extends { readonly [Tag in "Between" | "Lower" | "Upper"]: (args: Extract<{
79
+ readonly _tag: "Between";
80
+ readonly lower: Endpoint;
81
+ readonly upper: Endpoint;
82
+ } | {
83
+ readonly _tag: "Lower";
84
+ readonly lower: Endpoint;
85
+ } | {
86
+ readonly _tag: "Upper";
87
+ readonly upper: Endpoint;
88
+ }, {
89
+ readonly _tag: Tag;
90
+ }>) => any; }>(value: {
91
+ readonly _tag: "Between";
92
+ readonly lower: Endpoint;
93
+ readonly upper: Endpoint;
94
+ } | {
95
+ readonly _tag: "Lower";
96
+ readonly lower: Endpoint;
97
+ } | {
98
+ readonly _tag: "Upper";
99
+ readonly upper: Endpoint;
100
+ }, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Between" | "Lower" | "Upper"]>>;
101
+ };
102
+ readonly Between: Data.TaggedEnum.ConstructorFrom<{
103
+ readonly _tag: "Between";
104
+ readonly lower: Endpoint;
105
+ readonly upper: Endpoint;
106
+ }, "_tag">;
107
+ readonly Lower: Data.TaggedEnum.ConstructorFrom<{
108
+ readonly _tag: "Lower";
109
+ readonly lower: Endpoint;
110
+ }, "_tag">;
111
+ readonly Upper: Data.TaggedEnum.ConstructorFrom<{
112
+ readonly _tag: "Upper";
113
+ readonly upper: Endpoint;
114
+ }, "_tag">;
115
+ };
116
+ interface Constraints {
117
+ readonly equalities: ReadonlyArray<Equality>;
118
+ readonly bounded: Option.Option<{
119
+ readonly fieldPath: string;
120
+ readonly interval: Interval;
121
+ }>;
122
+ }
123
+ /**
124
+ * The equality prefix followed by at most one bounded field.
125
+ *
126
+ * @experimental
127
+ */
128
+ export interface QueryStreamIndexRange<out RemainingFieldPaths extends ReadonlyArray<string> = ReadonlyArray<string>> {
129
+ readonly [TypeId]: Constraints & {
130
+ readonly _Remaining: Types.Covariant<RemainingFieldPaths>;
131
+ };
132
+ }
133
+ /**
134
+ * @experimental
135
+ */
136
+ export type Remaining<IndexRange> = IndexRange extends QueryStreamIndexRange<infer RemainingFieldPaths> ? RemainingFieldPaths : never;
137
+ /**
138
+ * A typed index-range builder. `eq` must target the next unpinned index field,
139
+ * and consumes it; `gt`/`gte`/`lt`/`lte` bound the next field without consuming
140
+ * it (bounded field paths still vary within the range).
141
+ *
142
+ * @experimental
143
+ */
144
+ export interface Builder<ConvexDoc extends GenericDocument, FieldPaths extends ReadonlyArray<string>> extends QueryStreamIndexRange<FieldPaths> {
145
+ readonly eq: (fieldPath: Head<FieldPaths>, value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>) => Builder<ConvexDoc, Tail<FieldPaths>>;
146
+ readonly gt: (fieldPath: Head<FieldPaths>, value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>) => LowerBoundedBuilder<ConvexDoc, FieldPaths>;
147
+ readonly gte: (fieldPath: Head<FieldPaths>, value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>) => LowerBoundedBuilder<ConvexDoc, FieldPaths>;
148
+ readonly lt: (fieldPath: Head<FieldPaths>, value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>) => QueryStreamIndexRange<FieldPaths>;
149
+ readonly lte: (fieldPath: Head<FieldPaths>, value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>) => QueryStreamIndexRange<FieldPaths>;
150
+ }
151
+ /**
152
+ * After `gt`/`gte`, only an upper bound on the same field may follow.
153
+ *
154
+ * @experimental
155
+ */
156
+ export interface LowerBoundedBuilder<ConvexDoc extends GenericDocument, FieldPaths extends ReadonlyArray<string>> extends QueryStreamIndexRange<FieldPaths> {
157
+ readonly lt: (fieldPath: Head<FieldPaths>, value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>) => QueryStreamIndexRange<FieldPaths>;
158
+ readonly lte: (fieldPath: Head<FieldPaths>, value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>) => QueryStreamIndexRange<FieldPaths>;
159
+ }
160
+ /**
161
+ * The initial builder handed to a range callback.
162
+ *
163
+ * @experimental
164
+ */
165
+ export declare const builder: <ConvexDoc extends GenericDocument, FieldPaths extends ReadonlyArray<string>>() => Builder<ConvexDoc, FieldPaths>;
166
+ /**
167
+ * Number of index fields pinned by equality constraints.
168
+ *
169
+ * @experimental
170
+ */
171
+ export declare const equalityPrefixLength: (self: QueryStreamIndexRange) => number;
172
+ /**
173
+ * Apply one range to Convex's index-range builder.
174
+ *
175
+ * @experimental
176
+ */
177
+ export declare const apply: (self: QueryStreamIndexRange, q: ConvexIndexRangeBuilder<GenericDocument, string[]>) => ConvexIndexRange;
178
+ /**
179
+ * Decompose the range between `indexBounds.lower` and `indexBounds.upper` (over
180
+ * the complete index `fieldPaths`, `_id` tiebreaker included) into a sequence
181
+ * of Convex-expressible ranges, ordered for the given direction.
182
+ *
183
+ * @experimental
184
+ */
185
+ export declare const fromBounds: (fieldPaths: ReadonlyArray<string>, orderDirection: QueryStreamOrderDirection.QueryStreamOrderDirection, indexBounds: QueryStreamKeyBounds.IndexBounds) => Result.Result<ReadonlyArray<QueryStreamIndexRange>, QueryStreamIndexPrefix.IndexPrefixWidthMismatchError>;
186
+ /**
187
+ * Derive full-index bounds directly from the structural range.
188
+ *
189
+ * @experimental
190
+ */
191
+ export declare const toBounds: (self: QueryStreamIndexRange) => QueryStreamKeyBounds.IndexBounds;
192
+ export {};
193
+ //# sourceMappingURL=QueryStreamIndexRange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamIndexRange.d.ts","sourceRoot":"","sources":["../src/QueryStreamIndexRange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { ValueOrder } from "./QueryStreamKeyValues.js";
3
+ import { entries, make as make$1 } from "./QueryStreamIndexPrefix.js";
4
+ import { isEmpty } from "./QueryStreamKeyBounds.js";
5
+ import { identity, pipe } from "effect/Function";
6
+ import * as Match from "effect/Match";
7
+ import * as Option from "effect/Option";
8
+ import * as Array from "effect/Array";
9
+ import * as Result from "effect/Result";
10
+ import * as Data from "effect/Data";
11
+ //#region src/QueryStreamIndexRange.ts
12
+ var QueryStreamIndexRange_exports = /* @__PURE__ */ __exportAll({
13
+ apply: () => apply,
14
+ builder: () => builder,
15
+ equalityPrefixLength: () => equalityPrefixLength,
16
+ fromBounds: () => fromBounds,
17
+ toBounds: () => toBounds
18
+ });
19
+ const TypeId = "~@confect/server/QueryStreamIndexRange";
20
+ const Interval = Data.taggedEnum();
21
+ const make = (constraints) => ({ [TypeId]: {
22
+ ...constraints,
23
+ _Remaining: identity
24
+ } });
25
+ const makeBuilder = (equalities) => {
26
+ const upper = (inclusive) => (fieldPath, value) => make({
27
+ equalities,
28
+ bounded: Option.some({
29
+ fieldPath,
30
+ interval: Interval.Upper({ upper: {
31
+ value,
32
+ inclusive
33
+ } })
34
+ })
35
+ });
36
+ const lower = (inclusive) => (fieldPath, value) => {
37
+ const endpoint = {
38
+ value,
39
+ inclusive
40
+ };
41
+ const finish = (upperInclusive) => (_fieldPath, upperValue) => make({
42
+ equalities,
43
+ bounded: Option.some({
44
+ fieldPath,
45
+ interval: Interval.Between({
46
+ lower: endpoint,
47
+ upper: {
48
+ value: upperValue,
49
+ inclusive: upperInclusive
50
+ }
51
+ })
52
+ })
53
+ });
54
+ return {
55
+ ...make({
56
+ equalities,
57
+ bounded: Option.some({
58
+ fieldPath,
59
+ interval: Interval.Lower({ lower: endpoint })
60
+ })
61
+ }),
62
+ lt: finish(false),
63
+ lte: finish(true)
64
+ };
65
+ };
66
+ return {
67
+ ...make({
68
+ equalities,
69
+ bounded: Option.none()
70
+ }),
71
+ eq: (fieldPath, value) => makeBuilder(Array.append(equalities, {
72
+ fieldPath,
73
+ value
74
+ })),
75
+ gt: lower(false),
76
+ gte: lower(true),
77
+ lt: upper(false),
78
+ lte: upper(true)
79
+ };
80
+ };
81
+ /**
82
+ * The initial builder handed to a range callback.
83
+ *
84
+ * @experimental
85
+ */
86
+ const builder = () => makeBuilder([]);
87
+ /**
88
+ * Number of index fields pinned by equality constraints.
89
+ *
90
+ * @experimental
91
+ */
92
+ const equalityPrefixLength = (self) => self[TypeId].equalities.length;
93
+ /**
94
+ * Apply one range to Convex's index-range builder.
95
+ *
96
+ * @experimental
97
+ */
98
+ const apply = (self, q) => {
99
+ const { equalities, bounded } = self[TypeId];
100
+ const prefix = Array.reduce(equalities, q, (target, { fieldPath, value }) => target.eq(fieldPath, value));
101
+ return Option.match(bounded, {
102
+ onNone: () => prefix,
103
+ onSome: ({ fieldPath, interval }) => {
104
+ const lower = (target, endpoint) => target[endpoint.inclusive ? "gte" : "gt"](fieldPath, endpoint.value);
105
+ const upper = (target, endpoint) => target[endpoint.inclusive ? "lte" : "lt"](fieldPath, endpoint.value);
106
+ return Interval.$match(interval, {
107
+ Lower: ({ lower: endpoint }) => lower(prefix, endpoint),
108
+ Upper: ({ upper: endpoint }) => upper(prefix, endpoint),
109
+ Between: (endpoints) => upper(lower(prefix, endpoints.lower), endpoints.upper)
110
+ });
111
+ }
112
+ });
113
+ };
114
+ var TaggedBound = class extends Data.Class {};
115
+ /**
116
+ * Dropping a bound's last entry bounds the remaining prefix exclusively.
117
+ */
118
+ const excludePrefix = (tag) => Match.value(tag).pipe(Match.whenOr("gt", "gte", () => "gt"), Match.whenOr("lt", "lte", () => "lt"), Match.exhaustive);
119
+ /**
120
+ * Peel a bound down to the single entry that feeds the middle range.
121
+ */
122
+ const peelBound = (indexEntries, tag) => indexEntries.length <= 1 ? {
123
+ peeled: [],
124
+ final: new TaggedBound({
125
+ indexEntries,
126
+ tag
127
+ })
128
+ } : pipe(peelBound(Array.dropRight(indexEntries, 1), excludePrefix(tag)), ({ final, peeled }) => ({
129
+ peeled: Array.prepend(peeled, new TaggedBound({
130
+ indexEntries,
131
+ tag
132
+ })),
133
+ final
134
+ }));
135
+ /**
136
+ * Pin every entry but the last, which gets the bound tag.
137
+ */
138
+ const rangeFor = (prefix, indexEntries, tag) => Option.match(Array.last(indexEntries), {
139
+ onNone: () => make({
140
+ equalities: prefix,
141
+ bounded: Option.none()
142
+ }),
143
+ onSome: ([fieldPath, value]) => make({
144
+ equalities: Array.appendAll(prefix, Array.map(Array.dropRight(indexEntries, 1), ([path, pinned]) => ({
145
+ fieldPath: path,
146
+ value: pinned
147
+ }))),
148
+ bounded: Option.some({
149
+ fieldPath,
150
+ interval: tag === "gt" || tag === "gte" ? Interval.Lower({ lower: {
151
+ value,
152
+ inclusive: tag === "gte"
153
+ } }) : Interval.Upper({ upper: {
154
+ value,
155
+ inclusive: tag === "lte"
156
+ } })
157
+ })
158
+ })
159
+ });
160
+ /**
161
+ * Decompose the range between `indexBounds.lower` and `indexBounds.upper` (over
162
+ * the complete index `fieldPaths`, `_id` tiebreaker included) into a sequence
163
+ * of Convex-expressible ranges, ordered for the given direction.
164
+ *
165
+ * @experimental
166
+ */
167
+ const fromBounds = (fieldPaths, orderDirection, indexBounds) => Result.gen(function* () {
168
+ const lowerIndexEntries = entries(yield* make$1(fieldPaths, indexBounds.lower.keyValues));
169
+ const upperIndexEntries = entries(yield* make$1(fieldPaths, indexBounds.upper.keyValues));
170
+ if (isEmpty(indexBounds)) return [];
171
+ const commonLength = pipe(Array.zip(indexBounds.lower.keyValues, indexBounds.upper.keyValues), Array.takeWhile(([lowerValue, upperValue]) => ValueOrder(lowerValue, upperValue) === 0), Array.length);
172
+ const equalities = pipe(Array.take(lowerIndexEntries, commonLength), Array.map(([fieldPath, value]) => ({
173
+ fieldPath,
174
+ value
175
+ })));
176
+ const lower = peelBound(Array.drop(lowerIndexEntries, commonLength), indexBounds.lower.inclusive ? "gte" : "gt");
177
+ const upper = peelBound(Array.drop(upperIndexEntries, commonLength), indexBounds.upper.inclusive ? "lte" : "lt");
178
+ const startIndexRanges = Array.map(lower.peeled, ({ indexEntries, tag }) => rangeFor(equalities, indexEntries, tag));
179
+ const endIndexRanges = Array.reverse(Array.map(upper.peeled, ({ indexEntries, tag }) => rangeFor(equalities, indexEntries, tag)));
180
+ const { indexEntries: lowerFinalIndexEntries, tag: lowerFinalTag } = lower.final;
181
+ const { indexEntries: upperFinalIndexEntries, tag: upperFinalTag } = upper.final;
182
+ const middleIndexRange = Array.isReadonlyArrayNonEmpty(lowerFinalIndexEntries) && Array.isReadonlyArrayNonEmpty(upperFinalIndexEntries) ? make({
183
+ equalities,
184
+ bounded: Option.some({
185
+ fieldPath: Array.headNonEmpty(lowerFinalIndexEntries)[0],
186
+ interval: Interval.Between({
187
+ lower: {
188
+ value: Array.headNonEmpty(lowerFinalIndexEntries)[1],
189
+ inclusive: lowerFinalTag === "gte"
190
+ },
191
+ upper: {
192
+ value: Array.headNonEmpty(upperFinalIndexEntries)[1],
193
+ inclusive: upperFinalTag === "lte"
194
+ }
195
+ })
196
+ })
197
+ }) : Array.isReadonlyArrayNonEmpty(lowerFinalIndexEntries) ? rangeFor(equalities, lowerFinalIndexEntries, lowerFinalTag) : rangeFor(equalities, upperFinalIndexEntries, upperFinalTag);
198
+ const indexRanges = Array.appendAll(Array.appendAll(startIndexRanges, Array.of(middleIndexRange)), endIndexRanges);
199
+ return orderDirection === "desc" ? Array.reverse(indexRanges) : indexRanges;
200
+ });
201
+ /**
202
+ * Derive full-index bounds directly from the structural range.
203
+ *
204
+ * @experimental
205
+ */
206
+ const toBounds = (self) => {
207
+ const { equalities, bounded } = self[TypeId];
208
+ const keyValues = Array.map(equalities, (equality) => equality.value);
209
+ const unbounded = {
210
+ keyValues,
211
+ inclusive: true
212
+ };
213
+ const endpoint = ({ value, inclusive }) => ({
214
+ keyValues: Array.append(keyValues, value),
215
+ inclusive
216
+ });
217
+ return Option.match(bounded, {
218
+ onNone: () => ({
219
+ lower: unbounded,
220
+ upper: unbounded
221
+ }),
222
+ onSome: ({ interval }) => Interval.$match(interval, {
223
+ Lower: ({ lower }) => ({
224
+ lower: endpoint(lower),
225
+ upper: unbounded
226
+ }),
227
+ Upper: ({ upper }) => ({
228
+ lower: unbounded,
229
+ upper: endpoint(upper)
230
+ }),
231
+ Between: ({ lower, upper }) => ({
232
+ lower: endpoint(lower),
233
+ upper: endpoint(upper)
234
+ })
235
+ })
236
+ });
237
+ };
238
+ //#endregion
239
+ export { QueryStreamIndexRange_exports, apply, builder, equalityPrefixLength, fromBounds, toBounds };
240
+
241
+ //# sourceMappingURL=QueryStreamIndexRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamIndexRange.js","names":["QueryStreamIndexPrefix.entries","QueryStreamIndexPrefix.make","QueryStreamKeyBounds.isEmpty","QueryStreamKeyValues.ValueOrder"],"sources":["../src/QueryStreamIndexRange.ts"],"sourcesContent":["import type {\n GenericDocument,\n FieldTypeFromFieldPath,\n IndexRange as ConvexIndexRange,\n IndexRangeBuilder as ConvexIndexRangeBuilder,\n} from \"convex/server\";\nimport * as Array from \"effect/Array\";\nimport * as Data from \"effect/Data\";\nimport { identity, pipe } from \"effect/Function\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Result from \"effect/Result\";\nimport type * as Types from \"effect/Types\";\nimport * as QueryStreamIndexPrefix from \"./QueryStreamIndexPrefix.js\";\nimport * as QueryStreamKeyBounds from \"./QueryStreamKeyBounds.js\";\nimport * as QueryStreamKeyValues from \"./QueryStreamKeyValues.js\";\nimport type * as QueryStreamOrderDirection from \"./QueryStreamOrderDirection.js\";\n\ntype Head<FieldPaths extends ReadonlyArray<string>> =\n FieldPaths extends readonly [infer H extends string, ...ReadonlyArray<string>]\n ? H\n : never;\n\ntype Tail<FieldPaths extends ReadonlyArray<string>> =\n FieldPaths extends readonly [\n string,\n ...infer Rest extends ReadonlyArray<string>,\n ]\n ? Rest\n : ReadonlyArray<string>;\n\n// The range builder mirrors Convex's `IndexRangeBuilder`, but *consumes* the\n// index-field tuple at the type level as `eq` pins field paths. The remaining\n// tuple supplies the initial visible ordering labels of the resulting stream.\n\nconst TypeId = \"~@confect/server/QueryStreamIndexRange\";\n\ninterface Equality {\n readonly fieldPath: string;\n readonly value: QueryStreamKeyValues.KeyValue;\n}\n\ninterface Endpoint {\n readonly value: QueryStreamKeyValues.KeyValue;\n readonly inclusive: boolean;\n}\n\ntype Interval = Data.TaggedEnum<{\n Lower: { readonly lower: Endpoint };\n Upper: { readonly upper: Endpoint };\n Between: { readonly lower: Endpoint; readonly upper: Endpoint };\n}>;\nconst Interval = Data.taggedEnum<Interval>();\n\ninterface Constraints {\n readonly equalities: ReadonlyArray<Equality>;\n readonly bounded: Option.Option<{\n readonly fieldPath: string;\n readonly interval: Interval;\n }>;\n}\n\n/**\n * The equality prefix followed by at most one bounded field.\n *\n * @experimental\n */\nexport interface QueryStreamIndexRange<\n out RemainingFieldPaths extends ReadonlyArray<string> = ReadonlyArray<string>,\n> {\n readonly [TypeId]: Constraints & {\n readonly _Remaining: Types.Covariant<RemainingFieldPaths>;\n };\n}\n\n/**\n * @experimental\n */\nexport type Remaining<IndexRange> =\n IndexRange extends QueryStreamIndexRange<infer RemainingFieldPaths>\n ? RemainingFieldPaths\n : never;\n\n/**\n * A typed index-range builder. `eq` must target the next unpinned index field,\n * and consumes it; `gt`/`gte`/`lt`/`lte` bound the next field without consuming\n * it (bounded field paths still vary within the range).\n *\n * @experimental\n */\nexport interface Builder<\n ConvexDoc extends GenericDocument,\n FieldPaths extends ReadonlyArray<string>,\n> extends QueryStreamIndexRange<FieldPaths> {\n readonly eq: (\n fieldPath: Head<FieldPaths>,\n value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>,\n ) => Builder<ConvexDoc, Tail<FieldPaths>>;\n readonly gt: (\n fieldPath: Head<FieldPaths>,\n value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>,\n ) => LowerBoundedBuilder<ConvexDoc, FieldPaths>;\n readonly gte: (\n fieldPath: Head<FieldPaths>,\n value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>,\n ) => LowerBoundedBuilder<ConvexDoc, FieldPaths>;\n readonly lt: (\n fieldPath: Head<FieldPaths>,\n value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>,\n ) => QueryStreamIndexRange<FieldPaths>;\n readonly lte: (\n fieldPath: Head<FieldPaths>,\n value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>,\n ) => QueryStreamIndexRange<FieldPaths>;\n}\n\n/**\n * After `gt`/`gte`, only an upper bound on the same field may follow.\n *\n * @experimental\n */\nexport interface LowerBoundedBuilder<\n ConvexDoc extends GenericDocument,\n FieldPaths extends ReadonlyArray<string>,\n> extends QueryStreamIndexRange<FieldPaths> {\n readonly lt: (\n fieldPath: Head<FieldPaths>,\n value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>,\n ) => QueryStreamIndexRange<FieldPaths>;\n readonly lte: (\n fieldPath: Head<FieldPaths>,\n value: FieldTypeFromFieldPath<ConvexDoc, Head<FieldPaths>>,\n ) => QueryStreamIndexRange<FieldPaths>;\n}\n\nconst make = (constraints: Constraints): QueryStreamIndexRange => ({\n [TypeId]: {\n ...constraints,\n _Remaining: identity as Types.Covariant<ReadonlyArray<string>>,\n },\n});\n\nconst makeBuilder = (\n equalities: ReadonlyArray<Equality>,\n): Builder<GenericDocument, ReadonlyArray<string>> => {\n const upper =\n (inclusive: boolean) =>\n (fieldPath: string, value: QueryStreamKeyValues.KeyValue) =>\n make({\n equalities,\n bounded: Option.some({\n fieldPath,\n interval: Interval.Upper({ upper: { value, inclusive } }),\n }),\n });\n const lower =\n (inclusive: boolean) =>\n (\n fieldPath: string,\n value: QueryStreamKeyValues.KeyValue,\n ): LowerBoundedBuilder<GenericDocument, ReadonlyArray<string>> => {\n const endpoint = { value, inclusive };\n const finish =\n (upperInclusive: boolean) =>\n (_fieldPath: string, upperValue: QueryStreamKeyValues.KeyValue) =>\n make({\n equalities,\n bounded: Option.some({\n fieldPath,\n interval: Interval.Between({\n lower: endpoint,\n upper: { value: upperValue, inclusive: upperInclusive },\n }),\n }),\n });\n return {\n ...make({\n equalities,\n bounded: Option.some({\n fieldPath,\n interval: Interval.Lower({ lower: endpoint }),\n }),\n }),\n lt: finish(false),\n lte: finish(true),\n };\n };\n return {\n ...make({ equalities, bounded: Option.none() }),\n eq: (fieldPath, value) =>\n makeBuilder(Array.append(equalities, { fieldPath, value })),\n gt: lower(false),\n gte: lower(true),\n lt: upper(false),\n lte: upper(true),\n };\n};\n\n/**\n * The initial builder handed to a range callback.\n *\n * @experimental\n */\nexport const builder = <\n ConvexDoc extends GenericDocument,\n FieldPaths extends ReadonlyArray<string>,\n>(): Builder<ConvexDoc, FieldPaths> =>\n makeBuilder([]) as unknown as Builder<ConvexDoc, FieldPaths>;\n\n/**\n * Number of index fields pinned by equality constraints.\n *\n * @experimental\n */\nexport const equalityPrefixLength = (self: QueryStreamIndexRange): number =>\n self[TypeId].equalities.length;\n\ninterface ConvexUpperBoundBuilder extends ConvexIndexRange {\n readonly lt: (\n fieldPath: string,\n value: QueryStreamKeyValues.KeyValue,\n ) => ConvexIndexRange;\n readonly lte: (\n fieldPath: string,\n value: QueryStreamKeyValues.KeyValue,\n ) => ConvexIndexRange;\n}\n\ninterface ConvexRangeBuilder extends ConvexUpperBoundBuilder {\n readonly eq: (\n fieldPath: string,\n value: QueryStreamKeyValues.KeyValue,\n ) => ConvexRangeBuilder;\n readonly gt: (\n fieldPath: string,\n value: QueryStreamKeyValues.KeyValue,\n ) => ConvexUpperBoundBuilder;\n readonly gte: (\n fieldPath: string,\n value: QueryStreamKeyValues.KeyValue,\n ) => ConvexUpperBoundBuilder;\n}\n\n/**\n * Apply one range to Convex's index-range builder.\n *\n * @experimental\n */\nexport const apply = (\n self: QueryStreamIndexRange,\n q: ConvexIndexRangeBuilder<GenericDocument, string[]>,\n): ConvexIndexRange => {\n const { equalities, bounded } = self[TypeId];\n // Convex tracks equality progress through a static field tuple. These paths\n // are runtime data; the range model owns their ordering. Its runtime builder\n // supports further equality calls, even when the SDK type has lost the tuple.\n const prefix = Array.reduce(\n equalities,\n q as ConvexRangeBuilder,\n (target, { fieldPath, value }) => target.eq(fieldPath, value),\n );\n return Option.match(bounded, {\n onNone: () => prefix,\n onSome: ({ fieldPath, interval }) => {\n const lower = (\n target: ConvexRangeBuilder,\n endpoint: Endpoint,\n ): ConvexUpperBoundBuilder =>\n target[endpoint.inclusive ? \"gte\" : \"gt\"](fieldPath, endpoint.value);\n const upper = (\n target: ConvexUpperBoundBuilder,\n endpoint: Endpoint,\n ): ConvexIndexRange =>\n target[endpoint.inclusive ? \"lte\" : \"lt\"](fieldPath, endpoint.value);\n return Interval.$match(interval, {\n Lower: ({ lower: endpoint }) => lower(prefix, endpoint),\n Upper: ({ upper: endpoint }) => upper(prefix, endpoint),\n Between: (endpoints) =>\n upper(lower(prefix, endpoints.lower), endpoints.upper),\n });\n },\n });\n};\n\n// Convex index ranges have the shape `eq(f1) … eq(fn), gt/gte(fm)?,\n// lt/lte(fm)?`—every field path pinned except the last, which may carry two\n// inequalities. An arbitrary range between two index keys therefore\n// decomposes into a *sequence* of Convex-expressible ranges (the port of\n// `convex-helpers`' `splitRange`): e.g. `(1, 2, 3) < key <= (1, 3, 2)` over\n// field paths `(f1, f2, f3)` becomes\n//\n// 1. eq(f1, 1), eq(f2, 2), gt(f3, 3)\n// 2. eq(f1, 1), gt(f2, 2), lt(f2, 3)\n// 3. eq(f1, 1), eq(f2, 3), lte(f3, 2)\n\ntype BoundTag = \"gt\" | \"gte\" | \"lt\" | \"lte\";\n\nclass TaggedBound extends Data.Class<{\n readonly indexEntries: QueryStreamIndexPrefix.IndexEntries;\n readonly tag: BoundTag;\n}> {}\n\n/**\n * Dropping a bound's last entry bounds the remaining prefix exclusively.\n */\nconst excludePrefix = (tag: BoundTag): BoundTag =>\n Match.value(tag).pipe(\n Match.whenOr(\"gt\", \"gte\", () => \"gt\" as const),\n Match.whenOr(\"lt\", \"lte\", () => \"lt\" as const),\n Match.exhaustive,\n );\n\n/**\n * Peel a bound down to the single entry that feeds the middle range.\n */\nconst peelBound = (\n indexEntries: QueryStreamIndexPrefix.IndexEntries,\n tag: BoundTag,\n): {\n readonly peeled: ReadonlyArray<TaggedBound>;\n readonly final: TaggedBound;\n} =>\n indexEntries.length <= 1\n ? { peeled: [], final: new TaggedBound({ indexEntries, tag }) }\n : pipe(\n peelBound(Array.dropRight(indexEntries, 1), excludePrefix(tag)),\n ({ final, peeled }) => ({\n peeled: Array.prepend(peeled, new TaggedBound({ indexEntries, tag })),\n final,\n }),\n );\n\n/**\n * Pin every entry but the last, which gets the bound tag.\n */\nconst rangeFor = (\n prefix: ReadonlyArray<Equality>,\n indexEntries: QueryStreamIndexPrefix.IndexEntries,\n tag: BoundTag,\n): QueryStreamIndexRange =>\n Option.match(Array.last(indexEntries), {\n onNone: () => make({ equalities: prefix, bounded: Option.none() }),\n onSome: ([fieldPath, value]) =>\n make({\n equalities: Array.appendAll(\n prefix,\n Array.map(Array.dropRight(indexEntries, 1), ([path, pinned]) => ({\n fieldPath: path,\n value: pinned,\n })),\n ),\n bounded: Option.some({\n fieldPath,\n interval:\n tag === \"gt\" || tag === \"gte\"\n ? Interval.Lower({ lower: { value, inclusive: tag === \"gte\" } })\n : Interval.Upper({ upper: { value, inclusive: tag === \"lte\" } }),\n }),\n }),\n });\n\n/**\n * Decompose the range between `indexBounds.lower` and `indexBounds.upper` (over\n * the complete index `fieldPaths`, `_id` tiebreaker included) into a sequence\n * of Convex-expressible ranges, ordered for the given direction.\n *\n * @experimental\n */\nexport const fromBounds = (\n fieldPaths: ReadonlyArray<string>,\n orderDirection: QueryStreamOrderDirection.QueryStreamOrderDirection,\n indexBounds: QueryStreamKeyBounds.IndexBounds,\n): Result.Result<\n ReadonlyArray<QueryStreamIndexRange>,\n QueryStreamIndexPrefix.IndexPrefixWidthMismatchError\n> =>\n Result.gen(function* () {\n const lowerIndexEntries = QueryStreamIndexPrefix.entries(\n yield* QueryStreamIndexPrefix.make(\n fieldPaths,\n indexBounds.lower.keyValues,\n ),\n );\n const upperIndexEntries = QueryStreamIndexPrefix.entries(\n yield* QueryStreamIndexPrefix.make(\n fieldPaths,\n indexBounds.upper.keyValues,\n ),\n );\n // Equal cuts are an empty range too: e.g. lower exclusive at `k` and\n // upper inclusive at `k`—the half-open (k, k]—both cut at\n // successor(k).\n if (QueryStreamKeyBounds.isEmpty(indexBounds)) {\n return [];\n }\n\n const commonLength = pipe(\n Array.zip(indexBounds.lower.keyValues, indexBounds.upper.keyValues),\n Array.takeWhile(\n ([lowerValue, upperValue]) =>\n QueryStreamKeyValues.ValueOrder(lowerValue, upperValue) === 0,\n ),\n Array.length,\n );\n const equalities = pipe(\n Array.take(lowerIndexEntries, commonLength),\n Array.map(([fieldPath, value]) => ({ fieldPath, value })),\n );\n\n const lower = peelBound(\n Array.drop(lowerIndexEntries, commonLength),\n indexBounds.lower.inclusive ? \"gte\" : \"gt\",\n );\n const upper = peelBound(\n Array.drop(upperIndexEntries, commonLength),\n indexBounds.upper.inclusive ? \"lte\" : \"lt\",\n );\n\n const startIndexRanges = Array.map(lower.peeled, ({ indexEntries, tag }) =>\n rangeFor(equalities, indexEntries, tag),\n );\n const endIndexRanges = Array.reverse(\n Array.map(upper.peeled, ({ indexEntries, tag }) =>\n rangeFor(equalities, indexEntries, tag),\n ),\n );\n\n const { indexEntries: lowerFinalIndexEntries, tag: lowerFinalTag } =\n lower.final;\n const { indexEntries: upperFinalIndexEntries, tag: upperFinalTag } =\n upper.final;\n const middleIndexRange =\n Array.isReadonlyArrayNonEmpty(lowerFinalIndexEntries) &&\n Array.isReadonlyArrayNonEmpty(upperFinalIndexEntries)\n ? make({\n equalities,\n bounded: Option.some({\n fieldPath: Array.headNonEmpty(lowerFinalIndexEntries)[0],\n interval: Interval.Between({\n lower: {\n value: Array.headNonEmpty(lowerFinalIndexEntries)[1],\n inclusive: lowerFinalTag === \"gte\",\n },\n upper: {\n value: Array.headNonEmpty(upperFinalIndexEntries)[1],\n inclusive: upperFinalTag === \"lte\",\n },\n }),\n }),\n })\n : Array.isReadonlyArrayNonEmpty(lowerFinalIndexEntries)\n ? rangeFor(equalities, lowerFinalIndexEntries, lowerFinalTag)\n : rangeFor(equalities, upperFinalIndexEntries, upperFinalTag);\n\n const indexRanges = Array.appendAll(\n Array.appendAll(startIndexRanges, Array.of(middleIndexRange)),\n endIndexRanges,\n );\n return orderDirection === \"desc\" ? Array.reverse(indexRanges) : indexRanges;\n });\n\n/**\n * Derive full-index bounds directly from the structural range.\n *\n * @experimental\n */\nexport const toBounds = (\n self: QueryStreamIndexRange,\n): QueryStreamKeyBounds.IndexBounds => {\n const { equalities, bounded } = self[TypeId];\n const keyValues = Array.map(equalities, (equality) => equality.value);\n const unbounded = { keyValues, inclusive: true };\n const endpoint = ({ value, inclusive }: Endpoint) => ({\n keyValues: Array.append(keyValues, value),\n inclusive,\n });\n return Option.match(bounded, {\n onNone: () => ({ lower: unbounded, upper: unbounded }),\n onSome: ({ interval }) =>\n Interval.$match(interval, {\n Lower: ({ lower }) => ({ lower: endpoint(lower), upper: unbounded }),\n Upper: ({ upper }) => ({ lower: unbounded, upper: endpoint(upper) }),\n Between: ({ lower, upper }) => ({\n lower: endpoint(lower),\n upper: endpoint(upper),\n }),\n }),\n });\n};\n"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import * as Data from "effect/Data";
2
+ import * as Result from "effect/Result";
3
+ import * as QueryStreamKeyLayout from "./QueryStreamKeyLayout.js";
4
+ import type * as QueryStreamKeyValues from "./QueryStreamKeyValues.js";
5
+ declare const TypeId = "~@confect/server/QueryStreamKey";
6
+ interface Payload {
7
+ readonly [TypeId]: typeof TypeId;
8
+ readonly layout: QueryStreamKeyLayout.QueryStreamKeyLayout;
9
+ readonly values: QueryStreamKeyValues.QueryStreamKeyValues;
10
+ }
11
+ /**
12
+ * @experimental
13
+ */
14
+ export type QueryStreamKey = Data.TaggedEnum<{
15
+ Complete: Payload;
16
+ Prefix: Payload;
17
+ }>;
18
+ /**
19
+ * @experimental
20
+ */
21
+ export type Complete = Data.TaggedEnum.Value<QueryStreamKey, "Complete">;
22
+ /**
23
+ * @experimental
24
+ */
25
+ export type Prefix = Data.TaggedEnum.Value<QueryStreamKey, "Prefix">;
26
+ declare const KeyWidthMismatchError_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 & {
27
+ readonly _tag: "KeyWidthMismatchError";
28
+ } & Readonly<A>;
29
+ /**
30
+ * @experimental
31
+ */
32
+ export declare class KeyWidthMismatchError extends KeyWidthMismatchError_base<{
33
+ readonly kind: "complete" | "prefix";
34
+ readonly width: number;
35
+ readonly actual: number;
36
+ }> {
37
+ get message(): string;
38
+ }
39
+ /**
40
+ * @experimental
41
+ */
42
+ export declare const complete: (layout: QueryStreamKeyLayout.QueryStreamKeyLayout, values: QueryStreamKeyValues.QueryStreamKeyValues) => Result.Result<Complete, KeyWidthMismatchError>;
43
+ /**
44
+ * @experimental
45
+ */
46
+ export declare const prefix: (layout: QueryStreamKeyLayout.QueryStreamKeyLayout, values: QueryStreamKeyValues.QueryStreamKeyValues) => Result.Result<Prefix, KeyWidthMismatchError>;
47
+ /**
48
+ * @experimental
49
+ */
50
+ export declare const toPrefix: (self: Complete) => Prefix;
51
+ /**
52
+ * @experimental
53
+ */
54
+ export declare const values: (self: QueryStreamKey) => QueryStreamKeyValues.QueryStreamKeyValues;
55
+ /**
56
+ * @experimental
57
+ */
58
+ export declare const layout: (self: QueryStreamKey) => QueryStreamKeyLayout.QueryStreamKeyLayout;
59
+ /**
60
+ * @experimental
61
+ */
62
+ export declare const isComplete: (value: unknown) => value is Complete;
63
+ export {};
64
+ //# sourceMappingURL=QueryStreamKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamKey.d.ts","sourceRoot":"","sources":["../src/QueryStreamKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,KAAK,oBAAoB,MAAM,2BAA2B,CAAC;AAEvE,QAAA,MAAM,MAAM,oCAAoC,CAAC;AAEjD,UAAU,OAAO;IACf,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,oBAAoB,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,oBAAoB,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AACzE;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;;;;AAErE;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,2BAEzC;IACA,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,WACX,oBAAoB,CAAC,oBAAoB,UACzC,oBAAoB,CAAC,oBAAoB,KAChD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAa/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,WACT,oBAAoB,CAAC,oBAAoB,UACzC,oBAAoB,CAAC,oBAAoB,KAChD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAa7C,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,QAAQ,SAAU,QAAQ,KAAG,MAKtC,CAAC;AAEL;;GAEG;AACH,eAAO,MAAM,MAAM,SACX,cAAc,KACnB,oBAAoB,CAAC,oBAAmC,CAAC;AAC5D;;GAEG;AACH,eAAO,MAAM,MAAM,SACX,cAAc,KACnB,oBAAoB,CAAC,oBAAmC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,UAAU,UAAW,OAAO,KAAG,KAAK,IAAI,QAC0B,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { runtimeWidth } from "./QueryStreamKeyLayout.js";
2
+ import * as Predicate from "effect/Predicate";
3
+ import * as Result from "effect/Result";
4
+ import * as Data from "effect/Data";
5
+ //#region src/QueryStreamKey.ts
6
+ const TypeId = "~@confect/server/QueryStreamKey";
7
+ const QueryStreamKey = Data.taggedEnum();
8
+ /**
9
+ * @experimental
10
+ */
11
+ var KeyWidthMismatchError = class extends Data.TaggedError("KeyWidthMismatchError") {
12
+ get message() {
13
+ return `Invalid ${this.kind} key width (${this.actual}); expected ${this.kind === "complete" ? "exactly" : "at most"} ${this.width}`;
14
+ }
15
+ };
16
+ /**
17
+ * @experimental
18
+ */
19
+ const complete = (layout, values) => {
20
+ const width = runtimeWidth(layout);
21
+ return values.length === width ? Result.succeed(QueryStreamKey.Complete({
22
+ [TypeId]: TypeId,
23
+ layout,
24
+ values
25
+ })) : Result.fail(new KeyWidthMismatchError({
26
+ kind: "complete",
27
+ width,
28
+ actual: values.length
29
+ }));
30
+ };
31
+ /**
32
+ * @experimental
33
+ */
34
+ const prefix = (layout, values) => {
35
+ const width = runtimeWidth(layout);
36
+ return values.length <= width ? Result.succeed(QueryStreamKey.Prefix({
37
+ [TypeId]: TypeId,
38
+ layout,
39
+ values
40
+ })) : Result.fail(new KeyWidthMismatchError({
41
+ kind: "prefix",
42
+ width,
43
+ actual: values.length
44
+ }));
45
+ };
46
+ /**
47
+ * @experimental
48
+ */
49
+ const toPrefix = (self) => QueryStreamKey.Prefix({
50
+ [TypeId]: TypeId,
51
+ layout: self.layout,
52
+ values: self.values
53
+ });
54
+ /**
55
+ * @experimental
56
+ */
57
+ const values = (self) => self.values;
58
+ /**
59
+ * @experimental
60
+ */
61
+ const layout = (self) => self.layout;
62
+ /**
63
+ * @experimental
64
+ */
65
+ const isComplete = (value) => Predicate.hasProperty(value, TypeId) && QueryStreamKey.$is("Complete")(value);
66
+ //#endregion
67
+ export { KeyWidthMismatchError, complete, isComplete, layout, prefix, toPrefix, values };
68
+
69
+ //# sourceMappingURL=QueryStreamKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryStreamKey.js","names":["QueryStreamKeyLayout.runtimeWidth"],"sources":["../src/QueryStreamKey.ts"],"sourcesContent":["import * as Data from \"effect/Data\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Result from \"effect/Result\";\nimport * as QueryStreamKeyLayout from \"./QueryStreamKeyLayout.js\";\nimport type * as QueryStreamKeyValues from \"./QueryStreamKeyValues.js\";\n\nconst TypeId = \"~@confect/server/QueryStreamKey\";\n\ninterface Payload {\n readonly [TypeId]: typeof TypeId;\n readonly layout: QueryStreamKeyLayout.QueryStreamKeyLayout;\n readonly values: QueryStreamKeyValues.QueryStreamKeyValues;\n}\n\n/**\n * @experimental\n */\nexport type QueryStreamKey = Data.TaggedEnum<{\n Complete: Payload;\n Prefix: Payload;\n}>;\nconst QueryStreamKey = Data.taggedEnum<QueryStreamKey>();\n\n/**\n * @experimental\n */\nexport type Complete = Data.TaggedEnum.Value<QueryStreamKey, \"Complete\">;\n/**\n * @experimental\n */\nexport type Prefix = Data.TaggedEnum.Value<QueryStreamKey, \"Prefix\">;\n\n/**\n * @experimental\n */\nexport class KeyWidthMismatchError extends Data.TaggedError(\n \"KeyWidthMismatchError\",\n)<{\n readonly kind: \"complete\" | \"prefix\";\n readonly width: number;\n readonly actual: number;\n}> {\n override get message(): string {\n return `Invalid ${this.kind} key width (${this.actual}); expected ${this.kind === \"complete\" ? \"exactly\" : \"at most\"} ${this.width}`;\n }\n}\n\n/**\n * @experimental\n */\nexport const complete = (\n layout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n values: QueryStreamKeyValues.QueryStreamKeyValues,\n): Result.Result<Complete, KeyWidthMismatchError> => {\n const width = QueryStreamKeyLayout.runtimeWidth(layout);\n return values.length === width\n ? Result.succeed(\n QueryStreamKey.Complete({ [TypeId]: TypeId, layout, values }),\n )\n : Result.fail(\n new KeyWidthMismatchError({\n kind: \"complete\",\n width,\n actual: values.length,\n }),\n );\n};\n\n/**\n * @experimental\n */\nexport const prefix = (\n layout: QueryStreamKeyLayout.QueryStreamKeyLayout,\n values: QueryStreamKeyValues.QueryStreamKeyValues,\n): Result.Result<Prefix, KeyWidthMismatchError> => {\n const width = QueryStreamKeyLayout.runtimeWidth(layout);\n return values.length <= width\n ? Result.succeed(\n QueryStreamKey.Prefix({ [TypeId]: TypeId, layout, values }),\n )\n : Result.fail(\n new KeyWidthMismatchError({\n kind: \"prefix\",\n width,\n actual: values.length,\n }),\n );\n};\n\n// A complete key already satisfies the prefix width guarantee.\n/**\n * @experimental\n */\nexport const toPrefix = (self: Complete): Prefix =>\n QueryStreamKey.Prefix({\n [TypeId]: TypeId,\n layout: self.layout,\n values: self.values,\n });\n\n/**\n * @experimental\n */\nexport const values = (\n self: QueryStreamKey,\n): QueryStreamKeyValues.QueryStreamKeyValues => self.values;\n/**\n * @experimental\n */\nexport const layout = (\n self: QueryStreamKey,\n): QueryStreamKeyLayout.QueryStreamKeyLayout => self.layout;\n\n/**\n * @experimental\n */\nexport const isComplete = (value: unknown): value is Complete =>\n Predicate.hasProperty(value, TypeId) && QueryStreamKey.$is(\"Complete\")(value);\n"],"mappings":";;;;;AAMA,MAAM,SAAS;AAef,MAAM,iBAAiB,KAAK,WAA2B;;;;AAcvD,IAAa,wBAAb,cAA2C,KAAK,YAC9C,uBACF,CAAC,CAIE;CACD,IAAa,UAAkB;EAC7B,OAAO,WAAW,KAAK,KAAK,cAAc,KAAK,OAAO,cAAc,KAAK,SAAS,aAAa,YAAY,UAAU,GAAG,KAAK;CAC/H;AACF;;;;AAKA,MAAa,YACX,QACA,WACmD;CACnD,MAAM,QAAQA,aAAkC,MAAM;CACtD,OAAO,OAAO,WAAW,QACrB,OAAO,QACL,eAAe,SAAS;GAAG,SAAS;EAAQ;EAAQ;CAAO,CAAC,CAC9D,IACA,OAAO,KACL,IAAI,sBAAsB;EACxB,MAAM;EACN;EACA,QAAQ,OAAO;CACjB,CAAC,CACH;AACN;;;;AAKA,MAAa,UACX,QACA,WACiD;CACjD,MAAM,QAAQA,aAAkC,MAAM;CACtD,OAAO,OAAO,UAAU,QACpB,OAAO,QACL,eAAe,OAAO;GAAG,SAAS;EAAQ;EAAQ;CAAO,CAAC,CAC5D,IACA,OAAO,KACL,IAAI,sBAAsB;EACxB,MAAM;EACN;EACA,QAAQ,OAAO;CACjB,CAAC,CACH;AACN;;;;AAMA,MAAa,YAAY,SACvB,eAAe,OAAO;EACnB,SAAS;CACV,QAAQ,KAAK;CACb,QAAQ,KAAK;AACf,CAAC;;;;AAKH,MAAa,UACX,SAC8C,KAAK;;;;AAIrD,MAAa,UACX,SAC8C,KAAK;;;;AAKrD,MAAa,cAAc,UACzB,UAAU,YAAY,OAAO,MAAM,KAAK,eAAe,IAAI,UAAU,CAAC,CAAC,KAAK"}