convex 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +98 -43
- package/dist/browser.bundle.js +13 -10
- package/dist/browser.bundle.js.map +3 -3
- package/dist/cjs/browser/index-node.js +3 -1
- package/dist/cjs/browser/index.js +3 -1
- package/dist/cjs/browser/index.js.map +2 -2
- package/dist/cjs/browser/query_options.js.map +2 -2
- package/dist/cjs/browser/sync/authentication_manager.js +4 -1
- package/dist/cjs/browser/sync/authentication_manager.js.map +2 -2
- package/dist/cjs/browser/sync/web_socket_manager.js +1 -7
- package/dist/cjs/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/cjs/cli/aiFiles.js +39 -20
- package/dist/cjs/cli/aiFiles.js.map +3 -3
- package/dist/cjs/cli/codegen_templates/readme.js +14 -1
- package/dist/cjs/cli/codegen_templates/readme.js.map +2 -2
- package/dist/cjs/cli/configure.js +34 -32
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +7 -8
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentCreate.js +225 -40
- package/dist/cjs/cli/deploymentCreate.js.map +3 -3
- package/dist/cjs/cli/deploymentSelect.js +14 -13
- package/dist/cjs/cli/deploymentSelect.js.map +2 -2
- package/dist/cjs/cli/dev.js +30 -11
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/docs.js +1 -1
- package/dist/cjs/cli/docs.js.map +2 -2
- package/dist/cjs/cli/init.js +1 -1
- package/dist/cjs/cli/init.js.map +2 -2
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js +73 -0
- package/dist/cjs/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js +73 -0
- package/dist/cjs/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js +48 -0
- package/dist/cjs/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +58 -0
- package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/index.js +215 -0
- package/dist/cjs/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js +196 -0
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/state.js +96 -0
- package/dist/cjs/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/status.js +198 -0
- package/dist/cjs/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js +128 -0
- package/dist/cjs/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/cjs/cli/lib/api.js +70 -7
- package/dist/cjs/cli/lib/api.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +10 -6
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +43 -7
- package/dist/cjs/cli/lib/config.js.map +3 -3
- package/dist/cjs/cli/lib/deploy2.js +9 -26
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +45 -2
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelector.js +1 -0
- package/dist/cjs/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +162 -117
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/env.js +1 -13
- package/dist/cjs/cli/lib/env.js.map +2 -2
- package/dist/cjs/cli/lib/expiration.js +104 -0
- package/dist/cjs/cli/lib/expiration.js.map +7 -0
- package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
- package/dist/cjs/cli/lib/init.js +4 -3
- package/dist/cjs/cli/lib/init.js.map +2 -2
- package/dist/cjs/cli/lib/insights.js +1 -1
- package/dist/cjs/cli/lib/insights.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/anonymous.js +15 -8
- package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js +8 -10
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/run.js +1 -0
- package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/utils.js +9 -0
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/tools/status.js +1 -1
- package/dist/cjs/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/cjs/cli/lib/updates.js +12 -13
- package/dist/cjs/cli/lib/updates.js.map +2 -2
- package/dist/cjs/cli/lib/usage.js +2 -1
- package/dist/cjs/cli/lib/usage.js.map +2 -2
- package/dist/cjs/cli/lib/utils/prompts.js +2 -1
- package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +46 -20
- package/dist/cjs/cli/lib/utils/utils.js.map +3 -3
- package/dist/cjs/cli/lib/versionApi.js +7 -4
- package/dist/cjs/cli/lib/versionApi.js.map +2 -2
- package/dist/cjs/cli/lib/workos/workos.js +4 -6
- package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react/client.js +43 -6
- package/dist/cjs/react/client.js.map +2 -2
- package/dist/cjs/react/index.js +2 -0
- package/dist/cjs/react/index.js.map +2 -2
- package/dist/cjs/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/cjs/server/api.js.map +2 -2
- package/dist/cjs/server/components/definition.js.map +1 -1
- package/dist/cjs/server/components/index.js +40 -4
- package/dist/cjs/server/components/index.js.map +2 -2
- package/dist/cjs/server/data_model.js.map +1 -1
- package/dist/cjs/server/impl/meta_impl.js +78 -0
- package/dist/cjs/server/impl/meta_impl.js.map +7 -0
- package/dist/cjs/server/impl/registration_impl.js +16 -11
- package/dist/cjs/server/impl/registration_impl.js.map +2 -2
- package/dist/cjs/server/index.js.map +2 -2
- package/dist/cjs/server/meta.js +17 -0
- package/dist/cjs/server/meta.js.map +7 -0
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs-types/browser/index.d.ts +1 -0
- package/dist/cjs-types/browser/index.d.ts.map +1 -1
- package/dist/cjs-types/browser/query_options.d.ts +12 -9
- package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/cjs-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.test.d.ts +2 -0
- package/dist/cjs-types/cli/configure.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts +3 -1
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/cjs-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/cjs-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts +6 -0
- package/dist/cjs-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/api.d.ts +3 -3
- package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/command.d.ts +2 -1
- package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/config.d.ts +18 -6
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/env.d.ts +0 -4
- package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/expiration.d.ts +35 -0
- package/dist/cjs-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/updates.d.ts +4 -3
- package/dist/cjs-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/react/client.d.ts +54 -2
- package/dist/cjs-types/react/client.d.ts.map +1 -1
- package/dist/cjs-types/react/index.d.ts +7 -2
- package/dist/cjs-types/react/index.d.ts.map +1 -1
- package/dist/cjs-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts +5 -0
- package/dist/cjs-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/cjs-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/cjs-types/server/api.d.ts +5 -1
- package/dist/cjs-types/server/api.d.ts.map +1 -1
- package/dist/cjs-types/server/components/definition.d.ts +1 -0
- package/dist/cjs-types/server/components/definition.d.ts.map +1 -1
- package/dist/cjs-types/server/components/index.d.ts +5 -1
- package/dist/cjs-types/server/components/index.d.ts.map +1 -1
- package/dist/cjs-types/server/data_model.d.ts +2 -1
- package/dist/cjs-types/server/data_model.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/index.d.ts +1 -0
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts +72 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -0
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +2446 -1933
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/index-node.js +1 -0
- package/dist/esm/browser/index.js +1 -0
- package/dist/esm/browser/index.js.map +2 -2
- package/dist/esm/browser/query_options.js.map +2 -2
- package/dist/esm/browser/sync/authentication_manager.js +4 -1
- package/dist/esm/browser/sync/authentication_manager.js.map +2 -2
- package/dist/esm/browser/sync/web_socket_manager.js +1 -7
- package/dist/esm/browser/sync/web_socket_manager.js.map +2 -2
- package/dist/esm/cli/aiFiles.js +41 -23
- package/dist/esm/cli/aiFiles.js.map +2 -2
- package/dist/esm/cli/codegen_templates/readme.js +14 -1
- package/dist/esm/cli/codegen_templates/readme.js.map +2 -2
- package/dist/esm/cli/configure.js +35 -33
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +11 -10
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentCreate.js +238 -42
- package/dist/esm/cli/deploymentCreate.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +13 -12
- package/dist/esm/cli/deploymentSelect.js.map +2 -2
- package/dist/esm/cli/dev.js +34 -13
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/docs.js +1 -1
- package/dist/esm/cli/docs.js.map +2 -2
- package/dist/esm/cli/init.js +2 -2
- package/dist/esm/cli/init.js.map +2 -2
- package/dist/esm/cli/lib/aiFiles/agentsmd.js +56 -0
- package/dist/esm/cli/lib/aiFiles/agentsmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js +56 -0
- package/dist/esm/cli/lib/aiFiles/claudemd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js +16 -0
- package/dist/esm/cli/lib/aiFiles/cursorrules.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +35 -0
- package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/index.js +193 -0
- package/dist/esm/cli/lib/aiFiles/index.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/paths.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/skills.js +163 -0
- package/dist/esm/cli/lib/aiFiles/skills.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/state.js +60 -0
- package/dist/esm/cli/lib/aiFiles/state.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/status.js +178 -0
- package/dist/esm/cli/lib/aiFiles/status.js.map +7 -0
- package/dist/esm/cli/lib/aiFiles/utils.js +97 -0
- package/dist/esm/cli/lib/aiFiles/utils.js.map +7 -0
- package/dist/esm/cli/lib/api.js +70 -7
- package/dist/esm/cli/lib/api.js.map +2 -2
- package/dist/esm/cli/lib/command.js +10 -6
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/config.js +41 -6
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +13 -26
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/componentDefinition.js +4 -1
- package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +46 -2
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelector.js +1 -0
- package/dist/esm/cli/lib/deploymentSelector.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +162 -118
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/env.js +0 -11
- package/dist/esm/cli/lib/env.js.map +2 -2
- package/dist/esm/cli/lib/expiration.js +80 -0
- package/dist/esm/cli/lib/expiration.js.map +7 -0
- package/dist/esm/cli/lib/init.js +4 -3
- package/dist/esm/cli/lib/init.js.map +2 -2
- package/dist/esm/cli/lib/insights.js +1 -1
- package/dist/esm/cli/lib/insights.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/anonymous.js +16 -9
- package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/localDeployment.js +9 -11
- package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/run.js +1 -1
- package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/utils.js +8 -0
- package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/esm/cli/lib/mcp/tools/status.js +1 -1
- package/dist/esm/cli/lib/mcp/tools/status.js.map +2 -2
- package/dist/esm/cli/lib/updates.js +14 -12
- package/dist/esm/cli/lib/updates.js.map +2 -2
- package/dist/esm/cli/lib/usage.js +2 -1
- package/dist/esm/cli/lib/usage.js.map +2 -2
- package/dist/esm/cli/lib/utils/prompts.js +2 -1
- package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +45 -20
- package/dist/esm/cli/lib/utils/utils.js.map +3 -3
- package/dist/esm/cli/lib/versionApi.js +7 -4
- package/dist/esm/cli/lib/versionApi.js.map +2 -2
- package/dist/esm/cli/lib/workos/workos.js +4 -6
- package/dist/esm/cli/lib/workos/workos.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/client.js +43 -6
- package/dist/esm/react/client.js.map +2 -2
- package/dist/esm/react/index.js +1 -0
- package/dist/esm/react/index.js.map +2 -2
- package/dist/esm/react-clerk/ConvexProviderWithClerk.js.map +1 -1
- package/dist/esm/server/api.js.map +2 -2
- package/dist/esm/server/components/index.js +40 -4
- package/dist/esm/server/components/index.js.map +2 -2
- package/dist/esm/server/impl/meta_impl.js +54 -0
- package/dist/esm/server/impl/meta_impl.js.map +7 -0
- package/dist/esm/server/impl/registration_impl.js +20 -11
- package/dist/esm/server/impl/registration_impl.js.map +2 -2
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/meta.js +2 -0
- package/dist/esm/server/meta.js.map +7 -0
- package/dist/esm-types/browser/index.d.ts +1 -0
- package/dist/esm-types/browser/index.d.ts.map +1 -1
- package/dist/esm-types/browser/query_options.d.ts +12 -9
- package/dist/esm-types/browser/query_options.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/authentication_manager.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/web_socket_manager.d.ts.map +1 -1
- package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
- package/dist/esm-types/cli/codegen_templates/readme.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.test.d.ts +2 -0
- package/dist/esm-types/cli/configure.test.d.ts.map +1 -0
- package/dist/esm-types/cli/deploy.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts +1 -0
- package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts +2 -1
- package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts +3 -1
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/agentsmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts +19 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/claudemd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts +10 -0
- package/dist/esm-types/cli/lib/aiFiles/cursorrules.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +12 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts +42 -0
- package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/index.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/integration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/{ai → aiFiles}/paths.d.ts +4 -0
- package/dist/esm-types/cli/lib/aiFiles/paths.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/prompt.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +20 -0
- package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts +38 -0
- package/dist/esm-types/cli/lib/aiFiles/state.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/state.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts +6 -0
- package/dist/esm-types/cli/lib/aiFiles/status.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts +56 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/aiFiles/utils.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/api.d.ts +3 -3
- package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/command.d.ts +2 -1
- package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/config.d.ts +18 -6
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +5 -2
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +27 -12
- package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +24 -24
- package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -14
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +61 -52
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts +2 -0
- package/dist/esm-types/cli/lib/deploymentSelector.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/env.d.ts +0 -4
- package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/expiration.d.ts +35 -0
- package/dist/esm-types/cli/lib/expiration.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/expiration.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +16 -1
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts +15 -0
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +7 -0
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts +3 -3
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/updates.d.ts +4 -3
- package/dist/esm-types/cli/lib/updates.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
- package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +16 -2
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts +7 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/react/client.d.ts +54 -2
- package/dist/esm-types/react/client.d.ts.map +1 -1
- package/dist/esm-types/react/index.d.ts +7 -2
- package/dist/esm-types/react/index.d.ts.map +1 -1
- package/dist/esm-types/react/use_query_object_options.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_object_options.test.d.ts.map +1 -0
- package/dist/esm-types/react/use_query_result.test.d.ts +5 -0
- package/dist/esm-types/react/use_query_result.test.d.ts.map +1 -0
- package/dist/esm-types/react-clerk/ConvexProviderWithClerk.d.ts +1 -1
- package/dist/esm-types/server/api.d.ts +5 -1
- package/dist/esm-types/server/api.d.ts.map +1 -1
- package/dist/esm-types/server/components/definition.d.ts +1 -0
- package/dist/esm-types/server/components/definition.d.ts.map +1 -1
- package/dist/esm-types/server/components/index.d.ts +5 -1
- package/dist/esm-types/server/components/index.d.ts.map +1 -1
- package/dist/esm-types/server/data_model.d.ts +2 -1
- package/dist/esm-types/server/data_model.d.ts.map +1 -1
- package/dist/esm-types/server/impl/meta_impl.d.ts +5 -0
- package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -0
- package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
- package/dist/esm-types/server/index.d.ts +1 -0
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts +72 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -0
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/react.bundle.js +55 -15
- package/dist/react.bundle.js.map +3 -3
- package/package.json +11 -7
- package/schemas/convex.schema.json +22 -3
- package/src/browser/index.ts +3 -0
- package/src/browser/query_options.test.ts +0 -9
- package/src/browser/query_options.ts +36 -15
- package/src/browser/sync/authentication_manager.ts +9 -4
- package/src/browser/sync/client_node.test.ts +125 -0
- package/src/browser/sync/web_socket_manager.ts +1 -7
- package/src/cli/aiFiles.ts +56 -33
- package/src/cli/codegen_templates/readme.ts +14 -1
- package/src/cli/configure.test.ts +138 -0
- package/src/cli/configure.ts +62 -55
- package/src/cli/deploy.ts +12 -9
- package/src/cli/deploymentCreate.test.ts +349 -14
- package/src/cli/deploymentCreate.ts +268 -41
- package/src/cli/deploymentSelect.test.ts +136 -27
- package/src/cli/deploymentSelect.ts +50 -41
- package/src/cli/deploymentSelection.test.ts +399 -37
- package/src/cli/dev.ts +49 -14
- package/src/cli/docs.ts +1 -1
- package/src/cli/init.ts +2 -2
- package/src/cli/lib/{ai → aiFiles}/MANUAL_TESTING.md +6 -2
- package/src/cli/lib/aiFiles/agentsmd.test.ts +133 -0
- package/src/cli/lib/aiFiles/agentsmd.ts +81 -0
- package/src/cli/lib/aiFiles/claudemd.test.ts +92 -0
- package/src/cli/lib/aiFiles/claudemd.ts +81 -0
- package/src/cli/lib/aiFiles/cursorrules.ts +25 -0
- package/src/cli/lib/aiFiles/guidelinesmd.test.ts +50 -0
- package/src/cli/lib/aiFiles/guidelinesmd.ts +49 -0
- package/src/cli/lib/{ai → aiFiles}/index.test.ts +343 -516
- package/src/cli/lib/aiFiles/index.ts +297 -0
- package/src/cli/lib/{ai → aiFiles}/integration.test.ts +195 -158
- package/src/cli/lib/{ai → aiFiles}/paths.ts +5 -0
- package/src/cli/lib/{ai → aiFiles}/prompt.test.ts +79 -31
- package/src/cli/lib/aiFiles/skills.ts +243 -0
- package/src/cli/lib/aiFiles/state.test.ts +280 -0
- package/src/cli/lib/aiFiles/state.ts +82 -0
- package/src/cli/lib/aiFiles/status.ts +246 -0
- package/src/cli/lib/aiFiles/utils.test.ts +50 -0
- package/src/cli/lib/aiFiles/utils.ts +191 -0
- package/src/cli/lib/api.ts +88 -7
- package/src/cli/lib/command.ts +18 -8
- package/src/cli/lib/config.test.ts +185 -8
- package/src/cli/lib/config.ts +73 -12
- package/src/cli/lib/deploy2.ts +14 -27
- package/src/cli/lib/deployApi/componentDefinition.ts +4 -1
- package/src/cli/lib/deploymentSelection.ts +59 -6
- package/src/cli/lib/deploymentSelector.test.ts +6 -0
- package/src/cli/lib/deploymentSelector.ts +2 -0
- package/src/cli/lib/dev.ts +202 -153
- package/src/cli/lib/env.ts +0 -15
- package/src/cli/lib/expiration.test.ts +159 -0
- package/src/cli/lib/expiration.ts +124 -0
- package/src/cli/lib/generatedFunctionLogsApi.ts +16 -1
- package/src/cli/lib/init.ts +6 -2
- package/src/cli/lib/insights.ts +1 -1
- package/src/cli/lib/localDeployment/anonymous.ts +19 -9
- package/src/cli/lib/localDeployment/localDeployment.ts +9 -11
- package/src/cli/lib/localDeployment/run.ts +1 -1
- package/src/cli/lib/localDeployment/upgrade.ts +12 -10
- package/src/cli/lib/localDeployment/utils.ts +12 -0
- package/src/cli/lib/mcp/tools/status.ts +1 -1
- package/src/cli/lib/updates.test.ts +97 -60
- package/src/cli/lib/updates.ts +17 -15
- package/src/cli/lib/usage.ts +3 -1
- package/src/cli/lib/utils/prompts.ts +2 -0
- package/src/cli/lib/utils/utils.test.ts +6 -6
- package/src/cli/lib/utils/utils.ts +66 -27
- package/src/cli/lib/versionApi.test.ts +13 -10
- package/src/cli/lib/versionApi.ts +13 -5
- package/src/cli/lib/workos/workos.ts +4 -5
- package/src/index.ts +1 -1
- package/src/react/client.test.tsx +65 -0
- package/src/react/client.ts +129 -13
- package/src/react/index.ts +9 -1
- package/src/react/use_query_object_options.test.ts +50 -0
- package/src/react/use_query_result.test.ts +41 -0
- package/src/react-clerk/ConvexProviderWithClerk.test.tsx +1 -1
- package/src/react-clerk/ConvexProviderWithClerk.tsx +1 -1
- package/src/server/api.ts +5 -1
- package/src/server/components/definition.ts +3 -0
- package/src/server/components/index.ts +62 -5
- package/src/server/data_model.ts +2 -1
- package/src/server/impl/meta_impl.ts +74 -0
- package/src/server/impl/registration_impl.ts +21 -9
- package/src/server/index.ts +8 -0
- package/src/server/meta.ts +76 -0
- package/src/server/registration.ts +10 -0
- package/src/server/schema.test.ts +78 -1
- package/dist/cjs/cli/lib/ai/config.js +0 -144
- package/dist/cjs/cli/lib/ai/config.js.map +0 -7
- package/dist/cjs/cli/lib/ai/index.js +0 -704
- package/dist/cjs/cli/lib/ai/index.js.map +0 -7
- package/dist/cjs/cli/lib/ai/paths.js.map +0 -7
- package/dist/cjs-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/cjs-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/cjs-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/cjs-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/cjs-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/dist/esm/cli/lib/ai/config.js +0 -109
- package/dist/esm/cli/lib/ai/config.js.map +0 -7
- package/dist/esm/cli/lib/ai/index.js +0 -684
- package/dist/esm/cli/lib/ai/index.js.map +0 -7
- package/dist/esm/cli/lib/ai/paths.js.map +0 -7
- package/dist/esm-types/cli/lib/ai/config.d.ts +0 -50
- package/dist/esm-types/cli/lib/ai/config.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/config.test.d.ts +0 -2
- package/dist/esm-types/cli/lib/ai/config.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.d.ts +0 -56
- package/dist/esm-types/cli/lib/ai/index.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/index.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/integration.test.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/paths.d.ts.map +0 -1
- package/dist/esm-types/cli/lib/ai/prompt.test.d.ts.map +0 -1
- package/src/cli/lib/ai/config.test.ts +0 -338
- package/src/cli/lib/ai/config.ts +0 -159
- package/src/cli/lib/ai/index.ts +0 -1006
- /package/dist/cjs/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/cjs-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
- /package/dist/esm/cli/lib/{ai → aiFiles}/paths.js +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/index.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/integration.test.d.ts +0 -0
- /package/dist/esm-types/cli/lib/{ai → aiFiles}/prompt.test.d.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/config.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n Bundle,\n BundleHash,\n bundle,\n bundleAuthConfig,\n entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n functionsDir,\n ErrorData,\n loadPackageJson,\n deploymentFetch,\n deprecationCheckWarning,\n logAndHandleFetchError,\n ThrowingFetchError,\n currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n LocalDeploymentError,\n printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { DeploymentType } from \"./api.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing WorkOS AuthKit integration configuration. */\nexport interface AuthKitConfigureSettings {\n redirectUris?: string[];\n appHomepageUrl?: string;\n corsOrigins?: string[];\n}\n\nexport interface AuthKitEnvironmentConfig {\n environmentType?: \"development\" | \"staging\" | \"production\";\n configure?: false | AuthKitConfigureSettings;\n localEnvVars?: false | Record<string, string>;\n}\n\nexport interface AuthKitConfig {\n dev?: AuthKitEnvironmentConfig;\n preview?: AuthKitEnvironmentConfig;\n prod?: AuthKitEnvironmentConfig;\n}\n/**\n * convex.json file parsing notes\n *\n * - Unknown fields at the top level and in node and codegen are preserved\n * so that older CLI versions can deploy new projects (this functionality\n * will be removed in the future).\n * - convex.json does not allow comments, but this could change in the future.\n * Previously it contained automatically set values like productionUrl\n * but it's more like a config file now.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n // \u26A0\uFE0F When updating this, please also update the file used by IDEs for autocompletion and validation:\n // -> npm-packages/convex/schemas/convex.schema.json\n\n functions: string;\n node: {\n externalPackages: string[];\n // nodeVersion has no default value, its presence/absence is meaningful\n nodeVersion?: string | undefined;\n };\n generateCommonJSApi: boolean;\n\n codegen: {\n staticApi: boolean;\n staticDataModel: boolean;\n legacyComponentApi?: boolean;\n fileType?: \"ts\" | \"js/dts\";\n };\n\n bundler?: {\n includeSourcesContent?: boolean;\n };\n\n typescriptCompiler?: TypescriptCompiler;\n\n // WorkOS AuthKit integration configuration\n authKit?: AuthKitConfig | undefined;\n\n // Convex AI files user preferences.\n aiFiles?: {\n // When true, suppresses AI files install/staleness nags.\n disableStalenessMessage?: boolean;\n };\n}\n\nexport interface Config {\n projectConfig: ProjectConfig;\n modules: Bundle[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n projectConfig: ProjectConfig;\n moduleHashes: BundleHash[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used (default is false) */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.legacyComponentApi === false;\n}\n\n/**\n * Get the authKit configuration from convex.json.\n */\nexport async function getAuthKitConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n): Promise<AuthKitConfig | undefined> {\n // If there's an explicit authKit config, use it\n if (\"authKit\" in projectConfig) {\n return projectConfig.authKit;\n }\n\n // TODO remove this after a few versions\n // Migration help: is this one of the hardcoded templates that has special\n // behavior without a convex.json? Encourage them to upgrade the template.\n const homepage = await currentPackageHomepage(ctx);\n const isOldWorkOSTemplate = !!(\n homepage &&\n [\n \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n ].includes(homepage)\n );\n\n if (isOldWorkOSTemplate) {\n logWarning(\n \"The template this project is based on has been updated to work with this version of Convex.\",\n );\n logWarning(\n \"Please copy the convex.json from the latest template version or add an 'authKit' section.\",\n );\n logMessage(\"Learn more at https://docs.convex.dev/auth/authkit\");\n }\n}\n\nexport async function getAuthKitEnvironmentConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<AuthKitEnvironmentConfig | undefined> {\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n return authKitConfig?.[deploymentType];\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// WorkOS AuthKit configuration schemas\nconst AuthKitConfigureSchema = z.union([\n z.literal(false),\n z.object({\n redirectUris: z.array(z.string()).optional(),\n appHomepageUrl: z.string().optional(),\n corsOrigins: z.array(z.string()).optional(),\n }),\n]);\n\nconst AuthKitLocalEnvVarsSchema = z.union([\n z.literal(false),\n z.record(z.string()),\n]);\n\nconst AuthKitEnvironmentConfigSchema = z.object({\n environmentType: z.enum([\"development\", \"staging\", \"production\"]).optional(),\n configure: AuthKitConfigureSchema.optional(),\n localEnvVars: AuthKitLocalEnvVarsSchema.optional(),\n});\n\nconst AuthKitConfigSchema = z\n .object({\n dev: AuthKitEnvironmentConfigSchema.optional(),\n preview: AuthKitEnvironmentConfigSchema.optional(),\n prod: AuthKitEnvironmentConfigSchema.optional(),\n })\n .refine(\n (data) => {\n // Validation: environmentType only allowed in prod\n const devEnvType = data.dev?.environmentType;\n const previewEnvType = data.preview?.environmentType;\n if (devEnvType || previewEnvType) {\n return false;\n }\n return true;\n },\n {\n message: \"authKit.environmentType is only allowed in the prod section\",\n path: [\"environmentType\"],\n },\n )\n .refine(\n (data) => {\n // Validation: localEnvVars only allowed for dev\n // Check preview doesn't have localEnvVars\n if (\n data.preview?.localEnvVars !== undefined &&\n data.preview?.localEnvVars !== false\n ) {\n return false;\n }\n // Check prod doesn't have localEnvVars\n if (\n data.prod?.localEnvVars !== undefined &&\n data.prod?.localEnvVars !== false\n ) {\n return false;\n }\n return true;\n },\n {\n message:\n \"authKit.localEnvVars is only supported for dev deployments. Preview and prod deployments must configure environment variables directly in the deployment platform.\",\n path: [\"localEnvVars\"],\n },\n );\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n externalPackages: z\n .array(z.string())\n .default([])\n .describe(\n \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n ),\n nodeVersion: z\n .string()\n .optional()\n .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n staticApi: z\n .boolean()\n .default(false)\n .describe(\n \"Use Convex function argument validators and return value validators to generate a typed API object\",\n ),\n staticDataModel: z.boolean().default(false),\n // These optional fields have no defaults - their presence/absence is meaningful\n legacyComponentApi: z.boolean().optional(),\n fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n includeSourcesContent: z\n .boolean()\n .default(false)\n .describe(\n \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n ),\n});\n\nconst AiFilesSchema = z.object({\n disableStalenessMessage: z.boolean().default(false),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n schema.refine((val) => val !== null && !Array.isArray(val), {\n message: \"Expected `convex.json` to contain an object\",\n });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n const codegenSchema = strict\n ? CodegenSchema.strict()\n : CodegenSchema.passthrough();\n const bundlerSchema = strict\n ? BundlerSchema.strict()\n : BundlerSchema.passthrough();\n\n const baseObject = z.object({\n functions: z\n .string()\n .default(DEFAULT_FUNCTIONS_PATH)\n .describe(\"Relative file path to the convex directory\"),\n node: nodeSchema.default({ externalPackages: [] }),\n codegen: codegenSchema.default({\n staticApi: false,\n staticDataModel: false,\n }),\n bundler: bundlerSchema.default({ includeSourcesContent: false }).optional(),\n generateCommonJSApi: z.boolean().default(false),\n typescriptCompiler: z\n .enum([\"tsc\", \"tsgo\"])\n .optional()\n .describe(\n \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n ),\n\n // Optional $schema field for JSON schema validation in editors\n $schema: z.string().optional(),\n // WorkOS AuthKit integration configuration\n authKit: AuthKitConfigSchema.optional(),\n aiFiles: AiFilesSchema.optional(),\n\n // Deprecated fields that have been deprecated for years, only here so we\n // know it's safe to delete them.\n project: z.string().optional(),\n team: z.string().optional(),\n prodUrl: z.string().optional(),\n });\n\n // Apply strict or passthrough BEFORE refine\n const withStrictness = strict\n ? baseObject.strict()\n : baseObject.passthrough();\n\n // Now apply the refinement\n return withStrictness.refine(\n (data) => {\n // Validate that generateCommonJSApi is not true when using TypeScript codegen\n if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n return false;\n }\n return true;\n },\n {\n message:\n 'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n \"CommonJS modules require JavaScript generation. \" +\n 'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n path: [\"generateCommonJSApi\"],\n },\n );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n ctx: Context,\n obj: any,\n): Promise<ProjectConfig> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: \"Expected `convex.json` to contain an object\",\n });\n }\n\n try {\n // Try strict parse first to detect unknown keys\n return ProjectConfigSchemaStrict.parse(obj);\n } catch (error) {\n if (error instanceof z.ZodError) {\n // Check if all issues are unrecognized_keys issues\n const unknownKeyIssues = error.issues.filter(\n (issue) => issue.code === \"unrecognized_keys\",\n );\n\n if (\n unknownKeyIssues.length > 0 &&\n unknownKeyIssues.length === error.issues.length\n ) {\n // All errors are just unknown keys - warn about them\n for (const issue of unknownKeyIssues) {\n if (issue.code === \"unrecognized_keys\") {\n const pathPrefix =\n issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n const unknownKeys = issue.keys as string[];\n const newUnknownKeys = unknownKeys.filter(\n (key) => !warnedUnknownKeys.has(pathPrefix + key),\n );\n\n if (newUnknownKeys.length > 0) {\n const fullPath =\n issue.path.length > 0\n ? `\\`${issue.path.join(\".\")}\\``\n : \"`convex.json`\";\n logMessage(\n chalkStderr.yellow(\n `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n ),\n );\n logMessage(\n chalkStderr.gray(\n \" These properties will be preserved but are not recognized by this version of Convex.\",\n ),\n );\n\n // Track that we've warned about these keys\n newUnknownKeys.forEach((key) =>\n warnedUnknownKeys.add(pathPrefix + key),\n );\n }\n }\n }\n // Re-parse with passthrough schema to preserve unknown keys\n return ProjectConfigSchema.parse(obj);\n }\n\n // Handle validation errors we won't ignore\n if (error instanceof z.ZodError) {\n const issue = error.issues[0];\n const pathStr = issue.path.join(\".\");\n const message = pathStr\n ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n : `\\`convex.json\\`: ${issue.message}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: (error as any).toString(),\n });\n }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n functions: string;\n nodeVersion?: string;\n} {\n function throwParseError(message: string) {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw new ParseError(message);\n }\n if (typeof obj !== \"object\") {\n throwParseError(\"Expected an object\");\n }\n const { functions, nodeVersion } = obj;\n if (typeof functions !== \"string\") {\n throwParseError(\"Expected functions to be a string\");\n }\n\n if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n throwParseError(\"Expected nodeVersion to be a string\");\n }\n\n return {\n functions,\n ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n };\n}\n\nexport function configName(): string {\n return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n const configFn = configName();\n // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n // Leave an error message around to help people out. We can remove this\n // error message after a couple months.\n const preferredLocation = configFn;\n const wrongLocation = path.join(\"src\", configFn);\n\n // Allow either location, but not both.\n const preferredLocationExists = ctx.fs.exists(preferredLocation);\n const wrongLocationExists = ctx.fs.exists(wrongLocation);\n if (preferredLocationExists && wrongLocationExists) {\n const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n if (!preferredLocationExists && wrongLocationExists) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n });\n }\n\n return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n projectConfig: ProjectConfig;\n configPath: string;\n}> {\n if (!ctx.fs.exists(\"convex.json\")) {\n // create-react-app bans imports from outside of src, so we can just\n // put the functions directory inside of src/ to work around this issue.\n const packages = await loadPackageJson(ctx);\n const isCreateReactApp = \"react-scripts\" in packages;\n return {\n projectConfig: {\n functions: isCreateReactApp\n ? `src/${DEFAULT_FUNCTIONS_PATH}`\n : DEFAULT_FUNCTIONS_PATH,\n node: {\n externalPackages: [],\n },\n generateCommonJSApi: false,\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n aiFiles: {\n disableStalenessMessage: false,\n },\n },\n configPath: configName(),\n };\n }\n let projectConfig;\n const configPath = await configFilepath(ctx);\n try {\n projectConfig = await parseProjectConfig(\n ctx,\n JSON.parse(ctx.fs.readUtf8File(configPath)),\n );\n } catch (err) {\n if (err instanceof ParseError || err instanceof SyntaxError) {\n logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n logMessage(chalkStderr.gray(err.toString()));\n } else {\n logFailure(\n `Error: Unable to read project config file \"${configPath}\"\\n` +\n \" Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n );\n if (err instanceof Error) {\n logError(chalkStderr.red(err.message));\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n // TODO -- move the logging above in here\n printedMessage: null,\n });\n }\n return {\n projectConfig,\n configPath,\n };\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n verbose: boolean,\n): Promise<{\n config: Config;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const baseDir = functionsDir(configPath, projectConfig);\n // We bundle Node.js and Convex JS runtime functions entry points separately\n // since they execute on different platforms.\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n // es-build prints errors to console which would clobber our spinner.\n if (verbose) {\n showSpinner(\"Bundling modules for Convex's runtime...\");\n }\n const convexResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.isolate,\n generateSourceMaps: true,\n platform: \"browser\",\n });\n if (verbose) {\n logMessage(\n \"Convex's runtime modules: \",\n convexResult.modules.map((m) => m.path),\n );\n }\n\n // Bundle node modules.\n if (verbose && entryPoints.node.length !== 0) {\n showSpinner(\"Bundling modules for Node.js runtime...\");\n }\n const nodeResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.node,\n generateSourceMaps: true,\n platform: \"node\",\n chunksFolder: path.join(\"_deps\", \"node\"),\n externalPackagesAllowList: projectConfig.node.externalPackages,\n });\n if (verbose && entryPoints.node.length !== 0) {\n logMessage(\n \"Node.js runtime modules: \",\n nodeResult.modules.map((m) => m.path),\n );\n if (projectConfig.node.externalPackages.length > 0) {\n logMessage(\n \"Node.js runtime external dependencies (to be installed on the server): \",\n [...nodeResult.externalDependencies.entries()].map(\n (a) => `${a[0]}: ${a[1]}`,\n ),\n );\n }\n }\n const modules = convexResult.modules;\n modules.push(...nodeResult.modules);\n modules.push(...(await bundleAuthConfig(ctx, baseDir)));\n\n const nodeDependencies: NodeDependency[] = [];\n for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n nodeDependencies.push({ name: moduleName, version: moduleVersion });\n }\n\n const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n convexResult.bundledModuleNames.keys(),\n ).map((moduleName) => {\n return {\n name: moduleName,\n platform: \"convex\",\n };\n });\n bundledModuleInfos.push(\n ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n (moduleName): BundledModuleInfo => {\n return {\n name: moduleName,\n platform: \"node\",\n };\n },\n ),\n );\n\n return {\n config: {\n projectConfig: projectConfig,\n modules: modules,\n nodeDependencies: nodeDependencies,\n // We're just using the version this CLI is running with for now.\n // This could be different than the version of `convex` the app runs with\n // if the CLI is installed globally.\n udfServerVersion: version,\n nodeVersion: projectConfig.node.nodeVersion,\n },\n bundledModuleInfos,\n };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n): Promise<void> {\n const baseDir = functionsDir(configPath, projectConfig);\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n if (entryPoints.isolate.length === 0) {\n logFinishedStep(\"No non-'use node' modules found.\");\n }\n await debugIsolateBundlesSerially(ctx, {\n entryPoints: entryPoints.isolate,\n extraConditions: [],\n dir: baseDir,\n });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n ctx: Context,\n verbose: boolean,\n): Promise<{\n config: Config;\n configPath: string;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n const { config, bundledModuleInfos } = await configFromProjectConfig(\n ctx,\n projectConfig,\n configPath,\n verbose,\n );\n return { config, configPath, bundledModuleInfos };\n}\n\n/**\n * Ensure the functions directory exists.\n *\n * Note: This function no longer writes to or deletes `convex.json`. The config\n * file is now treated as user-owned and is not modified by the CLI. This allows\n * users to maintain their preferred formatting and any comments they may add\n * (if we later support JSONC parsing).\n */\nexport async function writeProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n) {\n const configPath = await configFilepath(ctx);\n ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n allowExisting: true,\n });\n}\n\nexport function removedExistingConfig(\n ctx: Context,\n configPath: string,\n options: { allowExistingConfig?: boolean },\n) {\n if (!options.allowExistingConfig) {\n return false;\n }\n recursivelyDelete(ctx, configPath);\n logFinishedStep(`Removed existing ${configPath}`);\n return true;\n}\n\n/** Pull configuration for the root app component from the given remote origin. */\nexport async function pullConfig(\n ctx: Context,\n project: string | undefined,\n team: string | undefined,\n origin: string,\n adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: origin,\n adminKey,\n });\n\n changeSpinner(\"Downloading current deployment state...\");\n try {\n const res = await fetch(\"/api/get_config_hashes\", {\n method: \"POST\",\n body: JSON.stringify({ version, adminKey }),\n });\n deprecationCheckWarning(ctx, res);\n const data = await res.json();\n const backendConfig = parseBackendConfig(data.config);\n const projectConfig = {\n ...backendConfig,\n node: {\n // This field is not stored in the backend, which is ok since it is also\n // not used to diff configs.\n externalPackages: [],\n nodeVersion: data.nodeVersion,\n },\n // This field is not stored in the backend, it only affects the client.\n generateCommonJSApi: false,\n // This field is also not stored in the backend, it only affects the client.\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n project,\n team,\n prodUrl: origin,\n };\n return {\n projectConfig,\n moduleHashes: data.moduleHashes,\n // TODO(presley): Add this to diffConfig().\n nodeDependencies: data.nodeDependencies,\n udfServerVersion: data.udfServerVersion,\n };\n } catch (err: unknown) {\n logFailure(`Error: Unable to pull deployment config from ${origin}`);\n return await logAndHandleFetchError(ctx, err);\n }\n}\n\ninterface BundledModuleInfo {\n name: string;\n platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n /** This path is relative to the app (root component) directory. */\n definitionPath: ComponentDefinitionPath;\n\n /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n dependencies: ComponentDefinitionPath[];\n\n // All other paths are relative to the directory of the definitionPath above.\n definition: Bundle;\n schema: Bundle;\n functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n ComponentDefinitionSpec,\n \"definitionPath\"\n> & {\n // Only app (root) component specs contain an auth bundle.\n auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n ComponentDefinitionSpec,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n AppDefinitionSpec,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n oldConfig: ConfigWithModuleHashes,\n newConfig: Config,\n): { diffString: string } {\n let diff = \"\";\n\n let versionMessage = \"\";\n const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n }\n if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n }\n if (versionMessage) {\n diff += \"Change the server's function version:\\n\";\n diff += versionMessage;\n }\n\n if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n diff += \"Change the server's version for Node.js actions:\\n\";\n if (oldConfig.projectConfig.node.nodeVersion) {\n diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n }\n if (newConfig.nodeVersion) {\n diff += `[+] ${newConfig.nodeVersion}\\n`;\n }\n }\n\n return { diffString: diff };\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n ctx: Context,\n error: unknown,\n defaultMessage: string,\n deploymentName: string | null,\n deployment:\n | {\n deploymentUrl: string;\n adminKey: string;\n deploymentNotice: string;\n }\n | undefined,\n _deploymentType: DeploymentType | undefined,\n): Promise<never> {\n const data: ErrorData | undefined =\n error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n const errorMessage = data.message || \"(no error message given)\";\n const [, variableName] =\n errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n // DEPRECATED: This error path provisioning is being phased out in favor of\n // pre-flight provisioning that happens before the client bundle build.\n // We keep minimal logic here for backwards compatibility with older templates\n // that may still rely on this path.\n if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n // For backwards compatibility with templates that haven't been updated,\n // we'll still show a helpful error message directing users to configure WorkOS.\n // But we no longer do automatic provisioning here since it happens too late\n // (after the client bundle has already been built with missing env vars).\n logWarning(\n \"WORKOS_CLIENT_ID is not set; you can set it manually on the deployment or for hosted Convex deployments, use auto-provisioning.\",\n );\n logMessage(\n \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n );\n logMessage(\"\");\n }\n\n const envVarMessage =\n `Environment variable ${chalkStderr.bold(\n variableName,\n )} is used in auth config file but ` + `its value was not set.`;\n let setEnvVarInstructions =\n \"Go set it in the dashboard or using `npx convex env set`\";\n\n // If `npx convex dev` is running using --url there might not be a configured deployment\n if (deploymentName !== null) {\n const variableQuery =\n variableName !== undefined ? `?var=${variableName}` : \"\";\n const dashboardUrl = deploymentDashboardUrlPage(\n deploymentName,\n `/settings/environment-variables${variableQuery}`,\n );\n setEnvVarInstructions = `Go to:\\n\\n ${chalkStderr.bold(\n dashboardUrl,\n )}\\n\\n to set it up. `;\n }\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n errForSentry: error,\n printedMessage: envVarMessage + \"\\n\" + setEnvVarInstructions,\n });\n }\n\n if (data?.code === \"RaceDetected\") {\n // Environment variables or schema changed during push. This is a transient\n // error that should be retried immediately with exponential backoff.\n const message =\n data.message || \"Schema or environment variables changed during push\";\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: chalkStderr.yellow(message),\n });\n }\n\n if (data?.code === \"InternalServerError\") {\n if (deploymentName?.startsWith(\"local-\")) {\n printLocalDeploymentOnError();\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new LocalDeploymentError(\n \"InternalServerError while pushing to local deployment\",\n ),\n printedMessage: defaultMessage,\n });\n }\n }\n\n logFailure(defaultMessage);\n return await logAndHandleFetchError(ctx, error);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport path from \"path\";\n// eslint-disable-next-line no-restricted-imports\nimport { promises as nodeFs } from \"fs\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n Bundle,\n BundleHash,\n bundle,\n bundleAuthConfig,\n entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n functionsDir,\n ErrorData,\n loadPackageJson,\n deploymentFetch,\n deprecationCheckWarning,\n logAndHandleFetchError,\n ThrowingFetchError,\n currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n LocalDeploymentError,\n printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { DeploymentType } from \"./api.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing WorkOS AuthKit integration configuration. */\nexport interface AuthKitConfigureSettings {\n redirectUris?: string[];\n appHomepageUrl?: string;\n corsOrigins?: string[];\n}\n\nexport interface AuthKitEnvironmentConfig {\n environmentType?: \"development\" | \"staging\" | \"production\";\n configure?: false | AuthKitConfigureSettings;\n localEnvVars?: false | Record<string, string>;\n}\n\nexport interface AuthKitConfig {\n dev?: AuthKitEnvironmentConfig;\n preview?: AuthKitEnvironmentConfig;\n prod?: AuthKitEnvironmentConfig;\n}\n/**\n * convex.json file parsing notes\n *\n * - Unknown fields at the top level and in node and codegen are preserved\n * so that older CLI versions can deploy new projects (this functionality\n * will be removed in the future).\n * - convex.json does not allow comments, but this could change in the future.\n * Previously it contained automatically set values like productionUrl\n * but it's more like a config file now.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n // \u26A0\uFE0F When updating this, please also update the file used by IDEs for autocompletion and validation:\n // -> npm-packages/convex/schemas/convex.schema.json\n\n functions: string;\n node: {\n externalPackages: string[];\n // nodeVersion has no default value, its presence/absence is meaningful\n nodeVersion?: string | undefined;\n };\n generateCommonJSApi: boolean;\n\n codegen: {\n staticApi: boolean;\n staticDataModel: boolean;\n legacyComponentApi?: boolean;\n fileType?: \"ts\" | \"js/dts\";\n };\n\n bundler?: {\n includeSourcesContent?: boolean;\n };\n\n typescriptCompiler?: TypescriptCompiler;\n\n // WorkOS AuthKit integration configuration\n authKit?: AuthKitConfig | undefined;\n\n // Convex AI files user preferences.\n aiFiles?: {\n // When false, disables all AI files prompts and staleness messages.\n enabled?: boolean;\n // @deprecated use `enabled` instead.\n disableStalenessMessage?: boolean;\n // Configuration for agent skills installed by Convex.\n skills?: {\n // List of agents to install skills for (e.g. 'claude-code', 'codex', 'cursor').\n // Defaults to ['claude-code', 'codex'].\n agents?: string[];\n };\n };\n}\n\nexport interface Config {\n projectConfig: ProjectConfig;\n modules: Bundle[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n projectConfig: ProjectConfig;\n moduleHashes: BundleHash[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.legacyComponentApi !== true;\n}\n\n/**\n * Get the authKit configuration from convex.json.\n */\nexport async function getAuthKitConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n): Promise<AuthKitConfig | undefined> {\n // If there's an explicit authKit config, use it\n if (\"authKit\" in projectConfig) {\n return projectConfig.authKit;\n }\n\n // TODO remove this after a few versions\n // Migration help: is this one of the hardcoded templates that has special\n // behavior without a convex.json? Encourage them to upgrade the template.\n const homepage = await currentPackageHomepage(ctx);\n const isOldWorkOSTemplate = !!(\n homepage &&\n [\n \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n ].includes(homepage)\n );\n\n if (isOldWorkOSTemplate) {\n logWarning(\n \"The template this project is based on has been updated to work with this version of Convex.\",\n );\n logWarning(\n \"Please copy the convex.json from the latest template version or add an 'authKit' section.\",\n );\n logMessage(\"Learn more at https://docs.convex.dev/auth/authkit\");\n }\n}\n\nexport async function getAuthKitEnvironmentConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<AuthKitEnvironmentConfig | undefined> {\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n return authKitConfig?.[deploymentType];\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// WorkOS AuthKit configuration schemas\nconst AuthKitConfigureSchema = z.union([\n z.literal(false),\n z.object({\n redirectUris: z.array(z.string()).optional(),\n appHomepageUrl: z.string().optional(),\n corsOrigins: z.array(z.string()).optional(),\n }),\n]);\n\nconst AuthKitLocalEnvVarsSchema = z.union([\n z.literal(false),\n z.record(z.string()),\n]);\n\nconst AuthKitEnvironmentConfigSchema = z.object({\n environmentType: z.enum([\"development\", \"staging\", \"production\"]).optional(),\n configure: AuthKitConfigureSchema.optional(),\n localEnvVars: AuthKitLocalEnvVarsSchema.optional(),\n});\n\nconst AuthKitConfigSchema = z\n .object({\n dev: AuthKitEnvironmentConfigSchema.optional(),\n preview: AuthKitEnvironmentConfigSchema.optional(),\n prod: AuthKitEnvironmentConfigSchema.optional(),\n })\n .refine(\n (data) => {\n // Validation: environmentType only allowed in prod\n const devEnvType = data.dev?.environmentType;\n const previewEnvType = data.preview?.environmentType;\n if (devEnvType || previewEnvType) {\n return false;\n }\n return true;\n },\n {\n message: \"authKit.environmentType is only allowed in the prod section\",\n path: [\"environmentType\"],\n },\n )\n .refine(\n (data) => {\n // Validation: localEnvVars only allowed for dev\n // Check preview doesn't have localEnvVars\n if (\n data.preview?.localEnvVars !== undefined &&\n data.preview?.localEnvVars !== false\n ) {\n return false;\n }\n // Check prod doesn't have localEnvVars\n if (\n data.prod?.localEnvVars !== undefined &&\n data.prod?.localEnvVars !== false\n ) {\n return false;\n }\n return true;\n },\n {\n message:\n \"authKit.localEnvVars is only supported for dev deployments. Preview and prod deployments must configure environment variables directly in the deployment platform.\",\n path: [\"localEnvVars\"],\n },\n );\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n externalPackages: z\n .array(z.string())\n .default([])\n .describe(\n \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n ),\n nodeVersion: z\n .string()\n .optional()\n .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n staticApi: z\n .boolean()\n .default(false)\n .describe(\n \"Use Convex function argument validators and return value validators to generate a typed API object\",\n ),\n staticDataModel: z.boolean().default(false),\n // These optional fields have no defaults - their presence/absence is meaningful\n legacyComponentApi: z.boolean().optional(),\n fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n includeSourcesContent: z\n .boolean()\n .default(false)\n .describe(\n \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n ),\n});\n\nconst AiFilesSchema = z.object({\n enabled: z.boolean().optional(),\n disableStalenessMessage: z.boolean().optional(),\n skills: z\n .object({\n agents: z.array(z.string()).optional(),\n })\n .optional(),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n schema.refine((val) => val !== null && !Array.isArray(val), {\n message: \"Expected `convex.json` to contain an object\",\n });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n const codegenSchema = strict\n ? CodegenSchema.strict()\n : CodegenSchema.passthrough();\n const bundlerSchema = strict\n ? BundlerSchema.strict()\n : BundlerSchema.passthrough();\n\n const baseObject = z.object({\n functions: z\n .string()\n .default(DEFAULT_FUNCTIONS_PATH)\n .describe(\"Relative file path to the convex directory\"),\n node: nodeSchema.default({ externalPackages: [] }),\n codegen: codegenSchema.default({\n staticApi: false,\n staticDataModel: false,\n }),\n bundler: bundlerSchema.default({ includeSourcesContent: false }).optional(),\n generateCommonJSApi: z.boolean().default(false),\n typescriptCompiler: z\n .enum([\"tsc\", \"tsgo\"])\n .optional()\n .describe(\n \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n ),\n\n // Optional $schema field for JSON schema validation in editors\n $schema: z.string().optional(),\n // WorkOS AuthKit integration configuration\n authKit: AuthKitConfigSchema.optional(),\n aiFiles: AiFilesSchema.optional(),\n\n // Deprecated fields that have been deprecated for years, only here so we\n // know it's safe to delete them.\n project: z.string().optional(),\n team: z.string().optional(),\n prodUrl: z.string().optional(),\n });\n\n // Apply strict or passthrough BEFORE refine\n const withStrictness = strict\n ? baseObject.strict()\n : baseObject.passthrough();\n\n // Now apply the refinement\n return withStrictness.refine(\n (data) => {\n // Validate that generateCommonJSApi is not true when using TypeScript codegen\n if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n return false;\n }\n return true;\n },\n {\n message:\n 'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n \"CommonJS modules require JavaScript generation. \" +\n 'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n path: [\"generateCommonJSApi\"],\n },\n );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n ctx: Context,\n obj: any,\n): Promise<ProjectConfig> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: \"Expected `convex.json` to contain an object\",\n });\n }\n\n try {\n // Try strict parse first to detect unknown keys\n return ProjectConfigSchemaStrict.parse(obj);\n } catch (error) {\n if (error instanceof z.ZodError) {\n // Check if all issues are unrecognized_keys issues\n const unknownKeyIssues = error.issues.filter(\n (issue) => issue.code === \"unrecognized_keys\",\n );\n\n if (\n unknownKeyIssues.length > 0 &&\n unknownKeyIssues.length === error.issues.length\n ) {\n // All errors are just unknown keys - warn about them\n for (const issue of unknownKeyIssues) {\n if (issue.code === \"unrecognized_keys\") {\n const pathPrefix =\n issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n const unknownKeys = issue.keys as string[];\n const newUnknownKeys = unknownKeys.filter(\n (key) => !warnedUnknownKeys.has(pathPrefix + key),\n );\n\n if (newUnknownKeys.length > 0) {\n const fullPath =\n issue.path.length > 0\n ? `\\`${issue.path.join(\".\")}\\``\n : \"`convex.json`\";\n logMessage(\n chalkStderr.yellow(\n `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n ),\n );\n logMessage(\n chalkStderr.gray(\n \" These properties will be preserved but are not recognized by this version of Convex.\",\n ),\n );\n\n // Track that we've warned about these keys\n newUnknownKeys.forEach((key) =>\n warnedUnknownKeys.add(pathPrefix + key),\n );\n }\n }\n }\n // Re-parse with passthrough schema to preserve unknown keys\n return ProjectConfigSchema.parse(obj);\n }\n\n // Handle validation errors we won't ignore\n if (error instanceof z.ZodError) {\n const issue = error.issues[0];\n const pathStr = issue.path.join(\".\");\n const message = pathStr\n ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n : `\\`convex.json\\`: ${issue.message}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: (error as any).toString(),\n });\n }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n functions: string;\n nodeVersion?: string;\n} {\n function throwParseError(message: string) {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw new ParseError(message);\n }\n if (typeof obj !== \"object\") {\n throwParseError(\"Expected an object\");\n }\n const { functions, nodeVersion } = obj;\n if (typeof functions !== \"string\") {\n throwParseError(\"Expected functions to be a string\");\n }\n\n if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n throwParseError(\"Expected nodeVersion to be a string\");\n }\n\n return {\n functions,\n ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n };\n}\n\nexport function configName(): string {\n return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n const configFn = configName();\n // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n // Leave an error message around to help people out. We can remove this\n // error message after a couple months.\n const preferredLocation = configFn;\n const wrongLocation = path.join(\"src\", configFn);\n\n // Allow either location, but not both.\n const preferredLocationExists = ctx.fs.exists(preferredLocation);\n const wrongLocationExists = ctx.fs.exists(wrongLocation);\n if (preferredLocationExists && wrongLocationExists) {\n const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n if (!preferredLocationExists && wrongLocationExists) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n });\n }\n\n return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n projectConfig: ProjectConfig;\n configPath: string;\n}> {\n if (!ctx.fs.exists(\"convex.json\")) {\n // create-react-app bans imports from outside of src, so we can just\n // put the functions directory inside of src/ to work around this issue.\n const packages = await loadPackageJson(ctx);\n const isCreateReactApp = \"react-scripts\" in packages;\n return {\n projectConfig: {\n functions: isCreateReactApp\n ? `src/${DEFAULT_FUNCTIONS_PATH}`\n : DEFAULT_FUNCTIONS_PATH,\n node: {\n externalPackages: [],\n },\n generateCommonJSApi: false,\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n aiFiles: {},\n },\n configPath: configName(),\n };\n }\n let projectConfig;\n const configPath = await configFilepath(ctx);\n try {\n projectConfig = await parseProjectConfig(\n ctx,\n JSON.parse(ctx.fs.readUtf8File(configPath)),\n );\n } catch (err) {\n if (err instanceof ParseError || err instanceof SyntaxError) {\n logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n logMessage(chalkStderr.gray(err.toString()));\n } else {\n logFailure(\n `Error: Unable to read project config file \"${configPath}\"\\n` +\n \" Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n );\n if (err instanceof Error) {\n logError(chalkStderr.red(err.message));\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n // TODO -- move the logging above in here\n printedMessage: null,\n });\n }\n return {\n projectConfig,\n configPath,\n };\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n verbose: boolean,\n): Promise<{\n config: Config;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const baseDir = functionsDir(configPath, projectConfig);\n // We bundle Node.js and Convex JS runtime functions entry points separately\n // since they execute on different platforms.\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n // es-build prints errors to console which would clobber our spinner.\n if (verbose) {\n showSpinner(\"Bundling modules for Convex's runtime...\");\n }\n const convexResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.isolate,\n generateSourceMaps: true,\n platform: \"browser\",\n });\n if (verbose) {\n logMessage(\n \"Convex's runtime modules: \",\n convexResult.modules.map((m) => m.path),\n );\n }\n\n // Bundle node modules.\n if (verbose && entryPoints.node.length !== 0) {\n showSpinner(\"Bundling modules for Node.js runtime...\");\n }\n const nodeResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.node,\n generateSourceMaps: true,\n platform: \"node\",\n chunksFolder: path.join(\"_deps\", \"node\"),\n externalPackagesAllowList: projectConfig.node.externalPackages,\n });\n if (verbose && entryPoints.node.length !== 0) {\n logMessage(\n \"Node.js runtime modules: \",\n nodeResult.modules.map((m) => m.path),\n );\n if (projectConfig.node.externalPackages.length > 0) {\n logMessage(\n \"Node.js runtime external dependencies (to be installed on the server): \",\n [...nodeResult.externalDependencies.entries()].map(\n (a) => `${a[0]}: ${a[1]}`,\n ),\n );\n }\n }\n const modules = convexResult.modules;\n modules.push(...nodeResult.modules);\n modules.push(...(await bundleAuthConfig(ctx, baseDir)));\n\n const nodeDependencies: NodeDependency[] = [];\n for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n nodeDependencies.push({ name: moduleName, version: moduleVersion });\n }\n\n const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n convexResult.bundledModuleNames.keys(),\n ).map((moduleName) => {\n return {\n name: moduleName,\n platform: \"convex\",\n };\n });\n bundledModuleInfos.push(\n ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n (moduleName): BundledModuleInfo => {\n return {\n name: moduleName,\n platform: \"node\",\n };\n },\n ),\n );\n\n return {\n config: {\n projectConfig: projectConfig,\n modules: modules,\n nodeDependencies: nodeDependencies,\n // We're just using the version this CLI is running with for now.\n // This could be different than the version of `convex` the app runs with\n // if the CLI is installed globally.\n udfServerVersion: version,\n nodeVersion: projectConfig.node.nodeVersion,\n },\n bundledModuleInfos,\n };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n): Promise<void> {\n const baseDir = functionsDir(configPath, projectConfig);\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n if (entryPoints.isolate.length === 0) {\n logFinishedStep(\"No non-'use node' modules found.\");\n }\n await debugIsolateBundlesSerially(ctx, {\n entryPoints: entryPoints.isolate,\n extraConditions: [],\n dir: baseDir,\n });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n ctx: Context,\n verbose: boolean,\n): Promise<{\n config: Config;\n configPath: string;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n const { config, bundledModuleInfos } = await configFromProjectConfig(\n ctx,\n projectConfig,\n configPath,\n verbose,\n );\n return { config, configPath, bundledModuleInfos };\n}\n\n/**\n * Ensure the functions directory exists.\n *\n * Note: convex.json is treated as user-owned and is not modified by the CLI.\n * Use writeAiFilesConfig() to explicitly patch the aiFiles section.\n */\nexport async function ensureConvexFunctionsDir(\n ctx: Context,\n projectConfig: ProjectConfig,\n) {\n const configPath = await configFilepath(ctx);\n ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n allowExisting: true,\n });\n}\n\nexport function removedExistingConfig(\n ctx: Context,\n configPath: string,\n options: { allowExistingConfig?: boolean },\n) {\n if (!options.allowExistingConfig) {\n return false;\n }\n recursivelyDelete(ctx, configPath);\n logFinishedStep(`Removed existing ${configPath}`);\n return true;\n}\n\n/** Pull configuration for the root app component from the given remote origin. */\nexport async function pullConfig(\n ctx: Context,\n project: string | undefined,\n team: string | undefined,\n origin: string,\n adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: origin,\n adminKey,\n });\n\n changeSpinner(\"Downloading current deployment state...\");\n try {\n const res = await fetch(\"/api/get_config_hashes\", {\n method: \"POST\",\n body: JSON.stringify({ version, adminKey }),\n });\n deprecationCheckWarning(ctx, res);\n const data = await res.json();\n const backendConfig = parseBackendConfig(data.config);\n const projectConfig = {\n ...backendConfig,\n node: {\n // This field is not stored in the backend, which is ok since it is also\n // not used to diff configs.\n externalPackages: [],\n nodeVersion: data.nodeVersion,\n },\n // This field is not stored in the backend, it only affects the client.\n generateCommonJSApi: false,\n // This field is also not stored in the backend, it only affects the client.\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n project,\n team,\n prodUrl: origin,\n };\n return {\n projectConfig,\n moduleHashes: data.moduleHashes,\n // TODO(presley): Add this to diffConfig().\n nodeDependencies: data.nodeDependencies,\n udfServerVersion: data.udfServerVersion,\n };\n } catch (err: unknown) {\n logFailure(`Error: Unable to pull deployment config from ${origin}`);\n return await logAndHandleFetchError(ctx, err);\n }\n}\n\ninterface BundledModuleInfo {\n name: string;\n platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n /** This path is relative to the app (root component) directory. */\n definitionPath: ComponentDefinitionPath;\n\n /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n dependencies: ComponentDefinitionPath[];\n\n // All other paths are relative to the directory of the definitionPath above.\n definition: Bundle;\n schema: Bundle;\n functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n ComponentDefinitionSpec,\n \"definitionPath\"\n> & {\n // Only app (root) component specs contain an auth bundle.\n auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n ComponentDefinitionSpec,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n AppDefinitionSpec,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n oldConfig: ConfigWithModuleHashes,\n newConfig: Config,\n): { diffString: string } {\n let diff = \"\";\n\n let versionMessage = \"\";\n const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n }\n if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n }\n if (versionMessage) {\n diff += \"Change the server's function version:\\n\";\n diff += versionMessage;\n }\n\n if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n diff += \"Change the server's version for Node.js actions:\\n\";\n if (oldConfig.projectConfig.node.nodeVersion) {\n diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n }\n if (newConfig.nodeVersion) {\n diff += `[+] ${newConfig.nodeVersion}\\n`;\n }\n }\n\n return { diffString: diff };\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n ctx: Context,\n error: unknown,\n defaultMessage: string,\n deploymentName: string | null,\n deployment:\n | {\n deploymentUrl: string;\n adminKey: string;\n deploymentNotice: string;\n }\n | undefined,\n _deploymentType: DeploymentType | undefined,\n): Promise<never> {\n const data: ErrorData | undefined =\n error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n const errorMessage = data.message || \"(no error message given)\";\n const [, variableName] =\n errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n // DEPRECATED: This error path provisioning is being phased out in favor of\n // pre-flight provisioning that happens before the client bundle build.\n // We keep minimal logic here for backwards compatibility with older templates\n // that may still rely on this path.\n if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n // For backwards compatibility with templates that haven't been updated,\n // we'll still show a helpful error message directing users to configure WorkOS.\n // But we no longer do automatic provisioning here since it happens too late\n // (after the client bundle has already been built with missing env vars).\n logWarning(\n \"WORKOS_CLIENT_ID is not set; you can set it manually on the deployment or for hosted Convex deployments, use auto-provisioning.\",\n );\n logMessage(\n \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n );\n logMessage(\"\");\n }\n\n const envVarMessage =\n `Environment variable ${chalkStderr.bold(\n variableName,\n )} is used in auth config file but ` + `its value was not set.`;\n let setEnvVarInstructions =\n \"Go set it in the dashboard or using `npx convex env set`\";\n\n // If `npx convex dev` is running using --url there might not be a configured deployment\n if (deploymentName !== null) {\n const variableQuery =\n variableName !== undefined ? `?var=${variableName}` : \"\";\n const dashboardUrl = deploymentDashboardUrlPage(\n deploymentName,\n `/settings/environment-variables${variableQuery}`,\n );\n setEnvVarInstructions = `Go to:\\n\\n ${chalkStderr.bold(\n dashboardUrl,\n )}\\n\\n to set it up. `;\n }\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n errForSentry: error,\n printedMessage: envVarMessage + \"\\n\" + setEnvVarInstructions,\n });\n }\n\n if (data?.code === \"RaceDetected\") {\n // Environment variables or schema changed during push. This is a transient\n // error that should be retried immediately with exponential backoff.\n const message =\n data.message || \"Schema or environment variables changed during push\";\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: chalkStderr.yellow(message),\n });\n }\n\n if (data?.code === \"InternalServerError\") {\n if (deploymentName?.startsWith(\"local-\")) {\n printLocalDeploymentOnError();\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new LocalDeploymentError(\n \"InternalServerError while pushing to local deployment\",\n ),\n printedMessage: defaultMessage,\n });\n }\n }\n\n logFailure(defaultMessage);\n return await logAndHandleFetchError(ctx, error);\n}\n\nexport type AiFilesProjectConfig = NonNullable<ProjectConfig[\"aiFiles\"]>;\n\nfunction tryParseJson(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return {};\n }\n}\n\nfunction toRecord(val: unknown): Record<string, unknown> {\n if (val !== null && typeof val === \"object\" && !Array.isArray(val))\n return val as Record<string, unknown>;\n return {};\n}\n\n/**\n * Write the `aiFiles` section of `convex.json`, preserving all other keys.\n * Writes the given object as-is with no merging or default logic.\n * If `aiFiles` is undefined, the key is removed from the file.\n */\nexport async function writeAiFilesConfig({\n projectDir,\n aiFiles,\n}: {\n projectDir: string;\n aiFiles: AiFilesProjectConfig | undefined;\n}): Promise<void> {\n const filePath = path.join(projectDir, \"convex.json\");\n const raw = await nodeFs.readFile(filePath, \"utf8\").catch(() => null);\n const base = toRecord(raw !== null ? tryParseJson(raw) : {});\n\n const { $schema, aiFiles: _existing, ...rest } = base;\n\n const hasContent = aiFiles !== undefined && Object.keys(aiFiles).length > 0;\n\n const next: Record<string, unknown> = {\n $schema: $schema ?? \"node_modules/convex/schemas/convex.schema.json\",\n ...rest,\n ...(hasContent ? { aiFiles } : {}),\n };\n\n await nodeFs.writeFile(\n filePath,\n JSON.stringify(next, null, 2) + \"\\n\",\n \"utf8\",\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
showSpinner
|
|
9
9
|
} from "../../bundler/log.js";
|
|
10
10
|
import { spawnSync } from "child_process";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
deploymentFetch,
|
|
13
|
+
logAndHandleFetchError,
|
|
14
|
+
typedDeploymentClient
|
|
15
|
+
} from "./utils/utils.js";
|
|
12
16
|
import {
|
|
13
17
|
evaluatePushResponse,
|
|
14
18
|
schemaStatus,
|
|
@@ -20,7 +24,6 @@ import { promisify } from "node:util";
|
|
|
20
24
|
import zlib from "node:zlib";
|
|
21
25
|
import { runPush } from "./components.js";
|
|
22
26
|
import { suggestedEnvVarNames } from "./envvars.js";
|
|
23
|
-
import { runSystemQuery } from "./run.js";
|
|
24
27
|
import {
|
|
25
28
|
handlePushConfigError,
|
|
26
29
|
readProjectConfig,
|
|
@@ -29,7 +32,6 @@ import {
|
|
|
29
32
|
import { deploymentDashboardUrlPage } from "./dashboard.js";
|
|
30
33
|
import { addProgressLinkIfSlow } from "./indexes.js";
|
|
31
34
|
import { ensureAuthKitProvisionedBeforeBuild } from "./workos/workos.js";
|
|
32
|
-
import { fetchDeploymentCanonicalSiteUrl } from "./env.js";
|
|
33
35
|
const brotli = promisify(zlib.brotliCompress);
|
|
34
36
|
async function brotliCompress(ctx, data) {
|
|
35
37
|
const start = performance.now();
|
|
@@ -333,14 +335,10 @@ export async function runCommand(ctx, options) {
|
|
|
333
335
|
deploymentUrl: options.url,
|
|
334
336
|
adminKey: options.adminKey
|
|
335
337
|
};
|
|
336
|
-
const
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
);
|
|
340
|
-
const canonicalSiteUrl = await fetchDeploymentCanonicalSiteUrl(
|
|
341
|
-
ctx,
|
|
342
|
-
deployment
|
|
343
|
-
);
|
|
338
|
+
const {
|
|
339
|
+
convexCloudUrl: canonicalCloudUrl,
|
|
340
|
+
convexSiteUrl: canonicalSiteUrl
|
|
341
|
+
} = await fetchDeploymentCanonicalUrls(ctx, deployment);
|
|
344
342
|
const env = { ...process.env };
|
|
345
343
|
env[urlVar] = canonicalCloudUrl;
|
|
346
344
|
env[siteVar] = canonicalSiteUrl;
|
|
@@ -361,20 +359,9 @@ export async function runCommand(ctx, options) {
|
|
|
361
359
|
`${options.dryRun ? "Would have run" : "Ran"} "${options.cmd}" with environment variables "${urlVar}" and "${siteVar}" set`
|
|
362
360
|
);
|
|
363
361
|
}
|
|
364
|
-
export async function
|
|
365
|
-
const
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
componentPath: void 0,
|
|
369
|
-
args: {}
|
|
370
|
-
});
|
|
371
|
-
if (typeof result !== "string") {
|
|
372
|
-
return await ctx.crash({
|
|
373
|
-
exitCode: 1,
|
|
374
|
-
errorType: "invalid filesystem or env vars",
|
|
375
|
-
printedMessage: "Invalid process.env.CONVEX_CLOUD_URL"
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
return result;
|
|
362
|
+
export async function fetchDeploymentCanonicalUrls(ctx, options) {
|
|
363
|
+
const client = typedDeploymentClient(ctx, options);
|
|
364
|
+
const result = await client.GET("/get_canonical_urls");
|
|
365
|
+
return result.data;
|
|
379
366
|
}
|
|
380
367
|
//# sourceMappingURL=deploy2.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/deploy2.ts"],
|
|
4
|
-
"sourcesContent": ["import { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logVerbose,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport { spawnSync } from \"child_process\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\nimport {\n EvaluatePushResponse,\n evaluatePushResponse,\n schemaStatus,\n SchemaStatus,\n StartPushRequest,\n startPushResponse,\n StartPushResponse,\n} from \"./deployApi/startPush.js\";\nimport {\n AppDefinitionConfig,\n ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { chalkStderr } from \"chalk\";\nimport { finishPushDiff, FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { promisify } from \"node:util\";\nimport zlib from \"node:zlib\";\nimport { PushOptions } from \"./components.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { runPush } from \"./components.js\";\nimport { suggestedEnvVarNames } from \"./envvars.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport {\n handlePushConfigError,\n readProjectConfig,\n getAuthKitConfig,\n} from \"./config.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { addProgressLinkIfSlow } from \"./indexes.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./workos/workos.js\";\nimport { fetchDeploymentCanonicalSiteUrl } from \"./env.js\";\n\nconst brotli = promisify(zlib.brotliCompress);\n\nasync function brotliCompress(ctx: Context, data: string): Promise<Buffer> {\n const start = performance.now();\n const result = await brotli(data, {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n },\n });\n const end = performance.now();\n const duration = end - start;\n logVerbose(\n `Compressed ${(data.length / 1024).toFixed(2)}KiB to ${(result.length / 1024).toFixed(2)}KiB (${((result.length / data.length) * 100).toFixed(2)}%) in ${duration.toFixed(2)}ms`,\n );\n return result;\n}\n\n/** Push configuration2 to the given remote origin. */\nexport async function startPush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<StartPushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/start_push\",\n );\n return startPushResponse.parse(response);\n}\n\nexport async function evaluatePush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<EvaluatePushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/evaluate_push\",\n );\n return evaluatePushResponse.parse(response);\n}\n\nasync function pushCode(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n endpoint: \"/api/deploy2/start_push\" | \"/api/deploy2/evaluate_push\",\n): Promise<unknown> {\n // Log a summary of the push request instead of the full object\n const unchangedModuleCount =\n request.appDefinition?.unchangedModuleHashes?.length ?? 0;\n const changedModuleCount = request.appDefinition?.changedModules?.length ?? 0;\n const requestSummary = {\n hasAppDefinition: request.appDefinition !== undefined,\n appFunctionCount: unchangedModuleCount + changedModuleCount,\n hasAppSchema: request.appDefinition?.schema !== null,\n componentCount: request.componentDefinitions?.length ?? 0,\n hasDependencies: request.nodeDependencies?.length > 0,\n dryRun: request.dryRun,\n };\n logVerbose(`Push request summary: ${JSON.stringify(requestSummary)}`);\n const onError = (err: any) => {\n if (err.toString() === \"TypeError: fetch failed\") {\n changeSpinner(`Fetch failed, is ${options.url} correct? Retrying...`);\n }\n };\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: request.adminKey,\n onError,\n });\n try {\n const response = await fetch(endpoint, {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return await response.json();\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to start push to \" + options.url,\n options.deploymentName,\n {\n adminKey: request.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n options.deploymentType,\n );\n }\n}\n\n// Long poll every 10s for progress on schema validation.\nconst SCHEMA_TIMEOUT_MS = 10_000;\n\nexport async function waitForSchema(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n deploymentName: string | null;\n },\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n\n const start = Date.now();\n changeSpinner(\"Pushing code to your Convex deployment...\");\n\n while (true) {\n let currentStatus: SchemaStatus;\n try {\n const response = await fetch(\"/api/deploy2/wait_for_schema\", {\n body: JSON.stringify({\n adminKey: options.adminKey,\n schemaChange: startPush.schemaChange,\n timeoutMs: SCHEMA_TIMEOUT_MS,\n dryRun: options.dryRun,\n }),\n method: \"POST\",\n headers: {\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n currentStatus = schemaStatus.parse(await response.json());\n } catch (error: unknown) {\n logFailure(\"Error: Unable to wait for schema from \" + options.url);\n return await logAndHandleFetchError(ctx, error);\n }\n switch (currentStatus.type) {\n case \"inProgress\": {\n let schemaDone = true;\n let indexesComplete = 0;\n let indexesTotal = 0;\n for (const componentStatus of Object.values(currentStatus.components)) {\n if (!componentStatus.schemaValidationComplete) {\n schemaDone = false;\n }\n indexesComplete += componentStatus.indexesComplete;\n indexesTotal += componentStatus.indexesTotal;\n }\n const indexesDone = indexesComplete === indexesTotal;\n let msg: string;\n if (!indexesDone && !schemaDone) {\n msg = addProgressLinkIfSlow(\n `Backfilling indexes (${indexesComplete}/${indexesTotal} ready) and checking that documents match your schema...`,\n options.deploymentName,\n start,\n );\n } else if (!indexesDone) {\n msg = `Backfilling indexes (${indexesComplete}/${indexesTotal} ready)...`;\n // Set a more specific message if the backfill is taking a long time\n if (Date.now() - start > 10_000) {\n const rootDiff = startPush.schemaChange.indexDiffs?.[\"\"];\n const indexName = (\n rootDiff?.added_indexes[0] || rootDiff?.enabled_indexes?.[0]\n )?.name;\n if (indexName) {\n const table = indexName.split(\".\")[0];\n const dashboardUrl = deploymentDashboardUrlPage(\n options.deploymentName,\n `/data?table=${table}&showIndexes=true`,\n );\n msg = `Backfilling index ${indexName} (${indexesComplete}/${indexesTotal} ready), see progress here: ${dashboardUrl}`;\n }\n }\n } else {\n msg = addProgressLinkIfSlow(\n \"Checking that documents match your schema...\",\n options.deploymentName,\n start,\n );\n }\n changeSpinner(msg);\n break;\n }\n case \"failed\": {\n // Schema validation failed. This could be either because the data\n // is bad or the schema is wrong. Classify this as a filesystem error\n // because adjusting `schema.ts` is the most normal next step.\n let msg = \"Schema validation failed\";\n if (currentStatus.componentPath) {\n msg += ` in component \"${currentStatus.componentPath}\"`;\n }\n msg += \".\";\n logFailure(msg);\n logError(chalkStderr.red(`${currentStatus.error}`));\n return await ctx.crash({\n exitCode: 1,\n errorType: {\n \"invalid filesystem or db data\": currentStatus.tableName\n ? {\n tableName: currentStatus.tableName,\n componentPath: currentStatus.componentPath,\n }\n : null,\n },\n printedMessage: null, // TODO - move logging into here\n });\n }\n case \"raceDetected\": {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Schema was overwritten by another push.`,\n });\n }\n case \"complete\": {\n changeSpinner(\"Schema validation complete.\");\n return;\n }\n }\n }\n}\n\nexport async function finishPush(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n verbose?: boolean;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<FinishPushDiff> {\n changeSpinner(\"Finalizing push...\");\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n const request = {\n adminKey: options.adminKey,\n startPush,\n dryRun: options.dryRun,\n };\n try {\n const response = await fetch(\"/api/deploy2/finish_push\", {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return finishPushDiff.parse(await response.json());\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to finish push to \" + options.url,\n options.deploymentName,\n {\n adminKey: options.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n options.deploymentType,\n );\n }\n}\n\nexport type ComponentDefinitionConfigWithoutImpls = Omit<\n ComponentDefinitionConfig,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionConfigWithoutImpls = Omit<\n AppDefinitionConfig,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\nexport async function reportPushCompleted(\n ctx: Context,\n adminKey: string,\n url: string,\n reporter: Reporter,\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: url,\n adminKey,\n });\n try {\n const response = await fetch(\"/api/deploy2/report_push_completed\", {\n body: JSON.stringify({\n adminKey,\n spans: reporter.spans,\n }),\n method: \"POST\",\n });\n await response.json();\n } catch (error: unknown) {\n logFailure(\n \"Error: Unable to report push completed to \" + url + \": \" + error,\n );\n }\n}\n\nexport async function deployToDeployment(\n ctx: Context,\n credentials: {\n url: string;\n adminKey: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n options: {\n verbose?: boolean | undefined;\n dryRun?: boolean | undefined;\n yes?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n pushAllModules?: boolean;\n\n debugBundlePath?: string | undefined;\n debug?: boolean | undefined;\n writePushRequest?: string | undefined;\n liveComponentSources?: boolean | undefined;\n skipWorkosCheck?: boolean | undefined;\n allowDeletingLargeIndexes: boolean;\n },\n) {\n const { url, adminKey } = credentials;\n\n // Pre-flight check: Ensure AuthKit is provisioned before building client bundle\n if (!options.skipWorkosCheck) {\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n if (authKitConfig && credentials.deploymentName) {\n // Only provision for cloud deployments (dev/preview/prod)\n // Skip for local and anonymous deployments\n const deploymentType = credentials.deploymentType;\n if (\n deploymentType === \"dev\" ||\n deploymentType === \"preview\" ||\n deploymentType === \"prod\"\n ) {\n await ensureAuthKitProvisionedBeforeBuild(\n ctx,\n credentials.deploymentName,\n { deploymentUrl: url, adminKey },\n deploymentType,\n );\n }\n }\n }\n\n await runCommand(ctx, { ...options, url, adminKey });\n\n const pushOptions: PushOptions = {\n deploymentName: credentials.deploymentName,\n adminKey,\n verbose: !!options.verbose,\n dryRun: !!options.dryRun,\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n debug: !!options.debug,\n debugBundlePath: options.debugBundlePath,\n debugNodeApis: false,\n codegen: options.codegen === \"enable\",\n url,\n writePushRequest: options.writePushRequest,\n liveComponentSources: !!options.liveComponentSources,\n pushAllModules: !!options.pushAllModules,\n largeIndexDeletionCheck: options.allowDeletingLargeIndexes\n ? \"has confirmation\"\n : \"ask for confirmation\",\n };\n showSpinner(`Deploying to ${url}...${options.dryRun ? \" [dry run]\" : \"\"}`);\n await runPush(ctx, pushOptions);\n logFinishedStep(\n `${\n options.dryRun ? \"Would have deployed\" : \"Deployed\"\n } Convex functions to ${url}`,\n );\n}\n\nexport async function runCommand(\n ctx: Context,\n options: {\n cmdUrlEnvVarName?: string | undefined;\n cmd?: string | undefined;\n dryRun?: boolean | undefined;\n url: string;\n adminKey: string;\n },\n) {\n if (options.cmd === undefined) {\n return;\n }\n\n const suggestedEnvVars = await suggestedEnvVarNames(ctx);\n const urlVar = options.cmdUrlEnvVarName ?? suggestedEnvVars.convexUrlEnvVar;\n const siteVar = suggestedEnvVars.convexSiteEnvVar;\n showSpinner(\n `Running '${options.cmd}' with environment variables \"${urlVar}\" and \"${siteVar}\" set...${\n options.dryRun ? \" [dry run]\" : \"\"\n }`,\n );\n if (!options.dryRun) {\n const deployment = {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n };\n const canonicalCloudUrl = await fetchDeploymentCanonicalCloudUrl(\n ctx,\n deployment,\n );\n const canonicalSiteUrl = await fetchDeploymentCanonicalSiteUrl(\n ctx,\n deployment,\n );\n\n const env = { ...process.env };\n env[urlVar] = canonicalCloudUrl;\n env[siteVar] = canonicalSiteUrl;\n const result = spawnSync(options.cmd, {\n env,\n stdio: \"inherit\",\n shell: true,\n });\n if (result.status !== 0) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `'${options.cmd}' failed`,\n });\n }\n }\n logFinishedStep(\n `${options.dryRun ? \"Would have run\" : \"Ran\"} \"${\n options.cmd\n }\" with environment variables \"${urlVar}\" and \"${siteVar}\" set`,\n );\n}\n\nexport async function fetchDeploymentCanonicalCloudUrl(\n ctx: Context,\n options: { deploymentUrl: string; adminKey: string },\n): Promise<string> {\n const result = await runSystemQuery(ctx, {\n ...options,\n functionName: \"_system/cli/convexUrl:cloudUrl\",\n componentPath: undefined,\n args: {},\n });\n if (typeof result !== \"string\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n printedMessage: \"Invalid process.env.CONVEX_CLOUD_URL\",\n });\n }\n return result;\n}\n"],
|
|
5
|
-
"mappings": ";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B,
|
|
4
|
+
"sourcesContent": ["import { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logVerbose,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport { spawnSync } from \"child_process\";\nimport {\n deploymentFetch,\n logAndHandleFetchError,\n typedDeploymentClient,\n} from \"./utils/utils.js\";\nimport {\n EvaluatePushResponse,\n evaluatePushResponse,\n schemaStatus,\n SchemaStatus,\n StartPushRequest,\n startPushResponse,\n StartPushResponse,\n} from \"./deployApi/startPush.js\";\nimport {\n AppDefinitionConfig,\n ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { chalkStderr } from \"chalk\";\nimport { finishPushDiff, FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { promisify } from \"node:util\";\nimport zlib from \"node:zlib\";\nimport { PushOptions } from \"./components.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { runPush } from \"./components.js\";\nimport { suggestedEnvVarNames } from \"./envvars.js\";\nimport {\n handlePushConfigError,\n readProjectConfig,\n getAuthKitConfig,\n} from \"./config.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { addProgressLinkIfSlow } from \"./indexes.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./workos/workos.js\";\n\nconst brotli = promisify(zlib.brotliCompress);\n\nasync function brotliCompress(ctx: Context, data: string): Promise<Buffer> {\n const start = performance.now();\n const result = await brotli(data, {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n },\n });\n const end = performance.now();\n const duration = end - start;\n logVerbose(\n `Compressed ${(data.length / 1024).toFixed(2)}KiB to ${(result.length / 1024).toFixed(2)}KiB (${((result.length / data.length) * 100).toFixed(2)}%) in ${duration.toFixed(2)}ms`,\n );\n return result;\n}\n\n/** Push configuration2 to the given remote origin. */\nexport async function startPush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<StartPushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/start_push\",\n );\n return startPushResponse.parse(response);\n}\n\nexport async function evaluatePush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<EvaluatePushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/evaluate_push\",\n );\n return evaluatePushResponse.parse(response);\n}\n\nasync function pushCode(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n endpoint: \"/api/deploy2/start_push\" | \"/api/deploy2/evaluate_push\",\n): Promise<unknown> {\n // Log a summary of the push request instead of the full object\n const unchangedModuleCount =\n request.appDefinition?.unchangedModuleHashes?.length ?? 0;\n const changedModuleCount = request.appDefinition?.changedModules?.length ?? 0;\n const requestSummary = {\n hasAppDefinition: request.appDefinition !== undefined,\n appFunctionCount: unchangedModuleCount + changedModuleCount,\n hasAppSchema: request.appDefinition?.schema !== null,\n componentCount: request.componentDefinitions?.length ?? 0,\n hasDependencies: request.nodeDependencies?.length > 0,\n dryRun: request.dryRun,\n };\n logVerbose(`Push request summary: ${JSON.stringify(requestSummary)}`);\n const onError = (err: any) => {\n if (err.toString() === \"TypeError: fetch failed\") {\n changeSpinner(`Fetch failed, is ${options.url} correct? Retrying...`);\n }\n };\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: request.adminKey,\n onError,\n });\n try {\n const response = await fetch(endpoint, {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return await response.json();\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to start push to \" + options.url,\n options.deploymentName,\n {\n adminKey: request.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n options.deploymentType,\n );\n }\n}\n\n// Long poll every 10s for progress on schema validation.\nconst SCHEMA_TIMEOUT_MS = 10_000;\n\nexport async function waitForSchema(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n deploymentName: string | null;\n },\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n\n const start = Date.now();\n changeSpinner(\"Pushing code to your Convex deployment...\");\n\n while (true) {\n let currentStatus: SchemaStatus;\n try {\n const response = await fetch(\"/api/deploy2/wait_for_schema\", {\n body: JSON.stringify({\n adminKey: options.adminKey,\n schemaChange: startPush.schemaChange,\n timeoutMs: SCHEMA_TIMEOUT_MS,\n dryRun: options.dryRun,\n }),\n method: \"POST\",\n headers: {\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n currentStatus = schemaStatus.parse(await response.json());\n } catch (error: unknown) {\n logFailure(\"Error: Unable to wait for schema from \" + options.url);\n return await logAndHandleFetchError(ctx, error);\n }\n switch (currentStatus.type) {\n case \"inProgress\": {\n let schemaDone = true;\n let indexesComplete = 0;\n let indexesTotal = 0;\n for (const componentStatus of Object.values(currentStatus.components)) {\n if (!componentStatus.schemaValidationComplete) {\n schemaDone = false;\n }\n indexesComplete += componentStatus.indexesComplete;\n indexesTotal += componentStatus.indexesTotal;\n }\n const indexesDone = indexesComplete === indexesTotal;\n let msg: string;\n if (!indexesDone && !schemaDone) {\n msg = addProgressLinkIfSlow(\n `Backfilling indexes (${indexesComplete}/${indexesTotal} ready) and checking that documents match your schema...`,\n options.deploymentName,\n start,\n );\n } else if (!indexesDone) {\n msg = `Backfilling indexes (${indexesComplete}/${indexesTotal} ready)...`;\n // Set a more specific message if the backfill is taking a long time\n if (Date.now() - start > 10_000) {\n const rootDiff = startPush.schemaChange.indexDiffs?.[\"\"];\n const indexName = (\n rootDiff?.added_indexes[0] || rootDiff?.enabled_indexes?.[0]\n )?.name;\n if (indexName) {\n const table = indexName.split(\".\")[0];\n const dashboardUrl = deploymentDashboardUrlPage(\n options.deploymentName,\n `/data?table=${table}&showIndexes=true`,\n );\n msg = `Backfilling index ${indexName} (${indexesComplete}/${indexesTotal} ready), see progress here: ${dashboardUrl}`;\n }\n }\n } else {\n msg = addProgressLinkIfSlow(\n \"Checking that documents match your schema...\",\n options.deploymentName,\n start,\n );\n }\n changeSpinner(msg);\n break;\n }\n case \"failed\": {\n // Schema validation failed. This could be either because the data\n // is bad or the schema is wrong. Classify this as a filesystem error\n // because adjusting `schema.ts` is the most normal next step.\n let msg = \"Schema validation failed\";\n if (currentStatus.componentPath) {\n msg += ` in component \"${currentStatus.componentPath}\"`;\n }\n msg += \".\";\n logFailure(msg);\n logError(chalkStderr.red(`${currentStatus.error}`));\n return await ctx.crash({\n exitCode: 1,\n errorType: {\n \"invalid filesystem or db data\": currentStatus.tableName\n ? {\n tableName: currentStatus.tableName,\n componentPath: currentStatus.componentPath,\n }\n : null,\n },\n printedMessage: null, // TODO - move logging into here\n });\n }\n case \"raceDetected\": {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Schema was overwritten by another push.`,\n });\n }\n case \"complete\": {\n changeSpinner(\"Schema validation complete.\");\n return;\n }\n }\n }\n}\n\nexport async function finishPush(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n verbose?: boolean;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<FinishPushDiff> {\n changeSpinner(\"Finalizing push...\");\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n const request = {\n adminKey: options.adminKey,\n startPush,\n dryRun: options.dryRun,\n };\n try {\n const response = await fetch(\"/api/deploy2/finish_push\", {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return finishPushDiff.parse(await response.json());\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to finish push to \" + options.url,\n options.deploymentName,\n {\n adminKey: options.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n options.deploymentType,\n );\n }\n}\n\nexport type ComponentDefinitionConfigWithoutImpls = Omit<\n ComponentDefinitionConfig,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionConfigWithoutImpls = Omit<\n AppDefinitionConfig,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\nexport async function reportPushCompleted(\n ctx: Context,\n adminKey: string,\n url: string,\n reporter: Reporter,\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: url,\n adminKey,\n });\n try {\n const response = await fetch(\"/api/deploy2/report_push_completed\", {\n body: JSON.stringify({\n adminKey,\n spans: reporter.spans,\n }),\n method: \"POST\",\n });\n await response.json();\n } catch (error: unknown) {\n logFailure(\n \"Error: Unable to report push completed to \" + url + \": \" + error,\n );\n }\n}\n\nexport async function deployToDeployment(\n ctx: Context,\n credentials: {\n url: string;\n adminKey: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n options: {\n verbose?: boolean | undefined;\n dryRun?: boolean | undefined;\n yes?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n pushAllModules?: boolean;\n\n debugBundlePath?: string | undefined;\n debug?: boolean | undefined;\n writePushRequest?: string | undefined;\n liveComponentSources?: boolean | undefined;\n skipWorkosCheck?: boolean | undefined;\n allowDeletingLargeIndexes: boolean;\n },\n) {\n const { url, adminKey } = credentials;\n\n // Pre-flight check: Ensure AuthKit is provisioned before building client bundle\n if (!options.skipWorkosCheck) {\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n if (authKitConfig && credentials.deploymentName) {\n // Only provision for cloud deployments (dev/preview/prod)\n // Skip for local and anonymous deployments\n const deploymentType = credentials.deploymentType;\n if (\n deploymentType === \"dev\" ||\n deploymentType === \"preview\" ||\n deploymentType === \"prod\"\n ) {\n await ensureAuthKitProvisionedBeforeBuild(\n ctx,\n credentials.deploymentName,\n { deploymentUrl: url, adminKey },\n deploymentType,\n );\n }\n }\n }\n\n await runCommand(ctx, { ...options, url, adminKey });\n\n const pushOptions: PushOptions = {\n deploymentName: credentials.deploymentName,\n adminKey,\n verbose: !!options.verbose,\n dryRun: !!options.dryRun,\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n debug: !!options.debug,\n debugBundlePath: options.debugBundlePath,\n debugNodeApis: false,\n codegen: options.codegen === \"enable\",\n url,\n writePushRequest: options.writePushRequest,\n liveComponentSources: !!options.liveComponentSources,\n pushAllModules: !!options.pushAllModules,\n largeIndexDeletionCheck: options.allowDeletingLargeIndexes\n ? \"has confirmation\"\n : \"ask for confirmation\",\n };\n showSpinner(`Deploying to ${url}...${options.dryRun ? \" [dry run]\" : \"\"}`);\n await runPush(ctx, pushOptions);\n logFinishedStep(\n `${\n options.dryRun ? \"Would have deployed\" : \"Deployed\"\n } Convex functions to ${url}`,\n );\n}\n\nexport async function runCommand(\n ctx: Context,\n options: {\n cmdUrlEnvVarName?: string | undefined;\n cmd?: string | undefined;\n dryRun?: boolean | undefined;\n url: string;\n adminKey: string;\n },\n) {\n if (options.cmd === undefined) {\n return;\n }\n\n const suggestedEnvVars = await suggestedEnvVarNames(ctx);\n const urlVar = options.cmdUrlEnvVarName ?? suggestedEnvVars.convexUrlEnvVar;\n const siteVar = suggestedEnvVars.convexSiteEnvVar;\n showSpinner(\n `Running '${options.cmd}' with environment variables \"${urlVar}\" and \"${siteVar}\" set...${\n options.dryRun ? \" [dry run]\" : \"\"\n }`,\n );\n if (!options.dryRun) {\n const deployment = {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n };\n const {\n convexCloudUrl: canonicalCloudUrl,\n convexSiteUrl: canonicalSiteUrl,\n } = await fetchDeploymentCanonicalUrls(ctx, deployment);\n\n const env = { ...process.env };\n env[urlVar] = canonicalCloudUrl;\n env[siteVar] = canonicalSiteUrl;\n const result = spawnSync(options.cmd, {\n env,\n stdio: \"inherit\",\n shell: true,\n });\n if (result.status !== 0) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `'${options.cmd}' failed`,\n });\n }\n }\n logFinishedStep(\n `${options.dryRun ? \"Would have run\" : \"Ran\"} \"${\n options.cmd\n }\" with environment variables \"${urlVar}\" and \"${siteVar}\" set`,\n );\n}\n\nexport async function fetchDeploymentCanonicalUrls(\n ctx: Context,\n options: { deploymentUrl: string; adminKey: string },\n): Promise<{ convexCloudUrl: string; convexSiteUrl: string }> {\n const client = typedDeploymentClient(ctx, options);\n const result = await client.GET(\"/get_canonical_urls\");\n return result.data!;\n}\n"],
|
|
5
|
+
"mappings": ";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,EAGA;AAAA,OAEK;AAKP,SAAS,mBAAmB;AAC5B,SAAS,sBAAsC;AAE/C,SAAS,iBAAiB;AAC1B,OAAO,UAAU;AAGjB,SAAS,eAAe;AACxB,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kCAAkC;AAC3C,SAAS,6BAA6B;AACtC,SAAS,2CAA2C;AAEpD,MAAM,SAAS,UAAU,KAAK,cAAc;AAE5C,eAAe,eAAe,KAAc,MAA+B;AACzE,QAAM,QAAQ,YAAY,IAAI;AAC9B,QAAM,SAAS,MAAM,OAAO,MAAM;AAAA,IAChC,QAAQ;AAAA,MACN,CAAC,KAAK,UAAU,iBAAiB,GAAG,KAAK,UAAU;AAAA,MACnD,CAAC,KAAK,UAAU,oBAAoB,GAAG;AAAA,IACzC;AAAA,EACF,CAAC;AACD,QAAM,MAAM,YAAY,IAAI;AAC5B,QAAM,WAAW,MAAM;AACvB;AAAA,IACE,eAAe,KAAK,SAAS,MAAM,QAAQ,CAAC,CAAC,WAAW,OAAO,SAAS,MAAM,QAAQ,CAAC,CAAC,SAAU,OAAO,SAAS,KAAK,SAAU,KAAK,QAAQ,CAAC,CAAC,SAAS,SAAS,QAAQ,CAAC,CAAC;AAAA,EAC9K;AACA,SAAO;AACT;AAGA,sBAAsB,UACpB,KACA,MACA,SACA,SAK4B;AAC5B,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,kBAAkB,MAAM,QAAQ;AACzC;AAEA,sBAAsB,aACpB,KACA,MACA,SACA,SAK+B;AAC/B,QAAM,WAAW,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,qBAAqB,MAAM,QAAQ;AAC5C;AAEA,eAAe,SACb,KACA,MACA,SACA,SAKA,UACkB;AAElB,QAAM,uBACJ,QAAQ,eAAe,uBAAuB,UAAU;AAC1D,QAAM,qBAAqB,QAAQ,eAAe,gBAAgB,UAAU;AAC5E,QAAM,iBAAiB;AAAA,IACrB,kBAAkB,QAAQ,kBAAkB;AAAA,IAC5C,kBAAkB,uBAAuB;AAAA,IACzC,cAAc,QAAQ,eAAe,WAAW;AAAA,IAChD,gBAAgB,QAAQ,sBAAsB,UAAU;AAAA,IACxD,iBAAiB,QAAQ,kBAAkB,SAAS;AAAA,IACpD,QAAQ,QAAQ;AAAA,EAClB;AACA,aAAW,yBAAyB,KAAK,UAAU,cAAc,CAAC,EAAE;AACpE,QAAM,UAAU,CAAC,QAAa;AAC5B,QAAI,IAAI,SAAS,MAAM,2BAA2B;AAChD,oBAAc,oBAAoB,QAAQ,GAAG,uBAAuB;AAAA,IACtE;AAAA,EACF;AACA,QAAM,QAAQ,gBAAgB,KAAK;AAAA,IACjC,eAAe,QAAQ;AAAA,IACvB,UAAU,QAAQ;AAAA,IAClB;AAAA,EACF,CAAC;AACD,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,UAAU;AAAA,MACrC,MAAM,MAAM,eAAe,KAAK,KAAK,UAAU,OAAO,CAAC;AAAA,MACvD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,QACpB,aAAa,KAAK,qBAAqB;AAAA,MACzC;AAAA,IACF,CAAC;AACD,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B,SAAS,OAAgB;AACvB,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA,oCAAoC,QAAQ;AAAA,MAC5C,QAAQ;AAAA,MACR;AAAA,QACE,UAAU,QAAQ;AAAA,QAClB,eAAe,QAAQ;AAAA,QACvB,kBAAkB;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAGA,MAAM,oBAAoB;AAE1B,sBAAsB,cACpB,KACA,MACAA,YACA,SAMA;AACA,QAAM,QAAQ,gBAAgB,KAAK;AAAA,IACjC,eAAe,QAAQ;AAAA,IACvB,UAAU,QAAQ;AAAA,EACpB,CAAC;AAED,QAAM,QAAQ,KAAK,IAAI;AACvB,gBAAc,2CAA2C;AAEzD,SAAO,MAAM;AACX,QAAI;AACJ,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,gCAAgC;AAAA,QAC3D,MAAM,KAAK,UAAU;AAAA,UACnB,UAAU,QAAQ;AAAA,UAClB,cAAcA,WAAU;AAAA,UACxB,WAAW;AAAA,UACX,QAAQ,QAAQ;AAAA,QAClB,CAAC;AAAA,QACD,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,aAAa,KAAK,qBAAqB;AAAA,QACzC;AAAA,MACF,CAAC;AACD,sBAAgB,aAAa,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,IAC1D,SAAS,OAAgB;AACvB,iBAAW,2CAA2C,QAAQ,GAAG;AACjE,aAAO,MAAM,uBAAuB,KAAK,KAAK;AAAA,IAChD;AACA,YAAQ,cAAc,MAAM;AAAA,MAC1B,KAAK,cAAc;AACjB,YAAI,aAAa;AACjB,YAAI,kBAAkB;AACtB,YAAI,eAAe;AACnB,mBAAW,mBAAmB,OAAO,OAAO,cAAc,UAAU,GAAG;AACrE,cAAI,CAAC,gBAAgB,0BAA0B;AAC7C,yBAAa;AAAA,UACf;AACA,6BAAmB,gBAAgB;AACnC,0BAAgB,gBAAgB;AAAA,QAClC;AACA,cAAM,cAAc,oBAAoB;AACxC,YAAI;AACJ,YAAI,CAAC,eAAe,CAAC,YAAY;AAC/B,gBAAM;AAAA,YACJ,wBAAwB,eAAe,IAAI,YAAY;AAAA,YACvD,QAAQ;AAAA,YACR;AAAA,UACF;AAAA,QACF,WAAW,CAAC,aAAa;AACvB,gBAAM,wBAAwB,eAAe,IAAI,YAAY;AAE7D,cAAI,KAAK,IAAI,IAAI,QAAQ,KAAQ;AAC/B,kBAAM,WAAWA,WAAU,aAAa,aAAa,EAAE;AACvD,kBAAM,aACJ,UAAU,cAAc,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAC1D;AACH,gBAAI,WAAW;AACb,oBAAM,QAAQ,UAAU,MAAM,GAAG,EAAE,CAAC;AACpC,oBAAM,eAAe;AAAA,gBACnB,QAAQ;AAAA,gBACR,eAAe,KAAK;AAAA,cACtB;AACA,oBAAM,qBAAqB,SAAS,KAAK,eAAe,IAAI,YAAY,+BAA+B,YAAY;AAAA,YACrH;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM;AAAA,YACJ;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,sBAAc,GAAG;AACjB;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AAIb,YAAI,MAAM;AACV,YAAI,cAAc,eAAe;AAC/B,iBAAO,kBAAkB,cAAc,aAAa;AAAA,QACtD;AACA,eAAO;AACP,mBAAW,GAAG;AACd,iBAAS,YAAY,IAAI,GAAG,cAAc,KAAK,EAAE,CAAC;AAClD,eAAO,MAAM,IAAI,MAAM;AAAA,UACrB,UAAU;AAAA,UACV,WAAW;AAAA,YACT,iCAAiC,cAAc,YAC3C;AAAA,cACE,WAAW,cAAc;AAAA,cACzB,eAAe,cAAc;AAAA,YAC/B,IACA;AAAA,UACN;AAAA,UACA,gBAAgB;AAAA;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,KAAK,gBAAgB;AACnB,eAAO,MAAM,IAAI,MAAM;AAAA,UACrB,UAAU;AAAA,UACV,WAAW;AAAA,UACX,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,KAAK,YAAY;AACf,sBAAc,6BAA6B;AAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,sBAAsB,WACpB,KACA,MACAA,YACA,SAQyB;AACzB,gBAAc,oBAAoB;AAClC,QAAM,QAAQ,gBAAgB,KAAK;AAAA,IACjC,eAAe,QAAQ;AAAA,IACvB,UAAU,QAAQ;AAAA,EACpB,CAAC;AACD,QAAM,UAAU;AAAA,IACd,UAAU,QAAQ;AAAA,IAClB,WAAAA;AAAA,IACA,QAAQ,QAAQ;AAAA,EAClB;AACA,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,4BAA4B;AAAA,MACvD,MAAM,MAAM,eAAe,KAAK,KAAK,UAAU,OAAO,CAAC;AAAA,MACvD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,QACpB,aAAa,KAAK,qBAAqB;AAAA,MACzC;AAAA,IACF,CAAC;AACD,WAAO,eAAe,MAAM,MAAM,SAAS,KAAK,CAAC;AAAA,EACnD,SAAS,OAAgB;AACvB,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA,qCAAqC,QAAQ;AAAA,MAC7C,QAAQ;AAAA,MACR;AAAA,QACE,UAAU,QAAQ;AAAA,QAClB,eAAe,QAAQ;AAAA,QACvB,kBAAkB;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAWA,sBAAsB,oBACpB,KACA,UACA,KACA,UACA;AACA,QAAM,QAAQ,gBAAgB,KAAK;AAAA,IACjC,eAAe;AAAA,IACf;AAAA,EACF,CAAC;AACD,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,sCAAsC;AAAA,MACjE,MAAM,KAAK,UAAU;AAAA,QACnB;AAAA,QACA,OAAO,SAAS;AAAA,MAClB,CAAC;AAAA,MACD,QAAQ;AAAA,IACV,CAAC;AACD,UAAM,SAAS,KAAK;AAAA,EACtB,SAAS,OAAgB;AACvB;AAAA,MACE,+CAA+C,MAAM,OAAO;AAAA,IAC9D;AAAA,EACF;AACF;AAEA,sBAAsB,mBACpB,KACA,aAMA,SAkBA;AACA,QAAM,EAAE,KAAK,SAAS,IAAI;AAG1B,MAAI,CAAC,QAAQ,iBAAiB;AAC5B,UAAM,EAAE,cAAc,IAAI,MAAM,kBAAkB,GAAG;AACrD,UAAM,gBAAgB,MAAM,iBAAiB,KAAK,aAAa;AAE/D,QAAI,iBAAiB,YAAY,gBAAgB;AAG/C,YAAM,iBAAiB,YAAY;AACnC,UACE,mBAAmB,SACnB,mBAAmB,aACnB,mBAAmB,QACnB;AACA,cAAM;AAAA,UACJ;AAAA,UACA,YAAY;AAAA,UACZ,EAAE,eAAe,KAAK,SAAS;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,KAAK,EAAE,GAAG,SAAS,KAAK,SAAS,CAAC;AAEnD,QAAM,cAA2B;AAAA,IAC/B,gBAAgB,YAAY;AAAA,IAC5B;AAAA,IACA,SAAS,CAAC,CAAC,QAAQ;AAAA,IACnB,QAAQ,CAAC,CAAC,QAAQ;AAAA,IAClB,WAAW,QAAQ;AAAA,IACnB,qBAAqB,QAAQ;AAAA,IAC7B,OAAO,CAAC,CAAC,QAAQ;AAAA,IACjB,iBAAiB,QAAQ;AAAA,IACzB,eAAe;AAAA,IACf,SAAS,QAAQ,YAAY;AAAA,IAC7B;AAAA,IACA,kBAAkB,QAAQ;AAAA,IAC1B,sBAAsB,CAAC,CAAC,QAAQ;AAAA,IAChC,gBAAgB,CAAC,CAAC,QAAQ;AAAA,IAC1B,yBAAyB,QAAQ,4BAC7B,qBACA;AAAA,EACN;AACA,cAAY,gBAAgB,GAAG,MAAM,QAAQ,SAAS,eAAe,EAAE,EAAE;AACzE,QAAM,QAAQ,KAAK,WAAW;AAC9B;AAAA,IACE,GACE,QAAQ,SAAS,wBAAwB,UAC3C,wBAAwB,GAAG;AAAA,EAC7B;AACF;AAEA,sBAAsB,WACpB,KACA,SAOA;AACA,MAAI,QAAQ,QAAQ,QAAW;AAC7B;AAAA,EACF;AAEA,QAAM,mBAAmB,MAAM,qBAAqB,GAAG;AACvD,QAAM,SAAS,QAAQ,oBAAoB,iBAAiB;AAC5D,QAAM,UAAU,iBAAiB;AACjC;AAAA,IACE,YAAY,QAAQ,GAAG,iCAAiC,MAAM,UAAU,OAAO,WAC7E,QAAQ,SAAS,eAAe,EAClC;AAAA,EACF;AACA,MAAI,CAAC,QAAQ,QAAQ;AACnB,UAAM,aAAa;AAAA,MACjB,eAAe,QAAQ;AAAA,MACvB,UAAU,QAAQ;AAAA,IACpB;AACA,UAAM;AAAA,MACJ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IACjB,IAAI,MAAM,6BAA6B,KAAK,UAAU;AAEtD,UAAM,MAAM,EAAE,GAAG,QAAQ,IAAI;AAC7B,QAAI,MAAM,IAAI;AACd,QAAI,OAAO,IAAI;AACf,UAAM,SAAS,UAAU,QAAQ,KAAK;AAAA,MACpC;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,IACT,CAAC;AACD,QAAI,OAAO,WAAW,GAAG;AACvB,YAAM,IAAI,MAAM;AAAA,QACd,UAAU;AAAA,QACV,WAAW;AAAA,QACX,gBAAgB,IAAI,QAAQ,GAAG;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACF;AACA;AAAA,IACE,GAAG,QAAQ,SAAS,mBAAmB,KAAK,KAC1C,QAAQ,GACV,iCAAiC,MAAM,UAAU,OAAO;AAAA,EAC1D;AACF;AAEA,sBAAsB,6BACpB,KACA,SAC4D;AAC5D,QAAM,SAAS,sBAAsB,KAAK,OAAO;AACjD,QAAM,SAAS,MAAM,OAAO,IAAI,qBAAqB;AACrD,SAAO,OAAO;AAChB;",
|
|
6
6
|
"names": ["startPush"]
|
|
7
7
|
}
|
|
@@ -10,7 +10,10 @@ export const componentArgumentValidator = looseObject({
|
|
|
10
10
|
value: z.string()
|
|
11
11
|
});
|
|
12
12
|
export const componentDefinitionType = z.union([
|
|
13
|
-
looseObject({
|
|
13
|
+
looseObject({
|
|
14
|
+
type: z.literal("app"),
|
|
15
|
+
httpPrefix: z.string().optional()
|
|
16
|
+
}),
|
|
14
17
|
looseObject({
|
|
15
18
|
type: z.literal("childComponent"),
|
|
16
19
|
name: identifier,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/cli/lib/deployApi/componentDefinition.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from \"zod\";\nimport { canonicalizedModulePath, componentDefinitionPath } from \"./paths.js\";\nimport { Identifier, Reference, identifier, reference } from \"./types.js\";\nimport { analyzedModule, udfConfig } from \"./modules.js\";\nimport { looseObject } from \"./utils.js\";\nimport { ConvexValidator } from \"./validator.js\";\n\nexport const componentArgumentValidator = looseObject({\n type: z.literal(\"value\"),\n // Validator serialized to JSON.\n value: z.string(),\n});\n\nexport const componentDefinitionType = z.union([\n looseObject({
|
|
5
|
-
"mappings": ";AAAA,SAAS,SAAS;AAClB,SAAS,yBAAyB,+BAA+B;AACjE,SAAgC,YAAY,iBAAiB;AAC7D,SAAS,gBAAgB,iBAAiB;AAC1C,SAAS,mBAAmB;AAGrB,aAAM,6BAA6B,YAAY;AAAA,EACpD,MAAM,EAAE,QAAQ,OAAO;AAAA;AAAA,EAEvB,OAAO,EAAE,OAAO;AAClB,CAAC;AAEM,aAAM,0BAA0B,EAAE,MAAM;AAAA,EAC7C,YAAY,
|
|
4
|
+
"sourcesContent": ["import { z } from \"zod\";\nimport { canonicalizedModulePath, componentDefinitionPath } from \"./paths.js\";\nimport { Identifier, Reference, identifier, reference } from \"./types.js\";\nimport { analyzedModule, udfConfig } from \"./modules.js\";\nimport { looseObject } from \"./utils.js\";\nimport { ConvexValidator } from \"./validator.js\";\n\nexport const componentArgumentValidator = looseObject({\n type: z.literal(\"value\"),\n // Validator serialized to JSON.\n value: z.string(),\n});\n\nexport const componentDefinitionType = z.union([\n looseObject({\n type: z.literal(\"app\"),\n httpPrefix: z.string().optional(),\n }),\n looseObject({\n type: z.literal(\"childComponent\"),\n name: identifier,\n args: z.array(z.tuple([identifier, componentArgumentValidator])),\n }),\n]);\n\nexport const componentArgument = looseObject({\n type: z.literal(\"value\"),\n // Value serialized to JSON.\n value: z.string(),\n});\n\nexport const componentInstantiation = looseObject({\n name: identifier,\n path: componentDefinitionPath,\n args: z.nullable(z.array(z.tuple([identifier, componentArgument]))),\n});\n\nexport type ComponentExports =\n | { type: \"leaf\"; leaf: Reference }\n | { type: \"branch\"; branch: [Identifier, ComponentExports][] };\n\nexport const componentExports: z.ZodType<ComponentExports> = z.lazy(() =>\n z.union([\n looseObject({\n type: z.literal(\"leaf\"),\n leaf: reference,\n }),\n looseObject({\n type: z.literal(\"branch\"),\n branch: z.array(z.tuple([identifier, componentExports])),\n }),\n ]),\n);\n\nexport const componentDefinitionMetadata = looseObject({\n path: componentDefinitionPath,\n definitionType: componentDefinitionType,\n childComponents: z.array(componentInstantiation),\n httpMounts: z.record(z.string(), reference),\n exports: looseObject({\n type: z.literal(\"branch\"),\n branch: z.array(z.tuple([identifier, componentExports])),\n }),\n});\n\nexport const indexSchema = looseObject({\n indexDescriptor: z.string(),\n fields: z.array(z.string()),\n});\n\nexport const vectorIndexSchema = looseObject({\n indexDescriptor: z.string(),\n vectorField: z.string(),\n dimensions: z.number().optional(),\n filterFields: z.array(z.string()),\n});\n\nexport const searchIndexSchema = looseObject({\n indexDescriptor: z.string(),\n searchField: z.string(),\n filterFields: z.array(z.string()),\n});\n\nexport const tableDefinition = looseObject({\n tableName: z.string(),\n indexes: z.array(indexSchema),\n searchIndexes: z.array(searchIndexSchema).optional().nullable(),\n vectorIndexes: z.array(vectorIndexSchema).optional().nullable(),\n // We don't validate validators because of performance issues and since this\n // is a server returned value.\n documentType: z.custom<ConvexValidator>(),\n});\nexport type TableDefinition = z.infer<typeof tableDefinition>;\n\nexport const analyzedSchema = looseObject({\n tables: z.array(tableDefinition),\n schemaValidation: z.boolean(),\n});\nexport type AnalyzedSchema = z.infer<typeof analyzedSchema>;\n\nexport const evaluatedComponentDefinition = looseObject({\n definition: componentDefinitionMetadata,\n schema: analyzedSchema.optional().nullable(),\n functions: z.record(canonicalizedModulePath, analyzedModule),\n udfConfig,\n});\nexport type EvaluatedComponentDefinition = z.infer<\n typeof evaluatedComponentDefinition\n>;\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,SAAS;AAClB,SAAS,yBAAyB,+BAA+B;AACjE,SAAgC,YAAY,iBAAiB;AAC7D,SAAS,gBAAgB,iBAAiB;AAC1C,SAAS,mBAAmB;AAGrB,aAAM,6BAA6B,YAAY;AAAA,EACpD,MAAM,EAAE,QAAQ,OAAO;AAAA;AAAA,EAEvB,OAAO,EAAE,OAAO;AAClB,CAAC;AAEM,aAAM,0BAA0B,EAAE,MAAM;AAAA,EAC7C,YAAY;AAAA,IACV,MAAM,EAAE,QAAQ,KAAK;AAAA,IACrB,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC;AAAA,EACD,YAAY;AAAA,IACV,MAAM,EAAE,QAAQ,gBAAgB;AAAA,IAChC,MAAM;AAAA,IACN,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,0BAA0B,CAAC,CAAC;AAAA,EACjE,CAAC;AACH,CAAC;AAEM,aAAM,oBAAoB,YAAY;AAAA,EAC3C,MAAM,EAAE,QAAQ,OAAO;AAAA;AAAA,EAEvB,OAAO,EAAE,OAAO;AAClB,CAAC;AAEM,aAAM,yBAAyB,YAAY;AAAA,EAChD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,iBAAiB,CAAC,CAAC,CAAC;AACpE,CAAC;AAMM,aAAM,mBAAgD,EAAE;AAAA,EAAK,MAClE,EAAE,MAAM;AAAA,IACN,YAAY;AAAA,MACV,MAAM,EAAE,QAAQ,MAAM;AAAA,MACtB,MAAM;AAAA,IACR,CAAC;AAAA,IACD,YAAY;AAAA,MACV,MAAM,EAAE,QAAQ,QAAQ;AAAA,MACxB,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,gBAAgB,CAAC,CAAC;AAAA,IACzD,CAAC;AAAA,EACH,CAAC;AACH;AAEO,aAAM,8BAA8B,YAAY;AAAA,EACrD,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,iBAAiB,EAAE,MAAM,sBAAsB;AAAA,EAC/C,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS;AAAA,EAC1C,SAAS,YAAY;AAAA,IACnB,MAAM,EAAE,QAAQ,QAAQ;AAAA,IACxB,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,gBAAgB,CAAC,CAAC;AAAA,EACzD,CAAC;AACH,CAAC;AAEM,aAAM,cAAc,YAAY;AAAA,EACrC,iBAAiB,EAAE,OAAO;AAAA,EAC1B,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAC5B,CAAC;AAEM,aAAM,oBAAoB,YAAY;AAAA,EAC3C,iBAAiB,EAAE,OAAO;AAAA,EAC1B,aAAa,EAAE,OAAO;AAAA,EACtB,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;AAClC,CAAC;AAEM,aAAM,oBAAoB,YAAY;AAAA,EAC3C,iBAAiB,EAAE,OAAO;AAAA,EAC1B,aAAa,EAAE,OAAO;AAAA,EACtB,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;AAClC,CAAC;AAEM,aAAM,kBAAkB,YAAY;AAAA,EACzC,WAAW,EAAE,OAAO;AAAA,EACpB,SAAS,EAAE,MAAM,WAAW;AAAA,EAC5B,eAAe,EAAE,MAAM,iBAAiB,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9D,eAAe,EAAE,MAAM,iBAAiB,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA;AAAA,EAG9D,cAAc,EAAE,OAAwB;AAC1C,CAAC;AAGM,aAAM,iBAAiB,YAAY;AAAA,EACxC,QAAQ,EAAE,MAAM,eAAe;AAAA,EAC/B,kBAAkB,EAAE,QAAQ;AAC9B,CAAC;AAGM,aAAM,+BAA+B,YAAY;AAAA,EACtD,YAAY;AAAA,EACZ,QAAQ,eAAe,SAAS,EAAE,SAAS;AAAA,EAC3C,WAAW,EAAE,OAAO,yBAAyB,cAAc;AAAA,EAC3D;AACF,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ import { logVerbose } from "../../bundler/log.js";
|
|
|
3
3
|
import {
|
|
4
4
|
deploymentSelectionWithinProjectFromOptions,
|
|
5
5
|
fetchTeamAndProjectForKey,
|
|
6
|
+
getTeamAndProjectSlugForDeployment,
|
|
6
7
|
validateDeploymentSelectionForExistingDeployment
|
|
7
8
|
} from "./api.js";
|
|
8
9
|
import {
|
|
@@ -16,6 +17,8 @@ import {
|
|
|
16
17
|
stripDeploymentTypePrefix
|
|
17
18
|
} from "./deployment.js";
|
|
18
19
|
import { parseDeploymentSelector } from "./deploymentSelector.js";
|
|
20
|
+
import { loadProjectLocalConfig } from "./localDeployment/filePaths.js";
|
|
21
|
+
import { chalkStderr } from "chalk";
|
|
19
22
|
import { getBuildEnvironment } from "./envvars.js";
|
|
20
23
|
import { readGlobalConfig } from "./utils/globalConfig.js";
|
|
21
24
|
import {
|
|
@@ -256,6 +259,25 @@ async function _getDeploymentSelection(ctx, cliArgs) {
|
|
|
256
259
|
}
|
|
257
260
|
};
|
|
258
261
|
}
|
|
262
|
+
if (parsed.kind === "local") {
|
|
263
|
+
const localConfig = loadProjectLocalConfig(ctx);
|
|
264
|
+
if (localConfig !== null) {
|
|
265
|
+
return {
|
|
266
|
+
kind: "deploymentWithinProject",
|
|
267
|
+
targetProject: {
|
|
268
|
+
kind: "deploymentName",
|
|
269
|
+
deploymentName: localConfig.deploymentName,
|
|
270
|
+
deploymentType: "local"
|
|
271
|
+
},
|
|
272
|
+
selectionWithinProject
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return ctx.crash({
|
|
276
|
+
exitCode: 1,
|
|
277
|
+
errorType: "fatal",
|
|
278
|
+
printedMessage: `No local deployment found. Run ${chalkStderr.bold("npx convex deployment create local")} to create one.`
|
|
279
|
+
});
|
|
280
|
+
}
|
|
259
281
|
}
|
|
260
282
|
if (cliArgs.envFile !== void 0) {
|
|
261
283
|
logVerbose(`Checking env file: ${cliArgs.envFile}`);
|
|
@@ -299,7 +321,7 @@ async function _getDeploymentSelection(ctx, cliArgs) {
|
|
|
299
321
|
return result.metadata;
|
|
300
322
|
}
|
|
301
323
|
const isLoggedIn = ctx.bigBrainAuth() !== null;
|
|
302
|
-
if ((!isLoggedIn || process.env.CONVEX_AGENT_MODE === "anonymous") && shouldAllowAnonymousDevelopment()) {
|
|
324
|
+
if ((!isLoggedIn || process.env.CONVEX_AGENT_MODE === "anonymous" || !process.stdin.isTTY) && !cliArgs.implicitProd && shouldAllowAnonymousDevelopment()) {
|
|
303
325
|
return {
|
|
304
326
|
kind: "anonymous",
|
|
305
327
|
deploymentName: null,
|
|
@@ -450,6 +472,11 @@ async function getDeploymentSelectionFromEnv(ctx, selectionWithinProject, getEnv
|
|
|
450
472
|
}
|
|
451
473
|
};
|
|
452
474
|
}
|
|
475
|
+
const newSelectionWithinProject = selectionWithinProject.kind === "unspecified" && // Fetching local deployment credentials uses the "unspecified" code path
|
|
476
|
+
targetDeploymentType !== "local" ? {
|
|
477
|
+
kind: "deploymentName",
|
|
478
|
+
deploymentName: targetDeploymentName
|
|
479
|
+
} : selectionWithinProject;
|
|
453
480
|
return {
|
|
454
481
|
kind: "success",
|
|
455
482
|
metadata: {
|
|
@@ -459,7 +486,7 @@ async function getDeploymentSelectionFromEnv(ctx, selectionWithinProject, getEnv
|
|
|
459
486
|
deploymentName: targetDeploymentName,
|
|
460
487
|
deploymentType: targetDeploymentType
|
|
461
488
|
},
|
|
462
|
-
selectionWithinProject
|
|
489
|
+
selectionWithinProject: newSelectionWithinProject
|
|
463
490
|
}
|
|
464
491
|
};
|
|
465
492
|
}
|
|
@@ -521,6 +548,23 @@ export const shouldAllowAnonymousDevelopment = () => {
|
|
|
521
548
|
export async function getProjectDetails(ctx, projectSelection) {
|
|
522
549
|
switch (projectSelection.kind) {
|
|
523
550
|
case "deploymentName": {
|
|
551
|
+
if (projectSelection.deploymentType === "local") {
|
|
552
|
+
const result = await getTeamAndProjectSlugForDeployment(ctx, {
|
|
553
|
+
deploymentName: projectSelection.deploymentName
|
|
554
|
+
});
|
|
555
|
+
if (result === null) {
|
|
556
|
+
return ctx.crash({
|
|
557
|
+
exitCode: 1,
|
|
558
|
+
errorType: "fatal",
|
|
559
|
+
printedMessage: "You don't have access to the selected project. Run `npx convex dev` to select a different project."
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
return await getProjectDetails(ctx, {
|
|
563
|
+
kind: "teamAndProjectSlugs",
|
|
564
|
+
teamSlug: result.teamSlug,
|
|
565
|
+
projectSlug: result.projectSlug
|
|
566
|
+
});
|
|
567
|
+
}
|
|
524
568
|
const deployment = (await typedPlatformClient(ctx).GET("/deployments/{deployment_name}", {
|
|
525
569
|
params: {
|
|
526
570
|
path: { deployment_name: projectSelection.deploymentName }
|