@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,537 @@
1
+ import type * as IdScope from "@confect/core/IdScope";
2
+ import type {
3
+ OrderedQuery as ConvexOrderedQuery,
4
+ QueryInitializer as ConvexQueryInitializer,
5
+ DocumentByInfo,
6
+ GenericTableIndexes,
7
+ Indexes,
8
+ IndexRange,
9
+ IndexRangeBuilder,
10
+ NamedIndex,
11
+ NamedSearchIndex,
12
+ NamedTableInfo,
13
+ Query,
14
+ SearchFilter,
15
+ SearchFilterBuilder,
16
+ SearchIndexes,
17
+ } from "convex/server";
18
+ import type { GenericId } from "convex/values";
19
+ import { pipe } from "effect/Function";
20
+ import * as Array from "effect/Array";
21
+ import * as Effect from "effect/Effect";
22
+ import * as Option from "effect/Option";
23
+ import * as Predicate from "effect/Predicate";
24
+ import type { ReadonlyRecord } from "effect/Record";
25
+ import * as Result from "effect/Result";
26
+ import * as Schema from "effect/Schema";
27
+ import type {
28
+ BaseDatabaseReader,
29
+ IndexFieldTypesForEq,
30
+ } from "@confect/core/Types";
31
+ import type * as DataModel from "./DataModel.js";
32
+ import type * as DatabaseSchema from "./DatabaseSchema.js";
33
+ import * as Document from "./Document.js";
34
+ import * as OrderedQuery from "./OrderedQuery.js";
35
+ import * as QueryStream from "./QueryStream.js";
36
+ import type * as QueryStreamKeyLabels from "./QueryStreamKeyLabels.js";
37
+ import * as QueryStreamIndexRange from "./QueryStreamIndexRange.js";
38
+ import type { QueryStreamOrderDirection as OrderDirection } from "./QueryStreamOrderDirection.js";
39
+ import type * as Table from "./Table.js";
40
+
41
+ type ConvexTableInfoFor<
42
+ DataModel_ extends DataModel.AnyWithProps,
43
+ TableName extends DataModel.TableNames<DataModel_>,
44
+ > = DataModel.TableInfoWithName<DataModel_, TableName>;
45
+
46
+ type TableInfoFor<
47
+ DataModel_ extends DataModel.AnyWithProps,
48
+ TableName extends DataModel.TableNames<DataModel_>,
49
+ > = DataModel.TableInfoWithName_<DataModel_, TableName>;
50
+
51
+ export interface QueryInitializer<
52
+ DataModel_ extends DataModel.AnyWithProps,
53
+ TableName extends DataModel.TableNames<DataModel_>,
54
+ Doc = DataModel.DocumentWithName<DataModel_, TableName>,
55
+ TargetKind extends DatabaseSchema.Target["kind"] = "app",
56
+ > {
57
+ readonly get: {
58
+ (
59
+ id: DataModel.Id<DataModel_, TableName>,
60
+ ): Effect.Effect<Doc, Document.DocumentDecodeError | GetByIdFailure>;
61
+ <
62
+ IndexName extends keyof Indexes<
63
+ ConvexTableInfoFor<DataModel_, TableName>
64
+ >,
65
+ >(
66
+ indexName: IndexName,
67
+ ...indexFieldValues: IndexFieldTypesForEq<
68
+ DataModel.ToConvex<DataModel_>,
69
+ TableName,
70
+ Indexes<ConvexTableInfoFor<DataModel_, TableName>>[IndexName]
71
+ >
72
+ ): Effect.Effect<Doc, Document.DocumentDecodeError | GetByIndexFailure>;
73
+ };
74
+ readonly index: {
75
+ <
76
+ IndexName extends keyof Indexes<
77
+ ConvexTableInfoFor<DataModel_, TableName>
78
+ >,
79
+ >(
80
+ indexName: IndexName,
81
+ indexRange?: (
82
+ q: IndexRangeBuilder<
83
+ TableInfoFor<DataModel_, TableName>["convexDocument"],
84
+ NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
85
+ >,
86
+ ) => IndexRange,
87
+ order?: OrderDirection,
88
+ ): OrderedQuery.OrderedQuery<
89
+ TableInfoFor<DataModel_, TableName>,
90
+ Doc,
91
+ TargetKind
92
+ >;
93
+ <
94
+ IndexName extends keyof Indexes<
95
+ ConvexTableInfoFor<DataModel_, TableName>
96
+ >,
97
+ >(
98
+ indexName: IndexName,
99
+ order?: OrderDirection,
100
+ ): OrderedQuery.OrderedQuery<
101
+ TableInfoFor<DataModel_, TableName>,
102
+ Doc,
103
+ TargetKind
104
+ >;
105
+ };
106
+ readonly search: <
107
+ IndexName extends keyof SearchIndexes<
108
+ ConvexTableInfoFor<DataModel_, TableName>
109
+ >,
110
+ >(
111
+ indexName: IndexName,
112
+ searchFilter: (
113
+ q: SearchFilterBuilder<
114
+ DocumentByInfo<ConvexTableInfoFor<DataModel_, TableName>>,
115
+ NamedSearchIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
116
+ >,
117
+ ) => SearchFilter,
118
+ ) => OrderedQuery.OrderedQuery<
119
+ TableInfoFor<DataModel_, TableName>,
120
+ Doc,
121
+ TargetKind
122
+ >;
123
+ /**
124
+ * EXPERIMENTAL—stream-first querying (see `notes/stream-based-querying.md`).
125
+ *
126
+ * Like `index`, but returns a {@link QueryStream.QueryStream}: a genuine
127
+ * Effect `Stream` of documents in index order that stays mergeable and
128
+ * paginable.
129
+ *
130
+ * In SQL terms: an index range scan—`SELECT * FROM table WHERE <range> ORDER
131
+ * BY <index fields> [DESC]`; `eq` calls are the equality predicates, the
132
+ * bound calls are the range predicates. The value is a reusable description
133
+ * of a query: each run re-runs the index query. * The typed range builder
134
+ * consumes `eq`-pinned fields from the index's field tuple at the type level,
135
+ * so the stream's visible label type is exactly the fields that still vary
136
+ * (the `ORDER BY` columns left after the equality predicates). The order
137
+ * direction is part of the type too: omitted, it is `"asc"`; a literal is
138
+ * tracked as that literal, and a value known only at runtime as the union.
139
+ * The order parameter is either absent or a direction—never `undefined`—so
140
+ * the type can't claim a literal the runtime default would contradict.
141
+ */
142
+ readonly stream: {
143
+ <
144
+ IndexName extends keyof Indexes<
145
+ ConvexTableInfoFor<DataModel_, TableName>
146
+ > &
147
+ string,
148
+ Range extends QueryStreamIndexRange.QueryStreamIndexRange,
149
+ >(
150
+ indexName: IndexName,
151
+ indexRange: (
152
+ q: QueryStreamIndexRange.Builder<
153
+ TableInfoFor<DataModel_, TableName>["convexDocument"],
154
+ NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
155
+ >,
156
+ ) => Range,
157
+ ): QueryStream.QueryStream<
158
+ Doc,
159
+ QueryStreamKeyLabels.QueryStreamKeyLabels<
160
+ QueryStreamIndexRange.Remaining<Range>
161
+ >,
162
+ "asc",
163
+ Document.DocumentDecodeError,
164
+ never
165
+ >;
166
+ <
167
+ IndexName extends keyof Indexes<
168
+ ConvexTableInfoFor<DataModel_, TableName>
169
+ > &
170
+ string,
171
+ Range extends QueryStreamIndexRange.QueryStreamIndexRange,
172
+ Direction extends OrderDirection,
173
+ >(
174
+ indexName: IndexName,
175
+ indexRange: (
176
+ q: QueryStreamIndexRange.Builder<
177
+ TableInfoFor<DataModel_, TableName>["convexDocument"],
178
+ NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
179
+ >,
180
+ ) => Range,
181
+ order: Direction,
182
+ ): QueryStream.QueryStream<
183
+ Doc,
184
+ QueryStreamKeyLabels.QueryStreamKeyLabels<
185
+ QueryStreamIndexRange.Remaining<Range>
186
+ >,
187
+ Direction,
188
+ Document.DocumentDecodeError,
189
+ never
190
+ >;
191
+ <
192
+ IndexName extends keyof Indexes<
193
+ ConvexTableInfoFor<DataModel_, TableName>
194
+ > &
195
+ string,
196
+ >(
197
+ indexName: IndexName,
198
+ ): QueryStream.QueryStream<
199
+ Doc,
200
+ QueryStreamKeyLabels.QueryStreamKeyLabels<
201
+ NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
202
+ >,
203
+ "asc",
204
+ Document.DocumentDecodeError,
205
+ never
206
+ >;
207
+ <
208
+ IndexName extends keyof Indexes<
209
+ ConvexTableInfoFor<DataModel_, TableName>
210
+ > &
211
+ string,
212
+ Direction extends OrderDirection,
213
+ >(
214
+ indexName: IndexName,
215
+ order: Direction,
216
+ ): QueryStream.QueryStream<
217
+ Doc,
218
+ QueryStreamKeyLabels.QueryStreamKeyLabels<
219
+ NamedIndex<ConvexTableInfoFor<DataModel_, TableName>, IndexName>
220
+ >,
221
+ Direction,
222
+ Document.DocumentDecodeError,
223
+ never
224
+ >;
225
+ };
226
+ }
227
+
228
+ export function make<
229
+ Tables extends Table.AnyWithProps,
230
+ TableName extends Table.Name<Tables>,
231
+ >(
232
+ convexDatabaseReader: BaseDatabaseReader<
233
+ DataModel.ToConvex<DataModel.FromTables<Tables>>
234
+ >,
235
+ table: Table.WithName<Tables, TableName> & { readonly scope: IdScope.App },
236
+ ): QueryInitializer<DataModel.FromTables<Tables>, TableName>;
237
+ export function make<
238
+ Tables extends Table.AnyWithProps,
239
+ TableName extends Table.Name<Tables>,
240
+ >(
241
+ convexDatabaseReader: BaseDatabaseReader<
242
+ DataModel.ToConvex<DataModel.FromTables<Tables>>
243
+ >,
244
+ table: Table.WithName<Tables, TableName>,
245
+ ): QueryInitializer<
246
+ DataModel.FromTables<Tables>,
247
+ TableName,
248
+ DataModel.DocumentWithName<DataModel.FromTables<Tables>, TableName>,
249
+ Table.Scope<Table.WithName<Tables, TableName>> extends IdScope.App
250
+ ? "app"
251
+ : "component"
252
+ >;
253
+ export function make<
254
+ Tables extends Table.AnyWithProps,
255
+ TableName extends Table.Name<Tables>,
256
+ >(
257
+ convexDatabaseReader: BaseDatabaseReader<
258
+ DataModel.ToConvex<DataModel.FromTables<Tables>>
259
+ >,
260
+ table: Table.WithName<Tables, TableName>,
261
+ ): QueryInitializer<
262
+ DataModel.FromTables<Tables>,
263
+ TableName,
264
+ DataModel.DocumentWithName<DataModel.FromTables<Tables>, TableName>,
265
+ DatabaseSchema.Target["kind"]
266
+ > {
267
+ const tableName = table.tableName;
268
+ type DataModel_ = DataModel.FromTables<Tables>;
269
+ type ConvexDataModel_ = DataModel.ToConvex<DataModel_>;
270
+ type ThisQueryInitializer = QueryInitializer<
271
+ DataModel_,
272
+ TableName,
273
+ DataModel.DocumentWithName<DataModel_, TableName>,
274
+ DatabaseSchema.Target["kind"]
275
+ >;
276
+ type QueryInitializerFunction<
277
+ FunctionName extends keyof ThisQueryInitializer,
278
+ > = ThisQueryInitializer[FunctionName];
279
+
280
+ const getByIndex = <
281
+ IndexName extends keyof Indexes<
282
+ DataModel.TableInfoWithName<DataModel_, TableName>
283
+ >,
284
+ >(
285
+ indexName: IndexName,
286
+ indexFieldValues: IndexFieldTypesForEq<
287
+ DataModel.ToConvex<DataModel_>,
288
+ TableName,
289
+ Indexes<DataModel.TableInfoWithName<DataModel_, TableName>>[IndexName]
290
+ >,
291
+ ): Effect.Effect<
292
+ DataModel.DocumentWithName<DataModel_, TableName>,
293
+ Document.DocumentDecodeError | GetByIndexFailure
294
+ > => {
295
+ const indexFieldPaths: GenericTableIndexes[keyof GenericTableIndexes] = (
296
+ table.indexes as GenericTableIndexes
297
+ )[indexName as keyof GenericTableIndexes]!;
298
+
299
+ return pipe(
300
+ Effect.promise(() =>
301
+ convexDatabaseReader
302
+ .query(tableName)
303
+ .withIndex(indexName, (q) =>
304
+ Array.reduce(
305
+ indexFieldValues,
306
+ q,
307
+ (q_, v, i) => q_.eq(indexFieldPaths[i] as any, v as any) as any,
308
+ ),
309
+ )
310
+ .unique(),
311
+ ),
312
+ Effect.andThen((value) =>
313
+ Effect.fromResult(
314
+ Result.fromNullishOr(
315
+ value,
316
+ () =>
317
+ new GetByIndexFailure({
318
+ tableName,
319
+ indexName: indexName as string,
320
+ indexFieldValues,
321
+ }),
322
+ ),
323
+ ),
324
+ ),
325
+ Effect.andThen(Document.decode(table)),
326
+ );
327
+ };
328
+
329
+ const get: QueryInitializerFunction<"get"> = ((
330
+ ...args: Parameters<QueryInitializerFunction<"get">>
331
+ ) => {
332
+ if (args.length === 1) {
333
+ const id = args[0] as GenericId<TableName>;
334
+
335
+ return getById<Tables, TableName>(convexDatabaseReader, table)(id);
336
+ } else {
337
+ const [indexName, ...indexFieldValues] = args;
338
+
339
+ return getByIndex(
340
+ indexName as keyof Indexes<
341
+ DataModel.TableInfoWithName<DataModel_, TableName>
342
+ >,
343
+ indexFieldValues,
344
+ );
345
+ }
346
+ }) as QueryInitializerFunction<"get">;
347
+
348
+ const index: QueryInitializerFunction<"index"> = <
349
+ IndexName extends keyof Indexes<
350
+ DataModel.TableInfoWithName<DataModel_, TableName>
351
+ >,
352
+ >(
353
+ indexName: IndexName,
354
+ indexRangeOrOrder?:
355
+ | ((
356
+ q: IndexRangeBuilder<
357
+ DataModel.TableInfoWithName_<
358
+ DataModel_,
359
+ TableName
360
+ >["convexDocument"],
361
+ NamedIndex<
362
+ DataModel.TableInfoWithName<DataModel_, TableName>,
363
+ IndexName
364
+ >
365
+ >,
366
+ ) => IndexRange)
367
+ | OrderDirection,
368
+ order?: OrderDirection,
369
+ ) => {
370
+ const {
371
+ applyWithIndex,
372
+ applyOrder,
373
+ }: {
374
+ applyWithIndex: (
375
+ queryInitializer: ConvexQueryInitializer<
376
+ NamedTableInfo<ConvexDataModel_, TableName>
377
+ >,
378
+ ) => Query<NamedTableInfo<ConvexDataModel_, TableName>>;
379
+ applyOrder: (
380
+ query: Query<NamedTableInfo<ConvexDataModel_, TableName>>,
381
+ ) => ConvexOrderedQuery<NamedTableInfo<ConvexDataModel_, TableName>>;
382
+ } =
383
+ indexRangeOrOrder === undefined
384
+ ? {
385
+ applyWithIndex: (q) => q.withIndex(indexName),
386
+ applyOrder: (q) => q.order("asc"),
387
+ }
388
+ : typeof indexRangeOrOrder === "function"
389
+ ? order === undefined
390
+ ? {
391
+ applyWithIndex: (q) =>
392
+ q.withIndex(indexName, indexRangeOrOrder),
393
+ applyOrder: (q) => q.order("asc"),
394
+ }
395
+ : {
396
+ applyWithIndex: (q) =>
397
+ q.withIndex(indexName, indexRangeOrOrder),
398
+ applyOrder: (q) => q.order(order),
399
+ }
400
+ : {
401
+ applyWithIndex: (q) => q.withIndex(indexName),
402
+ applyOrder: (q) => q.order(indexRangeOrOrder),
403
+ };
404
+
405
+ const orderedQuery = pipe(
406
+ convexDatabaseReader.query(tableName),
407
+ applyWithIndex,
408
+ applyOrder,
409
+ );
410
+
411
+ return OrderedQuery.make(orderedQuery, table);
412
+ };
413
+
414
+ const stream: QueryInitializerFunction<"stream"> = ((
415
+ indexName: string,
416
+ indexRangeOrOrder?:
417
+ | ((
418
+ q: QueryStreamIndexRange.Builder<any, any>,
419
+ ) => QueryStreamIndexRange.QueryStreamIndexRange)
420
+ | OrderDirection,
421
+ maybeOrder?: OrderDirection,
422
+ ) => {
423
+ const orderDirection = Predicate.isString(indexRangeOrOrder)
424
+ ? indexRangeOrOrder
425
+ : (maybeOrder ?? "asc");
426
+
427
+ // Without a range callback, the leaf scans the entire index.
428
+ const indexRange = Predicate.isFunction(indexRangeOrOrder)
429
+ ? indexRangeOrOrder(QueryStreamIndexRange.builder())
430
+ : QueryStreamIndexRange.builder();
431
+
432
+ // The type-level field tuple appends the `_creationTime` tiebreaker, but
433
+ // the runtime `table.indexes` record stores only the declared fields—append it here.
434
+ const indexFieldPaths: ReadonlyArray<string> =
435
+ indexName === "by_id"
436
+ ? ["_id"]
437
+ : indexName === "by_creation_time"
438
+ ? ["_creationTime"]
439
+ : pipe(
440
+ Option.fromUndefinedOr(
441
+ (
442
+ table.indexes as ReadonlyRecord<string, ReadonlyArray<string>>
443
+ )[indexName],
444
+ ),
445
+ // An unknown index name is a defect, not an empty field list:
446
+ // silently empty fields would make key extraction and range
447
+ // splitting target the wrong fields.
448
+ Option.getOrThrowWith(
449
+ () =>
450
+ new Error(
451
+ `QueryInitializer.stream: table "${tableName}" has no index named "${indexName}"`,
452
+ ),
453
+ ),
454
+ Array.append("_creationTime"),
455
+ );
456
+
457
+ return QueryStream.fromReflection({
458
+ reader: convexDatabaseReader as QueryStream.ReflectionReader,
459
+ table,
460
+ indexName,
461
+ indexFieldPaths,
462
+ indexRange,
463
+ orderDirection,
464
+ });
465
+ }) as QueryInitializerFunction<"stream">;
466
+
467
+ const search: QueryInitializerFunction<"search"> = (
468
+ indexName,
469
+ searchFilter,
470
+ ) =>
471
+ OrderedQuery.make(
472
+ convexDatabaseReader
473
+ .query(tableName)
474
+ .withSearchIndex(indexName, searchFilter),
475
+ table,
476
+ );
477
+
478
+ return {
479
+ get,
480
+ index,
481
+ search,
482
+ stream,
483
+ };
484
+ }
485
+
486
+ export const getById =
487
+ <Tables extends Table.AnyWithProps, TableName extends Table.Name<Tables>>(
488
+ convexDatabaseReader: BaseDatabaseReader<
489
+ DataModel.ToConvex<DataModel.FromTables<Tables>>
490
+ >,
491
+ table: Table.WithName<Tables, TableName>,
492
+ ) =>
493
+ (id: GenericId<TableName>) =>
494
+ pipe(
495
+ Effect.promise(() => convexDatabaseReader.get(id)),
496
+ Effect.andThen((value) =>
497
+ Effect.fromResult(
498
+ Result.fromNullishOr(
499
+ value,
500
+ () => new GetByIdFailure({ tableName: table.tableName, id }),
501
+ ),
502
+ ),
503
+ ),
504
+ Effect.andThen(Document.decode(table)),
505
+ );
506
+
507
+ export class GetByIdFailure extends Schema.TaggedError<GetByIdFailure>()(
508
+ "GetByIdFailure",
509
+ {
510
+ id: Schema.String,
511
+ tableName: Schema.String,
512
+ },
513
+ ) {
514
+ override get message(): string {
515
+ return Document.documentErrorMessage({
516
+ id: this.id,
517
+ tableName: this.tableName,
518
+ message: "not found",
519
+ });
520
+ }
521
+ }
522
+
523
+ export class GetByIndexFailure extends Schema.TaggedError<GetByIndexFailure>()(
524
+ "GetByIndexFailure",
525
+ {
526
+ tableName: Schema.String,
527
+ indexName: Schema.String,
528
+ indexFieldValues: Schema.Array(Schema.Unknown),
529
+ },
530
+ ) {
531
+ override get message(): string {
532
+ return `No documents found in table '${this.tableName}' with index '${this.indexName}' and field values '${JSON.stringify(
533
+ this.indexFieldValues,
534
+ (_key, value) => (typeof value === "bigint" ? value.toString() : value),
535
+ )}'`;
536
+ }
537
+ }
@@ -0,0 +1,91 @@
1
+ import * as Ref from "@confect/core/Ref";
2
+ import type { GenericActionCtx } from "convex/server";
3
+ import * as Context from "effect/Context";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
+ import type * as Schema from "effect/Schema";
7
+ import * as MutationTransactionContext from "./MutationTransactionContext.js";
8
+ import * as QueryTransactionContext from "./QueryTransactionContext.js";
9
+
10
+ export type Options = MutationTransactionContext.QueryOptions;
11
+
12
+ const run = Effect.fn("QueryRunner.runQuery")(
13
+ <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> => effect,
14
+ );
15
+
16
+ const make = (nativeRunQuery: GenericActionCtx<any>["runQuery"]) => {
17
+ function runQuery<Query extends Ref.AnyQuery>(
18
+ query: Query,
19
+ ...args: [...Ref.OptionalArgs<Query>, options?: undefined]
20
+ ): Effect.Effect<Ref.Returns<Query>, Ref.Error<Query> | Schema.SchemaError>;
21
+ function runQuery<Query extends Ref.AnyQuery>(
22
+ query: Query,
23
+ args: Ref.Args<Query>,
24
+ options:
25
+ | (QueryTransactionContext.Options & {
26
+ readonly useStaleSnapshot?: never;
27
+ })
28
+ | undefined,
29
+ ): Effect.Effect<
30
+ Ref.Returns<Query>,
31
+ Ref.Error<Query> | Schema.SchemaError,
32
+ QueryTransactionContext.QueryTransactionContext
33
+ >;
34
+ function runQuery<Query extends Ref.AnyQuery>(
35
+ query: Query,
36
+ args: Ref.Args<Query>,
37
+ options: Options & { readonly useStaleSnapshot: boolean },
38
+ ): Effect.Effect<
39
+ Ref.Returns<Query>,
40
+ Ref.Error<Query> | Schema.SchemaError,
41
+ MutationTransactionContext.MutationTransactionContext
42
+ >;
43
+ function runQuery<Query extends Ref.AnyQuery>(
44
+ query: Query,
45
+ args: Ref.Args<Query>,
46
+ options: Options | undefined,
47
+ ): Effect.Effect<
48
+ Ref.Returns<Query>,
49
+ Ref.Error<Query> | Schema.SchemaError,
50
+ | QueryTransactionContext.QueryTransactionContext
51
+ | MutationTransactionContext.MutationTransactionContext
52
+ >;
53
+ function runQuery<Query extends Ref.AnyQuery>(
54
+ query: Query,
55
+ args?: Ref.Args<Query>,
56
+ options?: Options,
57
+ ): Effect.Effect<
58
+ Ref.Returns<Query>,
59
+ Ref.Error<Query> | Schema.SchemaError,
60
+ | QueryTransactionContext.QueryTransactionContext
61
+ | MutationTransactionContext.MutationTransactionContext
62
+ > {
63
+ return run(
64
+ Effect.gen(function* () {
65
+ const actualArgs = (args ?? {}) as Ref.Args<Query>;
66
+ if (options?.useStaleSnapshot !== undefined) {
67
+ const controls =
68
+ yield* MutationTransactionContext.MutationTransactionContext;
69
+ return yield* controls.runQuery(query, actualArgs, options);
70
+ }
71
+ if (options !== undefined) {
72
+ const controls =
73
+ yield* QueryTransactionContext.QueryTransactionContext;
74
+ return yield* controls.runQuery(query, actualArgs, options);
75
+ }
76
+ return yield* Ref.runWithCodec(query, actualArgs, (ref, encodedArgs) =>
77
+ nativeRunQuery(ref, encodedArgs),
78
+ );
79
+ }),
80
+ );
81
+ }
82
+ return { runQuery };
83
+ };
84
+
85
+ export const QueryRunner = Context.Service<ReturnType<typeof make>>(
86
+ "@confect/server/QueryRunner",
87
+ );
88
+ export type QueryRunner = typeof QueryRunner.Identifier;
89
+
90
+ export const layer = (runQuery: GenericActionCtx<any>["runQuery"]) =>
91
+ Layer.succeed(QueryRunner, make(runQuery));