convex 1.45.0 → 1.47.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 +105 -6
- package/dist/browser.bundle.js +7 -1
- package/dist/browser.bundle.js.map +2 -2
- package/dist/cjs/browser/http_client.js.map +2 -2
- package/dist/cjs/browser/query_options.js.map +2 -2
- package/dist/cjs/browser/simple_client.js.map +2 -2
- package/dist/cjs/browser/sync/optimistic_updates.js.map +1 -1
- package/dist/cjs/browser/sync/optimistic_updates_impl.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/codegen.js +0 -2
- package/dist/cjs/cli/codegen.js.map +2 -2
- package/dist/cjs/cli/configure.js +13 -4
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/deploy.js +28 -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/docs.js +3 -36
- package/dist/cjs/cli/docs.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 +100 -70
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js +126 -0
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
- 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 +56 -1
- 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 +32 -3
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js +101 -0
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js.map +7 -0
- package/dist/cjs/cli/lib/deployApi/finishPush.js +1 -0
- package/dist/cjs/cli/lib/deployApi/finishPush.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/startPush.js +1 -1
- package/dist/cjs/cli/lib/deployApi/startPush.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +6 -0
- package/dist/cjs/cli/lib/dev.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/generatedFunctionLogsApi.js.map +1 -1
- package/dist/cjs/cli/lib/indexes.js.map +1 -1
- package/dist/cjs/cli/lib/localDeployment/run.js +30 -1
- package/dist/cjs/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +6 -5
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/utils.js +5 -1
- package/dist/cjs/cli/lib/localDeployment/utils.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/run.js +5 -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 +84 -47
- package/dist/cjs/cli/lib/utils/utils.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/nextjs/index.js.map +2 -2
- package/dist/cjs/react/client.js.map +2 -2
- package/dist/cjs/react/hydration.js.map +2 -2
- package/dist/cjs/react/queries_observer.js.map +2 -2
- package/dist/cjs/react/use_paginated_query2.js.map +2 -2
- package/dist/cjs/react/use_queries.js.map +2 -2
- package/dist/cjs/server/api.js.map +2 -2
- package/dist/cjs/server/components/index.js.map +2 -2
- package/dist/cjs/server/cron.js +10 -10
- package/dist/cjs/server/cron.js.map +2 -2
- 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/meta_impl.js +8 -2
- package/dist/cjs/server/impl/meta_impl.js.map +2 -2
- package/dist/cjs/server/impl/scheduler_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/scheduler.js.map +1 -1
- package/dist/cjs/server/schema.js +72 -3
- package/dist/cjs/server/schema.js.map +2 -2
- package/dist/cjs/server/storage.js.map +1 -1
- package/dist/cjs/values/validator.js +1 -1
- package/dist/cjs/values/validator.js.map +2 -2
- package/dist/cjs/values/validators.js +82 -26
- 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/browser/http_client.d.ts +5 -5
- package/dist/cjs-types/browser/http_client.d.ts.map +1 -1
- package/dist/cjs-types/browser/query_options.d.ts +2 -2
- package/dist/cjs-types/browser/query_options.d.ts.map +1 -1
- package/dist/cjs-types/browser/simple_client.d.ts +6 -6
- package/dist/cjs-types/browser/simple_client.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/optimistic_updates.d.ts +4 -4
- package/dist/cjs-types/browser/sync/optimistic_updates.d.ts.map +1 -1
- package/dist/cjs-types/browser/sync/optimistic_updates_impl.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/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/docs.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 +25 -6
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts +8 -0
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
- 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 -2
- 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 +5 -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 +8 -0
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts +897 -0
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/deployApi/finishPush.d.ts +1 -2
- package/dist/cjs-types/cli/lib/deployApi/finishPush.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/formatValidationProgress.d.ts +8 -0
- package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
- package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/run.d.ts +2 -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 +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/utils.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/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 -7
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/nextjs/index.d.ts +6 -6
- package/dist/cjs-types/nextjs/index.d.ts.map +1 -1
- package/dist/cjs-types/react/client.d.ts +15 -15
- package/dist/cjs-types/react/client.d.ts.map +1 -1
- package/dist/cjs-types/react/hydration.d.ts +3 -3
- package/dist/cjs-types/react/hydration.d.ts.map +1 -1
- package/dist/cjs-types/react/queries_observer.d.ts +9 -9
- package/dist/cjs-types/react/queries_observer.d.ts.map +1 -1
- package/dist/cjs-types/react/use_paginated_query2.d.ts.map +1 -1
- package/dist/cjs-types/react/use_queries.d.ts +14 -6
- package/dist/cjs-types/react/use_queries.d.ts.map +1 -1
- package/dist/cjs-types/server/api.d.ts +157 -7
- package/dist/cjs-types/server/api.d.ts.map +1 -1
- package/dist/cjs-types/server/components/index.d.ts +2 -2
- package/dist/cjs-types/server/components/index.d.ts.map +1 -1
- package/dist/cjs-types/server/cron.d.ts +21 -20
- package/dist/cjs-types/server/cron.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/actions_impl.d.ts +22 -7
- package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/scheduler_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 +2 -2
- 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 +17 -7
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cjs-types/server/scheduler.d.ts +9 -7
- package/dist/cjs-types/server/scheduler.d.ts.map +1 -1
- package/dist/cjs-types/server/schema.d.ts +34 -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/validator.d.ts.map +1 -1
- package/dist/cjs-types/values/validators.d.ts +30 -0
- package/dist/cjs-types/values/validators.d.ts.map +1 -1
- package/dist/cjs-types/values/value.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +2728 -1627
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/browser/http_client.js.map +2 -2
- package/dist/esm/browser/query_options.js.map +2 -2
- package/dist/esm/browser/simple_client.js.map +2 -2
- package/dist/esm/browser/sync/optimistic_updates_impl.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/codegen.js +0 -2
- package/dist/esm/cli/codegen.js.map +2 -2
- package/dist/esm/cli/configure.js +12 -4
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/deploy.js +28 -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/docs.js +3 -43
- package/dist/esm/cli/docs.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 +98 -69
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js +107 -0
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
- 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 +63 -1
- 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 +33 -3
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js +72 -0
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js.map +7 -0
- package/dist/esm/cli/lib/deployApi/finishPush.js +1 -1
- package/dist/esm/cli/lib/deployApi/finishPush.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/startPush.js +1 -1
- package/dist/esm/cli/lib/deployApi/startPush.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +6 -0
- package/dist/esm/cli/lib/dev.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/indexes.js.map +1 -1
- package/dist/esm/cli/lib/localDeployment/run.js +30 -2
- package/dist/esm/cli/lib/localDeployment/run.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/upgrade.js +4 -3
- package/dist/esm/cli/lib/localDeployment/upgrade.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/utils.js +3 -0
- package/dist/esm/cli/lib/localDeployment/utils.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/run.js +5 -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 +84 -49
- package/dist/esm/cli/lib/utils/utils.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/nextjs/index.js.map +2 -2
- package/dist/esm/react/client.js.map +2 -2
- package/dist/esm/react/hydration.js +3 -1
- package/dist/esm/react/hydration.js.map +2 -2
- package/dist/esm/react/queries_observer.js +3 -1
- package/dist/esm/react/queries_observer.js.map +2 -2
- package/dist/esm/react/use_paginated_query2.js +3 -1
- package/dist/esm/react/use_paginated_query2.js.map +2 -2
- package/dist/esm/react/use_queries.js.map +2 -2
- package/dist/esm/server/api.js.map +2 -2
- package/dist/esm/server/components/index.js.map +2 -2
- package/dist/esm/server/cron.js +13 -11
- package/dist/esm/server/cron.js.map +2 -2
- 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/meta_impl.js +9 -3
- package/dist/esm/server/impl/meta_impl.js.map +2 -2
- package/dist/esm/server/impl/scheduler_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 +72 -3
- package/dist/esm/server/schema.js.map +2 -2
- package/dist/esm/values/validator.js +1 -1
- package/dist/esm/values/validator.js.map +2 -2
- package/dist/esm/values/validators.js +82 -26
- 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/browser/http_client.d.ts +5 -5
- package/dist/esm-types/browser/http_client.d.ts.map +1 -1
- package/dist/esm-types/browser/query_options.d.ts +2 -2
- package/dist/esm-types/browser/query_options.d.ts.map +1 -1
- package/dist/esm-types/browser/simple_client.d.ts +6 -6
- package/dist/esm-types/browser/simple_client.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/optimistic_updates.d.ts +4 -4
- package/dist/esm-types/browser/sync/optimistic_updates.d.ts.map +1 -1
- package/dist/esm-types/browser/sync/optimistic_updates_impl.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/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/docs.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 +25 -6
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts +8 -0
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
- 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 -2
- 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 +5 -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 +8 -0
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts +897 -0
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/deployApi/finishPush.d.ts +1 -2
- package/dist/esm-types/cli/lib/deployApi/finishPush.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/formatValidationProgress.d.ts +8 -0
- package/dist/esm-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +2 -0
- package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/run.d.ts +2 -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 +1 -0
- package/dist/esm-types/cli/lib/localDeployment/utils.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/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 -7
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/nextjs/index.d.ts +6 -6
- package/dist/esm-types/nextjs/index.d.ts.map +1 -1
- package/dist/esm-types/react/client.d.ts +15 -15
- package/dist/esm-types/react/client.d.ts.map +1 -1
- package/dist/esm-types/react/hydration.d.ts +3 -3
- package/dist/esm-types/react/hydration.d.ts.map +1 -1
- package/dist/esm-types/react/queries_observer.d.ts +9 -9
- package/dist/esm-types/react/queries_observer.d.ts.map +1 -1
- package/dist/esm-types/react/use_paginated_query2.d.ts.map +1 -1
- package/dist/esm-types/react/use_queries.d.ts +14 -6
- package/dist/esm-types/react/use_queries.d.ts.map +1 -1
- package/dist/esm-types/server/api.d.ts +157 -7
- package/dist/esm-types/server/api.d.ts.map +1 -1
- package/dist/esm-types/server/components/index.d.ts +2 -2
- package/dist/esm-types/server/components/index.d.ts.map +1 -1
- package/dist/esm-types/server/cron.d.ts +21 -20
- package/dist/esm-types/server/cron.d.ts.map +1 -1
- package/dist/esm-types/server/impl/actions_impl.d.ts +22 -7
- package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -1
- package/dist/esm-types/server/impl/scheduler_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 +2 -2
- 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 +17 -7
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/esm-types/server/scheduler.d.ts +9 -7
- package/dist/esm-types/server/scheduler.d.ts.map +1 -1
- package/dist/esm-types/server/schema.d.ts +34 -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/validator.d.ts.map +1 -1
- package/dist/esm-types/values/validators.d.ts +30 -0
- package/dist/esm-types/values/validators.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 +9 -9
- package/schemas/convex.schema.json +5 -5
- package/src/browser/http_client.ts +43 -10
- package/src/browser/query_options.ts +11 -5
- package/src/browser/simple_client.ts +35 -14
- package/src/browser/sync/optimistic_updates.ts +17 -4
- package/src/browser/sync/optimistic_updates_impl.ts +17 -4
- package/src/bundler/index.ts +9 -4
- package/src/cli/codegen.ts +0 -1
- package/src/cli/configure.ts +27 -7
- package/src/cli/deploy.ts +37 -5
- package/src/cli/deploymentSelect.ts +7 -4
- package/src/cli/dev.ts +9 -0
- package/src/cli/docs.ts +3 -44
- 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 +150 -91
- package/src/cli/lib/checkForSlowSchemaValidation.ts +141 -0
- package/src/cli/lib/checkForStagedValidatorDeletion.ts +104 -0
- package/src/cli/lib/codegen.ts +0 -2
- package/src/cli/lib/command.ts +3 -0
- package/src/cli/lib/components/definition/bundle.ts +68 -14
- package/src/cli/lib/components.ts +84 -0
- package/src/cli/lib/config.ts +85 -18
- package/src/cli/lib/deploy2.ts +66 -2
- package/src/cli/lib/deployApi/evaluateSchema.ts +97 -0
- package/src/cli/lib/deployApi/finishPush.ts +1 -1
- package/src/cli/lib/deployApi/startPush.ts +1 -1
- package/src/cli/lib/dev.ts +15 -0
- package/src/cli/lib/formatValidationProgress.ts +35 -0
- package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
- package/src/cli/lib/indexes.ts +1 -1
- package/src/cli/lib/localDeployment/run.ts +44 -2
- package/src/cli/lib/localDeployment/upgrade.ts +4 -6
- package/src/cli/lib/localDeployment/utils.ts +6 -0
- package/src/cli/lib/mcp/tools/env.ts +17 -3
- package/src/cli/lib/run.ts +3 -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 +127 -56
- package/src/cli/projectCreate.ts +1 -1
- package/src/index.ts +1 -1
- package/src/nextjs/index.ts +19 -8
- package/src/react/client.ts +73 -30
- package/src/react/hydration.tsx +14 -6
- package/src/react/queries_observer.ts +19 -16
- package/src/react/use_paginated_query2.ts +10 -6
- package/src/react/use_queries.ts +23 -7
- package/src/server/api.ts +220 -14
- package/src/server/components/index.ts +4 -6
- package/src/server/cron.ts +34 -24
- package/src/server/impl/actions_impl.ts +39 -10
- package/src/server/impl/meta_impl.ts +8 -1
- package/src/server/impl/scheduler_impl.ts +13 -6
- package/src/server/impl/storage_impl.ts +30 -0
- package/src/server/index.ts +6 -1
- package/src/server/meta.ts +79 -0
- package/src/server/registration.ts +38 -7
- package/src/server/scheduler.ts +22 -7
- package/src/server/schema.ts +77 -0
- package/src/server/storage.ts +17 -0
- package/src/values/validator.ts +3 -1
- package/src/values/validators.ts +85 -27
- package/src/values/value.ts +9 -5
|
@@ -645,9 +645,11 @@ export async function bundleImplementations({
|
|
|
645
645
|
functions: Bundle[];
|
|
646
646
|
definitionPath: ComponentDefinitionPath;
|
|
647
647
|
}[];
|
|
648
|
+
buildDebugInfos: BuildDebugInfo[];
|
|
648
649
|
}> {
|
|
649
650
|
let appImplementation;
|
|
650
651
|
const componentImplementations = [];
|
|
652
|
+
const buildDebugInfos: BuildDebugInfo[] = [];
|
|
651
653
|
|
|
652
654
|
// For --component-dir flag, skip bundling root implementations (no real code to bundle)
|
|
653
655
|
const directoriesToBundle = rootComponentDirectory.syntheticComponentImport
|
|
@@ -660,13 +662,25 @@ export async function bundleImplementations({
|
|
|
660
662
|
rootComponentDirectory.path,
|
|
661
663
|
directory.path,
|
|
662
664
|
);
|
|
665
|
+
// definitionPath is the canonical form
|
|
666
|
+
const definitionPath = toComponentDefinitionPath(
|
|
667
|
+
rootComponentDirectory,
|
|
668
|
+
directory,
|
|
669
|
+
);
|
|
663
670
|
let schema;
|
|
664
|
-
if (
|
|
665
|
-
schema
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
671
|
+
if (
|
|
672
|
+
ctx.fs.exists(path.resolve(resolvedPath, "schema.ts")) ||
|
|
673
|
+
ctx.fs.exists(path.resolve(resolvedPath, "schema.js"))
|
|
674
|
+
) {
|
|
675
|
+
const schemaResult = await bundleSchema(
|
|
676
|
+
ctx,
|
|
677
|
+
resolvedPath,
|
|
678
|
+
extraConditions,
|
|
679
|
+
);
|
|
680
|
+
buildDebugInfos.push(
|
|
681
|
+
buildDebugInfo(directory, definitionPath, "schema", schemaResult),
|
|
682
|
+
);
|
|
683
|
+
schema = schemaResult.modules[0] || null;
|
|
670
684
|
} else {
|
|
671
685
|
schema = null;
|
|
672
686
|
}
|
|
@@ -676,6 +690,7 @@ export async function bundleImplementations({
|
|
|
676
690
|
modules: Bundle[];
|
|
677
691
|
externalDependencies: Map<string, string>;
|
|
678
692
|
bundledModuleNames: Set<string>;
|
|
693
|
+
metafile: Metafile | null;
|
|
679
694
|
} = await bundle({
|
|
680
695
|
ctx,
|
|
681
696
|
dir: resolvedPath,
|
|
@@ -693,6 +708,9 @@ export async function bundleImplementations({
|
|
|
693
708
|
printedMessage: "external dependencies not supported",
|
|
694
709
|
});
|
|
695
710
|
}
|
|
711
|
+
buildDebugInfos.push(
|
|
712
|
+
buildDebugInfo(directory, definitionPath, "convex", convexResult),
|
|
713
|
+
);
|
|
696
714
|
const functions = convexResult.modules;
|
|
697
715
|
if (isRoot) {
|
|
698
716
|
if (verbose) {
|
|
@@ -702,6 +720,7 @@ export async function bundleImplementations({
|
|
|
702
720
|
modules: Bundle[];
|
|
703
721
|
externalDependencies: Map<string, string>;
|
|
704
722
|
bundledModuleNames: Set<string>;
|
|
723
|
+
metafile: Metafile | null;
|
|
705
724
|
} = await bundle({
|
|
706
725
|
ctx,
|
|
707
726
|
dir: resolvedPath,
|
|
@@ -713,6 +732,9 @@ export async function bundleImplementations({
|
|
|
713
732
|
extraConditions,
|
|
714
733
|
includeSourcesContent,
|
|
715
734
|
});
|
|
735
|
+
buildDebugInfos.push(
|
|
736
|
+
buildDebugInfo(directory, definitionPath, "node", nodeResult),
|
|
737
|
+
);
|
|
716
738
|
|
|
717
739
|
const externalNodeDependencies: NodeDependency[] = [];
|
|
718
740
|
for (const [
|
|
@@ -724,10 +746,15 @@ export async function bundleImplementations({
|
|
|
724
746
|
version: moduleVersion,
|
|
725
747
|
});
|
|
726
748
|
}
|
|
727
|
-
const
|
|
749
|
+
const authResult = await bundleAuthConfig(ctx, resolvedPath);
|
|
750
|
+
buildDebugInfos.push(
|
|
751
|
+
buildDebugInfo(directory, definitionPath, "auth", authResult),
|
|
752
|
+
);
|
|
728
753
|
appImplementation = {
|
|
729
754
|
schema,
|
|
730
|
-
functions: functions
|
|
755
|
+
functions: functions
|
|
756
|
+
.concat(nodeResult.modules)
|
|
757
|
+
.concat(authResult.modules),
|
|
731
758
|
externalNodeDependencies,
|
|
732
759
|
};
|
|
733
760
|
} else {
|
|
@@ -757,11 +784,6 @@ export async function bundleImplementations({
|
|
|
757
784
|
});
|
|
758
785
|
}
|
|
759
786
|
}
|
|
760
|
-
// definitionPath is the canonical form
|
|
761
|
-
const definitionPath = toComponentDefinitionPath(
|
|
762
|
-
rootComponentDirectory,
|
|
763
|
-
directory,
|
|
764
|
-
);
|
|
765
787
|
componentImplementations.push({ definitionPath, schema, functions });
|
|
766
788
|
}
|
|
767
789
|
}
|
|
@@ -783,7 +805,39 @@ export async function bundleImplementations({
|
|
|
783
805
|
}
|
|
784
806
|
}
|
|
785
807
|
|
|
786
|
-
return { appImplementation, componentImplementations };
|
|
808
|
+
return { appImplementation, componentImplementations, buildDebugInfos };
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* Debug information for a build in a push.
|
|
813
|
+
*/
|
|
814
|
+
export type BuildDebugInfo = {
|
|
815
|
+
directory: ComponentDirectory;
|
|
816
|
+
definitionPath: ComponentDefinitionPath;
|
|
817
|
+
kind: "convex" | "node" | "schema" | "auth";
|
|
818
|
+
metafile: Metafile | null;
|
|
819
|
+
modules: Bundle[];
|
|
820
|
+
externalDependencies: Map<string, string>;
|
|
821
|
+
};
|
|
822
|
+
|
|
823
|
+
function buildDebugInfo(
|
|
824
|
+
directory: ComponentDirectory,
|
|
825
|
+
definitionPath: ComponentDefinitionPath,
|
|
826
|
+
kind: BuildDebugInfo["kind"],
|
|
827
|
+
result: {
|
|
828
|
+
modules: Bundle[];
|
|
829
|
+
metafile: Metafile | null;
|
|
830
|
+
externalDependencies?: Map<string, string>;
|
|
831
|
+
},
|
|
832
|
+
): BuildDebugInfo {
|
|
833
|
+
return {
|
|
834
|
+
directory,
|
|
835
|
+
definitionPath,
|
|
836
|
+
kind,
|
|
837
|
+
metafile: result.metafile,
|
|
838
|
+
modules: result.modules,
|
|
839
|
+
externalDependencies: result.externalDependencies ?? new Map(),
|
|
840
|
+
};
|
|
787
841
|
}
|
|
788
842
|
|
|
789
843
|
async function registerEsbuildReads(
|
|
@@ -52,6 +52,19 @@ import { DeploymentType } from "./api.js";
|
|
|
52
52
|
import { deploymentDashboardUrlPage } from "./dashboard.js";
|
|
53
53
|
import { formatIndex, LargeIndexDeletionCheck } from "./indexes.js";
|
|
54
54
|
import { checkForLargeIndexDeletion } from "./checkForLargeIndexDeletion.js";
|
|
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";
|
|
55
68
|
import { LogManager } from "./logs.js";
|
|
56
69
|
import { createHash } from "crypto";
|
|
57
70
|
import { Bundle, BundleHash } from "../../bundler/index.js";
|
|
@@ -75,6 +88,12 @@ export type PushOptions = {
|
|
|
75
88
|
pushAllModules: boolean;
|
|
76
89
|
logManager?: LogManager | undefined;
|
|
77
90
|
largeIndexDeletionCheck: LargeIndexDeletionCheck;
|
|
91
|
+
largeIndexBackfillCheck: LargeIndexBackfillCheck;
|
|
92
|
+
stagedValidatorDeletionCheck: StagedValidatorDeletionCheck;
|
|
93
|
+
// Whether a dry run should warn when the schema change would block the
|
|
94
|
+
// deploy on a slow table walk. On for deploys; off for commands whose dry
|
|
95
|
+
// runs never deploy (e.g. codegen).
|
|
96
|
+
warnOnSlowSchemaValidation: boolean;
|
|
78
97
|
message: string | null;
|
|
79
98
|
};
|
|
80
99
|
|
|
@@ -120,6 +139,11 @@ export async function runCodegen(
|
|
|
120
139
|
liveComponentSources: options.liveComponentSources,
|
|
121
140
|
typecheckComponents: false,
|
|
122
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,
|
|
123
147
|
},
|
|
124
148
|
);
|
|
125
149
|
} else {
|
|
@@ -229,6 +253,9 @@ async function startComponentsPushAndCodegen(
|
|
|
229
253
|
pushAllModules?: boolean;
|
|
230
254
|
debugNodeApis: boolean;
|
|
231
255
|
largeIndexDeletionCheck: LargeIndexDeletionCheck;
|
|
256
|
+
largeIndexBackfillCheck: LargeIndexBackfillCheck;
|
|
257
|
+
stagedValidatorDeletionCheck: StagedValidatorDeletionCheck;
|
|
258
|
+
warnOnSlowSchemaValidation: boolean;
|
|
232
259
|
codegenOnlyThisComponent?: string | undefined;
|
|
233
260
|
},
|
|
234
261
|
): Promise<StartPushResponse | null> {
|
|
@@ -445,6 +472,11 @@ async function startComponentsPushAndCodegen(
|
|
|
445
472
|
}
|
|
446
473
|
logStartPushSizes(parentSpan, startPushRequest);
|
|
447
474
|
|
|
475
|
+
const schemaEvaluation = sharedSchemaEvaluation(
|
|
476
|
+
ctx,
|
|
477
|
+
startPushRequest,
|
|
478
|
+
options,
|
|
479
|
+
);
|
|
448
480
|
if (options.largeIndexDeletionCheck !== "no verification") {
|
|
449
481
|
await parentSpan.enterAsync("checkForLargeIndexDeletion", (span) =>
|
|
450
482
|
checkForLargeIndexDeletion({
|
|
@@ -452,12 +484,64 @@ async function startComponentsPushAndCodegen(
|
|
|
452
484
|
span,
|
|
453
485
|
request: startPushRequest,
|
|
454
486
|
options,
|
|
487
|
+
schemaEvaluation,
|
|
455
488
|
askForConfirmation:
|
|
456
489
|
options.largeIndexDeletionCheck === "ask for confirmation",
|
|
457
490
|
}),
|
|
458
491
|
);
|
|
459
492
|
}
|
|
460
493
|
|
|
494
|
+
const largeIndexBackfillCheck = options.largeIndexBackfillCheck;
|
|
495
|
+
if (largeIndexBackfillCheck !== "no verification") {
|
|
496
|
+
await parentSpan.enterAsync("checkForLargeIndexBackfill", (span) =>
|
|
497
|
+
checkForLargeIndexBackfill({
|
|
498
|
+
ctx,
|
|
499
|
+
span,
|
|
500
|
+
schemaEvaluation,
|
|
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,
|
|
541
|
+
}),
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
|
|
461
545
|
changeSpinner("Uploading functions to Convex...");
|
|
462
546
|
const startPushResponse = await parentSpan.enterAsync("startPush", (span) =>
|
|
463
547
|
startPush(ctx, span, startPushRequest, options),
|
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
|
@@ -22,6 +22,10 @@ import {
|
|
|
22
22
|
startPushResponse,
|
|
23
23
|
StartPushResponse,
|
|
24
24
|
} from "./deployApi/startPush.js";
|
|
25
|
+
import {
|
|
26
|
+
EvaluateSchemaResponse,
|
|
27
|
+
evaluateSchemaResponse,
|
|
28
|
+
} from "./deployApi/evaluateSchema.js";
|
|
25
29
|
import {
|
|
26
30
|
AppDefinitionConfig,
|
|
27
31
|
ComponentDefinitionConfig,
|
|
@@ -103,6 +107,35 @@ export async function evaluatePush(
|
|
|
103
107
|
return evaluatePushResponse.parse(response);
|
|
104
108
|
}
|
|
105
109
|
|
|
110
|
+
export async function evaluateSchema(
|
|
111
|
+
ctx: Context,
|
|
112
|
+
span: Span,
|
|
113
|
+
request: StartPushRequest,
|
|
114
|
+
options: {
|
|
115
|
+
url: string;
|
|
116
|
+
deploymentName: string | null;
|
|
117
|
+
deploymentType?: DeploymentType;
|
|
118
|
+
},
|
|
119
|
+
// When set, a failed evaluation throws the raw error instead of crashing
|
|
120
|
+
// the process, so best-effort callers (e.g. advisory checks) can recover.
|
|
121
|
+
bestEffort?: boolean,
|
|
122
|
+
): Promise<EvaluateSchemaResponse> {
|
|
123
|
+
const response = await pushCode(
|
|
124
|
+
ctx,
|
|
125
|
+
span,
|
|
126
|
+
request,
|
|
127
|
+
options,
|
|
128
|
+
"/api/deploy2/evaluate_schema",
|
|
129
|
+
bestEffort,
|
|
130
|
+
);
|
|
131
|
+
return evaluateSchemaResponse.parse(response);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Retries for best-effort requests, where a transient failure should be
|
|
135
|
+
// ridden out if possible but the command proceeds without the result
|
|
136
|
+
// otherwise.
|
|
137
|
+
const BEST_EFFORT_RETRIES = 5;
|
|
138
|
+
|
|
106
139
|
async function pushCode(
|
|
107
140
|
ctx: Context,
|
|
108
141
|
span: Span,
|
|
@@ -112,7 +145,11 @@ async function pushCode(
|
|
|
112
145
|
deploymentName: string | null;
|
|
113
146
|
deploymentType?: DeploymentType;
|
|
114
147
|
},
|
|
115
|
-
endpoint:
|
|
148
|
+
endpoint:
|
|
149
|
+
| "/api/deploy2/start_push"
|
|
150
|
+
| "/api/deploy2/evaluate_push"
|
|
151
|
+
| "/api/deploy2/evaluate_schema",
|
|
152
|
+
bestEffort?: boolean,
|
|
116
153
|
): Promise<unknown> {
|
|
117
154
|
// Log a summary of the push request instead of the full object
|
|
118
155
|
const unchangedModuleCount =
|
|
@@ -136,6 +173,18 @@ async function pushCode(
|
|
|
136
173
|
deploymentUrl: options.url,
|
|
137
174
|
adminKey: request.adminKey,
|
|
138
175
|
onError,
|
|
176
|
+
// Best-effort callers tolerate failure, so retry only plausibly
|
|
177
|
+
// transient conditions — network errors and 5xx responses (e.g. table
|
|
178
|
+
// summaries still bootstrapping) — and fail fast on everything else,
|
|
179
|
+
// like a 404 from a deployment whose backend doesn't yet expose the
|
|
180
|
+
// endpoint.
|
|
181
|
+
...(bestEffort
|
|
182
|
+
? {
|
|
183
|
+
maxRetries: BEST_EFFORT_RETRIES,
|
|
184
|
+
shouldRetry: (error: Error | null, response: Response | null) =>
|
|
185
|
+
error !== null || (response !== null && response.status >= 500),
|
|
186
|
+
}
|
|
187
|
+
: {}),
|
|
139
188
|
});
|
|
140
189
|
try {
|
|
141
190
|
const response = await fetch(endpoint, {
|
|
@@ -149,6 +198,11 @@ async function pushCode(
|
|
|
149
198
|
});
|
|
150
199
|
return await response.json();
|
|
151
200
|
} catch (error: unknown) {
|
|
201
|
+
if (bestEffort) {
|
|
202
|
+
// The caller handles this itself instead of crashing the process.
|
|
203
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
152
206
|
return await handlePushConfigError(
|
|
153
207
|
ctx,
|
|
154
208
|
error,
|
|
@@ -403,7 +457,9 @@ export async function deployToDeployment(
|
|
|
403
457
|
writePushRequest?: string | undefined;
|
|
404
458
|
liveComponentSources?: boolean | undefined;
|
|
405
459
|
skipWorkosCheck?: boolean | undefined;
|
|
460
|
+
skipLargeIndexesCheck: boolean;
|
|
406
461
|
allowDeletingLargeIndexes: boolean;
|
|
462
|
+
allowUnstagingSchema: boolean;
|
|
407
463
|
message: string | null;
|
|
408
464
|
},
|
|
409
465
|
) {
|
|
@@ -450,9 +506,17 @@ export async function deployToDeployment(
|
|
|
450
506
|
writePushRequest: options.writePushRequest,
|
|
451
507
|
liveComponentSources: !!options.liveComponentSources,
|
|
452
508
|
pushAllModules: !!options.pushAllModules,
|
|
453
|
-
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
|
|
454
517
|
? "has confirmation"
|
|
455
518
|
: "ask for confirmation",
|
|
519
|
+
warnOnSlowSchemaValidation: true,
|
|
456
520
|
message: options.message,
|
|
457
521
|
};
|
|
458
522
|
showSpinner(`Deploying to ${url}...${options.dryRun ? " [dry run]" : ""}`);
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { componentDefinitionPath, componentPath } from "./paths.js";
|
|
3
|
+
import { developerIndexConfig } from "./finishPush.js";
|
|
4
|
+
import { looseObject } from "./utils.js";
|
|
5
|
+
|
|
6
|
+
// Hand-mirrors `TableValidationOutcome` in
|
|
7
|
+
// `crates/common/src/schemas/mod.rs` (`#[serde(rename_all = "camelCase")]`),
|
|
8
|
+
// like the rest of this deployApi directory: there's no codegen sharing
|
|
9
|
+
// types between the Rust backend and this package.
|
|
10
|
+
export const tableValidationOutcome = z.enum([
|
|
11
|
+
"notValidated",
|
|
12
|
+
"supersetOfEnforced",
|
|
13
|
+
"supersetOfStagedValidated",
|
|
14
|
+
"supersetOfShape",
|
|
15
|
+
"mustWalk",
|
|
16
|
+
]);
|
|
17
|
+
export type TableValidationOutcome = z.infer<typeof tableValidationOutcome>;
|
|
18
|
+
|
|
19
|
+
export const indexChangePrediction = z.enum([
|
|
20
|
+
"added",
|
|
21
|
+
"identical",
|
|
22
|
+
"enabled",
|
|
23
|
+
"disabled",
|
|
24
|
+
"dropped",
|
|
25
|
+
]);
|
|
26
|
+
export type IndexChangePrediction = z.infer<typeof indexChangePrediction>;
|
|
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
|
+
|
|
41
|
+
export const tablePrediction = looseObject({
|
|
42
|
+
name: z.string(),
|
|
43
|
+
outcome: tableValidationOutcome,
|
|
44
|
+
numDocs: z.number(),
|
|
45
|
+
sizeBytes: z.number(),
|
|
46
|
+
staged: stagedValidatorState.optional(),
|
|
47
|
+
canSkipAfterStagedValidation: z.boolean().optional(),
|
|
48
|
+
});
|
|
49
|
+
export type TablePrediction = z.infer<typeof tablePrediction>;
|
|
50
|
+
|
|
51
|
+
export const indexPrediction = z.intersection(
|
|
52
|
+
developerIndexConfig,
|
|
53
|
+
looseObject({
|
|
54
|
+
change: indexChangePrediction,
|
|
55
|
+
needsBackfill: z.boolean(),
|
|
56
|
+
numDocs: z.number(),
|
|
57
|
+
}),
|
|
58
|
+
);
|
|
59
|
+
export type IndexPrediction = z.infer<typeof indexPrediction>;
|
|
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
|
+
|
|
78
|
+
export const componentSchemaPrediction = looseObject({
|
|
79
|
+
definitionPath: z.string(),
|
|
80
|
+
schemaValidation: z.boolean(),
|
|
81
|
+
tables: z.array(tablePrediction),
|
|
82
|
+
indexes: z.array(indexPrediction),
|
|
83
|
+
// Optional: responses from backends predating the field.
|
|
84
|
+
discardedStagedValidators: z.array(discardedStagedValidator).optional(),
|
|
85
|
+
});
|
|
86
|
+
export type ComponentSchemaPrediction = z.infer<
|
|
87
|
+
typeof componentSchemaPrediction
|
|
88
|
+
>;
|
|
89
|
+
|
|
90
|
+
export const evaluateSchemaResponse = looseObject({
|
|
91
|
+
componentSchemaEvaluations: z.record(
|
|
92
|
+
componentPath,
|
|
93
|
+
componentSchemaPrediction,
|
|
94
|
+
),
|
|
95
|
+
newComponentDefinitions: z.array(componentDefinitionPath),
|
|
96
|
+
});
|
|
97
|
+
export type EvaluateSchemaResponse = z.infer<typeof evaluateSchemaResponse>;
|
|
@@ -45,7 +45,7 @@ export const cronDiff = looseObject({
|
|
|
45
45
|
});
|
|
46
46
|
export type CronDiff = z.infer<typeof cronDiff>;
|
|
47
47
|
|
|
48
|
-
const developerIndexConfig = z.intersection(
|
|
48
|
+
export const developerIndexConfig = z.intersection(
|
|
49
49
|
z.discriminatedUnion("type", [
|
|
50
50
|
looseObject({
|
|
51
51
|
name: z.string(),
|
|
@@ -29,7 +29,7 @@ export type StartPushRequest = z.infer<typeof startPushRequest>;
|
|
|
29
29
|
export const schemaChange = looseObject({
|
|
30
30
|
allocatedComponentIds: z.any(),
|
|
31
31
|
schemaIds: z.any(),
|
|
32
|
-
indexDiffs: z.record(
|
|
32
|
+
indexDiffs: z.record(componentPath, indexDiff).optional(),
|
|
33
33
|
});
|
|
34
34
|
export type SchemaChange = z.infer<typeof schemaChange>;
|
|
35
35
|
|
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,20 @@ 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",
|
|
165
|
+
warnOnSlowSchemaValidation: true,
|
|
151
166
|
message: null,
|
|
152
167
|
},
|
|
153
168
|
devOptions,
|