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
|
@@ -33,27 +33,81 @@ var import_deploymentSelect = require("./deploymentSelect.js");
|
|
|
33
33
|
var import_prompts = require("./lib/utils/prompts.js");
|
|
34
34
|
var import_chalk = require("chalk");
|
|
35
35
|
var import_deploymentSelector = require("./lib/deploymentSelector.js");
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
var import_expiration = require("./lib/expiration.js");
|
|
37
|
+
var import_download = require("./lib/localDeployment/download.js");
|
|
38
|
+
var import_filePaths = require("./lib/localDeployment/filePaths.js");
|
|
39
|
+
var import_utils2 = require("./lib/localDeployment/utils.js");
|
|
40
|
+
var import_bigBrain = require("./lib/localDeployment/bigBrain.js");
|
|
41
|
+
const SUPPORTED_TYPES = ["dev", "prod", "preview"];
|
|
42
|
+
const deploymentCreate = new import_extra_typings.Command("create").summary("Create a new deployment for a project").description(
|
|
43
|
+
"Create a new deployment for a project.\n\n Create a dev deployment and select it: `npx convex deployment create dev/my-new-feature --type dev --select`\n Create a prod deployment named \u201Cstaging\u201D: `npx convex deployment create staging --type prod`\n Create a local deployment: `npx convex deployment create local`\n"
|
|
38
44
|
).argument("[ref]").allowExcessArguments(false).addOption(
|
|
39
|
-
new import_extra_typings.Option("--type <type>", "Deployment type").choices(
|
|
40
|
-
"dev",
|
|
41
|
-
"prod",
|
|
42
|
-
"preview"
|
|
43
|
-
])
|
|
45
|
+
new import_extra_typings.Option("--type <type>", "Deployment type").choices(SUPPORTED_TYPES)
|
|
44
46
|
).option("--region <region>", "Deployment region").option(
|
|
45
47
|
"--select",
|
|
46
|
-
"Select the new deployment. This will update the Convex environment variables in .env.local
|
|
48
|
+
"Select the new deployment. This will update the Convex environment variables in .env.local. Subsequent `npx convex` commands will run against this deployment."
|
|
47
49
|
).option(
|
|
48
50
|
"--default",
|
|
49
|
-
"
|
|
51
|
+
"Make the new deployment your default production deployment (used by `npx convex deploy`) or your personal dev deployment."
|
|
52
|
+
).option(
|
|
53
|
+
"--expiration <value>",
|
|
54
|
+
'When the deployment expires (e.g. "none", "in 7 days", "2026-04-01T00:00:00Z", or a UNIX timestamp in seconds or milliseconds)'
|
|
50
55
|
).action(async (refParam, options) => {
|
|
51
56
|
const ctx = await (0, import_context.oneoffContext)({
|
|
52
57
|
url: void 0,
|
|
53
58
|
adminKey: void 0,
|
|
54
59
|
envFile: void 0
|
|
55
60
|
});
|
|
56
|
-
const
|
|
61
|
+
const currentDeployment = await (0, import_deploymentSelection.getDeploymentSelection)(ctx, {
|
|
62
|
+
url: void 0,
|
|
63
|
+
adminKey: void 0,
|
|
64
|
+
envFile: void 0
|
|
65
|
+
});
|
|
66
|
+
if (refParam !== void 0) {
|
|
67
|
+
if (refParam === "local") {
|
|
68
|
+
const cloudOnlyFlags = [
|
|
69
|
+
"type",
|
|
70
|
+
"region",
|
|
71
|
+
"default",
|
|
72
|
+
"expiration"
|
|
73
|
+
];
|
|
74
|
+
for (const flag of cloudOnlyFlags) {
|
|
75
|
+
if (options[flag]) {
|
|
76
|
+
return await ctx.crash({
|
|
77
|
+
exitCode: 1,
|
|
78
|
+
errorType: "fatal",
|
|
79
|
+
printedMessage: `--${flag} cannot be used when creating a local deployment`
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
await createLocalDeployment(
|
|
84
|
+
ctx,
|
|
85
|
+
currentDeployment,
|
|
86
|
+
options.select ?? false
|
|
87
|
+
);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const expiresAt = await resolveExpiresAtOrCrash(ctx, options.expiration);
|
|
92
|
+
const {
|
|
93
|
+
ref,
|
|
94
|
+
regionDetails,
|
|
95
|
+
projectId,
|
|
96
|
+
type,
|
|
97
|
+
isDefault,
|
|
98
|
+
teamSlug,
|
|
99
|
+
projectSlug
|
|
100
|
+
} = process.stdin.isTTY ? await resolveOptionsInteractively(
|
|
101
|
+
ctx,
|
|
102
|
+
currentDeployment,
|
|
103
|
+
refParam,
|
|
104
|
+
options
|
|
105
|
+
) : await resolveOptionsNoninteractively(
|
|
106
|
+
ctx,
|
|
107
|
+
currentDeployment,
|
|
108
|
+
refParam,
|
|
109
|
+
options
|
|
110
|
+
);
|
|
57
111
|
(0, import_log.showSpinner)(
|
|
58
112
|
`Creating ${type} deployment` + (regionDetails ? ` in region ${regionDetails.displayName}` : "") + "..."
|
|
59
113
|
);
|
|
@@ -67,7 +121,8 @@ const deploymentCreate = new import_extra_typings.Command("create").summary("Cre
|
|
|
67
121
|
type,
|
|
68
122
|
region: regionDetails?.name ?? null,
|
|
69
123
|
reference: ref ?? null,
|
|
70
|
-
isDefault
|
|
124
|
+
isDefault,
|
|
125
|
+
...expiresAt !== void 0 ? { expiresAt } : {}
|
|
71
126
|
}
|
|
72
127
|
}
|
|
73
128
|
)).data;
|
|
@@ -82,19 +137,99 @@ const deploymentCreate = new import_extra_typings.Command("create").summary("Cre
|
|
|
82
137
|
}
|
|
83
138
|
if (!options.select) {
|
|
84
139
|
(0, import_log.logFinishedStep)(
|
|
85
|
-
`Provisioned a ${created.isDefault ? "default " : ""}${created.deploymentType} deployment
|
|
86
|
-
);
|
|
87
|
-
(0, import_log.logMessage)(
|
|
88
|
-
import_chalk.chalkStderr.gray(
|
|
89
|
-
"Hint: use `npx convex deployment create --select` to immediately select the newly created deployment."
|
|
90
|
-
)
|
|
140
|
+
`Provisioned a ${created.isDefault ? "default " : ""}${created.deploymentType} deployment.`
|
|
91
141
|
);
|
|
142
|
+
if (type !== "prod") {
|
|
143
|
+
const selectRef = `${teamSlug}:${projectSlug}:${created.reference}`;
|
|
144
|
+
(0, import_log.logMessage)(
|
|
145
|
+
`
|
|
146
|
+
To make \`npx convex\` use this deployment, run ${import_chalk.chalkStderr.bold(`npx convex deployment select ${selectRef}`)}`
|
|
147
|
+
);
|
|
148
|
+
(0, import_log.logMessage)(
|
|
149
|
+
import_chalk.chalkStderr.gray(
|
|
150
|
+
"Hint: use `--select` to immediately select the newly created deployment."
|
|
151
|
+
)
|
|
152
|
+
);
|
|
153
|
+
}
|
|
92
154
|
}
|
|
93
155
|
if (options.select) {
|
|
94
|
-
|
|
156
|
+
const selection = {
|
|
157
|
+
kind: "deploymentWithinProject",
|
|
158
|
+
targetProject: {
|
|
159
|
+
kind: "teamAndProjectSlugs",
|
|
160
|
+
teamSlug,
|
|
161
|
+
projectSlug
|
|
162
|
+
},
|
|
163
|
+
selectionWithinProject: {
|
|
164
|
+
kind: "deploymentSelector",
|
|
165
|
+
selector: created.reference
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
await (0, import_deploymentSelect.saveSelectedDeployment)(
|
|
169
|
+
ctx,
|
|
170
|
+
created.reference,
|
|
171
|
+
selection,
|
|
172
|
+
(0, import_deploymentSelection.deploymentNameFromSelection)(currentDeployment)
|
|
173
|
+
);
|
|
95
174
|
}
|
|
96
175
|
});
|
|
97
|
-
async function
|
|
176
|
+
async function createLocalDeployment(ctx, currentDeployment, select) {
|
|
177
|
+
const existing = (0, import_filePaths.loadProjectLocalConfig)(ctx);
|
|
178
|
+
if (existing) {
|
|
179
|
+
return await ctx.crash({
|
|
180
|
+
exitCode: 1,
|
|
181
|
+
errorType: "fatal",
|
|
182
|
+
printedMessage: "A local deployment already exists."
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const { teamSlug, slug: projectSlug } = await resolveProject(
|
|
186
|
+
ctx,
|
|
187
|
+
currentDeployment
|
|
188
|
+
);
|
|
189
|
+
(0, import_log.showSpinner)("Downloading local backend...");
|
|
190
|
+
const { version } = await (0, import_download.ensureBackendBinaryDownloaded)(ctx, {
|
|
191
|
+
kind: "latest"
|
|
192
|
+
});
|
|
193
|
+
const { cloudPort, sitePort } = await (0, import_utils2.chooseLocalBackendPorts)(ctx);
|
|
194
|
+
(0, import_log.showSpinner)("Registering local deployment...");
|
|
195
|
+
const { deploymentName, adminKey } = await (0, import_bigBrain.bigBrainStart)(ctx, {
|
|
196
|
+
port: cloudPort,
|
|
197
|
+
projectSlug,
|
|
198
|
+
teamSlug,
|
|
199
|
+
instanceName: null
|
|
200
|
+
});
|
|
201
|
+
(0, import_filePaths.saveDeploymentConfig)(ctx, "local", deploymentName, {
|
|
202
|
+
backendVersion: version,
|
|
203
|
+
ports: { cloud: cloudPort, site: sitePort },
|
|
204
|
+
adminKey,
|
|
205
|
+
instanceSecret: import_utils2.LOCAL_BACKEND_INSTANCE_SECRET
|
|
206
|
+
});
|
|
207
|
+
(0, import_log.logFinishedStep)("Created local deployment.");
|
|
208
|
+
if (select) {
|
|
209
|
+
const selection = {
|
|
210
|
+
kind: "deploymentWithinProject",
|
|
211
|
+
targetProject: {
|
|
212
|
+
kind: "deploymentName",
|
|
213
|
+
deploymentName,
|
|
214
|
+
deploymentType: "local"
|
|
215
|
+
},
|
|
216
|
+
selectionWithinProject: {
|
|
217
|
+
kind: "deploymentSelector",
|
|
218
|
+
selector: "local"
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
await (0, import_deploymentSelect.saveSelectedDeployment)(
|
|
222
|
+
ctx,
|
|
223
|
+
"local",
|
|
224
|
+
selection,
|
|
225
|
+
(0, import_deploymentSelection.deploymentNameFromSelection)(currentDeployment)
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
const devCommand = select ? "npx convex dev" : "npx convex dev --deployment local";
|
|
229
|
+
(0, import_log.logMessage)(`
|
|
230
|
+
Run ${import_chalk.chalkStderr.bold(devCommand)} to start it.`);
|
|
231
|
+
}
|
|
232
|
+
async function resolveOptionsNoninteractively(ctx, currentDeployment, refParam, options) {
|
|
98
233
|
let ref;
|
|
99
234
|
let teamAndProject;
|
|
100
235
|
if (refParam) {
|
|
@@ -120,21 +255,14 @@ async function resolveOptionsNoninteractively(ctx, refParam, options) {
|
|
|
120
255
|
return await ctx.crash({
|
|
121
256
|
exitCode: 1,
|
|
122
257
|
errorType: "fatal",
|
|
123
|
-
printedMessage:
|
|
258
|
+
printedMessage: `--type is required (supported values: ${SUPPORTED_TYPES.join(", ")})`
|
|
124
259
|
});
|
|
125
260
|
}
|
|
126
261
|
const project = teamAndProject ? await (0, import_deploymentSelection.getProjectDetails)(ctx, {
|
|
127
262
|
kind: "teamAndProjectSlugs",
|
|
128
263
|
teamSlug: teamAndProject.teamSlug,
|
|
129
264
|
projectSlug: teamAndProject.projectSlug
|
|
130
|
-
}) : await resolveProject(
|
|
131
|
-
ctx,
|
|
132
|
-
await (0, import_deploymentSelection.getDeploymentSelection)(ctx, {
|
|
133
|
-
url: void 0,
|
|
134
|
-
adminKey: void 0,
|
|
135
|
-
envFile: void 0
|
|
136
|
-
})
|
|
137
|
-
);
|
|
265
|
+
}) : await resolveProject(ctx, currentDeployment);
|
|
138
266
|
const projectId = project.id;
|
|
139
267
|
let regionDetails = null;
|
|
140
268
|
if (options.region) {
|
|
@@ -150,10 +278,12 @@ async function resolveOptionsNoninteractively(ctx, refParam, options) {
|
|
|
150
278
|
isDefault: options.default ?? null,
|
|
151
279
|
projectId,
|
|
152
280
|
regionDetails,
|
|
153
|
-
type: options.type
|
|
281
|
+
type: options.type,
|
|
282
|
+
teamSlug: project.teamSlug,
|
|
283
|
+
projectSlug: project.slug
|
|
154
284
|
};
|
|
155
285
|
}
|
|
156
|
-
async function resolveOptionsInteractively(ctx, refParam, options) {
|
|
286
|
+
async function resolveOptionsInteractively(ctx, currentDeployment, refParam, options) {
|
|
157
287
|
let deploymentType;
|
|
158
288
|
if (options.type) {
|
|
159
289
|
deploymentType = logAndUse("type", options.type);
|
|
@@ -189,7 +319,12 @@ async function resolveOptionsInteractively(ctx, refParam, options) {
|
|
|
189
319
|
}
|
|
190
320
|
}
|
|
191
321
|
while (ref === void 0) {
|
|
192
|
-
const input = await (0, import_prompts.promptString)(ctx, {
|
|
322
|
+
const input = await (0, import_prompts.promptString)(ctx, {
|
|
323
|
+
message: "How to name this deployment?\n" + import_chalk.chalkStderr.reset.dim(
|
|
324
|
+
"The deployment reference will be used to identify your deployment on the dashboard and in CLI commands.\nExamples: staging, dev/james/feature-payment-integration"
|
|
325
|
+
) + "\n>",
|
|
326
|
+
validate: validateTentativeReference
|
|
327
|
+
});
|
|
193
328
|
const result = parseSelectorForNewDeployment(input);
|
|
194
329
|
if (result.kind === "invalid") {
|
|
195
330
|
(0, import_log.logFailure)(result.message);
|
|
@@ -202,14 +337,7 @@ async function resolveOptionsInteractively(ctx, refParam, options) {
|
|
|
202
337
|
kind: "teamAndProjectSlugs",
|
|
203
338
|
teamSlug: teamAndProject.teamSlug,
|
|
204
339
|
projectSlug: teamAndProject.projectSlug
|
|
205
|
-
}) : await resolveProject(
|
|
206
|
-
ctx,
|
|
207
|
-
await (0, import_deploymentSelection.getDeploymentSelection)(ctx, {
|
|
208
|
-
url: void 0,
|
|
209
|
-
adminKey: void 0,
|
|
210
|
-
envFile: void 0
|
|
211
|
-
})
|
|
212
|
-
);
|
|
340
|
+
}) : await resolveProject(ctx, currentDeployment);
|
|
213
341
|
const availableRegions = await fetchAvailableRegions(ctx, project.teamId);
|
|
214
342
|
let regionDetails;
|
|
215
343
|
if (options.region) {
|
|
@@ -248,12 +376,19 @@ async function resolveOptionsInteractively(ctx, refParam, options) {
|
|
|
248
376
|
isDefault: options.default ?? null,
|
|
249
377
|
projectId: project.id,
|
|
250
378
|
regionDetails,
|
|
251
|
-
type: deploymentType
|
|
379
|
+
type: deploymentType,
|
|
380
|
+
teamSlug: project.teamSlug,
|
|
381
|
+
projectSlug: project.slug
|
|
252
382
|
};
|
|
253
383
|
}
|
|
254
384
|
function parseSelectorForNewDeployment(selectorString) {
|
|
255
385
|
const selector = (0, import_deploymentSelector.parseDeploymentSelector)(selectorString);
|
|
256
386
|
switch (selector.kind) {
|
|
387
|
+
case "local":
|
|
388
|
+
return {
|
|
389
|
+
kind: "invalid",
|
|
390
|
+
message: `"local" is not a valid deployment reference. To create a local deployment, run ${import_chalk.chalkStderr.bold("npx convex deployment create local")}`
|
|
391
|
+
};
|
|
257
392
|
case "deploymentName":
|
|
258
393
|
return {
|
|
259
394
|
kind: "invalid",
|
|
@@ -409,8 +544,58 @@ async function crashInvalidRegion(ctx, availableRegions, region) {
|
|
|
409
544
|
printedMessage: invalidRegionMessage(availableRegions, region)
|
|
410
545
|
});
|
|
411
546
|
}
|
|
547
|
+
async function resolveExpiresAtOrCrash(ctx, expiration) {
|
|
548
|
+
if (!expiration) {
|
|
549
|
+
return void 0;
|
|
550
|
+
}
|
|
551
|
+
const parsed = (0, import_expiration.parseExpiration)(expiration);
|
|
552
|
+
if (parsed.kind === "error") {
|
|
553
|
+
return await ctx.crash({
|
|
554
|
+
exitCode: 1,
|
|
555
|
+
errorType: "fatal",
|
|
556
|
+
printedMessage: parsed.message
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
const now = Date.now();
|
|
560
|
+
const resolved = (0, import_expiration.resolveExpiration)(parsed, now);
|
|
561
|
+
if (resolved !== null) {
|
|
562
|
+
const validation = (0, import_expiration.validateExpiration)(resolved, now);
|
|
563
|
+
if (validation.kind === "error") {
|
|
564
|
+
return await ctx.crash({
|
|
565
|
+
exitCode: 1,
|
|
566
|
+
errorType: "fatal",
|
|
567
|
+
printedMessage: validation.message
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
return resolved;
|
|
572
|
+
}
|
|
412
573
|
function logAndUse(label, value) {
|
|
413
574
|
(0, import_log.logFinishedStep)(`Using ${label}: ${import_chalk.chalkStderr.bold(value)}`);
|
|
414
575
|
return value;
|
|
415
576
|
}
|
|
577
|
+
function validateTentativeReference(tentativeReference) {
|
|
578
|
+
if (tentativeReference.length < 3) {
|
|
579
|
+
return "References must be at least 3 characters";
|
|
580
|
+
}
|
|
581
|
+
if (tentativeReference.length > 100) {
|
|
582
|
+
return "References must be at most 100 characters";
|
|
583
|
+
}
|
|
584
|
+
if (!/^[a-z0-9/-]+$/.test(tentativeReference)) {
|
|
585
|
+
return "References can only contain lowercase letters, numbers, hyphens, and slashes";
|
|
586
|
+
}
|
|
587
|
+
if (tentativeReference === "dev") {
|
|
588
|
+
return '"dev" is not a valid deployment reference.';
|
|
589
|
+
}
|
|
590
|
+
if (tentativeReference === "prod") {
|
|
591
|
+
return '"prod" is not a valid deployment reference.';
|
|
592
|
+
}
|
|
593
|
+
if (tentativeReference === "local") {
|
|
594
|
+
return `"local" is not a valid deployment reference. To create a local deployment, run ${import_chalk.chalkStderr.bold("npx convex deployment create local")}`;
|
|
595
|
+
}
|
|
596
|
+
if (/^[a-z]+-[a-z]+-\d+$/.test(tentativeReference)) {
|
|
597
|
+
return "References cannot be in the format abc-xyz-123, as it is reserved for deployment names";
|
|
598
|
+
}
|
|
599
|
+
return true;
|
|
600
|
+
}
|
|
416
601
|
//# sourceMappingURL=deploymentCreate.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/deploymentCreate.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport {\n logFailure,\n logFinishedStep,\n logMessage,\n showSpinner,\n} from \"../bundler/log.js\";\nimport {\n DeploymentSelection,\n getDeploymentSelection,\n getProjectDetails,\n} from \"./lib/deploymentSelection.js\";\nimport {\n logNoDefaultRegionMessage,\n selectRegion,\n typedBigBrainClient,\n typedPlatformClient,\n} from \"./lib/utils/utils.js\";\nimport { PlatformProjectDetails } from \"@convex-dev/platform/managementApi\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { selectDeployment } from \"./deploymentSelect.js\";\nimport { promptOptions, promptString } from \"./lib/utils/prompts.js\";\nimport { chalkStderr } from \"chalk\";\nimport { parseDeploymentSelector } from \"./lib/deploymentSelector.js\";\n\nexport const deploymentCreate = new Command(\"create\")\n .summary(\"Create a new cloud deployment for a project\")\n .description(\n \"Create a new cloud deployment for a project.\\n\\n\" +\n \" Create a dev deployment and select it: `npx convex deployment create dev/my-new-feature --type dev --select`\\n\" +\n \" Create a prod staging deployment: `npx convex deployment create staging --type prod`\\n\",\n )\n .argument(\"[ref]\")\n .allowExcessArguments(false)\n .addOption(\n new Option(\"--type <type>\", \"Deployment type\").choices([\n \"dev\",\n \"prod\",\n \"preview\",\n ] as const),\n )\n .option(\"--region <region>\", \"Deployment region\")\n .option(\n \"--select\",\n \"Select the new deployment. This will update the Convex environment variables in .env.local and `npx convex dev` will run against this deployment.\",\n )\n .option(\n \"--default\",\n \"Set the new deployment as your default development or production deployment.\",\n )\n .action(async (refParam, options) => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n const { ref, regionDetails, projectId, type, isDefault } = process.stdin\n .isTTY\n ? await resolveOptionsInteractively(ctx, refParam, options)\n : await resolveOptionsNoninteractively(ctx, refParam, options);\n\n showSpinner(\n `Creating ${type} deployment` +\n (regionDetails ? ` in region ${regionDetails.displayName}` : \"\") +\n \"...\",\n );\n\n const created = (\n await typedPlatformClient(ctx).POST(\n \"/projects/{project_id}/create_deployment\",\n {\n params: {\n path: { project_id: projectId },\n },\n body: {\n type,\n region: regionDetails?.name ?? null,\n reference: ref ?? null,\n isDefault,\n },\n },\n )\n ).data!;\n\n if (created.kind !== \"cloud\") {\n // This should be impossible\n const err = `Expected cloud deployment to be created but got ${created.kind}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: err,\n errForSentry: err,\n });\n }\n\n if (!options.select) {\n logFinishedStep(\n `Provisioned a ${created.isDefault ? \"default \" : \"\"}${created.deploymentType} deployment. Select this deployment to develop against using \\`npx convex deployment select ${created.reference}\\``,\n );\n logMessage(\n chalkStderr.gray(\n \"Hint: use `npx convex deployment create --select` to immediately select the newly created deployment.\",\n ),\n );\n }\n\n if (options.select) {\n await selectDeployment(ctx, created.reference);\n }\n });\n\ntype RefParam = Parameters<Parameters<typeof deploymentCreate.action>[0]>[0];\ntype OptionsParam = Parameters<\n Parameters<typeof deploymentCreate.action>[0]\n>[1];\n\nasync function resolveOptionsNoninteractively(\n ctx: Context,\n refParam: RefParam,\n options: OptionsParam,\n) {\n let ref: string | undefined;\n let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n if (refParam) {\n const result = parseSelectorForNewDeployment(refParam);\n if (result.kind === \"invalid\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: result.message,\n });\n }\n ref = result.ref;\n teamAndProject = result.teamAndProject;\n }\n\n if (!ref && !options.default) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Specify a deployment ref or use --default:\\n\" +\n \" `npx convex deployment create my-deployment-ref --type dev`\\n\" +\n \" `npx convex deployment create --type prod --default`\",\n });\n }\n\n if (!options.type) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"--type is required. Use --type dev or --type prod.\",\n });\n }\n\n const project = teamAndProject\n ? await getProjectDetails(ctx, {\n kind: \"teamAndProjectSlugs\",\n teamSlug: teamAndProject.teamSlug,\n projectSlug: teamAndProject.projectSlug,\n })\n : await resolveProject(\n ctx,\n await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n }),\n );\n const projectId = project.id;\n\n // If no region is passed in, the team's default region will be used\n let regionDetails: AvailableRegion | null = null;\n if (options.region) {\n const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n regionDetails = await resolveRegionDetailsOrCrash(\n ctx,\n availableRegions,\n options.region,\n );\n }\n\n return {\n ref,\n isDefault: options.default ?? null,\n projectId,\n regionDetails,\n type: options.type,\n };\n}\n\nasync function resolveOptionsInteractively(\n ctx: Context,\n refParam: RefParam,\n options: OptionsParam,\n) {\n let deploymentType: \"dev\" | \"prod\" | \"preview\";\n if (options.type) {\n deploymentType = logAndUse(\"type\", options.type);\n } else {\n const dtypeChoices = [\n {\n name: \"dev\",\n value: \"dev\" as const,\n },\n {\n name: \"preview\",\n value: \"preview\" as const,\n },\n {\n name: \"prod\",\n value: \"prod\" as const,\n },\n ];\n deploymentType = await promptOptions(ctx, {\n message: \"Deployment type?\",\n choices: dtypeChoices,\n });\n }\n\n let ref: string | undefined;\n let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n if (refParam) {\n const result = parseSelectorForNewDeployment(refParam);\n if (result.kind === \"invalid\") {\n logFailure(result.message);\n } else {\n ref = logAndUse(\"ref\", result.ref);\n teamAndProject = result.teamAndProject;\n }\n }\n while (ref === undefined) {\n const input = await promptString(ctx, { message: \"Deployment ref?\" });\n const result = parseSelectorForNewDeployment(input);\n if (result.kind === \"invalid\") {\n logFailure(result.message);\n continue;\n }\n ref = result.ref;\n teamAndProject = result.teamAndProject;\n }\n\n const project = teamAndProject\n ? await getProjectDetails(ctx, {\n kind: \"teamAndProjectSlugs\",\n teamSlug: teamAndProject.teamSlug,\n projectSlug: teamAndProject.projectSlug,\n })\n : await resolveProject(\n ctx,\n await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n }),\n );\n\n const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n let regionDetails: AvailableRegion;\n if (options.region) {\n regionDetails = await resolveRegionDetailsOrCrash(\n ctx,\n availableRegions,\n options.region,\n );\n logAndUse(\"region\", regionDetails.displayName);\n } else {\n // Use the team's default region if set, or prompt the user to pick\n // TODO: this duplicates some of the logic in selectRegionOrUseDefault (npm-packages/convex/src/cli/lib/utils/utils.ts)\n const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n const team = teams.find((team) => team.slug === project.teamSlug);\n if (!team) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Error: Team ${project.teamSlug} not found.`,\n });\n }\n const regionName =\n team.defaultRegion ?? (await selectRegion(ctx, team.id, deploymentType));\n regionDetails = await resolveRegionDetailsOrCrash(\n ctx,\n availableRegions,\n regionName,\n );\n if (team.defaultRegion) {\n logFinishedStep(\n `Using team default region of ${regionDetails.displayName}`,\n );\n } else {\n logNoDefaultRegionMessage(team.slug);\n }\n }\n\n return {\n ref,\n isDefault: options.default ?? null,\n projectId: project.id,\n regionDetails,\n type: deploymentType,\n };\n}\n\ntype NewDeploymentSelectorResult =\n | {\n kind: \"valid\";\n ref: string;\n teamAndProject?: { teamSlug: string; projectSlug: string };\n }\n | { kind: \"invalid\"; message: string };\n\nfunction parseSelectorForNewDeployment(\n selectorString: string,\n): NewDeploymentSelectorResult {\n const selector = parseDeploymentSelector(selectorString);\n switch (selector.kind) {\n case \"deploymentName\":\n return {\n kind: \"invalid\",\n message: `\"${selector.deploymentName}\" is not a valid deployment reference. References cannot be in the format abc-xyz-123, as it is reserved for deployment names.`,\n };\n case \"inCurrentProject\": {\n const inner = selector.selector;\n if (inner.kind === \"dev\") {\n return {\n kind: \"invalid\",\n message: `\"dev\" is not a valid deployment reference.`,\n };\n }\n if (inner.kind === \"prod\") {\n return {\n kind: \"invalid\",\n message: `\"prod\" is not a valid deployment reference.`,\n };\n }\n return { kind: \"valid\", ref: inner.reference };\n }\n case \"inProject\": {\n return {\n kind: \"invalid\",\n message: `Please use \"team:project:ref\" to specify the team when creating a new deployment in a different project.`,\n };\n }\n case \"inTeamProject\": {\n const inner = selector.selector;\n if (inner.kind === \"dev\") {\n return {\n kind: \"invalid\",\n message: `\"dev\" is not a valid deployment reference.`,\n };\n }\n if (inner.kind === \"prod\") {\n return {\n kind: \"invalid\",\n message: `\"prod\" is not a valid deployment reference.`,\n };\n }\n return {\n kind: \"valid\",\n ref: inner.reference,\n teamAndProject: {\n teamSlug: selector.teamSlug,\n projectSlug: selector.projectSlug,\n },\n };\n }\n default:\n selector satisfies never;\n return {\n kind: \"invalid\",\n message: \"Unknown state. This is a bug in Convex.\",\n };\n }\n}\n\nasync function resolveProject(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n): Promise<PlatformProjectDetails> {\n switch (deploymentSelection.kind) {\n case \"existingDeployment\": {\n const { deploymentFields } = deploymentSelection.deploymentToActOn;\n if (deploymentFields) {\n return await getProjectDetails(ctx, {\n kind: \"deploymentName\",\n deploymentName: deploymentFields.deploymentName,\n deploymentType: null,\n });\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Cannot infer project from the current deployment configuration. Use `team:project:ref` to specify team and project slugs.\",\n });\n }\n case \"deploymentWithinProject\": {\n return await getProjectDetails(ctx, deploymentSelection.targetProject);\n }\n case \"preview\": {\n const slugs = await getTeamAndProjectFromPreviewAdminKey(\n ctx,\n deploymentSelection.previewDeployKey,\n );\n return await getProjectDetails(ctx, {\n kind: \"teamAndProjectSlugs\",\n teamSlug: slugs.teamSlug,\n projectSlug: slugs.projectSlug,\n });\n }\n case \"chooseProject\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"No project configured yet. Use `team:project:ref` to specify team and project slugs.\",\n });\n case \"anonymous\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Cannot create a deployment in anonymous mode. \" +\n \"Run `npx convex login` and configure a project first.\",\n });\n default: {\n deploymentSelection satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Unexpected deployment selection kind.`,\n });\n }\n }\n}\n\nconst REGION_NAME_TO_ALIAS: Record<string, string> = {\n \"aws-us-east-1\": \"us\",\n \"aws-eu-west-1\": \"eu\",\n};\n\nconst REGION_ALIAS_TO_NAME = Object.fromEntries(\n Object.entries(REGION_NAME_TO_ALIAS).map(([name, alias]) => [alias, name]),\n);\n\nexport async function fetchAvailableRegions(ctx: Context, teamId: number) {\n const regionsResponse = (\n await typedPlatformClient(ctx).GET(\n \"/teams/{team_id}/list_deployment_regions\",\n {\n params: {\n path: { team_id: `${teamId}` },\n },\n },\n )\n ).data!;\n return regionsResponse.items.filter((item) => item.available);\n}\n\ntype AvailableRegion = Awaited<\n ReturnType<typeof fetchAvailableRegions>\n>[number];\n\nexport function resolveRegionDetails(\n availableRegions: AvailableRegion[],\n region: string,\n) {\n const resolvedRegion = REGION_ALIAS_TO_NAME[region] ?? region;\n return availableRegions.find((item) => item.name === resolvedRegion) ?? null;\n}\n\nasync function resolveRegionDetailsOrCrash(\n ctx: Context,\n availableRegions: AvailableRegion[],\n region: string,\n) {\n const regionDetails = resolveRegionDetails(availableRegions, region);\n if (!regionDetails) {\n return await crashInvalidRegion(ctx, availableRegions, region);\n }\n return regionDetails;\n}\n\nfunction invalidRegionMessage(\n availableRegions: AvailableRegion[],\n region: string,\n): string {\n const formatted = availableRegions\n .map(\n (item) =>\n ` Use \\`--region ${REGION_NAME_TO_ALIAS[item.name] ?? item.name}\\` for ${item.displayName}`,\n )\n .join(\"\\n\");\n return `Invalid region \"${region}\".\\n\\n` + formatted;\n}\n\nasync function crashInvalidRegion(\n ctx: Context,\n availableRegions: AvailableRegion[],\n region: string,\n): Promise<never> {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: invalidRegionMessage(availableRegions, region),\n });\n}\n\n/**\n * Helper to log a value passed in as a CLI argument in the interactive flow.\n */\nfunction logAndUse<T extends string | boolean>(label: string, value: T): T {\n logFinishedStep(`Using ${label}: ${chalkStderr.bold(value)}`);\n return value;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["team"]
|
|
4
|
+
"sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport {\n logFailure,\n logFinishedStep,\n logMessage,\n showSpinner,\n} from \"../bundler/log.js\";\nimport {\n DeploymentSelection,\n getDeploymentSelection,\n getProjectDetails,\n deploymentNameFromSelection,\n} from \"./lib/deploymentSelection.js\";\nimport {\n logNoDefaultRegionMessage,\n selectRegion,\n typedBigBrainClient,\n typedPlatformClient,\n} from \"./lib/utils/utils.js\";\nimport { PlatformProjectDetails } from \"@convex-dev/platform/managementApi\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { saveSelectedDeployment } from \"./deploymentSelect.js\";\nimport { promptOptions, promptString } from \"./lib/utils/prompts.js\";\nimport { chalkStderr } from \"chalk\";\nimport { parseDeploymentSelector } from \"./lib/deploymentSelector.js\";\nimport {\n parseExpiration,\n resolveExpiration,\n validateExpiration,\n} from \"./lib/expiration.js\";\nimport { ensureBackendBinaryDownloaded } from \"./lib/localDeployment/download.js\";\nimport {\n loadProjectLocalConfig,\n saveDeploymentConfig,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n chooseLocalBackendPorts,\n LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./lib/localDeployment/utils.js\";\nimport { bigBrainStart } from \"./lib/localDeployment/bigBrain.js\";\n\nconst SUPPORTED_TYPES = [\"dev\", \"prod\", \"preview\"] as const;\n\nexport const deploymentCreate = new Command(\"create\")\n .summary(\"Create a new deployment for a project\")\n .description(\n \"Create a new deployment for a project.\\n\\n\" +\n \" Create a dev deployment and select it: `npx convex deployment create dev/my-new-feature --type dev --select`\\n\" +\n \" Create a prod deployment named \u201Cstaging\u201D: `npx convex deployment create staging --type prod`\\n\" +\n \" Create a local deployment: `npx convex deployment create local`\\n\",\n )\n .argument(\"[ref]\")\n .allowExcessArguments(false)\n .addOption(\n new Option(\"--type <type>\", \"Deployment type\").choices(SUPPORTED_TYPES),\n )\n .option(\"--region <region>\", \"Deployment region\")\n .option(\n \"--select\",\n \"Select the new deployment. This will update the Convex environment variables in .env.local. Subsequent `npx convex` commands will run against this deployment.\",\n )\n .option(\n \"--default\",\n \"Make the new deployment your default production deployment (used by `npx convex deploy`) or your personal dev deployment.\",\n )\n .option(\n \"--expiration <value>\",\n 'When the deployment expires (e.g. \"none\", \"in 7 days\", \"2026-04-01T00:00:00Z\", or a UNIX timestamp in seconds or milliseconds)',\n )\n .action(async (refParam, options) => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n const currentDeployment = await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n // Handle `deployment create local`\n if (refParam !== undefined) {\n if (refParam === \"local\") {\n const cloudOnlyFlags = [\n \"type\",\n \"region\",\n \"default\",\n \"expiration\",\n ] as const;\n for (const flag of cloudOnlyFlags) {\n if (options[flag]) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `--${flag} cannot be used when creating a local deployment`,\n });\n }\n }\n await createLocalDeployment(\n ctx,\n currentDeployment,\n options.select ?? false,\n );\n return;\n }\n }\n\n const expiresAt = await resolveExpiresAtOrCrash(ctx, options.expiration);\n\n const {\n ref,\n regionDetails,\n projectId,\n type,\n isDefault,\n teamSlug,\n projectSlug,\n } = process.stdin.isTTY\n ? await resolveOptionsInteractively(\n ctx,\n currentDeployment,\n refParam,\n options,\n )\n : await resolveOptionsNoninteractively(\n ctx,\n currentDeployment,\n refParam,\n options,\n );\n\n showSpinner(\n `Creating ${type} deployment` +\n (regionDetails ? ` in region ${regionDetails.displayName}` : \"\") +\n \"...\",\n );\n\n const created = (\n await typedPlatformClient(ctx).POST(\n \"/projects/{project_id}/create_deployment\",\n {\n params: {\n path: { project_id: projectId },\n },\n body: {\n type,\n region: regionDetails?.name ?? null,\n reference: ref ?? null,\n isDefault,\n ...(expiresAt !== undefined ? { expiresAt } : {}),\n },\n },\n )\n ).data!;\n\n if (created.kind !== \"cloud\") {\n // This should be impossible\n const err = `Expected cloud deployment to be created but got ${created.kind}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: err,\n errForSentry: err,\n });\n }\n\n if (!options.select) {\n logFinishedStep(\n `Provisioned a ${created.isDefault ? \"default \" : \"\"}${created.deploymentType} deployment.`,\n );\n if (type !== \"prod\") {\n const selectRef = `${teamSlug}:${projectSlug}:${created.reference}`;\n logMessage(\n `\\nTo make \\`npx convex\\` use this deployment, run ${chalkStderr.bold(`npx convex deployment select ${selectRef}`)}`,\n );\n logMessage(\n chalkStderr.gray(\n \"Hint: use `--select` to immediately select the newly created deployment.\",\n ),\n );\n }\n }\n\n if (options.select) {\n const selection: DeploymentSelection = {\n kind: \"deploymentWithinProject\",\n targetProject: {\n kind: \"teamAndProjectSlugs\",\n teamSlug,\n projectSlug,\n },\n selectionWithinProject: {\n kind: \"deploymentSelector\",\n selector: created.reference,\n },\n };\n await saveSelectedDeployment(\n ctx,\n created.reference,\n selection,\n deploymentNameFromSelection(currentDeployment),\n );\n }\n });\n\nasync function createLocalDeployment(\n ctx: Context,\n currentDeployment: DeploymentSelection,\n select: boolean,\n): Promise<void> {\n const existing = loadProjectLocalConfig(ctx);\n if (existing) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"A local deployment already exists.\",\n });\n }\n\n const { teamSlug, slug: projectSlug } = await resolveProject(\n ctx,\n currentDeployment,\n );\n\n showSpinner(\"Downloading local backend...\");\n const { version } = await ensureBackendBinaryDownloaded(ctx, {\n kind: \"latest\",\n });\n\n const { cloudPort, sitePort } = await chooseLocalBackendPorts(ctx);\n\n showSpinner(\"Registering local deployment...\");\n const { deploymentName, adminKey } = await bigBrainStart(ctx, {\n port: cloudPort,\n projectSlug,\n teamSlug,\n instanceName: null,\n });\n\n saveDeploymentConfig(ctx, \"local\", deploymentName, {\n backendVersion: version,\n ports: { cloud: cloudPort, site: sitePort },\n adminKey,\n instanceSecret: LOCAL_BACKEND_INSTANCE_SECRET,\n });\n\n logFinishedStep(\"Created local deployment.\");\n\n if (select) {\n const selection: DeploymentSelection = {\n kind: \"deploymentWithinProject\",\n targetProject: {\n kind: \"deploymentName\",\n deploymentName,\n deploymentType: \"local\",\n },\n selectionWithinProject: {\n kind: \"deploymentSelector\",\n selector: \"local\",\n },\n };\n await saveSelectedDeployment(\n ctx,\n \"local\",\n selection,\n deploymentNameFromSelection(currentDeployment),\n );\n }\n\n const devCommand = select\n ? \"npx convex dev\"\n : \"npx convex dev --deployment local\";\n logMessage(`\\nRun ${chalkStderr.bold(devCommand)} to start it.`);\n}\n\ntype RefParam = Parameters<Parameters<typeof deploymentCreate.action>[0]>[0];\ntype OptionsParam = Parameters<\n Parameters<typeof deploymentCreate.action>[0]\n>[1];\n\nasync function resolveOptionsNoninteractively(\n ctx: Context,\n currentDeployment: DeploymentSelection,\n refParam: RefParam,\n options: OptionsParam,\n) {\n let ref: string | undefined;\n let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n if (refParam) {\n const result = parseSelectorForNewDeployment(refParam);\n if (result.kind === \"invalid\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: result.message,\n });\n }\n ref = result.ref;\n teamAndProject = result.teamAndProject;\n }\n\n if (!ref && !options.default) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Specify a deployment ref or use --default:\\n\" +\n \" `npx convex deployment create my-deployment-ref --type dev`\\n\" +\n \" `npx convex deployment create --type prod --default`\",\n });\n }\n\n if (!options.type) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `--type is required (supported values: ${SUPPORTED_TYPES.join(\", \")})`,\n });\n }\n\n const project = teamAndProject\n ? await getProjectDetails(ctx, {\n kind: \"teamAndProjectSlugs\",\n teamSlug: teamAndProject.teamSlug,\n projectSlug: teamAndProject.projectSlug,\n })\n : await resolveProject(ctx, currentDeployment);\n const projectId = project.id;\n\n // If no region is passed in, the team's default region will be used\n let regionDetails: AvailableRegion | null = null;\n if (options.region) {\n const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n regionDetails = await resolveRegionDetailsOrCrash(\n ctx,\n availableRegions,\n options.region,\n );\n }\n\n return {\n ref,\n isDefault: options.default ?? null,\n projectId,\n regionDetails,\n type: options.type,\n teamSlug: project.teamSlug,\n projectSlug: project.slug,\n };\n}\n\nasync function resolveOptionsInteractively(\n ctx: Context,\n currentDeployment: DeploymentSelection,\n refParam: RefParam,\n options: OptionsParam,\n) {\n let deploymentType: \"dev\" | \"prod\" | \"preview\";\n if (options.type) {\n deploymentType = logAndUse(\"type\", options.type);\n } else {\n const dtypeChoices = [\n {\n name: \"dev\",\n value: \"dev\" as const,\n },\n {\n name: \"preview\",\n value: \"preview\" as const,\n },\n {\n name: \"prod\",\n value: \"prod\" as const,\n },\n ];\n deploymentType = await promptOptions(ctx, {\n message: \"Deployment type?\",\n choices: dtypeChoices,\n });\n }\n\n let ref: string | undefined;\n let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n if (refParam) {\n const result = parseSelectorForNewDeployment(refParam);\n if (result.kind === \"invalid\") {\n logFailure(result.message);\n } else {\n ref = logAndUse(\"ref\", result.ref);\n teamAndProject = result.teamAndProject;\n }\n }\n while (ref === undefined) {\n const input = await promptString(ctx, {\n message:\n \"How to name this deployment?\\n\" +\n chalkStderr.reset.dim(\n \"The deployment reference will be used to identify your deployment on the dashboard and in CLI commands.\\nExamples: staging, dev/james/feature-payment-integration\",\n ) +\n \"\\n>\",\n validate: validateTentativeReference,\n });\n const result = parseSelectorForNewDeployment(input);\n if (result.kind === \"invalid\") {\n logFailure(result.message);\n continue;\n }\n ref = result.ref;\n teamAndProject = result.teamAndProject;\n }\n\n const project = teamAndProject\n ? await getProjectDetails(ctx, {\n kind: \"teamAndProjectSlugs\",\n teamSlug: teamAndProject.teamSlug,\n projectSlug: teamAndProject.projectSlug,\n })\n : await resolveProject(ctx, currentDeployment);\n\n const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n let regionDetails: AvailableRegion;\n if (options.region) {\n regionDetails = await resolveRegionDetailsOrCrash(\n ctx,\n availableRegions,\n options.region,\n );\n logAndUse(\"region\", regionDetails.displayName);\n } else {\n // Use the team's default region if set, or prompt the user to pick\n // TODO: this duplicates some of the logic in selectRegionOrUseDefault (npm-packages/convex/src/cli/lib/utils/utils.ts)\n const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n const team = teams.find((team) => team.slug === project.teamSlug);\n if (!team) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Error: Team ${project.teamSlug} not found.`,\n });\n }\n const regionName =\n team.defaultRegion ?? (await selectRegion(ctx, team.id, deploymentType));\n regionDetails = await resolveRegionDetailsOrCrash(\n ctx,\n availableRegions,\n regionName,\n );\n if (team.defaultRegion) {\n logFinishedStep(\n `Using team default region of ${regionDetails.displayName}`,\n );\n } else {\n logNoDefaultRegionMessage(team.slug);\n }\n }\n\n return {\n ref,\n isDefault: options.default ?? null,\n projectId: project.id,\n regionDetails,\n type: deploymentType,\n teamSlug: project.teamSlug,\n projectSlug: project.slug,\n };\n}\n\ntype NewDeploymentSelectorResult =\n | {\n kind: \"valid\";\n ref: string;\n teamAndProject?: { teamSlug: string; projectSlug: string };\n }\n | { kind: \"invalid\"; message: string };\n\nfunction parseSelectorForNewDeployment(\n selectorString: string,\n): NewDeploymentSelectorResult {\n const selector = parseDeploymentSelector(selectorString);\n switch (selector.kind) {\n case \"local\":\n return {\n kind: \"invalid\",\n message: `\"local\" is not a valid deployment reference. To create a local deployment, run ${chalkStderr.bold(\"npx convex deployment create local\")}`,\n };\n case \"deploymentName\":\n return {\n kind: \"invalid\",\n message: `\"${selector.deploymentName}\" is not a valid deployment reference. References cannot be in the format abc-xyz-123, as it is reserved for deployment names.`,\n };\n case \"inCurrentProject\": {\n const inner = selector.selector;\n if (inner.kind === \"dev\") {\n return {\n kind: \"invalid\",\n message: `\"dev\" is not a valid deployment reference.`,\n };\n }\n if (inner.kind === \"prod\") {\n return {\n kind: \"invalid\",\n message: `\"prod\" is not a valid deployment reference.`,\n };\n }\n return { kind: \"valid\", ref: inner.reference };\n }\n case \"inProject\": {\n return {\n kind: \"invalid\",\n message: `Please use \"team:project:ref\" to specify the team when creating a new deployment in a different project.`,\n };\n }\n case \"inTeamProject\": {\n const inner = selector.selector;\n if (inner.kind === \"dev\") {\n return {\n kind: \"invalid\",\n message: `\"dev\" is not a valid deployment reference.`,\n };\n }\n if (inner.kind === \"prod\") {\n return {\n kind: \"invalid\",\n message: `\"prod\" is not a valid deployment reference.`,\n };\n }\n return {\n kind: \"valid\",\n ref: inner.reference,\n teamAndProject: {\n teamSlug: selector.teamSlug,\n projectSlug: selector.projectSlug,\n },\n };\n }\n default:\n selector satisfies never;\n return {\n kind: \"invalid\",\n message: \"Unknown state. This is a bug in Convex.\",\n };\n }\n}\n\nasync function resolveProject(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n): Promise<PlatformProjectDetails> {\n switch (deploymentSelection.kind) {\n case \"existingDeployment\": {\n const { deploymentFields } = deploymentSelection.deploymentToActOn;\n if (deploymentFields) {\n return await getProjectDetails(ctx, {\n kind: \"deploymentName\",\n deploymentName: deploymentFields.deploymentName,\n deploymentType: null,\n });\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Cannot infer project from the current deployment configuration. Use `team:project:ref` to specify team and project slugs.\",\n });\n }\n case \"deploymentWithinProject\": {\n return await getProjectDetails(ctx, deploymentSelection.targetProject);\n }\n case \"preview\": {\n const slugs = await getTeamAndProjectFromPreviewAdminKey(\n ctx,\n deploymentSelection.previewDeployKey,\n );\n return await getProjectDetails(ctx, {\n kind: \"teamAndProjectSlugs\",\n teamSlug: slugs.teamSlug,\n projectSlug: slugs.projectSlug,\n });\n }\n case \"chooseProject\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"No project configured yet. Use `team:project:ref` to specify team and project slugs.\",\n });\n case \"anonymous\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Cannot create a deployment in anonymous mode. \" +\n \"Run `npx convex login` and configure a project first.\",\n });\n default: {\n deploymentSelection satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Unexpected deployment selection kind.`,\n });\n }\n }\n}\n\nconst REGION_NAME_TO_ALIAS: Record<string, string> = {\n \"aws-us-east-1\": \"us\",\n \"aws-eu-west-1\": \"eu\",\n};\n\nconst REGION_ALIAS_TO_NAME = Object.fromEntries(\n Object.entries(REGION_NAME_TO_ALIAS).map(([name, alias]) => [alias, name]),\n);\n\nexport async function fetchAvailableRegions(ctx: Context, teamId: number) {\n const regionsResponse = (\n await typedPlatformClient(ctx).GET(\n \"/teams/{team_id}/list_deployment_regions\",\n {\n params: {\n path: { team_id: `${teamId}` },\n },\n },\n )\n ).data!;\n return regionsResponse.items.filter((item) => item.available);\n}\n\ntype AvailableRegion = Awaited<\n ReturnType<typeof fetchAvailableRegions>\n>[number];\n\nexport function resolveRegionDetails(\n availableRegions: AvailableRegion[],\n region: string,\n) {\n const resolvedRegion = REGION_ALIAS_TO_NAME[region] ?? region;\n return availableRegions.find((item) => item.name === resolvedRegion) ?? null;\n}\n\nasync function resolveRegionDetailsOrCrash(\n ctx: Context,\n availableRegions: AvailableRegion[],\n region: string,\n) {\n const regionDetails = resolveRegionDetails(availableRegions, region);\n if (!regionDetails) {\n return await crashInvalidRegion(ctx, availableRegions, region);\n }\n return regionDetails;\n}\n\nfunction invalidRegionMessage(\n availableRegions: AvailableRegion[],\n region: string,\n): string {\n const formatted = availableRegions\n .map(\n (item) =>\n ` Use \\`--region ${REGION_NAME_TO_ALIAS[item.name] ?? item.name}\\` for ${item.displayName}`,\n )\n .join(\"\\n\");\n return `Invalid region \"${region}\".\\n\\n` + formatted;\n}\n\nasync function crashInvalidRegion(\n ctx: Context,\n availableRegions: AvailableRegion[],\n region: string,\n): Promise<never> {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: invalidRegionMessage(availableRegions, region),\n });\n}\n\nasync function resolveExpiresAtOrCrash(\n ctx: Context,\n expiration: string | undefined,\n): Promise<number | null | undefined> {\n if (!expiration) {\n return undefined;\n }\n const parsed = parseExpiration(expiration);\n if (parsed.kind === \"error\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: parsed.message,\n });\n }\n const now = Date.now();\n const resolved = resolveExpiration(parsed, now);\n if (resolved !== null) {\n const validation = validateExpiration(resolved, now);\n if (validation.kind === \"error\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: validation.message,\n });\n }\n }\n return resolved;\n}\n\n/**\n * Helper to log a value passed in as a CLI argument in the interactive flow.\n */\nfunction logAndUse<T extends string | boolean>(label: string, value: T): T {\n logFinishedStep(`Using ${label}: ${chalkStderr.bold(value)}`);\n return value;\n}\n\n// This is an oversimplification, it\u2019s fine if it fails later\nfunction validateTentativeReference(tentativeReference: string): true | string {\n if (tentativeReference.length < 3) {\n return \"References must be at least 3 characters\";\n }\n if (tentativeReference.length > 100) {\n return \"References must be at most 100 characters\";\n }\n if (!/^[a-z0-9/-]+$/.test(tentativeReference)) {\n return \"References can only contain lowercase letters, numbers, hyphens, and slashes\";\n }\n if (tentativeReference === \"dev\") {\n return '\"dev\" is not a valid deployment reference.';\n }\n if (tentativeReference === \"prod\") {\n return '\"prod\" is not a valid deployment reference.';\n }\n if (tentativeReference === \"local\") {\n return `\"local\" is not a valid deployment reference. To create a local deployment, run ${chalkStderr.bold(\"npx convex deployment create local\")}`;\n }\n if (/^[a-z]+-[a-z]+-\\d+$/.test(tentativeReference)) {\n return \"References cannot be in the format abc-xyz-123, as it is reserved for deployment names\";\n }\n\n return true;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_utils", "team"]
|
|
7
7
|
}
|
|
@@ -19,7 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var deploymentSelect_exports = {};
|
|
20
20
|
__export(deploymentSelect_exports, {
|
|
21
21
|
deploymentSelect: () => deploymentSelect,
|
|
22
|
-
|
|
22
|
+
saveSelectedDeployment: () => saveSelectedDeployment
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(deploymentSelect_exports);
|
|
25
25
|
var import_extra_typings = require("@commander-js/extra-typings");
|
|
@@ -28,22 +28,19 @@ var import_api = require("./lib/api.js");
|
|
|
28
28
|
var import_deploymentSelection = require("./lib/deploymentSelection.js");
|
|
29
29
|
var import_deploymentSelector = require("./lib/deploymentSelector.js");
|
|
30
30
|
var import_configure = require("./configure.js");
|
|
31
|
-
var
|
|
31
|
+
var import_deploy2 = require("./lib/deploy2.js");
|
|
32
32
|
var import_chalk = require("chalk");
|
|
33
33
|
const deploymentSelect = new import_extra_typings.Command("select").summary("Select the deployment to use when running commands").description(
|
|
34
|
-
"Select the deployment to use when running commands.\n\nThe deployment will be used by all `npx convex` commands, except `npx convex deploy`. You can also run individual commands on another deployment by using the --deployment flag on that command.\n\nExamples:\n npx convex select dev # Select your personal dev deployment in the current project\n npx convex select
|
|
34
|
+
"Select the deployment to use when running commands.\n\nThe deployment will be used by all `npx convex` commands, except `npx convex deploy`. You can also run individual commands on another deployment by using the --deployment flag on that command.\n\nExamples:\n npx convex select dev # Select your personal cloud dev deployment in the current project\n npx convex select local # Select your local deployment\n npx convex select dev/james # Select a deployment in the same project by its reference\n npx convex select some-project:dev/james # Select a deployment in another project in the same team\n npx convex select some-team:some-project:dev/james # Select a deployment in a particular team/project\n"
|
|
35
35
|
).argument("<deployment>", "The deployment to use").allowExcessArguments(false).action(async (selector) => {
|
|
36
36
|
const ctx = await (0, import_context.oneoffContext)({
|
|
37
37
|
url: void 0,
|
|
38
38
|
adminKey: void 0,
|
|
39
39
|
envFile: void 0
|
|
40
40
|
});
|
|
41
|
-
await selectDeployment(ctx, selector);
|
|
42
|
-
});
|
|
43
|
-
async function selectDeployment(ctx, selector) {
|
|
44
41
|
const currentSelection = await (0, import_deploymentSelection.getDeploymentSelection)(ctx, {});
|
|
45
42
|
const parsed = (0, import_deploymentSelector.parseDeploymentSelector)(selector);
|
|
46
|
-
if (currentSelection.kind === "chooseProject" && parsed.kind !== "inTeamProject" && parsed.kind !== "deploymentName") {
|
|
43
|
+
if (currentSelection.kind === "chooseProject" && parsed.kind !== "inTeamProject" && parsed.kind !== "deploymentName" && parsed.kind !== "local") {
|
|
47
44
|
return await ctx.crash({
|
|
48
45
|
exitCode: 1,
|
|
49
46
|
errorType: "fatal",
|
|
@@ -56,13 +53,17 @@ async function selectDeployment(ctx, selector) {
|
|
|
56
53
|
envFile: void 0,
|
|
57
54
|
deployment: selector
|
|
58
55
|
});
|
|
59
|
-
|
|
56
|
+
await saveSelectedDeployment(
|
|
60
57
|
ctx,
|
|
58
|
+
selector,
|
|
61
59
|
newSelection,
|
|
62
|
-
|
|
63
|
-
ensureLocalRunning: false
|
|
64
|
-
}
|
|
60
|
+
(0, import_deploymentSelection.deploymentNameFromSelection)(currentSelection)
|
|
65
61
|
);
|
|
62
|
+
});
|
|
63
|
+
async function saveSelectedDeployment(ctx, selector, selection, previousDeploymentName) {
|
|
64
|
+
const deployment = await (0, import_api.loadSelectedDeploymentCredentials)(ctx, selection, {
|
|
65
|
+
ensureLocalRunning: false
|
|
66
|
+
});
|
|
66
67
|
if (deployment.deploymentFields === null) {
|
|
67
68
|
return ctx.crash({
|
|
68
69
|
exitCode: 1,
|
|
@@ -78,7 +79,7 @@ async function selectDeployment(ctx, selector) {
|
|
|
78
79
|
printedMessage: `Selecting a production deployment is unsupported. To run commands on a production deployment, pass the ${import_chalk.chalkStderr.bold(`--deployment ${selector}`)} flag to each command.`
|
|
79
80
|
});
|
|
80
81
|
}
|
|
81
|
-
const siteUrl = await (0,
|
|
82
|
+
const { convexSiteUrl: siteUrl } = deployment.deploymentFields.deploymentType === "local" ? { convexSiteUrl: null } : await (0, import_deploy2.fetchDeploymentCanonicalUrls)(ctx, {
|
|
82
83
|
adminKey: deployment.adminKey,
|
|
83
84
|
deploymentUrl: deployment.url
|
|
84
85
|
});
|
|
@@ -92,7 +93,7 @@ async function selectDeployment(ctx, selector) {
|
|
|
92
93
|
projectSlug: deployment.deploymentFields.projectSlug,
|
|
93
94
|
deploymentType: deployment.deploymentFields.deploymentType
|
|
94
95
|
},
|
|
95
|
-
|
|
96
|
+
previousDeploymentName
|
|
96
97
|
);
|
|
97
98
|
}
|
|
98
99
|
//# sourceMappingURL=deploymentSelect.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/deploymentSelect.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport {\n getDeploymentSelection,\n deploymentNameFromSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { parseDeploymentSelector } from \"./lib/deploymentSelector.js\";\nimport { updateEnvAndConfigForDeploymentSelection } from \"./configure.js\";\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwB;AACxB,qBAAuC;AACvC,iBAAkD;AAClD,
|
|
4
|
+
"sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport {\n DeploymentSelection,\n getDeploymentSelection,\n deploymentNameFromSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { parseDeploymentSelector } from \"./lib/deploymentSelector.js\";\nimport { updateEnvAndConfigForDeploymentSelection } from \"./configure.js\";\nimport { fetchDeploymentCanonicalUrls } from \"./lib/deploy2.js\";\nimport { chalkStderr } from \"chalk\";\n\nexport const deploymentSelect = new Command(\"select\")\n .summary(\"Select the deployment to use when running commands\")\n .description(\n \"Select the deployment to use when running commands.\\n\\n\" +\n \"The deployment will be used by all `npx convex` commands, except `npx convex deploy`. You can also run individual commands on another deployment by using the --deployment flag on that command.\\n\\n\" +\n \"Examples:\\n\" +\n \" npx convex select dev # Select your personal cloud dev deployment in the current project\\n\" +\n \" npx convex select local # Select your local deployment\\n\" +\n \" npx convex select dev/james # Select a deployment in the same project by its reference\\n\" +\n \" npx convex select some-project:dev/james # Select a deployment in another project in the same team\\n\" +\n \" npx convex select some-team:some-project:dev/james # Select a deployment in a particular team/project\\n\",\n )\n .argument(\"<deployment>\", \"The deployment to use\")\n .allowExcessArguments(false)\n .action(async (selector) => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n // Get the current deployment selection (no flags, just env/config state)\n const currentSelection = await getDeploymentSelection(ctx, {});\n\n // If no project is configured and the selector needs project context, show a specific error\n const parsed = parseDeploymentSelector(selector);\n if (\n currentSelection.kind === \"chooseProject\" &&\n parsed.kind !== \"inTeamProject\" &&\n parsed.kind !== \"deploymentName\" &&\n parsed.kind !== \"local\"\n ) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `No project configured. Run \\`npx convex dev\\` to set up a project first, or use a full selector like 'my-team:my-project:dev/james' or 'happy-capybara-123'.`,\n });\n }\n\n // Resolve the new deployment using the selector relative to the current project\n const newSelection = await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n deployment: selector,\n });\n\n await saveSelectedDeployment(\n ctx,\n selector,\n newSelection,\n deploymentNameFromSelection(currentSelection),\n );\n });\n\nexport async function saveSelectedDeployment(\n ctx: Context,\n selector: string,\n selection: DeploymentSelection,\n previousDeploymentName: string | null,\n): Promise<void> {\n const deployment = await loadSelectedDeploymentCredentials(ctx, selection, {\n ensureLocalRunning: false,\n });\n\n if (deployment.deploymentFields === null) {\n // Should be unreachable since for now, `select` only allows users\n // to select deployments that exist in Big Brain\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n errForSentry: `Unexpected selection in select: ${JSON.stringify(deployment)}`,\n });\n }\n\n if (deployment.deploymentFields.deploymentType === \"prod\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Selecting a production deployment is unsupported. To run commands on a production deployment, pass the ${chalkStderr.bold(`--deployment ${selector}`)} flag to each command.`,\n });\n }\n\n const { convexSiteUrl: siteUrl } =\n deployment.deploymentFields.deploymentType === \"local\"\n ? { convexSiteUrl: null }\n : await fetchDeploymentCanonicalUrls(ctx, {\n adminKey: deployment.adminKey,\n deploymentUrl: deployment.url,\n });\n\n await updateEnvAndConfigForDeploymentSelection(\n ctx,\n {\n url: deployment.url,\n siteUrl,\n deploymentName: deployment.deploymentFields.deploymentName,\n teamSlug: deployment.deploymentFields.teamSlug,\n projectSlug: deployment.deploymentFields.projectSlug,\n deploymentType: deployment.deploymentFields.deploymentType,\n },\n previousDeploymentName,\n );\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwB;AACxB,qBAAuC;AACvC,iBAAkD;AAClD,iCAIO;AACP,gCAAwC;AACxC,uBAAyD;AACzD,qBAA6C;AAC7C,mBAA4B;AAErB,MAAM,mBAAmB,IAAI,6BAAQ,QAAQ,EACjD,QAAQ,oDAAoD,EAC5D;AAAA,EACC;AAQF,EACC,SAAS,gBAAgB,uBAAuB,EAChD,qBAAqB,KAAK,EAC1B,OAAO,OAAO,aAAa;AAC1B,QAAM,MAAM,UAAM,8BAAc;AAAA,IAC9B,KAAK;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EACX,CAAC;AAGD,QAAM,mBAAmB,UAAM,mDAAuB,KAAK,CAAC,CAAC;AAG7D,QAAM,aAAS,mDAAwB,QAAQ;AAC/C,MACE,iBAAiB,SAAS,mBAC1B,OAAO,SAAS,mBAChB,OAAO,SAAS,oBAChB,OAAO,SAAS,SAChB;AACA,WAAO,MAAM,IAAI,MAAM;AAAA,MACrB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAGA,QAAM,eAAe,UAAM,mDAAuB,KAAK;AAAA,IACrD,KAAK;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,EACd,CAAC;AAED,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,QACA,wDAA4B,gBAAgB;AAAA,EAC9C;AACF,CAAC;AAEH,eAAsB,uBACpB,KACA,UACA,WACA,wBACe;AACf,QAAM,aAAa,UAAM,8CAAkC,KAAK,WAAW;AAAA,IACzE,oBAAoB;AAAA,EACtB,CAAC;AAED,MAAI,WAAW,qBAAqB,MAAM;AAGxC,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,cAAc,mCAAmC,KAAK,UAAU,UAAU,CAAC;AAAA,IAC7E,CAAC;AAAA,EACH;AAEA,MAAI,WAAW,iBAAiB,mBAAmB,QAAQ;AACzD,WAAO,MAAM,IAAI,MAAM;AAAA,MACrB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB,0GAA0G,yBAAY,KAAK,gBAAgB,QAAQ,EAAE,CAAC;AAAA,IACxK,CAAC;AAAA,EACH;AAEA,QAAM,EAAE,eAAe,QAAQ,IAC7B,WAAW,iBAAiB,mBAAmB,UAC3C,EAAE,eAAe,KAAK,IACtB,UAAM,6CAA6B,KAAK;AAAA,IACtC,UAAU,WAAW;AAAA,IACrB,eAAe,WAAW;AAAA,EAC5B,CAAC;AAEP,YAAM;AAAA,IACJ;AAAA,IACA;AAAA,MACE,KAAK,WAAW;AAAA,MAChB;AAAA,MACA,gBAAgB,WAAW,iBAAiB;AAAA,MAC5C,UAAU,WAAW,iBAAiB;AAAA,MACtC,aAAa,WAAW,iBAAiB;AAAA,MACzC,gBAAgB,WAAW,iBAAiB;AAAA,IAC9C;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|