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
|
@@ -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
|
+
}
|
|
@@ -11,6 +11,7 @@ import { GenericDataModel } from "../data_model.js";
|
|
|
11
11
|
import {
|
|
12
12
|
ActionBuilder,
|
|
13
13
|
DefaultFunctionArgs,
|
|
14
|
+
FunctionVisibility,
|
|
14
15
|
GenericActionCtx,
|
|
15
16
|
GenericMutationCtx,
|
|
16
17
|
GenericQueryCtx,
|
|
@@ -39,10 +40,15 @@ import { parseArgs } from "../../common/index.js";
|
|
|
39
40
|
import { performAsyncSyscall } from "./syscall.js";
|
|
40
41
|
import { asObjectValidator } from "../../values/validator.js";
|
|
41
42
|
import { getFunctionAddress } from "../components/paths.js";
|
|
43
|
+
import {
|
|
44
|
+
setupQueryMeta,
|
|
45
|
+
setupMutationMeta,
|
|
46
|
+
setupActionMeta,
|
|
47
|
+
} from "./meta_impl.js";
|
|
42
48
|
|
|
43
49
|
async function invokeMutation<
|
|
44
50
|
F extends (ctx: GenericMutationCtx<GenericDataModel>, ...args: any) => any,
|
|
45
|
-
>(func: F, argsStr: string) {
|
|
51
|
+
>(func: F, argsStr: string, visibility: FunctionVisibility) {
|
|
46
52
|
// TODO(presley): Change the function signature and propagate the requestId from Rust.
|
|
47
53
|
// Ok, to mock it out for now, since queries are only running in V8.
|
|
48
54
|
const requestId = "";
|
|
@@ -52,6 +58,7 @@ async function invokeMutation<
|
|
|
52
58
|
auth: setupAuth(requestId),
|
|
53
59
|
storage: setupStorageWriter(requestId),
|
|
54
60
|
scheduler: setupMutationScheduler(),
|
|
61
|
+
meta: setupMutationMeta(visibility),
|
|
55
62
|
|
|
56
63
|
runQuery: (reference: any, args?: any) => runUdf("query", reference, args),
|
|
57
64
|
runMutation: (reference: any, args?: any) =>
|
|
@@ -247,7 +254,7 @@ export const mutationGeneric: MutationBuilder<any, "public"> = ((
|
|
|
247
254
|
assertNotBrowser();
|
|
248
255
|
func.isMutation = true;
|
|
249
256
|
func.isPublic = true;
|
|
250
|
-
func.invokeMutation = (argsStr) => invokeMutation(handler, argsStr);
|
|
257
|
+
func.invokeMutation = (argsStr) => invokeMutation(handler, argsStr, "public");
|
|
251
258
|
func.exportArgs = exportArgs(functionDefinition);
|
|
252
259
|
func.exportReturns = exportReturns(functionDefinition);
|
|
253
260
|
func._handler = handler;
|
|
@@ -308,7 +315,8 @@ export const internalMutationGeneric: MutationBuilder<any, "internal"> = ((
|
|
|
308
315
|
assertNotBrowser();
|
|
309
316
|
func.isMutation = true;
|
|
310
317
|
func.isInternal = true;
|
|
311
|
-
func.invokeMutation = (argsStr) =>
|
|
318
|
+
func.invokeMutation = (argsStr) =>
|
|
319
|
+
invokeMutation(handler, argsStr, "internal");
|
|
312
320
|
func.exportArgs = exportArgs(functionDefinition);
|
|
313
321
|
func.exportReturns = exportReturns(functionDefinition);
|
|
314
322
|
func._handler = handler;
|
|
@@ -317,7 +325,7 @@ export const internalMutationGeneric: MutationBuilder<any, "internal"> = ((
|
|
|
317
325
|
|
|
318
326
|
async function invokeQuery<
|
|
319
327
|
F extends (ctx: GenericQueryCtx<GenericDataModel>, ...args: any) => any,
|
|
320
|
-
>(func: F, argsStr: string) {
|
|
328
|
+
>(func: F, argsStr: string, visibility: FunctionVisibility) {
|
|
321
329
|
// TODO(presley): Change the function signature and propagate the requestId from Rust.
|
|
322
330
|
// Ok, to mock it out for now, since queries are only running in V8.
|
|
323
331
|
const requestId = "";
|
|
@@ -326,6 +334,7 @@ async function invokeQuery<
|
|
|
326
334
|
db: setupReader(),
|
|
327
335
|
auth: setupAuth(requestId),
|
|
328
336
|
storage: setupStorageReader(requestId),
|
|
337
|
+
meta: setupQueryMeta(visibility),
|
|
329
338
|
runQuery: (reference: any, args?: any) => runUdf("query", reference, args),
|
|
330
339
|
};
|
|
331
340
|
const result = await invokeFunction(func, queryCtx, args as any);
|
|
@@ -403,7 +412,7 @@ export const queryGeneric: QueryBuilder<any, "public"> = ((
|
|
|
403
412
|
assertNotBrowser();
|
|
404
413
|
func.isQuery = true;
|
|
405
414
|
func.isPublic = true;
|
|
406
|
-
func.invokeQuery = (argsStr) => invokeQuery(handler, argsStr);
|
|
415
|
+
func.invokeQuery = (argsStr) => invokeQuery(handler, argsStr, "public");
|
|
407
416
|
func.exportArgs = exportArgs(functionDefinition);
|
|
408
417
|
func.exportReturns = exportReturns(functionDefinition);
|
|
409
418
|
func._handler = handler;
|
|
@@ -470,7 +479,8 @@ export const internalQueryGeneric: QueryBuilder<any, "internal"> = ((
|
|
|
470
479
|
assertNotBrowser();
|
|
471
480
|
func.isQuery = true;
|
|
472
481
|
func.isInternal = true;
|
|
473
|
-
func.invokeQuery = (argsStr) =>
|
|
482
|
+
func.invokeQuery = (argsStr) =>
|
|
483
|
+
invokeQuery(handler as any, argsStr, "internal");
|
|
474
484
|
func.exportArgs = exportArgs(functionDefinition);
|
|
475
485
|
func.exportReturns = exportReturns(functionDefinition);
|
|
476
486
|
func._handler = handler;
|
|
@@ -479,7 +489,7 @@ export const internalQueryGeneric: QueryBuilder<any, "internal"> = ((
|
|
|
479
489
|
|
|
480
490
|
async function invokeAction<
|
|
481
491
|
F extends (ctx: GenericActionCtx<GenericDataModel>, ...args: any) => any,
|
|
482
|
-
>(func: F, requestId: string, argsStr: string) {
|
|
492
|
+
>(func: F, requestId: string, argsStr: string, visibility: FunctionVisibility) {
|
|
483
493
|
const args = jsonToConvex(JSON.parse(argsStr));
|
|
484
494
|
const calls = setupActionCalls(requestId);
|
|
485
495
|
const ctx = {
|
|
@@ -488,6 +498,7 @@ async function invokeAction<
|
|
|
488
498
|
scheduler: setupActionScheduler(requestId),
|
|
489
499
|
storage: setupStorageActionWriter(requestId),
|
|
490
500
|
vectorSearch: setupActionVectorSearch(requestId) as any,
|
|
501
|
+
meta: setupActionMeta(visibility),
|
|
491
502
|
};
|
|
492
503
|
const result = await invokeFunction(func, ctx, args as any);
|
|
493
504
|
return JSON.stringify(convexToJson(result === undefined ? null : result));
|
|
@@ -577,7 +588,7 @@ export const actionGeneric: ActionBuilder<any, "public"> = ((
|
|
|
577
588
|
func.isAction = true;
|
|
578
589
|
func.isPublic = true;
|
|
579
590
|
func.invokeAction = (requestId, argsStr) =>
|
|
580
|
-
invokeAction(handler, requestId, argsStr);
|
|
591
|
+
invokeAction(handler, requestId, argsStr, "public");
|
|
581
592
|
func.exportArgs = exportArgs(functionDefinition);
|
|
582
593
|
func.exportReturns = exportReturns(functionDefinition);
|
|
583
594
|
func._handler = handler;
|
|
@@ -650,7 +661,7 @@ export const internalActionGeneric: ActionBuilder<any, "internal"> = ((
|
|
|
650
661
|
func.isAction = true;
|
|
651
662
|
func.isInternal = true;
|
|
652
663
|
func.invokeAction = (requestId, argsStr) =>
|
|
653
|
-
invokeAction(handler, requestId, argsStr);
|
|
664
|
+
invokeAction(handler, requestId, argsStr, "internal");
|
|
654
665
|
func.exportArgs = exportArgs(functionDefinition);
|
|
655
666
|
func.exportReturns = exportReturns(functionDefinition);
|
|
656
667
|
func._handler = handler;
|
|
@@ -670,6 +681,7 @@ async function invokeHttpAction<
|
|
|
670
681
|
storage: setupStorageActionWriter(requestId),
|
|
671
682
|
scheduler: setupActionScheduler(requestId),
|
|
672
683
|
vectorSearch: setupActionVectorSearch(requestId) as any,
|
|
684
|
+
meta: setupActionMeta("public"),
|
|
673
685
|
};
|
|
674
686
|
return await invokeFunction(func, ctx, [request]);
|
|
675
687
|
}
|
package/src/server/index.ts
CHANGED
|
@@ -103,6 +103,14 @@ export {
|
|
|
103
103
|
internalMutationGeneric,
|
|
104
104
|
internalQueryGeneric,
|
|
105
105
|
} from "./impl/registration_impl.js";
|
|
106
|
+
export type {
|
|
107
|
+
TransactionMetric,
|
|
108
|
+
TransactionMetrics,
|
|
109
|
+
FunctionMetadata,
|
|
110
|
+
QueryMeta,
|
|
111
|
+
MutationMeta,
|
|
112
|
+
ActionMeta,
|
|
113
|
+
} from "./meta.js";
|
|
106
114
|
export type { IndexRange, IndexRangeBuilder } from "./index_range_builder.js";
|
|
107
115
|
export * from "./pagination.js";
|
|
108
116
|
export type { OrderedQuery, Query, QueryInitializer } from "./query.js";
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { FunctionType } from "./api.js";
|
|
2
|
+
import { FunctionVisibility } from "./registration.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Used and remaining amounts for a single transaction limit.
|
|
6
|
+
*
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
export type TransactionMetric = {
|
|
10
|
+
used: number;
|
|
11
|
+
remaining: number;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The remaining headroom for a transaction before hitting limits.
|
|
16
|
+
*
|
|
17
|
+
* See https://docs.convex.dev/production/state/limits
|
|
18
|
+
*
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
export type TransactionMetrics = {
|
|
22
|
+
bytesRead: TransactionMetric;
|
|
23
|
+
bytesWritten: TransactionMetric;
|
|
24
|
+
databaseQueries: TransactionMetric;
|
|
25
|
+
documentsRead: TransactionMetric;
|
|
26
|
+
documentsWritten: TransactionMetric;
|
|
27
|
+
functionsScheduled: TransactionMetric;
|
|
28
|
+
scheduledFunctionArgsBytes: TransactionMetric;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Metadata about the currently executing Convex function.
|
|
33
|
+
*
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
export type FunctionMetadata = {
|
|
37
|
+
/**
|
|
38
|
+
* The name of the function, in the format `"path/to/module:functionName"`
|
|
39
|
+
*/
|
|
40
|
+
name: string;
|
|
41
|
+
/**
|
|
42
|
+
* The path of the component this function belongs to.
|
|
43
|
+
* This is an empty string `""` for the app.
|
|
44
|
+
*/
|
|
45
|
+
componentPath: string;
|
|
46
|
+
/** Whether it's a query, mutation, or action. */
|
|
47
|
+
type: FunctionType;
|
|
48
|
+
/** Whether the function is public or internal. */
|
|
49
|
+
visibility: FunctionVisibility;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Extra context available in Convex query functions.
|
|
54
|
+
*
|
|
55
|
+
* @public
|
|
56
|
+
*/
|
|
57
|
+
export interface QueryMeta {
|
|
58
|
+
getFunctionMetadata(): Promise<FunctionMetadata>;
|
|
59
|
+
getTransactionMetrics(): Promise<TransactionMetrics>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Extra context available in Convex mutation functions.
|
|
64
|
+
*
|
|
65
|
+
* @public
|
|
66
|
+
*/
|
|
67
|
+
export interface MutationMeta extends QueryMeta {}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Extra context available in Convex action functions.
|
|
71
|
+
*
|
|
72
|
+
* @public
|
|
73
|
+
*/
|
|
74
|
+
export interface ActionMeta {
|
|
75
|
+
getFunctionMetadata(): Promise<FunctionMetadata>;
|
|
76
|
+
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
StorageReader,
|
|
9
9
|
StorageWriter,
|
|
10
10
|
} from "./index.js";
|
|
11
|
+
import { ActionMeta, MutationMeta, QueryMeta } from "./meta.js";
|
|
11
12
|
import {
|
|
12
13
|
FunctionReference,
|
|
13
14
|
FunctionReturnType,
|
|
@@ -147,6 +148,9 @@ export interface GenericMutationCtx<DataModel extends GenericDataModel> {
|
|
|
147
148
|
mutation: Mutation,
|
|
148
149
|
...args: OptionalRestArgs<Mutation>
|
|
149
150
|
) => Promise<FunctionReturnType<Mutation>>;
|
|
151
|
+
|
|
152
|
+
/** @internal */
|
|
153
|
+
meta: MutationMeta;
|
|
150
154
|
}
|
|
151
155
|
|
|
152
156
|
/**
|
|
@@ -238,6 +242,9 @@ export interface GenericQueryCtx<DataModel extends GenericDataModel> {
|
|
|
238
242
|
query: Query,
|
|
239
243
|
...args: OptionalRestArgs<Query>
|
|
240
244
|
) => Promise<FunctionReturnType<Query>>;
|
|
245
|
+
|
|
246
|
+
/** @internal */
|
|
247
|
+
meta: QueryMeta;
|
|
241
248
|
}
|
|
242
249
|
|
|
243
250
|
/**
|
|
@@ -398,6 +405,9 @@ export interface GenericActionCtx<DataModel extends GenericDataModel> {
|
|
|
398
405
|
VectorSearchQuery<NamedTableInfo<DataModel, TableName>, IndexName>
|
|
399
406
|
>,
|
|
400
407
|
): Promise<Array<{ _id: Id<TableName>; _score: number }>>;
|
|
408
|
+
|
|
409
|
+
/** @internal */
|
|
410
|
+
meta: ActionMeta;
|
|
401
411
|
}
|
|
402
412
|
|
|
403
413
|
/**
|
|
@@ -7,8 +7,16 @@ import {
|
|
|
7
7
|
defineSchema,
|
|
8
8
|
defineTable,
|
|
9
9
|
DataModelFromSchemaDefinition,
|
|
10
|
+
GenericSchema,
|
|
11
|
+
SchemaDefinition,
|
|
10
12
|
} from "./schema.js";
|
|
11
13
|
import { v, Infer } from "../values/validator.js";
|
|
14
|
+
import {
|
|
15
|
+
AnyDataModel,
|
|
16
|
+
GenericDataModel,
|
|
17
|
+
IndexNames,
|
|
18
|
+
NamedTableInfo,
|
|
19
|
+
} from "./data_model.js";
|
|
12
20
|
|
|
13
21
|
describe("DataModelFromSchemaDefinition", () => {
|
|
14
22
|
test("defineSchema produces the correct data model for basic types", () => {
|
|
@@ -405,7 +413,7 @@ describe("DataModelFromSchemaDefinition", () => {
|
|
|
405
413
|
[tableName: string]: {
|
|
406
414
|
document: any;
|
|
407
415
|
fieldPaths: string;
|
|
408
|
-
indexes:
|
|
416
|
+
indexes: SystemIndexes;
|
|
409
417
|
searchIndexes: {};
|
|
410
418
|
vectorIndexes: {};
|
|
411
419
|
};
|
|
@@ -890,6 +898,75 @@ describe("defineSchema/defineTable expose table validators", () => {
|
|
|
890
898
|
});
|
|
891
899
|
});
|
|
892
900
|
|
|
901
|
+
describe("GenericSchema assignability", () => {
|
|
902
|
+
test("DataModelFromSchemaDefinition<GenericSchema> extends GenericDataModel", () => {
|
|
903
|
+
type GenericDM = DataModelFromSchemaDefinition<
|
|
904
|
+
SchemaDefinition<GenericSchema, boolean>
|
|
905
|
+
>;
|
|
906
|
+
type _check = GenericDM extends GenericDataModel ? true : false;
|
|
907
|
+
assert<Equals<_check, true>>();
|
|
908
|
+
});
|
|
909
|
+
|
|
910
|
+
test("a specific schema’s DataModel extends GenericDataModel", () => {
|
|
911
|
+
const specificSchema = defineSchema({
|
|
912
|
+
users: defineTable({ name: v.string() }).index("by_name", ["name"]),
|
|
913
|
+
});
|
|
914
|
+
type SpecificDM = DataModelFromSchemaDefinition<typeof specificSchema>;
|
|
915
|
+
|
|
916
|
+
// This is the key assignability check: specific DataModels must extend
|
|
917
|
+
// GenericDataModel so that generic code can accept any schema.
|
|
918
|
+
type _check = SpecificDM extends GenericDataModel ? true : false;
|
|
919
|
+
assert<Equals<_check, true>>();
|
|
920
|
+
});
|
|
921
|
+
|
|
922
|
+
test("SchemaDefinition<SpecificSchema> extends SchemaDefinition<GenericSchema, boolean>", () => {
|
|
923
|
+
const specificSchema = defineSchema({
|
|
924
|
+
messages: defineTable({ body: v.string() }),
|
|
925
|
+
});
|
|
926
|
+
type SpecificSD = typeof specificSchema;
|
|
927
|
+
type GenericSD = SchemaDefinition<GenericSchema, boolean>;
|
|
928
|
+
|
|
929
|
+
type _check = SpecificSD extends GenericSD ? true : false;
|
|
930
|
+
assert<Equals<_check, true>>();
|
|
931
|
+
});
|
|
932
|
+
|
|
933
|
+
test("specific DM from boolean-strict schema extends generic DM", () => {
|
|
934
|
+
// This mirrors the convexTest() return type: Schema is specific, but
|
|
935
|
+
// StrictTableNameTypes is widened to boolean.
|
|
936
|
+
const specificSchema = defineSchema({
|
|
937
|
+
users: defineTable({ name: v.string() }).index("by_name", ["name"]),
|
|
938
|
+
});
|
|
939
|
+
type SpecificDM = DataModelFromSchemaDefinition<
|
|
940
|
+
SchemaDefinition<(typeof specificSchema)["tables"], boolean>
|
|
941
|
+
>;
|
|
942
|
+
type GenericDM = DataModelFromSchemaDefinition<
|
|
943
|
+
SchemaDefinition<GenericSchema, boolean>
|
|
944
|
+
>;
|
|
945
|
+
|
|
946
|
+
// The specific DM must extend the generic DM for TestConvex covariance.
|
|
947
|
+
type _check = SpecificDM extends GenericDM ? true : false;
|
|
948
|
+
assert<Equals<_check, true>>();
|
|
949
|
+
});
|
|
950
|
+
|
|
951
|
+
test("AnyDataModel exposes system indexes", () => {
|
|
952
|
+
// AnyDataModel is used as the DataModel when no schema is defined.
|
|
953
|
+
// Verify that system indexes (by_id, by_creation_time) are available,
|
|
954
|
+
// since every table always has them.
|
|
955
|
+
type AnyTable = NamedTableInfo<AnyDataModel, string>;
|
|
956
|
+
type AnyIndexNames = IndexNames<AnyTable>;
|
|
957
|
+
type _check = "by_id" | "by_creation_time" extends AnyIndexNames
|
|
958
|
+
? true
|
|
959
|
+
: false;
|
|
960
|
+
assert<Equals<_check, true>>();
|
|
961
|
+
});
|
|
962
|
+
|
|
963
|
+
// SpecificDM extends GenericDM because:
|
|
964
|
+
// 1. GenericSchema uses TableDefinition defaults (Validator<any,any,any>)
|
|
965
|
+
// producing document: any and fieldPaths: any
|
|
966
|
+
// 2. AnyDataModel includes SystemIndexes, so the loose variant's index
|
|
967
|
+
// signature satisfies GenericDM's SystemIndexes requirement
|
|
968
|
+
});
|
|
969
|
+
|
|
893
970
|
test("defineTable fails if it can’t export the validator", () => {
|
|
894
971
|
const table = defineTable(
|
|
895
972
|
// @ts-expect-error
|