convex 1.46.0 → 1.48.0-alpha.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 +58 -1
- package/dist/browser.bundle.js +7 -1
- package/dist/browser.bundle.js.map +2 -2
- package/dist/cjs/bundler/context.js +7 -5
- package/dist/cjs/bundler/context.js.map +2 -2
- package/dist/cjs/bundler/fs.js +47 -6
- package/dist/cjs/bundler/fs.js.map +2 -2
- package/dist/cjs/bundler/index.js +5 -4
- package/dist/cjs/bundler/index.js.map +2 -2
- package/dist/cjs/cli/account.js +237 -0
- package/dist/cjs/cli/account.js.map +7 -0
- package/dist/cjs/cli/codegen.js +0 -4
- package/dist/cjs/cli/codegen.js.map +2 -2
- package/dist/cjs/cli/configure.js +28 -6
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +27 -2
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentSelect.js +2 -2
- package/dist/cjs/cli/deploymentSelect.js.map +2 -2
- package/dist/cjs/cli/dev.js +6 -0
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/env.js +10 -5
- package/dist/cjs/cli/env.js.map +2 -2
- package/dist/cjs/cli/envDefault.js +7 -2
- package/dist/cjs/cli/envDefault.js.map +2 -2
- package/dist/cjs/cli/generatedApi.js.map +1 -1
- package/dist/cjs/cli/lib/api.js +2 -0
- package/dist/cjs/cli/lib/api.js.map +2 -2
- package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js +113 -0
- package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js +36 -47
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js +58 -39
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js.map +2 -2
- package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js +90 -0
- package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
- package/dist/cjs/cli/lib/codegen.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +2 -1
- package/dist/cjs/cli/lib/command.js.map +2 -2
- package/dist/cjs/cli/lib/components/definition/bundle.js +37 -11
- package/dist/cjs/cli/lib/components/definition/bundle.js.map +2 -2
- package/dist/cjs/cli/lib/components.js +48 -5
- package/dist/cjs/cli/lib/components.js.map +2 -2
- package/dist/cjs/cli/lib/config.js +56 -17
- package/dist/cjs/cli/lib/config.js.map +2 -2
- package/dist/cjs/cli/lib/deploy2.js +3 -1
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js +30 -2
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js.map +2 -2
- package/dist/cjs/cli/lib/deployKeyWarning.js +43 -0
- package/dist/cjs/cli/lib/deployKeyWarning.js.map +7 -0
- package/dist/cjs/cli/lib/deployment.js +2 -0
- package/dist/cjs/cli/lib/deployment.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +27 -18
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +5 -0
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/envvars.js +32 -0
- package/dist/cjs/cli/lib/envvars.js.map +2 -2
- package/dist/cjs/cli/lib/formatValidationProgress.js +47 -0
- package/dist/cjs/cli/lib/formatValidationProgress.js.map +7 -0
- package/dist/cjs/cli/lib/fsUtils.js +1 -1
- package/dist/cjs/cli/lib/fsUtils.js.map +2 -2
- package/dist/cjs/cli/lib/generateDocs.js +1 -1
- package/dist/cjs/cli/lib/generateDocs.js.map +1 -1
- package/dist/cjs/cli/lib/indexes.js.map +1 -1
- package/dist/cjs/cli/lib/login.js +28 -4
- package/dist/cjs/cli/lib/login.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/requestContext.js +5 -1
- package/dist/cjs/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/cjs/cli/lib/mcp/tools/env.js +10 -3
- package/dist/cjs/cli/lib/mcp/tools/env.js.map +2 -2
- package/dist/cjs/cli/lib/profileManagement.js +196 -0
- package/dist/cjs/cli/lib/profileManagement.js.map +7 -0
- package/dist/cjs/cli/lib/profiles.js +333 -0
- package/dist/cjs/cli/lib/profiles.js.map +7 -0
- package/dist/cjs/cli/lib/run.js +4 -0
- package/dist/cjs/cli/lib/run.js.map +2 -2
- package/dist/cjs/cli/lib/schemaEvaluation.js +62 -0
- package/dist/cjs/cli/lib/schemaEvaluation.js.map +7 -0
- package/dist/cjs/cli/lib/usageLimits.js +4 -2
- package/dist/cjs/cli/lib/usageLimits.js.map +2 -2
- package/dist/cjs/cli/lib/utils/mutex.js +9 -24
- package/dist/cjs/cli/lib/utils/mutex.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +66 -27
- package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
- package/dist/cjs/cli/login.js +213 -114
- package/dist/cjs/cli/login.js.map +3 -3
- package/dist/cjs/cli/logout.js +113 -12
- package/dist/cjs/cli/logout.js.map +3 -3
- package/dist/cjs/cli/mcp.js +43 -10
- package/dist/cjs/cli/mcp.js.map +3 -3
- package/dist/cjs/cli/program.js +2 -1
- package/dist/cjs/cli/program.js.map +2 -2
- package/dist/cjs/cli/projectCreate.js +1 -1
- package/dist/cjs/cli/projectCreate.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/impl/actions_impl.js +8 -3
- package/dist/cjs/server/impl/actions_impl.js.map +2 -2
- package/dist/cjs/server/impl/storage_impl.js +29 -0
- package/dist/cjs/server/impl/storage_impl.js.map +2 -2
- package/dist/cjs/server/index.js +1 -0
- package/dist/cjs/server/index.js.map +2 -2
- package/dist/cjs/server/meta.js.map +1 -1
- package/dist/cjs/server/registration.js.map +1 -1
- package/dist/cjs/server/schema.js +34 -12
- package/dist/cjs/server/schema.js.map +2 -2
- package/dist/cjs/server/storage.js.map +1 -1
- package/dist/cjs/values/validators.js +1 -1
- package/dist/cjs/values/validators.js.map +2 -2
- package/dist/cjs/values/value.js +6 -0
- package/dist/cjs/values/value.js.map +2 -2
- package/dist/cjs-types/bundler/context.d.ts +5 -0
- package/dist/cjs-types/bundler/context.d.ts.map +1 -1
- package/dist/cjs-types/bundler/fs.d.ts +7 -2
- package/dist/cjs-types/bundler/fs.d.ts.map +1 -1
- package/dist/cjs-types/bundler/index.d.ts +9 -2
- package/dist/cjs-types/bundler/index.d.ts.map +1 -1
- package/dist/cjs-types/cli/account.d.ts +6 -0
- package/dist/cjs-types/cli/account.d.ts.map +1 -0
- package/dist/cjs-types/cli/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/configure.d.ts +6 -0
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploy.d.ts +2 -0
- package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts +6 -6
- package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts +1 -0
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/envDefault.d.ts.map +1 -1
- package/dist/cjs-types/cli/generatedApi.d.ts +1 -1
- package/dist/cjs-types/cli/generatedApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
- package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts +5 -7
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts +4 -10
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
- package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/codegen.d.ts +0 -3
- package/dist/cjs-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/command.d.ts +2 -0
- package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts +13 -0
- package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components.d.ts +4 -0
- package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/config.d.ts +2 -1
- package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts +460 -16
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts +3 -0
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/deployment.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +2 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts +1 -0
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/envvars.d.ts +6 -0
- package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts +8 -0
- package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/fsUtils.d.ts +1 -0
- package/dist/cjs-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/login.d.ts +3 -1
- package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/tools/env.d.ts +8 -5
- package/dist/cjs-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/profileManagement.d.ts +10 -0
- package/dist/cjs-types/cli/lib/profileManagement.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/profiles.d.ts +59 -0
- package/dist/cjs-types/cli/lib/profiles.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts +33 -0
- package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/usageLimits.d.ts +1 -1
- package/dist/cjs-types/cli/lib/usageLimits.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/mutex.d.ts +1 -3
- package/dist/cjs-types/cli/lib/utils/mutex.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +15 -2
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/login.d.ts +21 -0
- package/dist/cjs-types/cli/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/logout.d.ts +8 -1
- package/dist/cjs-types/cli/logout.d.ts.map +1 -1
- package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
- package/dist/cjs-types/cli/program.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/index.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/actions_impl.d.ts +18 -3
- package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/storage_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/index.d.ts +1 -1
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts +63 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -1
- package/dist/cjs-types/server/registration.d.ts +10 -0
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cjs-types/server/schema.d.ts +33 -0
- package/dist/cjs-types/server/schema.d.ts.map +1 -1
- package/dist/cjs-types/server/storage.d.ts.map +1 -1
- package/dist/cjs-types/values/value.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +4889 -2980
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/bundler/context.js +7 -5
- package/dist/esm/bundler/context.js.map +2 -2
- package/dist/esm/bundler/fs.js +47 -6
- package/dist/esm/bundler/fs.js.map +2 -2
- package/dist/esm/bundler/index.js +5 -4
- package/dist/esm/bundler/index.js.map +2 -2
- package/dist/esm/cli/account.js +221 -0
- package/dist/esm/cli/account.js.map +7 -0
- package/dist/esm/cli/codegen.js +0 -4
- package/dist/esm/cli/codegen.js.map +2 -2
- package/dist/esm/cli/configure.js +27 -6
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +27 -2
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +6 -3
- package/dist/esm/cli/deploymentSelect.js.map +2 -2
- package/dist/esm/cli/dev.js +6 -0
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/env.js +11 -6
- package/dist/esm/cli/env.js.map +2 -2
- package/dist/esm/cli/envDefault.js +7 -2
- package/dist/esm/cli/envDefault.js.map +2 -2
- package/dist/esm/cli/lib/api.js +2 -0
- package/dist/esm/cli/lib/api.js.map +2 -2
- package/dist/esm/cli/lib/checkForLargeIndexBackfill.js +95 -0
- package/dist/esm/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js +37 -48
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js +63 -41
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js.map +2 -2
- package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js +68 -0
- package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
- package/dist/esm/cli/lib/codegen.js.map +2 -2
- package/dist/esm/cli/lib/command.js +2 -1
- package/dist/esm/cli/lib/command.js.map +2 -2
- package/dist/esm/cli/lib/components/definition/bundle.js +37 -11
- package/dist/esm/cli/lib/components/definition/bundle.js.map +2 -2
- package/dist/esm/cli/lib/components.js +55 -5
- package/dist/esm/cli/lib/components.js.map +2 -2
- package/dist/esm/cli/lib/config.js +55 -17
- package/dist/esm/cli/lib/config.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +3 -1
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js +28 -2
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js.map +2 -2
- package/dist/esm/cli/lib/deployKeyWarning.js +27 -0
- package/dist/esm/cli/lib/deployKeyWarning.js.map +7 -0
- package/dist/esm/cli/lib/deployment.js +2 -2
- package/dist/esm/cli/lib/deployment.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +35 -20
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +5 -0
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/envvars.js +35 -1
- package/dist/esm/cli/lib/envvars.js.map +2 -2
- package/dist/esm/cli/lib/formatValidationProgress.js +24 -0
- package/dist/esm/cli/lib/formatValidationProgress.js.map +7 -0
- package/dist/esm/cli/lib/fsUtils.js +1 -1
- package/dist/esm/cli/lib/fsUtils.js.map +2 -2
- package/dist/esm/cli/lib/generateDocs.js +1 -1
- package/dist/esm/cli/lib/generateDocs.js.map +1 -1
- package/dist/esm/cli/lib/indexes.js.map +1 -1
- package/dist/esm/cli/lib/login.js +36 -4
- package/dist/esm/cli/lib/login.js.map +2 -2
- package/dist/esm/cli/lib/mcp/requestContext.js +5 -1
- package/dist/esm/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/esm/cli/lib/mcp/tools/env.js +10 -3
- package/dist/esm/cli/lib/mcp/tools/env.js.map +2 -2
- package/dist/esm/cli/lib/profileManagement.js +179 -0
- package/dist/esm/cli/lib/profileManagement.js.map +7 -0
- package/dist/esm/cli/lib/profiles.js +288 -0
- package/dist/esm/cli/lib/profiles.js.map +7 -0
- package/dist/esm/cli/lib/run.js +4 -0
- package/dist/esm/cli/lib/run.js.map +2 -2
- package/dist/esm/cli/lib/schemaEvaluation.js +39 -0
- package/dist/esm/cli/lib/schemaEvaluation.js.map +7 -0
- package/dist/esm/cli/lib/usageLimits.js +4 -2
- package/dist/esm/cli/lib/usageLimits.js.map +2 -2
- package/dist/esm/cli/lib/utils/mutex.js +9 -24
- package/dist/esm/cli/lib/utils/mutex.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +63 -27
- package/dist/esm/cli/lib/utils/utils.js.map +2 -2
- package/dist/esm/cli/login.js +225 -112
- package/dist/esm/cli/login.js.map +3 -3
- package/dist/esm/cli/logout.js +110 -13
- package/dist/esm/cli/logout.js.map +2 -2
- package/dist/esm/cli/mcp.js +34 -10
- package/dist/esm/cli/mcp.js.map +2 -2
- package/dist/esm/cli/program.js +2 -1
- package/dist/esm/cli/program.js.map +2 -2
- package/dist/esm/cli/projectCreate.js +1 -1
- package/dist/esm/cli/projectCreate.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/impl/actions_impl.js +7 -3
- package/dist/esm/server/impl/actions_impl.js.map +2 -2
- package/dist/esm/server/impl/storage_impl.js +29 -0
- package/dist/esm/server/impl/storage_impl.js.map +2 -2
- package/dist/esm/server/index.js +4 -1
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm/server/schema.js +34 -12
- package/dist/esm/server/schema.js.map +2 -2
- package/dist/esm/values/validators.js +1 -1
- package/dist/esm/values/validators.js.map +2 -2
- package/dist/esm/values/value.js +6 -0
- package/dist/esm/values/value.js.map +2 -2
- package/dist/esm-types/bundler/context.d.ts +5 -0
- package/dist/esm-types/bundler/context.d.ts.map +1 -1
- package/dist/esm-types/bundler/fs.d.ts +7 -2
- package/dist/esm-types/bundler/fs.d.ts.map +1 -1
- package/dist/esm-types/bundler/index.d.ts +9 -2
- package/dist/esm-types/bundler/index.d.ts.map +1 -1
- package/dist/esm-types/cli/account.d.ts +6 -0
- package/dist/esm-types/cli/account.d.ts.map +1 -0
- package/dist/esm-types/cli/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/configure.d.ts +6 -0
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/deploy.d.ts +2 -0
- package/dist/esm-types/cli/deploy.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts +6 -6
- package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts +1 -0
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/env.d.ts.map +1 -1
- package/dist/esm-types/cli/envDefault.d.ts.map +1 -1
- package/dist/esm-types/cli/generatedApi.d.ts +1 -1
- package/dist/esm-types/cli/generatedApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
- package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts +5 -7
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts +4 -10
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
- package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/codegen.d.ts +0 -3
- package/dist/esm-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/command.d.ts +2 -0
- package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components/definition/bundle.d.ts +13 -0
- package/dist/esm-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components.d.ts +4 -0
- package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/config.d.ts +2 -1
- package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +2 -0
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts +460 -16
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts +3 -0
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/deployment.d.ts +2 -0
- package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts +2 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts +1 -0
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/envvars.d.ts +6 -0
- package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/formatValidationProgress.d.ts +8 -0
- package/dist/esm-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/fsUtils.d.ts +1 -0
- package/dist/esm-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/login.d.ts +3 -1
- package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/tools/env.d.ts +8 -5
- package/dist/esm-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/profileManagement.d.ts +10 -0
- package/dist/esm-types/cli/lib/profileManagement.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/profiles.d.ts +59 -0
- package/dist/esm-types/cli/lib/profiles.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/schemaEvaluation.d.ts +33 -0
- package/dist/esm-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/usageLimits.d.ts +1 -1
- package/dist/esm-types/cli/lib/usageLimits.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/mutex.d.ts +1 -3
- package/dist/esm-types/cli/lib/utils/mutex.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +15 -2
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/login.d.ts +21 -0
- package/dist/esm-types/cli/login.d.ts.map +1 -1
- package/dist/esm-types/cli/logout.d.ts +8 -1
- package/dist/esm-types/cli/logout.d.ts.map +1 -1
- package/dist/esm-types/cli/mcp.d.ts.map +1 -1
- package/dist/esm-types/cli/program.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/index.d.ts.map +1 -1
- package/dist/esm-types/server/impl/actions_impl.d.ts +18 -3
- package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/storage_impl.d.ts.map +1 -1
- package/dist/esm-types/server/index.d.ts +1 -1
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts +63 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -1
- package/dist/esm-types/server/registration.d.ts +10 -0
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/esm-types/server/schema.d.ts +33 -0
- package/dist/esm-types/server/schema.d.ts.map +1 -1
- package/dist/esm-types/server/storage.d.ts.map +1 -1
- package/dist/esm-types/values/value.d.ts.map +1 -1
- package/dist/react.bundle.js +7 -1
- package/dist/react.bundle.js.map +2 -2
- package/package.json +5 -5
- package/schemas/convex.schema.json +5 -5
- package/src/bundler/context.ts +9 -5
- package/src/bundler/fs.ts +54 -5
- package/src/bundler/index.ts +9 -4
- package/src/cli/account.ts +320 -0
- package/src/cli/codegen.ts +0 -2
- package/src/cli/configure.ts +45 -9
- package/src/cli/deploy.ts +36 -5
- package/src/cli/deploymentSelect.ts +7 -4
- package/src/cli/dev.ts +9 -0
- package/src/cli/env.ts +12 -6
- package/src/cli/envDefault.ts +8 -2
- package/src/cli/generatedApi.ts +1 -1
- package/src/cli/lib/api.ts +5 -1
- package/src/cli/lib/checkForLargeIndexBackfill.ts +173 -0
- package/src/cli/lib/checkForLargeIndexDeletion.ts +45 -58
- package/src/cli/lib/checkForSlowSchemaValidation.ts +76 -65
- package/src/cli/lib/checkForStagedValidatorDeletion.ts +104 -0
- package/src/cli/lib/codegen.ts +0 -3
- package/src/cli/lib/command.ts +3 -0
- package/src/cli/lib/components/definition/bundle.ts +68 -14
- package/src/cli/lib/components.ts +71 -4
- package/src/cli/lib/config.ts +85 -18
- package/src/cli/lib/deploy2.ts +10 -1
- package/src/cli/lib/deployApi/evaluateSchema.ts +35 -0
- package/src/cli/lib/deployKeyWarning.ts +43 -0
- package/src/cli/lib/deployment.ts +2 -2
- package/src/cli/lib/deploymentSelection.ts +37 -18
- package/src/cli/lib/dev.ts +14 -0
- package/src/cli/lib/envvars.ts +43 -1
- package/src/cli/lib/formatValidationProgress.ts +35 -0
- package/src/cli/lib/fsUtils.ts +5 -2
- package/src/cli/lib/generateDocs.ts +1 -1
- package/src/cli/lib/indexes.ts +1 -1
- package/src/cli/lib/login.ts +47 -3
- package/src/cli/lib/mcp/requestContext.ts +7 -1
- package/src/cli/lib/mcp/tools/env.ts +17 -3
- package/src/cli/lib/profileManagement.ts +262 -0
- package/src/cli/lib/profiles.ts +398 -0
- package/src/cli/lib/run.ts +2 -0
- package/src/cli/lib/schemaEvaluation.ts +88 -0
- package/src/cli/lib/usageLimits.ts +2 -0
- package/src/cli/lib/utils/mutex.ts +9 -27
- package/src/cli/lib/utils/utils.ts +83 -36
- package/src/cli/login.ts +293 -168
- package/src/cli/logout.ts +142 -17
- package/src/cli/mcp.ts +48 -11
- package/src/cli/program.ts +2 -0
- package/src/cli/projectCreate.ts +1 -1
- package/src/index.ts +1 -1
- package/src/server/impl/actions_impl.ts +26 -6
- package/src/server/impl/storage_impl.ts +30 -0
- package/src/server/index.ts +5 -1
- package/src/server/meta.ts +56 -2
- package/src/server/registration.ts +10 -0
- package/src/server/schema.ts +37 -15
- package/src/server/storage.ts +17 -0
- package/src/values/validators.ts +1 -1
- package/src/values/value.ts +9 -5
|
@@ -53,6 +53,18 @@ import { deploymentDashboardUrlPage } from "./dashboard.js";
|
|
|
53
53
|
import { formatIndex, LargeIndexDeletionCheck } from "./indexes.js";
|
|
54
54
|
import { checkForLargeIndexDeletion } from "./checkForLargeIndexDeletion.js";
|
|
55
55
|
import { checkForSlowSchemaValidation } from "./checkForSlowSchemaValidation.js";
|
|
56
|
+
import {
|
|
57
|
+
checkForLargeIndexBackfill,
|
|
58
|
+
LargeIndexBackfillCheck,
|
|
59
|
+
} from "./checkForLargeIndexBackfill.js";
|
|
60
|
+
import {
|
|
61
|
+
pushStagesValidators,
|
|
62
|
+
sharedSchemaEvaluation,
|
|
63
|
+
} from "./schemaEvaluation.js";
|
|
64
|
+
import {
|
|
65
|
+
checkForStagedValidatorDeletion,
|
|
66
|
+
StagedValidatorDeletionCheck,
|
|
67
|
+
} from "./checkForStagedValidatorDeletion.js";
|
|
56
68
|
import { LogManager } from "./logs.js";
|
|
57
69
|
import { createHash } from "crypto";
|
|
58
70
|
import { Bundle, BundleHash } from "../../bundler/index.js";
|
|
@@ -76,6 +88,8 @@ export type PushOptions = {
|
|
|
76
88
|
pushAllModules: boolean;
|
|
77
89
|
logManager?: LogManager | undefined;
|
|
78
90
|
largeIndexDeletionCheck: LargeIndexDeletionCheck;
|
|
91
|
+
largeIndexBackfillCheck: LargeIndexBackfillCheck;
|
|
92
|
+
stagedValidatorDeletionCheck: StagedValidatorDeletionCheck;
|
|
79
93
|
// Whether a dry run should warn when the schema change would block the
|
|
80
94
|
// deploy on a slow table walk. On for deploys; off for commands whose dry
|
|
81
95
|
// runs never deploy (e.g. codegen).
|
|
@@ -125,6 +139,11 @@ export async function runCodegen(
|
|
|
125
139
|
liveComponentSources: options.liveComponentSources,
|
|
126
140
|
typecheckComponents: false,
|
|
127
141
|
debugNodeApis: options.debugNodeApis,
|
|
142
|
+
// Code generation uses the source schema independently of deployment data.
|
|
143
|
+
largeIndexDeletionCheck: "no verification",
|
|
144
|
+
largeIndexBackfillCheck: "no verification",
|
|
145
|
+
stagedValidatorDeletionCheck: "no verification",
|
|
146
|
+
warnOnSlowSchemaValidation: false,
|
|
128
147
|
},
|
|
129
148
|
);
|
|
130
149
|
} else {
|
|
@@ -234,6 +253,8 @@ async function startComponentsPushAndCodegen(
|
|
|
234
253
|
pushAllModules?: boolean;
|
|
235
254
|
debugNodeApis: boolean;
|
|
236
255
|
largeIndexDeletionCheck: LargeIndexDeletionCheck;
|
|
256
|
+
largeIndexBackfillCheck: LargeIndexBackfillCheck;
|
|
257
|
+
stagedValidatorDeletionCheck: StagedValidatorDeletionCheck;
|
|
237
258
|
warnOnSlowSchemaValidation: boolean;
|
|
238
259
|
codegenOnlyThisComponent?: string | undefined;
|
|
239
260
|
},
|
|
@@ -451,6 +472,11 @@ async function startComponentsPushAndCodegen(
|
|
|
451
472
|
}
|
|
452
473
|
logStartPushSizes(parentSpan, startPushRequest);
|
|
453
474
|
|
|
475
|
+
const schemaEvaluation = sharedSchemaEvaluation(
|
|
476
|
+
ctx,
|
|
477
|
+
startPushRequest,
|
|
478
|
+
options,
|
|
479
|
+
);
|
|
454
480
|
if (options.largeIndexDeletionCheck !== "no verification") {
|
|
455
481
|
await parentSpan.enterAsync("checkForLargeIndexDeletion", (span) =>
|
|
456
482
|
checkForLargeIndexDeletion({
|
|
@@ -458,19 +484,60 @@ async function startComponentsPushAndCodegen(
|
|
|
458
484
|
span,
|
|
459
485
|
request: startPushRequest,
|
|
460
486
|
options,
|
|
487
|
+
schemaEvaluation,
|
|
461
488
|
askForConfirmation:
|
|
462
489
|
options.largeIndexDeletionCheck === "ask for confirmation",
|
|
463
490
|
}),
|
|
464
491
|
);
|
|
465
492
|
}
|
|
466
493
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
494
|
+
const largeIndexBackfillCheck = options.largeIndexBackfillCheck;
|
|
495
|
+
if (largeIndexBackfillCheck !== "no verification") {
|
|
496
|
+
await parentSpan.enterAsync("checkForLargeIndexBackfill", (span) =>
|
|
497
|
+
checkForLargeIndexBackfill({
|
|
470
498
|
ctx,
|
|
471
499
|
span,
|
|
472
|
-
|
|
500
|
+
schemaEvaluation,
|
|
473
501
|
options,
|
|
502
|
+
// A dry run never blocks on a backfill, so it only reports.
|
|
503
|
+
mode: options.dryRun ? "warn" : largeIndexBackfillCheck,
|
|
504
|
+
}),
|
|
505
|
+
);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const stagedValidatorDeletionCheck = options.stagedValidatorDeletionCheck;
|
|
509
|
+
if (stagedValidatorDeletionCheck !== "no verification") {
|
|
510
|
+
await parentSpan.enterAsync(
|
|
511
|
+
"checkForStagedValidatorDeletion",
|
|
512
|
+
async (span) => {
|
|
513
|
+
const response = await schemaEvaluation(span);
|
|
514
|
+
await checkForStagedValidatorDeletion({
|
|
515
|
+
ctx,
|
|
516
|
+
response,
|
|
517
|
+
askForConfirmation:
|
|
518
|
+
stagedValidatorDeletionCheck === "ask for confirmation",
|
|
519
|
+
// A dry run previews the confirmation required by a real push.
|
|
520
|
+
dryRun: options.dryRun,
|
|
521
|
+
});
|
|
522
|
+
},
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// A real push evaluates the schema only when the evaluation is already
|
|
527
|
+
// paid for by the unstaging check or the pushed schema stages a validator,
|
|
528
|
+
// so `dev` pushes of ordinary schemas skip the isolate evaluation and round
|
|
529
|
+
// trip that the status report would otherwise add on every save.
|
|
530
|
+
if (
|
|
531
|
+
options.warnOnSlowSchemaValidation &&
|
|
532
|
+
(options.dryRun ||
|
|
533
|
+
stagedValidatorDeletionCheck !== "no verification" ||
|
|
534
|
+
pushStagesValidators(startPushRequest))
|
|
535
|
+
) {
|
|
536
|
+
await parentSpan.enterAsync("checkForSlowSchemaValidation", (span) =>
|
|
537
|
+
checkForSlowSchemaValidation({
|
|
538
|
+
span,
|
|
539
|
+
schemaEvaluation,
|
|
540
|
+
dryRun: options.dryRun,
|
|
474
541
|
}),
|
|
475
542
|
);
|
|
476
543
|
}
|
package/src/cli/lib/config.ts
CHANGED
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
} from "./localDeployment/errors.js";
|
|
43
43
|
import { debugIsolateBundlesSerially } from "../../bundler/debugBundle.js";
|
|
44
44
|
import { DeploymentType } from "./api.js";
|
|
45
|
+
import { isAnonymousDeployment } from "./deployment.js";
|
|
45
46
|
export { productionProvisionHost, provisionHost } from "./utils/utils.js";
|
|
46
47
|
|
|
47
48
|
/** Type representing WorkOS AuthKit integration configuration. */
|
|
@@ -672,7 +673,7 @@ export async function configFromProjectConfig(
|
|
|
672
673
|
}
|
|
673
674
|
const modules = convexResult.modules;
|
|
674
675
|
modules.push(...nodeResult.modules);
|
|
675
|
-
modules.push(...(await bundleAuthConfig(ctx, baseDir)));
|
|
676
|
+
modules.push(...(await bundleAuthConfig(ctx, baseDir)).modules);
|
|
676
677
|
|
|
677
678
|
const nodeDependencies: NodeDependency[] = [];
|
|
678
679
|
for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {
|
|
@@ -911,6 +912,49 @@ export function diffConfig(
|
|
|
911
912
|
return { diffString: diff };
|
|
912
913
|
}
|
|
913
914
|
|
|
915
|
+
export function setEnvVarsInstructions(
|
|
916
|
+
names: string[],
|
|
917
|
+
deploymentName: string | null,
|
|
918
|
+
deploymentType: DeploymentType | undefined,
|
|
919
|
+
deploymentUrl: string | undefined,
|
|
920
|
+
): string {
|
|
921
|
+
// Name cloud deployments explicitly: without a flag `env set` targets the
|
|
922
|
+
// project's default dev deployment, which may not be where this push went
|
|
923
|
+
// (e.g. `npx convex dev --deployment <other dev deployment>`). Local and
|
|
924
|
+
// anonymous deployments are always the default target.
|
|
925
|
+
let deploymentFlag = "";
|
|
926
|
+
if (
|
|
927
|
+
deploymentName !== null &&
|
|
928
|
+
deploymentType !== "local" &&
|
|
929
|
+
deploymentType !== "anonymous"
|
|
930
|
+
) {
|
|
931
|
+
deploymentFlag = ` --deployment ${deploymentName}`;
|
|
932
|
+
} else if (deploymentType === "prod") {
|
|
933
|
+
deploymentFlag = " --prod";
|
|
934
|
+
} else if (deploymentName === null && deploymentUrl !== undefined) {
|
|
935
|
+
// Pushes via `--url`/`--admin-key` or self-hosted env vars have no
|
|
936
|
+
// deployment name. The admin key stays a placeholder to keep it out of
|
|
937
|
+
// terminal output.
|
|
938
|
+
deploymentFlag = ` --url ${deploymentUrl} --admin-key <admin key>`;
|
|
939
|
+
}
|
|
940
|
+
const commands = (names.length > 0 ? names : ["<NAME>"]).map(
|
|
941
|
+
(name) =>
|
|
942
|
+
` ${chalkStderr.bold(`npx convex env set${deploymentFlag} ${name} <value>`)}`,
|
|
943
|
+
);
|
|
944
|
+
let instructions = `Set ${names.length > 1 ? "them" : "it"} with:\n\n${commands.join("\n")}\n`;
|
|
945
|
+
// Anonymous deployments are only reachable from the local dashboard, which
|
|
946
|
+
// `deploymentDashboardUrlPage` can't address.
|
|
947
|
+
if (deploymentName !== null && !isAnonymousDeployment(deploymentName)) {
|
|
948
|
+
const variableQuery = names.length === 1 ? `?var=${names[0]}` : "";
|
|
949
|
+
const dashboardUrl = deploymentDashboardUrlPage(
|
|
950
|
+
deploymentName,
|
|
951
|
+
`/settings/environment-variables${variableQuery}`,
|
|
952
|
+
);
|
|
953
|
+
instructions += `\nor in the dashboard:\n\n ${chalkStderr.bold(dashboardUrl)}\n`;
|
|
954
|
+
}
|
|
955
|
+
return instructions;
|
|
956
|
+
}
|
|
957
|
+
|
|
914
958
|
/** Handle an error from
|
|
915
959
|
* legacy push path:
|
|
916
960
|
* - /api/push_config
|
|
@@ -934,7 +978,7 @@ export async function handlePushConfigError(
|
|
|
934
978
|
deploymentNotice: string;
|
|
935
979
|
}
|
|
936
980
|
| undefined,
|
|
937
|
-
|
|
981
|
+
deploymentType: DeploymentType | undefined,
|
|
938
982
|
): Promise<never> {
|
|
939
983
|
const data: ErrorData | undefined =
|
|
940
984
|
error instanceof ThrowingFetchError ? error.serverErrorData : undefined;
|
|
@@ -965,26 +1009,49 @@ export async function handlePushConfigError(
|
|
|
965
1009
|
`Environment variable ${chalkStderr.bold(
|
|
966
1010
|
variableName,
|
|
967
1011
|
)} is used in auth config file but ` + `its value was not set.`;
|
|
968
|
-
let setEnvVarInstructions =
|
|
969
|
-
"Go set it in the dashboard or using `npx convex env set`";
|
|
970
|
-
|
|
971
|
-
// If `npx convex dev` is running using --url there might not be a configured deployment
|
|
972
|
-
if (deploymentName !== null) {
|
|
973
|
-
const variableQuery =
|
|
974
|
-
variableName !== undefined ? `?var=${variableName}` : "";
|
|
975
|
-
const dashboardUrl = deploymentDashboardUrlPage(
|
|
976
|
-
deploymentName,
|
|
977
|
-
`/settings/environment-variables${variableQuery}`,
|
|
978
|
-
);
|
|
979
|
-
setEnvVarInstructions = `Go to:\n\n ${chalkStderr.bold(
|
|
980
|
-
dashboardUrl,
|
|
981
|
-
)}\n\n to set it up. `;
|
|
982
|
-
}
|
|
983
1012
|
await ctx.crash({
|
|
984
1013
|
exitCode: 1,
|
|
985
1014
|
errorType: "invalid filesystem or env vars",
|
|
986
1015
|
errForSentry: error,
|
|
987
|
-
printedMessage:
|
|
1016
|
+
printedMessage:
|
|
1017
|
+
envVarMessage +
|
|
1018
|
+
"\n" +
|
|
1019
|
+
setEnvVarsInstructions(
|
|
1020
|
+
variableName !== undefined ? [variableName] : [],
|
|
1021
|
+
deploymentName,
|
|
1022
|
+
deploymentType,
|
|
1023
|
+
deployment?.deploymentUrl,
|
|
1024
|
+
),
|
|
1025
|
+
});
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
if (data?.code === "MissingEnvironmentVariables") {
|
|
1029
|
+
const errorMessage = data.message || "(no error message given)";
|
|
1030
|
+
const [, namesList] = errorMessage.match(/are not set: ([^.]+)\./) ?? [];
|
|
1031
|
+
const names = namesList?.split(", ") ?? [];
|
|
1032
|
+
const envVarMessage =
|
|
1033
|
+
names.length === 0
|
|
1034
|
+
? errorMessage
|
|
1035
|
+
: names.length === 1
|
|
1036
|
+
? `Environment variable ${chalkStderr.bold(names[0])} is ` +
|
|
1037
|
+
`declared as required in convex.config.ts but its value was not set.`
|
|
1038
|
+
: `Environment variables ${names
|
|
1039
|
+
.map((name) => chalkStderr.bold(name))
|
|
1040
|
+
.join(", ")} are declared as required in convex.config.ts ` +
|
|
1041
|
+
`but their values were not set.`;
|
|
1042
|
+
await ctx.crash({
|
|
1043
|
+
exitCode: 1,
|
|
1044
|
+
errorType: "invalid filesystem or env vars",
|
|
1045
|
+
errForSentry: error,
|
|
1046
|
+
printedMessage:
|
|
1047
|
+
envVarMessage +
|
|
1048
|
+
"\n" +
|
|
1049
|
+
setEnvVarsInstructions(
|
|
1050
|
+
names,
|
|
1051
|
+
deploymentName,
|
|
1052
|
+
deploymentType,
|
|
1053
|
+
deployment?.deploymentUrl,
|
|
1054
|
+
),
|
|
988
1055
|
});
|
|
989
1056
|
}
|
|
990
1057
|
|
package/src/cli/lib/deploy2.ts
CHANGED
|
@@ -457,7 +457,9 @@ export async function deployToDeployment(
|
|
|
457
457
|
writePushRequest?: string | undefined;
|
|
458
458
|
liveComponentSources?: boolean | undefined;
|
|
459
459
|
skipWorkosCheck?: boolean | undefined;
|
|
460
|
+
skipLargeIndexesCheck: boolean;
|
|
460
461
|
allowDeletingLargeIndexes: boolean;
|
|
462
|
+
allowUnstagingSchema: boolean;
|
|
461
463
|
message: string | null;
|
|
462
464
|
},
|
|
463
465
|
) {
|
|
@@ -504,7 +506,14 @@ export async function deployToDeployment(
|
|
|
504
506
|
writePushRequest: options.writePushRequest,
|
|
505
507
|
liveComponentSources: !!options.liveComponentSources,
|
|
506
508
|
pushAllModules: !!options.pushAllModules,
|
|
507
|
-
largeIndexDeletionCheck:
|
|
509
|
+
largeIndexDeletionCheck:
|
|
510
|
+
options.skipLargeIndexesCheck || options.allowDeletingLargeIndexes
|
|
511
|
+
? "has confirmation"
|
|
512
|
+
: "ask for confirmation",
|
|
513
|
+
largeIndexBackfillCheck: options.skipLargeIndexesCheck
|
|
514
|
+
? "has confirmation"
|
|
515
|
+
: "ask for confirmation",
|
|
516
|
+
stagedValidatorDeletionCheck: options.allowUnstagingSchema
|
|
508
517
|
? "has confirmation"
|
|
509
518
|
: "ask for confirmation",
|
|
510
519
|
warnOnSlowSchemaValidation: true,
|
|
@@ -10,6 +10,7 @@ import { looseObject } from "./utils.js";
|
|
|
10
10
|
export const tableValidationOutcome = z.enum([
|
|
11
11
|
"notValidated",
|
|
12
12
|
"supersetOfEnforced",
|
|
13
|
+
"supersetOfStagedValidated",
|
|
13
14
|
"supersetOfShape",
|
|
14
15
|
"mustWalk",
|
|
15
16
|
]);
|
|
@@ -24,11 +25,26 @@ export const indexChangePrediction = z.enum([
|
|
|
24
25
|
]);
|
|
25
26
|
export type IndexChangePrediction = z.infer<typeof indexChangePrediction>;
|
|
26
27
|
|
|
28
|
+
// Mirrors `StagedValidatorState` in
|
|
29
|
+
// `crates/application/src/deploy_config.rs`.
|
|
30
|
+
export const stagedValidatorState = z.union([
|
|
31
|
+
looseObject({
|
|
32
|
+
state: z.literal("pending"),
|
|
33
|
+
numDocsValidated: z.number(),
|
|
34
|
+
totalDocs: z.number().nullable().optional(),
|
|
35
|
+
}),
|
|
36
|
+
looseObject({ state: z.literal("valid") }),
|
|
37
|
+
looseObject({ state: z.literal("failed"), error: z.string() }),
|
|
38
|
+
]);
|
|
39
|
+
export type StagedValidatorState = z.infer<typeof stagedValidatorState>;
|
|
40
|
+
|
|
27
41
|
export const tablePrediction = looseObject({
|
|
28
42
|
name: z.string(),
|
|
29
43
|
outcome: tableValidationOutcome,
|
|
30
44
|
numDocs: z.number(),
|
|
31
45
|
sizeBytes: z.number(),
|
|
46
|
+
staged: stagedValidatorState.optional(),
|
|
47
|
+
canSkipAfterStagedValidation: z.boolean().optional(),
|
|
32
48
|
});
|
|
33
49
|
export type TablePrediction = z.infer<typeof tablePrediction>;
|
|
34
50
|
|
|
@@ -42,11 +58,30 @@ export const indexPrediction = z.intersection(
|
|
|
42
58
|
);
|
|
43
59
|
export type IndexPrediction = z.infer<typeof indexPrediction>;
|
|
44
60
|
|
|
61
|
+
// Mirrors `SerializedDiscardedStagedValidator` in
|
|
62
|
+
// `crates/local_backend/src/deploy_config2.rs`. The backend never discards a
|
|
63
|
+
// failed validator, since a redeploy retries it anyway.
|
|
64
|
+
export const discardedStagedValidator = looseObject({
|
|
65
|
+
tableName: z.string(),
|
|
66
|
+
state: z.union([
|
|
67
|
+
looseObject({
|
|
68
|
+
state: z.literal("pending"),
|
|
69
|
+
numDocsValidated: z.number(),
|
|
70
|
+
totalDocs: z.number().nullable().optional(),
|
|
71
|
+
}),
|
|
72
|
+
looseObject({ state: z.literal("valid") }),
|
|
73
|
+
]),
|
|
74
|
+
replaced: z.boolean(),
|
|
75
|
+
});
|
|
76
|
+
export type DiscardedStagedValidator = z.infer<typeof discardedStagedValidator>;
|
|
77
|
+
|
|
45
78
|
export const componentSchemaPrediction = looseObject({
|
|
46
79
|
definitionPath: z.string(),
|
|
47
80
|
schemaValidation: z.boolean(),
|
|
48
81
|
tables: z.array(tablePrediction),
|
|
49
82
|
indexes: z.array(indexPrediction),
|
|
83
|
+
// Optional: responses from backends predating the field.
|
|
84
|
+
discardedStagedValidators: z.array(discardedStagedValidator).optional(),
|
|
50
85
|
});
|
|
51
86
|
export type ComponentSchemaPrediction = z.infer<
|
|
52
87
|
typeof componentSchemaPrediction
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Context } from "../../bundler/context.js";
|
|
2
|
+
import { logWarning } from "../../bundler/log.js";
|
|
3
|
+
import {
|
|
4
|
+
deploymentNameFromAdminKey,
|
|
5
|
+
deploymentTypeFromAdminKey,
|
|
6
|
+
isDeploymentKey,
|
|
7
|
+
isPreviewDeployKey,
|
|
8
|
+
isProjectKey,
|
|
9
|
+
} from "./deployment.js";
|
|
10
|
+
import { getDeployKeySource } from "./envvars.js";
|
|
11
|
+
import { IGNORED_DEPLOY_KEY, readDeployKeyFromEnv } from "./utils/utils.js";
|
|
12
|
+
|
|
13
|
+
const warnedContexts = new WeakSet<Context>();
|
|
14
|
+
|
|
15
|
+
export function warnIfDeployKeyOverridesLogin(
|
|
16
|
+
ctx: Context,
|
|
17
|
+
hasAccount: boolean,
|
|
18
|
+
) {
|
|
19
|
+
if (
|
|
20
|
+
!hasAccount ||
|
|
21
|
+
warnedContexts.has(ctx) ||
|
|
22
|
+
process.env.CONVEX_OVERRIDE_ACCESS_TOKEN
|
|
23
|
+
)
|
|
24
|
+
return;
|
|
25
|
+
const key = readDeployKeyFromEnv((name) => process.env[name]);
|
|
26
|
+
if (
|
|
27
|
+
key === undefined ||
|
|
28
|
+
key === IGNORED_DEPLOY_KEY ||
|
|
29
|
+
isPreviewDeployKey(key)
|
|
30
|
+
)
|
|
31
|
+
return;
|
|
32
|
+
const { envVarName, source } = getDeployKeySource(key);
|
|
33
|
+
const type = deploymentTypeFromAdminKey(key);
|
|
34
|
+
const target = isDeploymentKey(key)
|
|
35
|
+
? `${type === "prod" ? "production" : type} deployment "${deploymentNameFromAdminKey(key)}"`
|
|
36
|
+
: isProjectKey(key)
|
|
37
|
+
? "the project selected by the key"
|
|
38
|
+
: "the deployment selected by the key";
|
|
39
|
+
logWarning(
|
|
40
|
+
`WARNING: ${envVarName} in ${source} overrides your Convex account for deployment commands. They target ${target}. Remove ${envVarName} to use the selected account.`,
|
|
41
|
+
);
|
|
42
|
+
warnedContexts.add(ctx);
|
|
43
|
+
}
|
|
@@ -102,7 +102,7 @@ export async function eraseDeploymentEnvVar(ctx: Context): Promise<boolean> {
|
|
|
102
102
|
return true;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
async function gitIgnoreEnvVarFile(ctx: Context): Promise<boolean> {
|
|
105
|
+
export async function gitIgnoreEnvVarFile(ctx: Context): Promise<boolean> {
|
|
106
106
|
const gitIgnorePath = ".gitignore";
|
|
107
107
|
const gitIgnoreContents = ctx.fs.exists(gitIgnorePath)
|
|
108
108
|
? ctx.fs.readUtf8File(gitIgnorePath)
|
|
@@ -186,7 +186,7 @@ export async function deploymentNameFromAdminKeyOrCrash(
|
|
|
186
186
|
return deploymentName;
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
function deploymentNameFromAdminKey(adminKey: string) {
|
|
189
|
+
export function deploymentNameFromAdminKey(adminKey: string) {
|
|
190
190
|
const parts = adminKey.split("|");
|
|
191
191
|
if (parts.length === 1) {
|
|
192
192
|
return null;
|
|
@@ -31,18 +31,26 @@ import {
|
|
|
31
31
|
targetProjectForLocalSelector,
|
|
32
32
|
} from "./localDeployment/projectMismatch.js";
|
|
33
33
|
import { chalkStderr } from "chalk";
|
|
34
|
-
import {
|
|
34
|
+
import {
|
|
35
|
+
getBuildEnvironment,
|
|
36
|
+
loadProjectEnvironmentVariables,
|
|
37
|
+
} from "./envvars.js";
|
|
35
38
|
import { readGlobalConfig } from "./utils/globalConfig.js";
|
|
39
|
+
import {
|
|
40
|
+
getProfileSelection,
|
|
41
|
+
ProfileSelection,
|
|
42
|
+
readProfileAuth,
|
|
43
|
+
} from "./profiles.js";
|
|
36
44
|
import {
|
|
37
45
|
CONVEX_DEPLOYMENT_ENV_VAR_NAME,
|
|
38
46
|
CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
|
|
39
47
|
CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
|
|
40
48
|
CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,
|
|
41
49
|
CONVEX_SELF_HOSTED_URL_VAR_NAME,
|
|
42
|
-
ENV_VAR_FILE_PATH,
|
|
43
50
|
bigBrainAPI,
|
|
44
51
|
processDeployKeyValue,
|
|
45
52
|
readDeployKeyFromEnv,
|
|
53
|
+
readDeployKeyEnvVar,
|
|
46
54
|
typedPlatformClient,
|
|
47
55
|
} from "./utils/utils.js";
|
|
48
56
|
import * as dotenv from "dotenv";
|
|
@@ -83,10 +91,11 @@ export async function initializeBigBrainAuth(
|
|
|
83
91
|
if (initialArgs.url !== undefined && initialArgs.adminKey !== undefined) {
|
|
84
92
|
// Do not check any env vars if `url` and `adminKey` are specified via CLI
|
|
85
93
|
ctx._updateBigBrainAuth(
|
|
86
|
-
getBigBrainAuth(ctx, {
|
|
94
|
+
await getBigBrainAuth(ctx, {
|
|
87
95
|
previewDeployKey: null,
|
|
88
96
|
projectKey: null,
|
|
89
97
|
deploymentKey: null,
|
|
98
|
+
skipProfile: true,
|
|
90
99
|
}),
|
|
91
100
|
);
|
|
92
101
|
return;
|
|
@@ -106,30 +115,31 @@ export async function initializeBigBrainAuth(
|
|
|
106
115
|
const rawDeployKey = readDeployKeyFromEnv((name) => config[name]);
|
|
107
116
|
const deployKey = await processDeployKeyValue(ctx, rawDeployKey);
|
|
108
117
|
if (deployKey !== undefined) {
|
|
109
|
-
const bigBrainAuth = getBigBrainAuth(ctx, {
|
|
118
|
+
const bigBrainAuth = await getBigBrainAuth(ctx, {
|
|
110
119
|
previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,
|
|
111
120
|
projectKey: isProjectKey(deployKey) ? deployKey : null,
|
|
112
121
|
deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,
|
|
122
|
+
envFile: initialArgs.envFile,
|
|
113
123
|
});
|
|
114
124
|
ctx._updateBigBrainAuth(bigBrainAuth);
|
|
115
125
|
return;
|
|
116
126
|
}
|
|
117
127
|
// No deploy key was found in the env file, so fall back on using the global config
|
|
118
128
|
ctx._updateBigBrainAuth(
|
|
119
|
-
getBigBrainAuth(ctx, {
|
|
129
|
+
await getBigBrainAuth(ctx, {
|
|
120
130
|
previewDeployKey: null,
|
|
121
131
|
projectKey: null,
|
|
122
132
|
deploymentKey: null,
|
|
133
|
+
envFile: initialArgs.envFile,
|
|
123
134
|
}),
|
|
124
135
|
);
|
|
125
136
|
return;
|
|
126
137
|
}
|
|
127
|
-
|
|
128
|
-
dotenv.config();
|
|
138
|
+
loadProjectEnvironmentVariables();
|
|
129
139
|
const rawDeployKey = readDeployKeyFromEnv((name) => process.env[name]);
|
|
130
140
|
const deployKey = await processDeployKeyValue(ctx, rawDeployKey);
|
|
131
141
|
if (deployKey !== undefined) {
|
|
132
|
-
const bigBrainAuth = getBigBrainAuth(ctx, {
|
|
142
|
+
const bigBrainAuth = await getBigBrainAuth(ctx, {
|
|
133
143
|
previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,
|
|
134
144
|
projectKey: isProjectKey(deployKey) ? deployKey : null,
|
|
135
145
|
deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,
|
|
@@ -138,7 +148,7 @@ export async function initializeBigBrainAuth(
|
|
|
138
148
|
return;
|
|
139
149
|
}
|
|
140
150
|
ctx._updateBigBrainAuth(
|
|
141
|
-
getBigBrainAuth(ctx, {
|
|
151
|
+
await getBigBrainAuth(ctx, {
|
|
142
152
|
previewDeployKey: null,
|
|
143
153
|
projectKey: null,
|
|
144
154
|
deploymentKey: null,
|
|
@@ -150,6 +160,7 @@ export async function initializeBigBrainAuth(
|
|
|
150
160
|
export async function updateBigBrainAuthAfterLogin(
|
|
151
161
|
ctx: Context,
|
|
152
162
|
accessToken: string,
|
|
163
|
+
profile?: ProfileSelection,
|
|
153
164
|
) {
|
|
154
165
|
const existingAuth = ctx.bigBrainAuth();
|
|
155
166
|
if (existingAuth !== null && existingAuth.kind === "projectKey") {
|
|
@@ -162,6 +173,7 @@ export async function updateBigBrainAuthAfterLogin(
|
|
|
162
173
|
accessToken: accessToken,
|
|
163
174
|
kind: "accessToken",
|
|
164
175
|
header: `Bearer ${accessToken}`,
|
|
176
|
+
...(profile ? { profile } : {}),
|
|
165
177
|
});
|
|
166
178
|
}
|
|
167
179
|
|
|
@@ -169,19 +181,22 @@ export async function clearBigBrainAuth(ctx: Context) {
|
|
|
169
181
|
ctx._updateBigBrainAuth(null);
|
|
170
182
|
}
|
|
171
183
|
|
|
172
|
-
function getBigBrainAuth(
|
|
184
|
+
async function getBigBrainAuth(
|
|
173
185
|
ctx: Context,
|
|
174
186
|
opts: {
|
|
175
187
|
previewDeployKey: string | null;
|
|
176
188
|
projectKey: string | null;
|
|
177
189
|
deploymentKey: string | null;
|
|
190
|
+
envFile?: string;
|
|
191
|
+
skipProfile?: boolean;
|
|
178
192
|
},
|
|
179
|
-
): BigBrainAuth | null {
|
|
193
|
+
): Promise<BigBrainAuth | null> {
|
|
180
194
|
if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {
|
|
181
195
|
return {
|
|
182
196
|
accessToken: process.env.CONVEX_OVERRIDE_ACCESS_TOKEN,
|
|
183
197
|
kind: "accessToken",
|
|
184
198
|
header: `Bearer ${process.env.CONVEX_OVERRIDE_ACCESS_TOKEN}`,
|
|
199
|
+
profile: null,
|
|
185
200
|
};
|
|
186
201
|
}
|
|
187
202
|
if (opts.projectKey !== null) {
|
|
@@ -200,12 +215,19 @@ function getBigBrainAuth(
|
|
|
200
215
|
deploymentKey: opts.deploymentKey,
|
|
201
216
|
};
|
|
202
217
|
}
|
|
218
|
+
const profile = opts.skipProfile
|
|
219
|
+
? null
|
|
220
|
+
: await getProfileSelection(ctx, { envFile: opts.envFile });
|
|
221
|
+
if (profile !== null) {
|
|
222
|
+
return await readProfileAuth(ctx, profile);
|
|
223
|
+
}
|
|
203
224
|
const globalConfig = readGlobalConfig(ctx);
|
|
204
225
|
if (globalConfig) {
|
|
205
226
|
return {
|
|
206
227
|
kind: "accessToken",
|
|
207
228
|
header: `Bearer ${globalConfig.accessToken}`,
|
|
208
229
|
accessToken: globalConfig.accessToken,
|
|
230
|
+
profile: null,
|
|
209
231
|
};
|
|
210
232
|
}
|
|
211
233
|
if (opts.previewDeployKey !== null) {
|
|
@@ -272,9 +294,9 @@ export async function ensureAuthCanCreateDeployment(
|
|
|
272
294
|
)} and try again.`,
|
|
273
295
|
});
|
|
274
296
|
}
|
|
275
|
-
const envVar =
|
|
276
|
-
|
|
277
|
-
|
|
297
|
+
const envVar =
|
|
298
|
+
readDeployKeyEnvVar((name) => process.env[name])?.name ??
|
|
299
|
+
CONVEX_DEPLOY_KEY_ENV_VAR_NAME;
|
|
278
300
|
return await ctx.crash({
|
|
279
301
|
exitCode: 1,
|
|
280
302
|
errorType: "fatal",
|
|
@@ -569,10 +591,7 @@ async function resolveBaseDeploymentSelection(
|
|
|
569
591
|
}
|
|
570
592
|
return result.metadata;
|
|
571
593
|
}
|
|
572
|
-
|
|
573
|
-
dotenv.config({ path: ENV_VAR_FILE_PATH });
|
|
574
|
-
// for variables not already set, use .env values
|
|
575
|
-
dotenv.config();
|
|
594
|
+
loadProjectEnvironmentVariables();
|
|
576
595
|
const result = await getDeploymentSelectionFromEnv(
|
|
577
596
|
ctx,
|
|
578
597
|
selectionWithinProject,
|
package/src/cli/lib/dev.ts
CHANGED
|
@@ -60,6 +60,7 @@ export async function devAgainstDeployment(
|
|
|
60
60
|
debugNodeApis: boolean;
|
|
61
61
|
liveComponentSources: boolean;
|
|
62
62
|
pushAllModules: boolean;
|
|
63
|
+
allowUnstagingSchema: boolean;
|
|
63
64
|
},
|
|
64
65
|
) {
|
|
65
66
|
const logManager = new LogManager(devOptions.tailLogs);
|
|
@@ -148,6 +149,19 @@ export async function devAgainstDeployment(
|
|
|
148
149
|
pushAllModules: devOptions.pushAllModules,
|
|
149
150
|
logManager, // Pass logManager to control logs during deploy
|
|
150
151
|
largeIndexDeletionCheck: "no verification", // `convex dev` can’t push to prod
|
|
152
|
+
// `convex dev --prod` pushes straight to production, where an
|
|
153
|
+
// unstaged index on a large table blocks the push for the whole
|
|
154
|
+
// backfill; dev deployments are small enough to let it through.
|
|
155
|
+
largeIndexBackfillCheck:
|
|
156
|
+
credentials.deploymentType === "prod"
|
|
157
|
+
? "ask for confirmation"
|
|
158
|
+
: "no verification",
|
|
159
|
+
stagedValidatorDeletionCheck:
|
|
160
|
+
credentials.deploymentType === "prod"
|
|
161
|
+
? devOptions.allowUnstagingSchema
|
|
162
|
+
? "has confirmation"
|
|
163
|
+
: "ask for confirmation"
|
|
164
|
+
: "no verification",
|
|
151
165
|
warnOnSlowSchemaValidation: true,
|
|
152
166
|
message: null,
|
|
153
167
|
},
|
package/src/cli/lib/envvars.ts
CHANGED
|
@@ -6,7 +6,49 @@ import * as dotenv from "dotenv";
|
|
|
6
6
|
|
|
7
7
|
import { Context } from "../../bundler/context.js";
|
|
8
8
|
import { logWarning } from "../../bundler/log.js";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
|
|
11
|
+
readDeployKeyEnvVar,
|
|
12
|
+
ENV_VAR_FILE_PATH,
|
|
13
|
+
loadPackageJson,
|
|
14
|
+
} from "./utils/utils.js";
|
|
15
|
+
|
|
16
|
+
export const CONVEX_ACCOUNT_ENV_VAR = "CONVEX_ACCOUNT";
|
|
17
|
+
|
|
18
|
+
const loadedEnvironment = new Map<string, { value: string; source: string }>();
|
|
19
|
+
|
|
20
|
+
export function loadProjectEnvironmentVariables() {
|
|
21
|
+
// Only remove values supplied by our previous load; later shell overrides win.
|
|
22
|
+
for (const [name, { value }] of loadedEnvironment) {
|
|
23
|
+
if (process.env[name] === value) delete process.env[name];
|
|
24
|
+
}
|
|
25
|
+
loadedEnvironment.clear();
|
|
26
|
+
const environment: Record<string, string> = {};
|
|
27
|
+
for (const [name, value] of Object.entries(process.env)) {
|
|
28
|
+
if (value !== undefined) environment[name] = value;
|
|
29
|
+
}
|
|
30
|
+
for (const file of [ENV_VAR_FILE_PATH, ".env"]) {
|
|
31
|
+
dotenv.config({ path: file, processEnv: environment });
|
|
32
|
+
for (const [name, value] of Object.entries(environment)) {
|
|
33
|
+
// Account selection reads the current project's files directly.
|
|
34
|
+
if (name !== CONVEX_ACCOUNT_ENV_VAR && process.env[name] === undefined) {
|
|
35
|
+
process.env[name] = value;
|
|
36
|
+
loadedEnvironment.set(name, { value, source: file });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function getDeployKeySource(key: string) {
|
|
43
|
+
const envVarName =
|
|
44
|
+
readDeployKeyEnvVar((name) => process.env[name])?.name ??
|
|
45
|
+
CONVEX_DEPLOY_KEY_ENV_VAR_NAME;
|
|
46
|
+
const loaded = loadedEnvironment.get(envVarName);
|
|
47
|
+
return {
|
|
48
|
+
envVarName,
|
|
49
|
+
source: loaded?.value === key ? loaded.source : "shell environment",
|
|
50
|
+
};
|
|
51
|
+
}
|
|
10
52
|
|
|
11
53
|
const _FRAMEWORKS = [
|
|
12
54
|
"create-react-app",
|