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.
- package/CHANGELOG.md +98 -43
- package/dist/browser.bundle.js +13 -10
- package/dist/browser.bundle.js.map +3 -3
- package/dist/cjs/browser/index-node.js +3 -1
- package/dist/cjs/browser/index.js +3 -1
- package/dist/cjs/browser/index.js.map +2 -2
- package/dist/cjs/browser/query_options.js.map +2 -2
- package/dist/cjs/browser/sync/authentication_manager.js +4 -1
- package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
- package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
- package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/cjs/cli/aiFiles.js +39 -20
- package/dist/cjs/cli/aiFiles.js.map +3 -3
- package/dist/cjs/cli/codegen_templates/readme.js +14 -1
- package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
- package/dist/cjs/cli/configure.js +34 -32
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +7 -8
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentCreate.js +225 -40
- package/dist/cjs/cli/deploymentCreate.js.map +3 -3
- package/dist/cjs/cli/deploymentSelect.js +14 -13
- package/dist/cjs/cli/deploymentSelect.js.map +2 -2
- package/dist/cjs/cli/dev.js +30 -11
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/docs.js +1 -1
- package/dist/cjs/cli/docs.js.map +2 -2
- package/dist/cjs/cli/init.js +1 -1
- package/dist/cjs/cli/init.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js +73 -0
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js +73 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +58 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/index.js +215 -0
- package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js +196 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
- package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/status.js +198 -0
- package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js +128 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/cjs/cli/lib/api.js +70 -7
- package/dist/cjs/cli/lib/api.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +10 -6
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +43 -7
- package/dist/cjs/cli/lib/config.js.map +3 -3
- package/dist/cjs/cli/lib/deploy2.js +9 -26
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
- package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +162 -117
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/env.js +1 -13
- package/dist/cjs/cli/lib/env.js.map +2 -2
- package/dist/cjs/cli/lib/expiration.js +104 -0
- package/dist/cjs/cli/lib/expiration.js.map +7 -0
- package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
- package/dist/cjs/cli/lib/init.js +4 -3
- package/dist/cjs/cli/lib/init.js.map +2 -2
- package/dist/cjs/cli/lib/insights.js +1 -1
- package/dist/cjs/cli/lib/insights.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/anonymous.js +15 -8
- package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
- package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
- package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/cjs/cli/lib/updates.js +12 -13
- package/dist/cjs/cli/lib/updates.js.map +2 -2
- package/dist/cjs/cli/lib/usage.js +2 -1
- package/dist/cjs/cli/lib/usage.js.map +2 -2
- package/dist/cjs/cli/lib/utils/prompts.js +2 -1
- package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +46 -20
- package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
- package/dist/cjs/cli/lib/versionApi.js +7 -4
- package/dist/cjs/cli/lib/versionApi.js.map +2 -2
- package/dist/cjs/cli/lib/workos/workos.js +4 -6
- package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react/client.js +43 -6
- package/dist/cjs/react/client.js.map +2 -2
- package/dist/cjs/react/index.js +2 -0
- package/dist/cjs/react/index.js.map +2 -2
- package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/cjs/server/api.js.map +2 -2
- package/dist/cjs/server/components/definition.js.map +1 -1
- package/dist/cjs/server/components/index.js +40 -4
- package/dist/cjs/server/components/index.js.map +2 -2
- package/dist/cjs/server/data_model.js.map +1 -1
- package/dist/cjs/server/impl/meta_impl.js +78 -0
- package/dist/cjs/server/impl/meta_impl.js.map +7 -0
- package/dist/cjs/server/impl/registration_impl.js +16 -11
- package/dist/cjs/server/impl/registration_impl.js.map +2 -2
- package/dist/cjs/server/index.js.map +2 -2
- package/dist/cjs/server/meta.js +17 -0
- package/dist/cjs/server/meta.js.map +7 -0
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs-types/browser/index.d.ts +1 -0
- package/dist/cjs-types/browser/index.d.ts.map +1 -1
- package/dist/cjs-types/browser/query_options.d.ts +12 -9
- package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.test.d.ts +2 -0
- package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts +3 -1
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +6 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/api.d.ts +3 -3
- package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/command.d.ts +2 -1
- package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/config.d.ts +18 -6
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/env.d.ts +0 -4
- package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
- package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
- package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/react/client.d.ts +54 -2
- package/dist/cjs-types/react/client.d.ts.map +1 -1
- package/dist/cjs-types/react/index.d.ts +7 -2
- package/dist/cjs-types/react/index.d.ts.map +1 -1
- package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/cjs-types/server/api.d.ts +5 -1
- package/dist/cjs-types/server/api.d.ts.map +1 -1
- package/dist/cjs-types/server/components/definition.d.ts +1 -0
- package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
- package/dist/cjs-types/server/components/index.d.ts +5 -1
- package/dist/cjs-types/server/components/index.d.ts.map +1 -1
- package/dist/cjs-types/server/data_model.d.ts +2 -1
- package/dist/cjs-types/server/data_model.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/index.d.ts +1 -0
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts +72 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -0
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +2446 -1933
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/index-node.js +1 -0
- package/dist/esm/browser/index.js +1 -0
- package/dist/esm/browser/index.js.map +2 -2
- package/dist/esm/browser/query_options.js.map +2 -2
- package/dist/esm/browser/sync/authentication_manager.js +4 -1
- package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
- package/dist/esm/browser/sync/web_socket_manager.js +1 -7
- package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/esm/cli/aiFiles.js +41 -23
- package/dist/esm/cli/aiFiles.js.map +2 -2
- package/dist/esm/cli/codegen_templates/readme.js +14 -1
- package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
- package/dist/esm/cli/configure.js +35 -33
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +11 -10
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentCreate.js +238 -42
- package/dist/esm/cli/deploymentCreate.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +13 -12
- package/dist/esm/cli/deploymentSelect.js.map +2 -2
- package/dist/esm/cli/dev.js +34 -13
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/docs.js +1 -1
- package/dist/esm/cli/docs.js.map +2 -2
- package/dist/esm/cli/init.js +2 -2
- package/dist/esm/cli/init.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/agentsmd.js +56 -0
- package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js +56 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +35 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/index.js +193 -0
- package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/skills.js +163 -0
- package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/state.js +60 -0
- package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/status.js +178 -0
- package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/utils.js +97 -0
- package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/esm/cli/lib/api.js +70 -7
- package/dist/esm/cli/lib/api.js.map +2 -2
- package/dist/esm/cli/lib/command.js +10 -6
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/config.js +41 -6
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +13 -26
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +46 -2
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelector.js +1 -0
- package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +162 -118
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/env.js +0 -11
- package/dist/esm/cli/lib/env.js.map +2 -2
- package/dist/esm/cli/lib/expiration.js +80 -0
- package/dist/esm/cli/lib/expiration.js.map +7 -0
- package/dist/esm/cli/lib/init.js +4 -3
- package/dist/esm/cli/lib/init.js.map +2 -2
- package/dist/esm/cli/lib/insights.js +1 -1
- package/dist/esm/cli/lib/insights.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
- package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
- package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/run.js +1 -1
- package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
- package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
- package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/esm/cli/lib/updates.js +14 -12
- package/dist/esm/cli/lib/updates.js.map +2 -2
- package/dist/esm/cli/lib/usage.js +2 -1
- package/dist/esm/cli/lib/usage.js.map +2 -2
- package/dist/esm/cli/lib/utils/prompts.js +2 -1
- package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +45 -20
- package/dist/esm/cli/lib/utils/utils.js.map +3 -3
- package/dist/esm/cli/lib/versionApi.js +7 -4
- package/dist/esm/cli/lib/versionApi.js.map +2 -2
- package/dist/esm/cli/lib/workos/workos.js +4 -6
- package/dist/esm/cli/lib/workos/workos.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/client.js +43 -6
- package/dist/esm/react/client.js.map +2 -2
- package/dist/esm/react/index.js +1 -0
- package/dist/esm/react/index.js.map +2 -2
- package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/esm/server/api.js.map +2 -2
- package/dist/esm/server/components/index.js +40 -4
- package/dist/esm/server/components/index.js.map +2 -2
- package/dist/esm/server/impl/meta_impl.js +54 -0
- package/dist/esm/server/impl/meta_impl.js.map +7 -0
- package/dist/esm/server/impl/registration_impl.js +20 -11
- package/dist/esm/server/impl/registration_impl.js.map +2 -2
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/meta.js +2 -0
- package/dist/esm/server/meta.js.map +7 -0
- package/dist/esm-types/browser/index.d.ts +1 -0
- package/dist/esm-types/browser/index.d.ts.map +1 -1
- package/dist/esm-types/browser/query_options.d.ts +12 -9
- package/dist/esm-types/browser/query_options.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.test.d.ts +2 -0
- package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
- package/dist/esm-types/cli/deploy.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts +3 -1
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts +6 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/api.d.ts +3 -3
- package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/command.d.ts +2 -1
- package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/config.d.ts +18 -6
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/env.d.ts +0 -4
- package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
- package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/updates.d.ts +4 -3
- package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/react/client.d.ts +54 -2
- package/dist/esm-types/react/client.d.ts.map +1 -1
- package/dist/esm-types/react/index.d.ts +7 -2
- package/dist/esm-types/react/index.d.ts.map +1 -1
- package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/esm-types/server/api.d.ts +5 -1
- package/dist/esm-types/server/api.d.ts.map +1 -1
- package/dist/esm-types/server/components/definition.d.ts +1 -0
- package/dist/esm-types/server/components/definition.d.ts.map +1 -1
- package/dist/esm-types/server/components/index.d.ts +5 -1
- package/dist/esm-types/server/components/index.d.ts.map +1 -1
- package/dist/esm-types/server/data_model.d.ts +2 -1
- package/dist/esm-types/server/data_model.d.ts.map +1 -1
- package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/esm-types/server/index.d.ts +1 -0
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts +72 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -0
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/react.bundle.js +55 -15
- package/dist/react.bundle.js.map +3 -3
- package/package.json +11 -7
- package/schemas/convex.schema.json +22 -3
- package/src/browser/index.ts +3 -0
- package/src/browser/query_options.test.ts +0 -9
- package/src/browser/query_options.ts +36 -15
- package/src/browser/sync/authentication_manager.ts +9 -4
- package/src/browser/sync/client_node.test.ts +125 -0
- package/src/browser/sync/web_socket_manager.ts +1 -7
- package/src/cli/aiFiles.ts +56 -33
- package/src/cli/codegen_templates/readme.ts +14 -1
- package/src/cli/configure.test.ts +138 -0
- package/src/cli/configure.ts +62 -55
- package/src/cli/deploy.ts +12 -9
- package/src/cli/deploymentCreate.test.ts +349 -14
- package/src/cli/deploymentCreate.ts +268 -41
- package/src/cli/deploymentSelect.test.ts +136 -27
- package/src/cli/deploymentSelect.ts +50 -41
- package/src/cli/deploymentSelection.test.ts +399 -37
- package/src/cli/dev.ts +49 -14
- package/src/cli/docs.ts +1 -1
- package/src/cli/init.ts +2 -2
- package/src/cli/lib/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
- package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
- package/src/cli/lib/aiFiles/agentsmd.ts +81 -0
- package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
- package/src/cli/lib/aiFiles/claudemd.ts +81 -0
- package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
- package/src/cli/lib/aiFiles/guidelinesmd.test.ts +50 -0
- package/src/cli/lib/aiFiles/guidelinesmd.ts +49 -0
- package/src/cli/lib/{ai → aiFiles}/index.test.ts +343 -516
- package/src/cli/lib/aiFiles/index.ts +297 -0
- package/src/cli/lib/{ai → aiFiles}/integration.test.ts +195 -158
- package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
- package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +79 -31
- package/src/cli/lib/aiFiles/skills.ts +243 -0
- package/src/cli/lib/aiFiles/state.test.ts +280 -0
- package/src/cli/lib/aiFiles/state.ts +82 -0
- package/src/cli/lib/aiFiles/status.ts +246 -0
- package/src/cli/lib/aiFiles/utils.test.ts +50 -0
- package/src/cli/lib/aiFiles/utils.ts +191 -0
- package/src/cli/lib/api.ts +88 -7
- package/src/cli/lib/command.ts +18 -8
- package/src/cli/lib/config.test.ts +185 -8
- package/src/cli/lib/config.ts +73 -12
- package/src/cli/lib/deploy2.ts +14 -27
- package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
- package/src/cli/lib/deploymentSelection.ts +59 -6
- package/src/cli/lib/deploymentSelector.test.ts +6 -0
- package/src/cli/lib/deploymentSelector.ts +2 -0
- package/src/cli/lib/dev.ts +202 -153
- package/src/cli/lib/env.ts +0 -15
- package/src/cli/lib/expiration.test.ts +159 -0
- package/src/cli/lib/expiration.ts +124 -0
- package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
- package/src/cli/lib/init.ts +6 -2
- package/src/cli/lib/insights.ts +1 -1
- package/src/cli/lib/localDeployment/anonymous.ts +19 -9
- package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
- package/src/cli/lib/localDeployment/run.ts +1 -1
- package/src/cli/lib/localDeployment/upgrade.ts +12 -10
- package/src/cli/lib/localDeployment/utils.ts +12 -0
- package/src/cli/lib/mcp/tools/status.ts +1 -1
- package/src/cli/lib/updates.test.ts +97 -60
- package/src/cli/lib/updates.ts +17 -15
- package/src/cli/lib/usage.ts +3 -1
- package/src/cli/lib/utils/prompts.ts +2 -0
- package/src/cli/lib/utils/utils.test.ts +6 -6
- package/src/cli/lib/utils/utils.ts +66 -27
- package/src/cli/lib/versionApi.test.ts +13 -10
- package/src/cli/lib/versionApi.ts +13 -5
- package/src/cli/lib/workos/workos.ts +4 -5
- package/src/index.ts +1 -1
- package/src/react/client.test.tsx +65 -0
- package/src/react/client.ts +129 -13
- package/src/react/index.ts +9 -1
- package/src/react/use_query_object_options.test.ts +50 -0
- package/src/react/use_query_result.test.ts +41 -0
- package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
- package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
- package/src/server/api.ts +5 -1
- package/src/server/components/definition.ts +3 -0
- package/src/server/components/index.ts +62 -5
- package/src/server/data_model.ts +2 -1
- package/src/server/impl/meta_impl.ts +74 -0
- package/src/server/impl/registration_impl.ts +21 -9
- package/src/server/index.ts +8 -0
- package/src/server/meta.ts +76 -0
- package/src/server/registration.ts +10 -0
- package/src/server/schema.test.ts +78 -1
- package/dist/cjs/cli/lib/ai/config.js +0 -144
- package/dist/cjs/cli/lib/ai/config.js.map +0 -7
- package/dist/cjs/cli/lib/ai/index.js +0 -704
- package/dist/cjs/cli/lib/ai/index.js.map +0 -7
- package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
- package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/dist/esm/cli/lib/ai/config.js +0 -109
- package/dist/esm/cli/lib/ai/config.js.map +0 -7
- package/dist/esm/cli/lib/ai/index.js +0 -684
- package/dist/esm/cli/lib/ai/index.js.map +0 -7
- package/dist/esm/cli/lib/ai/paths.js.map +0 -7
- package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/src/cli/lib/ai/config.test.ts +0 -338
- package/src/cli/lib/ai/config.ts +0 -159
- package/src/cli/lib/ai/index.ts +0 -1006
- /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
- /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /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
|
+
});
|
package/src/react/client.ts
CHANGED
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
instantiateNoopLogger,
|
|
33
33
|
Logger,
|
|
34
34
|
} from "../browser/logging.js";
|
|
35
|
-
import {
|
|
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:
|
|
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
|
-
|
|
852
|
-
|
|
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
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
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 =
|
|
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
|
}
|
package/src/react/index.ts
CHANGED
|
@@ -53,7 +53,11 @@
|
|
|
53
53
|
* import { api } from "../convex/_generated/api";
|
|
54
54
|
*
|
|
55
55
|
* function App() {
|
|
56
|
-
* const counter = useQuery(
|
|
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/
|
|
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/
|
|
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(
|
|
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
|
-
|
|
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,
|
package/src/server/data_model.ts
CHANGED
|
@@ -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
|
+
}
|