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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/aiFiles.ts"],
|
|
4
|
-
"sourcesContent": ["import path from \"path\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { readProjectConfig } from \"./lib/config.js\";\nimport { functionsDir } from \"./lib/utils/utils.js\";\nimport {\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,2BAAwB;AACxB,qBAA8B;AAC9B,oBAAkC;AAClC,mBAA6B;AAC7B,
|
|
6
|
-
"names": ["path"]
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../bundler/log.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { readProjectConfig } from \"./lib/config.js\";\nimport { functionsDir } from \"./lib/utils/utils.js\";\nimport {\n installAiFiles,\n enableAiFiles,\n disableAiFiles,\n removeAiFiles,\n} from \"./lib/aiFiles/index.js\";\nimport { statusAiFiles } from \"./lib/aiFiles/status.js\";\nimport { writeAiFilesConfig } from \"./lib/config.js\";\n\nasync function resolveProjectPaths() {\n const ctx = await oneoffContext({});\n const { configPath, projectConfig } = await readProjectConfig(ctx);\n const convexDir = path.resolve(functionsDir(configPath, projectConfig));\n const projectDir = path.resolve(path.dirname(configPath));\n const aiFilesConfig = projectConfig.aiFiles;\n return { projectDir, convexDir, aiFilesConfig, projectConfig };\n}\n\nconst aiInstall = new Command(\"install\")\n .summary(\"Install or refresh Convex AI files\")\n .description(\n \"Installs the following (or refreshes them if already present):\\n\" +\n \" - convex/_generated/ai/guidelines.md\\n\" +\n \" - AGENTS.md (Convex section only)\\n\" +\n \" - CLAUDE.md (Convex section only)\\n\" +\n \" - Agent skills (installed to each coding agent's native path, configured via convex.json)\",\n )\n .allowExcessArguments(false)\n .action(async () => {\n const { projectDir, convexDir, aiFilesConfig } =\n await resolveProjectPaths();\n await installAiFiles({ projectDir, convexDir, aiFilesConfig });\n\n logMessage(`${chalkStderr.green(\"\u2714\")} Convex AI files installed.`);\n });\n\nconst aiEnable = new Command(\"enable\")\n .summary(\"Enable Convex AI files\")\n .description(\n \"Re-enables Convex AI files by writing `aiFiles.enabled: true` to\\n\" +\n \"`convex.json`, then installs or refreshes the managed AI files.\",\n )\n .allowExcessArguments(false)\n .action(async () => {\n const { projectDir, convexDir, aiFilesConfig } =\n await resolveProjectPaths();\n\n const newAiFilesConfig = await enableAiFiles({\n projectDir,\n convexDir,\n aiFilesConfig,\n });\n\n await writeAiFilesConfig({ projectDir, aiFiles: newAiFilesConfig });\n });\n\nconst aiUpdate = new Command(\"update\")\n .summary(\"Update Convex AI files to the latest version\")\n .description(\n \"Updates the following to their latest versions:\\n\" +\n \" - convex/_generated/ai/guidelines.md\\n\" +\n \" - AGENTS.md (Convex section only)\\n\" +\n \" - CLAUDE.md (Convex section only)\\n\" +\n \" - Agent skills (installed to each coding agent's native path, configured via convex.json)\\n\\n\",\n )\n .allowExcessArguments(false)\n .action(async () => {\n const { projectDir, convexDir, aiFilesConfig } =\n await resolveProjectPaths();\n await installAiFiles({ projectDir, convexDir, aiFilesConfig });\n\n logMessage(`${chalkStderr.green(\"\u2714\")} Convex AI files updated.`);\n });\n\nconst aiDisable = new Command(\"disable\")\n .summary(\"Disable Convex AI files without removing them\")\n .description(\n \"Writes `aiFiles.enabled: false` to `convex.json` so `npx convex dev`\\n\" +\n \"stops prompting to install AI files and suppresses staleness messages.\\n\\n\" +\n \"Files already installed are left untouched - use `npx convex ai-files remove`\\n\" +\n \"if you also want to delete them.\\n\\n\" +\n \"Run `npx convex ai-files enable` to re-enable at any time.\",\n )\n .allowExcessArguments(false)\n .action(async () => {\n const { projectDir, aiFilesConfig } = await resolveProjectPaths();\n\n const newAiFilesConfig = disableAiFiles(aiFilesConfig);\n\n await writeAiFilesConfig({\n projectDir,\n aiFiles: newAiFilesConfig,\n });\n\n logMessage(\n `${chalkStderr.green(`\u2714`)} Convex AI files disabled. Run ${chalkStderr.bold(`npx convex ai-files enable`)} to re-enable.`,\n );\n });\n\nconst aiStatus = new Command(\"status\")\n .summary(\"Show the current status of Convex AI files\")\n .description(\n \"Prints whether Convex AI files are enabled, and for each component:\\n\" +\n \" - convex/_generated/ai/guidelines.md\\n\" +\n \" - AGENTS.md (Convex section)\\n\" +\n \" - CLAUDE.md (if installed by Convex)\\n\" +\n \" - Agent skills\\n\\n\" +\n \"Fetches the latest hashes from version.convex.dev to report whether\\n\" +\n \"each file is up to date. If the network is unavailable the staleness\\n\" +\n \"check is skipped silently.\",\n )\n .allowExcessArguments(false)\n .action(async () => {\n const { projectDir, convexDir, aiFilesConfig } =\n await resolveProjectPaths();\n\n await statusAiFiles({ projectDir, convexDir, aiFilesConfig });\n });\n\nconst aiRemove = new Command(\"remove\")\n .summary(\"Remove all Convex AI files from the project\")\n .description(\n \"Removes the following:\\n\" +\n \" - convex/_generated/ai/ directory (guidelines.md, ai-files.state.json)\\n\" +\n \" - Convex sections from AGENTS.md and CLAUDE.md\\n\" +\n \" - Agent skills installed by `convex ai-files install`\\n\\n\" +\n \"If removing the managed section leaves AGENTS.md or CLAUDE.md empty, the\\n\" +\n \"empty file is deleted. Otherwise the rest of the file is kept.\\n\\n\" +\n \"Skills installed from other sources are not affected.\\n\\n\" +\n \"Note: after `remove`, `npx convex dev` will suggest reinstalling AI files.\\n\" +\n \"Use `npx convex ai-files disable` to opt out entirely without deleting files.\",\n )\n .allowExcessArguments(false)\n .action(async () => {\n const { projectDir, convexDir } = await resolveProjectPaths();\n await removeAiFiles({ projectDir, convexDir });\n });\n\nexport const aiFiles = new Command(\"ai-files\")\n .summary(\"Manage Convex AI files\")\n .description(\n \"Convex AI files help AI coding assistants (Cursor, Claude Code, etc.) understand\\n\" +\n \"Convex patterns and APIs. They are set up during your first `npx convex dev`\\n\" +\n \"and can be managed at any time with the commands below.\",\n )\n .addCommand(aiStatus)\n .addCommand(aiInstall)\n .addCommand(aiEnable)\n .addCommand(aiUpdate)\n .addCommand(aiDisable)\n .addCommand(aiRemove)\n .addHelpCommand(false);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_config", "path"]
|
|
7
7
|
}
|
|
@@ -60,7 +60,20 @@ export const myQueryFunction = query({
|
|
|
60
60
|
Using this query function in a React component looks like:
|
|
61
61
|
|
|
62
62
|
\`\`\`ts
|
|
63
|
-
const
|
|
63
|
+
const state = useQuery({
|
|
64
|
+
query: api.myFunctions.myQueryFunction,
|
|
65
|
+
args: { first: 10, second: "hello" },
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
if (state.status === "pending") {
|
|
69
|
+
return <div>Loading...</div>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (state.status === "error") {
|
|
73
|
+
return <div>Error: {state.error.message}</div>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const data = state.data;
|
|
64
77
|
\`\`\`
|
|
65
78
|
|
|
66
79
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/codegen_templates/readme.ts"],
|
|
4
|
-
"sourcesContent": ["export function readmeCodegen() {\n return `# Welcome to your Convex functions directory!\n\nWrite your Convex functions here.\nSee https://docs.convex.dev/functions for more.\n\nA query function that takes two arguments looks like:\n\n\\`\\`\\`ts\n// convex/myFunctions.ts\nimport { query } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const myQueryFunction = query({\n // Validators for arguments.\n args: {\n first: v.number(),\n second: v.string(),\n },\n\n // Function implementation.\n handler: async (ctx, args) => {\n // Read the database as many times as you need here.\n // See https://docs.convex.dev/database/reading-data.\n const documents = await ctx.db.query(\"tablename\").collect();\n\n // Arguments passed from the client are properties of the args object.\n console.log(args.first, args.second)\n\n // Write arbitrary JavaScript here: filter, aggregate, build derived data,\n // remove non-public properties, or create new objects.\n return documents;\n },\n});\n\\`\\`\\`\n\nUsing this query function in a React component looks like:\n\n\\`\\`\\`ts\nconst
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,gBAAgB;AAC9B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["export function readmeCodegen() {\n return `# Welcome to your Convex functions directory!\n\nWrite your Convex functions here.\nSee https://docs.convex.dev/functions for more.\n\nA query function that takes two arguments looks like:\n\n\\`\\`\\`ts\n// convex/myFunctions.ts\nimport { query } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const myQueryFunction = query({\n // Validators for arguments.\n args: {\n first: v.number(),\n second: v.string(),\n },\n\n // Function implementation.\n handler: async (ctx, args) => {\n // Read the database as many times as you need here.\n // See https://docs.convex.dev/database/reading-data.\n const documents = await ctx.db.query(\"tablename\").collect();\n\n // Arguments passed from the client are properties of the args object.\n console.log(args.first, args.second)\n\n // Write arbitrary JavaScript here: filter, aggregate, build derived data,\n // remove non-public properties, or create new objects.\n return documents;\n },\n});\n\\`\\`\\`\n\nUsing this query function in a React component looks like:\n\n\\`\\`\\`ts\nconst state = useQuery({\n query: api.myFunctions.myQueryFunction,\n args: { first: 10, second: \"hello\" },\n});\n\nif (state.status === \"pending\") {\n return <div>Loading...</div>;\n}\n\nif (state.status === \"error\") {\n return <div>Error: {state.error.message}</div>;\n}\n\nconst data = state.data;\n\\`\\`\\`\n\n\nA mutation function looks like:\n\n\\`\\`\\`ts\n// convex/myFunctions.ts\nimport { mutation } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const myMutationFunction = mutation({\n // Validators for arguments.\n args: {\n first: v.string(),\n second: v.string(),\n },\n\n // Function implementation.\n handler: async (ctx, args) => {\n // Insert or modify documents in the database here.\n // Mutations can also read from the database like queries.\n // See https://docs.convex.dev/database/writing-data.\n const message = { body: args.first, author: args.second };\n const id = await ctx.db.insert(\"messages\", message);\n\n // Optionally, return a value from your mutation.\n return await ctx.db.get(\"messages\", id);\n },\n});\n\\`\\`\\`\n\nUsing this mutation function in a React component looks like:\n\n\\`\\`\\`ts\nconst mutation = useMutation(api.myFunctions.myMutationFunction);\nfunction handleButtonPress() {\n // fire and forget, the most common way to use mutations\n mutation({ first: \"Hello!\", second: \"me\" });\n // OR\n // use the result once the mutation has completed\n mutation({ first: \"Hello!\", second: \"me\" }).then(result => console.log(result));\n}\n\\`\\`\\`\n\nUse the Convex CLI to push your functions to a deployment. See everything\nthe Convex CLI can do by running \\`npx convex -h\\` in your project root\ndirectory. To learn more, launch the docs with \\`npx convex docs\\`.\n`;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,SAAS,gBAAgB;AAC9B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoGT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -48,11 +48,11 @@ var import_codegen = require("./lib/codegen.js");
|
|
|
48
48
|
var import_localDeployment = require("./lib/localDeployment/localDeployment.js");
|
|
49
49
|
var import_prompts = require("./lib/utils/prompts.js");
|
|
50
50
|
var import_globalConfig = require("./lib/utils/globalConfig.js");
|
|
51
|
-
var
|
|
51
|
+
var import_aiFiles = require("./lib/aiFiles/index.js");
|
|
52
52
|
var import_deploymentSelection = require("./lib/deploymentSelection.js");
|
|
53
53
|
var import_login = require("./lib/login.js");
|
|
54
54
|
var import_anonymous = require("./lib/localDeployment/anonymous.js");
|
|
55
|
-
var
|
|
55
|
+
var import_deploy2 = require("./lib/deploy2.js");
|
|
56
56
|
async function deploymentCredentialsOrConfigure(ctx, deploymentSelection, chosenConfiguration, cmdOptions) {
|
|
57
57
|
const selectedDeployment = await _deploymentCredentialsOrConfigure(
|
|
58
58
|
ctx,
|
|
@@ -60,7 +60,7 @@ async function deploymentCredentialsOrConfigure(ctx, deploymentSelection, chosen
|
|
|
60
60
|
chosenConfiguration,
|
|
61
61
|
cmdOptions
|
|
62
62
|
);
|
|
63
|
-
const siteUrl = await (0,
|
|
63
|
+
const { convexSiteUrl: siteUrl } = await (0, import_deploy2.fetchDeploymentCanonicalUrls)(ctx, {
|
|
64
64
|
adminKey: selectedDeployment.adminKey,
|
|
65
65
|
deploymentUrl: selectedDeployment.url
|
|
66
66
|
});
|
|
@@ -141,26 +141,21 @@ async function _deploymentCredentialsOrConfigure(ctx, deploymentSelection, chose
|
|
|
141
141
|
case "anonymous": {
|
|
142
142
|
const hasAuth = ctx.bigBrainAuth() !== null;
|
|
143
143
|
const isAgentMode = process.env.CONVEX_AGENT_MODE === "anonymous";
|
|
144
|
-
if (!isAgentMode && hasAuth && deploymentSelection.deploymentName !== null) {
|
|
144
|
+
if (!isAgentMode && process.stdin.isTTY && hasAuth && deploymentSelection.deploymentName !== null) {
|
|
145
145
|
const shouldConfigure = chosenConfiguration !== null || await (0, import_prompts.promptYesNo)(ctx, {
|
|
146
146
|
message: `${import_utils.CONVEX_DEPLOYMENT_ENV_VAR_NAME} is configured with deployment ${deploymentSelection.deploymentName}, which is not linked with your account. Would you like to link it now?`
|
|
147
147
|
});
|
|
148
|
-
if (
|
|
149
|
-
return await
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
148
|
+
if (shouldConfigure) {
|
|
149
|
+
return await handleChooseProject(
|
|
150
|
+
ctx,
|
|
151
|
+
chosenConfiguration,
|
|
152
|
+
deploymentSelection.selectionWithinProject,
|
|
153
|
+
{
|
|
154
|
+
globallyForceCloud
|
|
155
|
+
},
|
|
156
|
+
cmdOptions
|
|
157
|
+
);
|
|
154
158
|
}
|
|
155
|
-
return await handleChooseProject(
|
|
156
|
-
ctx,
|
|
157
|
-
chosenConfiguration,
|
|
158
|
-
deploymentSelection.selectionWithinProject,
|
|
159
|
-
{
|
|
160
|
-
globallyForceCloud
|
|
161
|
-
},
|
|
162
|
-
cmdOptions
|
|
163
|
-
);
|
|
164
159
|
}
|
|
165
160
|
const alreadyHasConfiguredAnonymousDeployment = deploymentSelection.deploymentName !== null && chosenConfiguration === null;
|
|
166
161
|
if (isAgentMode) {
|
|
@@ -170,7 +165,7 @@ async function _deploymentCredentialsOrConfigure(ctx, deploymentSelection, chose
|
|
|
170
165
|
)
|
|
171
166
|
);
|
|
172
167
|
}
|
|
173
|
-
const shouldPromptForLogin = isAgentMode ? "no" : alreadyHasConfiguredAnonymousDeployment ? "no" : await (0, import_prompts.promptOptions)(ctx, {
|
|
168
|
+
const shouldPromptForLogin = isAgentMode || !process.stdin.isTTY ? "no" : alreadyHasConfiguredAnonymousDeployment ? "no" : await (0, import_prompts.promptOptions)(ctx, {
|
|
174
169
|
message: "Welcome to Convex! Would you like to login to your account?",
|
|
175
170
|
choices: [
|
|
176
171
|
{
|
|
@@ -261,13 +256,18 @@ async function handleDeploymentWithinProject(ctx, {
|
|
|
261
256
|
{ ensureLocalRunning: false }
|
|
262
257
|
);
|
|
263
258
|
if (selectedDeployment.deploymentFields !== null && selectedDeployment.deploymentFields.deploymentType === "local") {
|
|
264
|
-
await (0, import_localDeployment.handleLocalDeployment)(ctx, {
|
|
259
|
+
const localDeployment = await (0, import_localDeployment.handleLocalDeployment)(ctx, {
|
|
265
260
|
teamSlug: selectedDeployment.deploymentFields.teamSlug,
|
|
266
261
|
projectSlug: selectedDeployment.deploymentFields.projectSlug,
|
|
267
262
|
forceUpgrade: cmdOptions.localOptions.forceUpgrade,
|
|
268
263
|
ports: cmdOptions.localOptions.ports,
|
|
269
264
|
backendVersion: cmdOptions.localOptions.backendVersion
|
|
270
265
|
});
|
|
266
|
+
return {
|
|
267
|
+
url: localDeployment.deploymentUrl,
|
|
268
|
+
adminKey: localDeployment.adminKey,
|
|
269
|
+
deploymentFields: selectedDeployment.deploymentFields
|
|
270
|
+
};
|
|
271
271
|
}
|
|
272
272
|
return {
|
|
273
273
|
url: selectedDeployment.url,
|
|
@@ -406,11 +406,12 @@ async function selectNewProject(ctx, chosenConfiguration, config) {
|
|
|
406
406
|
await (0, import_codegen.doInitConvexFolder)(ctx);
|
|
407
407
|
const { configPath, projectConfig } = await (0, import_config.readProjectConfig)(ctx);
|
|
408
408
|
const folder = (0, import_utils.functionsDir)(configPath, projectConfig);
|
|
409
|
-
await (0,
|
|
409
|
+
await (0, import_aiFiles.attemptSetupAiFiles)({
|
|
410
410
|
ctx,
|
|
411
|
-
|
|
412
|
-
import_path.default.resolve(
|
|
413
|
-
|
|
411
|
+
aiFilesConfig: projectConfig.aiFiles,
|
|
412
|
+
convexDir: import_path.default.resolve(folder),
|
|
413
|
+
projectDir: import_path.default.resolve(import_path.default.dirname(configPath))
|
|
414
|
+
});
|
|
414
415
|
return { teamSlug, projectSlug, devDeployment };
|
|
415
416
|
}
|
|
416
417
|
async function selectExistingProject(ctx, chosenConfiguration, config) {
|
|
@@ -444,11 +445,12 @@ async function selectExistingProject(ctx, chosenConfiguration, config) {
|
|
|
444
445
|
(0, import_log.logFinishedStep)(`Reinitialized project ${import_chalk.chalkStderr.bold(projectSlug)}`);
|
|
445
446
|
const { configPath, projectConfig } = await (0, import_config.readProjectConfig)(ctx);
|
|
446
447
|
const folder = (0, import_utils.functionsDir)(configPath, projectConfig);
|
|
447
|
-
await (0,
|
|
448
|
+
await (0, import_aiFiles.attemptSetupAiFiles)({
|
|
448
449
|
ctx,
|
|
449
|
-
|
|
450
|
-
import_path.default.resolve(
|
|
451
|
-
|
|
450
|
+
aiFilesConfig: projectConfig.aiFiles,
|
|
451
|
+
convexDir: import_path.default.resolve(folder),
|
|
452
|
+
projectDir: import_path.default.resolve(import_path.default.dirname(configPath))
|
|
453
|
+
});
|
|
452
454
|
return { teamSlug, projectSlug, devDeployment };
|
|
453
455
|
}
|
|
454
456
|
async function askToConfigure(ctx) {
|
|
@@ -501,7 +503,7 @@ async function ensureDeploymentProvisioned(ctx, options) {
|
|
|
501
503
|
}
|
|
502
504
|
async function updateEnvAndConfigForDeploymentSelection(ctx, options, existingValue) {
|
|
503
505
|
const { configPath, projectConfig } = await (0, import_config.readProjectConfig)(ctx);
|
|
504
|
-
const { wroteToGitIgnore, changedDeploymentEnvVar } = await (0, import_deployment.writeDeploymentEnvVar)(
|
|
506
|
+
const { wroteToGitIgnore, changedDeploymentEnvVar } = options.deploymentType !== "prod" ? await (0, import_deployment.writeDeploymentEnvVar)(
|
|
505
507
|
ctx,
|
|
506
508
|
options.deploymentType,
|
|
507
509
|
{
|
|
@@ -510,8 +512,8 @@ async function updateEnvAndConfigForDeploymentSelection(ctx, options, existingVa
|
|
|
510
512
|
deploymentName: options.deploymentName
|
|
511
513
|
},
|
|
512
514
|
existingValue
|
|
513
|
-
);
|
|
514
|
-
await (0, import_config.
|
|
515
|
+
) : { wroteToGitIgnore: false, changedDeploymentEnvVar: false };
|
|
516
|
+
await (0, import_config.ensureConvexFunctionsDir)(ctx, projectConfig);
|
|
515
517
|
await (0, import_init.finalizeConfiguration)(ctx, {
|
|
516
518
|
deploymentType: options.deploymentType,
|
|
517
519
|
deploymentName: options.deploymentName,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/configure.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../bundler/context.js\";\nimport {\n logFailure,\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n} from \"../bundler/log.js\";\nimport {\n DeploymentType,\n DeploymentName,\n fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows,\n createProject,\n loadSelectedDeploymentCredentials,\n checkAccessToSelectedProject,\n DeploymentSelectionWithinProject,\n} from \"./lib/api.js\";\nimport { readProjectConfig, writeProjectConfig } from \"./lib/config.js\";\nimport {\n DeploymentDetails,\n eraseDeploymentEnvVar,\n writeDeploymentEnvVar,\n} from \"./lib/deployment.js\";\nimport { finalizeConfiguration } from \"./lib/init.js\";\nimport {\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n functionsDir,\n hasProjects,\n logAndHandleFetchError,\n selectDevDeploymentType,\n selectRegionOrUseDefault,\n validateOrSelectProject,\n validateOrSelectTeam,\n} from \"./lib/utils/utils.js\";\nimport { writeUrlsToEnvFile } from \"./lib/envvars.js\";\nimport path from \"path\";\nimport { projectDashboardUrl } from \"./lib/dashboard.js\";\nimport { doInitConvexFolder } from \"./lib/codegen.js\";\nimport { handleLocalDeployment } from \"./lib/localDeployment/localDeployment.js\";\nimport {\n promptOptions,\n promptString,\n promptYesNo,\n} from \"./lib/utils/prompts.js\";\nimport { readGlobalConfig } from \"./lib/utils/globalConfig.js\";\nimport { maybeSetupAiFiles } from \"./lib/ai/index.js\";\nimport {\n DeploymentSelection,\n deploymentNameFromSelection,\n shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport { ensureLoggedIn } from \"./lib/login.js\";\nimport { handleAnonymousDeployment } from \"./lib/localDeployment/anonymous.js\";\nimport { fetchDeploymentCanonicalSiteUrl } from \"./lib/env.js\";\ntype DeploymentCredentials = {\n url: string;\n adminKey: string;\n};\n\ntype ChosenConfiguration =\n // `--configure new`\n | \"new\"\n // `--configure existing`\n | \"existing\"\n // `--configure`\n | \"ask\"\n // `--configure` was not specified\n | null;\n\ntype ConfigureCmdOptions = {\n prod: boolean;\n localOptions: {\n ports?: {\n cloud: number;\n site: number;\n };\n backendVersion?: string | undefined;\n dashboardVersion?: string | undefined;\n forceUpgrade: boolean;\n };\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n local?: boolean | undefined;\n cloud?: boolean | undefined;\n url?: string | undefined;\n adminKey?: string | undefined;\n envFile?: string | undefined;\n overrideAuthUrl?: string | undefined;\n overrideAuthClient?: string | undefined;\n overrideAuthUsername?: string | undefined;\n overrideAuthPassword?: string | undefined;\n};\n\n/**\n * As of writing, this is used by:\n * - `npx convex dev`\n * - `npx convex codegen`\n *\n * But is not used by `npx convex deploy` or other commands.\n */\nexport async function deploymentCredentialsOrConfigure(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n chosenConfiguration: ChosenConfiguration,\n cmdOptions: ConfigureCmdOptions,\n): Promise<\n DeploymentCredentials & {\n deploymentFields: {\n deploymentName: DeploymentName;\n deploymentType: DeploymentType;\n projectSlug: string | null;\n teamSlug: string | null;\n siteUrl: string | null;\n } | null;\n }\n> {\n const selectedDeployment = await _deploymentCredentialsOrConfigure(\n ctx,\n deploymentSelection,\n chosenConfiguration,\n cmdOptions,\n );\n const siteUrl = await fetchDeploymentCanonicalSiteUrl(ctx, {\n adminKey: selectedDeployment.adminKey,\n deploymentUrl: selectedDeployment.url,\n });\n\n if (selectedDeployment.deploymentFields !== null) {\n // Set the `CONVEX_DEPLOYMENT` env var + the `CONVEX_URL` env var\n await updateEnvAndConfigForDeploymentSelection(\n ctx,\n {\n url: selectedDeployment.url,\n siteUrl,\n deploymentName: selectedDeployment.deploymentFields.deploymentName,\n teamSlug: selectedDeployment.deploymentFields.teamSlug,\n projectSlug: selectedDeployment.deploymentFields.projectSlug,\n deploymentType: selectedDeployment.deploymentFields.deploymentType,\n },\n deploymentNameFromSelection(deploymentSelection),\n );\n } else {\n // Clear the `CONVEX_DEPLOYMENT` env var + set the `CONVEX_URL` and\n // `CONVEX_SITE_URL` env vars.\n await handleManuallySetUrlAndAdminKey(ctx, {\n url: selectedDeployment.url,\n siteUrl,\n adminKey: selectedDeployment.adminKey,\n });\n }\n return {\n url: selectedDeployment.url,\n adminKey: selectedDeployment.adminKey,\n deploymentFields:\n selectedDeployment.deploymentFields === null\n ? null\n : { ...selectedDeployment.deploymentFields, siteUrl: siteUrl },\n };\n}\n\nexport async function _deploymentCredentialsOrConfigure(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n chosenConfiguration: ChosenConfiguration,\n cmdOptions: ConfigureCmdOptions,\n): Promise<\n DeploymentCredentials & {\n deploymentFields: {\n deploymentName: DeploymentName;\n deploymentType: DeploymentType;\n projectSlug: string | null;\n teamSlug: string | null;\n } | null;\n }\n> {\n const config = readGlobalConfig(ctx);\n const globallyForceCloud = !!config?.optOutOfLocalDevDeploymentsUntilBetaOver;\n if (globallyForceCloud && cmdOptions.local) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Can't specify --local when local deployments are disabled on this machine. Run `npx convex disable-local-deployments --undo-global` to allow use of --local.\",\n });\n }\n\n switch (deploymentSelection.kind) {\n case \"existingDeployment\":\n return {\n url: deploymentSelection.deploymentToActOn.url,\n adminKey: deploymentSelection.deploymentToActOn.adminKey,\n deploymentFields:\n deploymentSelection.deploymentToActOn.deploymentFields,\n };\n case \"chooseProject\": {\n await ensureLoggedIn(ctx, {\n overrideAuthUrl: cmdOptions.overrideAuthUrl,\n overrideAuthClient: cmdOptions.overrideAuthClient,\n overrideAuthUsername: cmdOptions.overrideAuthUsername,\n overrideAuthPassword: cmdOptions.overrideAuthPassword,\n });\n return await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n }\n case \"preview\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Use `npx convex deploy` to use preview deployments.\",\n });\n case \"deploymentWithinProject\": {\n return await handleDeploymentWithinProject(ctx, {\n chosenConfiguration,\n deploymentSelection,\n cmdOptions,\n globallyForceCloud,\n });\n }\n case \"anonymous\": {\n const hasAuth = ctx.bigBrainAuth() !== null;\n const isAgentMode = process.env.CONVEX_AGENT_MODE === \"anonymous\";\n if (\n !isAgentMode &&\n hasAuth &&\n deploymentSelection.deploymentName !== null\n ) {\n const shouldConfigure =\n chosenConfiguration !== null ||\n (await promptYesNo(ctx, {\n message: `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} is configured with deployment ${deploymentSelection.deploymentName}, which is not linked with your account. Would you like to link it now?`,\n }));\n if (!shouldConfigure) {\n return await ctx.crash({\n exitCode: 0,\n errorType: \"fatal\",\n printedMessage: `Run \\`npx convex login --link-deployments\\` first to link this deployment to your account, and then run \\`npx convex dev\\` again.`,\n });\n }\n return await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n }\n const alreadyHasConfiguredAnonymousDeployment =\n deploymentSelection.deploymentName !== null &&\n chosenConfiguration === null;\n if (isAgentMode) {\n logWarning(\n chalkStderr.yellow.bold(\n \"CONVEX_AGENT_MODE=anonymous mode is in beta, functionality may change in the future.\",\n ),\n );\n }\n\n const shouldPromptForLogin = isAgentMode\n ? \"no\"\n : alreadyHasConfiguredAnonymousDeployment\n ? \"no\"\n : await promptOptions(ctx, {\n message:\n \"Welcome to Convex! Would you like to login to your account?\",\n choices: [\n {\n name: \"Start without an account (run Convex locally)\",\n value: \"no\",\n },\n { name: \"Login or create an account\", value: \"yes\" },\n ],\n default: \"no\",\n });\n if (shouldPromptForLogin === \"no\") {\n const result = await handleAnonymousDeployment(ctx, {\n chosenConfiguration,\n deploymentName: deploymentSelection.deploymentName,\n ...cmdOptions.localOptions,\n });\n return {\n adminKey: result.adminKey,\n url: result.deploymentUrl,\n deploymentFields: {\n deploymentName: result.deploymentName,\n deploymentType: \"anonymous\",\n projectSlug: null,\n teamSlug: null,\n },\n };\n }\n return await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n }\n }\n}\n\nasync function handleDeploymentWithinProject(\n ctx: Context,\n {\n chosenConfiguration,\n deploymentSelection,\n cmdOptions,\n globallyForceCloud,\n }: {\n chosenConfiguration: ChosenConfiguration;\n deploymentSelection: DeploymentSelection & {\n kind: \"deploymentWithinProject\";\n };\n cmdOptions: ConfigureCmdOptions;\n globallyForceCloud: boolean;\n },\n) {\n const hasAuth = ctx.bigBrainAuth() !== null;\n const loginMessage =\n hasAuth && shouldAllowAnonymousDevelopment()\n ? undefined\n : \"Tip: You can try out Convex without creating an account by clearing the \" +\n `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} environment variable (often in .env.local).`;\n await ensureLoggedIn(ctx, {\n message: loginMessage,\n overrideAuthUrl: cmdOptions.overrideAuthUrl,\n overrideAuthClient: cmdOptions.overrideAuthClient,\n overrideAuthUsername: cmdOptions.overrideAuthUsername,\n overrideAuthPassword: cmdOptions.overrideAuthPassword,\n });\n if (chosenConfiguration !== null) {\n const result = await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n return result;\n }\n\n const accessResult = await checkAccessToSelectedProject(\n ctx,\n deploymentSelection.targetProject,\n );\n if (accessResult.kind === \"noAccess\") {\n logMessage(\"You don't have access to the selected project.\");\n const result = await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n return result;\n }\n\n const selectedDeployment = await loadSelectedDeploymentCredentials(\n ctx,\n deploymentSelection,\n // We'll start running it below\n { ensureLocalRunning: false },\n );\n if (\n selectedDeployment.deploymentFields !== null &&\n selectedDeployment.deploymentFields.deploymentType === \"local\"\n ) {\n // Start running the local backend\n await handleLocalDeployment(ctx, {\n teamSlug: selectedDeployment.deploymentFields.teamSlug!,\n projectSlug: selectedDeployment.deploymentFields.projectSlug!,\n forceUpgrade: cmdOptions.localOptions.forceUpgrade,\n ports: cmdOptions.localOptions.ports,\n backendVersion: cmdOptions.localOptions.backendVersion,\n });\n }\n return {\n url: selectedDeployment.url,\n adminKey: selectedDeployment.adminKey,\n deploymentFields: selectedDeployment.deploymentFields,\n };\n}\n\nasync function handleChooseProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n selectionWithinProject: DeploymentSelectionWithinProject,\n args: {\n globallyForceCloud: boolean;\n },\n cmdOptions: ConfigureCmdOptions,\n): Promise<\n DeploymentCredentials & {\n deploymentFields: {\n deploymentName: DeploymentName;\n deploymentType: DeploymentType;\n projectSlug: string;\n teamSlug: string;\n };\n }\n> {\n await ensureLoggedIn(ctx, {\n overrideAuthUrl: cmdOptions.overrideAuthUrl,\n overrideAuthClient: cmdOptions.overrideAuthClient,\n overrideAuthUsername: cmdOptions.overrideAuthUsername,\n overrideAuthPassword: cmdOptions.overrideAuthPassword,\n });\n const project = await selectProject(ctx, chosenConfiguration, {\n team: cmdOptions.team,\n project: cmdOptions.project,\n devDeployment: cmdOptions.devDeployment,\n local: args.globallyForceCloud ? false : cmdOptions.local,\n cloud: args.globallyForceCloud ? true : cmdOptions.cloud,\n });\n // TODO complain about any non-default cmdOptions.localOptions here\n // because we're ignoring them if this isn't a local development.\n\n const deploymentOptions: DeploymentOptions =\n selectionWithinProject.kind === \"prod\"\n ? { kind: \"prod\" }\n : project.devDeployment === \"local\"\n ? { kind: \"local\", ...cmdOptions.localOptions }\n : { kind: \"dev\" };\n const {\n deploymentName,\n deploymentUrl: url,\n adminKey,\n } = await ensureDeploymentProvisioned(ctx, {\n teamSlug: project.teamSlug,\n projectSlug: project.projectSlug,\n deploymentOptions,\n });\n return {\n url,\n adminKey,\n deploymentFields: {\n deploymentName,\n deploymentType: deploymentOptions.kind,\n projectSlug: project.projectSlug,\n teamSlug: project.teamSlug,\n },\n };\n}\n\nasync function handleManuallySetUrlAndAdminKey(\n ctx: Context,\n cmdOptions: { url: string; siteUrl: string; adminKey: string },\n) {\n const { url, siteUrl, adminKey } = cmdOptions;\n const didErase = await eraseDeploymentEnvVar(ctx);\n if (didErase) {\n logMessage(\n chalkStderr.yellowBright(\n `Removed the CONVEX_DEPLOYMENT environment variable from .env.local`,\n ),\n );\n }\n const envFileConfig = await writeUrlsToEnvFile(ctx, {\n convexUrl: url,\n siteUrl,\n });\n if (\n envFileConfig !== null &&\n (envFileConfig.convexUrlEnvVar || envFileConfig.siteUrlEnvVar)\n ) {\n // Join both names with \" and \" if both exist, otherwise just use one of them.\n const updatedVars = [\n envFileConfig.convexUrlEnvVar,\n envFileConfig.siteUrlEnvVar,\n ]\n .filter(Boolean)\n .join(\" and \");\n logMessage(\n chalkStderr.green(`Saved ${updatedVars} to ${envFileConfig.envFile}`),\n );\n }\n return { url, adminKey };\n}\n\nexport async function selectProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n cmdOptions: {\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n local?: boolean | undefined;\n cloud?: boolean | undefined;\n defaultProjectName?: string | undefined;\n },\n): Promise<{\n teamSlug: string;\n projectSlug: string;\n devDeployment: \"cloud\" | \"local\";\n}> {\n // Prompt the user to select a project.\n const choice =\n chosenConfiguration !== \"ask\" && chosenConfiguration !== null\n ? chosenConfiguration\n : await askToConfigure(ctx);\n switch (choice) {\n case \"new\":\n return selectNewProject(ctx, chosenConfiguration, cmdOptions);\n case \"existing\":\n return selectExistingProject(ctx, chosenConfiguration, cmdOptions);\n default:\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No project selected.\",\n });\n }\n}\n\nconst cwd = path.basename(process.cwd());\nasync function selectNewProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n config: {\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n cloud?: boolean | undefined;\n local?: boolean | undefined;\n defaultProjectName?: string | undefined;\n },\n) {\n const { team: selectedTeam, chosen: didChooseBetweenTeams } =\n await validateOrSelectTeam(ctx, config.team, \"Team:\");\n let projectName: string = config.project || cwd;\n let choseProjectInteractively = false;\n if (!config.project) {\n projectName = await promptString(ctx, {\n message: \"Project name:\",\n default: config.defaultProjectName || cwd,\n });\n choseProjectInteractively = true;\n }\n\n const { devDeployment } = await selectDevDeploymentType(ctx, {\n chosenConfiguration,\n newOrExisting: \"new\",\n teamSlug: selectedTeam.slug,\n userHasChosenSomethingInteractively:\n didChooseBetweenTeams || choseProjectInteractively,\n projectSlug: undefined,\n devDeploymentFromFlag: config.devDeployment,\n forceDevDeployment: config.local\n ? \"local\"\n : config.cloud\n ? \"cloud\"\n : undefined,\n });\n\n const region =\n devDeployment === \"cloud\"\n ? await selectRegionOrUseDefault(ctx, selectedTeam, \"dev\")\n : null;\n\n showSpinner(\"Creating new Convex project...\");\n\n const deploymentToProvision =\n devDeployment === \"cloud\"\n ? {\n deploymentType: \"dev\" as const,\n region,\n }\n : null;\n\n let projectSlug, teamSlug, projectsRemaining;\n try {\n ({ projectSlug, teamSlug, projectsRemaining } = await createProject(ctx, {\n teamSlug: selectedTeam.slug,\n projectName,\n deploymentToProvision,\n }));\n } catch (err) {\n logFailure(\"Unable to create project.\");\n return await logAndHandleFetchError(ctx, err);\n }\n const teamMessage = didChooseBetweenTeams\n ? \" in team \" + chalkStderr.bold(teamSlug)\n : \"\";\n logFinishedStep(\n `Created project ${chalkStderr.bold(\n projectSlug,\n )}${teamMessage}, manage it at ${chalkStderr.bold(\n projectDashboardUrl(teamSlug, projectSlug),\n )}`,\n );\n\n if (projectsRemaining <= 2) {\n logWarning(\n chalkStderr.yellow.bold(\n `Your account now has ${projectsRemaining} project${\n projectsRemaining === 1 ? \"\" : \"s\"\n } remaining.`,\n ),\n );\n }\n\n await doInitConvexFolder(ctx);\n const { configPath, projectConfig } = await readProjectConfig(ctx);\n const folder = functionsDir(configPath, projectConfig);\n await maybeSetupAiFiles(\n ctx,\n path.resolve(folder),\n path.resolve(path.dirname(configPath)),\n );\n return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function selectExistingProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n config: {\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n local?: boolean | undefined;\n cloud?: boolean | undefined;\n },\n): Promise<{\n teamSlug: string;\n projectSlug: string;\n devDeployment: \"cloud\" | \"local\";\n}> {\n const {\n team: { slug: teamSlug },\n chosen,\n } = await validateOrSelectTeam(ctx, config.team, \"Team:\");\n\n const projectSlug = await validateOrSelectProject(\n ctx,\n config.project,\n teamSlug,\n \"Configure project\",\n \"Project:\",\n );\n if (projectSlug === null) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Run the command again to create a new project instead.\",\n });\n }\n const { devDeployment } = await selectDevDeploymentType(ctx, {\n chosenConfiguration,\n newOrExisting: \"existing\",\n teamSlug,\n projectSlug,\n userHasChosenSomethingInteractively: chosen || !config.project,\n devDeploymentFromFlag: config.devDeployment,\n forceDevDeployment: config.local\n ? \"local\"\n : config.cloud\n ? \"cloud\"\n : undefined,\n });\n\n logFinishedStep(`Reinitialized project ${chalkStderr.bold(projectSlug)}`);\n\n const { configPath, projectConfig } = await readProjectConfig(ctx);\n const folder = functionsDir(configPath, projectConfig);\n await maybeSetupAiFiles(\n ctx,\n path.resolve(folder),\n path.resolve(path.dirname(configPath)),\n );\n\n return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function askToConfigure(ctx: Context): Promise<\"new\" | \"existing\"> {\n if (!(await hasProjects(ctx))) {\n return \"new\";\n }\n return await promptOptions(ctx, {\n message: \"What would you like to configure?\",\n default: \"new\",\n choices: [\n { name: \"create a new project\", value: \"new\" },\n { name: \"choose an existing project\", value: \"existing\" },\n ],\n });\n}\n\ntype DeploymentOptions =\n | {\n kind: \"prod\";\n }\n | { kind: \"dev\" }\n | {\n kind: \"local\";\n ports?:\n | {\n cloud: number;\n site: number;\n }\n | undefined;\n backendVersion?: string | undefined;\n forceUpgrade: boolean;\n };\n\n/**\n * This method assumes that the member has access to the selected project.\n */\nasync function ensureDeploymentProvisioned(\n ctx: Context,\n options: {\n teamSlug: string;\n projectSlug: string;\n deploymentOptions: DeploymentOptions;\n },\n): Promise<DeploymentDetails> {\n switch (options.deploymentOptions.kind) {\n case \"dev\":\n case \"prod\": {\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n {\n kind: \"teamAndProjectSlugs\",\n teamSlug: options.teamSlug,\n projectSlug: options.projectSlug,\n },\n options.deploymentOptions.kind,\n );\n return {\n ...credentials,\n onActivity: null,\n };\n }\n case \"local\": {\n const credentials = await handleLocalDeployment(ctx, {\n teamSlug: options.teamSlug,\n projectSlug: options.projectSlug,\n ...options.deploymentOptions,\n });\n return credentials;\n }\n default:\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n errForSentry: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n });\n }\n}\n\nexport async function updateEnvAndConfigForDeploymentSelection(\n ctx: Context,\n options: {\n url: string;\n siteUrl?: string | null;\n deploymentName: string;\n teamSlug: string | null;\n projectSlug: string | null;\n deploymentType: DeploymentType;\n },\n existingValue: string | null,\n) {\n const { configPath, projectConfig } = await readProjectConfig(ctx);\n\n const { wroteToGitIgnore, changedDeploymentEnvVar } =\n await writeDeploymentEnvVar(\n ctx,\n options.deploymentType,\n {\n team: options.teamSlug,\n project: options.projectSlug,\n deploymentName: options.deploymentName,\n },\n existingValue,\n );\n await writeProjectConfig(ctx, projectConfig);\n await finalizeConfiguration(ctx, {\n deploymentType: options.deploymentType,\n deploymentName: options.deploymentName,\n url: options.url,\n siteUrl: options.siteUrl,\n wroteToGitIgnore,\n changedDeploymentEnvVar,\n functionsPath: functionsDir(configPath, projectConfig),\n });\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAE5B,iBAMO;AACP,iBAQO;AACP,
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../bundler/context.js\";\nimport {\n logFailure,\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n} from \"../bundler/log.js\";\nimport {\n DeploymentType,\n DeploymentName,\n fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows,\n createProject,\n loadSelectedDeploymentCredentials,\n checkAccessToSelectedProject,\n DeploymentSelectionWithinProject,\n} from \"./lib/api.js\";\nimport { readProjectConfig, ensureConvexFunctionsDir } from \"./lib/config.js\";\nimport {\n DeploymentDetails,\n eraseDeploymentEnvVar,\n writeDeploymentEnvVar,\n} from \"./lib/deployment.js\";\nimport { finalizeConfiguration } from \"./lib/init.js\";\nimport {\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n functionsDir,\n hasProjects,\n logAndHandleFetchError,\n selectDevDeploymentType,\n selectRegionOrUseDefault,\n validateOrSelectProject,\n validateOrSelectTeam,\n} from \"./lib/utils/utils.js\";\nimport { writeUrlsToEnvFile } from \"./lib/envvars.js\";\nimport path from \"path\";\nimport { projectDashboardUrl } from \"./lib/dashboard.js\";\nimport { doInitConvexFolder } from \"./lib/codegen.js\";\nimport { handleLocalDeployment } from \"./lib/localDeployment/localDeployment.js\";\nimport {\n promptOptions,\n promptString,\n promptYesNo,\n} from \"./lib/utils/prompts.js\";\nimport { readGlobalConfig } from \"./lib/utils/globalConfig.js\";\nimport { attemptSetupAiFiles } from \"./lib/aiFiles/index.js\";\nimport {\n DeploymentSelection,\n deploymentNameFromSelection,\n shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport { ensureLoggedIn } from \"./lib/login.js\";\nimport { handleAnonymousDeployment } from \"./lib/localDeployment/anonymous.js\";\nimport { fetchDeploymentCanonicalUrls } from \"./lib/deploy2.js\";\ntype DeploymentCredentials = {\n url: string;\n adminKey: string;\n};\n\ntype ChosenConfiguration =\n // `--configure new`\n | \"new\"\n // `--configure existing`\n | \"existing\"\n // `--configure`\n | \"ask\"\n // `--configure` was not specified\n | null;\n\ntype ConfigureCmdOptions = {\n prod: boolean;\n localOptions: {\n ports?: {\n cloud: number;\n site: number;\n };\n backendVersion?: string | undefined;\n dashboardVersion?: string | undefined;\n forceUpgrade: boolean;\n };\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n local?: boolean | undefined;\n cloud?: boolean | undefined;\n url?: string | undefined;\n adminKey?: string | undefined;\n envFile?: string | undefined;\n overrideAuthUrl?: string | undefined;\n overrideAuthClient?: string | undefined;\n overrideAuthUsername?: string | undefined;\n overrideAuthPassword?: string | undefined;\n};\n\n/**\n * As of writing, this is used by:\n * - `npx convex dev`\n * - `npx convex codegen`\n *\n * But is not used by `npx convex deploy` or other commands.\n */\nexport async function deploymentCredentialsOrConfigure(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n chosenConfiguration: ChosenConfiguration,\n cmdOptions: ConfigureCmdOptions,\n): Promise<\n DeploymentCredentials & {\n deploymentFields: {\n deploymentName: DeploymentName;\n deploymentType: DeploymentType;\n projectSlug: string | null;\n teamSlug: string | null;\n siteUrl: string | null;\n } | null;\n }\n> {\n const selectedDeployment = await _deploymentCredentialsOrConfigure(\n ctx,\n deploymentSelection,\n chosenConfiguration,\n cmdOptions,\n );\n const { convexSiteUrl: siteUrl } = await fetchDeploymentCanonicalUrls(ctx, {\n adminKey: selectedDeployment.adminKey,\n deploymentUrl: selectedDeployment.url,\n });\n\n if (selectedDeployment.deploymentFields !== null) {\n // Set the `CONVEX_DEPLOYMENT` env var + the `CONVEX_URL` env var\n await updateEnvAndConfigForDeploymentSelection(\n ctx,\n {\n url: selectedDeployment.url,\n siteUrl,\n deploymentName: selectedDeployment.deploymentFields.deploymentName,\n teamSlug: selectedDeployment.deploymentFields.teamSlug,\n projectSlug: selectedDeployment.deploymentFields.projectSlug,\n deploymentType: selectedDeployment.deploymentFields.deploymentType,\n },\n deploymentNameFromSelection(deploymentSelection),\n );\n } else {\n // Clear the `CONVEX_DEPLOYMENT` env var + set the `CONVEX_URL` and\n // `CONVEX_SITE_URL` env vars.\n await handleManuallySetUrlAndAdminKey(ctx, {\n url: selectedDeployment.url,\n siteUrl,\n adminKey: selectedDeployment.adminKey,\n });\n }\n return {\n url: selectedDeployment.url,\n adminKey: selectedDeployment.adminKey,\n deploymentFields:\n selectedDeployment.deploymentFields === null\n ? null\n : { ...selectedDeployment.deploymentFields, siteUrl: siteUrl },\n };\n}\n\nexport async function _deploymentCredentialsOrConfigure(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n chosenConfiguration: ChosenConfiguration,\n cmdOptions: ConfigureCmdOptions,\n): Promise<\n DeploymentCredentials & {\n deploymentFields: {\n deploymentName: DeploymentName;\n deploymentType: DeploymentType;\n projectSlug: string | null;\n teamSlug: string | null;\n } | null;\n }\n> {\n const config = readGlobalConfig(ctx);\n const globallyForceCloud = !!config?.optOutOfLocalDevDeploymentsUntilBetaOver;\n if (globallyForceCloud && cmdOptions.local) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Can't specify --local when local deployments are disabled on this machine. Run `npx convex disable-local-deployments --undo-global` to allow use of --local.\",\n });\n }\n\n switch (deploymentSelection.kind) {\n case \"existingDeployment\":\n return {\n url: deploymentSelection.deploymentToActOn.url,\n adminKey: deploymentSelection.deploymentToActOn.adminKey,\n deploymentFields:\n deploymentSelection.deploymentToActOn.deploymentFields,\n };\n case \"chooseProject\": {\n await ensureLoggedIn(ctx, {\n overrideAuthUrl: cmdOptions.overrideAuthUrl,\n overrideAuthClient: cmdOptions.overrideAuthClient,\n overrideAuthUsername: cmdOptions.overrideAuthUsername,\n overrideAuthPassword: cmdOptions.overrideAuthPassword,\n });\n return await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n }\n case \"preview\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Use `npx convex deploy` to use preview deployments.\",\n });\n case \"deploymentWithinProject\": {\n return await handleDeploymentWithinProject(ctx, {\n chosenConfiguration,\n deploymentSelection,\n cmdOptions,\n globallyForceCloud,\n });\n }\n case \"anonymous\": {\n const hasAuth = ctx.bigBrainAuth() !== null;\n const isAgentMode = process.env.CONVEX_AGENT_MODE === \"anonymous\";\n if (\n !isAgentMode &&\n process.stdin.isTTY &&\n hasAuth &&\n deploymentSelection.deploymentName !== null\n ) {\n const shouldConfigure =\n chosenConfiguration !== null ||\n (await promptYesNo(ctx, {\n message: `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} is configured with deployment ${deploymentSelection.deploymentName}, which is not linked with your account. Would you like to link it now?`,\n }));\n if (shouldConfigure) {\n return await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n }\n }\n const alreadyHasConfiguredAnonymousDeployment =\n deploymentSelection.deploymentName !== null &&\n chosenConfiguration === null;\n if (isAgentMode) {\n logWarning(\n chalkStderr.yellow.bold(\n \"CONVEX_AGENT_MODE=anonymous mode is in beta, functionality may change in the future.\",\n ),\n );\n }\n\n const shouldPromptForLogin =\n isAgentMode || !process.stdin.isTTY\n ? \"no\"\n : alreadyHasConfiguredAnonymousDeployment\n ? \"no\"\n : await promptOptions(ctx, {\n message:\n \"Welcome to Convex! Would you like to login to your account?\",\n choices: [\n {\n name: \"Start without an account (run Convex locally)\",\n value: \"no\",\n },\n { name: \"Login or create an account\", value: \"yes\" },\n ],\n default: \"no\",\n });\n if (shouldPromptForLogin === \"no\") {\n const result = await handleAnonymousDeployment(ctx, {\n chosenConfiguration,\n deploymentName: deploymentSelection.deploymentName,\n ...cmdOptions.localOptions,\n });\n return {\n adminKey: result.adminKey,\n url: result.deploymentUrl,\n deploymentFields: {\n deploymentName: result.deploymentName,\n deploymentType: \"anonymous\",\n projectSlug: null,\n teamSlug: null,\n },\n };\n }\n return await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n }\n }\n}\n\nasync function handleDeploymentWithinProject(\n ctx: Context,\n {\n chosenConfiguration,\n deploymentSelection,\n cmdOptions,\n globallyForceCloud,\n }: {\n chosenConfiguration: ChosenConfiguration;\n deploymentSelection: DeploymentSelection & {\n kind: \"deploymentWithinProject\";\n };\n cmdOptions: ConfigureCmdOptions;\n globallyForceCloud: boolean;\n },\n) {\n const hasAuth = ctx.bigBrainAuth() !== null;\n const loginMessage =\n hasAuth && shouldAllowAnonymousDevelopment()\n ? undefined\n : \"Tip: You can try out Convex without creating an account by clearing the \" +\n `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} environment variable (often in .env.local).`;\n await ensureLoggedIn(ctx, {\n message: loginMessage,\n overrideAuthUrl: cmdOptions.overrideAuthUrl,\n overrideAuthClient: cmdOptions.overrideAuthClient,\n overrideAuthUsername: cmdOptions.overrideAuthUsername,\n overrideAuthPassword: cmdOptions.overrideAuthPassword,\n });\n if (chosenConfiguration !== null) {\n const result = await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n return result;\n }\n\n const accessResult = await checkAccessToSelectedProject(\n ctx,\n deploymentSelection.targetProject,\n );\n if (accessResult.kind === \"noAccess\") {\n logMessage(\"You don't have access to the selected project.\");\n const result = await handleChooseProject(\n ctx,\n chosenConfiguration,\n deploymentSelection.selectionWithinProject,\n {\n globallyForceCloud,\n },\n cmdOptions,\n );\n return result;\n }\n\n const selectedDeployment = await loadSelectedDeploymentCredentials(\n ctx,\n deploymentSelection,\n // We'll start running it below\n { ensureLocalRunning: false },\n );\n if (\n selectedDeployment.deploymentFields !== null &&\n selectedDeployment.deploymentFields.deploymentType === \"local\"\n ) {\n // Start running the local backend, which may bind to different ports\n // than what was saved from a previous run.\n const localDeployment = await handleLocalDeployment(ctx, {\n teamSlug: selectedDeployment.deploymentFields.teamSlug!,\n projectSlug: selectedDeployment.deploymentFields.projectSlug!,\n forceUpgrade: cmdOptions.localOptions.forceUpgrade,\n ports: cmdOptions.localOptions.ports,\n backendVersion: cmdOptions.localOptions.backendVersion,\n });\n return {\n url: localDeployment.deploymentUrl,\n adminKey: localDeployment.adminKey,\n deploymentFields: selectedDeployment.deploymentFields,\n };\n }\n return {\n url: selectedDeployment.url,\n adminKey: selectedDeployment.adminKey,\n deploymentFields: selectedDeployment.deploymentFields,\n };\n}\n\nasync function handleChooseProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n selectionWithinProject: DeploymentSelectionWithinProject,\n args: {\n globallyForceCloud: boolean;\n },\n cmdOptions: ConfigureCmdOptions,\n): Promise<\n DeploymentCredentials & {\n deploymentFields: {\n deploymentName: DeploymentName;\n deploymentType: DeploymentType;\n projectSlug: string;\n teamSlug: string;\n };\n }\n> {\n await ensureLoggedIn(ctx, {\n overrideAuthUrl: cmdOptions.overrideAuthUrl,\n overrideAuthClient: cmdOptions.overrideAuthClient,\n overrideAuthUsername: cmdOptions.overrideAuthUsername,\n overrideAuthPassword: cmdOptions.overrideAuthPassword,\n });\n const project = await selectProject(ctx, chosenConfiguration, {\n team: cmdOptions.team,\n project: cmdOptions.project,\n devDeployment: cmdOptions.devDeployment,\n local: args.globallyForceCloud ? false : cmdOptions.local,\n cloud: args.globallyForceCloud ? true : cmdOptions.cloud,\n });\n // TODO complain about any non-default cmdOptions.localOptions here\n // because we're ignoring them if this isn't a local development.\n\n const deploymentOptions: DeploymentOptions =\n selectionWithinProject.kind === \"prod\"\n ? { kind: \"prod\" }\n : project.devDeployment === \"local\"\n ? { kind: \"local\", ...cmdOptions.localOptions }\n : { kind: \"dev\" };\n const {\n deploymentName,\n deploymentUrl: url,\n adminKey,\n } = await ensureDeploymentProvisioned(ctx, {\n teamSlug: project.teamSlug,\n projectSlug: project.projectSlug,\n deploymentOptions,\n });\n return {\n url,\n adminKey,\n deploymentFields: {\n deploymentName,\n deploymentType: deploymentOptions.kind,\n projectSlug: project.projectSlug,\n teamSlug: project.teamSlug,\n },\n };\n}\n\nasync function handleManuallySetUrlAndAdminKey(\n ctx: Context,\n cmdOptions: { url: string; siteUrl: string; adminKey: string },\n) {\n const { url, siteUrl, adminKey } = cmdOptions;\n const didErase = await eraseDeploymentEnvVar(ctx);\n if (didErase) {\n logMessage(\n chalkStderr.yellowBright(\n `Removed the CONVEX_DEPLOYMENT environment variable from .env.local`,\n ),\n );\n }\n const envFileConfig = await writeUrlsToEnvFile(ctx, {\n convexUrl: url,\n siteUrl,\n });\n if (\n envFileConfig !== null &&\n (envFileConfig.convexUrlEnvVar || envFileConfig.siteUrlEnvVar)\n ) {\n // Join both names with \" and \" if both exist, otherwise just use one of them.\n const updatedVars = [\n envFileConfig.convexUrlEnvVar,\n envFileConfig.siteUrlEnvVar,\n ]\n .filter(Boolean)\n .join(\" and \");\n logMessage(\n chalkStderr.green(`Saved ${updatedVars} to ${envFileConfig.envFile}`),\n );\n }\n return { url, adminKey };\n}\n\nexport async function selectProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n cmdOptions: {\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n local?: boolean | undefined;\n cloud?: boolean | undefined;\n defaultProjectName?: string | undefined;\n },\n): Promise<{\n teamSlug: string;\n projectSlug: string;\n devDeployment: \"cloud\" | \"local\";\n}> {\n // Prompt the user to select a project.\n const choice =\n chosenConfiguration !== \"ask\" && chosenConfiguration !== null\n ? chosenConfiguration\n : await askToConfigure(ctx);\n switch (choice) {\n case \"new\":\n return selectNewProject(ctx, chosenConfiguration, cmdOptions);\n case \"existing\":\n return selectExistingProject(ctx, chosenConfiguration, cmdOptions);\n default:\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No project selected.\",\n });\n }\n}\n\nconst cwd = path.basename(process.cwd());\nasync function selectNewProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n config: {\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n cloud?: boolean | undefined;\n local?: boolean | undefined;\n defaultProjectName?: string | undefined;\n },\n) {\n const { team: selectedTeam, chosen: didChooseBetweenTeams } =\n await validateOrSelectTeam(ctx, config.team, \"Team:\");\n let projectName: string = config.project || cwd;\n let choseProjectInteractively = false;\n if (!config.project) {\n projectName = await promptString(ctx, {\n message: \"Project name:\",\n default: config.defaultProjectName || cwd,\n });\n choseProjectInteractively = true;\n }\n\n const { devDeployment } = await selectDevDeploymentType(ctx, {\n chosenConfiguration,\n newOrExisting: \"new\",\n teamSlug: selectedTeam.slug,\n userHasChosenSomethingInteractively:\n didChooseBetweenTeams || choseProjectInteractively,\n projectSlug: undefined,\n devDeploymentFromFlag: config.devDeployment,\n forceDevDeployment: config.local\n ? \"local\"\n : config.cloud\n ? \"cloud\"\n : undefined,\n });\n\n const region =\n devDeployment === \"cloud\"\n ? await selectRegionOrUseDefault(ctx, selectedTeam, \"dev\")\n : null;\n\n showSpinner(\"Creating new Convex project...\");\n\n const deploymentToProvision =\n devDeployment === \"cloud\"\n ? {\n deploymentType: \"dev\" as const,\n region,\n }\n : null;\n\n let projectSlug, teamSlug, projectsRemaining;\n try {\n ({ projectSlug, teamSlug, projectsRemaining } = await createProject(ctx, {\n teamSlug: selectedTeam.slug,\n projectName,\n deploymentToProvision,\n }));\n } catch (err) {\n logFailure(\"Unable to create project.\");\n return await logAndHandleFetchError(ctx, err);\n }\n const teamMessage = didChooseBetweenTeams\n ? \" in team \" + chalkStderr.bold(teamSlug)\n : \"\";\n logFinishedStep(\n `Created project ${chalkStderr.bold(\n projectSlug,\n )}${teamMessage}, manage it at ${chalkStderr.bold(\n projectDashboardUrl(teamSlug, projectSlug),\n )}`,\n );\n\n if (projectsRemaining <= 2) {\n logWarning(\n chalkStderr.yellow.bold(\n `Your account now has ${projectsRemaining} project${\n projectsRemaining === 1 ? \"\" : \"s\"\n } remaining.`,\n ),\n );\n }\n\n await doInitConvexFolder(ctx);\n const { configPath, projectConfig } = await readProjectConfig(ctx);\n const folder = functionsDir(configPath, projectConfig);\n await attemptSetupAiFiles({\n ctx,\n aiFilesConfig: projectConfig.aiFiles,\n convexDir: path.resolve(folder),\n projectDir: path.resolve(path.dirname(configPath)),\n });\n return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function selectExistingProject(\n ctx: Context,\n chosenConfiguration: ChosenConfiguration,\n config: {\n team?: string | undefined;\n project?: string | undefined;\n devDeployment?: \"cloud\" | \"local\" | undefined;\n local?: boolean | undefined;\n cloud?: boolean | undefined;\n },\n): Promise<{\n teamSlug: string;\n projectSlug: string;\n devDeployment: \"cloud\" | \"local\";\n}> {\n const {\n team: { slug: teamSlug },\n chosen,\n } = await validateOrSelectTeam(ctx, config.team, \"Team:\");\n\n const projectSlug = await validateOrSelectProject(\n ctx,\n config.project,\n teamSlug,\n \"Configure project\",\n \"Project:\",\n );\n if (projectSlug === null) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Run the command again to create a new project instead.\",\n });\n }\n const { devDeployment } = await selectDevDeploymentType(ctx, {\n chosenConfiguration,\n newOrExisting: \"existing\",\n teamSlug,\n projectSlug,\n userHasChosenSomethingInteractively: chosen || !config.project,\n devDeploymentFromFlag: config.devDeployment,\n forceDevDeployment: config.local\n ? \"local\"\n : config.cloud\n ? \"cloud\"\n : undefined,\n });\n\n logFinishedStep(`Reinitialized project ${chalkStderr.bold(projectSlug)}`);\n\n const { configPath, projectConfig } = await readProjectConfig(ctx);\n const folder = functionsDir(configPath, projectConfig);\n await attemptSetupAiFiles({\n ctx,\n aiFilesConfig: projectConfig.aiFiles,\n convexDir: path.resolve(folder),\n projectDir: path.resolve(path.dirname(configPath)),\n });\n\n return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function askToConfigure(ctx: Context): Promise<\"new\" | \"existing\"> {\n if (!(await hasProjects(ctx))) {\n return \"new\";\n }\n return await promptOptions(ctx, {\n message: \"What would you like to configure?\",\n default: \"new\",\n choices: [\n { name: \"create a new project\", value: \"new\" },\n { name: \"choose an existing project\", value: \"existing\" },\n ],\n });\n}\n\ntype DeploymentOptions =\n | {\n kind: \"prod\";\n }\n | { kind: \"dev\" }\n | {\n kind: \"local\";\n ports?:\n | {\n cloud: number;\n site: number;\n }\n | undefined;\n backendVersion?: string | undefined;\n forceUpgrade: boolean;\n };\n\n/**\n * This method assumes that the member has access to the selected project.\n */\nasync function ensureDeploymentProvisioned(\n ctx: Context,\n options: {\n teamSlug: string;\n projectSlug: string;\n deploymentOptions: DeploymentOptions;\n },\n): Promise<DeploymentDetails> {\n switch (options.deploymentOptions.kind) {\n case \"dev\":\n case \"prod\": {\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n {\n kind: \"teamAndProjectSlugs\",\n teamSlug: options.teamSlug,\n projectSlug: options.projectSlug,\n },\n options.deploymentOptions.kind,\n );\n return {\n ...credentials,\n onActivity: null,\n };\n }\n case \"local\": {\n const credentials = await handleLocalDeployment(ctx, {\n teamSlug: options.teamSlug,\n projectSlug: options.projectSlug,\n ...options.deploymentOptions,\n });\n return credentials;\n }\n default:\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n errForSentry: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n });\n }\n}\n\nexport async function updateEnvAndConfigForDeploymentSelection(\n ctx: Context,\n options: {\n url: string;\n siteUrl?: string | null;\n deploymentName: string;\n teamSlug: string | null;\n projectSlug: string | null;\n deploymentType: DeploymentType;\n },\n existingValue: string | null,\n) {\n const { configPath, projectConfig } = await readProjectConfig(ctx);\n\n const { wroteToGitIgnore, changedDeploymentEnvVar } =\n options.deploymentType !== \"prod\"\n ? await writeDeploymentEnvVar(\n ctx,\n options.deploymentType,\n {\n team: options.teamSlug,\n project: options.projectSlug,\n deploymentName: options.deploymentName,\n },\n existingValue,\n )\n : { wroteToGitIgnore: false, changedDeploymentEnvVar: false };\n await ensureConvexFunctionsDir(ctx, projectConfig);\n await finalizeConfiguration(ctx, {\n deploymentType: options.deploymentType,\n deploymentName: options.deploymentName,\n url: options.url,\n siteUrl: options.siteUrl,\n wroteToGitIgnore,\n changedDeploymentEnvVar,\n functionsPath: functionsDir(configPath, projectConfig),\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["path"]
|
|
7
7
|
}
|
package/dist/cjs/cli/deploy.js
CHANGED
|
@@ -79,7 +79,10 @@ Deploys to a preview deployment if the \`${import_utils.CONVEX_DEPLOY_KEY_ENV_VA
|
|
|
79
79
|
new import_extra_typings.Option("--allow-deleting-large-indexes").hideHelp().conflicts("preview-create").conflicts("preview-name")
|
|
80
80
|
).showHelpAfterError().action(async (cmdOptions) => {
|
|
81
81
|
const ctx = await (0, import_context.oneoffContext)(cmdOptions);
|
|
82
|
-
const deploymentSelection = await (0, import_deploymentSelection.getDeploymentSelection)(ctx,
|
|
82
|
+
const deploymentSelection = await (0, import_deploymentSelection.getDeploymentSelection)(ctx, {
|
|
83
|
+
...cmdOptions,
|
|
84
|
+
implicitProd: true
|
|
85
|
+
});
|
|
83
86
|
if (cmdOptions.checkBuildEnvironment === "enable" && (0, import_envvars.isNonProdBuildEnvironment)() && deploymentSelection.kind === "existingDeployment" && deploymentSelection.deploymentToActOn.source === "deployKey" && deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType === "prod") {
|
|
84
87
|
await ctx.crash({
|
|
85
88
|
exitCode: 1,
|
|
@@ -135,7 +138,7 @@ Deploys to a preview deployment if the \`${import_utils.CONVEX_DEPLOY_KEY_ENV_VA
|
|
|
135
138
|
printedMessage: `Preview deployments can only be created with preview deploy keys. Generate a preview deploy key ${source} and set the ${import_chalk.chalkStderr.bold(`CONVEX_DEPLOY_KEY`)} environment variable with it.`
|
|
136
139
|
});
|
|
137
140
|
}
|
|
138
|
-
await deployToExistingDeployment(ctx, {
|
|
141
|
+
await deployToExistingDeployment(ctx, deploymentSelection, {
|
|
139
142
|
...cmdOptions,
|
|
140
143
|
skipWorkosCheck: cmdOptions.skipWorkosCheck ?? false,
|
|
141
144
|
allowDeletingLargeIndexes: cmdOptions.allowDeletingLargeIndexes ?? false
|
|
@@ -232,11 +235,7 @@ async function deployToNewPreviewDeployment(ctx, deploymentSelection, options) {
|
|
|
232
235
|
});
|
|
233
236
|
}
|
|
234
237
|
}
|
|
235
|
-
async function deployToExistingDeployment(ctx, options) {
|
|
236
|
-
const deploymentSelection = await (0, import_deploymentSelection.getDeploymentSelection)(ctx, {
|
|
237
|
-
...options,
|
|
238
|
-
implicitProd: true
|
|
239
|
-
});
|
|
238
|
+
async function deployToExistingDeployment(ctx, deploymentSelection, options) {
|
|
240
239
|
const deploymentToActOn = await (0, import_api.loadSelectedDeploymentCredentials)(
|
|
241
240
|
ctx,
|
|
242
241
|
deploymentSelection
|
|
@@ -276,7 +275,7 @@ async function deployToExistingDeployment(ctx, options) {
|
|
|
276
275
|
),
|
|
277
276
|
...isCloudDeployment ? [
|
|
278
277
|
(0, import_usage.usageStateWarning)(ctx, deploymentFields.deploymentName),
|
|
279
|
-
(0, import_updates.
|
|
278
|
+
(0, import_updates.checkVersionAndAiFilesStaleness)(ctx)
|
|
280
279
|
] : []
|
|
281
280
|
]);
|
|
282
281
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/deploy.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, showSpinner } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport {\n gitBranchFromEnvironment,\n isNonProdBuildEnvironment,\n suggestedEnvVarNames,\n} from \"./lib/envvars.js\";\nimport { PushOptions } from \"./lib/components.js\";\nimport {\n CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n CONVEX_SELF_HOSTED_URL_VAR_NAME,\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n bigBrainAPI,\n} from \"./lib/utils/utils.js\";\nimport { runFunctionAndLog } from \"./lib/run.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { runPush } from \"./lib/components.js\";\nimport { promptYesNo } from \"./lib/utils/prompts.js\";\nimport { deployToDeployment, runCommand } from \"./lib/deploy2.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { deploymentNameAndTypeFromSelection } from \"./lib/deploymentSelection.js\";\nimport { checkVersion } from \"./lib/updates.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./lib/workos/workos.js\";\nimport { DASHBOARD_HOST } from \"./lib/dashboard.js\";\nimport { extractDeploymentNameForWorkOS } from \"./lib/extractDeploymentNameForWorkOS.js\";\n\nexport const deploy = new Command(\"deploy\")\n .summary(\"Deploy to your prod deployment\")\n .description(\n \"Deploy to your deployment. By default, this deploys to your prod deployment.\\n\\n\" +\n `Deploys to a preview deployment if the \\`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\\` environment variable is set to a Preview Deploy Key.`,\n )\n .allowExcessArguments(false)\n .addDeployOptions()\n .addOption(\n new Option(\n \"--preview-run <functionName>\",\n \"Function to run if deploying to a preview deployment. This is ignored if deploying to a production deployment.\",\n ),\n )\n .addOption(\n new Option(\n \"--preview-create <name>\",\n \"The name to associate with this deployment if deploying to a newly created preview deployment. Defaults to the current Git branch name in Vercel, Netlify and GitHub CI. This parameter can only be used with a preview deploy key (when used with another type of key, the command will return an error).\",\n ).conflicts(\"preview-name\"),\n )\n .addOption(\n new Option(\n \"--check-build-environment <mode>\",\n \"Whether to check for a non-production build environment before deploying to a production Convex deployment.\",\n )\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const)\n .hideHelp(),\n )\n // Hidden options to pass in admin key and url for tests and local development\n .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n .addOption(new Option(\"--url <url>\").hideHelp())\n .addOption(\n new Option(\n \"--preview-name <name>\",\n \"[deprecated] Use `--preview-create` instead. The name to associate with this deployment if deploying to a preview deployment.\",\n )\n .hideHelp()\n .conflicts(\"preview-create\"),\n )\n .addOption(\n new Option(\n \"--env-file <envFile>\",\n `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n ),\n )\n .addOption(\n new Option(\n \"--skip-workos-check\",\n \"Skip WorkOS AuthKit provisioning and credential checks during deploy.\",\n ).hideHelp(),\n )\n .addOption(\n new Option(\"--allow-deleting-large-indexes\")\n .hideHelp()\n .conflicts(\"preview-create\")\n .conflicts(\"preview-name\"),\n )\n .showHelpAfterError()\n .action(async (cmdOptions) => {\n const ctx = await oneoffContext(cmdOptions);\n\n const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n if (\n cmdOptions.checkBuildEnvironment === \"enable\" &&\n isNonProdBuildEnvironment() &&\n deploymentSelection.kind === \"existingDeployment\" &&\n deploymentSelection.deploymentToActOn.source === \"deployKey\" &&\n deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ===\n \"prod\"\n ) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Detected a non-production build environment and \"${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\" for a production Convex deployment.\\n\n This is probably unintentional.\n `,\n });\n }\n\n if (deploymentSelection.kind === \"anonymous\") {\n logMessage(\n \"You are currently developing anonymously with a locally running project.\\n\" +\n \"To deploy your Convex app to the cloud, log in by running `npx convex login`.\\n\" +\n \"See https://docs.convex.dev/production for more information on how Convex cloud works and instructions on how to set up hosting.\",\n );\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n\n if (deploymentSelection.kind === \"preview\") {\n // TODO -- add usage state warnings here too once we can do it without a deployment name\n // await usageStateWarning(ctx);\n if (cmdOptions.previewName !== undefined) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"The `--preview-name` flag has been deprecated in favor of `--preview-create`. Please re-run the command using `--preview-create` instead.\",\n });\n }\n\n const teamAndProjectSlugs = await getTeamAndProjectFromPreviewAdminKey(\n ctx,\n deploymentSelection.previewDeployKey,\n );\n await deployToNewPreviewDeployment(\n ctx,\n {\n previewDeployKey: deploymentSelection.previewDeployKey,\n projectSelection: {\n kind: \"teamAndProjectSlugs\",\n teamSlug: teamAndProjectSlugs.teamSlug,\n projectSlug: teamAndProjectSlugs.projectSlug,\n },\n },\n {\n ...cmdOptions,\n },\n );\n } else {\n if (cmdOptions.previewCreate !== undefined) {\n const source =\n deploymentSelection.kind === \"deploymentWithinProject\" &&\n deploymentSelection.targetProject.kind === \"deploymentName\"\n ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.targetProject.deploymentName}/settings#preview-deploy-keys`)}`\n : deploymentSelection.kind === \"existingDeployment\" &&\n deploymentSelection.deploymentToActOn.deploymentFields !== null\n ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.deploymentToActOn.deploymentFields.deploymentName}/settings#preview-deploy-keys`)}`\n : \"on the dashboard\";\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Preview deployments can only be created with preview deploy keys. Generate a preview deploy key ${source} and set the ${chalkStderr.bold(`CONVEX_DEPLOY_KEY`)} environment variable with it.`,\n });\n }\n\n await deployToExistingDeployment(ctx, {\n ...cmdOptions,\n skipWorkosCheck: cmdOptions.skipWorkosCheck ?? false,\n allowDeletingLargeIndexes:\n cmdOptions.allowDeletingLargeIndexes ?? false,\n });\n }\n });\n\nasync function deployToNewPreviewDeployment(\n ctx: Context,\n deploymentSelection: {\n previewDeployKey: string;\n projectSelection: {\n kind: \"teamAndProjectSlugs\";\n teamSlug: string;\n projectSlug: string;\n };\n },\n options: {\n dryRun?: boolean | undefined;\n previewCreate?: string | undefined;\n previewRun?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n cmd?: string | undefined;\n verbose?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n pushAllModules?: boolean;\n\n debug?: boolean | undefined;\n debugBundlePath?: string | undefined;\n skipWorkosCheck?: boolean | undefined;\n },\n) {\n const previewName = options.previewCreate ?? gitBranchFromEnvironment();\n if (previewName === null) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`npx convex deploy` to a preview deployment could not determine the preview name. Provide one using `--preview-create`\",\n });\n }\n\n if (options.dryRun) {\n logFinishedStep(\n `Would have claimed preview deployment for \"${previewName}\"`,\n );\n await runCommand(ctx, {\n cmdUrlEnvVarName: options.cmdUrlEnvVarName,\n cmd: options.cmd,\n dryRun: !!options.dryRun,\n url: \"https://<PREVIEW DEPLOYMENT>.convex.cloud\",\n adminKey: \"preview-deployment-admin-key\",\n });\n logFinishedStep(\n `Would have deployed Convex functions to preview deployment for \"${previewName}\"`,\n );\n if (options.previewRun !== undefined) {\n logMessage(`Would have run function \"${options.previewRun}\"`);\n }\n return;\n }\n const data = await bigBrainAPI({\n ctx,\n method: \"POST\",\n path: \"claim_preview_deployment\",\n data: {\n projectSelection: deploymentSelection.projectSelection,\n identifier: previewName,\n },\n });\n\n const previewAdminKey = data.adminKey;\n const previewUrl = data.instanceUrl;\n\n // Extract deployment name from URL for WorkOS provisioning\n const deploymentNameForWorkOS = extractDeploymentNameForWorkOS(previewUrl);\n\n // Provision WorkOS before building the client bundle (if configured)\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n if (authKitConfig && deploymentNameForWorkOS && !options.skipWorkosCheck) {\n await ensureAuthKitProvisionedBeforeBuild(\n ctx,\n deploymentNameForWorkOS,\n { deploymentUrl: previewUrl, adminKey: previewAdminKey },\n \"preview\",\n );\n }\n\n await runCommand(ctx, {\n ...options,\n url: previewUrl,\n adminKey: previewAdminKey,\n });\n\n const pushOptions: PushOptions = {\n deploymentName: null,\n adminKey: previewAdminKey,\n verbose: !!options.verbose,\n dryRun: false,\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n debug: !!options.debug,\n debugBundlePath: options.debugBundlePath,\n debugNodeApis: false,\n codegen: options.codegen === \"enable\",\n url: previewUrl,\n liveComponentSources: false,\n pushAllModules: !!options.pushAllModules,\n largeIndexDeletionCheck: \"no verification\", // fine for preview deployments\n };\n showSpinner(`Deploying to ${previewUrl}...`);\n await runPush(ctx, pushOptions);\n logFinishedStep(`Deployed Convex functions to ${previewUrl}`);\n\n if (options.previewRun !== undefined) {\n await runFunctionAndLog(ctx, {\n deploymentUrl: previewUrl,\n adminKey: previewAdminKey,\n functionName: options.previewRun,\n argsString: \"{}\",\n componentPath: undefined,\n callbacks: {\n onSuccess: () => {\n logFinishedStep(`Finished running function \"${options.previewRun}\"`);\n },\n },\n });\n }\n}\n\nasync function deployToExistingDeployment(\n ctx: Context,\n options: {\n verbose?: boolean | undefined;\n dryRun?: boolean | undefined;\n yes?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n pushAllModules?: boolean;\n\n debugBundlePath?: string | undefined;\n debug?: boolean | undefined;\n adminKey?: string | undefined;\n url?: string | undefined;\n writePushRequest?: string | undefined;\n liveComponentSources?: boolean | undefined;\n envFile?: string | undefined;\n skipWorkosCheck?: boolean | undefined;\n allowDeletingLargeIndexes: boolean;\n },\n) {\n const deploymentSelection = await getDeploymentSelection(ctx, {\n ...options,\n implicitProd: true,\n });\n const deploymentToActOn = await loadSelectedDeploymentCredentials(\n ctx,\n deploymentSelection,\n );\n const { deploymentFields } = deploymentToActOn;\n\n const configuredDeployment =\n deploymentNameAndTypeFromSelection(deploymentSelection);\n if (configuredDeployment !== null && configuredDeployment.name !== null) {\n const shouldPushToProd =\n configuredDeployment.name === deploymentFields?.deploymentName ||\n (options.yes ??\n (await askToConfirmPush(\n ctx,\n {\n configuredName: configuredDeployment.name,\n configuredType: configuredDeployment.type,\n requestedName: deploymentFields?.deploymentName!,\n requestedType: deploymentFields?.deploymentType!,\n },\n deploymentToActOn.url,\n )));\n if (!shouldPushToProd) {\n await ctx.crash({\n exitCode: 1,\n printedMessage: null,\n errorType: \"fatal\",\n });\n }\n }\n\n const isCloudDeployment = deploymentFields !== null;\n await Promise.all([\n deployToDeployment(\n ctx,\n {\n url: deploymentToActOn.url,\n adminKey: deploymentToActOn.adminKey,\n deploymentName: deploymentFields?.deploymentName ?? null,\n ...(deploymentFields?.deploymentType !== undefined\n ? { deploymentType: deploymentFields.deploymentType }\n : {}),\n },\n { ...options, skipWorkosCheck: options.skipWorkosCheck },\n ),\n ...(isCloudDeployment\n ? [\n usageStateWarning(ctx, deploymentFields.deploymentName),\n checkVersion(ctx),\n ]\n : []),\n ]);\n}\n\nasync function askToConfirmPush(\n ctx: Context,\n deployment: {\n configuredName: string;\n configuredType: string | null;\n requestedName: string;\n requestedType: string;\n },\n prodUrl: string,\n) {\n logMessage(\n `\\\nYou're currently developing against your ${chalkStderr.bold(\n deployment.configuredType ?? \"dev\",\n )} deployment\n\n ${deployment.configuredName} (set in CONVEX_DEPLOYMENT)\n\nYour ${chalkStderr.bold(deployment.requestedType)} deployment ${chalkStderr.bold(\n deployment.requestedName,\n )} serves traffic at:\n\n ${(await suggestedEnvVarNames(ctx)).convexUrlEnvVar}=${chalkStderr.bold(prodUrl)}\n\nMake sure that your published client is configured with this URL (for instructions see https://docs.convex.dev/hosting)\\n`,\n );\n return promptYesNo(ctx, {\n message: `Do you want to push your code to your ${deployment.requestedType} deployment ${deployment.requestedName} now?`,\n default: true,\n });\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAC5B,2BAAgC;AAChC,qBAAuC;AACvC,iBAAyD;AACzD,iBAAkD;AAClD,qBAIO;AAEP,mBAKO;AACP,iBAAkC;AAClC,mBAAkC;AAClC,wBAAqD;AACrD,IAAAA,qBAAwB;AACxB,qBAA4B;AAC5B,qBAA+C;AAC/C,
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, showSpinner } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport {\n gitBranchFromEnvironment,\n isNonProdBuildEnvironment,\n suggestedEnvVarNames,\n} from \"./lib/envvars.js\";\nimport { PushOptions } from \"./lib/components.js\";\nimport {\n CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n CONVEX_SELF_HOSTED_URL_VAR_NAME,\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n bigBrainAPI,\n} from \"./lib/utils/utils.js\";\nimport { runFunctionAndLog } from \"./lib/run.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { runPush } from \"./lib/components.js\";\nimport { promptYesNo } from \"./lib/utils/prompts.js\";\nimport { deployToDeployment, runCommand } from \"./lib/deploy2.js\";\nimport {\n DeploymentSelection,\n getDeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { deploymentNameAndTypeFromSelection } from \"./lib/deploymentSelection.js\";\nimport { checkVersionAndAiFilesStaleness } from \"./lib/updates.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./lib/workos/workos.js\";\nimport { DASHBOARD_HOST } from \"./lib/dashboard.js\";\nimport { extractDeploymentNameForWorkOS } from \"./lib/extractDeploymentNameForWorkOS.js\";\n\nexport const deploy = new Command(\"deploy\")\n .summary(\"Deploy to your prod deployment\")\n .description(\n \"Deploy to your deployment. By default, this deploys to your prod deployment.\\n\\n\" +\n `Deploys to a preview deployment if the \\`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\\` environment variable is set to a Preview Deploy Key.`,\n )\n .allowExcessArguments(false)\n .addDeployOptions()\n .addOption(\n new Option(\n \"--preview-run <functionName>\",\n \"Function to run if deploying to a preview deployment. This is ignored if deploying to a production deployment.\",\n ),\n )\n .addOption(\n new Option(\n \"--preview-create <name>\",\n \"The name to associate with this deployment if deploying to a newly created preview deployment. Defaults to the current Git branch name in Vercel, Netlify and GitHub CI. This parameter can only be used with a preview deploy key (when used with another type of key, the command will return an error).\",\n ).conflicts(\"preview-name\"),\n )\n .addOption(\n new Option(\n \"--check-build-environment <mode>\",\n \"Whether to check for a non-production build environment before deploying to a production Convex deployment.\",\n )\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const)\n .hideHelp(),\n )\n // Hidden options to pass in admin key and url for tests and local development\n .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n .addOption(new Option(\"--url <url>\").hideHelp())\n .addOption(\n new Option(\n \"--preview-name <name>\",\n \"[deprecated] Use `--preview-create` instead. The name to associate with this deployment if deploying to a preview deployment.\",\n )\n .hideHelp()\n .conflicts(\"preview-create\"),\n )\n .addOption(\n new Option(\n \"--env-file <envFile>\",\n `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n ),\n )\n .addOption(\n new Option(\n \"--skip-workos-check\",\n \"Skip WorkOS AuthKit provisioning and credential checks during deploy.\",\n ).hideHelp(),\n )\n .addOption(\n new Option(\"--allow-deleting-large-indexes\")\n .hideHelp()\n .conflicts(\"preview-create\")\n .conflicts(\"preview-name\"),\n )\n .showHelpAfterError()\n .action(async (cmdOptions) => {\n const ctx = await oneoffContext(cmdOptions);\n\n const deploymentSelection = await getDeploymentSelection(ctx, {\n ...cmdOptions,\n implicitProd: true,\n });\n if (\n cmdOptions.checkBuildEnvironment === \"enable\" &&\n isNonProdBuildEnvironment() &&\n deploymentSelection.kind === \"existingDeployment\" &&\n deploymentSelection.deploymentToActOn.source === \"deployKey\" &&\n deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ===\n \"prod\"\n ) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Detected a non-production build environment and \"${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\" for a production Convex deployment.\\n\n This is probably unintentional.\n `,\n });\n }\n\n if (deploymentSelection.kind === \"anonymous\") {\n logMessage(\n \"You are currently developing anonymously with a locally running project.\\n\" +\n \"To deploy your Convex app to the cloud, log in by running `npx convex login`.\\n\" +\n \"See https://docs.convex.dev/production for more information on how Convex cloud works and instructions on how to set up hosting.\",\n );\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n\n if (deploymentSelection.kind === \"preview\") {\n // TODO -- add usage state warnings here too once we can do it without a deployment name\n // await usageStateWarning(ctx);\n if (cmdOptions.previewName !== undefined) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"The `--preview-name` flag has been deprecated in favor of `--preview-create`. Please re-run the command using `--preview-create` instead.\",\n });\n }\n\n const teamAndProjectSlugs = await getTeamAndProjectFromPreviewAdminKey(\n ctx,\n deploymentSelection.previewDeployKey,\n );\n await deployToNewPreviewDeployment(\n ctx,\n {\n previewDeployKey: deploymentSelection.previewDeployKey,\n projectSelection: {\n kind: \"teamAndProjectSlugs\",\n teamSlug: teamAndProjectSlugs.teamSlug,\n projectSlug: teamAndProjectSlugs.projectSlug,\n },\n },\n {\n ...cmdOptions,\n },\n );\n } else {\n if (cmdOptions.previewCreate !== undefined) {\n const source =\n deploymentSelection.kind === \"deploymentWithinProject\" &&\n deploymentSelection.targetProject.kind === \"deploymentName\"\n ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.targetProject.deploymentName}/settings#preview-deploy-keys`)}`\n : deploymentSelection.kind === \"existingDeployment\" &&\n deploymentSelection.deploymentToActOn.deploymentFields !== null\n ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.deploymentToActOn.deploymentFields.deploymentName}/settings#preview-deploy-keys`)}`\n : \"on the dashboard\";\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Preview deployments can only be created with preview deploy keys. Generate a preview deploy key ${source} and set the ${chalkStderr.bold(`CONVEX_DEPLOY_KEY`)} environment variable with it.`,\n });\n }\n\n await deployToExistingDeployment(ctx, deploymentSelection, {\n ...cmdOptions,\n skipWorkosCheck: cmdOptions.skipWorkosCheck ?? false,\n allowDeletingLargeIndexes:\n cmdOptions.allowDeletingLargeIndexes ?? false,\n });\n }\n });\n\nasync function deployToNewPreviewDeployment(\n ctx: Context,\n deploymentSelection: {\n previewDeployKey: string;\n projectSelection: {\n kind: \"teamAndProjectSlugs\";\n teamSlug: string;\n projectSlug: string;\n };\n },\n options: {\n dryRun?: boolean | undefined;\n previewCreate?: string | undefined;\n previewRun?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n cmd?: string | undefined;\n verbose?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n pushAllModules?: boolean;\n\n debug?: boolean | undefined;\n debugBundlePath?: string | undefined;\n skipWorkosCheck?: boolean | undefined;\n },\n) {\n const previewName = options.previewCreate ?? gitBranchFromEnvironment();\n if (previewName === null) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`npx convex deploy` to a preview deployment could not determine the preview name. Provide one using `--preview-create`\",\n });\n }\n\n if (options.dryRun) {\n logFinishedStep(\n `Would have claimed preview deployment for \"${previewName}\"`,\n );\n await runCommand(ctx, {\n cmdUrlEnvVarName: options.cmdUrlEnvVarName,\n cmd: options.cmd,\n dryRun: !!options.dryRun,\n url: \"https://<PREVIEW DEPLOYMENT>.convex.cloud\",\n adminKey: \"preview-deployment-admin-key\",\n });\n logFinishedStep(\n `Would have deployed Convex functions to preview deployment for \"${previewName}\"`,\n );\n if (options.previewRun !== undefined) {\n logMessage(`Would have run function \"${options.previewRun}\"`);\n }\n return;\n }\n const data = await bigBrainAPI({\n ctx,\n method: \"POST\",\n path: \"claim_preview_deployment\",\n data: {\n projectSelection: deploymentSelection.projectSelection,\n identifier: previewName,\n },\n });\n\n const previewAdminKey = data.adminKey;\n const previewUrl = data.instanceUrl;\n\n // Extract deployment name from URL for WorkOS provisioning\n const deploymentNameForWorkOS = extractDeploymentNameForWorkOS(previewUrl);\n\n // Provision WorkOS before building the client bundle (if configured)\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n if (authKitConfig && deploymentNameForWorkOS && !options.skipWorkosCheck) {\n await ensureAuthKitProvisionedBeforeBuild(\n ctx,\n deploymentNameForWorkOS,\n { deploymentUrl: previewUrl, adminKey: previewAdminKey },\n \"preview\",\n );\n }\n\n await runCommand(ctx, {\n ...options,\n url: previewUrl,\n adminKey: previewAdminKey,\n });\n\n const pushOptions: PushOptions = {\n deploymentName: null,\n adminKey: previewAdminKey,\n verbose: !!options.verbose,\n dryRun: false,\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n debug: !!options.debug,\n debugBundlePath: options.debugBundlePath,\n debugNodeApis: false,\n codegen: options.codegen === \"enable\",\n url: previewUrl,\n liveComponentSources: false,\n pushAllModules: !!options.pushAllModules,\n largeIndexDeletionCheck: \"no verification\", // fine for preview deployments\n };\n showSpinner(`Deploying to ${previewUrl}...`);\n await runPush(ctx, pushOptions);\n logFinishedStep(`Deployed Convex functions to ${previewUrl}`);\n\n if (options.previewRun !== undefined) {\n await runFunctionAndLog(ctx, {\n deploymentUrl: previewUrl,\n adminKey: previewAdminKey,\n functionName: options.previewRun,\n argsString: \"{}\",\n componentPath: undefined,\n callbacks: {\n onSuccess: () => {\n logFinishedStep(`Finished running function \"${options.previewRun}\"`);\n },\n },\n });\n }\n}\n\nasync function deployToExistingDeployment(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n options: {\n verbose?: boolean | undefined;\n dryRun?: boolean | undefined;\n yes?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n pushAllModules?: boolean;\n\n debugBundlePath?: string | undefined;\n debug?: boolean | undefined;\n adminKey?: string | undefined;\n url?: string | undefined;\n writePushRequest?: string | undefined;\n liveComponentSources?: boolean | undefined;\n envFile?: string | undefined;\n skipWorkosCheck?: boolean | undefined;\n allowDeletingLargeIndexes: boolean;\n },\n) {\n const deploymentToActOn = await loadSelectedDeploymentCredentials(\n ctx,\n deploymentSelection,\n );\n const { deploymentFields } = deploymentToActOn;\n\n const configuredDeployment =\n deploymentNameAndTypeFromSelection(deploymentSelection);\n if (configuredDeployment !== null && configuredDeployment.name !== null) {\n const shouldPushToProd =\n configuredDeployment.name === deploymentFields?.deploymentName ||\n (options.yes ??\n (await askToConfirmPush(\n ctx,\n {\n configuredName: configuredDeployment.name,\n configuredType: configuredDeployment.type,\n requestedName: deploymentFields?.deploymentName!,\n requestedType: deploymentFields?.deploymentType!,\n },\n deploymentToActOn.url,\n )));\n if (!shouldPushToProd) {\n await ctx.crash({\n exitCode: 1,\n printedMessage: null,\n errorType: \"fatal\",\n });\n }\n }\n\n const isCloudDeployment = deploymentFields !== null;\n await Promise.all([\n deployToDeployment(\n ctx,\n {\n url: deploymentToActOn.url,\n adminKey: deploymentToActOn.adminKey,\n deploymentName: deploymentFields?.deploymentName ?? null,\n ...(deploymentFields?.deploymentType !== undefined\n ? { deploymentType: deploymentFields.deploymentType }\n : {}),\n },\n { ...options, skipWorkosCheck: options.skipWorkosCheck },\n ),\n ...(isCloudDeployment\n ? [\n usageStateWarning(ctx, deploymentFields.deploymentName),\n checkVersionAndAiFilesStaleness(ctx),\n ]\n : []),\n ]);\n}\n\nasync function askToConfirmPush(\n ctx: Context,\n deployment: {\n configuredName: string;\n configuredType: string | null;\n requestedName: string;\n requestedType: string;\n },\n prodUrl: string,\n) {\n logMessage(\n `\\\nYou're currently developing against your ${chalkStderr.bold(\n deployment.configuredType ?? \"dev\",\n )} deployment\n\n ${deployment.configuredName} (set in CONVEX_DEPLOYMENT)\n\nYour ${chalkStderr.bold(deployment.requestedType)} deployment ${chalkStderr.bold(\n deployment.requestedName,\n )} serves traffic at:\n\n ${(await suggestedEnvVarNames(ctx)).convexUrlEnvVar}=${chalkStderr.bold(prodUrl)}\n\nMake sure that your published client is configured with this URL (for instructions see https://docs.convex.dev/hosting)\\n`,\n );\n return promptYesNo(ctx, {\n message: `Do you want to push your code to your ${deployment.requestedType} deployment ${deployment.requestedName} now?`,\n default: true,\n });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_components", "import_deploymentSelection"]
|
|
7
7
|
}
|