convex 1.34.0 → 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 (607) hide show
  1. package/CHANGELOG.md +98 -43
  2. package/dist/browser.bundle.js +13 -10
  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/browser/sync/authentication_manager.js +4 -1
  9. package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
  10. package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
  11. package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
  12. package/dist/cjs/cli/aiFiles.js +39 -20
  13. package/dist/cjs/cli/aiFiles.js.map +3 -3
  14. package/dist/cjs/cli/codegen_templates/readme.js +14 -1
  15. package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
  16. package/dist/cjs/cli/configure.js +34 -32
  17. package/dist/cjs/cli/configure.js.map +2 -2
  18. package/dist/cjs/cli/deploy.js +7 -8
  19. package/dist/cjs/cli/deploy.js.map +2 -2
  20. package/dist/cjs/cli/deploymentCreate.js +225 -40
  21. package/dist/cjs/cli/deploymentCreate.js.map +3 -3
  22. package/dist/cjs/cli/deploymentSelect.js +14 -13
  23. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  24. package/dist/cjs/cli/dev.js +30 -11
  25. package/dist/cjs/cli/dev.js.map +2 -2
  26. package/dist/cjs/cli/docs.js +1 -1
  27. package/dist/cjs/cli/docs.js.map +2 -2
  28. package/dist/cjs/cli/init.js +1 -1
  29. package/dist/cjs/cli/init.js.map +2 -2
  30. package/dist/cjs/cli/lib/aiFiles/agentsmd.js +73 -0
  31. package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
  32. package/dist/cjs/cli/lib/aiFiles/claudemd.js +73 -0
  33. package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
  34. package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
  35. package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
  36. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +58 -0
  37. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
  38. package/dist/cjs/cli/lib/aiFiles/index.js +215 -0
  39. package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
  40. package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
  41. package/dist/cjs/cli/lib/aiFiles/skills.js +196 -0
  42. package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
  43. package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
  44. package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
  45. package/dist/cjs/cli/lib/aiFiles/status.js +198 -0
  46. package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
  47. package/dist/cjs/cli/lib/aiFiles/utils.js +128 -0
  48. package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
  49. package/dist/cjs/cli/lib/api.js +70 -7
  50. package/dist/cjs/cli/lib/api.js.map +2 -2
  51. package/dist/cjs/cli/lib/command.js +10 -6
  52. package/dist/cjs/cli/lib/command.js.map +2 -2
  53. package/dist/cjs/cli/lib/config.js +43 -7
  54. package/dist/cjs/cli/lib/config.js.map +3 -3
  55. package/dist/cjs/cli/lib/deploy2.js +9 -26
  56. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  57. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
  58. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  59. package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
  60. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  61. package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
  62. package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
  63. package/dist/cjs/cli/lib/dev.js +162 -117
  64. package/dist/cjs/cli/lib/dev.js.map +2 -2
  65. package/dist/cjs/cli/lib/env.js +1 -13
  66. package/dist/cjs/cli/lib/env.js.map +2 -2
  67. package/dist/cjs/cli/lib/expiration.js +104 -0
  68. package/dist/cjs/cli/lib/expiration.js.map +7 -0
  69. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  70. package/dist/cjs/cli/lib/init.js +4 -3
  71. package/dist/cjs/cli/lib/init.js.map +2 -2
  72. package/dist/cjs/cli/lib/insights.js +1 -1
  73. package/dist/cjs/cli/lib/insights.js.map +2 -2
  74. package/dist/cjs/cli/lib/localDeployment/anonymous.js +15 -8
  75. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  76. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
  77. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
  78. package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
  79. package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
  80. package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
  81. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
  82. package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
  83. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  84. package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
  85. package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
  86. package/dist/cjs/cli/lib/updates.js +12 -13
  87. package/dist/cjs/cli/lib/updates.js.map +2 -2
  88. package/dist/cjs/cli/lib/usage.js +2 -1
  89. package/dist/cjs/cli/lib/usage.js.map +2 -2
  90. package/dist/cjs/cli/lib/utils/prompts.js +2 -1
  91. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  92. package/dist/cjs/cli/lib/utils/utils.js +46 -20
  93. package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
  94. package/dist/cjs/cli/lib/versionApi.js +7 -4
  95. package/dist/cjs/cli/lib/versionApi.js.map +2 -2
  96. package/dist/cjs/cli/lib/workos/workos.js +4 -6
  97. package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
  98. package/dist/cjs/index.js +1 -1
  99. package/dist/cjs/index.js.map +1 -1
  100. package/dist/cjs/react/client.js +43 -6
  101. package/dist/cjs/react/client.js.map +2 -2
  102. package/dist/cjs/react/index.js +2 -0
  103. package/dist/cjs/react/index.js.map +2 -2
  104. package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  105. package/dist/cjs/server/api.js.map +2 -2
  106. package/dist/cjs/server/components/definition.js.map +1 -1
  107. package/dist/cjs/server/components/index.js +40 -4
  108. package/dist/cjs/server/components/index.js.map +2 -2
  109. package/dist/cjs/server/data_model.js.map +1 -1
  110. package/dist/cjs/server/impl/meta_impl.js +78 -0
  111. package/dist/cjs/server/impl/meta_impl.js.map +7 -0
  112. package/dist/cjs/server/impl/registration_impl.js +16 -11
  113. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  114. package/dist/cjs/server/index.js.map +2 -2
  115. package/dist/cjs/server/meta.js +17 -0
  116. package/dist/cjs/server/meta.js.map +7 -0
  117. package/dist/cjs/server/registration.js.map +1 -1
  118. package/dist/cjs-types/browser/index.d.ts +1 -0
  119. package/dist/cjs-types/browser/index.d.ts.map +1 -1
  120. package/dist/cjs-types/browser/query_options.d.ts +12 -9
  121. package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
  122. package/dist/cjs-types/browser/sync/authentication_manager.d.ts.map +1 -1
  123. package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  124. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
  126. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/configure.test.d.ts +2 -0
  128. package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
  129. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  130. package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
  131. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  132. package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
  133. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  134. package/dist/cjs-types/cli/dev.d.ts +3 -1
  135. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  136. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
  137. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
  138. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
  139. package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
  140. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
  141. package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
  142. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
  143. package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
  144. package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
  145. package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
  146. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
  147. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
  148. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
  149. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
  150. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +42 -0
  151. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
  152. package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
  153. package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
  154. package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
  155. package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
  156. package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
  157. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +20 -0
  158. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
  159. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
  160. package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  161. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  162. package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  163. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +6 -0
  164. package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
  165. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +56 -0
  166. package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
  167. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  168. package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  169. package/dist/cjs-types/cli/lib/api.d.ts +3 -3
  170. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  171. package/dist/cjs-types/cli/lib/command.d.ts +2 -1
  172. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  173. package/dist/cjs-types/cli/lib/config.d.ts +18 -6
  174. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  175. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
  176. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  177. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  178. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  179. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  180. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
  181. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
  182. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  183. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  184. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
  185. package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  186. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  187. package/dist/cjs-types/cli/lib/env.d.ts +0 -4
  188. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  189. package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
  190. package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
  191. package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
  192. package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
  193. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  194. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  195. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  196. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  197. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  198. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
  199. package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  200. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  201. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
  202. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  203. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
  204. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  205. package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
  206. package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
  207. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  208. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  209. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  210. package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
  211. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  212. package/dist/cjs-types/cli/lib/versionApi.d.ts +7 -1
  213. package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
  214. package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
  215. package/dist/cjs-types/index.d.ts +1 -1
  216. package/dist/cjs-types/react/client.d.ts +54 -2
  217. package/dist/cjs-types/react/client.d.ts.map +1 -1
  218. package/dist/cjs-types/react/index.d.ts +7 -2
  219. package/dist/cjs-types/react/index.d.ts.map +1 -1
  220. package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
  221. package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
  222. package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
  223. package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
  224. package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  225. package/dist/cjs-types/server/api.d.ts +5 -1
  226. package/dist/cjs-types/server/api.d.ts.map +1 -1
  227. package/dist/cjs-types/server/components/definition.d.ts +1 -0
  228. package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
  229. package/dist/cjs-types/server/components/index.d.ts +5 -1
  230. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  231. package/dist/cjs-types/server/data_model.d.ts +2 -1
  232. package/dist/cjs-types/server/data_model.d.ts.map +1 -1
  233. package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
  234. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
  235. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  236. package/dist/cjs-types/server/index.d.ts +1 -0
  237. package/dist/cjs-types/server/index.d.ts.map +1 -1
  238. package/dist/cjs-types/server/meta.d.ts +72 -0
  239. package/dist/cjs-types/server/meta.d.ts.map +1 -0
  240. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  241. package/dist/cli.bundle.cjs +2446 -1933
  242. package/dist/cli.bundle.cjs.map +4 -4
  243. package/dist/esm/browser/index-node.js +1 -0
  244. package/dist/esm/browser/index.js +1 -0
  245. package/dist/esm/browser/index.js.map +2 -2
  246. package/dist/esm/browser/query_options.js.map +2 -2
  247. package/dist/esm/browser/sync/authentication_manager.js +4 -1
  248. package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
  249. package/dist/esm/browser/sync/web_socket_manager.js +1 -7
  250. package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
  251. package/dist/esm/cli/aiFiles.js +41 -23
  252. package/dist/esm/cli/aiFiles.js.map +2 -2
  253. package/dist/esm/cli/codegen_templates/readme.js +14 -1
  254. package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
  255. package/dist/esm/cli/configure.js +35 -33
  256. package/dist/esm/cli/configure.js.map +2 -2
  257. package/dist/esm/cli/deploy.js +11 -10
  258. package/dist/esm/cli/deploy.js.map +2 -2
  259. package/dist/esm/cli/deploymentCreate.js +238 -42
  260. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  261. package/dist/esm/cli/deploymentSelect.js +13 -12
  262. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  263. package/dist/esm/cli/dev.js +34 -13
  264. package/dist/esm/cli/dev.js.map +2 -2
  265. package/dist/esm/cli/docs.js +1 -1
  266. package/dist/esm/cli/docs.js.map +2 -2
  267. package/dist/esm/cli/init.js +2 -2
  268. package/dist/esm/cli/init.js.map +2 -2
  269. package/dist/esm/cli/lib/aiFiles/agentsmd.js +56 -0
  270. package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
  271. package/dist/esm/cli/lib/aiFiles/claudemd.js +56 -0
  272. package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
  273. package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
  274. package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
  275. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +35 -0
  276. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
  277. package/dist/esm/cli/lib/aiFiles/index.js +193 -0
  278. package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
  279. package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
  280. package/dist/esm/cli/lib/aiFiles/skills.js +163 -0
  281. package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
  282. package/dist/esm/cli/lib/aiFiles/state.js +60 -0
  283. package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
  284. package/dist/esm/cli/lib/aiFiles/status.js +178 -0
  285. package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
  286. package/dist/esm/cli/lib/aiFiles/utils.js +97 -0
  287. package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
  288. package/dist/esm/cli/lib/api.js +70 -7
  289. package/dist/esm/cli/lib/api.js.map +2 -2
  290. package/dist/esm/cli/lib/command.js +10 -6
  291. package/dist/esm/cli/lib/command.js.map +2 -2
  292. package/dist/esm/cli/lib/config.js +41 -6
  293. package/dist/esm/cli/lib/config.js.map +2 -2
  294. package/dist/esm/cli/lib/deploy2.js +13 -26
  295. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  296. package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
  297. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  298. package/dist/esm/cli/lib/deploymentSelection.js +46 -2
  299. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  300. package/dist/esm/cli/lib/deploymentSelector.js +1 -0
  301. package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
  302. package/dist/esm/cli/lib/dev.js +162 -118
  303. package/dist/esm/cli/lib/dev.js.map +2 -2
  304. package/dist/esm/cli/lib/env.js +0 -11
  305. package/dist/esm/cli/lib/env.js.map +2 -2
  306. package/dist/esm/cli/lib/expiration.js +80 -0
  307. package/dist/esm/cli/lib/expiration.js.map +7 -0
  308. package/dist/esm/cli/lib/init.js +4 -3
  309. package/dist/esm/cli/lib/init.js.map +2 -2
  310. package/dist/esm/cli/lib/insights.js +1 -1
  311. package/dist/esm/cli/lib/insights.js.map +2 -2
  312. package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
  313. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  314. package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
  315. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
  316. package/dist/esm/cli/lib/localDeployment/run.js +1 -1
  317. package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
  318. package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
  319. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
  320. package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
  321. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  322. package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
  323. package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
  324. package/dist/esm/cli/lib/updates.js +14 -12
  325. package/dist/esm/cli/lib/updates.js.map +2 -2
  326. package/dist/esm/cli/lib/usage.js +2 -1
  327. package/dist/esm/cli/lib/usage.js.map +2 -2
  328. package/dist/esm/cli/lib/utils/prompts.js +2 -1
  329. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  330. package/dist/esm/cli/lib/utils/utils.js +45 -20
  331. package/dist/esm/cli/lib/utils/utils.js.map +3 -3
  332. package/dist/esm/cli/lib/versionApi.js +7 -4
  333. package/dist/esm/cli/lib/versionApi.js.map +2 -2
  334. package/dist/esm/cli/lib/workos/workos.js +4 -6
  335. package/dist/esm/cli/lib/workos/workos.js.map +2 -2
  336. package/dist/esm/index.js +1 -1
  337. package/dist/esm/index.js.map +1 -1
  338. package/dist/esm/react/client.js +43 -6
  339. package/dist/esm/react/client.js.map +2 -2
  340. package/dist/esm/react/index.js +1 -0
  341. package/dist/esm/react/index.js.map +2 -2
  342. package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
  343. package/dist/esm/server/api.js.map +2 -2
  344. package/dist/esm/server/components/index.js +40 -4
  345. package/dist/esm/server/components/index.js.map +2 -2
  346. package/dist/esm/server/impl/meta_impl.js +54 -0
  347. package/dist/esm/server/impl/meta_impl.js.map +7 -0
  348. package/dist/esm/server/impl/registration_impl.js +20 -11
  349. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  350. package/dist/esm/server/index.js.map +2 -2
  351. package/dist/esm/server/meta.js +2 -0
  352. package/dist/esm/server/meta.js.map +7 -0
  353. package/dist/esm-types/browser/index.d.ts +1 -0
  354. package/dist/esm-types/browser/index.d.ts.map +1 -1
  355. package/dist/esm-types/browser/query_options.d.ts +12 -9
  356. package/dist/esm-types/browser/query_options.d.ts.map +1 -1
  357. package/dist/esm-types/browser/sync/authentication_manager.d.ts.map +1 -1
  358. package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
  359. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  360. package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
  361. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  362. package/dist/esm-types/cli/configure.test.d.ts +2 -0
  363. package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
  364. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  365. package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
  366. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  367. package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
  368. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  369. package/dist/esm-types/cli/dev.d.ts +3 -1
  370. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  371. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
  372. package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
  373. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
  374. package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
  375. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
  376. package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
  377. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
  378. package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
  379. package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
  380. package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
  381. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
  382. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
  383. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
  384. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
  385. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +42 -0
  386. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
  387. package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
  388. package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
  389. package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
  390. package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
  391. package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
  392. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +20 -0
  393. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
  394. package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
  395. package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
  396. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
  397. package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
  398. package/dist/esm-types/cli/lib/aiFiles/status.d.ts +6 -0
  399. package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
  400. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +56 -0
  401. package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
  402. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
  403. package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
  404. package/dist/esm-types/cli/lib/api.d.ts +3 -3
  405. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  406. package/dist/esm-types/cli/lib/command.d.ts +2 -1
  407. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  408. package/dist/esm-types/cli/lib/config.d.ts +18 -6
  409. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  410. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
  411. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  412. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
  413. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  414. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
  415. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
  416. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
  417. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  418. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  419. package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
  420. package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
  421. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  422. package/dist/esm-types/cli/lib/env.d.ts +0 -4
  423. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  424. package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
  425. package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
  426. package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
  427. package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
  428. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
  429. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  430. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  431. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  432. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  433. package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
  434. package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
  435. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  436. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
  437. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  438. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
  439. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  440. package/dist/esm-types/cli/lib/updates.d.ts +4 -3
  441. package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
  442. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  443. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  444. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  445. package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
  446. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  447. package/dist/esm-types/cli/lib/versionApi.d.ts +7 -1
  448. package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
  449. package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
  450. package/dist/esm-types/index.d.ts +1 -1
  451. package/dist/esm-types/react/client.d.ts +54 -2
  452. package/dist/esm-types/react/client.d.ts.map +1 -1
  453. package/dist/esm-types/react/index.d.ts +7 -2
  454. package/dist/esm-types/react/index.d.ts.map +1 -1
  455. package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
  456. package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
  457. package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
  458. package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
  459. package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
  460. package/dist/esm-types/server/api.d.ts +5 -1
  461. package/dist/esm-types/server/api.d.ts.map +1 -1
  462. package/dist/esm-types/server/components/definition.d.ts +1 -0
  463. package/dist/esm-types/server/components/definition.d.ts.map +1 -1
  464. package/dist/esm-types/server/components/index.d.ts +5 -1
  465. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  466. package/dist/esm-types/server/data_model.d.ts +2 -1
  467. package/dist/esm-types/server/data_model.d.ts.map +1 -1
  468. package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
  469. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
  470. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  471. package/dist/esm-types/server/index.d.ts +1 -0
  472. package/dist/esm-types/server/index.d.ts.map +1 -1
  473. package/dist/esm-types/server/meta.d.ts +72 -0
  474. package/dist/esm-types/server/meta.d.ts.map +1 -0
  475. package/dist/esm-types/server/registration.d.ts.map +1 -1
  476. package/dist/react.bundle.js +55 -15
  477. package/dist/react.bundle.js.map +3 -3
  478. package/package.json +11 -7
  479. package/schemas/convex.schema.json +22 -3
  480. package/src/browser/index.ts +3 -0
  481. package/src/browser/query_options.test.ts +0 -9
  482. package/src/browser/query_options.ts +36 -15
  483. package/src/browser/sync/authentication_manager.ts +9 -4
  484. package/src/browser/sync/client_node.test.ts +125 -0
  485. package/src/browser/sync/web_socket_manager.ts +1 -7
  486. package/src/cli/aiFiles.ts +56 -33
  487. package/src/cli/codegen_templates/readme.ts +14 -1
  488. package/src/cli/configure.test.ts +138 -0
  489. package/src/cli/configure.ts +62 -55
  490. package/src/cli/deploy.ts +12 -9
  491. package/src/cli/deploymentCreate.test.ts +349 -14
  492. package/src/cli/deploymentCreate.ts +268 -41
  493. package/src/cli/deploymentSelect.test.ts +136 -27
  494. package/src/cli/deploymentSelect.ts +50 -41
  495. package/src/cli/deploymentSelection.test.ts +399 -37
  496. package/src/cli/dev.ts +49 -14
  497. package/src/cli/docs.ts +1 -1
  498. package/src/cli/init.ts +2 -2
  499. package/src/cli/lib/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
  500. package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
  501. package/src/cli/lib/aiFiles/agentsmd.ts +81 -0
  502. package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
  503. package/src/cli/lib/aiFiles/claudemd.ts +81 -0
  504. package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
  505. package/src/cli/lib/aiFiles/guidelinesmd.test.ts +50 -0
  506. package/src/cli/lib/aiFiles/guidelinesmd.ts +49 -0
  507. package/src/cli/lib/{ai → aiFiles}/index.test.ts +343 -516
  508. package/src/cli/lib/aiFiles/index.ts +297 -0
  509. package/src/cli/lib/{ai → aiFiles}/integration.test.ts +195 -158
  510. package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
  511. package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +79 -31
  512. package/src/cli/lib/aiFiles/skills.ts +243 -0
  513. package/src/cli/lib/aiFiles/state.test.ts +280 -0
  514. package/src/cli/lib/aiFiles/state.ts +82 -0
  515. package/src/cli/lib/aiFiles/status.ts +246 -0
  516. package/src/cli/lib/aiFiles/utils.test.ts +50 -0
  517. package/src/cli/lib/aiFiles/utils.ts +191 -0
  518. package/src/cli/lib/api.ts +88 -7
  519. package/src/cli/lib/command.ts +18 -8
  520. package/src/cli/lib/config.test.ts +185 -8
  521. package/src/cli/lib/config.ts +73 -12
  522. package/src/cli/lib/deploy2.ts +14 -27
  523. package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
  524. package/src/cli/lib/deploymentSelection.ts +59 -6
  525. package/src/cli/lib/deploymentSelector.test.ts +6 -0
  526. package/src/cli/lib/deploymentSelector.ts +2 -0
  527. package/src/cli/lib/dev.ts +202 -153
  528. package/src/cli/lib/env.ts +0 -15
  529. package/src/cli/lib/expiration.test.ts +159 -0
  530. package/src/cli/lib/expiration.ts +124 -0
  531. package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
  532. package/src/cli/lib/init.ts +6 -2
  533. package/src/cli/lib/insights.ts +1 -1
  534. package/src/cli/lib/localDeployment/anonymous.ts +19 -9
  535. package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
  536. package/src/cli/lib/localDeployment/run.ts +1 -1
  537. package/src/cli/lib/localDeployment/upgrade.ts +12 -10
  538. package/src/cli/lib/localDeployment/utils.ts +12 -0
  539. package/src/cli/lib/mcp/tools/status.ts +1 -1
  540. package/src/cli/lib/updates.test.ts +97 -60
  541. package/src/cli/lib/updates.ts +17 -15
  542. package/src/cli/lib/usage.ts +3 -1
  543. package/src/cli/lib/utils/prompts.ts +2 -0
  544. package/src/cli/lib/utils/utils.test.ts +6 -6
  545. package/src/cli/lib/utils/utils.ts +66 -27
  546. package/src/cli/lib/versionApi.test.ts +13 -10
  547. package/src/cli/lib/versionApi.ts +13 -5
  548. package/src/cli/lib/workos/workos.ts +4 -5
  549. package/src/index.ts +1 -1
  550. package/src/react/client.test.tsx +65 -0
  551. package/src/react/client.ts +129 -13
  552. package/src/react/index.ts +9 -1
  553. package/src/react/use_query_object_options.test.ts +50 -0
  554. package/src/react/use_query_result.test.ts +41 -0
  555. package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
  556. package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
  557. package/src/server/api.ts +5 -1
  558. package/src/server/components/definition.ts +3 -0
  559. package/src/server/components/index.ts +62 -5
  560. package/src/server/data_model.ts +2 -1
  561. package/src/server/impl/meta_impl.ts +74 -0
  562. package/src/server/impl/registration_impl.ts +21 -9
  563. package/src/server/index.ts +8 -0
  564. package/src/server/meta.ts +76 -0
  565. package/src/server/registration.ts +10 -0
  566. package/src/server/schema.test.ts +78 -1
  567. package/dist/cjs/cli/lib/ai/config.js +0 -144
  568. package/dist/cjs/cli/lib/ai/config.js.map +0 -7
  569. package/dist/cjs/cli/lib/ai/index.js +0 -704
  570. package/dist/cjs/cli/lib/ai/index.js.map +0 -7
  571. package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
  572. package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
  573. package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
  574. package/dist/cjs-types/cli/lib/ai/config.test.d.ts +0 -2
  575. package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
  576. package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
  577. package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
  578. package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
  579. package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
  580. package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
  581. package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
  582. package/dist/esm/cli/lib/ai/config.js +0 -109
  583. package/dist/esm/cli/lib/ai/config.js.map +0 -7
  584. package/dist/esm/cli/lib/ai/index.js +0 -684
  585. package/dist/esm/cli/lib/ai/index.js.map +0 -7
  586. package/dist/esm/cli/lib/ai/paths.js.map +0 -7
  587. package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
  588. package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
  589. package/dist/esm-types/cli/lib/ai/config.test.d.ts +0 -2
  590. package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
  591. package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
  592. package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
  593. package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
  594. package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
  595. package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
  596. package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
  597. package/src/cli/lib/ai/config.test.ts +0 -338
  598. package/src/cli/lib/ai/config.ts +0 -159
  599. package/src/cli/lib/ai/index.ts +0 -1006
  600. /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
  601. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
  602. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
  603. /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
  604. /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
  605. /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
  606. /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
  607. /package/dist/esm-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
@@ -5,6 +5,7 @@ import { test, expect, describe, vi } from "vitest";
5
5
  import ws from "ws";
6
6
 
7
7
  import { ConvexReactClient, createMutation, useQuery } from "./client.js";
8
+ import { convexQueryOptions } from "../browser/query_options.js";
8
9
  import { ConvexProvider } from "./index.js";
9
10
  import React from "react";
10
11
  import { renderHook } from "@testing-library/react";
@@ -113,6 +114,46 @@ describe("useQuery", () => {
113
114
  expect(result.current).toStrictEqual(undefined);
114
115
  });
115
116
 
117
+ test("object form returns success result", () => {
118
+ const client = createClientWithQuery();
119
+ const wrapper = ({ children }: any) => (
120
+ <ConvexProvider client={client}>{children}</ConvexProvider>
121
+ );
122
+ const { result } = renderHook(
123
+ () =>
124
+ useQuery({
125
+ query: anyApi.myQuery.default,
126
+ args: {},
127
+ }),
128
+ { wrapper },
129
+ );
130
+ expect(result.current).toStrictEqual({
131
+ data: "queryResult",
132
+ error: undefined,
133
+ status: "success",
134
+ });
135
+ });
136
+
137
+ test("object form returns pending when skipped", () => {
138
+ const client = createClientWithQuery();
139
+ const wrapper = ({ children }: any) => (
140
+ <ConvexProvider client={client}>{children}</ConvexProvider>
141
+ );
142
+ const { result } = renderHook(
143
+ () =>
144
+ useQuery({
145
+ query: anyApi.myQuery.default,
146
+ args: "skip",
147
+ }),
148
+ { wrapper },
149
+ );
150
+ expect(result.current).toStrictEqual({
151
+ data: undefined,
152
+ error: undefined,
153
+ status: "pending",
154
+ });
155
+ });
156
+
116
157
  test("Optimistic update handlers can’t be async", () => {
117
158
  const client = testConvexReactClient();
118
159
  const mutation = createMutation(
@@ -192,3 +233,27 @@ describe("async query fetch", () => {
192
233
  expect(await queryResult).toStrictEqual("queryResult");
193
234
  });
194
235
  });
236
+
237
+ describe("prewarmQuery types", () => {
238
+ test("accepts QueryOptions shape", () => {
239
+ const client = testConvexReactClient();
240
+ const opts = convexQueryOptions({
241
+ query: makeFunctionReference<"query", { name: string }, string>(
242
+ "myQuery",
243
+ ),
244
+ args: { name: "hi" },
245
+ });
246
+ client.prewarmQuery(opts);
247
+ });
248
+
249
+ test("accepts extendSubscriptionFor on prewarmQuery", () => {
250
+ const client = testConvexReactClient();
251
+ client.prewarmQuery({
252
+ query: makeFunctionReference<"query", { name: string }, string>(
253
+ "myQuery",
254
+ ),
255
+ args: { name: "hi" },
256
+ extendSubscriptionFor: 10_000,
257
+ });
258
+ });
259
+ });
@@ -32,7 +32,7 @@ import {
32
32
  instantiateNoopLogger,
33
33
  Logger,
34
34
  } from "../browser/logging.js";
35
- import { ConvexQueryOptions } from "../browser/query_options.js";
35
+ import type { QueryOptions } from "../browser/query_options.js";
36
36
  import { LoadMoreOfPaginatedQuery } from "../browser/sync/pagination.js";
37
37
  import {
38
38
  PaginatedQueryClient,
@@ -537,9 +537,7 @@ export class ConvexReactClient {
537
537
  * an optional extendSubscriptionFor for how long to subscribe to the query.
538
538
  */
539
539
  prewarmQuery<Query extends FunctionReference<"query">>(
540
- queryOptions: ConvexQueryOptions<Query> & {
541
- extendSubscriptionFor?: number;
542
- },
540
+ queryOptions: QueryOptions<Query> & { extendSubscriptionFor?: number },
543
541
  ) {
544
542
  const extendSubscriptionFor =
545
543
  queryOptions.extendSubscriptionFor ?? DEFAULT_EXTEND_SUBSCRIPTION_FOR;
@@ -801,6 +799,34 @@ export type OptionalRestArgsOrSkip<FuncRef extends FunctionReference<any>> =
801
799
  ? [args?: EmptyObject | "skip"]
802
800
  : [args: FuncRef["_args"] | "skip"];
803
801
 
802
+ /**
803
+ * Result returned by object-form {@link useQuery}.
804
+ *
805
+ * @public
806
+ */
807
+ export type UseQueryResult<QueryResult> =
808
+ | {
809
+ data: QueryResult;
810
+ error: undefined;
811
+ status: "success";
812
+ }
813
+ | {
814
+ data: undefined;
815
+ error: Error;
816
+ status: "error";
817
+ }
818
+ | {
819
+ data: undefined;
820
+ error: undefined;
821
+ status: "pending";
822
+ };
823
+
824
+ type UseQueryOptions<Query extends FunctionReference<"query">> = {
825
+ query: Query;
826
+ args: FunctionArgs<Query> | "skip";
827
+ throwOnError?: boolean;
828
+ };
829
+
804
830
  /**
805
831
  * Load a reactive query within a React component.
806
832
  *
@@ -847,20 +873,82 @@ export type OptionalRestArgsOrSkip<FuncRef extends FunctionReference<any>> =
847
873
  export function useQuery<Query extends FunctionReference<"query">>(
848
874
  query: Query,
849
875
  ...args: OptionalRestArgsOrSkip<Query>
850
- ): Query["_returnType"] | undefined {
851
- const skip = args[0] === "skip";
852
- const argsObject = args[0] === "skip" ? {} : parseArgs(args[0]);
876
+ ): Query["_returnType"] | undefined;
877
+
878
+ /**
879
+ * Load a reactive query within a React component using an options object.
880
+ *
881
+ * This is an alternative form of {@link useQuery} that accepts a single
882
+ * {@link UseQueryOptions} object instead of positional arguments.
883
+ * Errors are returned in the result object unless `throwOnError` is set.
884
+ *
885
+ * @example
886
+ * ```tsx
887
+ * import { useQuery } from "convex/react";
888
+ * import { api } from "../convex/_generated/api";
889
+ *
890
+ * function TaskList() {
891
+ * const state = useQuery({ query: api.tasks.list, args: { completed: false } });
892
+ *
893
+ * if (state.status === "pending") return <div>Loading...</div>;
894
+ * if (state.status === "error") return <div>Error: {state.error.message}</div>;
895
+ * return state.data.map((task) => <div key={task._id}>{task.text}</div>);
896
+ * }
897
+ * ```
898
+ *
899
+ * @param options - Query options. Pass `args: "skip"` to disable the query.
900
+ * @returns the current query state as a {@link UseQueryResult} object.
901
+ *
902
+ * @see https://docs.convex.dev/client/react#fetching-data
903
+ * @public
904
+ */
905
+ export function useQuery<Query extends FunctionReference<"query">>(
906
+ options: UseQueryOptions<Query>,
907
+ ): UseQueryResult<Query["_returnType"]>;
853
908
 
854
- const queryReference =
855
- typeof query === "string"
856
- ? makeFunctionReference<"query", any, any>(query)
857
- : query;
909
+ export function useQuery<Query extends FunctionReference<"query">>(
910
+ queryOrOptions: Query | UseQueryOptions<Query>,
911
+ ...args: OptionalRestArgsOrSkip<Query>
912
+ ): Query["_returnType"] | undefined | UseQueryResult<Query["_returnType"]> {
913
+ const isObjectOptions =
914
+ typeof queryOrOptions === "object" &&
915
+ queryOrOptions !== null &&
916
+ "query" in queryOrOptions;
917
+ const throwOnError = isObjectOptions
918
+ ? (queryOrOptions.throwOnError ?? false)
919
+ : true;
920
+
921
+ let queryReference: Query | undefined;
922
+ let argsObject: Record<string, Value> = {};
923
+
924
+ if (isObjectOptions) {
925
+ const query = queryOrOptions.query;
926
+ queryReference =
927
+ typeof query === "string"
928
+ ? (makeFunctionReference<"query", any, any>(query) as Query)
929
+ : query;
930
+ if (queryOrOptions.args !== "skip") {
931
+ argsObject = parseArgs(queryOrOptions.args as Record<string, Value>);
932
+ }
933
+ } else {
934
+ const query = queryOrOptions;
935
+ queryReference =
936
+ typeof query === "string"
937
+ ? (makeFunctionReference<"query", any, any>(query) as Query)
938
+ : query;
939
+ argsObject = args[0] === "skip" ? {} : parseArgs(args[0] as Query["_args"]);
940
+ }
858
941
 
859
- const queryName = getFunctionName(queryReference);
942
+ const queryName = queryReference
943
+ ? getFunctionName(queryReference)
944
+ : undefined;
945
+ const skip =
946
+ (isObjectOptions && queryOrOptions.args === "skip") ||
947
+ (!isObjectOptions && args[0] === "skip");
860
948
 
861
949
  const queries = useMemo(
862
950
  () =>
863
- skip
951
+ skip || !queryReference
864
952
  ? ({} as RequestForQueries)
865
953
  : { query: { query: queryReference, args: argsObject } },
866
954
  // Stringify args so args that are semantically the same don't trigger a
@@ -871,6 +959,34 @@ export function useQuery<Query extends FunctionReference<"query">>(
871
959
 
872
960
  const results = useQueries(queries);
873
961
  const result = results["query"];
962
+
963
+ if (isObjectOptions) {
964
+ if (result instanceof Error) {
965
+ if (throwOnError) {
966
+ throw result;
967
+ }
968
+ return {
969
+ data: undefined,
970
+ error: result,
971
+ status: "error",
972
+ };
973
+ }
974
+
975
+ if (result === undefined) {
976
+ return {
977
+ data: undefined,
978
+ error: undefined,
979
+ status: "pending",
980
+ };
981
+ }
982
+
983
+ return {
984
+ data: result,
985
+ error: undefined,
986
+ status: "success",
987
+ };
988
+ }
989
+
874
990
  if (result instanceof Error) {
875
991
  throw result;
876
992
  }
@@ -53,7 +53,11 @@
53
53
  * import { api } from "../convex/_generated/api";
54
54
  *
55
55
  * function App() {
56
- * const counter = useQuery(api.getCounter.default);
56
+ * const counter = useQuery({
57
+ * query: api.getCounter.default,
58
+ * args: {},
59
+ * throwOnError: true,
60
+ * }).data;
57
61
  * const increment = useMutation(api.incrementCounter.default);
58
62
  * // Your component here!
59
63
  * }
@@ -78,6 +82,7 @@ export {
78
82
  type MutationOptions,
79
83
  type ConvexReactClientOptions,
80
84
  type OptionalRestArgsOrSkip,
85
+ type UseQueryResult,
81
86
  ConvexReactClient,
82
87
  useConvex,
83
88
  ConvexProvider,
@@ -86,3 +91,6 @@ export {
86
91
  useAction,
87
92
  useConvexConnectionState,
88
93
  } from "./client.js";
94
+ /** @internal */
95
+ export { convexQueryOptions } from "../browser/query_options.js";
96
+ export type { QueryOptions } from "../browser/query_options.js";
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @vitest-environment custom-vitest-environment.ts
3
+ */
4
+
5
+ /* eslint-disable @typescript-eslint/no-unused-vars */
6
+ import { test, describe } from "vitest";
7
+ import { anyApi } from "../server/api.js";
8
+
9
+ import type { ApiFromModules, QueryBuilder } from "../server/index.js";
10
+ import { useQuery as useQueryReal } from "./client.js";
11
+
12
+ const useQuery = (() => {}) as unknown as typeof useQueryReal;
13
+ const query: QueryBuilder<any, "public"> = (() => {}) as any;
14
+
15
+ const module = {
16
+ noArgs: query(() => "result"),
17
+ args: query((_ctx, { _arg }: { _arg: string }) => "result"),
18
+ };
19
+ type API = ApiFromModules<{ module: typeof module }>;
20
+ const api = anyApi as unknown as API;
21
+
22
+ describe("useQuery object options", () => {
23
+ test("supports object options and skip sentinel", () => {
24
+ useQuery({
25
+ query: api.module.noArgs,
26
+ args: {},
27
+ });
28
+
29
+ useQuery({
30
+ query: api.module.args,
31
+ args: { _arg: "asdf" },
32
+ });
33
+
34
+ const _arg: string | undefined = undefined;
35
+ useQuery({
36
+ query: api.module.args,
37
+ args: _arg ? { _arg } : "skip",
38
+ });
39
+
40
+ useQuery({
41
+ query: api.module.args,
42
+ args: { _arg: "asdf" },
43
+ });
44
+
45
+ useQuery({
46
+ query: api.module.noArgs,
47
+ args: "skip",
48
+ });
49
+ });
50
+ });
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @vitest-environment custom-vitest-environment.ts
3
+ */
4
+
5
+ /* eslint-disable @typescript-eslint/no-unused-vars */
6
+ import { test, describe } from "vitest";
7
+ import { anyApi } from "../server/api.js";
8
+
9
+ import type { ApiFromModules, QueryBuilder } from "../server/index.js";
10
+ import { useQuery as useQueryReal } from "./client.js";
11
+
12
+ const useQuery = (() => {}) as unknown as typeof useQueryReal;
13
+ const query: QueryBuilder<any, "public"> = (() => {}) as any;
14
+
15
+ const module = {
16
+ noArgs: query(() => "result"),
17
+ args: query((_ctx, { _arg }: { _arg: string }) => "result"),
18
+ };
19
+ type API = ApiFromModules<{ module: typeof module }>;
20
+ const api = anyApi as unknown as API;
21
+
22
+ describe("useQuery object-form result types", () => {
23
+ test("supports object-form result usage", () => {
24
+ useQuery({
25
+ query: api.module.args,
26
+ args: { _arg: "asdf" },
27
+ });
28
+
29
+ useQuery({
30
+ query: api.module.args,
31
+ args: { _arg: "asdf" },
32
+ throwOnError: true,
33
+ });
34
+
35
+ const _arg: string | undefined = undefined;
36
+ useQuery({
37
+ query: api.module.args,
38
+ args: _arg ? { _arg } : "skip",
39
+ });
40
+ });
41
+ });
@@ -5,7 +5,7 @@ import { test } from "vitest";
5
5
  import React from "react";
6
6
  import { ConvexProviderWithClerk } from "./ConvexProviderWithClerk.js";
7
7
  import { ConvexReactClient } from "../react/index.js";
8
- import { useAuth } from "@clerk/clerk-react";
8
+ import { useAuth } from "@clerk/react";
9
9
 
10
10
  test("Helpers are valid children", () => {
11
11
  const convex = new ConvexReactClient("https://localhost:3001");
@@ -30,7 +30,7 @@ type UseAuth = () => {
30
30
  * authenticated with Clerk.
31
31
  *
32
32
  * It must be wrapped by a configured `ClerkProvider`, from
33
- * `@clerk/clerk-react`, `@clerk/clerk-expo`, `@clerk/nextjs` or
33
+ * `@clerk/react`, `@clerk/clerk-expo`, `@clerk/nextjs` or
34
34
  * another React-based Clerk client library and have the corresponding
35
35
  * `useAuth` hook passed in.
36
36
  *
package/src/server/api.ts CHANGED
@@ -39,7 +39,11 @@ export type FunctionType = "query" | "mutation" | "action";
39
39
  * Function references can be used to invoke functions from the client. For
40
40
  * example, in React you can pass references to the {@link react.useQuery} hook:
41
41
  * ```js
42
- * const result = useQuery(api.myModule.myFunction);
42
+ * const result = useQuery({
43
+ * query: api.myModule.myFunction,
44
+ * args: {},
45
+ * throwOnError: true,
46
+ * }).data;
43
47
  * ```
44
48
  *
45
49
  * @typeParam Type - The type of the function ("query", "mutation", or "action").
@@ -45,6 +45,9 @@ export type ComponentDefinitionAnalysis = {
45
45
  };
46
46
  export type AppDefinitionAnalysis = {
47
47
  definitionType: AppDefinitionType;
48
+ // Top-level field (not inside definitionType) to match Rust's
49
+ // SerializedComponentDefinitionMetadata.http_prefix field.
50
+ httpPrefix?: string;
48
51
  childComponents: ComponentInstantiation[];
49
52
  httpMounts: Record<string, HttpMount>;
50
53
  exports: ComponentExport;
@@ -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
+ }