convex 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +98 -43
- package/dist/browser.bundle.js +13 -10
- package/dist/browser.bundle.js.map +3 -3
- package/dist/cjs/browser/index-node.js +3 -1
- package/dist/cjs/browser/index.js +3 -1
- package/dist/cjs/browser/index.js.map +2 -2
- package/dist/cjs/browser/query_options.js.map +2 -2
- package/dist/cjs/browser/sync/authentication_manager.js +4 -1
- package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
- package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
- package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/cjs/cli/aiFiles.js +39 -20
- package/dist/cjs/cli/aiFiles.js.map +3 -3
- package/dist/cjs/cli/codegen_templates/readme.js +14 -1
- package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
- package/dist/cjs/cli/configure.js +34 -32
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +7 -8
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentCreate.js +225 -40
- package/dist/cjs/cli/deploymentCreate.js.map +3 -3
- package/dist/cjs/cli/deploymentSelect.js +14 -13
- package/dist/cjs/cli/deploymentSelect.js.map +2 -2
- package/dist/cjs/cli/dev.js +30 -11
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/docs.js +1 -1
- package/dist/cjs/cli/docs.js.map +2 -2
- package/dist/cjs/cli/init.js +1 -1
- package/dist/cjs/cli/init.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js +73 -0
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js +73 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +58 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/index.js +215 -0
- package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js +196 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
- package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/status.js +198 -0
- package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js +128 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/cjs/cli/lib/api.js +70 -7
- package/dist/cjs/cli/lib/api.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +10 -6
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +43 -7
- package/dist/cjs/cli/lib/config.js.map +3 -3
- package/dist/cjs/cli/lib/deploy2.js +9 -26
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
- package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +162 -117
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/env.js +1 -13
- package/dist/cjs/cli/lib/env.js.map +2 -2
- package/dist/cjs/cli/lib/expiration.js +104 -0
- package/dist/cjs/cli/lib/expiration.js.map +7 -0
- package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
- package/dist/cjs/cli/lib/init.js +4 -3
- package/dist/cjs/cli/lib/init.js.map +2 -2
- package/dist/cjs/cli/lib/insights.js +1 -1
- package/dist/cjs/cli/lib/insights.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/anonymous.js +15 -8
- package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
- package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
- package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/cjs/cli/lib/updates.js +12 -13
- package/dist/cjs/cli/lib/updates.js.map +2 -2
- package/dist/cjs/cli/lib/usage.js +2 -1
- package/dist/cjs/cli/lib/usage.js.map +2 -2
- package/dist/cjs/cli/lib/utils/prompts.js +2 -1
- package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +46 -20
- package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
- package/dist/cjs/cli/lib/versionApi.js +7 -4
- package/dist/cjs/cli/lib/versionApi.js.map +2 -2
- package/dist/cjs/cli/lib/workos/workos.js +4 -6
- package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react/client.js +43 -6
- package/dist/cjs/react/client.js.map +2 -2
- package/dist/cjs/react/index.js +2 -0
- package/dist/cjs/react/index.js.map +2 -2
- package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/cjs/server/api.js.map +2 -2
- package/dist/cjs/server/components/definition.js.map +1 -1
- package/dist/cjs/server/components/index.js +40 -4
- package/dist/cjs/server/components/index.js.map +2 -2
- package/dist/cjs/server/data_model.js.map +1 -1
- package/dist/cjs/server/impl/meta_impl.js +78 -0
- package/dist/cjs/server/impl/meta_impl.js.map +7 -0
- package/dist/cjs/server/impl/registration_impl.js +16 -11
- package/dist/cjs/server/impl/registration_impl.js.map +2 -2
- package/dist/cjs/server/index.js.map +2 -2
- package/dist/cjs/server/meta.js +17 -0
- package/dist/cjs/server/meta.js.map +7 -0
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs-types/browser/index.d.ts +1 -0
- package/dist/cjs-types/browser/index.d.ts.map +1 -1
- package/dist/cjs-types/browser/query_options.d.ts +12 -9
- package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.test.d.ts +2 -0
- package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts +3 -1
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +6 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/api.d.ts +3 -3
- package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/command.d.ts +2 -1
- package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/config.d.ts +18 -6
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/env.d.ts +0 -4
- package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
- package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
- package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/react/client.d.ts +54 -2
- package/dist/cjs-types/react/client.d.ts.map +1 -1
- package/dist/cjs-types/react/index.d.ts +7 -2
- package/dist/cjs-types/react/index.d.ts.map +1 -1
- package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/cjs-types/server/api.d.ts +5 -1
- package/dist/cjs-types/server/api.d.ts.map +1 -1
- package/dist/cjs-types/server/components/definition.d.ts +1 -0
- package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
- package/dist/cjs-types/server/components/index.d.ts +5 -1
- package/dist/cjs-types/server/components/index.d.ts.map +1 -1
- package/dist/cjs-types/server/data_model.d.ts +2 -1
- package/dist/cjs-types/server/data_model.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/index.d.ts +1 -0
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts +72 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -0
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +2446 -1933
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/index-node.js +1 -0
- package/dist/esm/browser/index.js +1 -0
- package/dist/esm/browser/index.js.map +2 -2
- package/dist/esm/browser/query_options.js.map +2 -2
- package/dist/esm/browser/sync/authentication_manager.js +4 -1
- package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
- package/dist/esm/browser/sync/web_socket_manager.js +1 -7
- package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/esm/cli/aiFiles.js +41 -23
- package/dist/esm/cli/aiFiles.js.map +2 -2
- package/dist/esm/cli/codegen_templates/readme.js +14 -1
- package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
- package/dist/esm/cli/configure.js +35 -33
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +11 -10
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentCreate.js +238 -42
- package/dist/esm/cli/deploymentCreate.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +13 -12
- package/dist/esm/cli/deploymentSelect.js.map +2 -2
- package/dist/esm/cli/dev.js +34 -13
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/docs.js +1 -1
- package/dist/esm/cli/docs.js.map +2 -2
- package/dist/esm/cli/init.js +2 -2
- package/dist/esm/cli/init.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/agentsmd.js +56 -0
- package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js +56 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +35 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/index.js +193 -0
- package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/skills.js +163 -0
- package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/state.js +60 -0
- package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/status.js +178 -0
- package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/utils.js +97 -0
- package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/esm/cli/lib/api.js +70 -7
- package/dist/esm/cli/lib/api.js.map +2 -2
- package/dist/esm/cli/lib/command.js +10 -6
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/config.js +41 -6
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +13 -26
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +46 -2
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelector.js +1 -0
- package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +162 -118
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/env.js +0 -11
- package/dist/esm/cli/lib/env.js.map +2 -2
- package/dist/esm/cli/lib/expiration.js +80 -0
- package/dist/esm/cli/lib/expiration.js.map +7 -0
- package/dist/esm/cli/lib/init.js +4 -3
- package/dist/esm/cli/lib/init.js.map +2 -2
- package/dist/esm/cli/lib/insights.js +1 -1
- package/dist/esm/cli/lib/insights.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
- package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
- package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/run.js +1 -1
- package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
- package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
- package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/esm/cli/lib/updates.js +14 -12
- package/dist/esm/cli/lib/updates.js.map +2 -2
- package/dist/esm/cli/lib/usage.js +2 -1
- package/dist/esm/cli/lib/usage.js.map +2 -2
- package/dist/esm/cli/lib/utils/prompts.js +2 -1
- package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +45 -20
- package/dist/esm/cli/lib/utils/utils.js.map +3 -3
- package/dist/esm/cli/lib/versionApi.js +7 -4
- package/dist/esm/cli/lib/versionApi.js.map +2 -2
- package/dist/esm/cli/lib/workos/workos.js +4 -6
- package/dist/esm/cli/lib/workos/workos.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/client.js +43 -6
- package/dist/esm/react/client.js.map +2 -2
- package/dist/esm/react/index.js +1 -0
- package/dist/esm/react/index.js.map +2 -2
- package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/esm/server/api.js.map +2 -2
- package/dist/esm/server/components/index.js +40 -4
- package/dist/esm/server/components/index.js.map +2 -2
- package/dist/esm/server/impl/meta_impl.js +54 -0
- package/dist/esm/server/impl/meta_impl.js.map +7 -0
- package/dist/esm/server/impl/registration_impl.js +20 -11
- package/dist/esm/server/impl/registration_impl.js.map +2 -2
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/meta.js +2 -0
- package/dist/esm/server/meta.js.map +7 -0
- package/dist/esm-types/browser/index.d.ts +1 -0
- package/dist/esm-types/browser/index.d.ts.map +1 -1
- package/dist/esm-types/browser/query_options.d.ts +12 -9
- package/dist/esm-types/browser/query_options.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.test.d.ts +2 -0
- package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
- package/dist/esm-types/cli/deploy.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts +3 -1
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts +6 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/api.d.ts +3 -3
- package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/command.d.ts +2 -1
- package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/config.d.ts +18 -6
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/env.d.ts +0 -4
- package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
- package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/updates.d.ts +4 -3
- package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/react/client.d.ts +54 -2
- package/dist/esm-types/react/client.d.ts.map +1 -1
- package/dist/esm-types/react/index.d.ts +7 -2
- package/dist/esm-types/react/index.d.ts.map +1 -1
- package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/esm-types/server/api.d.ts +5 -1
- package/dist/esm-types/server/api.d.ts.map +1 -1
- package/dist/esm-types/server/components/definition.d.ts +1 -0
- package/dist/esm-types/server/components/definition.d.ts.map +1 -1
- package/dist/esm-types/server/components/index.d.ts +5 -1
- package/dist/esm-types/server/components/index.d.ts.map +1 -1
- package/dist/esm-types/server/data_model.d.ts +2 -1
- package/dist/esm-types/server/data_model.d.ts.map +1 -1
- package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/esm-types/server/index.d.ts +1 -0
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts +72 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -0
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/react.bundle.js +55 -15
- package/dist/react.bundle.js.map +3 -3
- package/package.json +11 -7
- package/schemas/convex.schema.json +22 -3
- package/src/browser/index.ts +3 -0
- package/src/browser/query_options.test.ts +0 -9
- package/src/browser/query_options.ts +36 -15
- package/src/browser/sync/authentication_manager.ts +9 -4
- package/src/browser/sync/client_node.test.ts +125 -0
- package/src/browser/sync/web_socket_manager.ts +1 -7
- package/src/cli/aiFiles.ts +56 -33
- package/src/cli/codegen_templates/readme.ts +14 -1
- package/src/cli/configure.test.ts +138 -0
- package/src/cli/configure.ts +62 -55
- package/src/cli/deploy.ts +12 -9
- package/src/cli/deploymentCreate.test.ts +349 -14
- package/src/cli/deploymentCreate.ts +268 -41
- package/src/cli/deploymentSelect.test.ts +136 -27
- package/src/cli/deploymentSelect.ts +50 -41
- package/src/cli/deploymentSelection.test.ts +399 -37
- package/src/cli/dev.ts +49 -14
- package/src/cli/docs.ts +1 -1
- package/src/cli/init.ts +2 -2
- package/src/cli/lib/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
- package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
- package/src/cli/lib/aiFiles/agentsmd.ts +81 -0
- package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
- package/src/cli/lib/aiFiles/claudemd.ts +81 -0
- package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
- package/src/cli/lib/aiFiles/guidelinesmd.test.ts +50 -0
- package/src/cli/lib/aiFiles/guidelinesmd.ts +49 -0
- package/src/cli/lib/{ai → aiFiles}/index.test.ts +343 -516
- package/src/cli/lib/aiFiles/index.ts +297 -0
- package/src/cli/lib/{ai → aiFiles}/integration.test.ts +195 -158
- package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
- package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +79 -31
- package/src/cli/lib/aiFiles/skills.ts +243 -0
- package/src/cli/lib/aiFiles/state.test.ts +280 -0
- package/src/cli/lib/aiFiles/state.ts +82 -0
- package/src/cli/lib/aiFiles/status.ts +246 -0
- package/src/cli/lib/aiFiles/utils.test.ts +50 -0
- package/src/cli/lib/aiFiles/utils.ts +191 -0
- package/src/cli/lib/api.ts +88 -7
- package/src/cli/lib/command.ts +18 -8
- package/src/cli/lib/config.test.ts +185 -8
- package/src/cli/lib/config.ts +73 -12
- package/src/cli/lib/deploy2.ts +14 -27
- package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
- package/src/cli/lib/deploymentSelection.ts +59 -6
- package/src/cli/lib/deploymentSelector.test.ts +6 -0
- package/src/cli/lib/deploymentSelector.ts +2 -0
- package/src/cli/lib/dev.ts +202 -153
- package/src/cli/lib/env.ts +0 -15
- package/src/cli/lib/expiration.test.ts +159 -0
- package/src/cli/lib/expiration.ts +124 -0
- package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
- package/src/cli/lib/init.ts +6 -2
- package/src/cli/lib/insights.ts +1 -1
- package/src/cli/lib/localDeployment/anonymous.ts +19 -9
- package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
- package/src/cli/lib/localDeployment/run.ts +1 -1
- package/src/cli/lib/localDeployment/upgrade.ts +12 -10
- package/src/cli/lib/localDeployment/utils.ts +12 -0
- package/src/cli/lib/mcp/tools/status.ts +1 -1
- package/src/cli/lib/updates.test.ts +97 -60
- package/src/cli/lib/updates.ts +17 -15
- package/src/cli/lib/usage.ts +3 -1
- package/src/cli/lib/utils/prompts.ts +2 -0
- package/src/cli/lib/utils/utils.test.ts +6 -6
- package/src/cli/lib/utils/utils.ts +66 -27
- package/src/cli/lib/versionApi.test.ts +13 -10
- package/src/cli/lib/versionApi.ts +13 -5
- package/src/cli/lib/workos/workos.ts +4 -5
- package/src/index.ts +1 -1
- package/src/react/client.test.tsx +65 -0
- package/src/react/client.ts +129 -13
- package/src/react/index.ts +9 -1
- package/src/react/use_query_object_options.test.ts +50 -0
- package/src/react/use_query_result.test.ts +41 -0
- package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
- package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
- package/src/server/api.ts +5 -1
- package/src/server/components/definition.ts +3 -0
- package/src/server/components/index.ts +62 -5
- package/src/server/data_model.ts +2 -1
- package/src/server/impl/meta_impl.ts +74 -0
- package/src/server/impl/registration_impl.ts +21 -9
- package/src/server/index.ts +8 -0
- package/src/server/meta.ts +76 -0
- package/src/server/registration.ts +10 -0
- package/src/server/schema.test.ts +78 -1
- package/dist/cjs/cli/lib/ai/config.js +0 -144
- package/dist/cjs/cli/lib/ai/config.js.map +0 -7
- package/dist/cjs/cli/lib/ai/index.js +0 -704
- package/dist/cjs/cli/lib/ai/index.js.map +0 -7
- package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
- package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/dist/esm/cli/lib/ai/config.js +0 -109
- package/dist/esm/cli/lib/ai/config.js.map +0 -7
- package/dist/esm/cli/lib/ai/index.js +0 -684
- package/dist/esm/cli/lib/ai/index.js.map +0 -7
- package/dist/esm/cli/lib/ai/paths.js.map +0 -7
- package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/src/cli/lib/ai/config.test.ts +0 -338
- package/src/cli/lib/ai/config.ts +0 -159
- package/src/cli/lib/ai/index.ts +0 -1006
- /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
- /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
package/src/cli/lib/api.ts
CHANGED
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
parseDeploymentSelector,
|
|
24
24
|
InProjectSelector,
|
|
25
25
|
} from "./deploymentSelector.js";
|
|
26
|
+
import { loadProjectLocalConfig } from "./localDeployment/filePaths.js";
|
|
26
27
|
import { chalkStderr } from "chalk";
|
|
27
28
|
export type DeploymentName = string;
|
|
28
29
|
export type CloudDeploymentType = "prod" | "dev" | "preview" | "custom";
|
|
@@ -104,7 +105,7 @@ export const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(
|
|
|
104
105
|
z.object({ kind: z.literal("deploymentName"), deploymentName: z.string() }),
|
|
105
106
|
z.object({ kind: z.literal("prod") }),
|
|
106
107
|
z.object({ kind: z.literal("implicitProd") }),
|
|
107
|
-
z.object({ kind: z.literal("
|
|
108
|
+
z.object({ kind: z.literal("unspecified") }),
|
|
108
109
|
z.object({
|
|
109
110
|
kind: z.literal("deploymentSelector"),
|
|
110
111
|
selector: z.string(),
|
|
@@ -152,7 +153,7 @@ export function deploymentSelectionWithinProjectFromOptions(
|
|
|
152
153
|
if (options.implicitProd) {
|
|
153
154
|
return { kind: "implicitProd" };
|
|
154
155
|
}
|
|
155
|
-
return { kind: "
|
|
156
|
+
return { kind: "unspecified" };
|
|
156
157
|
}
|
|
157
158
|
|
|
158
159
|
export async function validateDeploymentSelectionForExistingDeployment(
|
|
@@ -161,7 +162,7 @@ export async function validateDeploymentSelectionForExistingDeployment(
|
|
|
161
162
|
source: "selfHosted" | "deployKey" | "cliArgs",
|
|
162
163
|
) {
|
|
163
164
|
if (
|
|
164
|
-
deploymentSelection.kind === "
|
|
165
|
+
deploymentSelection.kind === "unspecified" ||
|
|
165
166
|
deploymentSelection.kind === "implicitProd"
|
|
166
167
|
) {
|
|
167
168
|
// These are both considered the "default" selection depending on the command, so this is always fine
|
|
@@ -421,6 +422,9 @@ async function fetchExistingDevDeploymentCredentialsOrCrash(
|
|
|
421
422
|
// Helpers for `loadSelectedDeploymentCredentials`
|
|
422
423
|
// ----------------------------------------------------------------------
|
|
423
424
|
|
|
425
|
+
// Returns the user's own dev deployment, which may be a local deployment
|
|
426
|
+
// if one is configured. Used for dev commands (including `npx convex dev`)
|
|
427
|
+
// when no specific deployment is specified.
|
|
424
428
|
async function handleOwnDev(
|
|
425
429
|
ctx: Context,
|
|
426
430
|
projectSelection: ProjectSelection,
|
|
@@ -595,7 +599,9 @@ async function fetchDeploymentCredentialsWithinCurrentProject(
|
|
|
595
599
|
deploymentType: DeploymentType;
|
|
596
600
|
}> {
|
|
597
601
|
switch (deploymentSelection.kind) {
|
|
598
|
-
case "
|
|
602
|
+
case "unspecified": {
|
|
603
|
+
// default to the user's default dev deployment
|
|
604
|
+
// TODO: this currently also handles local dev, but that should probably be split out into a different DeploymenSelection kind
|
|
599
605
|
return await handleOwnDev(ctx, projectSelection);
|
|
600
606
|
}
|
|
601
607
|
case "implicitProd":
|
|
@@ -659,7 +665,7 @@ async function resolveDeploymentNameByReference(
|
|
|
659
665
|
return await ctx.crash({
|
|
660
666
|
exitCode: 1,
|
|
661
667
|
errorType: "fatal",
|
|
662
|
-
printedMessage: `Deployment “${reference}” not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${
|
|
668
|
+
printedMessage: `Deployment “${reference}” not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${teamSlug}:${projectSlug}:${reference} --select`)}`,
|
|
663
669
|
errForSentry: err,
|
|
664
670
|
});
|
|
665
671
|
}
|
|
@@ -678,8 +684,31 @@ async function handleRefInProject(
|
|
|
678
684
|
deploymentType: DeploymentType;
|
|
679
685
|
}> {
|
|
680
686
|
switch (selector.kind) {
|
|
681
|
-
case "dev":
|
|
682
|
-
|
|
687
|
+
case "dev": {
|
|
688
|
+
const access = await checkAccessToSelectedProject(ctx, projectSelection);
|
|
689
|
+
if (access.kind !== "hasAccess") {
|
|
690
|
+
return await ctx.crash({
|
|
691
|
+
exitCode: 1,
|
|
692
|
+
errorType: "fatal",
|
|
693
|
+
printedMessage:
|
|
694
|
+
"You don't have access to the selected project. Run `npx convex dev` to select a different project.",
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
const deploymentName = await resolveDefaultCloudDevDeploymentName(
|
|
698
|
+
ctx,
|
|
699
|
+
access.teamSlug,
|
|
700
|
+
access.projectSlug,
|
|
701
|
+
);
|
|
702
|
+
// Pass teamAndProjectSlugs instead of the original projectSelection,
|
|
703
|
+
// because handleDeploymentName sends projectSelection to Big Brain's
|
|
704
|
+
// authorize_within_current_project endpoint, which doesn't understand
|
|
705
|
+
// deploymentType "local".
|
|
706
|
+
return await handleDeploymentName(ctx, deploymentName, {
|
|
707
|
+
kind: "teamAndProjectSlugs",
|
|
708
|
+
teamSlug: access.teamSlug,
|
|
709
|
+
projectSlug: access.projectSlug,
|
|
710
|
+
});
|
|
711
|
+
}
|
|
683
712
|
case "prod":
|
|
684
713
|
return await handleProd(ctx, projectSelection);
|
|
685
714
|
case "reference": {
|
|
@@ -721,6 +750,26 @@ async function handleDeploymentSelector(
|
|
|
721
750
|
parsed.deploymentName,
|
|
722
751
|
projectSelection,
|
|
723
752
|
);
|
|
753
|
+
case "local": {
|
|
754
|
+
const localConfig = loadProjectLocalConfig(ctx);
|
|
755
|
+
if (localConfig === null) {
|
|
756
|
+
return ctx.crash({
|
|
757
|
+
exitCode: 1,
|
|
758
|
+
errorType: "fatal",
|
|
759
|
+
printedMessage: `No local deployment found. Run ${chalkStderr.bold("npx convex deployment create local")} to create one.`,
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
const credentials = await loadLocalDeploymentCredentials(
|
|
763
|
+
ctx,
|
|
764
|
+
localConfig.deploymentName,
|
|
765
|
+
);
|
|
766
|
+
return {
|
|
767
|
+
deploymentName: localConfig.deploymentName,
|
|
768
|
+
adminKey: credentials.adminKey,
|
|
769
|
+
url: credentials.deploymentUrl,
|
|
770
|
+
deploymentType: "local",
|
|
771
|
+
};
|
|
772
|
+
}
|
|
724
773
|
case "inCurrentProject":
|
|
725
774
|
return await handleRefInProject(ctx, parsed.selector, projectSelection);
|
|
726
775
|
case "inProject": {
|
|
@@ -970,3 +1019,35 @@ export async function getTeamsForUser(ctx: Context) {
|
|
|
970
1019
|
);
|
|
971
1020
|
return teams;
|
|
972
1021
|
}
|
|
1022
|
+
|
|
1023
|
+
async function resolveDefaultCloudDevDeploymentName(
|
|
1024
|
+
ctx: Context,
|
|
1025
|
+
teamSlug: string,
|
|
1026
|
+
projectSlug: string,
|
|
1027
|
+
): Promise<string> {
|
|
1028
|
+
try {
|
|
1029
|
+
const result = await typedPlatformClient(ctx, { throw: true }).GET(
|
|
1030
|
+
"/teams/{team_id_or_slug}/projects/{project_slug}/deployment",
|
|
1031
|
+
{
|
|
1032
|
+
params: {
|
|
1033
|
+
path: { team_id_or_slug: teamSlug, project_slug: projectSlug },
|
|
1034
|
+
query: { defaultDev: true },
|
|
1035
|
+
},
|
|
1036
|
+
},
|
|
1037
|
+
);
|
|
1038
|
+
return result.data!.name;
|
|
1039
|
+
} catch (err) {
|
|
1040
|
+
if (
|
|
1041
|
+
err instanceof ThrowingFetchError &&
|
|
1042
|
+
err.serverErrorData?.code === "DeploymentNotFound"
|
|
1043
|
+
) {
|
|
1044
|
+
return await ctx.crash({
|
|
1045
|
+
exitCode: 1,
|
|
1046
|
+
errorType: "fatal",
|
|
1047
|
+
printedMessage: `You don’t have a personal cloud dev deployment in this project. Run ${chalkStderr.bold("npx convex deployment create --type dev --default")} to create one.`,
|
|
1048
|
+
errForSentry: err,
|
|
1049
|
+
});
|
|
1050
|
+
}
|
|
1051
|
+
return await logAndHandleFetchError(ctx, err);
|
|
1052
|
+
}
|
|
1053
|
+
}
|
package/src/cli/lib/command.ts
CHANGED
|
@@ -213,10 +213,14 @@ Command.prototype.addDeploymentSelectionOptions = function (
|
|
|
213
213
|
new Option(
|
|
214
214
|
"--deployment <deployment>",
|
|
215
215
|
action +
|
|
216
|
-
"
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
" a specific deployment. Accepts:\n" +
|
|
217
|
+
"• a deployment name (e.g. joyful-capybara-123)\n" +
|
|
218
|
+
"• a deployment ref (e.g. dev/james)\n" +
|
|
219
|
+
"• `dev` (for your personal dev deployment)\n" +
|
|
220
|
+
"• `prod` (for your project’s default production deployment)\n" +
|
|
221
|
+
"• `local` (for your local dev deployment)." +
|
|
222
|
+
"\nYou can also select deployments in other projects with `project-slug:ref` or `team-slug:project-slug:ref`.",
|
|
223
|
+
).conflicts(["--prod", "--preview-name", "--deployment-name", "--url"]),
|
|
220
224
|
)
|
|
221
225
|
.addOption(
|
|
222
226
|
new Option(
|
|
@@ -243,8 +247,9 @@ export async function normalizeDevOptions(
|
|
|
243
247
|
codegen: "enable" | "disable";
|
|
244
248
|
once?: boolean;
|
|
245
249
|
untilSuccess: boolean;
|
|
246
|
-
|
|
250
|
+
start?: string;
|
|
247
251
|
runSh?: string;
|
|
252
|
+
run?: string | undefined;
|
|
248
253
|
runComponent?: string;
|
|
249
254
|
tailLogs?: string | true;
|
|
250
255
|
traceEvents: boolean;
|
|
@@ -309,10 +314,10 @@ export async function normalizeDevOptions(
|
|
|
309
314
|
name: cmdOptions.run,
|
|
310
315
|
component: cmdOptions.runComponent,
|
|
311
316
|
}
|
|
312
|
-
: cmdOptions.runSh !== undefined
|
|
317
|
+
: (cmdOptions.start ?? cmdOptions.runSh) !== undefined
|
|
313
318
|
? {
|
|
314
319
|
kind: "shell",
|
|
315
|
-
command: cmdOptions.runSh
|
|
320
|
+
command: (cmdOptions.start ?? cmdOptions.runSh)!,
|
|
316
321
|
}
|
|
317
322
|
: undefined,
|
|
318
323
|
tailLogs:
|
|
@@ -333,7 +338,12 @@ Command.prototype.addDeployOptions = function () {
|
|
|
333
338
|
"--dry-run",
|
|
334
339
|
"Print out the generated configuration without deploying to your Convex deployment",
|
|
335
340
|
)
|
|
336
|
-
.
|
|
341
|
+
.addOption(
|
|
342
|
+
new Option(
|
|
343
|
+
"-y, --yes",
|
|
344
|
+
"Skip confirmation prompt when running interactively. Warning: this deploys to PRODUCTION. To deploy to your current dev environment, run npx convex dev --once",
|
|
345
|
+
).hideHelp(),
|
|
346
|
+
)
|
|
337
347
|
.addOption(
|
|
338
348
|
new Option(
|
|
339
349
|
"--typecheck <mode>",
|
|
@@ -1,10 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
vi,
|
|
3
|
+
test,
|
|
4
|
+
expect,
|
|
5
|
+
beforeEach,
|
|
6
|
+
afterEach,
|
|
7
|
+
describe,
|
|
8
|
+
MockInstance,
|
|
9
|
+
beforeAll,
|
|
10
|
+
} from "vitest";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import os from "os";
|
|
13
|
+
import path from "path";
|
|
2
14
|
import {
|
|
3
15
|
parseProjectConfig,
|
|
4
|
-
ProjectConfig,
|
|
5
|
-
|
|
16
|
+
type ProjectConfig,
|
|
17
|
+
ensureConvexFunctionsDir,
|
|
6
18
|
readProjectConfig,
|
|
7
19
|
resetUnknownKeyWarnings,
|
|
20
|
+
writeAiFilesConfig,
|
|
8
21
|
} from "./config.js";
|
|
9
22
|
import { Context, oneoffContext } from "../../bundler/context.js";
|
|
10
23
|
import { logFailure } from "../../bundler/log.js";
|
|
@@ -250,7 +263,7 @@ test("parseProjectConfig - top-level validation", async () => {
|
|
|
250
263
|
);
|
|
251
264
|
});
|
|
252
265
|
|
|
253
|
-
test("
|
|
266
|
+
test("ensureConvexFunctionsDir - creates functions directory", async () => {
|
|
254
267
|
let mkdirCalled = false;
|
|
255
268
|
let mkdirPath = "";
|
|
256
269
|
const testCtx = {
|
|
@@ -272,12 +285,12 @@ test("writeProjectConfig - creates functions directory", async () => {
|
|
|
272
285
|
codegen: { staticApi: false, staticDataModel: false },
|
|
273
286
|
};
|
|
274
287
|
|
|
275
|
-
await
|
|
288
|
+
await ensureConvexFunctionsDir(testCtx, config);
|
|
276
289
|
expect(mkdirCalled).toBe(true);
|
|
277
290
|
expect(mkdirPath).toMatch(/^my-functions[\\/]$/);
|
|
278
291
|
});
|
|
279
292
|
|
|
280
|
-
test("
|
|
293
|
+
test("ensureConvexFunctionsDir - does not write to convex.json", async () => {
|
|
281
294
|
let writeUtf8FileCalled = false;
|
|
282
295
|
const testCtx = {
|
|
283
296
|
...ctx,
|
|
@@ -299,7 +312,7 @@ test("writeProjectConfig - does not write to convex.json", async () => {
|
|
|
299
312
|
codegen: { staticApi: true, staticDataModel: true },
|
|
300
313
|
};
|
|
301
314
|
|
|
302
|
-
await
|
|
315
|
+
await ensureConvexFunctionsDir(testCtx, config);
|
|
303
316
|
expect(writeUtf8FileCalled).toBe(false);
|
|
304
317
|
});
|
|
305
318
|
|
|
@@ -327,7 +340,7 @@ test("readProjectConfig - returns defaults when file doesn't exist", async () =>
|
|
|
327
340
|
node: { externalPackages: [] },
|
|
328
341
|
generateCommonJSApi: false,
|
|
329
342
|
codegen: { staticApi: false, staticDataModel: false },
|
|
330
|
-
aiFiles: {
|
|
343
|
+
aiFiles: {},
|
|
331
344
|
});
|
|
332
345
|
});
|
|
333
346
|
|
|
@@ -431,6 +444,39 @@ test("parseProjectConfig - warns about unknown properties", async () => {
|
|
|
431
444
|
expect(stripVTControlCharacters(stderr5)).not.toContain("Unknown");
|
|
432
445
|
});
|
|
433
446
|
|
|
447
|
+
test("parseProjectConfig - aiFiles fields", async () => {
|
|
448
|
+
await assertParses(
|
|
449
|
+
{
|
|
450
|
+
functions: "convex/",
|
|
451
|
+
aiFiles: {
|
|
452
|
+
enabled: false,
|
|
453
|
+
disableStalenessMessage: true,
|
|
454
|
+
skills: {
|
|
455
|
+
agents: ["cursor", "windsurf"],
|
|
456
|
+
},
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
functions: "convex/",
|
|
461
|
+
aiFiles: {
|
|
462
|
+
enabled: false,
|
|
463
|
+
disableStalenessMessage: true,
|
|
464
|
+
skills: {
|
|
465
|
+
agents: ["cursor", "windsurf"],
|
|
466
|
+
},
|
|
467
|
+
},
|
|
468
|
+
codegen: {
|
|
469
|
+
staticApi: false,
|
|
470
|
+
staticDataModel: false,
|
|
471
|
+
},
|
|
472
|
+
generateCommonJSApi: false,
|
|
473
|
+
node: {
|
|
474
|
+
externalPackages: [],
|
|
475
|
+
},
|
|
476
|
+
},
|
|
477
|
+
);
|
|
478
|
+
});
|
|
479
|
+
|
|
434
480
|
// AuthKit configuration tests
|
|
435
481
|
test("parseProjectConfig - authKit basic valid configs", async () => {
|
|
436
482
|
// Basic config with no settings
|
|
@@ -850,3 +896,134 @@ test("parseProjectConfig - authKit preview and prod restrictions", async () => {
|
|
|
850
896
|
},
|
|
851
897
|
);
|
|
852
898
|
});
|
|
899
|
+
|
|
900
|
+
// ---------------------------------------------------------------------------
|
|
901
|
+
// writeAiFilesConfig
|
|
902
|
+
// ---------------------------------------------------------------------------
|
|
903
|
+
|
|
904
|
+
describe("writeAiFilesConfig", () => {
|
|
905
|
+
let tmpDir: string;
|
|
906
|
+
|
|
907
|
+
beforeEach(() => {
|
|
908
|
+
tmpDir = fs.mkdtempSync(`${os.tmpdir()}${path.sep}`);
|
|
909
|
+
});
|
|
910
|
+
|
|
911
|
+
afterEach(() => {
|
|
912
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
913
|
+
});
|
|
914
|
+
|
|
915
|
+
test("creates convex.json with $schema when file does not exist", async () => {
|
|
916
|
+
await writeAiFilesConfig({
|
|
917
|
+
projectDir: tmpDir,
|
|
918
|
+
aiFiles: { enabled: false },
|
|
919
|
+
});
|
|
920
|
+
|
|
921
|
+
const written = JSON.parse(
|
|
922
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
923
|
+
);
|
|
924
|
+
expect(written.$schema).toBe(
|
|
925
|
+
"node_modules/convex/schemas/convex.schema.json",
|
|
926
|
+
);
|
|
927
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
928
|
+
});
|
|
929
|
+
|
|
930
|
+
test("writes aiFiles as-is without merging sub-keys", async () => {
|
|
931
|
+
fs.writeFileSync(
|
|
932
|
+
path.join(tmpDir, "convex.json"),
|
|
933
|
+
JSON.stringify({ aiFiles: { disableStalenessMessage: true } }, null, 2),
|
|
934
|
+
"utf8",
|
|
935
|
+
);
|
|
936
|
+
|
|
937
|
+
await writeAiFilesConfig({
|
|
938
|
+
projectDir: tmpDir,
|
|
939
|
+
aiFiles: { enabled: false },
|
|
940
|
+
});
|
|
941
|
+
|
|
942
|
+
const written = JSON.parse(
|
|
943
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
944
|
+
);
|
|
945
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
test("preserves other existing fields in convex.json", async () => {
|
|
949
|
+
fs.writeFileSync(
|
|
950
|
+
path.join(tmpDir, "convex.json"),
|
|
951
|
+
JSON.stringify(
|
|
952
|
+
{
|
|
953
|
+
functions: "src/convex/",
|
|
954
|
+
customKey: "preserved",
|
|
955
|
+
aiFiles: { skills: { agents: ["cursor"] } },
|
|
956
|
+
},
|
|
957
|
+
null,
|
|
958
|
+
2,
|
|
959
|
+
),
|
|
960
|
+
"utf8",
|
|
961
|
+
);
|
|
962
|
+
|
|
963
|
+
await writeAiFilesConfig({
|
|
964
|
+
projectDir: tmpDir,
|
|
965
|
+
aiFiles: { enabled: false },
|
|
966
|
+
});
|
|
967
|
+
|
|
968
|
+
const written = JSON.parse(
|
|
969
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
970
|
+
);
|
|
971
|
+
expect(written.functions).toBe("src/convex/");
|
|
972
|
+
expect(written.customKey).toBe("preserved");
|
|
973
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
974
|
+
});
|
|
975
|
+
|
|
976
|
+
test("removes aiFiles key when undefined", async () => {
|
|
977
|
+
fs.writeFileSync(
|
|
978
|
+
path.join(tmpDir, "convex.json"),
|
|
979
|
+
JSON.stringify({ aiFiles: { enabled: false } }, null, 2),
|
|
980
|
+
"utf8",
|
|
981
|
+
);
|
|
982
|
+
|
|
983
|
+
await writeAiFilesConfig({
|
|
984
|
+
projectDir: tmpDir,
|
|
985
|
+
aiFiles: undefined,
|
|
986
|
+
});
|
|
987
|
+
|
|
988
|
+
const written = JSON.parse(
|
|
989
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
990
|
+
);
|
|
991
|
+
expect(written.aiFiles).toBeUndefined();
|
|
992
|
+
});
|
|
993
|
+
|
|
994
|
+
test("preserves existing $schema when file already has one", async () => {
|
|
995
|
+
fs.writeFileSync(
|
|
996
|
+
path.join(tmpDir, "convex.json"),
|
|
997
|
+
JSON.stringify({ $schema: "./custom-schema.json" }, null, 2),
|
|
998
|
+
"utf8",
|
|
999
|
+
);
|
|
1000
|
+
|
|
1001
|
+
await writeAiFilesConfig({
|
|
1002
|
+
projectDir: tmpDir,
|
|
1003
|
+
aiFiles: undefined,
|
|
1004
|
+
});
|
|
1005
|
+
|
|
1006
|
+
const written = JSON.parse(
|
|
1007
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
1008
|
+
);
|
|
1009
|
+
expect(written.$schema).toBe("./custom-schema.json");
|
|
1010
|
+
});
|
|
1011
|
+
|
|
1012
|
+
test("handles invalid JSON in existing convex.json gracefully", async () => {
|
|
1013
|
+
fs.writeFileSync(
|
|
1014
|
+
path.join(tmpDir, "convex.json"),
|
|
1015
|
+
"not valid json",
|
|
1016
|
+
"utf8",
|
|
1017
|
+
);
|
|
1018
|
+
|
|
1019
|
+
await writeAiFilesConfig({
|
|
1020
|
+
projectDir: tmpDir,
|
|
1021
|
+
aiFiles: { enabled: false },
|
|
1022
|
+
});
|
|
1023
|
+
|
|
1024
|
+
const written = JSON.parse(
|
|
1025
|
+
fs.readFileSync(path.join(tmpDir, "convex.json"), "utf8"),
|
|
1026
|
+
);
|
|
1027
|
+
expect(written.aiFiles).toEqual({ enabled: false });
|
|
1028
|
+
});
|
|
1029
|
+
});
|
package/src/cli/lib/config.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { chalkStderr } from "chalk";
|
|
2
2
|
import path from "path";
|
|
3
|
+
// eslint-disable-next-line no-restricted-imports
|
|
4
|
+
import { promises as nodeFs } from "fs";
|
|
3
5
|
import { z } from "zod";
|
|
4
6
|
import { Context } from "../../bundler/context.js";
|
|
5
7
|
import { TypescriptCompiler } from "./typecheck.js";
|
|
@@ -102,8 +104,16 @@ export interface ProjectConfig {
|
|
|
102
104
|
|
|
103
105
|
// Convex AI files user preferences.
|
|
104
106
|
aiFiles?: {
|
|
105
|
-
// When
|
|
107
|
+
// When false, disables all AI files prompts and staleness messages.
|
|
108
|
+
enabled?: boolean;
|
|
109
|
+
// @deprecated use `enabled` instead.
|
|
106
110
|
disableStalenessMessage?: boolean;
|
|
111
|
+
// Configuration for agent skills installed by Convex.
|
|
112
|
+
skills?: {
|
|
113
|
+
// List of agents to install skills for (e.g. 'claude-code', 'codex', 'cursor').
|
|
114
|
+
// Defaults to ['claude-code', 'codex'].
|
|
115
|
+
agents?: string[];
|
|
116
|
+
};
|
|
107
117
|
};
|
|
108
118
|
}
|
|
109
119
|
|
|
@@ -131,9 +141,9 @@ export function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {
|
|
|
131
141
|
return projectConfig.codegen.fileType === "ts";
|
|
132
142
|
}
|
|
133
143
|
|
|
134
|
-
/** Whether the new component API import style should be used
|
|
144
|
+
/** Whether the new component API import style should be used */
|
|
135
145
|
export function usesComponentApiImports(projectConfig: ProjectConfig): boolean {
|
|
136
|
-
return projectConfig.codegen.legacyComponentApi
|
|
146
|
+
return projectConfig.codegen.legacyComponentApi !== true;
|
|
137
147
|
}
|
|
138
148
|
|
|
139
149
|
/**
|
|
@@ -289,7 +299,13 @@ const BundlerSchema = z.object({
|
|
|
289
299
|
});
|
|
290
300
|
|
|
291
301
|
const AiFilesSchema = z.object({
|
|
292
|
-
|
|
302
|
+
enabled: z.boolean().optional(),
|
|
303
|
+
disableStalenessMessage: z.boolean().optional(),
|
|
304
|
+
skills: z
|
|
305
|
+
.object({
|
|
306
|
+
agents: z.array(z.string()).optional(),
|
|
307
|
+
})
|
|
308
|
+
.optional(),
|
|
293
309
|
});
|
|
294
310
|
|
|
295
311
|
const refineToObject = <T extends z.ZodTypeAny>(schema: T) =>
|
|
@@ -553,9 +569,7 @@ export async function readProjectConfig(ctx: Context): Promise<{
|
|
|
553
569
|
staticApi: false,
|
|
554
570
|
staticDataModel: false,
|
|
555
571
|
},
|
|
556
|
-
aiFiles: {
|
|
557
|
-
disableStalenessMessage: false,
|
|
558
|
-
},
|
|
572
|
+
aiFiles: {},
|
|
559
573
|
},
|
|
560
574
|
configPath: configName(),
|
|
561
575
|
};
|
|
@@ -743,12 +757,10 @@ export async function readConfig(
|
|
|
743
757
|
/**
|
|
744
758
|
* Ensure the functions directory exists.
|
|
745
759
|
*
|
|
746
|
-
* Note:
|
|
747
|
-
*
|
|
748
|
-
* users to maintain their preferred formatting and any comments they may add
|
|
749
|
-
* (if we later support JSONC parsing).
|
|
760
|
+
* Note: convex.json is treated as user-owned and is not modified by the CLI.
|
|
761
|
+
* Use writeAiFilesConfig() to explicitly patch the aiFiles section.
|
|
750
762
|
*/
|
|
751
|
-
export async function
|
|
763
|
+
export async function ensureConvexFunctionsDir(
|
|
752
764
|
ctx: Context,
|
|
753
765
|
projectConfig: ProjectConfig,
|
|
754
766
|
) {
|
|
@@ -1006,3 +1018,52 @@ export async function handlePushConfigError(
|
|
|
1006
1018
|
logFailure(defaultMessage);
|
|
1007
1019
|
return await logAndHandleFetchError(ctx, error);
|
|
1008
1020
|
}
|
|
1021
|
+
|
|
1022
|
+
export type AiFilesProjectConfig = NonNullable<ProjectConfig["aiFiles"]>;
|
|
1023
|
+
|
|
1024
|
+
function tryParseJson(raw: string): unknown {
|
|
1025
|
+
try {
|
|
1026
|
+
return JSON.parse(raw);
|
|
1027
|
+
} catch {
|
|
1028
|
+
return {};
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
function toRecord(val: unknown): Record<string, unknown> {
|
|
1033
|
+
if (val !== null && typeof val === "object" && !Array.isArray(val))
|
|
1034
|
+
return val as Record<string, unknown>;
|
|
1035
|
+
return {};
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
/**
|
|
1039
|
+
* Write the `aiFiles` section of `convex.json`, preserving all other keys.
|
|
1040
|
+
* Writes the given object as-is with no merging or default logic.
|
|
1041
|
+
* If `aiFiles` is undefined, the key is removed from the file.
|
|
1042
|
+
*/
|
|
1043
|
+
export async function writeAiFilesConfig({
|
|
1044
|
+
projectDir,
|
|
1045
|
+
aiFiles,
|
|
1046
|
+
}: {
|
|
1047
|
+
projectDir: string;
|
|
1048
|
+
aiFiles: AiFilesProjectConfig | undefined;
|
|
1049
|
+
}): Promise<void> {
|
|
1050
|
+
const filePath = path.join(projectDir, "convex.json");
|
|
1051
|
+
const raw = await nodeFs.readFile(filePath, "utf8").catch(() => null);
|
|
1052
|
+
const base = toRecord(raw !== null ? tryParseJson(raw) : {});
|
|
1053
|
+
|
|
1054
|
+
const { $schema, aiFiles: _existing, ...rest } = base;
|
|
1055
|
+
|
|
1056
|
+
const hasContent = aiFiles !== undefined && Object.keys(aiFiles).length > 0;
|
|
1057
|
+
|
|
1058
|
+
const next: Record<string, unknown> = {
|
|
1059
|
+
$schema: $schema ?? "node_modules/convex/schemas/convex.schema.json",
|
|
1060
|
+
...rest,
|
|
1061
|
+
...(hasContent ? { aiFiles } : {}),
|
|
1062
|
+
};
|
|
1063
|
+
|
|
1064
|
+
await nodeFs.writeFile(
|
|
1065
|
+
filePath,
|
|
1066
|
+
JSON.stringify(next, null, 2) + "\n",
|
|
1067
|
+
"utf8",
|
|
1068
|
+
);
|
|
1069
|
+
}
|
package/src/cli/lib/deploy2.ts
CHANGED
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
showSpinner,
|
|
9
9
|
} from "../../bundler/log.js";
|
|
10
10
|
import { spawnSync } from "child_process";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
deploymentFetch,
|
|
13
|
+
logAndHandleFetchError,
|
|
14
|
+
typedDeploymentClient,
|
|
15
|
+
} from "./utils/utils.js";
|
|
12
16
|
import {
|
|
13
17
|
EvaluatePushResponse,
|
|
14
18
|
evaluatePushResponse,
|
|
@@ -31,7 +35,6 @@ import { PushOptions } from "./components.js";
|
|
|
31
35
|
import { DeploymentType } from "./api.js";
|
|
32
36
|
import { runPush } from "./components.js";
|
|
33
37
|
import { suggestedEnvVarNames } from "./envvars.js";
|
|
34
|
-
import { runSystemQuery } from "./run.js";
|
|
35
38
|
import {
|
|
36
39
|
handlePushConfigError,
|
|
37
40
|
readProjectConfig,
|
|
@@ -40,7 +43,6 @@ import {
|
|
|
40
43
|
import { deploymentDashboardUrlPage } from "./dashboard.js";
|
|
41
44
|
import { addProgressLinkIfSlow } from "./indexes.js";
|
|
42
45
|
import { ensureAuthKitProvisionedBeforeBuild } from "./workos/workos.js";
|
|
43
|
-
import { fetchDeploymentCanonicalSiteUrl } from "./env.js";
|
|
44
46
|
|
|
45
47
|
const brotli = promisify(zlib.brotliCompress);
|
|
46
48
|
|
|
@@ -485,14 +487,10 @@ export async function runCommand(
|
|
|
485
487
|
deploymentUrl: options.url,
|
|
486
488
|
adminKey: options.adminKey,
|
|
487
489
|
};
|
|
488
|
-
const
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
);
|
|
492
|
-
const canonicalSiteUrl = await fetchDeploymentCanonicalSiteUrl(
|
|
493
|
-
ctx,
|
|
494
|
-
deployment,
|
|
495
|
-
);
|
|
490
|
+
const {
|
|
491
|
+
convexCloudUrl: canonicalCloudUrl,
|
|
492
|
+
convexSiteUrl: canonicalSiteUrl,
|
|
493
|
+
} = await fetchDeploymentCanonicalUrls(ctx, deployment);
|
|
496
494
|
|
|
497
495
|
const env = { ...process.env };
|
|
498
496
|
env[urlVar] = canonicalCloudUrl;
|
|
@@ -517,22 +515,11 @@ export async function runCommand(
|
|
|
517
515
|
);
|
|
518
516
|
}
|
|
519
517
|
|
|
520
|
-
export async function
|
|
518
|
+
export async function fetchDeploymentCanonicalUrls(
|
|
521
519
|
ctx: Context,
|
|
522
520
|
options: { deploymentUrl: string; adminKey: string },
|
|
523
|
-
): Promise<string> {
|
|
524
|
-
const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
componentPath: undefined,
|
|
528
|
-
args: {},
|
|
529
|
-
});
|
|
530
|
-
if (typeof result !== "string") {
|
|
531
|
-
return await ctx.crash({
|
|
532
|
-
exitCode: 1,
|
|
533
|
-
errorType: "invalid filesystem or env vars",
|
|
534
|
-
printedMessage: "Invalid process.env.CONVEX_CLOUD_URL",
|
|
535
|
-
});
|
|
536
|
-
}
|
|
537
|
-
return result;
|
|
521
|
+
): Promise<{ convexCloudUrl: string; convexSiteUrl: string }> {
|
|
522
|
+
const client = typedDeploymentClient(ctx, options);
|
|
523
|
+
const result = await client.GET("/get_canonical_urls");
|
|
524
|
+
return result.data!;
|
|
538
525
|
}
|
|
@@ -12,7 +12,10 @@ export const componentArgumentValidator = looseObject({
|
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
export const componentDefinitionType = z.union([
|
|
15
|
-
looseObject({
|
|
15
|
+
looseObject({
|
|
16
|
+
type: z.literal("app"),
|
|
17
|
+
httpPrefix: z.string().optional(),
|
|
18
|
+
}),
|
|
16
19
|
looseObject({
|
|
17
20
|
type: z.literal("childComponent"),
|
|
18
21
|
name: identifier,
|