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
package/src/cli/deploy.ts
CHANGED
|
@@ -111,10 +111,23 @@ Same format as .env.local or .env files, and overrides them.`,
|
|
|
111
111
|
).hideHelp(),
|
|
112
112
|
)
|
|
113
113
|
.addOption(
|
|
114
|
-
new Option(
|
|
115
|
-
|
|
116
|
-
.
|
|
117
|
-
|
|
114
|
+
new Option(
|
|
115
|
+
"--skip-large-indexes-check",
|
|
116
|
+
"Skip the confirmation prompt when this push creates, changes, or deletes an index on a large table. Creating or changing an index blocks the deploy until it is backfilled; consider staging it instead so it backfills in the background.",
|
|
117
|
+
),
|
|
118
|
+
)
|
|
119
|
+
.addOption(
|
|
120
|
+
// Predecessor of --skip-large-indexes-check, kept hidden so existing
|
|
121
|
+
// deploy scripts keep working. It still skips only the deletion
|
|
122
|
+
// confirmation: scripts that opted into that never agreed to let a
|
|
123
|
+
// blocking backfill through.
|
|
124
|
+
new Option("--allow-deleting-large-indexes").hideHelp(),
|
|
125
|
+
)
|
|
126
|
+
.addOption(
|
|
127
|
+
new Option(
|
|
128
|
+
"--allow-unstaging-schema",
|
|
129
|
+
"Skip the confirmation prompt when this push discards a staged table validator that is validating or already validated.",
|
|
130
|
+
),
|
|
118
131
|
)
|
|
119
132
|
.showHelpAfterError()
|
|
120
133
|
.action(async (cmdOptions) => {
|
|
@@ -181,6 +194,7 @@ Same format as .env.local or .env files, and overrides them.`,
|
|
|
181
194
|
...cmdOptions,
|
|
182
195
|
previewName: previewName ?? undefined,
|
|
183
196
|
reuse,
|
|
197
|
+
skipLargeIndexesCheck: cmdOptions.skipLargeIndexesCheck ?? false,
|
|
184
198
|
message: cmdOptions.message ?? getDefaultDeployMessage(),
|
|
185
199
|
},
|
|
186
200
|
);
|
|
@@ -204,8 +218,10 @@ Same format as .env.local or .env files, and overrides them.`,
|
|
|
204
218
|
await deployToExistingDeployment(ctx, deploymentSelection, {
|
|
205
219
|
...cmdOptions,
|
|
206
220
|
skipWorkosCheck: cmdOptions.skipWorkosCheck ?? false,
|
|
221
|
+
skipLargeIndexesCheck: cmdOptions.skipLargeIndexesCheck ?? false,
|
|
207
222
|
allowDeletingLargeIndexes:
|
|
208
223
|
cmdOptions.allowDeletingLargeIndexes ?? false,
|
|
224
|
+
allowUnstagingSchema: cmdOptions.allowUnstagingSchema ?? false,
|
|
209
225
|
message: cmdOptions.message ?? getDefaultDeployMessage(),
|
|
210
226
|
});
|
|
211
227
|
}
|
|
@@ -237,6 +253,7 @@ async function deployToNewPreviewDeployment(
|
|
|
237
253
|
debug?: boolean | undefined;
|
|
238
254
|
debugBundlePath?: string | undefined;
|
|
239
255
|
skipWorkosCheck?: boolean | undefined;
|
|
256
|
+
skipLargeIndexesCheck: boolean;
|
|
240
257
|
message: string | null;
|
|
241
258
|
},
|
|
242
259
|
) {
|
|
@@ -319,7 +336,8 @@ async function deployToNewPreviewDeployment(
|
|
|
319
336
|
});
|
|
320
337
|
|
|
321
338
|
const pushOptions: PushOptions = {
|
|
322
|
-
deploymentName:
|
|
339
|
+
deploymentName: data.deploymentName,
|
|
340
|
+
deploymentType: "preview",
|
|
323
341
|
adminKey: previewAdminKey,
|
|
324
342
|
verbose: !!options.verbose,
|
|
325
343
|
dryRun: false,
|
|
@@ -333,6 +351,18 @@ async function deployToNewPreviewDeployment(
|
|
|
333
351
|
liveComponentSources: false,
|
|
334
352
|
pushAllModules: !!options.pushAllModules,
|
|
335
353
|
largeIndexDeletionCheck: "no verification", // fine for preview deployments
|
|
354
|
+
// A freshly claimed preview has no data to backfill. A reused one keeps
|
|
355
|
+
// the data earlier pushes wrote, so an unstaged index there can block
|
|
356
|
+
// the deploy like on any other deployment.
|
|
357
|
+
largeIndexBackfillCheck: data.isNewDeployment
|
|
358
|
+
? "no verification"
|
|
359
|
+
: options.skipLargeIndexesCheck
|
|
360
|
+
? "has confirmation"
|
|
361
|
+
: "ask for confirmation",
|
|
362
|
+
// Staged validation on throwaway preview data is cheap to redo, so
|
|
363
|
+
// discarding it needs no confirmation.
|
|
364
|
+
stagedValidatorDeletionCheck: "no verification",
|
|
365
|
+
warnOnSlowSchemaValidation: true,
|
|
336
366
|
message: options.message,
|
|
337
367
|
};
|
|
338
368
|
showSpinner(`Deploying to ${previewUrl}...`);
|
|
@@ -377,7 +407,9 @@ async function deployToExistingDeployment(
|
|
|
377
407
|
liveComponentSources?: boolean | undefined;
|
|
378
408
|
envFile?: string | undefined;
|
|
379
409
|
skipWorkosCheck?: boolean | undefined;
|
|
410
|
+
skipLargeIndexesCheck: boolean;
|
|
380
411
|
allowDeletingLargeIndexes: boolean;
|
|
412
|
+
allowUnstagingSchema: boolean;
|
|
381
413
|
message: string | null;
|
|
382
414
|
},
|
|
383
415
|
) {
|
|
@@ -12,7 +12,10 @@ import {
|
|
|
12
12
|
parseDeploymentSelector,
|
|
13
13
|
ParsedDeploymentSelector,
|
|
14
14
|
} from "./lib/deploymentSelector.js";
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
deploymentUrlForApplicationEnv,
|
|
17
|
+
updateEnvAndConfigForDeploymentSelection,
|
|
18
|
+
} from "./configure.js";
|
|
16
19
|
import { fetchDeploymentCanonicalUrls } from "./lib/deploy2.js";
|
|
17
20
|
import {
|
|
18
21
|
loadProjectLocalConfig,
|
|
@@ -267,9 +270,9 @@ export async function saveSelectedDeployment(
|
|
|
267
270
|
});
|
|
268
271
|
}
|
|
269
272
|
|
|
270
|
-
const { convexSiteUrl: siteUrl } =
|
|
273
|
+
const { convexCloudUrl, convexSiteUrl: siteUrl } =
|
|
271
274
|
deployment.deploymentFields.deploymentType === "local"
|
|
272
|
-
? { convexSiteUrl: null }
|
|
275
|
+
? { convexCloudUrl: deployment.url, convexSiteUrl: null }
|
|
273
276
|
: await fetchDeploymentCanonicalUrls(ctx, {
|
|
274
277
|
adminKey: deployment.adminKey,
|
|
275
278
|
deploymentUrl: deployment.url,
|
|
@@ -278,7 +281,7 @@ export async function saveSelectedDeployment(
|
|
|
278
281
|
await updateEnvAndConfigForDeploymentSelection(
|
|
279
282
|
ctx,
|
|
280
283
|
{
|
|
281
|
-
url: deployment
|
|
284
|
+
url: deploymentUrlForApplicationEnv(deployment, convexCloudUrl),
|
|
282
285
|
siteUrl,
|
|
283
286
|
deploymentName: deployment.deploymentFields.deploymentName,
|
|
284
287
|
teamSlug: deployment.deploymentFields.teamSlug,
|
package/src/cli/dev.ts
CHANGED
|
@@ -143,6 +143,15 @@ export const dev = new Command("dev")
|
|
|
143
143
|
.default(false)
|
|
144
144
|
.hideHelp(),
|
|
145
145
|
)
|
|
146
|
+
.addOption(
|
|
147
|
+
// Only `--prod` pushes check this; hidden alongside it.
|
|
148
|
+
new Option(
|
|
149
|
+
"--allow-unstaging-schema",
|
|
150
|
+
"Skip the confirmation prompt when a push to production discards a staged table validator that is validating or already validated.",
|
|
151
|
+
)
|
|
152
|
+
.default(false)
|
|
153
|
+
.hideHelp(),
|
|
154
|
+
)
|
|
146
155
|
.addOption(
|
|
147
156
|
new Option(
|
|
148
157
|
"--env-file <envFile>",
|
package/src/cli/docs.ts
CHANGED
|
@@ -1,59 +1,18 @@
|
|
|
1
1
|
import { Command } from "@commander-js/extra-typings";
|
|
2
2
|
import { chalkStderr } from "chalk";
|
|
3
3
|
import open from "open";
|
|
4
|
-
import { Context, oneoffContext } from "../bundler/context.js";
|
|
5
4
|
import { logMessage } from "../bundler/log.js";
|
|
6
|
-
import {
|
|
7
|
-
BIG_BRAIN_URL,
|
|
8
|
-
bigBrainFetch,
|
|
9
|
-
deprecationCheckWarning,
|
|
10
|
-
} from "./lib/utils/utils.js";
|
|
11
|
-
import {
|
|
12
|
-
getDeploymentSelection,
|
|
13
|
-
deploymentNameFromSelection,
|
|
14
|
-
} from "./lib/deploymentSelection.js";
|
|
15
5
|
|
|
16
6
|
export const docs = new Command("docs")
|
|
17
7
|
.description("Open the docs in the browser")
|
|
18
8
|
.allowExcessArguments(false)
|
|
19
9
|
.option("--no-open", "Print docs URL instead of opening it in your browser")
|
|
20
10
|
.action(async (options) => {
|
|
21
|
-
|
|
22
|
-
url: undefined,
|
|
23
|
-
adminKey: undefined,
|
|
24
|
-
envFile: undefined,
|
|
25
|
-
});
|
|
26
|
-
const deploymentSelection = await getDeploymentSelection(ctx, {
|
|
27
|
-
url: undefined,
|
|
28
|
-
adminKey: undefined,
|
|
29
|
-
envFile: undefined,
|
|
30
|
-
});
|
|
31
|
-
const configuredDeployment =
|
|
32
|
-
deploymentNameFromSelection(deploymentSelection);
|
|
33
|
-
if (configuredDeployment === null) {
|
|
34
|
-
await openDocs(ctx, options.open);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const getCookieUrl = new URL(
|
|
38
|
-
`get_cookie/${configuredDeployment}`,
|
|
39
|
-
BIG_BRAIN_URL,
|
|
40
|
-
);
|
|
41
|
-
const fetch = bigBrainFetch(ctx);
|
|
42
|
-
try {
|
|
43
|
-
const res = await fetch(getCookieUrl);
|
|
44
|
-
deprecationCheckWarning(ctx, res);
|
|
45
|
-
const { cookie } = await res.json();
|
|
46
|
-
await openDocs(ctx, options.open, cookie);
|
|
47
|
-
} catch {
|
|
48
|
-
await openDocs(ctx, options.open);
|
|
49
|
-
}
|
|
11
|
+
await openDocs(options.open);
|
|
50
12
|
});
|
|
51
13
|
|
|
52
|
-
async function openDocs(
|
|
53
|
-
|
|
54
|
-
if (cookie !== undefined) {
|
|
55
|
-
docsUrl += "/?t=" + cookie;
|
|
56
|
-
}
|
|
14
|
+
async function openDocs(toOpen: boolean) {
|
|
15
|
+
const docsUrl = "https://docs.convex.dev/?utm_source=convex-cli";
|
|
57
16
|
if (toOpen) {
|
|
58
17
|
await open(docsUrl);
|
|
59
18
|
logMessage(chalkStderr.green("Docs have launched! Check your browser."));
|
package/src/cli/env.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Command } from "@commander-js/extra-typings";
|
|
1
|
+
import { Command, Option } from "@commander-js/extra-typings";
|
|
2
2
|
import { chalkStderr } from "chalk";
|
|
3
3
|
import { Context, oneoffContext } from "../bundler/context.js";
|
|
4
4
|
import {
|
|
@@ -43,7 +43,7 @@ const envSetCmd = new Command("set")
|
|
|
43
43
|
"• `pbpaste | npx convex env set API_KEY` (macOS)",
|
|
44
44
|
"• `Get-Clipboard | npx convex env set API_KEY` (Windows PowerShell)",
|
|
45
45
|
"",
|
|
46
|
-
"To update many variables at once, save them with `npx convex env list > .env.convex`, edit the file, then reapply the changes with `npx convex env set --force < .env.convex`.",
|
|
46
|
+
"To update many variables at once, save them with `npx convex env list --include-values > .env.convex`, edit the file, then reapply the changes with `npx convex env set --force < .env.convex`.",
|
|
47
47
|
].join("\n"),
|
|
48
48
|
)
|
|
49
49
|
.option(
|
|
@@ -167,16 +167,22 @@ const envListCmd = new Command("list")
|
|
|
167
167
|
.summary("List all environment variables and their values")
|
|
168
168
|
.description(
|
|
169
169
|
[
|
|
170
|
-
"• List all variables and their values: `npx convex env list`",
|
|
171
170
|
"• List only variable names (no values): `npx convex env list --names-only`",
|
|
172
|
-
"•
|
|
173
|
-
"•
|
|
171
|
+
"• List all variables and their values: `npx convex env list --include-values`",
|
|
172
|
+
"• Save all variables to a file: `npx convex env list --include-values > .env.convex`",
|
|
173
|
+
"• Append to a file: `npx convex env list --include-values >> .env.convex`",
|
|
174
174
|
].join("\n"),
|
|
175
175
|
)
|
|
176
176
|
.option(
|
|
177
177
|
"--names-only",
|
|
178
178
|
"List only the names of environment variables, without their values",
|
|
179
179
|
)
|
|
180
|
+
.addOption(
|
|
181
|
+
new Option(
|
|
182
|
+
"--include-values",
|
|
183
|
+
"Print each variable's value alongside its name, in .env format (the default). Pass it explicitly in scripts that rely on the values.",
|
|
184
|
+
).conflicts("namesOnly"),
|
|
185
|
+
)
|
|
180
186
|
.configureHelp({ showGlobalOptions: true })
|
|
181
187
|
.allowExcessArguments(false)
|
|
182
188
|
.action(async (cmdOptions, cmd) => {
|
|
@@ -207,8 +213,8 @@ export const env = new Command("env")
|
|
|
207
213
|
"• Set interactively: `npx convex env set NAME`",
|
|
208
214
|
"• Set multiple from file: `npx convex env set --from-file .env`",
|
|
209
215
|
"• Unset a variable: `npx convex env remove NAME`",
|
|
210
|
-
"• List all variables and their values: `npx convex env list`",
|
|
211
216
|
"• List only variable names (no values): `npx convex env list --names-only`",
|
|
217
|
+
"• List all variables and their values: `npx convex env list --include-values`",
|
|
212
218
|
"• Print a variable's value: `npx convex env get NAME`",
|
|
213
219
|
"",
|
|
214
220
|
"By default, this sets and views variables on your dev deployment.",
|
package/src/cli/envDefault.ts
CHANGED
|
@@ -144,8 +144,8 @@ const envDefaultList = addEnvDefaultOptions(
|
|
|
144
144
|
.summary("List all default environment variables and their values")
|
|
145
145
|
.description(
|
|
146
146
|
[
|
|
147
|
-
"• List all default variables and their values: `npx convex env default list`",
|
|
148
147
|
"• List only default variable names (no values): `npx convex env default list --names-only`",
|
|
148
|
+
"• List all default variables and their values: `npx convex env default list --include-values`",
|
|
149
149
|
"",
|
|
150
150
|
"The deployment type is determined by the current deployment (local maps to dev), or by --type if provided.",
|
|
151
151
|
].join("\n"),
|
|
@@ -154,6 +154,12 @@ const envDefaultList = addEnvDefaultOptions(
|
|
|
154
154
|
"--names-only",
|
|
155
155
|
"List only the names of environment variables, without their values",
|
|
156
156
|
)
|
|
157
|
+
.addOption(
|
|
158
|
+
new Option(
|
|
159
|
+
"--include-values",
|
|
160
|
+
"Print each variable's value alongside its name, in .env format (the default). Pass it explicitly in scripts that rely on the values.",
|
|
161
|
+
).conflicts("namesOnly"),
|
|
162
|
+
)
|
|
157
163
|
.configureHelp({ showGlobalOptions: true })
|
|
158
164
|
.allowExcessArguments(false),
|
|
159
165
|
).action(async (cmdOptions, cmd) => {
|
|
@@ -176,8 +182,8 @@ export const envDefault = new Command("default")
|
|
|
176
182
|
"",
|
|
177
183
|
"• Set a default variable: `npx convex env default set NAME 'value'`",
|
|
178
184
|
"• Unset a default variable: `npx convex env default remove NAME`",
|
|
179
|
-
"• List all default variables and their values: `npx convex env default list`",
|
|
180
185
|
"• List only default variable names (no values): `npx convex env default list --names-only`",
|
|
186
|
+
"• List all default variables and their values: `npx convex env default list --include-values`",
|
|
181
187
|
"• Print a default variable's value: `npx convex env default get NAME`",
|
|
182
188
|
].join("\n"),
|
|
183
189
|
)
|
package/src/cli/generatedApi.ts
CHANGED
|
@@ -461,7 +461,7 @@ export interface components {
|
|
|
461
461
|
};
|
|
462
462
|
ReferralCode: string;
|
|
463
463
|
/** @enum {string} */
|
|
464
|
-
RegionName: "aws-us-east-1" | "aws-eu-west-1";
|
|
464
|
+
RegionName: "aws-us-east-1" | "aws-eu-west-1" | "aws-ca-central-1" | "aws-ap-southeast-2";
|
|
465
465
|
/** Format: int64 */
|
|
466
466
|
TeamId: number;
|
|
467
467
|
TeamName: string;
|
package/src/cli/lib/api.ts
CHANGED
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
import { loadProjectLocalConfig } from "./localDeployment/filePaths.js";
|
|
27
27
|
import { chalkStderr } from "chalk";
|
|
28
28
|
import { RegionName } from "../generatedApi.js";
|
|
29
|
+
import type { RegionName as PublishedRegionName } from "@convex-dev/platform/managementApi";
|
|
29
30
|
export type DeploymentName = string;
|
|
30
31
|
export type CloudDeploymentType = "prod" | "dev" | "preview" | "custom";
|
|
31
32
|
export type AccountRequiredDeploymentType = CloudDeploymentType | "local";
|
|
@@ -66,7 +67,10 @@ export async function createProject(
|
|
|
66
67
|
body: {
|
|
67
68
|
projectName,
|
|
68
69
|
deploymentType: deploymentToProvision?.deploymentType ?? null,
|
|
69
|
-
|
|
70
|
+
// The published platform types lag the CLI's own spec by a release,
|
|
71
|
+
// so the cast is deliberate: a new region needs no change here.
|
|
72
|
+
deploymentRegion: (deploymentToProvision?.region ??
|
|
73
|
+
null) as PublishedRegionName | null,
|
|
70
74
|
},
|
|
71
75
|
},
|
|
72
76
|
);
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { chalkStderr } from "chalk";
|
|
2
|
+
import { Context } from "../../bundler/context.js";
|
|
3
|
+
import {
|
|
4
|
+
changeSpinner,
|
|
5
|
+
logFinishedStep,
|
|
6
|
+
logMessage,
|
|
7
|
+
stopSpinner,
|
|
8
|
+
} from "../../bundler/log.js";
|
|
9
|
+
import { formatIndex } from "./indexes.js";
|
|
10
|
+
import { promptYesNo } from "./utils/prompts.js";
|
|
11
|
+
import { Span } from "./tracing.js";
|
|
12
|
+
import {
|
|
13
|
+
EvaluateSchemaResponse,
|
|
14
|
+
IndexPrediction,
|
|
15
|
+
} from "./deployApi/evaluateSchema.js";
|
|
16
|
+
import { SchemaEvaluation } from "./schemaEvaluation.js";
|
|
17
|
+
import { integerFromEnv } from "./utils/utils.js";
|
|
18
|
+
|
|
19
|
+
// Same size as the large index deletion check, so both index guards fire at
|
|
20
|
+
// the same table size. Separate env override so tests can trigger one
|
|
21
|
+
// without the other.
|
|
22
|
+
const MIN_DOCUMENTS_FOR_INDEX_BACKFILL_WARNING = 100_000;
|
|
23
|
+
|
|
24
|
+
export type LargeIndexBackfillCheck =
|
|
25
|
+
// Don’t check whether the push creates indexes on large tables
|
|
26
|
+
| "no verification"
|
|
27
|
+
// If it does, ask for confirmation (and fail in non-interactive envs)
|
|
28
|
+
| "ask for confirmation"
|
|
29
|
+
// If it does, proceed (the user has used --skip-large-indexes-check)
|
|
30
|
+
| "has confirmation";
|
|
31
|
+
|
|
32
|
+
type BlockingIndex = {
|
|
33
|
+
// The component instance path ("" for the root component), matching the
|
|
34
|
+
// keys of `componentSchemaEvaluations`.
|
|
35
|
+
componentPath: string;
|
|
36
|
+
index: IndexPrediction;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Warn — and on a real deploy require confirmation — when a push creates or
|
|
41
|
+
* enables a non-staged index on a large table. `wait_for_schema` blocks the
|
|
42
|
+
* deploy until every such index is backfilled, which can take a long time on
|
|
43
|
+
* large tables; staging the index instead backfills it in the background.
|
|
44
|
+
*
|
|
45
|
+
* Skipped silently when the deployment doesn't support `evaluate_schema`:
|
|
46
|
+
* the check protects the developer's time, not correctness.
|
|
47
|
+
*/
|
|
48
|
+
export async function checkForLargeIndexBackfill({
|
|
49
|
+
ctx,
|
|
50
|
+
span,
|
|
51
|
+
schemaEvaluation,
|
|
52
|
+
options,
|
|
53
|
+
mode,
|
|
54
|
+
}: {
|
|
55
|
+
ctx: Context;
|
|
56
|
+
span: Span;
|
|
57
|
+
schemaEvaluation: SchemaEvaluation;
|
|
58
|
+
options: { url: string };
|
|
59
|
+
// "warn" prints the warning without prompting, for dry runs.
|
|
60
|
+
mode: "warn" | "ask for confirmation" | "has confirmation";
|
|
61
|
+
}): Promise<void> {
|
|
62
|
+
changeSpinner("Verifying that the push isn’t creating large indexes...");
|
|
63
|
+
const response = await schemaEvaluation(span);
|
|
64
|
+
if (response === null) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const blockingIndexes = blockingIndexesFromSchemaEvaluation(
|
|
69
|
+
response,
|
|
70
|
+
minDocumentsForIndexBackfillWarning(),
|
|
71
|
+
);
|
|
72
|
+
if (blockingIndexes.length === 0) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const plural = blockingIndexes.length !== 1;
|
|
77
|
+
logMessage(`⚠️ This push will ${chalkStderr.bold("create")} the following ${plural ? "indexes on large tables" : "index on a large table"}
|
|
78
|
+
in your deployment (${options.url}). The deploy will block until ${plural ? "they finish" : "it finishes"} backfilling:
|
|
79
|
+
|
|
80
|
+
${blockingIndexes.map(formatBlockingIndex).join("\n")}
|
|
81
|
+
|
|
82
|
+
Tip: stage the index (e.g. \`.index("by_field", { fields: ["field"], staged: true })\`) to backfill
|
|
83
|
+
it in the background without blocking the deploy, then remove \`staged\` in a later push once it’s ready.
|
|
84
|
+
Learn more at https://docs.convex.dev/database/reading-data/indexes#staged-indexes
|
|
85
|
+
`);
|
|
86
|
+
|
|
87
|
+
if (mode === "warn") {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (mode === "has confirmation") {
|
|
92
|
+
logFinishedStep(
|
|
93
|
+
"Proceeding with push since --skip-large-indexes-check is set",
|
|
94
|
+
);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (!process.stdin.isTTY) {
|
|
99
|
+
return ctx.crash({
|
|
100
|
+
exitCode: 1,
|
|
101
|
+
errorType: "fatal",
|
|
102
|
+
printedMessage: `To confirm the push:
|
|
103
|
+
• run the deploy command in an ${chalkStderr.bold("interactive terminal")}
|
|
104
|
+
• or run the deploy command with the ${chalkStderr.bold("--skip-large-indexes-check")} flag`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
stopSpinner();
|
|
109
|
+
if (
|
|
110
|
+
!(await promptYesNo(ctx, {
|
|
111
|
+
message: `Create ${plural ? "these indexes" : "this index"} now?`,
|
|
112
|
+
default: false,
|
|
113
|
+
}))
|
|
114
|
+
) {
|
|
115
|
+
return ctx.crash({
|
|
116
|
+
exitCode: 1,
|
|
117
|
+
errorType: "fatal",
|
|
118
|
+
printedMessage: `Canceling push`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
logFinishedStep("Proceeding with push.");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// An index blocks the deploy when this push starts (`added`) or waits on
|
|
126
|
+
// (`enabled` before its staged backfill finished) a backfill that isn't
|
|
127
|
+
// staged. Added staged indexes report `needsBackfill` too but never block,
|
|
128
|
+
// and an in-progress backfill an earlier push started (`identical`) isn't
|
|
129
|
+
// this push's doing.
|
|
130
|
+
export function blockingIndexesFromSchemaEvaluation(
|
|
131
|
+
response: EvaluateSchemaResponse,
|
|
132
|
+
minDocuments: number,
|
|
133
|
+
): BlockingIndex[] {
|
|
134
|
+
return Object.entries(response.componentSchemaEvaluations).flatMap(
|
|
135
|
+
([componentPath, prediction]) =>
|
|
136
|
+
prediction.indexes
|
|
137
|
+
.filter(
|
|
138
|
+
(index) =>
|
|
139
|
+
index.needsBackfill &&
|
|
140
|
+
!index.staged &&
|
|
141
|
+
(index.change === "added" || index.change === "enabled") &&
|
|
142
|
+
index.numDocs >= minDocuments,
|
|
143
|
+
)
|
|
144
|
+
.map((index) => ({ componentPath, index })),
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function formatBlockingIndex({ componentPath, index }: BlockingIndex) {
|
|
149
|
+
const componentNameFormatted =
|
|
150
|
+
componentPath !== "" ? `${chalkStderr.gray(componentPath)}:` : "";
|
|
151
|
+
const documentsCountFormatted = chalkStderr.yellowBright(
|
|
152
|
+
`⚠️ ${index.numDocs.toLocaleString()} documents`,
|
|
153
|
+
);
|
|
154
|
+
const enabledNote =
|
|
155
|
+
index.change === "enabled"
|
|
156
|
+
? `\n ${chalkStderr.gray("enabled before its staged backfill finished")}`
|
|
157
|
+
: "";
|
|
158
|
+
return (
|
|
159
|
+
"⛔ " +
|
|
160
|
+
componentNameFormatted +
|
|
161
|
+
formatIndex(index) +
|
|
162
|
+
" " +
|
|
163
|
+
documentsCountFormatted +
|
|
164
|
+
enabledNote
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function minDocumentsForIndexBackfillWarning(): number {
|
|
169
|
+
return integerFromEnv(
|
|
170
|
+
"CONVEX_MIN_DOCUMENTS_FOR_INDEX_BACKFILL_WARNING",
|
|
171
|
+
MIN_DOCUMENTS_FOR_INDEX_BACKFILL_WARNING,
|
|
172
|
+
);
|
|
173
|
+
}
|