convex 1.45.0 → 1.46.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 +48 -6
- package/dist/browser.bundle.js +1 -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/cli/codegen.js +2 -0
- package/dist/cjs/cli/codegen.js.map +2 -2
- package/dist/cjs/cli/deploy.js +1 -0
- package/dist/cjs/cli/deploy.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/lib/checkForLargeIndexDeletion.js +101 -60
- package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js +107 -0
- package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
- package/dist/cjs/cli/lib/codegen.js.map +2 -2
- package/dist/cjs/cli/lib/components.js +12 -0
- package/dist/cjs/cli/lib/components.js.map +2 -2
- package/dist/cjs/cli/lib/deploy2.js +29 -2
- package/dist/cjs/cli/lib/deploy2.js.map +2 -2
- package/dist/cjs/cli/lib/deployApi/evaluateSchema.js +73 -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 +1 -0
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/generatedFunctionLogsApi.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/run.js +1 -0
- package/dist/cjs/cli/lib/run.js.map +2 -2
- package/dist/cjs/cli/lib/utils/utils.js +36 -29
- package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
- 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.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/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 +50 -3
- package/dist/cjs/server/schema.js.map +2 -2
- package/dist/cjs/values/validator.js +1 -1
- package/dist/cjs/values/validator.js.map +2 -2
- package/dist/cjs/values/validators.js +81 -25
- package/dist/cjs/values/validators.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/cli/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/docs.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts +26 -5
- package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts +14 -0
- package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/codegen.d.ts +1 -0
- package/dist/cjs-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/components.d.ts +1 -0
- package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploy2.d.ts +6 -0
- package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts +453 -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.map +1 -1
- 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/run.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +5 -5
- 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 +4 -4
- 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/index.d.ts +1 -1
- package/dist/cjs-types/server/index.d.ts.map +1 -1
- package/dist/cjs-types/server/meta.d.ts.map +1 -1
- package/dist/cjs-types/server/registration.d.ts +7 -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 +1 -0
- package/dist/cjs-types/server/schema.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/cli.bundle.cjs +347 -133
- 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/cli/codegen.js +2 -0
- package/dist/esm/cli/codegen.js.map +2 -2
- package/dist/esm/cli/deploy.js +1 -0
- package/dist/esm/cli/deploy.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/lib/checkForLargeIndexDeletion.js +100 -60
- package/dist/esm/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js +85 -0
- package/dist/esm/cli/lib/checkForSlowSchemaValidation.js.map +7 -0
- package/dist/esm/cli/lib/codegen.js.map +2 -2
- package/dist/esm/cli/lib/components.js +12 -0
- package/dist/esm/cli/lib/components.js.map +2 -2
- package/dist/esm/cli/lib/deploy2.js +30 -2
- package/dist/esm/cli/lib/deploy2.js.map +2 -2
- package/dist/esm/cli/lib/deployApi/evaluateSchema.js +46 -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 +1 -0
- package/dist/esm/cli/lib/dev.js.map +2 -2
- 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/run.js +1 -0
- package/dist/esm/cli/lib/run.js.map +2 -2
- package/dist/esm/cli/lib/utils/utils.js +36 -30
- package/dist/esm/cli/lib/utils/utils.js.map +2 -2
- 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.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/index.js.map +2 -2
- package/dist/esm/server/schema.js +50 -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 +81 -25
- package/dist/esm/values/validators.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/cli/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/docs.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts +26 -5
- package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts +14 -0
- package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/codegen.d.ts +1 -0
- package/dist/esm-types/cli/lib/codegen.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/components.d.ts +1 -0
- package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploy2.d.ts +6 -0
- package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts +453 -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.map +1 -1
- 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/run.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/utils/utils.d.ts +5 -5
- 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 +4 -4
- 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/index.d.ts +1 -1
- package/dist/esm-types/server/index.d.ts.map +1 -1
- package/dist/esm-types/server/meta.d.ts.map +1 -1
- package/dist/esm-types/server/registration.d.ts +7 -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 +1 -0
- package/dist/esm-types/server/schema.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/react.bundle.js +1 -1
- package/dist/react.bundle.js.map +2 -2
- package/package.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/cli/codegen.ts +1 -0
- package/src/cli/deploy.ts +1 -0
- package/src/cli/docs.ts +3 -44
- package/src/cli/lib/checkForLargeIndexDeletion.ts +154 -82
- package/src/cli/lib/checkForSlowSchemaValidation.ts +130 -0
- package/src/cli/lib/codegen.ts +1 -0
- package/src/cli/lib/components.ts +17 -0
- package/src/cli/lib/deploy2.ts +56 -1
- package/src/cli/lib/deployApi/evaluateSchema.ts +62 -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 +1 -0
- package/src/cli/lib/generatedFunctionLogsApi.ts +2 -0
- 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/run.ts +1 -0
- package/src/cli/lib/utils/utils.ts +63 -35
- 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 +13 -4
- package/src/server/impl/meta_impl.ts +8 -1
- package/src/server/impl/scheduler_impl.ts +13 -6
- package/src/server/index.ts +1 -0
- package/src/server/meta.ts +25 -0
- package/src/server/registration.ts +28 -7
- package/src/server/scheduler.ts +22 -7
- package/src/server/schema.ts +55 -0
- package/src/values/validator.ts +3 -1
- package/src/values/validators.ts +84 -26
package/dist/cjs/cli/docs.js
CHANGED
|
@@ -34,45 +34,12 @@ module.exports = __toCommonJS(docs_exports);
|
|
|
34
34
|
var import_extra_typings = require("@commander-js/extra-typings");
|
|
35
35
|
var import_chalk = require("chalk");
|
|
36
36
|
var import_open = __toESM(require("open"), 1);
|
|
37
|
-
var import_context = require("../bundler/context.js");
|
|
38
37
|
var import_log = require("../bundler/log.js");
|
|
39
|
-
var import_utils = require("./lib/utils/utils.js");
|
|
40
|
-
var import_deploymentSelection = require("./lib/deploymentSelection.js");
|
|
41
38
|
const docs = new import_extra_typings.Command("docs").description("Open the docs in the browser").allowExcessArguments(false).option("--no-open", "Print docs URL instead of opening it in your browser").action(async (options) => {
|
|
42
|
-
|
|
43
|
-
url: void 0,
|
|
44
|
-
adminKey: void 0,
|
|
45
|
-
envFile: void 0
|
|
46
|
-
});
|
|
47
|
-
const deploymentSelection = await (0, import_deploymentSelection.getDeploymentSelection)(ctx, {
|
|
48
|
-
url: void 0,
|
|
49
|
-
adminKey: void 0,
|
|
50
|
-
envFile: void 0
|
|
51
|
-
});
|
|
52
|
-
const configuredDeployment = (0, import_deploymentSelection.deploymentNameFromSelection)(deploymentSelection);
|
|
53
|
-
if (configuredDeployment === null) {
|
|
54
|
-
await openDocs(ctx, options.open);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const getCookieUrl = new URL(
|
|
58
|
-
`get_cookie/${configuredDeployment}`,
|
|
59
|
-
import_utils.BIG_BRAIN_URL
|
|
60
|
-
);
|
|
61
|
-
const fetch = (0, import_utils.bigBrainFetch)(ctx);
|
|
62
|
-
try {
|
|
63
|
-
const res = await fetch(getCookieUrl);
|
|
64
|
-
(0, import_utils.deprecationCheckWarning)(ctx, res);
|
|
65
|
-
const { cookie } = await res.json();
|
|
66
|
-
await openDocs(ctx, options.open, cookie);
|
|
67
|
-
} catch {
|
|
68
|
-
await openDocs(ctx, options.open);
|
|
69
|
-
}
|
|
39
|
+
await openDocs(options.open);
|
|
70
40
|
});
|
|
71
|
-
async function openDocs(
|
|
72
|
-
|
|
73
|
-
if (cookie !== void 0) {
|
|
74
|
-
docsUrl += "/?t=" + cookie;
|
|
75
|
-
}
|
|
41
|
+
async function openDocs(toOpen) {
|
|
42
|
+
const docsUrl = "https://docs.convex.dev/?utm_source=convex-cli";
|
|
76
43
|
if (toOpen) {
|
|
77
44
|
await (0, import_open.default)(docsUrl);
|
|
78
45
|
(0, import_log.logMessage)(import_chalk.chalkStderr.green("Docs have launched! Check your browser."));
|
package/dist/cjs/cli/docs.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/docs.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport open from \"open\";\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwB;AACxB,mBAA4B;AAC5B,kBAAiB;AACjB,
|
|
4
|
+
"sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport open from \"open\";\nimport { logMessage } from \"../bundler/log.js\";\n\nexport const docs = new Command(\"docs\")\n .description(\"Open the docs in the browser\")\n .allowExcessArguments(false)\n .option(\"--no-open\", \"Print docs URL instead of opening it in your browser\")\n .action(async (options) => {\n await openDocs(options.open);\n });\n\nasync function openDocs(toOpen: boolean) {\n const docsUrl = \"https://docs.convex.dev/?utm_source=convex-cli\";\n if (toOpen) {\n await open(docsUrl);\n logMessage(chalkStderr.green(\"Docs have launched! Check your browser.\"));\n } else {\n logMessage(chalkStderr.green(`Find Convex docs here: ${docsUrl}`));\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwB;AACxB,mBAA4B;AAC5B,kBAAiB;AACjB,iBAA2B;AAEpB,MAAM,OAAO,IAAI,6BAAQ,MAAM,EACnC,YAAY,8BAA8B,EAC1C,qBAAqB,KAAK,EAC1B,OAAO,aAAa,sDAAsD,EAC1E,OAAO,OAAO,YAAY;AACzB,QAAM,SAAS,QAAQ,IAAI;AAC7B,CAAC;AAEH,eAAe,SAAS,QAAiB;AACvC,QAAM,UAAU;AAChB,MAAI,QAAQ;AACV,cAAM,YAAAA,SAAK,OAAO;AAClB,+BAAW,yBAAY,MAAM,yCAAyC,CAAC;AAAA,EACzE,OAAO;AACL,+BAAW,yBAAY,MAAM,0BAA0B,OAAO,EAAE,CAAC;AAAA,EACnE;AACF;",
|
|
6
6
|
"names": ["open"]
|
|
7
7
|
}
|
|
@@ -18,7 +18,9 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var checkForLargeIndexDeletion_exports = {};
|
|
20
20
|
__export(checkForLargeIndexDeletion_exports, {
|
|
21
|
-
checkForLargeIndexDeletion: () => checkForLargeIndexDeletion
|
|
21
|
+
checkForLargeIndexDeletion: () => checkForLargeIndexDeletion,
|
|
22
|
+
deletedIndexesFromSchemaEvaluation: () => deletedIndexesFromSchemaEvaluation,
|
|
23
|
+
deletedIndexesFromTableSizes: () => deletedIndexesFromTableSizes
|
|
22
24
|
});
|
|
23
25
|
module.exports = __toCommonJS(checkForLargeIndexDeletion_exports);
|
|
24
26
|
var import_chalk = require("chalk");
|
|
@@ -36,71 +38,28 @@ async function checkForLargeIndexDeletion({
|
|
|
36
38
|
askForConfirmation
|
|
37
39
|
}) {
|
|
38
40
|
(0, import_log.changeSpinner)("Verifying that the push isn\u2019t deleting large indexes...");
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}))
|
|
46
|
-
);
|
|
41
|
+
const deletedIndexes = await deletedIndexesFromSchemaEvaluation({
|
|
42
|
+
ctx,
|
|
43
|
+
span,
|
|
44
|
+
request,
|
|
45
|
+
options
|
|
46
|
+
}) ?? await deletedIndexesFromTableSizes({ ctx, span, request, options });
|
|
47
47
|
if (deletedIndexes.length === 0) {
|
|
48
48
|
(0, import_log.logFinishedStep)("No indexes are deleted by this push");
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
|
-
const tablesWithDeletedIndexes = [
|
|
52
|
-
...new Set(
|
|
53
|
-
deletedIndexes.map(
|
|
54
|
-
({ componentDefinitionPath, index }) => `${componentDefinitionPath}:${getTableName(index)}`
|
|
55
|
-
)
|
|
56
|
-
)
|
|
57
|
-
].map((str) => {
|
|
58
|
-
const [componentDefinitionPath, table] = str.split(":");
|
|
59
|
-
return { componentDefinitionPath, table };
|
|
60
|
-
});
|
|
61
|
-
(0, import_log.changeSpinner)("Checking whether the deleted indexes are on large tables...");
|
|
62
|
-
const documentCounts = await Promise.all(
|
|
63
|
-
tablesWithDeletedIndexes.map(
|
|
64
|
-
async ({ componentDefinitionPath, table }) => ({
|
|
65
|
-
componentDefinitionPath,
|
|
66
|
-
table,
|
|
67
|
-
count: await (0, import_run.runSystemQuery)(ctx, {
|
|
68
|
-
deploymentUrl: options.url,
|
|
69
|
-
adminKey: options.adminKey,
|
|
70
|
-
functionName: "_system/cli/tableSize:default",
|
|
71
|
-
componentPath: componentDefinitionPath,
|
|
72
|
-
args: { tableName: table }
|
|
73
|
-
})
|
|
74
|
-
})
|
|
75
|
-
)
|
|
76
|
-
);
|
|
77
|
-
const deletedIndexesWithDocumentsCount = deletedIndexes.map(
|
|
78
|
-
({ componentDefinitionPath, index }) => ({
|
|
79
|
-
componentDefinitionPath,
|
|
80
|
-
index,
|
|
81
|
-
count: documentCounts.find(
|
|
82
|
-
(count) => count.table === getTableName(index) && count.componentDefinitionPath === componentDefinitionPath
|
|
83
|
-
).count
|
|
84
|
-
})
|
|
85
|
-
);
|
|
86
51
|
const minDocumentsForWarning = minDocumentsForIndexDeleteWarning();
|
|
87
|
-
if (!
|
|
88
|
-
({
|
|
52
|
+
if (!deletedIndexes.some(
|
|
53
|
+
({ documentsCount }) => documentsCount >= minDocumentsForWarning
|
|
89
54
|
)) {
|
|
90
55
|
(0, import_log.logFinishedStep)("No large indexes are deleted by this push");
|
|
91
56
|
return;
|
|
92
57
|
}
|
|
93
|
-
(0, import_log.logMessage)(`\u26A0\uFE0F This code push will ${import_chalk.chalkStderr.bold("delete")} the following ${
|
|
58
|
+
(0, import_log.logMessage)(`\u26A0\uFE0F This code push will ${import_chalk.chalkStderr.bold("delete")} the following ${deletedIndexes.length === 1 ? "index" : "indexes"}
|
|
94
59
|
from your production deployment (${options.url}):
|
|
95
60
|
|
|
96
|
-
${
|
|
97
|
-
({
|
|
98
|
-
componentDefinitionPath,
|
|
99
|
-
index,
|
|
100
|
-
indexDiff: indexDiffs[componentDefinitionPath],
|
|
101
|
-
documentsCount: count,
|
|
102
|
-
minDocumentsForWarning
|
|
103
|
-
})
|
|
61
|
+
${deletedIndexes.map(
|
|
62
|
+
(deletedIndex) => formatDeletedIndex({ ...deletedIndex, minDocumentsForWarning })
|
|
104
63
|
).join("\n")}
|
|
105
64
|
|
|
106
65
|
The documents that are in the index won\u2019t be deleted, but the index will need
|
|
@@ -123,7 +82,7 @@ to be backfilled again if you want to restore it later.
|
|
|
123
82
|
}
|
|
124
83
|
(0, import_log.stopSpinner)();
|
|
125
84
|
if (!await (0, import_prompts.promptYesNo)(ctx, {
|
|
126
|
-
message: `Delete ${
|
|
85
|
+
message: `Delete ${deletedIndexes.length === 1 ? "this index" : "these indexes"}?`,
|
|
127
86
|
default: false
|
|
128
87
|
})) {
|
|
129
88
|
return ctx.crash({
|
|
@@ -134,16 +93,98 @@ to be backfilled again if you want to restore it later.
|
|
|
134
93
|
}
|
|
135
94
|
(0, import_log.logFinishedStep)("Proceeding with push.");
|
|
136
95
|
}
|
|
96
|
+
async function deletedIndexesFromSchemaEvaluation({
|
|
97
|
+
ctx,
|
|
98
|
+
span,
|
|
99
|
+
request,
|
|
100
|
+
options
|
|
101
|
+
}) {
|
|
102
|
+
try {
|
|
103
|
+
const response = await (0, import_deploy2.evaluateSchema)(
|
|
104
|
+
ctx,
|
|
105
|
+
span,
|
|
106
|
+
request,
|
|
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
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function deletedIndexesFromTableSizes({
|
|
129
|
+
ctx,
|
|
130
|
+
span,
|
|
131
|
+
request,
|
|
132
|
+
options
|
|
133
|
+
}) {
|
|
134
|
+
const { schemaChange } = await (0, import_deploy2.evaluatePush)(ctx, span, request, options);
|
|
135
|
+
const indexDiffs = schemaChange.indexDiffs ?? {};
|
|
136
|
+
const deletedIndexes = Object.entries(indexDiffs).flatMap(
|
|
137
|
+
([componentPath, indexDiff]) => indexDiff.removed_indexes.map((index) => ({
|
|
138
|
+
componentPath,
|
|
139
|
+
index,
|
|
140
|
+
replacedBy: indexDiff.added_indexes.find((other) => other.name === index.name) ?? null
|
|
141
|
+
}))
|
|
142
|
+
);
|
|
143
|
+
if (deletedIndexes.length === 0) {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
const tablesWithDeletedIndexes = [
|
|
147
|
+
...new Set(
|
|
148
|
+
deletedIndexes.map(
|
|
149
|
+
({ componentPath, index }) => `${componentPath}:${getTableName(index)}`
|
|
150
|
+
)
|
|
151
|
+
)
|
|
152
|
+
].map((str) => {
|
|
153
|
+
const [componentPath, table] = str.split(":");
|
|
154
|
+
return { componentPath, table };
|
|
155
|
+
});
|
|
156
|
+
(0, import_log.changeSpinner)("Checking whether the deleted indexes are on large tables...");
|
|
157
|
+
const documentCounts = await Promise.all(
|
|
158
|
+
tablesWithDeletedIndexes.map(async ({ componentPath, table }) => ({
|
|
159
|
+
componentPath,
|
|
160
|
+
table,
|
|
161
|
+
count: await (0, import_run.runSystemQuery)(ctx, {
|
|
162
|
+
deploymentUrl: options.url,
|
|
163
|
+
adminKey: options.adminKey,
|
|
164
|
+
functionName: "_system/cli/tableSize:default",
|
|
165
|
+
componentPath,
|
|
166
|
+
args: { tableName: table }
|
|
167
|
+
})
|
|
168
|
+
}))
|
|
169
|
+
);
|
|
170
|
+
return deletedIndexes.map(({ componentPath, index, replacedBy }) => ({
|
|
171
|
+
componentPath,
|
|
172
|
+
index,
|
|
173
|
+
replacedBy,
|
|
174
|
+
documentsCount: documentCounts.find(
|
|
175
|
+
(count) => count.table === getTableName(index) && count.componentPath === componentPath
|
|
176
|
+
).count
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
137
179
|
function formatDeletedIndex({
|
|
138
|
-
|
|
180
|
+
componentPath,
|
|
139
181
|
index,
|
|
140
|
-
indexDiff,
|
|
141
182
|
documentsCount,
|
|
183
|
+
replacedBy,
|
|
142
184
|
minDocumentsForWarning
|
|
143
185
|
}) {
|
|
144
|
-
const componentNameFormatted =
|
|
186
|
+
const componentNameFormatted = componentPath !== "" ? `${import_chalk.chalkStderr.gray(componentPath)}:` : "";
|
|
145
187
|
const documentsCountFormatted = documentsCount >= minDocumentsForWarning ? ` ${import_chalk.chalkStderr.yellowBright(`\u26A0\uFE0F ${documentsCount.toLocaleString()} documents`)}` : ` ${documentsCount.toLocaleString()} ${documentsCount === 1 ? "document" : "documents"}`;
|
|
146
|
-
const replacedBy = indexDiff.added_indexes.find((i) => i.name === index.name);
|
|
147
188
|
const replacedByFormatted = replacedBy ? `
|
|
148
189
|
${import_chalk.chalkStderr.green("\u2192 replaced by:")} ${(0, import_indexes.formatIndex)(replacedBy)}` : "";
|
|
149
190
|
return "\u26D4 " + componentNameFormatted + (0, import_indexes.formatIndex)(index) + documentsCountFormatted + replacedByFormatted;
|
|
@@ -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 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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAE5B,
|
|
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, evaluateSchema } from \"./deploy2.js\";\nimport { DeveloperIndexConfig } from \"./deployApi/finishPush.js\";\nimport { runSystemQuery } from \"./run.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 askForConfirmation,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: CheckOptions;\n askForConfirmation: boolean;\n}): Promise<void> {\n changeSpinner(\"Verifying that the push isn\u2019t deleting large indexes...\");\n\n const deletedIndexes =\n (await deletedIndexesFromSchemaEvaluation({\n ctx,\n span,\n request,\n options,\n })) ??\n (await deletedIndexesFromTableSizes({ ctx, span, request, options }));\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 if (!askForConfirmation) {\n logFinishedStep(\n \"Proceeding with push since --allow-deleting-large-indexes 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-deleting-large-indexes\")} 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. Returns null when the\n// deployment doesn't support the endpoint, in which case the caller falls\n// back to sizing tables one system query at a time.\nexport async function deletedIndexesFromSchemaEvaluation({\n ctx,\n span,\n request,\n options,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: CheckOptions;\n}): Promise<DeletedIndex[] | null> {\n try {\n const response = await evaluateSchema(\n ctx,\n span,\n request,\n options,\n /* bestEffort */ true,\n );\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) =>\n other.change === \"added\" && other.name === index.name,\n ) ?? null,\n })),\n );\n } catch (error: unknown) {\n logVerbose(\n `Schema evaluation unavailable, sizing deleted indexes per table: ${error instanceof Error ? error.message : String(error)}`,\n );\n return null;\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 const envValue = process.env.CONVEX_MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING;\n if (envValue !== undefined) {\n const parsed = parseInt(envValue, 10);\n if (!isNaN(parsed)) {\n return parsed;\n }\n }\n return MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,107 @@
|
|
|
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 checkForSlowSchemaValidation_exports = {};
|
|
20
|
+
__export(checkForSlowSchemaValidation_exports, {
|
|
21
|
+
checkForSlowSchemaValidation: () => checkForSlowSchemaValidation
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(checkForSlowSchemaValidation_exports);
|
|
24
|
+
var import_chalk = require("chalk");
|
|
25
|
+
var import_log = require("../../bundler/log.js");
|
|
26
|
+
var import_deploy2 = require("./deploy2.js");
|
|
27
|
+
var import_utils = require("./utils/utils.js");
|
|
28
|
+
const MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27;
|
|
29
|
+
async function checkForSlowSchemaValidation({
|
|
30
|
+
ctx,
|
|
31
|
+
span,
|
|
32
|
+
request,
|
|
33
|
+
options
|
|
34
|
+
}) {
|
|
35
|
+
const response = await evaluateSchemaBestEffort({
|
|
36
|
+
ctx,
|
|
37
|
+
span,
|
|
38
|
+
request,
|
|
39
|
+
options
|
|
40
|
+
});
|
|
41
|
+
if (response === null) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const walkedTables = Object.entries(
|
|
45
|
+
response.componentSchemaEvaluations
|
|
46
|
+
).flatMap(
|
|
47
|
+
([componentPath, prediction]) => prediction.tables.filter((table) => table.outcome === "mustWalk").map((table) => ({ componentPath, table }))
|
|
48
|
+
);
|
|
49
|
+
if (walkedTables.length === 0) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const totalBytes = walkedTables.reduce(
|
|
53
|
+
(sum, { table }) => sum + table.sizeBytes,
|
|
54
|
+
0
|
|
55
|
+
);
|
|
56
|
+
if (totalBytes < minBytesForSchemaWalkWarning()) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
(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
|
+
${walkedTables.map(
|
|
62
|
+
({ componentPath, table }) => formatWalkedTable({ componentPath, table })
|
|
63
|
+
).join("\n")}
|
|
64
|
+
`);
|
|
65
|
+
}
|
|
66
|
+
async function evaluateSchemaBestEffort({
|
|
67
|
+
ctx,
|
|
68
|
+
span,
|
|
69
|
+
request,
|
|
70
|
+
options
|
|
71
|
+
}) {
|
|
72
|
+
try {
|
|
73
|
+
return await (0, import_deploy2.evaluateSchema)(
|
|
74
|
+
ctx,
|
|
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)}`
|
|
84
|
+
);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function formatWalkedTable({
|
|
89
|
+
componentPath,
|
|
90
|
+
table
|
|
91
|
+
}) {
|
|
92
|
+
const componentPrefix = componentPath !== "" ? `${import_chalk.chalkStderr.gray(componentPath)}: ` : "";
|
|
93
|
+
const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;
|
|
94
|
+
const sizeFormatted = (0, import_utils.formatSize)(table.sizeBytes);
|
|
95
|
+
return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})`;
|
|
96
|
+
}
|
|
97
|
+
function minBytesForSchemaWalkWarning() {
|
|
98
|
+
const envValue = process.env.CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
|
|
99
|
+
if (envValue !== void 0) {
|
|
100
|
+
const parsed = parseInt(envValue, 10);
|
|
101
|
+
if (!isNaN(parsed)) {
|
|
102
|
+
return parsed;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=checkForSlowSchemaValidation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/cli/lib/checkForSlowSchemaValidation.ts"],
|
|
4
|
+
"sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logMessage, logVerbose } from \"../../bundler/log.js\";\nimport { Span } from \"./tracing.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport {\n EvaluateSchemaResponse,\n TablePrediction,\n} from \"./deployApi/evaluateSchema.js\";\nimport { evaluateSchema } from \"./deploy2.js\";\nimport { formatSize } from \"./utils/utils.js\";\n\nconst MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27; // 128 MiB\n\nexport async function checkForSlowSchemaValidation({\n ctx,\n span,\n request,\n options,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: {\n url: string;\n deploymentName: string | null;\n adminKey: string;\n };\n}): Promise<void> {\n const response = await evaluateSchemaBestEffort({\n ctx,\n span,\n request,\n options,\n });\n if (response === null) {\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 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}\n\n// This warning is advisory: if evaluation fails, fall back to skipping it\n// rather than aborting the push over a check that isn't required for\n// correctness. Plausibly transient failures \u2014 network errors and 5xx\n// responses (e.g. table summaries still bootstrapping) \u2014 are retried with\n// backoff by the shared fetch wrapper (see `pushCode`); anything else is\n// deterministic, including a 2xx whose shape the CLI doesn't recognize, so\n// it skips the check immediately.\nasync function evaluateSchemaBestEffort({\n ctx,\n span,\n request,\n options,\n}: {\n ctx: Context;\n span: Span;\n request: StartPushRequest;\n options: {\n url: string;\n deploymentName: string | null;\n adminKey: string;\n };\n}): Promise<EvaluateSchemaResponse | null> {\n try {\n return await evaluateSchema(\n ctx,\n span,\n request,\n options,\n /* bestEffort */ true,\n );\n } catch (error: unknown) {\n logVerbose(\n `Skipping slow schema validation check: ${error instanceof Error ? error.message : String(error)}`,\n );\n return null;\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 return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})`;\n}\n\nfunction minBytesForSchemaWalkWarning(): number {\n const envValue = process.env.CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING;\n if (envValue !== undefined) {\n const parsed = parseInt(envValue, 10);\n if (!isNaN(parsed)) {\n return parsed;\n }\n }\n return MIN_BYTES_FOR_SCHEMA_WALK_WARNING;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA4B;AAE5B,iBAAuC;AAOvC,qBAA+B;AAC/B,mBAA2B;AAE3B,MAAM,oCAAoC,KAAK;AAE/C,eAAsB,6BAA6B;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASkB;AAChB,QAAM,WAAW,MAAM,yBAAyB;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI,aAAa,MAAM;AACrB;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,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,CACZ;AACD;AASA,eAAe,yBAAyB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAS2C;AACzC,MAAI;AACF,WAAO,UAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACiB;AAAA,IACnB;AAAA,EACF,SAAS,OAAgB;AACvB;AAAA,MACE,0CAA0C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAClG;AACA,WAAO;AAAA,EACT;AACF;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,SAAO,KAAK,eAAe,GAAG,MAAM,IAAI,KAAK,aAAa,GAAG,aAAa;AAC5E;AAEA,SAAS,+BAAuC;AAC9C,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,aAAa,QAAW;AAC1B,UAAM,SAAS,SAAS,UAAU,EAAE;AACpC,QAAI,CAAC,MAAM,MAAM,GAAG;AAClB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|