convex 1.46.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 +58 -1
- package/dist/browser.bundle.js +7 -1
- package/dist/browser.bundle.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 -4
- 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 +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/dev.js +5 -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/indexes.js.map +1 -1
- 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 +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 +48 -18
- 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/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/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/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/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/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 +10 -2
- 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/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 +2935 -2048
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/bundler/index.js +5 -4
- package/dist/esm/bundler/index.js.map +2 -2
- package/dist/esm/cli/codegen.js +0 -4
- 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 +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/dev.js +5 -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/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 +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 +47 -18
- 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/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/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/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/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/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 +10 -2
- 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/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/index.ts +9 -4
- package/src/cli/codegen.ts +0 -2
- package/src/cli/configure.ts +27 -7
- 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/dev.ts +14 -0
- package/src/cli/lib/formatValidationProgress.ts +35 -0
- package/src/cli/lib/indexes.ts +1 -1
- package/src/cli/lib/mcp/tools/env.ts +17 -3
- 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 +64 -21
- 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
|
@@ -29,21 +29,34 @@ var import_indexes = require("./indexes.js");
|
|
|
29
29
|
var import_prompts = require("./utils/prompts.js");
|
|
30
30
|
var import_deploy2 = require("./deploy2.js");
|
|
31
31
|
var import_run = require("./run.js");
|
|
32
|
+
var import_utils = require("./utils/utils.js");
|
|
32
33
|
const MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING = 1e5;
|
|
33
34
|
async function checkForLargeIndexDeletion({
|
|
34
35
|
ctx,
|
|
35
36
|
span,
|
|
36
37
|
request,
|
|
37
38
|
options,
|
|
39
|
+
schemaEvaluation,
|
|
38
40
|
askForConfirmation
|
|
39
41
|
}) {
|
|
40
42
|
(0, import_log.changeSpinner)("Verifying that the push isn\u2019t deleting large indexes...");
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
const schemaEvaluationResponse = await schemaEvaluation(span);
|
|
44
|
+
let deletedIndexes;
|
|
45
|
+
if (schemaEvaluationResponse !== null) {
|
|
46
|
+
deletedIndexes = deletedIndexesFromSchemaEvaluation(
|
|
47
|
+
schemaEvaluationResponse
|
|
48
|
+
);
|
|
49
|
+
} else {
|
|
50
|
+
(0, import_log.logVerbose)(
|
|
51
|
+
"Schema evaluation unavailable, sizing deleted indexes per table"
|
|
52
|
+
);
|
|
53
|
+
deletedIndexes = await deletedIndexesFromTableSizes({
|
|
54
|
+
ctx,
|
|
55
|
+
span,
|
|
56
|
+
request,
|
|
57
|
+
options
|
|
58
|
+
});
|
|
59
|
+
}
|
|
47
60
|
if (deletedIndexes.length === 0) {
|
|
48
61
|
(0, import_log.logFinishedStep)("No indexes are deleted by this push");
|
|
49
62
|
return;
|
|
@@ -67,7 +80,7 @@ to be backfilled again if you want to restore it later.
|
|
|
67
80
|
`);
|
|
68
81
|
if (!askForConfirmation) {
|
|
69
82
|
(0, import_log.logFinishedStep)(
|
|
70
|
-
"Proceeding with push since
|
|
83
|
+
"Proceeding with push since deleting large indexes was allowed by flag"
|
|
71
84
|
);
|
|
72
85
|
return;
|
|
73
86
|
}
|
|
@@ -77,7 +90,7 @@ to be backfilled again if you want to restore it later.
|
|
|
77
90
|
errorType: "fatal",
|
|
78
91
|
printedMessage: `To confirm the push:
|
|
79
92
|
\u2022 run the deploy command in an ${import_chalk.chalkStderr.bold("interactive terminal")}
|
|
80
|
-
\u2022 or run the deploy command with the ${import_chalk.chalkStderr.bold("--
|
|
93
|
+
\u2022 or run the deploy command with the ${import_chalk.chalkStderr.bold("--skip-large-indexes-check")} flag`
|
|
81
94
|
});
|
|
82
95
|
}
|
|
83
96
|
(0, import_log.stopSpinner)();
|
|
@@ -93,37 +106,17 @@ to be backfilled again if you want to restore it later.
|
|
|
93
106
|
}
|
|
94
107
|
(0, import_log.logFinishedStep)("Proceeding with push.");
|
|
95
108
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
options,
|
|
108
|
-
/* bestEffort */
|
|
109
|
-
true
|
|
110
|
-
);
|
|
111
|
-
return Object.entries(response.componentSchemaEvaluations).flatMap(
|
|
112
|
-
([componentPath, prediction]) => prediction.indexes.filter((index) => index.change === "dropped").map((index) => ({
|
|
113
|
-
componentPath,
|
|
114
|
-
index,
|
|
115
|
-
documentsCount: index.numDocs,
|
|
116
|
-
replacedBy: prediction.indexes.find(
|
|
117
|
-
(other) => other.change === "added" && other.name === index.name
|
|
118
|
-
) ?? null
|
|
119
|
-
}))
|
|
120
|
-
);
|
|
121
|
-
} catch (error) {
|
|
122
|
-
(0, import_log.logVerbose)(
|
|
123
|
-
`Schema evaluation unavailable, sizing deleted indexes per table: ${error instanceof Error ? error.message : String(error)}`
|
|
124
|
-
);
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
109
|
+
function deletedIndexesFromSchemaEvaluation(response) {
|
|
110
|
+
return Object.entries(response.componentSchemaEvaluations).flatMap(
|
|
111
|
+
([componentPath, prediction]) => prediction.indexes.filter((index) => index.change === "dropped").map((index) => ({
|
|
112
|
+
componentPath,
|
|
113
|
+
index,
|
|
114
|
+
documentsCount: index.numDocs,
|
|
115
|
+
replacedBy: prediction.indexes.find(
|
|
116
|
+
(other) => other.change === "added" && other.name === index.name
|
|
117
|
+
) ?? null
|
|
118
|
+
}))
|
|
119
|
+
);
|
|
127
120
|
}
|
|
128
121
|
async function deletedIndexesFromTableSizes({
|
|
129
122
|
ctx,
|
|
@@ -194,13 +187,9 @@ function getTableName(index) {
|
|
|
194
187
|
return tableName;
|
|
195
188
|
}
|
|
196
189
|
function minDocumentsForIndexDeleteWarning() {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return parsed;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING;
|
|
190
|
+
return (0, import_utils.integerFromEnv)(
|
|
191
|
+
"CONVEX_MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING",
|
|
192
|
+
MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING
|
|
193
|
+
);
|
|
205
194
|
}
|
|
206
195
|
//# sourceMappingURL=checkForLargeIndexDeletion.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/checkForLargeIndexDeletion.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logFinishedStep,\n logMessage,\n logVerbose,\n stopSpinner,\n} from \"../../bundler/log.js\";\nimport { formatIndex } from \"./indexes.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport { Span } from \"./tracing.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport { evaluatePush
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAE5B,iBAMO;AACP,qBAA4B;AAC5B,qBAA4B;AAG5B,
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logFinishedStep,\n logMessage,\n logVerbose,\n stopSpinner,\n} from \"../../bundler/log.js\";\nimport { formatIndex } from \"./indexes.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport { Span } from \"./tracing.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport { evaluatePush } from \"./deploy2.js\";\nimport { DeveloperIndexConfig } from \"./deployApi/finishPush.js\";\nimport { EvaluateSchemaResponse } from \"./deployApi/evaluateSchema.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { SchemaEvaluation } from \"./schemaEvaluation.js\";\nimport { integerFromEnv } from \"./utils/utils.js\";\n\nconst MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING = 100_000;\n\ntype CheckOptions = {\n url: string;\n deploymentName: string | null;\n adminKey: string;\n};\n\ntype DeletedIndex = {\n // The component instance path (\"\" for the root component), matching the\n // keys of both `componentSchemaEvaluations` and `indexDiffs`.\n componentPath: string;\n index: DeveloperIndexConfig;\n documentsCount: number;\n replacedBy: DeveloperIndexConfig | null;\n};\n\nexport async function checkForLargeIndexDeletion({\n ctx,\n span,\n request,\n options,\n schemaEvaluation,\n askForConfirmation,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: CheckOptions;\n schemaEvaluation: SchemaEvaluation;\n askForConfirmation: boolean;\n}): Promise<void> {\n changeSpinner(\"Verifying that the push isn\u2019t deleting large indexes...\");\n\n const schemaEvaluationResponse = await schemaEvaluation(span);\n let deletedIndexes: DeletedIndex[];\n if (schemaEvaluationResponse !== null) {\n deletedIndexes = deletedIndexesFromSchemaEvaluation(\n schemaEvaluationResponse,\n );\n } else {\n logVerbose(\n \"Schema evaluation unavailable, sizing deleted indexes per table\",\n );\n deletedIndexes = await deletedIndexesFromTableSizes({\n ctx,\n span,\n request,\n options,\n });\n }\n\n if (deletedIndexes.length === 0) {\n logFinishedStep(\"No indexes are deleted by this push\");\n return;\n }\n\n const minDocumentsForWarning = minDocumentsForIndexDeleteWarning();\n if (\n !deletedIndexes.some(\n ({ documentsCount }) => documentsCount >= minDocumentsForWarning,\n )\n ) {\n logFinishedStep(\"No large indexes are deleted by this push\");\n return;\n }\n\n logMessage(`\u26A0\uFE0F This code push will ${chalkStderr.bold(\"delete\")} the following ${deletedIndexes.length === 1 ? \"index\" : \"indexes\"}\nfrom your production deployment (${options.url}):\n\n${deletedIndexes\n .map((deletedIndex) =>\n formatDeletedIndex({ ...deletedIndex, minDocumentsForWarning }),\n )\n .join(\"\\n\")}\n\nThe documents that are in the index won\u2019t be deleted, but the index will need\nto be backfilled again if you want to restore it later.\n`);\n\n // Either --skip-large-indexes-check or its deletion-only predecessor\n // --allow-deleting-large-indexes gets here, so name neither.\n if (!askForConfirmation) {\n logFinishedStep(\n \"Proceeding with push since deleting large indexes was allowed by flag\",\n );\n return;\n }\n\n if (!process.stdin.isTTY) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `To confirm the push:\n\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\u2022 or run the deploy command with the ${chalkStderr.bold(\"--skip-large-indexes-check\")} flag`,\n });\n }\n\n stopSpinner();\n if (\n !(await promptYesNo(ctx, {\n message: `Delete ${deletedIndexes.length === 1 ? \"this index\" : \"these indexes\"}?`,\n default: false,\n }))\n ) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Canceling push`,\n });\n }\n\n logFinishedStep(\"Proceeding with push.\");\n}\n\n// Preferred source: one schema evaluation reports every dropped index\n// together with its table's document count, requiring only the\n// `deployment:deploy` permission the push itself needs.\nexport function deletedIndexesFromSchemaEvaluation(\n response: EvaluateSchemaResponse,\n): DeletedIndex[] {\n return Object.entries(response.componentSchemaEvaluations).flatMap(\n ([componentPath, prediction]) =>\n prediction.indexes\n .filter((index) => index.change === \"dropped\")\n .map((index) => ({\n componentPath,\n index,\n documentsCount: index.numDocs,\n replacedBy:\n prediction.indexes.find(\n (other) => other.change === \"added\" && other.name === index.name,\n ) ?? null,\n })),\n );\n}\n\n// Fallback for deployments without `evaluate_schema`: diff indexes with\n// `evaluate_push`, then size each affected table with a system query. The\n// system query needs the `deployment:data:view` permission, which a\n// deploy-scoped key may lack.\nexport async function deletedIndexesFromTableSizes({\n ctx,\n span,\n request,\n options,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: CheckOptions;\n}): Promise<DeletedIndex[]> {\n const { schemaChange } = await evaluatePush(ctx, span, request, options);\n\n const indexDiffs = schemaChange.indexDiffs ?? {};\n const deletedIndexes = Object.entries(indexDiffs).flatMap(\n ([componentPath, indexDiff]) =>\n indexDiff.removed_indexes.map((index) => ({\n componentPath,\n index,\n replacedBy:\n indexDiff.added_indexes.find((other) => other.name === index.name) ??\n null,\n })),\n );\n\n if (deletedIndexes.length === 0) {\n return [];\n }\n\n const tablesWithDeletedIndexes = [\n ...new Set(\n deletedIndexes.map(\n ({ componentPath, index }) => `${componentPath}:${getTableName(index)}`,\n ),\n ),\n ].map((str) => {\n const [componentPath, table] = str.split(\":\");\n return { componentPath, table };\n });\n changeSpinner(\"Checking whether the deleted indexes are on large tables...\");\n const documentCounts = await Promise.all(\n tablesWithDeletedIndexes.map(async ({ componentPath, table }) => ({\n componentPath,\n table,\n count: (await runSystemQuery(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n functionName: \"_system/cli/tableSize:default\",\n componentPath,\n args: { tableName: table },\n })) as number,\n })),\n );\n return deletedIndexes.map(({ componentPath, index, replacedBy }) => ({\n componentPath,\n index,\n replacedBy,\n documentsCount: documentCounts.find(\n (count) =>\n count.table === getTableName(index) &&\n count.componentPath === componentPath,\n )!.count,\n }));\n}\n\nfunction formatDeletedIndex({\n componentPath,\n index,\n documentsCount,\n replacedBy,\n minDocumentsForWarning,\n}: DeletedIndex & { minDocumentsForWarning: number }) {\n const componentNameFormatted =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}:` : \"\";\n\n const documentsCountFormatted =\n documentsCount >= minDocumentsForWarning\n ? ` ${chalkStderr.yellowBright(`\u26A0\uFE0F ${documentsCount.toLocaleString()} documents`)}`\n : ` ${documentsCount.toLocaleString()} ${documentsCount === 1 ? \"document\" : \"documents\"}`;\n\n const replacedByFormatted = replacedBy\n ? `\\n ${chalkStderr.green(\"\u2192 replaced by:\")} ${formatIndex(replacedBy)}`\n : \"\";\n\n return (\n \"\u26D4 \" +\n componentNameFormatted +\n formatIndex(index) +\n documentsCountFormatted +\n replacedByFormatted\n );\n}\n\nfunction getTableName(index: DeveloperIndexConfig) {\n const [tableName, _indexName] = index.name.split(\".\");\n return tableName;\n}\n\nfunction minDocumentsForIndexDeleteWarning(): number {\n return integerFromEnv(\n \"CONVEX_MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING\",\n MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING,\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -23,24 +23,22 @@ __export(checkForSlowSchemaValidation_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(checkForSlowSchemaValidation_exports);
|
|
24
24
|
var import_chalk = require("chalk");
|
|
25
25
|
var import_log = require("../../bundler/log.js");
|
|
26
|
-
var import_deploy2 = require("./deploy2.js");
|
|
27
26
|
var import_utils = require("./utils/utils.js");
|
|
27
|
+
var import_formatValidationProgress = require("./formatValidationProgress.js");
|
|
28
28
|
const MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27;
|
|
29
29
|
async function checkForSlowSchemaValidation({
|
|
30
|
-
ctx,
|
|
31
30
|
span,
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
schemaEvaluation,
|
|
32
|
+
dryRun
|
|
34
33
|
}) {
|
|
35
|
-
const response = await
|
|
36
|
-
ctx,
|
|
37
|
-
span,
|
|
38
|
-
request,
|
|
39
|
-
options
|
|
40
|
-
});
|
|
34
|
+
const response = await schemaEvaluation(span);
|
|
41
35
|
if (response === null) {
|
|
42
36
|
return;
|
|
43
37
|
}
|
|
38
|
+
reportStagedValidators(response);
|
|
39
|
+
if (!dryRun) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
44
42
|
const walkedTables = Object.entries(
|
|
45
43
|
response.componentSchemaEvaluations
|
|
46
44
|
).flatMap(
|
|
@@ -56,34 +54,55 @@ async function checkForSlowSchemaValidation({
|
|
|
56
54
|
if (totalBytes < minBytesForSchemaWalkWarning()) {
|
|
57
55
|
return;
|
|
58
56
|
}
|
|
57
|
+
const shouldSuggestStaging = walkedTables.some(
|
|
58
|
+
({ table }) => !table.canSkipAfterStagedValidation
|
|
59
|
+
);
|
|
59
60
|
(0, import_log.logMessage)(`\u26A0\uFE0F This schema change requires checking every document in the following ${walkedTables.length === 1 ? "table" : "tables"} against your new schema, totaling ${import_chalk.chalkStderr.yellowBright((0, import_utils.formatSize)(totalBytes))}. This deploy may take a while:
|
|
60
61
|
|
|
61
62
|
${walkedTables.map(
|
|
62
63
|
({ componentPath, table }) => formatWalkedTable({ componentPath, table })
|
|
63
64
|
).join("\n")}
|
|
64
|
-
`
|
|
65
|
+
${shouldSuggestStaging ? `
|
|
66
|
+
Tip: stage the new validator (\`defineTable({...}).staged({...})\`) to validate it in the background without blocking deploys.` : ""}`);
|
|
65
67
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
span,
|
|
76
|
-
request,
|
|
77
|
-
options,
|
|
78
|
-
/* bestEffort */
|
|
79
|
-
true
|
|
80
|
-
);
|
|
81
|
-
} catch (error) {
|
|
82
|
-
(0, import_log.logVerbose)(
|
|
83
|
-
`Skipping slow schema validation check: ${error instanceof Error ? error.message : String(error)}`
|
|
68
|
+
function reportStagedValidators(response) {
|
|
69
|
+
const stagedTables = Object.entries(
|
|
70
|
+
response.componentSchemaEvaluations
|
|
71
|
+
).flatMap(([componentPath, prediction]) => {
|
|
72
|
+
const discarded = new Map(
|
|
73
|
+
(prediction.discardedStagedValidators ?? []).map((validator) => [
|
|
74
|
+
validator.tableName,
|
|
75
|
+
validator
|
|
76
|
+
])
|
|
84
77
|
);
|
|
85
|
-
return
|
|
78
|
+
return prediction.tables.filter((table) => table.staged !== void 0).map((table) => ({
|
|
79
|
+
componentPath,
|
|
80
|
+
table,
|
|
81
|
+
discarded: discarded.get(table.name)
|
|
82
|
+
}));
|
|
83
|
+
});
|
|
84
|
+
if (stagedTables.length === 0) {
|
|
85
|
+
return;
|
|
86
86
|
}
|
|
87
|
+
const lines = stagedTables.map(({ componentPath, table, discarded }) => {
|
|
88
|
+
const componentPrefix = componentPath !== "" ? `${import_chalk.chalkStderr.gray(componentPath)}: ` : "";
|
|
89
|
+
if (discarded !== void 0) {
|
|
90
|
+
return ` ${componentPrefix}${table.name}: ${(0, import_formatValidationProgress.formatDiscardedStagedValidator)(discarded)}`;
|
|
91
|
+
}
|
|
92
|
+
const staged = table.staged;
|
|
93
|
+
switch (staged.state) {
|
|
94
|
+
case "pending": {
|
|
95
|
+
return ` ${componentPrefix}${table.name}: validating in the background (${(0, import_formatValidationProgress.formatValidationProgress)(staged)})`;
|
|
96
|
+
}
|
|
97
|
+
case "valid":
|
|
98
|
+
return table.outcome === "supersetOfStagedValidated" ? ` ${componentPrefix}${table.name}: ${import_chalk.chalkStderr.green("validated")}. This deploy applies the staged schema without scanning the table.` : ` ${componentPrefix}${table.name}: ${import_chalk.chalkStderr.green("validated")}. Safe to apply the staged schema changes and deploy.`;
|
|
99
|
+
case "failed":
|
|
100
|
+
return ` ${componentPrefix}${table.name}: ${import_chalk.chalkStderr.red("failed")}: ${staged.error}${import_chalk.chalkStderr.gray(" (fix the offending documents and redeploy to revalidate)")}`;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
(0, import_log.logMessage)(`Staged schema validation status:
|
|
104
|
+
${lines.join("\n")}
|
|
105
|
+
`);
|
|
87
106
|
}
|
|
88
107
|
function formatWalkedTable({
|
|
89
108
|
componentPath,
|
|
@@ -92,16 +111,16 @@ function formatWalkedTable({
|
|
|
92
111
|
const componentPrefix = componentPath !== "" ? `${import_chalk.chalkStderr.gray(componentPath)}: ` : "";
|
|
93
112
|
const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;
|
|
94
113
|
const sizeFormatted = (0, import_utils.formatSize)(table.sizeBytes);
|
|
95
|
-
|
|
114
|
+
let stagedNote = "";
|
|
115
|
+
if (table.staged?.state === "pending" && table.canSkipAfterStagedValidation) {
|
|
116
|
+
stagedNote = `. Staged schema validation in progress. Wait for validation to complete before deploying with the staged changes. Deploying now will block on a full table revalidation scan.`;
|
|
117
|
+
}
|
|
118
|
+
return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})${stagedNote}`;
|
|
96
119
|
}
|
|
97
120
|
function minBytesForSchemaWalkWarning() {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return parsed;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
|
|
121
|
+
return (0, import_utils.integerFromEnv)(
|
|
122
|
+
"CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING",
|
|
123
|
+
MIN_BYTES_FOR_SCHEMA_WALK_WARNING
|
|
124
|
+
);
|
|
106
125
|
}
|
|
107
126
|
//# sourceMappingURL=checkForSlowSchemaValidation.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/checkForSlowSchemaValidation.ts"],
|
|
4
|
-
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../bundler/log.js\";\nimport { Span } from \"./tracing.js\";\nimport {\n EvaluateSchemaResponse,\n TablePrediction,\n} from \"./deployApi/evaluateSchema.js\";\nimport { SchemaEvaluation } from \"./schemaEvaluation.js\";\nimport { formatSize, integerFromEnv } from \"./utils/utils.js\";\nimport {\n formatDiscardedStagedValidator,\n formatValidationProgress,\n} from \"./formatValidationProgress.js\";\n\nconst MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27; // 128 MiB\n\nexport async function checkForSlowSchemaValidation({\n span,\n schemaEvaluation,\n dryRun,\n}: {\n span: Span;\n schemaEvaluation: SchemaEvaluation;\n dryRun: boolean;\n}): Promise<void> {\n const response = await schemaEvaluation(span);\n if (response === null) {\n return;\n }\n reportStagedValidators(response);\n if (!dryRun) {\n return;\n }\n\n const walkedTables = Object.entries(\n response.componentSchemaEvaluations,\n ).flatMap(([componentPath, prediction]) =>\n prediction.tables\n .filter((table) => table.outcome === \"mustWalk\")\n .map((table) => ({ componentPath, table })),\n );\n if (walkedTables.length === 0) {\n return;\n }\n\n const totalBytes = walkedTables.reduce(\n (sum, { table }) => sum + table.sizeBytes,\n 0,\n );\n if (totalBytes < minBytesForSchemaWalkWarning()) {\n return;\n }\n\n const shouldSuggestStaging = walkedTables.some(\n ({ table }) => !table.canSkipAfterStagedValidation,\n );\n logMessage(`\u26A0\uFE0F This schema change requires checking every document in the following ${walkedTables.length === 1 ? \"table\" : \"tables\"} against your new schema, totaling ${chalkStderr.yellowBright(formatSize(totalBytes))}. This deploy may take a while:\n\n${walkedTables\n .map(({ componentPath, table }) =>\n formatWalkedTable({ componentPath, table }),\n )\n .join(\"\\n\")}\n${\n shouldSuggestStaging\n ? `\\nTip: stage the new validator (\\`defineTable({...}).staged({...})\\`) to validate it in the background without blocking deploys.`\n : \"\"\n}`);\n}\n\n// The prediction includes staged validators from active and in-flight schemas.\nfunction reportStagedValidators(response: EvaluateSchemaResponse) {\n const stagedTables = Object.entries(\n response.componentSchemaEvaluations,\n ).flatMap(([componentPath, prediction]) => {\n const discarded = new Map(\n (prediction.discardedStagedValidators ?? []).map((validator) => [\n validator.tableName,\n validator,\n ]),\n );\n return prediction.tables\n .filter((table) => table.staged !== undefined)\n .map((table) => ({\n componentPath,\n table,\n discarded: discarded.get(table.name),\n }));\n });\n if (stagedTables.length === 0) {\n return;\n }\n const lines = stagedTables.map(({ componentPath, table, discarded }) => {\n const componentPrefix =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}: ` : \"\";\n // The state describes the validator this push discards, so advertising\n // it as ready to promote would contradict the unstaging warning.\n if (discarded !== undefined) {\n return ` ${componentPrefix}${table.name}: ${formatDiscardedStagedValidator(discarded)}`;\n }\n const staged = table.staged!;\n switch (staged.state) {\n case \"pending\": {\n return ` ${componentPrefix}${table.name}: validating in the background (${formatValidationProgress(staged)})`;\n }\n case \"valid\":\n // `supersetOfStagedValidated` means this push already promotes it.\n return table.outcome === \"supersetOfStagedValidated\"\n ? ` ${componentPrefix}${table.name}: ${chalkStderr.green(\"validated\")}. This deploy applies the staged schema without scanning the table.`\n : ` ${componentPrefix}${table.name}: ${chalkStderr.green(\"validated\")}. Safe to apply the staged schema changes and deploy.`;\n case \"failed\":\n return ` ${componentPrefix}${table.name}: ${chalkStderr.red(\"failed\")}: ${staged.error}${chalkStderr.gray(\" (fix the offending documents and redeploy to revalidate)\")}`;\n }\n });\n logMessage(`Staged schema validation status:\\n${lines.join(\"\\n\")}\\n`);\n}\n\nfunction formatWalkedTable({\n componentPath,\n table,\n}: {\n componentPath: string;\n table: TablePrediction;\n}) {\n const componentPrefix =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}: ` : \"\";\n const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;\n const sizeFormatted = formatSize(table.sizeBytes);\n let stagedNote = \"\";\n if (table.staged?.state === \"pending\" && table.canSkipAfterStagedValidation) {\n stagedNote = `. Staged schema validation in progress. Wait for validation to complete before deploying with the staged changes. Deploying now will block on a full table revalidation scan.`;\n }\n return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})${stagedNote}`;\n}\n\nfunction minBytesForSchemaWalkWarning(): number {\n return integerFromEnv(\n \"CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING\",\n MIN_BYTES_FOR_SCHEMA_WALK_WARNING,\n );\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAC5B,iBAA2B;AAO3B,mBAA2C;AAC3C,sCAGO;AAEP,MAAM,oCAAoC,KAAK;AAE/C,eAAsB,6BAA6B;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AACF,GAIkB;AAChB,QAAM,WAAW,MAAM,iBAAiB,IAAI;AAC5C,MAAI,aAAa,MAAM;AACrB;AAAA,EACF;AACA,yBAAuB,QAAQ;AAC/B,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,eAAe,OAAO;AAAA,IAC1B,SAAS;AAAA,EACX,EAAE;AAAA,IAAQ,CAAC,CAAC,eAAe,UAAU,MACnC,WAAW,OACR,OAAO,CAAC,UAAU,MAAM,YAAY,UAAU,EAC9C,IAAI,CAAC,WAAW,EAAE,eAAe,MAAM,EAAE;AAAA,EAC9C;AACA,MAAI,aAAa,WAAW,GAAG;AAC7B;AAAA,EACF;AAEA,QAAM,aAAa,aAAa;AAAA,IAC9B,CAAC,KAAK,EAAE,MAAM,MAAM,MAAM,MAAM;AAAA,IAChC;AAAA,EACF;AACA,MAAI,aAAa,6BAA6B,GAAG;AAC/C;AAAA,EACF;AAEA,QAAM,uBAAuB,aAAa;AAAA,IACxC,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM;AAAA,EACxB;AACA,6BAAW,sFAA4E,aAAa,WAAW,IAAI,UAAU,QAAQ,sCAAsC,yBAAY,iBAAa,yBAAW,UAAU,CAAC,CAAC;AAAA;AAAA,EAE3N,aACC;AAAA,IAAI,CAAC,EAAE,eAAe,MAAM,MAC3B,kBAAkB,EAAE,eAAe,MAAM,CAAC;AAAA,EAC5C,EACC,KAAK,IAAI,CAAC;AAAA,EAEX,uBACI;AAAA,kIACA,EACN,EAAE;AACF;AAGA,SAAS,uBAAuB,UAAkC;AAChE,QAAM,eAAe,OAAO;AAAA,IAC1B,SAAS;AAAA,EACX,EAAE,QAAQ,CAAC,CAAC,eAAe,UAAU,MAAM;AACzC,UAAM,YAAY,IAAI;AAAA,OACnB,WAAW,6BAA6B,CAAC,GAAG,IAAI,CAAC,cAAc;AAAA,QAC9D,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,WAAW,OACf,OAAO,CAAC,UAAU,MAAM,WAAW,MAAS,EAC5C,IAAI,CAAC,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA,WAAW,UAAU,IAAI,MAAM,IAAI;AAAA,IACrC,EAAE;AAAA,EACN,CAAC;AACD,MAAI,aAAa,WAAW,GAAG;AAC7B;AAAA,EACF;AACA,QAAM,QAAQ,aAAa,IAAI,CAAC,EAAE,eAAe,OAAO,UAAU,MAAM;AACtE,UAAM,kBACJ,kBAAkB,KAAK,GAAG,yBAAY,KAAK,aAAa,CAAC,OAAO;AAGlE,QAAI,cAAc,QAAW;AAC3B,aAAO,KAAK,eAAe,GAAG,MAAM,IAAI,SAAK,gEAA+B,SAAS,CAAC;AAAA,IACxF;AACA,UAAM,SAAS,MAAM;AACrB,YAAQ,OAAO,OAAO;AAAA,MACpB,KAAK,WAAW;AACd,eAAO,KAAK,eAAe,GAAG,MAAM,IAAI,uCAAmC,0DAAyB,MAAM,CAAC;AAAA,MAC7G;AAAA,MACA,KAAK;AAEH,eAAO,MAAM,YAAY,8BACrB,KAAK,eAAe,GAAG,MAAM,IAAI,KAAK,yBAAY,MAAM,WAAW,CAAC,wEACpE,KAAK,eAAe,GAAG,MAAM,IAAI,KAAK,yBAAY,MAAM,WAAW,CAAC;AAAA,MAC1E,KAAK;AACH,eAAO,KAAK,eAAe,GAAG,MAAM,IAAI,KAAK,yBAAY,IAAI,QAAQ,CAAC,KAAK,OAAO,KAAK,GAAG,yBAAY,KAAK,2DAA2D,CAAC;AAAA,IAC3K;AAAA,EACF,CAAC;AACD,6BAAW;AAAA,EAAqC,MAAM,KAAK,IAAI,CAAC;AAAA,CAAI;AACtE;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AACF,GAGG;AACD,QAAM,kBACJ,kBAAkB,KAAK,GAAG,yBAAY,KAAK,aAAa,CAAC,OAAO;AAClE,QAAM,gBAAgB,GAAG,MAAM,QAAQ,eAAe,CAAC;AACvD,QAAM,oBAAgB,yBAAW,MAAM,SAAS;AAChD,MAAI,aAAa;AACjB,MAAI,MAAM,QAAQ,UAAU,aAAa,MAAM,8BAA8B;AAC3E,iBAAa;AAAA,EACf;AACA,SAAO,KAAK,eAAe,GAAG,MAAM,IAAI,KAAK,aAAa,GAAG,aAAa,IAAI,UAAU;AAC1F;AAEA,SAAS,+BAAuC;AAC9C,aAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var checkForStagedValidatorDeletion_exports = {};
|
|
20
|
+
__export(checkForStagedValidatorDeletion_exports, {
|
|
21
|
+
checkForStagedValidatorDeletion: () => checkForStagedValidatorDeletion
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(checkForStagedValidatorDeletion_exports);
|
|
24
|
+
var import_chalk = require("chalk");
|
|
25
|
+
var import_log = require("../../bundler/log.js");
|
|
26
|
+
var import_prompts = require("./utils/prompts.js");
|
|
27
|
+
var import_formatValidationProgress = require("./formatValidationProgress.js");
|
|
28
|
+
async function checkForStagedValidatorDeletion({
|
|
29
|
+
ctx,
|
|
30
|
+
response,
|
|
31
|
+
askForConfirmation,
|
|
32
|
+
dryRun = false
|
|
33
|
+
}) {
|
|
34
|
+
if (response === null) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const discarded = Object.entries(response.componentSchemaEvaluations).flatMap(
|
|
38
|
+
([componentPath, prediction]) => (prediction.discardedStagedValidators ?? []).map((validator) => ({
|
|
39
|
+
componentPath,
|
|
40
|
+
validator
|
|
41
|
+
}))
|
|
42
|
+
);
|
|
43
|
+
if (discarded.length === 0) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
(0, import_log.logMessage)(`\u26A0\uFE0F This push ${import_chalk.chalkStderr.bold(dryRun ? "would discard" : "discards")} staged schema validation for the following ${discarded.length === 1 ? "table" : "tables"}:
|
|
47
|
+
|
|
48
|
+
${discarded.map(formatDiscarded).join("\n")}
|
|
49
|
+
|
|
50
|
+
A discarded staged validator restarts validation from zero if staged again.
|
|
51
|
+
`);
|
|
52
|
+
if (dryRun) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!askForConfirmation) {
|
|
56
|
+
(0, import_log.logFinishedStep)(
|
|
57
|
+
"Proceeding with push since --allow-unstaging-schema is set"
|
|
58
|
+
);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (!process.stdin.isTTY) {
|
|
62
|
+
return ctx.crash({
|
|
63
|
+
exitCode: 1,
|
|
64
|
+
errorType: "fatal",
|
|
65
|
+
printedMessage: `To confirm the push:
|
|
66
|
+
\u2022 run the deploy command in an ${import_chalk.chalkStderr.bold("interactive terminal")}
|
|
67
|
+
\u2022 or run the deploy command with the ${import_chalk.chalkStderr.bold("--allow-unstaging-schema")} flag`
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
(0, import_log.stopSpinner)();
|
|
71
|
+
if (!await (0, import_prompts.promptYesNo)(ctx, {
|
|
72
|
+
message: `Discard staged validation for ${discarded.length === 1 ? "this table" : "these tables"}?`,
|
|
73
|
+
default: false
|
|
74
|
+
})) {
|
|
75
|
+
return ctx.crash({
|
|
76
|
+
exitCode: 1,
|
|
77
|
+
errorType: "fatal",
|
|
78
|
+
printedMessage: `Canceling push`
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
(0, import_log.logFinishedStep)("Proceeding with push.");
|
|
82
|
+
}
|
|
83
|
+
function formatDiscarded({
|
|
84
|
+
componentPath,
|
|
85
|
+
validator
|
|
86
|
+
}) {
|
|
87
|
+
const componentPrefix = componentPath !== "" ? `${import_chalk.chalkStderr.gray(componentPath)}:` : "";
|
|
88
|
+
return `\u26D4 ${componentPrefix}${validator.tableName}: ${(0, import_formatValidationProgress.formatDiscardedStagedValidator)(validator)}`;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=checkForStagedValidatorDeletion.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cli/lib/checkForStagedValidatorDeletion.ts"],
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logFinishedStep, logMessage, stopSpinner } from \"../../bundler/log.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport {\n DiscardedStagedValidator,\n EvaluateSchemaResponse,\n} from \"./deployApi/evaluateSchema.js\";\nimport { formatDiscardedStagedValidator } from \"./formatValidationProgress.js\";\n\nexport type StagedValidatorDeletionCheck =\n | \"ask for confirmation\"\n | \"has confirmation\"\n | \"no verification\";\n\n/**\n * Confirm before discarding pending or successful staged validation. Unstaging\n * stops write-time checks, so restaging requires a fresh scan.\n *\n * A dry run only reports what the push would discard, so `--dry-run` previews\n * the confirmation the real push will ask for.\n */\nexport async function checkForStagedValidatorDeletion({\n ctx,\n response,\n askForConfirmation,\n dryRun = false,\n}: {\n ctx: Context;\n response: EvaluateSchemaResponse | null;\n askForConfirmation: boolean;\n dryRun?: boolean;\n}): Promise<void> {\n // `sharedSchemaEvaluation` has already logged why evaluation failed.\n if (response === null) {\n return;\n }\n const discarded = Object.entries(response.componentSchemaEvaluations).flatMap(\n ([componentPath, prediction]) =>\n (prediction.discardedStagedValidators ?? []).map((validator) => ({\n componentPath,\n validator,\n })),\n );\n if (discarded.length === 0) {\n return;\n }\n\n logMessage(`\\u26a0\\ufe0f This push ${chalkStderr.bold(dryRun ? \"would discard\" : \"discards\")} staged schema validation for the following ${discarded.length === 1 ? \"table\" : \"tables\"}:\n\n${discarded.map(formatDiscarded).join(\"\\n\")}\n\nA discarded staged validator restarts validation from zero if staged again.\n`);\n\n if (dryRun) {\n return;\n }\n\n if (!askForConfirmation) {\n logFinishedStep(\n \"Proceeding with push since --allow-unstaging-schema is set\",\n );\n return;\n }\n\n if (!process.stdin.isTTY) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `To confirm the push:\n\\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\\u2022 or run the deploy command with the ${chalkStderr.bold(\"--allow-unstaging-schema\")} flag`,\n });\n }\n\n stopSpinner();\n if (\n !(await promptYesNo(ctx, {\n message: `Discard staged validation for ${discarded.length === 1 ? \"this table\" : \"these tables\"}?`,\n default: false,\n }))\n ) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Canceling push`,\n });\n }\n\n logFinishedStep(\"Proceeding with push.\");\n}\n\nfunction formatDiscarded({\n componentPath,\n validator,\n}: {\n componentPath: string;\n validator: DiscardedStagedValidator;\n}): string {\n const componentPrefix =\n componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}:` : \"\";\n return `\\u26d4 ${componentPrefix}${validator.tableName}: ${formatDiscardedStagedValidator(validator)}`;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAE5B,iBAAyD;AACzD,qBAA4B;AAK5B,sCAA+C;AAc/C,eAAsB,gCAAgC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACX,GAKkB;AAEhB,MAAI,aAAa,MAAM;AACrB;AAAA,EACF;AACA,QAAM,YAAY,OAAO,QAAQ,SAAS,0BAA0B,EAAE;AAAA,IACpE,CAAC,CAAC,eAAe,UAAU,OACxB,WAAW,6BAA6B,CAAC,GAAG,IAAI,CAAC,eAAe;AAAA,MAC/D;AAAA,MACA;AAAA,IACF,EAAE;AAAA,EACN;AACA,MAAI,UAAU,WAAW,GAAG;AAC1B;AAAA,EACF;AAEA,6BAAW,2BAA2B,yBAAY,KAAK,SAAS,kBAAkB,UAAU,CAAC,+CAA+C,UAAU,WAAW,IAAI,UAAU,QAAQ;AAAA;AAAA,EAEvL,UAAU,IAAI,eAAe,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,CAG1C;AAEC,MAAI,QAAQ;AACV;AAAA,EACF;AAEA,MAAI,CAAC,oBAAoB;AACvB;AAAA,MACE;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,MAAM,OAAO;AACxB,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,sCACgB,yBAAY,KAAK,sBAAsB,CAAC;AAAA,4CAClC,yBAAY,KAAK,0BAA0B,CAAC;AAAA,IACpF,CAAC;AAAA,EACH;AAEA,8BAAY;AACZ,MACE,CAAE,UAAM,4BAAY,KAAK;AAAA,IACvB,SAAS,iCAAiC,UAAU,WAAW,IAAI,eAAe,cAAc;AAAA,IAChG,SAAS;AAAA,EACX,CAAC,GACD;AACA,WAAO,IAAI,MAAM;AAAA,MACf,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,kCAAgB,uBAAuB;AACzC;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AACF,GAGW;AACT,QAAM,kBACJ,kBAAkB,KAAK,GAAG,yBAAY,KAAK,aAAa,CAAC,MAAM;AACjE,SAAO,UAAU,eAAe,GAAG,UAAU,SAAS,SAAK,gEAA+B,SAAS,CAAC;AACtG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|