convex 1.34.1 → 1.35.0

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 (512) hide show
  1. package/CHANGELOG.md +86 -43
  2. package/dist/browser.bundle.js +8 -2
  3. package/dist/browser.bundle.js.map +3 -3
  4. package/dist/cjs/browser/index-node.js +3 -1
  5. package/dist/cjs/browser/index.js +3 -1
  6. package/dist/cjs/browser/index.js.map +2 -2
  7. package/dist/cjs/browser/query_options.js.map +2 -2
  8. package/dist/cjs/cli/aiFiles.js +31 -13
  9. package/dist/cjs/cli/aiFiles.js.map +3 -3
  10. package/dist/cjs/cli/codegen_templates/readme.js +14 -1
  11. package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
  12. package/dist/cjs/cli/configure.js +21 -24
  13. package/dist/cjs/cli/configure.js.map +2 -2
  14. package/dist/cjs/cli/deploy.js +7 -8
  15. package/dist/cjs/cli/deploy.js.map +2 -2
  16. package/dist/cjs/cli/deploymentCreate.js +225 -40
  17. package/dist/cjs/cli/deploymentCreate.js.map +3 -3
  18. package/dist/cjs/cli/deploymentSelect.js +14 -13
  19. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  20. package/dist/cjs/cli/dev.js +30 -11
  21. package/dist/cjs/cli/dev.js.map +2 -2
  22. package/dist/cjs/cli/docs.js +1 -1
  23. package/dist/cjs/cli/docs.js.map +2 -2
  24. package/dist/cjs/cli/init.js +1 -1
  25. package/dist/cjs/cli/init.js.map +2 -2
  26. package/dist/cjs/cli/lib/aiFiles/agentsmd.js +14 -10
  27. package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +2 -2
  28. package/dist/cjs/cli/lib/aiFiles/claudemd.js +14 -10
  29. package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +2 -2
  30. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +10 -3
  31. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  32. package/dist/cjs/cli/lib/aiFiles/index.js +70 -86
  33. package/dist/cjs/cli/lib/aiFiles/index.js.map +3 -3
  34. package/dist/cjs/cli/lib/aiFiles/skills.js +28 -12
  35. package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
  36. package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
  37. package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
  38. package/dist/cjs/cli/lib/aiFiles/status.js +31 -28
  39. package/dist/cjs/cli/lib/aiFiles/status.js.map +2 -2
  40. package/dist/cjs/cli/lib/aiFiles/utils.js +31 -14
  41. package/dist/cjs/cli/lib/aiFiles/utils.js.map +2 -2
  42. package/dist/cjs/cli/lib/api.js +70 -7
  43. package/dist/cjs/cli/lib/api.js.map +2 -2
  44. package/dist/cjs/cli/lib/command.js +4 -5
  45. package/dist/cjs/cli/lib/command.js.map +2 -2
  46. package/dist/cjs/cli/lib/config.js +41 -4
  47. package/dist/cjs/cli/lib/config.js.map +3 -3
  48. package/dist/cjs/cli/lib/deploy2.js +9 -26
  49. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  50. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
  51. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  52. package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
  53. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  54. package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
  55. package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
  56. package/dist/cjs/cli/lib/dev.js +162 -117
  57. package/dist/cjs/cli/lib/dev.js.map +2 -2
  58. package/dist/cjs/cli/lib/env.js +1 -13
  59. package/dist/cjs/cli/lib/env.js.map +2 -2
  60. package/dist/cjs/cli/lib/expiration.js +104 -0
  61. package/dist/cjs/cli/lib/expiration.js.map +7 -0
  62. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  63. package/dist/cjs/cli/lib/init.js +4 -3
  64. package/dist/cjs/cli/lib/init.js.map +2 -2
  65. package/dist/cjs/cli/lib/insights.js +1 -1
  66. package/dist/cjs/cli/lib/insights.js.map +2 -2
  67. package/dist/cjs/cli/lib/localDeployment/anonymous.js +14 -7
  68. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  69. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
  70. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
  71. package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
  72. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  73. package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
  74. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  75. package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
  76. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  77. package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
  78. package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
  79. package/dist/cjs/cli/lib/updates.js +8 -9
  80. package/dist/cjs/cli/lib/updates.js.map +2 -2
  81. package/dist/cjs/cli/lib/usage.js +2 -1
  82. package/dist/cjs/cli/lib/usage.js.map +2 -2
  83. package/dist/cjs/cli/lib/utils/prompts.js +2 -1
  84. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  85. package/dist/cjs/cli/lib/utils/utils.js +46 -20
  86. package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
  87. package/dist/cjs/index.js +1 -1
  88. package/dist/cjs/index.js.map +1 -1
  89. package/dist/cjs/react/client.js +43 -6
  90. package/dist/cjs/react/client.js.map +2 -2
  91. package/dist/cjs/react/index.js +2 -0
  92. package/dist/cjs/react/index.js.map +2 -2
  93. package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  94. package/dist/cjs/server/api.js.map +2 -2
  95. package/dist/cjs/server/components/definition.js.map +1 -1
  96. package/dist/cjs/server/components/index.js +40 -4
  97. package/dist/cjs/server/components/index.js.map +2 -2
  98. package/dist/cjs/server/data_model.js.map +1 -1
  99. package/dist/cjs/server/impl/meta_impl.js +78 -0
  100. package/dist/cjs/server/impl/meta_impl.js.map +7 -0
  101. package/dist/cjs/server/impl/registration_impl.js +16 -11
  102. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  103. package/dist/cjs/server/index.js.map +2 -2
  104. package/dist/cjs/server/meta.js +17 -0
  105. package/dist/cjs/server/meta.js.map +7 -0
  106. package/dist/cjs/server/registration.js.map +1 -1
  107. package/dist/cjs-types/browser/index.d.ts +1 -0
  108. package/dist/cjs-types/browser/index.d.ts.map +1 -1
  109. package/dist/cjs-types/browser/query_options.d.ts +12 -9
  110. package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
  111. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  112. package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
  113. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  114. package/dist/cjs-types/cli/configure.test.d.ts +2 -0
  115. package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
  116. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  117. package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
  118. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  119. package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
  120. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  121. package/dist/cjs-types/cli/dev.d.ts +3 -1
  122. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  123. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  124. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  126. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  128. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  129. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +20 -18
  130. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  131. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +6 -4
  132. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  133. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
  134. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  135. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  136. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  137. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +4 -1
  138. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  139. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +13 -3
  140. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  141. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  142. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  143. package/dist/cjs-types/cli/lib/api.d.ts +3 -3
  144. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  145. package/dist/cjs-types/cli/lib/command.d.ts +2 -1
  146. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  147. package/dist/cjs-types/cli/lib/config.d.ts +17 -6
  148. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  149. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
  150. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  151. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  152. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  153. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  154. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
  155. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
  156. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  157. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  158. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
  159. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  160. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  161. package/dist/cjs-types/cli/lib/env.d.ts +0 -4
  162. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  163. package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
  164. package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
  165. package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
  166. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
  167. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  168. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  169. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  170. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  171. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  172. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
  173. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  174. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  175. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
  176. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  177. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
  178. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  179. package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
  180. package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
  181. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  182. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  183. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  184. package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
  185. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  186. package/dist/cjs-types/index.d.ts +1 -1
  187. package/dist/cjs-types/react/client.d.ts +54 -2
  188. package/dist/cjs-types/react/client.d.ts.map +1 -1
  189. package/dist/cjs-types/react/index.d.ts +7 -2
  190. package/dist/cjs-types/react/index.d.ts.map +1 -1
  191. package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
  192. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
  193. package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
  194. package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
  195. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  196. package/dist/cjs-types/server/api.d.ts +5 -1
  197. package/dist/cjs-types/server/api.d.ts.map +1 -1
  198. package/dist/cjs-types/server/components/definition.d.ts +1 -0
  199. package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
  200. package/dist/cjs-types/server/components/index.d.ts +5 -1
  201. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  202. package/dist/cjs-types/server/data_model.d.ts +2 -1
  203. package/dist/cjs-types/server/data_model.d.ts.map +1 -1
  204. package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
  205. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
  206. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  207. package/dist/cjs-types/server/index.d.ts +1 -0
  208. package/dist/cjs-types/server/index.d.ts.map +1 -1
  209. package/dist/cjs-types/server/meta.d.ts +72 -0
  210. package/dist/cjs-types/server/meta.d.ts.map +1 -0
  211. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  212. package/dist/cli.bundle.cjs +1670 -1214
  213. package/dist/cli.bundle.cjs.map +4 -4
  214. package/dist/esm/browser/index-node.js +1 -0
  215. package/dist/esm/browser/index.js +1 -0
  216. package/dist/esm/browser/index.js.map +2 -2
  217. package/dist/esm/browser/query_options.js.map +2 -2
  218. package/dist/esm/cli/aiFiles.js +33 -15
  219. package/dist/esm/cli/aiFiles.js.map +2 -2
  220. package/dist/esm/cli/codegen_templates/readme.js +14 -1
  221. package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
  222. package/dist/esm/cli/configure.js +23 -26
  223. package/dist/esm/cli/configure.js.map +2 -2
  224. package/dist/esm/cli/deploy.js +11 -10
  225. package/dist/esm/cli/deploy.js.map +2 -2
  226. package/dist/esm/cli/deploymentCreate.js +238 -42
  227. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  228. package/dist/esm/cli/deploymentSelect.js +13 -12
  229. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  230. package/dist/esm/cli/dev.js +34 -13
  231. package/dist/esm/cli/dev.js.map +2 -2
  232. package/dist/esm/cli/docs.js +1 -1
  233. package/dist/esm/cli/docs.js.map +2 -2
  234. package/dist/esm/cli/init.js +2 -2
  235. package/dist/esm/cli/init.js.map +2 -2
  236. package/dist/esm/cli/lib/aiFiles/agentsmd.js +13 -9
  237. package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +2 -2
  238. package/dist/esm/cli/lib/aiFiles/claudemd.js +13 -9
  239. package/dist/esm/cli/lib/aiFiles/claudemd.js.map +2 -2
  240. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +12 -5
  241. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  242. package/dist/esm/cli/lib/aiFiles/index.js +72 -89
  243. package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
  244. package/dist/esm/cli/lib/aiFiles/skills.js +29 -13
  245. package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
  246. package/dist/esm/cli/lib/aiFiles/state.js +60 -0
  247. package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
  248. package/dist/esm/cli/lib/aiFiles/status.js +32 -29
  249. package/dist/esm/cli/lib/aiFiles/status.js.map +2 -2
  250. package/dist/esm/cli/lib/aiFiles/utils.js +25 -10
  251. package/dist/esm/cli/lib/aiFiles/utils.js.map +2 -2
  252. package/dist/esm/cli/lib/api.js +70 -7
  253. package/dist/esm/cli/lib/api.js.map +2 -2
  254. package/dist/esm/cli/lib/command.js +4 -5
  255. package/dist/esm/cli/lib/command.js.map +2 -2
  256. package/dist/esm/cli/lib/config.js +39 -3
  257. package/dist/esm/cli/lib/config.js.map +2 -2
  258. package/dist/esm/cli/lib/deploy2.js +13 -26
  259. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  260. package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
  261. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  262. package/dist/esm/cli/lib/deploymentSelection.js +46 -2
  263. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  264. package/dist/esm/cli/lib/deploymentSelector.js +1 -0
  265. package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
  266. package/dist/esm/cli/lib/dev.js +162 -118
  267. package/dist/esm/cli/lib/dev.js.map +2 -2
  268. package/dist/esm/cli/lib/env.js +0 -11
  269. package/dist/esm/cli/lib/env.js.map +2 -2
  270. package/dist/esm/cli/lib/expiration.js +80 -0
  271. package/dist/esm/cli/lib/expiration.js.map +7 -0
  272. package/dist/esm/cli/lib/init.js +4 -3
  273. package/dist/esm/cli/lib/init.js.map +2 -2
  274. package/dist/esm/cli/lib/insights.js +1 -1
  275. package/dist/esm/cli/lib/insights.js.map +2 -2
  276. package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
  277. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  278. package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
  279. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
  280. package/dist/esm/cli/lib/localDeployment/run.js +1 -1
  281. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  282. package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
  283. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  284. package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
  285. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  286. package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
  287. package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
  288. package/dist/esm/cli/lib/updates.js +11 -9
  289. package/dist/esm/cli/lib/updates.js.map +2 -2
  290. package/dist/esm/cli/lib/usage.js +2 -1
  291. package/dist/esm/cli/lib/usage.js.map +2 -2
  292. package/dist/esm/cli/lib/utils/prompts.js +2 -1
  293. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  294. package/dist/esm/cli/lib/utils/utils.js +45 -20
  295. package/dist/esm/cli/lib/utils/utils.js.map +3 -3
  296. package/dist/esm/index.js +1 -1
  297. package/dist/esm/index.js.map +1 -1
  298. package/dist/esm/react/client.js +43 -6
  299. package/dist/esm/react/client.js.map +2 -2
  300. package/dist/esm/react/index.js +1 -0
  301. package/dist/esm/react/index.js.map +2 -2
  302. package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  303. package/dist/esm/server/api.js.map +2 -2
  304. package/dist/esm/server/components/index.js +40 -4
  305. package/dist/esm/server/components/index.js.map +2 -2
  306. package/dist/esm/server/impl/meta_impl.js +54 -0
  307. package/dist/esm/server/impl/meta_impl.js.map +7 -0
  308. package/dist/esm/server/impl/registration_impl.js +20 -11
  309. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  310. package/dist/esm/server/index.js.map +2 -2
  311. package/dist/esm/server/meta.js +2 -0
  312. package/dist/esm/server/meta.js.map +7 -0
  313. package/dist/esm-types/browser/index.d.ts +1 -0
  314. package/dist/esm-types/browser/index.d.ts.map +1 -1
  315. package/dist/esm-types/browser/query_options.d.ts +12 -9
  316. package/dist/esm-types/browser/query_options.d.ts.map +1 -1
  317. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  318. package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
  319. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  320. package/dist/esm-types/cli/configure.test.d.ts +2 -0
  321. package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
  322. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  323. package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
  324. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  325. package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
  326. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  327. package/dist/esm-types/cli/dev.d.ts +3 -1
  328. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  329. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +5 -5
  330. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
  331. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
  332. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
  333. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
  334. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  335. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +20 -18
  336. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  337. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +6 -4
  338. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  339. package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
  340. package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  341. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  342. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  343. package/dist/esm-types/cli/lib/aiFiles/status.d.ts +4 -1
  344. package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -1
  345. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +13 -3
  346. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
  347. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  348. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  349. package/dist/esm-types/cli/lib/api.d.ts +3 -3
  350. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  351. package/dist/esm-types/cli/lib/command.d.ts +2 -1
  352. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  353. package/dist/esm-types/cli/lib/config.d.ts +17 -6
  354. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  355. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
  356. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  357. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  358. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  359. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  360. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
  361. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
  362. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  363. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  364. package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
  365. package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  366. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  367. package/dist/esm-types/cli/lib/env.d.ts +0 -4
  368. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  369. package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
  370. package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
  371. package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
  372. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
  373. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  374. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  375. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  376. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  377. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  378. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
  379. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  380. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  381. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
  382. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  383. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
  384. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  385. package/dist/esm-types/cli/lib/updates.d.ts +4 -3
  386. package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
  387. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  388. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  389. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  390. package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
  391. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  392. package/dist/esm-types/index.d.ts +1 -1
  393. package/dist/esm-types/react/client.d.ts +54 -2
  394. package/dist/esm-types/react/client.d.ts.map +1 -1
  395. package/dist/esm-types/react/index.d.ts +7 -2
  396. package/dist/esm-types/react/index.d.ts.map +1 -1
  397. package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
  398. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
  399. package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
  400. package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
  401. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  402. package/dist/esm-types/server/api.d.ts +5 -1
  403. package/dist/esm-types/server/api.d.ts.map +1 -1
  404. package/dist/esm-types/server/components/definition.d.ts +1 -0
  405. package/dist/esm-types/server/components/definition.d.ts.map +1 -1
  406. package/dist/esm-types/server/components/index.d.ts +5 -1
  407. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  408. package/dist/esm-types/server/data_model.d.ts +2 -1
  409. package/dist/esm-types/server/data_model.d.ts.map +1 -1
  410. package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
  411. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
  412. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  413. package/dist/esm-types/server/index.d.ts +1 -0
  414. package/dist/esm-types/server/index.d.ts.map +1 -1
  415. package/dist/esm-types/server/meta.d.ts +72 -0
  416. package/dist/esm-types/server/meta.d.ts.map +1 -0
  417. package/dist/esm-types/server/registration.d.ts.map +1 -1
  418. package/dist/react.bundle.js +50 -7
  419. package/dist/react.bundle.js.map +3 -3
  420. package/package.json +11 -7
  421. package/schemas/convex.schema.json +15 -2
  422. package/src/browser/index.ts +3 -0
  423. package/src/browser/query_options.test.ts +0 -9
  424. package/src/browser/query_options.ts +36 -15
  425. package/src/cli/aiFiles.ts +44 -14
  426. package/src/cli/codegen_templates/readme.ts +14 -1
  427. package/src/cli/configure.test.ts +138 -0
  428. package/src/cli/configure.ts +48 -47
  429. package/src/cli/deploy.ts +12 -9
  430. package/src/cli/deploymentCreate.test.ts +349 -14
  431. package/src/cli/deploymentCreate.ts +268 -41
  432. package/src/cli/deploymentSelect.test.ts +136 -27
  433. package/src/cli/deploymentSelect.ts +50 -41
  434. package/src/cli/deploymentSelection.test.ts +343 -35
  435. package/src/cli/dev.ts +49 -14
  436. package/src/cli/docs.ts +1 -1
  437. package/src/cli/init.ts +2 -2
  438. package/src/cli/lib/aiFiles/agentsmd.ts +15 -11
  439. package/src/cli/lib/aiFiles/claudemd.ts +15 -11
  440. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +12 -2
  441. package/src/cli/lib/aiFiles/guidelinesmd.ts +15 -7
  442. package/src/cli/lib/aiFiles/index.test.ts +188 -222
  443. package/src/cli/lib/aiFiles/index.ts +119 -125
  444. package/src/cli/lib/aiFiles/integration.test.ts +112 -45
  445. package/src/cli/lib/aiFiles/prompt.test.ts +6 -6
  446. package/src/cli/lib/aiFiles/skills.ts +46 -16
  447. package/src/cli/lib/aiFiles/state.test.ts +280 -0
  448. package/src/cli/lib/aiFiles/state.ts +82 -0
  449. package/src/cli/lib/aiFiles/status.ts +45 -39
  450. package/src/cli/lib/aiFiles/utils.test.ts +50 -0
  451. package/src/cli/lib/aiFiles/utils.ts +38 -10
  452. package/src/cli/lib/api.ts +88 -7
  453. package/src/cli/lib/command.ts +12 -7
  454. package/src/cli/lib/config.test.ts +184 -7
  455. package/src/cli/lib/config.ts +67 -7
  456. package/src/cli/lib/deploy2.ts +14 -27
  457. package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
  458. package/src/cli/lib/deploymentSelection.ts +59 -6
  459. package/src/cli/lib/deploymentSelector.test.ts +6 -0
  460. package/src/cli/lib/deploymentSelector.ts +2 -0
  461. package/src/cli/lib/dev.ts +202 -153
  462. package/src/cli/lib/env.ts +0 -15
  463. package/src/cli/lib/expiration.test.ts +159 -0
  464. package/src/cli/lib/expiration.ts +124 -0
  465. package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
  466. package/src/cli/lib/init.ts +6 -2
  467. package/src/cli/lib/insights.ts +1 -1
  468. package/src/cli/lib/localDeployment/anonymous.ts +19 -9
  469. package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
  470. package/src/cli/lib/localDeployment/run.ts +1 -1
  471. package/src/cli/lib/localDeployment/upgrade.ts +12 -10
  472. package/src/cli/lib/localDeployment/utils.ts +12 -0
  473. package/src/cli/lib/mcp/tools/status.ts +1 -1
  474. package/src/cli/lib/updates.test.ts +102 -75
  475. package/src/cli/lib/updates.ts +14 -12
  476. package/src/cli/lib/usage.ts +3 -1
  477. package/src/cli/lib/utils/prompts.ts +2 -0
  478. package/src/cli/lib/utils/utils.test.ts +6 -6
  479. package/src/cli/lib/utils/utils.ts +66 -27
  480. package/src/index.ts +1 -1
  481. package/src/react/client.test.tsx +65 -0
  482. package/src/react/client.ts +129 -13
  483. package/src/react/index.ts +9 -1
  484. package/src/react/use_query_object_options.test.ts +50 -0
  485. package/src/react/use_query_result.test.ts +41 -0
  486. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
  487. package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
  488. package/src/server/api.ts +5 -1
  489. package/src/server/components/definition.ts +3 -0
  490. package/src/server/components/index.ts +62 -5
  491. package/src/server/data_model.ts +2 -1
  492. package/src/server/impl/meta_impl.ts +74 -0
  493. package/src/server/impl/registration_impl.ts +21 -9
  494. package/src/server/index.ts +8 -0
  495. package/src/server/meta.ts +76 -0
  496. package/src/server/registration.ts +10 -0
  497. package/src/server/schema.test.ts +78 -1
  498. package/dist/cjs/cli/lib/aiFiles/config.js +0 -171
  499. package/dist/cjs/cli/lib/aiFiles/config.js.map +0 -7
  500. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts +0 -46
  501. package/dist/cjs-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  502. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  503. package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  504. package/dist/esm/cli/lib/aiFiles/config.js +0 -135
  505. package/dist/esm/cli/lib/aiFiles/config.js.map +0 -7
  506. package/dist/esm-types/cli/lib/aiFiles/config.d.ts +0 -46
  507. package/dist/esm-types/cli/lib/aiFiles/config.d.ts.map +0 -1
  508. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts +0 -2
  509. package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
  510. package/src/cli/lib/aiFiles/config.test.ts +0 -460
  511. package/src/cli/lib/aiFiles/config.ts +0 -188
  512. package/src/values/.claude/settings.local.json +0 -10
@@ -94,6 +94,7 @@ export type ComponentDefinition<Exports extends ComponentExports = any> = {
94
94
  definition: Definition,
95
95
  options?: {
96
96
  name?: string;
97
+ httpPrefix?: string;
97
98
  },
98
99
  ): InstalledComponent<Definition>;
99
100
 
@@ -128,6 +129,7 @@ export type AppDefinition = {
128
129
  definition: Definition,
129
130
  options?: {
130
131
  name?: string;
132
+ httpPrefix?: string;
131
133
  },
132
134
  ): InstalledComponent<Definition>;
133
135
  };
@@ -143,6 +145,7 @@ type CommonDefinitionData = {
143
145
  string,
144
146
  ImportedComponentDefinition,
145
147
  Record<string, any> | null,
148
+ string | undefined,
146
149
  ][];
147
150
  _exportTree: ExportTree;
148
151
  };
@@ -152,7 +155,9 @@ type ComponentDefinitionData = CommonDefinitionData & {
152
155
  _name: string;
153
156
  _onInitCallbacks: Record<string, (argsStr: string) => string>;
154
157
  };
155
- type AppDefinitionData = CommonDefinitionData;
158
+ type AppDefinitionData = CommonDefinitionData & {
159
+ _httpPrefix?: string;
160
+ };
156
161
 
157
162
  /**
158
163
  * Used to refer to an already-installed component.
@@ -204,6 +209,7 @@ function use<Definition extends ComponentDefinition<any>>(
204
209
  definition: Definition,
205
210
  options?: {
206
211
  name?: string;
212
+ httpPrefix?: string;
207
213
  },
208
214
  ): InstalledComponent<Definition> {
209
215
  // At runtime an imported component will have this shape.
@@ -232,7 +238,21 @@ function use<Definition extends ComponentDefinition<any>>(
232
238
  throw new Error("Component name cannot be empty.");
233
239
  }
234
240
 
235
- this._childComponents.push([name, importedComponentDefinition, {}]);
241
+ const httpPrefix = options?.httpPrefix;
242
+ if (httpPrefix !== undefined) {
243
+ if (!httpPrefix.startsWith("/")) {
244
+ throw new Error(
245
+ `httpPrefix must start with "/". Received: "${httpPrefix}"`,
246
+ );
247
+ }
248
+ }
249
+
250
+ this._childComponents.push([
251
+ name,
252
+ importedComponentDefinition,
253
+ {},
254
+ httpPrefix,
255
+ ]);
236
256
  return new InstalledComponent(definition, name);
237
257
  }
238
258
 
@@ -255,10 +275,14 @@ function exportAppForAnalysis(
255
275
  ): AppDefinitionAnalysis {
256
276
  const definitionType = { type: "app" as const };
257
277
  const childComponents = serializeChildComponents(this._childComponents);
278
+ const httpMounts = buildHttpMounts(this._childComponents);
258
279
  return {
259
280
  definitionType,
281
+ ...(this._httpPrefix !== undefined
282
+ ? { httpPrefix: normalizeHttpPrefix(this._httpPrefix) }
283
+ : {}),
260
284
  childComponents: childComponents as any,
261
- httpMounts: {},
285
+ httpMounts,
262
286
  exports: serializeExportTree(this._exportTree),
263
287
  };
264
288
  }
@@ -277,11 +301,35 @@ function serializeExportTree(tree: ExportTree): any {
277
301
  return { type: "branch", branch };
278
302
  }
279
303
 
304
+ function normalizeHttpPrefix(prefix: string): string {
305
+ // Ensure the prefix ends with "/" as required by HttpMountPath in Rust.
306
+ return prefix.endsWith("/") ? prefix : prefix + "/";
307
+ }
308
+
309
+ function buildHttpMounts(
310
+ childComponents: [
311
+ string,
312
+ ImportedComponentDefinition,
313
+ Record<string, any> | null,
314
+ string | undefined,
315
+ ][],
316
+ ): Record<string, string> {
317
+ const httpMounts: Record<string, string> = {};
318
+ for (const [name, , , httpPrefix] of childComponents) {
319
+ if (httpPrefix !== undefined) {
320
+ const normalized = normalizeHttpPrefix(httpPrefix);
321
+ httpMounts[normalized] = `_reference/childComponent/${name}`;
322
+ }
323
+ }
324
+ return httpMounts;
325
+ }
326
+
280
327
  function serializeChildComponents(
281
328
  childComponents: [
282
329
  string,
283
330
  ImportedComponentDefinition,
284
331
  Record<string, any> | null,
332
+ string | undefined,
285
333
  ][],
286
334
  ): {
287
335
  name: string;
@@ -289,6 +337,7 @@ function serializeChildComponents(
289
337
  args: [string, { type: "value"; value: string }][] | null;
290
338
  }[] {
291
339
  return childComponents.map(([name, definition, p]) => {
340
+ // Note: httpPrefix (4th element) is used separately in buildHttpMounts()
292
341
  let args: [string, { type: "value"; value: string }][] | null = null;
293
342
  if (p !== null) {
294
343
  args = [];
@@ -335,11 +384,12 @@ function exportComponentForAnalysis(
335
384
  args,
336
385
  };
337
386
  const childComponents = serializeChildComponents(this._childComponents);
387
+ const httpMounts = buildHttpMounts(this._childComponents);
338
388
  return {
339
389
  name: this._name,
340
390
  definitionType,
341
391
  childComponents: childComponents as any,
342
- httpMounts: {},
392
+ httpMounts,
343
393
  exports: serializeExportTree(this._exportTree),
344
394
  };
345
395
  }
@@ -394,11 +444,18 @@ export function defineComponent<Exports extends ComponentExports = any>(
394
444
  * This is a feature of components, which are in beta.
395
445
  * This API is unstable and may change in subsequent releases.
396
446
  */
397
- export function defineApp(): AppDefinition {
447
+ export function defineApp(options?: { httpPrefix?: string }): AppDefinition {
448
+ const httpPrefix = options?.httpPrefix;
449
+ if (httpPrefix !== undefined && !httpPrefix.startsWith("/")) {
450
+ throw new Error(
451
+ `httpPrefix must start with "/". Received: "${httpPrefix}"`,
452
+ );
453
+ }
398
454
  const ret: RuntimeAppDefinition = {
399
455
  _isRoot: true,
400
456
  _childComponents: [],
401
457
  _exportTree: {},
458
+ ...(httpPrefix !== undefined ? { _httpPrefix: httpPrefix } : {}),
402
459
 
403
460
  export: exportAppForAnalysis,
404
461
  use,
@@ -1,4 +1,5 @@
1
1
  import { Value } from "../values/index.js";
2
+ import type { SystemIndexes } from "./system_fields.js";
2
3
 
3
4
  // Document Types /////////////////////////////////////////////////////////////
4
5
 
@@ -262,7 +263,7 @@ export type AnyDataModel = {
262
263
  [tableName: string]: {
263
264
  document: any;
264
265
  fieldPaths: GenericFieldPaths;
265
- indexes: {};
266
+ indexes: SystemIndexes;
266
267
  searchIndexes: {};
267
268
  vectorIndexes: {};
268
269
  };
@@ -0,0 +1,74 @@
1
+ import { jsonToConvex } from "../../values/index.js";
2
+ import {
3
+ ActionMeta,
4
+ MutationMeta,
5
+ QueryMeta,
6
+ FunctionMetadata,
7
+ TransactionMetrics,
8
+ } from "../meta.js";
9
+ import { performAsyncSyscall } from "./syscall.js";
10
+
11
+ async function getTransactionMetrics(): Promise<TransactionMetrics> {
12
+ let syscallJSON;
13
+ try {
14
+ syscallJSON = await performAsyncSyscall("1.0/getTransactionMetrics", {});
15
+ } catch (e: any) {
16
+ if (e.message?.includes("Unknown async operation")) {
17
+ throw new Error(
18
+ "getTransactionMetrics() can only be called from a query or mutation. " +
19
+ "It is not available in actions or outside of a Convex function.",
20
+ );
21
+ }
22
+ throw e;
23
+ }
24
+ return jsonToConvex(syscallJSON) as any;
25
+ }
26
+
27
+ async function getFunctionMetadata(): Promise<{
28
+ name: string;
29
+ componentPath: string;
30
+ }> {
31
+ const { name, componentPath } = await performAsyncSyscall(
32
+ "1.0/getFunctionMetadata",
33
+ {},
34
+ );
35
+ return { name, componentPath };
36
+ }
37
+
38
+ export function setupQueryMeta(
39
+ visibility: FunctionMetadata["visibility"],
40
+ ): QueryMeta {
41
+ return {
42
+ getFunctionMetadata: async () => ({
43
+ ...(await getFunctionMetadata()),
44
+ type: "query",
45
+ visibility,
46
+ }),
47
+ getTransactionMetrics,
48
+ };
49
+ }
50
+
51
+ export function setupMutationMeta(
52
+ visibility: FunctionMetadata["visibility"],
53
+ ): MutationMeta {
54
+ return {
55
+ getFunctionMetadata: async () => ({
56
+ ...(await getFunctionMetadata()),
57
+ type: "mutation",
58
+ visibility,
59
+ }),
60
+ getTransactionMetrics,
61
+ };
62
+ }
63
+
64
+ export function setupActionMeta(
65
+ visibility: FunctionMetadata["visibility"],
66
+ ): ActionMeta {
67
+ return {
68
+ getFunctionMetadata: async () => ({
69
+ ...(await getFunctionMetadata()),
70
+ type: "action",
71
+ visibility,
72
+ }),
73
+ };
74
+ }
@@ -11,6 +11,7 @@ import { GenericDataModel } from "../data_model.js";
11
11
  import {
12
12
  ActionBuilder,
13
13
  DefaultFunctionArgs,
14
+ FunctionVisibility,
14
15
  GenericActionCtx,
15
16
  GenericMutationCtx,
16
17
  GenericQueryCtx,
@@ -39,10 +40,15 @@ import { parseArgs } from "../../common/index.js";
39
40
  import { performAsyncSyscall } from "./syscall.js";
40
41
  import { asObjectValidator } from "../../values/validator.js";
41
42
  import { getFunctionAddress } from "../components/paths.js";
43
+ import {
44
+ setupQueryMeta,
45
+ setupMutationMeta,
46
+ setupActionMeta,
47
+ } from "./meta_impl.js";
42
48
 
43
49
  async function invokeMutation<
44
50
  F extends (ctx: GenericMutationCtx<GenericDataModel>, ...args: any) => any,
45
- >(func: F, argsStr: string) {
51
+ >(func: F, argsStr: string, visibility: FunctionVisibility) {
46
52
  // TODO(presley): Change the function signature and propagate the requestId from Rust.
47
53
  // Ok, to mock it out for now, since queries are only running in V8.
48
54
  const requestId = "";
@@ -52,6 +58,7 @@ async function invokeMutation<
52
58
  auth: setupAuth(requestId),
53
59
  storage: setupStorageWriter(requestId),
54
60
  scheduler: setupMutationScheduler(),
61
+ meta: setupMutationMeta(visibility),
55
62
 
56
63
  runQuery: (reference: any, args?: any) => runUdf("query", reference, args),
57
64
  runMutation: (reference: any, args?: any) =>
@@ -247,7 +254,7 @@ export const mutationGeneric: MutationBuilder<any, "public"> = ((
247
254
  assertNotBrowser();
248
255
  func.isMutation = true;
249
256
  func.isPublic = true;
250
- func.invokeMutation = (argsStr) => invokeMutation(handler, argsStr);
257
+ func.invokeMutation = (argsStr) => invokeMutation(handler, argsStr, "public");
251
258
  func.exportArgs = exportArgs(functionDefinition);
252
259
  func.exportReturns = exportReturns(functionDefinition);
253
260
  func._handler = handler;
@@ -308,7 +315,8 @@ export const internalMutationGeneric: MutationBuilder<any, "internal"> = ((
308
315
  assertNotBrowser();
309
316
  func.isMutation = true;
310
317
  func.isInternal = true;
311
- func.invokeMutation = (argsStr) => invokeMutation(handler, argsStr);
318
+ func.invokeMutation = (argsStr) =>
319
+ invokeMutation(handler, argsStr, "internal");
312
320
  func.exportArgs = exportArgs(functionDefinition);
313
321
  func.exportReturns = exportReturns(functionDefinition);
314
322
  func._handler = handler;
@@ -317,7 +325,7 @@ export const internalMutationGeneric: MutationBuilder<any, "internal"> = ((
317
325
 
318
326
  async function invokeQuery<
319
327
  F extends (ctx: GenericQueryCtx<GenericDataModel>, ...args: any) => any,
320
- >(func: F, argsStr: string) {
328
+ >(func: F, argsStr: string, visibility: FunctionVisibility) {
321
329
  // TODO(presley): Change the function signature and propagate the requestId from Rust.
322
330
  // Ok, to mock it out for now, since queries are only running in V8.
323
331
  const requestId = "";
@@ -326,6 +334,7 @@ async function invokeQuery<
326
334
  db: setupReader(),
327
335
  auth: setupAuth(requestId),
328
336
  storage: setupStorageReader(requestId),
337
+ meta: setupQueryMeta(visibility),
329
338
  runQuery: (reference: any, args?: any) => runUdf("query", reference, args),
330
339
  };
331
340
  const result = await invokeFunction(func, queryCtx, args as any);
@@ -403,7 +412,7 @@ export const queryGeneric: QueryBuilder<any, "public"> = ((
403
412
  assertNotBrowser();
404
413
  func.isQuery = true;
405
414
  func.isPublic = true;
406
- func.invokeQuery = (argsStr) => invokeQuery(handler, argsStr);
415
+ func.invokeQuery = (argsStr) => invokeQuery(handler, argsStr, "public");
407
416
  func.exportArgs = exportArgs(functionDefinition);
408
417
  func.exportReturns = exportReturns(functionDefinition);
409
418
  func._handler = handler;
@@ -470,7 +479,8 @@ export const internalQueryGeneric: QueryBuilder<any, "internal"> = ((
470
479
  assertNotBrowser();
471
480
  func.isQuery = true;
472
481
  func.isInternal = true;
473
- func.invokeQuery = (argsStr) => invokeQuery(handler as any, argsStr);
482
+ func.invokeQuery = (argsStr) =>
483
+ invokeQuery(handler as any, argsStr, "internal");
474
484
  func.exportArgs = exportArgs(functionDefinition);
475
485
  func.exportReturns = exportReturns(functionDefinition);
476
486
  func._handler = handler;
@@ -479,7 +489,7 @@ export const internalQueryGeneric: QueryBuilder<any, "internal"> = ((
479
489
 
480
490
  async function invokeAction<
481
491
  F extends (ctx: GenericActionCtx<GenericDataModel>, ...args: any) => any,
482
- >(func: F, requestId: string, argsStr: string) {
492
+ >(func: F, requestId: string, argsStr: string, visibility: FunctionVisibility) {
483
493
  const args = jsonToConvex(JSON.parse(argsStr));
484
494
  const calls = setupActionCalls(requestId);
485
495
  const ctx = {
@@ -488,6 +498,7 @@ async function invokeAction<
488
498
  scheduler: setupActionScheduler(requestId),
489
499
  storage: setupStorageActionWriter(requestId),
490
500
  vectorSearch: setupActionVectorSearch(requestId) as any,
501
+ meta: setupActionMeta(visibility),
491
502
  };
492
503
  const result = await invokeFunction(func, ctx, args as any);
493
504
  return JSON.stringify(convexToJson(result === undefined ? null : result));
@@ -577,7 +588,7 @@ export const actionGeneric: ActionBuilder<any, "public"> = ((
577
588
  func.isAction = true;
578
589
  func.isPublic = true;
579
590
  func.invokeAction = (requestId, argsStr) =>
580
- invokeAction(handler, requestId, argsStr);
591
+ invokeAction(handler, requestId, argsStr, "public");
581
592
  func.exportArgs = exportArgs(functionDefinition);
582
593
  func.exportReturns = exportReturns(functionDefinition);
583
594
  func._handler = handler;
@@ -650,7 +661,7 @@ export const internalActionGeneric: ActionBuilder<any, "internal"> = ((
650
661
  func.isAction = true;
651
662
  func.isInternal = true;
652
663
  func.invokeAction = (requestId, argsStr) =>
653
- invokeAction(handler, requestId, argsStr);
664
+ invokeAction(handler, requestId, argsStr, "internal");
654
665
  func.exportArgs = exportArgs(functionDefinition);
655
666
  func.exportReturns = exportReturns(functionDefinition);
656
667
  func._handler = handler;
@@ -670,6 +681,7 @@ async function invokeHttpAction<
670
681
  storage: setupStorageActionWriter(requestId),
671
682
  scheduler: setupActionScheduler(requestId),
672
683
  vectorSearch: setupActionVectorSearch(requestId) as any,
684
+ meta: setupActionMeta("public"),
673
685
  };
674
686
  return await invokeFunction(func, ctx, [request]);
675
687
  }
@@ -103,6 +103,14 @@ export {
103
103
  internalMutationGeneric,
104
104
  internalQueryGeneric,
105
105
  } from "./impl/registration_impl.js";
106
+ export type {
107
+ TransactionMetric,
108
+ TransactionMetrics,
109
+ FunctionMetadata,
110
+ QueryMeta,
111
+ MutationMeta,
112
+ ActionMeta,
113
+ } from "./meta.js";
106
114
  export type { IndexRange, IndexRangeBuilder } from "./index_range_builder.js";
107
115
  export * from "./pagination.js";
108
116
  export type { OrderedQuery, Query, QueryInitializer } from "./query.js";
@@ -0,0 +1,76 @@
1
+ import { FunctionType } from "./api.js";
2
+ import { FunctionVisibility } from "./registration.js";
3
+
4
+ /**
5
+ * Used and remaining amounts for a single transaction limit.
6
+ *
7
+ * @public
8
+ */
9
+ export type TransactionMetric = {
10
+ used: number;
11
+ remaining: number;
12
+ };
13
+
14
+ /**
15
+ * The remaining headroom for a transaction before hitting limits.
16
+ *
17
+ * See https://docs.convex.dev/production/state/limits
18
+ *
19
+ * @public
20
+ */
21
+ export type TransactionMetrics = {
22
+ bytesRead: TransactionMetric;
23
+ bytesWritten: TransactionMetric;
24
+ databaseQueries: TransactionMetric;
25
+ documentsRead: TransactionMetric;
26
+ documentsWritten: TransactionMetric;
27
+ functionsScheduled: TransactionMetric;
28
+ scheduledFunctionArgsBytes: TransactionMetric;
29
+ };
30
+
31
+ /**
32
+ * Metadata about the currently executing Convex function.
33
+ *
34
+ * @public
35
+ */
36
+ export type FunctionMetadata = {
37
+ /**
38
+ * The name of the function, in the format `"path/to/module:functionName"`
39
+ */
40
+ name: string;
41
+ /**
42
+ * The path of the component this function belongs to.
43
+ * This is an empty string `""` for the app.
44
+ */
45
+ componentPath: string;
46
+ /** Whether it's a query, mutation, or action. */
47
+ type: FunctionType;
48
+ /** Whether the function is public or internal. */
49
+ visibility: FunctionVisibility;
50
+ };
51
+
52
+ /**
53
+ * Extra context available in Convex query functions.
54
+ *
55
+ * @public
56
+ */
57
+ export interface QueryMeta {
58
+ getFunctionMetadata(): Promise<FunctionMetadata>;
59
+ getTransactionMetrics(): Promise<TransactionMetrics>;
60
+ }
61
+
62
+ /**
63
+ * Extra context available in Convex mutation functions.
64
+ *
65
+ * @public
66
+ */
67
+ export interface MutationMeta extends QueryMeta {}
68
+
69
+ /**
70
+ * Extra context available in Convex action functions.
71
+ *
72
+ * @public
73
+ */
74
+ export interface ActionMeta {
75
+ getFunctionMetadata(): Promise<FunctionMetadata>;
76
+ }
@@ -8,6 +8,7 @@ import {
8
8
  StorageReader,
9
9
  StorageWriter,
10
10
  } from "./index.js";
11
+ import { ActionMeta, MutationMeta, QueryMeta } from "./meta.js";
11
12
  import {
12
13
  FunctionReference,
13
14
  FunctionReturnType,
@@ -147,6 +148,9 @@ export interface GenericMutationCtx<DataModel extends GenericDataModel> {
147
148
  mutation: Mutation,
148
149
  ...args: OptionalRestArgs<Mutation>
149
150
  ) => Promise<FunctionReturnType<Mutation>>;
151
+
152
+ /** @internal */
153
+ meta: MutationMeta;
150
154
  }
151
155
 
152
156
  /**
@@ -238,6 +242,9 @@ export interface GenericQueryCtx<DataModel extends GenericDataModel> {
238
242
  query: Query,
239
243
  ...args: OptionalRestArgs<Query>
240
244
  ) => Promise<FunctionReturnType<Query>>;
245
+
246
+ /** @internal */
247
+ meta: QueryMeta;
241
248
  }
242
249
 
243
250
  /**
@@ -398,6 +405,9 @@ export interface GenericActionCtx<DataModel extends GenericDataModel> {
398
405
  VectorSearchQuery<NamedTableInfo<DataModel, TableName>, IndexName>
399
406
  >,
400
407
  ): Promise<Array<{ _id: Id<TableName>; _score: number }>>;
408
+
409
+ /** @internal */
410
+ meta: ActionMeta;
401
411
  }
402
412
 
403
413
  /**
@@ -7,8 +7,16 @@ import {
7
7
  defineSchema,
8
8
  defineTable,
9
9
  DataModelFromSchemaDefinition,
10
+ GenericSchema,
11
+ SchemaDefinition,
10
12
  } from "./schema.js";
11
13
  import { v, Infer } from "../values/validator.js";
14
+ import {
15
+ AnyDataModel,
16
+ GenericDataModel,
17
+ IndexNames,
18
+ NamedTableInfo,
19
+ } from "./data_model.js";
12
20
 
13
21
  describe("DataModelFromSchemaDefinition", () => {
14
22
  test("defineSchema produces the correct data model for basic types", () => {
@@ -405,7 +413,7 @@ describe("DataModelFromSchemaDefinition", () => {
405
413
  [tableName: string]: {
406
414
  document: any;
407
415
  fieldPaths: string;
408
- indexes: {};
416
+ indexes: SystemIndexes;
409
417
  searchIndexes: {};
410
418
  vectorIndexes: {};
411
419
  };
@@ -890,6 +898,75 @@ describe("defineSchema/defineTable expose table validators", () => {
890
898
  });
891
899
  });
892
900
 
901
+ describe("GenericSchema assignability", () => {
902
+ test("DataModelFromSchemaDefinition<GenericSchema> extends GenericDataModel", () => {
903
+ type GenericDM = DataModelFromSchemaDefinition<
904
+ SchemaDefinition<GenericSchema, boolean>
905
+ >;
906
+ type _check = GenericDM extends GenericDataModel ? true : false;
907
+ assert<Equals<_check, true>>();
908
+ });
909
+
910
+ test("a specific schema’s DataModel extends GenericDataModel", () => {
911
+ const specificSchema = defineSchema({
912
+ users: defineTable({ name: v.string() }).index("by_name", ["name"]),
913
+ });
914
+ type SpecificDM = DataModelFromSchemaDefinition<typeof specificSchema>;
915
+
916
+ // This is the key assignability check: specific DataModels must extend
917
+ // GenericDataModel so that generic code can accept any schema.
918
+ type _check = SpecificDM extends GenericDataModel ? true : false;
919
+ assert<Equals<_check, true>>();
920
+ });
921
+
922
+ test("SchemaDefinition<SpecificSchema> extends SchemaDefinition<GenericSchema, boolean>", () => {
923
+ const specificSchema = defineSchema({
924
+ messages: defineTable({ body: v.string() }),
925
+ });
926
+ type SpecificSD = typeof specificSchema;
927
+ type GenericSD = SchemaDefinition<GenericSchema, boolean>;
928
+
929
+ type _check = SpecificSD extends GenericSD ? true : false;
930
+ assert<Equals<_check, true>>();
931
+ });
932
+
933
+ test("specific DM from boolean-strict schema extends generic DM", () => {
934
+ // This mirrors the convexTest() return type: Schema is specific, but
935
+ // StrictTableNameTypes is widened to boolean.
936
+ const specificSchema = defineSchema({
937
+ users: defineTable({ name: v.string() }).index("by_name", ["name"]),
938
+ });
939
+ type SpecificDM = DataModelFromSchemaDefinition<
940
+ SchemaDefinition<(typeof specificSchema)["tables"], boolean>
941
+ >;
942
+ type GenericDM = DataModelFromSchemaDefinition<
943
+ SchemaDefinition<GenericSchema, boolean>
944
+ >;
945
+
946
+ // The specific DM must extend the generic DM for TestConvex covariance.
947
+ type _check = SpecificDM extends GenericDM ? true : false;
948
+ assert<Equals<_check, true>>();
949
+ });
950
+
951
+ test("AnyDataModel exposes system indexes", () => {
952
+ // AnyDataModel is used as the DataModel when no schema is defined.
953
+ // Verify that system indexes (by_id, by_creation_time) are available,
954
+ // since every table always has them.
955
+ type AnyTable = NamedTableInfo<AnyDataModel, string>;
956
+ type AnyIndexNames = IndexNames<AnyTable>;
957
+ type _check = "by_id" | "by_creation_time" extends AnyIndexNames
958
+ ? true
959
+ : false;
960
+ assert<Equals<_check, true>>();
961
+ });
962
+
963
+ // SpecificDM extends GenericDM because:
964
+ // 1. GenericSchema uses TableDefinition defaults (Validator<any,any,any>)
965
+ // producing document: any and fieldPaths: any
966
+ // 2. AnyDataModel includes SystemIndexes, so the loose variant's index
967
+ // signature satisfies GenericDM's SystemIndexes requirement
968
+ });
969
+
893
970
  test("defineTable fails if it can’t export the validator", () => {
894
971
  const table = defineTable(
895
972
  // @ts-expect-error