convex 1.34.1 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -43
- package/dist/browser.bundle.js +8 -2
- 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/cli/aiFiles.js +31 -13
- 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 +21 -24
- 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 +14 -10
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/claudemd.js +14 -10
- package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +10 -3
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/index.js +70 -86
- package/dist/cjs/cli/lib/aiFiles/index.js.map +3 -3
- package/dist/cjs/cli/lib/aiFiles/skills.js +28 -12
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
- 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 +31 -28
- package/dist/cjs/cli/lib/aiFiles/status.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/utils.js +31 -14
- package/dist/cjs/cli/lib/aiFiles/utils.js.map +2 -2
- 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 +4 -5
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +41 -4
- 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 +14 -7
- 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 +8 -9
- 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/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/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 +5 -5
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +20 -18
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +6 -4
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
- 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 +4 -1
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +13 -3
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
- 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 +17 -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/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 +1670 -1214
- 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/cli/aiFiles.js +33 -15
- 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 +23 -26
- 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 +13 -9
- package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/claudemd.js +13 -9
- package/dist/esm/cli/lib/aiFiles/claudemd.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +12 -5
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/index.js +72 -89
- package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/skills.js +29 -13
- package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
- 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 +32 -29
- package/dist/esm/cli/lib/aiFiles/status.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/utils.js +25 -10
- package/dist/esm/cli/lib/aiFiles/utils.js.map +2 -2
- 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 +4 -5
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/config.js +39 -3
- 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 +11 -9
- 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/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/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 +5 -5
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +5 -5
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -3
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +20 -18
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +6 -4
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
- 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 +4 -1
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +13 -3
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -1
- 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 +17 -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/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 +50 -7
- package/dist/react.bundle.js.map +3 -3
- package/package.json +11 -7
- package/schemas/convex.schema.json +15 -2
- 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/cli/aiFiles.ts +44 -14
- package/src/cli/codegen_templates/readme.ts +14 -1
- package/src/cli/configure.test.ts +138 -0
- package/src/cli/configure.ts +48 -47
- 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 +343 -35
- 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/aiFiles/agentsmd.ts +15 -11
- package/src/cli/lib/aiFiles/claudemd.ts +15 -11
- package/src/cli/lib/aiFiles/guidelinesmd.test.ts +12 -2
- package/src/cli/lib/aiFiles/guidelinesmd.ts +15 -7
- package/src/cli/lib/aiFiles/index.test.ts +188 -222
- package/src/cli/lib/aiFiles/index.ts +119 -125
- package/src/cli/lib/aiFiles/integration.test.ts +112 -45
- package/src/cli/lib/aiFiles/prompt.test.ts +6 -6
- package/src/cli/lib/aiFiles/skills.ts +46 -16
- 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 +45 -39
- package/src/cli/lib/aiFiles/utils.test.ts +50 -0
- package/src/cli/lib/aiFiles/utils.ts +38 -10
- package/src/cli/lib/api.ts +88 -7
- package/src/cli/lib/command.ts +12 -7
- package/src/cli/lib/config.test.ts +184 -7
- package/src/cli/lib/config.ts +67 -7
- 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 +102 -75
- package/src/cli/lib/updates.ts +14 -12
- 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/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/aiFiles/config.js +0 -171
- package/dist/cjs/cli/lib/aiFiles/config.js.map +0 -7
- package/dist/cjs-types/cli/lib/aiFiles/config.d.ts +0 -46
- package/dist/cjs-types/cli/lib/aiFiles/config.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts +0 -2
- package/dist/cjs-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
- package/dist/esm/cli/lib/aiFiles/config.js +0 -135
- package/dist/esm/cli/lib/aiFiles/config.js.map +0 -7
- package/dist/esm-types/cli/lib/aiFiles/config.d.ts +0 -46
- package/dist/esm-types/cli/lib/aiFiles/config.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts +0 -2
- package/dist/esm-types/cli/lib/aiFiles/config.test.d.ts.map +0 -1
- package/src/cli/lib/aiFiles/config.test.ts +0 -460
- package/src/cli/lib/aiFiles/config.ts +0 -188
- package/src/values/.claude/settings.local.json +0 -10
package/src/cli/lib/usage.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Context } from "../../bundler/context.js";
|
|
|
3
3
|
import { logWarning } from "../../bundler/log.js";
|
|
4
4
|
import { teamDashboardUrl } from "./dashboard.js";
|
|
5
5
|
import { fetchTeamAndProject } from "./api.js";
|
|
6
|
+
import { isAnonymousDeployment } from "./deployment.js";
|
|
6
7
|
import { bigBrainAPI } from "./utils/utils.js";
|
|
7
8
|
|
|
8
9
|
async function warn(
|
|
@@ -53,7 +54,8 @@ export async function usageStateWarning(
|
|
|
53
54
|
auth === null ||
|
|
54
55
|
auth.kind === "projectKey" ||
|
|
55
56
|
auth.kind === "deploymentKey" ||
|
|
56
|
-
process.env.CONVEX_AGENT_MODE === "anonymous"
|
|
57
|
+
process.env.CONVEX_AGENT_MODE === "anonymous" ||
|
|
58
|
+
isAnonymousDeployment(targetDeployment)
|
|
57
59
|
) {
|
|
58
60
|
return;
|
|
59
61
|
}
|
|
@@ -30,12 +30,14 @@ export const promptString = async (
|
|
|
30
30
|
options: {
|
|
31
31
|
message: string;
|
|
32
32
|
default?: string;
|
|
33
|
+
validate?: (value: string) => boolean | string | Promise<string | boolean>;
|
|
33
34
|
},
|
|
34
35
|
): Promise<string> => {
|
|
35
36
|
if (process.stdin.isTTY) {
|
|
36
37
|
return input({
|
|
37
38
|
message: options.message,
|
|
38
39
|
...(options.default !== undefined ? { default: options.default } : {}),
|
|
40
|
+
...(options.validate !== undefined ? { validate: options.validate } : {}),
|
|
39
41
|
}).catch(handlePromptError(ctx));
|
|
40
42
|
} else {
|
|
41
43
|
return ctx.crash({
|
|
@@ -65,7 +65,7 @@ describe("bigBrainFetch", () => {
|
|
|
65
65
|
const mockFetch = stubFetch();
|
|
66
66
|
const ctx = makeContext(null);
|
|
67
67
|
|
|
68
|
-
const fetch =
|
|
68
|
+
const fetch = bigBrainFetch(ctx);
|
|
69
69
|
await fetch("https://api.convex.dev/api/test", { method: "GET" });
|
|
70
70
|
|
|
71
71
|
expect(mockFetch).toHaveBeenCalledOnce();
|
|
@@ -82,7 +82,7 @@ describe("bigBrainFetch", () => {
|
|
|
82
82
|
accessToken: "test-token",
|
|
83
83
|
});
|
|
84
84
|
|
|
85
|
-
const fetch =
|
|
85
|
+
const fetch = bigBrainFetch(ctx);
|
|
86
86
|
await fetch("https://api.convex.dev/api/test", { method: "GET" });
|
|
87
87
|
|
|
88
88
|
expect(mockFetch).toHaveBeenCalledOnce();
|
|
@@ -99,7 +99,7 @@ describe("bigBrainFetch", () => {
|
|
|
99
99
|
accessToken: "original-token",
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
const fetch =
|
|
102
|
+
const fetch = bigBrainFetch(ctx);
|
|
103
103
|
await fetch("https://api.convex.dev/api/test", {
|
|
104
104
|
method: "POST",
|
|
105
105
|
headers: {
|
|
@@ -124,7 +124,7 @@ describe("bigBrainFetch", () => {
|
|
|
124
124
|
headers: { "X-Custom-Header": "custom-value" },
|
|
125
125
|
});
|
|
126
126
|
|
|
127
|
-
const fetch =
|
|
127
|
+
const fetch = bigBrainFetch(ctx);
|
|
128
128
|
await fetch(request, undefined);
|
|
129
129
|
|
|
130
130
|
expect(mockFetch).toHaveBeenCalledOnce();
|
|
@@ -143,7 +143,7 @@ describe("bigBrainFetch", () => {
|
|
|
143
143
|
headers: { "X-Custom-Header": "from-request" },
|
|
144
144
|
});
|
|
145
145
|
|
|
146
|
-
const fetch =
|
|
146
|
+
const fetch = bigBrainFetch(ctx);
|
|
147
147
|
await fetch(request, {
|
|
148
148
|
headers: { "X-Custom-Header": "from-options" },
|
|
149
149
|
});
|
|
@@ -160,7 +160,7 @@ describe("bigBrainFetch", () => {
|
|
|
160
160
|
method: "POST",
|
|
161
161
|
});
|
|
162
162
|
|
|
163
|
-
const fetch =
|
|
163
|
+
const fetch = bigBrainFetch(ctx);
|
|
164
164
|
await fetch(request);
|
|
165
165
|
|
|
166
166
|
expect(mockFetch).toHaveBeenCalledOnce();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { paths as PlatformDeploymentPaths } from "@convex-dev/platform/deploymentApi";
|
|
1
2
|
import { paths as PlatformManagementPaths } from "@convex-dev/platform/managementApi";
|
|
2
3
|
import { chalkStderr } from "chalk";
|
|
3
4
|
import os from "os";
|
|
@@ -692,7 +693,7 @@ export function cacheDir() {
|
|
|
692
693
|
*
|
|
693
694
|
* This fetch() also has retries and throws if the response is not ok.
|
|
694
695
|
*/
|
|
695
|
-
export
|
|
696
|
+
export function bigBrainFetch(ctx: Context): typeof fetch {
|
|
696
697
|
const authHeader = ctx.bigBrainAuth()?.header;
|
|
697
698
|
const bigBrainHeaders: Record<string, string> = authHeader
|
|
698
699
|
? {
|
|
@@ -758,26 +759,25 @@ export async function bigBrainAPI<T = any>({
|
|
|
758
759
|
*
|
|
759
760
|
* Pass { throw: true } to throw ThrowingFetchErrors instead of exiting the process.
|
|
760
761
|
*/
|
|
761
|
-
function
|
|
762
|
+
function typedApiClientFactory<T>(
|
|
763
|
+
baseUrl: string,
|
|
764
|
+
fetchBuilder: (ctx: Context) => typeof fetch,
|
|
765
|
+
) {
|
|
762
766
|
return (ctx: Context, options: { throw?: boolean } = {}) => {
|
|
763
767
|
type Paths = T extends CliManagementPaths
|
|
764
768
|
? CliManagementPaths
|
|
765
769
|
: T extends PlatformManagementPaths
|
|
766
770
|
? PlatformManagementPaths
|
|
767
|
-
:
|
|
768
|
-
|
|
771
|
+
: T extends PlatformDeploymentPaths
|
|
772
|
+
? PlatformDeploymentPaths
|
|
773
|
+
: never;
|
|
774
|
+
const client = createClient<Paths>({
|
|
769
775
|
baseUrl,
|
|
770
|
-
fetch:
|
|
771
|
-
resource: Request,
|
|
772
|
-
options?: RequestInit,
|
|
773
|
-
): Promise<Response> => {
|
|
774
|
-
const fetch = await bigBrainFetch(ctx);
|
|
775
|
-
return fetch(resource, options);
|
|
776
|
-
},
|
|
776
|
+
fetch: fetchBuilder(ctx),
|
|
777
777
|
});
|
|
778
778
|
|
|
779
779
|
// Wrap the client with error handling - go back to proxy since middleware doesn't catch parsing errors
|
|
780
|
-
return new Proxy(
|
|
780
|
+
return new Proxy(client, {
|
|
781
781
|
get(target, prop) {
|
|
782
782
|
const originalMethod = target[prop as keyof typeof target];
|
|
783
783
|
|
|
@@ -810,13 +810,31 @@ function typedBigBrainClientFactory<T>(baseUrl: string) {
|
|
|
810
810
|
};
|
|
811
811
|
}
|
|
812
812
|
|
|
813
|
-
export const typedBigBrainClient =
|
|
814
|
-
|
|
813
|
+
export const typedBigBrainClient = typedApiClientFactory<CliManagementPaths>(
|
|
814
|
+
BIG_BRAIN_URL,
|
|
815
|
+
bigBrainFetch,
|
|
816
|
+
);
|
|
815
817
|
export const typedPlatformClient =
|
|
816
|
-
|
|
818
|
+
typedApiClientFactory<PlatformManagementPaths>(
|
|
817
819
|
PLATFORM_MANAGEMENT_API_URL,
|
|
820
|
+
bigBrainFetch,
|
|
818
821
|
);
|
|
819
822
|
|
|
823
|
+
export function typedDeploymentClient(
|
|
824
|
+
ctx: Context,
|
|
825
|
+
args: { deploymentUrl: string; adminKey: string },
|
|
826
|
+
options: { throw?: boolean } = {},
|
|
827
|
+
) {
|
|
828
|
+
return typedApiClientFactory<PlatformDeploymentPaths>(
|
|
829
|
+
`${args.deploymentUrl}/api/v1`,
|
|
830
|
+
(ctx) =>
|
|
831
|
+
deploymentFetch(ctx, {
|
|
832
|
+
deploymentUrl: args.deploymentUrl,
|
|
833
|
+
adminKey: args.adminKey,
|
|
834
|
+
}),
|
|
835
|
+
)(ctx, options);
|
|
836
|
+
}
|
|
837
|
+
|
|
820
838
|
export async function bigBrainAPIMaybeThrows({
|
|
821
839
|
ctx,
|
|
822
840
|
method,
|
|
@@ -828,7 +846,7 @@ export async function bigBrainAPIMaybeThrows({
|
|
|
828
846
|
path: string;
|
|
829
847
|
data?: any;
|
|
830
848
|
}): Promise<any> {
|
|
831
|
-
const fetch =
|
|
849
|
+
const fetch = bigBrainFetch(ctx);
|
|
832
850
|
const dataString =
|
|
833
851
|
data === undefined
|
|
834
852
|
? method === "POST"
|
|
@@ -894,19 +912,40 @@ export function waitUntilCalled(): [Promise<unknown>, () => void] {
|
|
|
894
912
|
return [waitPromise, () => onCalled(null)];
|
|
895
913
|
}
|
|
896
914
|
|
|
897
|
-
|
|
898
|
-
|
|
915
|
+
const BYTE_UNITS: [number, string][] = [
|
|
916
|
+
[1 << 30, "GiB"],
|
|
917
|
+
[1_000_000_000, "GB"],
|
|
918
|
+
[1 << 20, "MiB"],
|
|
919
|
+
[1_000_000, "MB"],
|
|
920
|
+
[1 << 10, "KiB"],
|
|
921
|
+
[1_000, "KB"],
|
|
922
|
+
];
|
|
923
|
+
|
|
924
|
+
/**
|
|
925
|
+
* Format a byte count into a human-friendly string.
|
|
926
|
+
*
|
|
927
|
+
* Picks the unit (binary or decimal) that divides most cleanly.
|
|
928
|
+
* Shows one decimal place only when it divides exactly (e.g. "4.1 MiB").
|
|
929
|
+
* Falls back to raw bytes when no unit divides cleanly.
|
|
930
|
+
*/
|
|
899
931
|
export function formatSize(n: number): string {
|
|
900
|
-
if (n
|
|
901
|
-
return
|
|
932
|
+
if (n === 0) {
|
|
933
|
+
return "0 bytes";
|
|
902
934
|
}
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
935
|
+
for (const [unitSize, unitName] of BYTE_UNITS) {
|
|
936
|
+
if (n < unitSize) {
|
|
937
|
+
continue;
|
|
938
|
+
}
|
|
939
|
+
if (n % unitSize === 0) {
|
|
940
|
+
return `${n / unitSize} ${unitName}`;
|
|
941
|
+
}
|
|
942
|
+
if ((n * 10) % unitSize === 0) {
|
|
943
|
+
const whole = Math.floor(n / unitSize);
|
|
944
|
+
const frac = Math.floor((n * 10) / unitSize) % 10;
|
|
945
|
+
return `${whole}.${frac} ${unitName}`;
|
|
946
|
+
}
|
|
908
947
|
}
|
|
909
|
-
return `${
|
|
948
|
+
return `${n} bytes`;
|
|
910
949
|
}
|
|
911
950
|
|
|
912
951
|
export function formatDuration(ms: number): string {
|
|
@@ -1236,7 +1275,7 @@ export function deploymentFetch(
|
|
|
1236
1275
|
adminKey: string;
|
|
1237
1276
|
onError?: (err: any) => void;
|
|
1238
1277
|
},
|
|
1239
|
-
): typeof
|
|
1278
|
+
): typeof fetch {
|
|
1240
1279
|
const { deploymentUrl, adminKey, onError } = options;
|
|
1241
1280
|
const onErrorWithAttempt = (err: any, attempt: number) => {
|
|
1242
1281
|
onError?.(err);
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = "1.
|
|
1
|
+
export const version = "1.35.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;
|