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/cli.bundle.cjs
CHANGED
|
@@ -15222,7 +15222,7 @@ var require_context = __commonJS({
|
|
|
15222
15222
|
};
|
|
15223
15223
|
});
|
|
15224
15224
|
var nodeContextIntegration = core.defineIntegration(_nodeContextIntegration);
|
|
15225
|
-
var
|
|
15225
|
+
var Context11 = core.convertIntegrationFnToClass(INTEGRATION_NAME, nodeContextIntegration);
|
|
15226
15226
|
function _updateContext(contexts) {
|
|
15227
15227
|
if (_optionalChain([contexts, "optionalAccess", (_11) => _11.app, "optionalAccess", (_12) => _12.app_memory])) {
|
|
15228
15228
|
contexts.app.app_memory = process.memoryUsage().rss;
|
|
@@ -15432,7 +15432,7 @@ var require_context = __commonJS({
|
|
|
15432
15432
|
return void 0;
|
|
15433
15433
|
}
|
|
15434
15434
|
}
|
|
15435
|
-
exports2.Context =
|
|
15435
|
+
exports2.Context = Context11;
|
|
15436
15436
|
exports2.getDeviceContext = getDeviceContext;
|
|
15437
15437
|
exports2.nodeContextIntegration = nodeContextIntegration;
|
|
15438
15438
|
exports2.readDirAsync = readDirAsync;
|
|
@@ -47456,7 +47456,7 @@ var version;
|
|
|
47456
47456
|
var init_index = __esm({
|
|
47457
47457
|
"src/index.ts"() {
|
|
47458
47458
|
"use strict";
|
|
47459
|
-
version = "1.
|
|
47459
|
+
version = "1.46.0";
|
|
47460
47460
|
}
|
|
47461
47461
|
});
|
|
47462
47462
|
|
|
@@ -50783,6 +50783,9 @@ function printLocalDeploymentWelcomeMessage() {
|
|
|
50783
50783
|
)
|
|
50784
50784
|
);
|
|
50785
50785
|
}
|
|
50786
|
+
function releaseDate(version4) {
|
|
50787
|
+
return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version4)?.[1] ?? null;
|
|
50788
|
+
}
|
|
50786
50789
|
var LOCAL_BACKEND_INSTANCE_SECRET;
|
|
50787
50790
|
var init_utils2 = __esm({
|
|
50788
50791
|
"src/cli/lib/localDeployment/utils.ts"() {
|
|
@@ -53834,6 +53837,16 @@ var init_download = __esm({
|
|
|
53834
53837
|
});
|
|
53835
53838
|
|
|
53836
53839
|
// src/cli/lib/localDeployment/run.ts
|
|
53840
|
+
function _backendSupportsControlPlaneAuth(version4) {
|
|
53841
|
+
if (version4 === FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION) {
|
|
53842
|
+
return true;
|
|
53843
|
+
}
|
|
53844
|
+
const backendDate = releaseDate(version4);
|
|
53845
|
+
const firstSupportedDate = releaseDate(
|
|
53846
|
+
FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION
|
|
53847
|
+
);
|
|
53848
|
+
return backendDate !== null && firstSupportedDate !== null && backendDate > firstSupportedDate;
|
|
53849
|
+
}
|
|
53837
53850
|
async function parseStartupTimeoutSecs(ctx) {
|
|
53838
53851
|
const raw = process.env.CONVEX_LOCAL_BACKEND_STARTUP_TIMEOUT_SECS;
|
|
53839
53852
|
if (raw === void 0) {
|
|
@@ -53921,7 +53934,22 @@ async function runLocalBackend(ctx, args) {
|
|
|
53921
53934
|
errForSentry: new LocalDeploymentError(message)
|
|
53922
53935
|
});
|
|
53923
53936
|
}
|
|
53924
|
-
const
|
|
53937
|
+
const supportsControlPlane = _backendSupportsControlPlaneAuth(
|
|
53938
|
+
args.backendVersion
|
|
53939
|
+
);
|
|
53940
|
+
if (supportsControlPlane && provisionHost !== productionProvisionHost) {
|
|
53941
|
+
commandArgs.push("--control-plane-url", provisionHost);
|
|
53942
|
+
}
|
|
53943
|
+
const auth2 = ctx.bigBrainAuth();
|
|
53944
|
+
if (supportsControlPlane && args.deploymentKind === "local" && auth2?.kind === "accessToken") {
|
|
53945
|
+
commandArgs.push("--control-plane-access-token", auth2.accessToken);
|
|
53946
|
+
}
|
|
53947
|
+
const displayArgs = commandArgs.map(
|
|
53948
|
+
(arg, index) => index > 0 && ["--instance-secret", "--control-plane-access-token"].includes(
|
|
53949
|
+
commandArgs[index - 1]
|
|
53950
|
+
) ? "[REDACTED]" : arg
|
|
53951
|
+
);
|
|
53952
|
+
const commandStr = `${args.binaryPath} ${displayArgs.join(" ")}`;
|
|
53925
53953
|
logVerbose(`Starting local backend: \`${commandStr}\``);
|
|
53926
53954
|
const p = import_child_process2.default.spawn(args.binaryPath, commandArgs, {
|
|
53927
53955
|
stdio: "ignore",
|
|
@@ -54125,6 +54153,7 @@ Run \`npx convex dev\` first.`
|
|
|
54125
54153
|
const instanceSecret = config3.instanceSecret ?? LOCAL_BACKEND_INSTANCE_SECRET;
|
|
54126
54154
|
const { cleanupHandle } = await runLocalBackend(ctx, {
|
|
54127
54155
|
binaryPath,
|
|
54156
|
+
backendVersion: config3.backendVersion,
|
|
54128
54157
|
ports: config3.ports,
|
|
54129
54158
|
deploymentKind,
|
|
54130
54159
|
deploymentName: args.deploymentName,
|
|
@@ -54140,7 +54169,7 @@ Run \`npx convex dev\` first.`
|
|
|
54140
54169
|
}
|
|
54141
54170
|
};
|
|
54142
54171
|
}
|
|
54143
|
-
var import_path6, import_child_process2, import_crypto3, DEFAULT_STARTUP_TIMEOUT_SECS;
|
|
54172
|
+
var import_path6, import_child_process2, import_crypto3, DEFAULT_STARTUP_TIMEOUT_SECS, FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION;
|
|
54144
54173
|
var init_run = __esm({
|
|
54145
54174
|
"src/cli/lib/localDeployment/run.ts"() {
|
|
54146
54175
|
"use strict";
|
|
@@ -54154,7 +54183,9 @@ var init_run = __esm({
|
|
|
54154
54183
|
import_crypto3 = require("crypto");
|
|
54155
54184
|
init_errors3();
|
|
54156
54185
|
init_utils2();
|
|
54186
|
+
init_config();
|
|
54157
54187
|
DEFAULT_STARTUP_TIMEOUT_SECS = 30;
|
|
54188
|
+
FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION = "precompiled-2026-09-15-4e9b83a";
|
|
54158
54189
|
}
|
|
54159
54190
|
});
|
|
54160
54191
|
|
|
@@ -64238,23 +64269,19 @@ function waitUntilCalled() {
|
|
|
64238
64269
|
return [waitPromise, () => onCalled(null)];
|
|
64239
64270
|
}
|
|
64240
64271
|
function formatSize(n) {
|
|
64241
|
-
|
|
64242
|
-
|
|
64272
|
+
let value = n;
|
|
64273
|
+
let unitIndex = 0;
|
|
64274
|
+
while (value >= 1024 && unitIndex < BYTE_UNITS.length - 1) {
|
|
64275
|
+
value /= 1024;
|
|
64276
|
+
unitIndex++;
|
|
64243
64277
|
}
|
|
64244
|
-
|
|
64245
|
-
|
|
64246
|
-
|
|
64247
|
-
|
|
64248
|
-
if (n % unitSize === 0) {
|
|
64249
|
-
return `${n / unitSize} ${unitName}`;
|
|
64250
|
-
}
|
|
64251
|
-
if (n * 10 % unitSize === 0) {
|
|
64252
|
-
const whole = Math.floor(n / unitSize);
|
|
64253
|
-
const frac = Math.floor(n * 10 / unitSize) % 10;
|
|
64254
|
-
return `${whole}.${frac} ${unitName}`;
|
|
64255
|
-
}
|
|
64278
|
+
const roundedValue = Number(value.toFixed(1));
|
|
64279
|
+
if (roundedValue >= 1024 && unitIndex < BYTE_UNITS.length - 1) {
|
|
64280
|
+
value /= 1024;
|
|
64281
|
+
unitIndex++;
|
|
64256
64282
|
}
|
|
64257
|
-
|
|
64283
|
+
const formatted = value.toFixed(1).replace(/\.0$/, "");
|
|
64284
|
+
return `${formatted} ${BYTE_UNITS[unitIndex]}`;
|
|
64258
64285
|
}
|
|
64259
64286
|
function formatDuration(ms) {
|
|
64260
64287
|
const twoDigits = (n, unit) => `${n.toLocaleString("en-US", { maximumFractionDigits: 2 })}${unit}`;
|
|
@@ -64371,8 +64398,8 @@ function retryDelay(attempt, _error, _response) {
|
|
|
64371
64398
|
const randomSum = delay * 0.2 * Math.random();
|
|
64372
64399
|
return delay + randomSum;
|
|
64373
64400
|
}
|
|
64374
|
-
function deploymentFetchRetryOn(onError, method) {
|
|
64375
|
-
const
|
|
64401
|
+
function deploymentFetchRetryOn(onError, method, maxRetries = MAX_RETRIES, shouldRetryOverride) {
|
|
64402
|
+
const defaultShouldRetry = function(_attempt, error3, response) {
|
|
64376
64403
|
if (error3 !== null) {
|
|
64377
64404
|
return { kind: "retry", error: error3 };
|
|
64378
64405
|
}
|
|
@@ -64418,12 +64445,18 @@ function deploymentFetchRetryOn(onError, method) {
|
|
|
64418
64445
|
}
|
|
64419
64446
|
return { kind: "stop" };
|
|
64420
64447
|
};
|
|
64448
|
+
const shouldRetry = shouldRetryOverride ? function(_attempt, error3, response) {
|
|
64449
|
+
return shouldRetryOverride(error3, response) ? {
|
|
64450
|
+
kind: "retry",
|
|
64451
|
+
error: error3 ?? `Received response with status ${response?.status}`
|
|
64452
|
+
} : { kind: "stop" };
|
|
64453
|
+
} : defaultShouldRetry;
|
|
64421
64454
|
return function(attempt, error3, response) {
|
|
64422
64455
|
const result = shouldRetry(attempt, error3, response);
|
|
64423
64456
|
if (result.kind === "retry") {
|
|
64424
64457
|
onError?.(result.error, attempt);
|
|
64425
64458
|
}
|
|
64426
|
-
if (attempt >=
|
|
64459
|
+
if (attempt >= maxRetries) {
|
|
64427
64460
|
return false;
|
|
64428
64461
|
}
|
|
64429
64462
|
return result.kind === "retry";
|
|
@@ -64452,13 +64485,19 @@ function bareDeploymentFetch(_ctx, options) {
|
|
|
64452
64485
|
};
|
|
64453
64486
|
}
|
|
64454
64487
|
function deploymentFetch(_ctx, options) {
|
|
64455
|
-
const {
|
|
64488
|
+
const {
|
|
64489
|
+
deploymentUrl,
|
|
64490
|
+
adminKey,
|
|
64491
|
+
onError,
|
|
64492
|
+
maxRetries = MAX_RETRIES,
|
|
64493
|
+
shouldRetry
|
|
64494
|
+
} = options;
|
|
64456
64495
|
const onErrorWithAttempt = (err, attempt) => {
|
|
64457
64496
|
onError?.(err);
|
|
64458
64497
|
if (attempt >= RETRY_LOG_THRESHOLD) {
|
|
64459
64498
|
logMessage(
|
|
64460
64499
|
chalkStderr.gray(
|
|
64461
|
-
`Retrying request (attempt ${attempt}/${
|
|
64500
|
+
`Retrying request (attempt ${attempt}/${maxRetries})...`
|
|
64462
64501
|
)
|
|
64463
64502
|
);
|
|
64464
64503
|
}
|
|
@@ -64477,7 +64516,12 @@ function deploymentFetch(_ctx, options) {
|
|
|
64477
64516
|
}
|
|
64478
64517
|
const func = throwingFetch(url2, {
|
|
64479
64518
|
retryDelay,
|
|
64480
|
-
retryOn: deploymentFetchRetryOn(
|
|
64519
|
+
retryOn: deploymentFetchRetryOn(
|
|
64520
|
+
onErrorWithAttempt,
|
|
64521
|
+
options2?.method,
|
|
64522
|
+
maxRetries,
|
|
64523
|
+
shouldRetry
|
|
64524
|
+
),
|
|
64481
64525
|
...options2,
|
|
64482
64526
|
headers
|
|
64483
64527
|
});
|
|
@@ -64611,14 +64655,7 @@ ${advice}`;
|
|
|
64611
64655
|
PLATFORM_MANAGEMENT_API_URL,
|
|
64612
64656
|
bigBrainFetch
|
|
64613
64657
|
);
|
|
64614
|
-
BYTE_UNITS = [
|
|
64615
|
-
[1 << 30, "GiB"],
|
|
64616
|
-
[1e9, "GB"],
|
|
64617
|
-
[1 << 20, "MiB"],
|
|
64618
|
-
[1e6, "MB"],
|
|
64619
|
-
[1 << 10, "KiB"],
|
|
64620
|
-
[1e3, "KB"]
|
|
64621
|
-
];
|
|
64658
|
+
BYTE_UNITS = ["bytes", "KiB", "MiB", "GiB", "TiB", "PiB"];
|
|
64622
64659
|
IDEMPOTENT_METHODS = ["GET", "HEAD", "PUT", "DELETE", "OPTIONS", "TRACE"];
|
|
64623
64660
|
}
|
|
64624
64661
|
});
|
|
@@ -110146,6 +110183,7 @@ init_run();
|
|
|
110146
110183
|
init_log();
|
|
110147
110184
|
init_filePaths();
|
|
110148
110185
|
init_run();
|
|
110186
|
+
init_utils2();
|
|
110149
110187
|
init_prompts();
|
|
110150
110188
|
init_download();
|
|
110151
110189
|
|
|
@@ -110236,6 +110274,7 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
|
|
|
110236
110274
|
);
|
|
110237
110275
|
const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
|
|
110238
110276
|
binaryPath: args.newBinaryPath,
|
|
110277
|
+
backendVersion: args.newVersion,
|
|
110239
110278
|
deploymentKind: args.deploymentKind,
|
|
110240
110279
|
deploymentName: args.deploymentName,
|
|
110241
110280
|
ports: args.ports,
|
|
@@ -110265,6 +110304,7 @@ async function handlePotentialUpgradeAndStart(ctx, args) {
|
|
|
110265
110304
|
});
|
|
110266
110305
|
const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
|
|
110267
110306
|
binaryPath: oldBinaryPath,
|
|
110307
|
+
backendVersion: args.oldVersion,
|
|
110268
110308
|
ports: args.ports,
|
|
110269
110309
|
deploymentKind: args.deploymentKind,
|
|
110270
110310
|
deploymentName: args.deploymentName,
|
|
@@ -110296,6 +110336,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
110296
110336
|
logVerbose(`Running backend on new version ${args.newVersion}`);
|
|
110297
110337
|
const { cleanupHandle } = await runLocalBackend(ctx, {
|
|
110298
110338
|
binaryPath: args.newBinaryPath,
|
|
110339
|
+
backendVersion: args.newVersion,
|
|
110299
110340
|
ports: args.ports,
|
|
110300
110341
|
deploymentKind: args.deploymentKind,
|
|
110301
110342
|
deploymentName: args.deploymentName,
|
|
@@ -110319,9 +110360,6 @@ function _isDowngrade(oldVersion, newVersion) {
|
|
|
110319
110360
|
const newDate = releaseDate(newVersion);
|
|
110320
110361
|
return oldDate !== null && newDate !== null && newDate < oldDate;
|
|
110321
110362
|
}
|
|
110322
|
-
function releaseDate(version4) {
|
|
110323
|
-
return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version4)?.[1] ?? null;
|
|
110324
|
-
}
|
|
110325
110363
|
|
|
110326
110364
|
// src/cli/lib/localDeployment/localDeployment.ts
|
|
110327
110365
|
init_errors3();
|
|
@@ -114593,7 +114631,7 @@ var startPushRequest = looseObject({
|
|
|
114593
114631
|
var schemaChange = looseObject({
|
|
114594
114632
|
allocatedComponentIds: external_exports.any(),
|
|
114595
114633
|
schemaIds: external_exports.any(),
|
|
114596
|
-
indexDiffs: external_exports.record(
|
|
114634
|
+
indexDiffs: external_exports.record(componentPath, indexDiff).optional()
|
|
114597
114635
|
});
|
|
114598
114636
|
var startPushResponse = looseObject({
|
|
114599
114637
|
environmentVariables: external_exports.record(external_exports.string(), external_exports.string()),
|
|
@@ -114631,6 +114669,49 @@ var schemaStatus = external_exports.union([
|
|
|
114631
114669
|
})
|
|
114632
114670
|
]);
|
|
114633
114671
|
|
|
114672
|
+
// src/cli/lib/deployApi/evaluateSchema.ts
|
|
114673
|
+
init_zod();
|
|
114674
|
+
var tableValidationOutcome = external_exports.enum([
|
|
114675
|
+
"notValidated",
|
|
114676
|
+
"supersetOfEnforced",
|
|
114677
|
+
"supersetOfShape",
|
|
114678
|
+
"mustWalk"
|
|
114679
|
+
]);
|
|
114680
|
+
var indexChangePrediction = external_exports.enum([
|
|
114681
|
+
"added",
|
|
114682
|
+
"identical",
|
|
114683
|
+
"enabled",
|
|
114684
|
+
"disabled",
|
|
114685
|
+
"dropped"
|
|
114686
|
+
]);
|
|
114687
|
+
var tablePrediction = looseObject({
|
|
114688
|
+
name: external_exports.string(),
|
|
114689
|
+
outcome: tableValidationOutcome,
|
|
114690
|
+
numDocs: external_exports.number(),
|
|
114691
|
+
sizeBytes: external_exports.number()
|
|
114692
|
+
});
|
|
114693
|
+
var indexPrediction = external_exports.intersection(
|
|
114694
|
+
developerIndexConfig,
|
|
114695
|
+
looseObject({
|
|
114696
|
+
change: indexChangePrediction,
|
|
114697
|
+
needsBackfill: external_exports.boolean(),
|
|
114698
|
+
numDocs: external_exports.number()
|
|
114699
|
+
})
|
|
114700
|
+
);
|
|
114701
|
+
var componentSchemaPrediction = looseObject({
|
|
114702
|
+
definitionPath: external_exports.string(),
|
|
114703
|
+
schemaValidation: external_exports.boolean(),
|
|
114704
|
+
tables: external_exports.array(tablePrediction),
|
|
114705
|
+
indexes: external_exports.array(indexPrediction)
|
|
114706
|
+
});
|
|
114707
|
+
var evaluateSchemaResponse = looseObject({
|
|
114708
|
+
componentSchemaEvaluations: external_exports.record(
|
|
114709
|
+
componentPath,
|
|
114710
|
+
componentSchemaPrediction
|
|
114711
|
+
),
|
|
114712
|
+
newComponentDefinitions: external_exports.array(componentDefinitionPath)
|
|
114713
|
+
});
|
|
114714
|
+
|
|
114634
114715
|
// src/cli/lib/deploy2.ts
|
|
114635
114716
|
init_source();
|
|
114636
114717
|
var import_node_util9 = require("node:util");
|
|
@@ -115710,7 +115791,19 @@ async function evaluatePush(ctx, span, request, options) {
|
|
|
115710
115791
|
);
|
|
115711
115792
|
return evaluatePushResponse.parse(response);
|
|
115712
115793
|
}
|
|
115713
|
-
async function
|
|
115794
|
+
async function evaluateSchema(ctx, span, request, options, bestEffort) {
|
|
115795
|
+
const response = await pushCode(
|
|
115796
|
+
ctx,
|
|
115797
|
+
span,
|
|
115798
|
+
request,
|
|
115799
|
+
options,
|
|
115800
|
+
"/api/deploy2/evaluate_schema",
|
|
115801
|
+
bestEffort
|
|
115802
|
+
);
|
|
115803
|
+
return evaluateSchemaResponse.parse(response);
|
|
115804
|
+
}
|
|
115805
|
+
var BEST_EFFORT_RETRIES = 5;
|
|
115806
|
+
async function pushCode(ctx, span, request, options, endpoint, bestEffort) {
|
|
115714
115807
|
const unchangedModuleCount = request.appDefinition?.unchangedModuleHashes?.length ?? 0;
|
|
115715
115808
|
const changedModuleCount = request.appDefinition?.changedModules?.length ?? 0;
|
|
115716
115809
|
const requestSummary = {
|
|
@@ -115730,7 +115823,16 @@ async function pushCode(ctx, span, request, options, endpoint) {
|
|
|
115730
115823
|
const fetch2 = deploymentFetch(ctx, {
|
|
115731
115824
|
deploymentUrl: options.url,
|
|
115732
115825
|
adminKey: request.adminKey,
|
|
115733
|
-
onError
|
|
115826
|
+
onError,
|
|
115827
|
+
// Best-effort callers tolerate failure, so retry only plausibly
|
|
115828
|
+
// transient conditions — network errors and 5xx responses (e.g. table
|
|
115829
|
+
// summaries still bootstrapping) — and fail fast on everything else,
|
|
115830
|
+
// like a 404 from a deployment whose backend doesn't yet expose the
|
|
115831
|
+
// endpoint.
|
|
115832
|
+
...bestEffort ? {
|
|
115833
|
+
maxRetries: BEST_EFFORT_RETRIES,
|
|
115834
|
+
shouldRetry: (error3, response) => error3 !== null || response !== null && response.status >= 500
|
|
115835
|
+
} : {}
|
|
115734
115836
|
});
|
|
115735
115837
|
try {
|
|
115736
115838
|
const response = await fetch2(endpoint, {
|
|
@@ -115744,6 +115846,9 @@ async function pushCode(ctx, span, request, options, endpoint) {
|
|
|
115744
115846
|
});
|
|
115745
115847
|
return await response.json();
|
|
115746
115848
|
} catch (error3) {
|
|
115849
|
+
if (bestEffort) {
|
|
115850
|
+
throw error3;
|
|
115851
|
+
}
|
|
115747
115852
|
return await handlePushConfigError(
|
|
115748
115853
|
ctx,
|
|
115749
115854
|
error3,
|
|
@@ -115956,6 +116061,7 @@ async function deployToDeployment(ctx, credentials, options) {
|
|
|
115956
116061
|
liveComponentSources: !!options.liveComponentSources,
|
|
115957
116062
|
pushAllModules: !!options.pushAllModules,
|
|
115958
116063
|
largeIndexDeletionCheck: options.allowDeletingLargeIndexes ? "has confirmation" : "ask for confirmation",
|
|
116064
|
+
warnOnSlowSchemaValidation: true,
|
|
115959
116065
|
message: options.message
|
|
115960
116066
|
};
|
|
115961
116067
|
showSpinner(`Deploying to ${url2}...${options.dryRun ? " [dry run]" : ""}`);
|
|
@@ -119641,71 +119747,28 @@ async function checkForLargeIndexDeletion({
|
|
|
119641
119747
|
askForConfirmation
|
|
119642
119748
|
}) {
|
|
119643
119749
|
changeSpinner("Verifying that the push isn\u2019t deleting large indexes...");
|
|
119644
|
-
const
|
|
119645
|
-
|
|
119646
|
-
|
|
119647
|
-
|
|
119648
|
-
|
|
119649
|
-
|
|
119650
|
-
}))
|
|
119651
|
-
);
|
|
119750
|
+
const deletedIndexes = await deletedIndexesFromSchemaEvaluation({
|
|
119751
|
+
ctx,
|
|
119752
|
+
span,
|
|
119753
|
+
request,
|
|
119754
|
+
options
|
|
119755
|
+
}) ?? await deletedIndexesFromTableSizes({ ctx, span, request, options });
|
|
119652
119756
|
if (deletedIndexes.length === 0) {
|
|
119653
119757
|
logFinishedStep("No indexes are deleted by this push");
|
|
119654
119758
|
return;
|
|
119655
119759
|
}
|
|
119656
|
-
const tablesWithDeletedIndexes = [
|
|
119657
|
-
...new Set(
|
|
119658
|
-
deletedIndexes.map(
|
|
119659
|
-
({ componentDefinitionPath: componentDefinitionPath2, index }) => `${componentDefinitionPath2}:${getTableName(index)}`
|
|
119660
|
-
)
|
|
119661
|
-
)
|
|
119662
|
-
].map((str) => {
|
|
119663
|
-
const [componentDefinitionPath2, table] = str.split(":");
|
|
119664
|
-
return { componentDefinitionPath: componentDefinitionPath2, table };
|
|
119665
|
-
});
|
|
119666
|
-
changeSpinner("Checking whether the deleted indexes are on large tables...");
|
|
119667
|
-
const documentCounts = await Promise.all(
|
|
119668
|
-
tablesWithDeletedIndexes.map(
|
|
119669
|
-
async ({ componentDefinitionPath: componentDefinitionPath2, table }) => ({
|
|
119670
|
-
componentDefinitionPath: componentDefinitionPath2,
|
|
119671
|
-
table,
|
|
119672
|
-
count: await runSystemQuery(ctx, {
|
|
119673
|
-
deploymentUrl: options.url,
|
|
119674
|
-
adminKey: options.adminKey,
|
|
119675
|
-
functionName: "_system/cli/tableSize:default",
|
|
119676
|
-
componentPath: componentDefinitionPath2,
|
|
119677
|
-
args: { tableName: table }
|
|
119678
|
-
})
|
|
119679
|
-
})
|
|
119680
|
-
)
|
|
119681
|
-
);
|
|
119682
|
-
const deletedIndexesWithDocumentsCount = deletedIndexes.map(
|
|
119683
|
-
({ componentDefinitionPath: componentDefinitionPath2, index }) => ({
|
|
119684
|
-
componentDefinitionPath: componentDefinitionPath2,
|
|
119685
|
-
index,
|
|
119686
|
-
count: documentCounts.find(
|
|
119687
|
-
(count) => count.table === getTableName(index) && count.componentDefinitionPath === componentDefinitionPath2
|
|
119688
|
-
).count
|
|
119689
|
-
})
|
|
119690
|
-
);
|
|
119691
119760
|
const minDocumentsForWarning = minDocumentsForIndexDeleteWarning();
|
|
119692
|
-
if (!
|
|
119693
|
-
({
|
|
119761
|
+
if (!deletedIndexes.some(
|
|
119762
|
+
({ documentsCount }) => documentsCount >= minDocumentsForWarning
|
|
119694
119763
|
)) {
|
|
119695
119764
|
logFinishedStep("No large indexes are deleted by this push");
|
|
119696
119765
|
return;
|
|
119697
119766
|
}
|
|
119698
|
-
logMessage(`\u26A0\uFE0F This code push will ${chalkStderr.bold("delete")} the following ${
|
|
119767
|
+
logMessage(`\u26A0\uFE0F This code push will ${chalkStderr.bold("delete")} the following ${deletedIndexes.length === 1 ? "index" : "indexes"}
|
|
119699
119768
|
from your production deployment (${options.url}):
|
|
119700
119769
|
|
|
119701
|
-
${
|
|
119702
|
-
(
|
|
119703
|
-
componentDefinitionPath: componentDefinitionPath2,
|
|
119704
|
-
index,
|
|
119705
|
-
indexDiff: indexDiffs[componentDefinitionPath2],
|
|
119706
|
-
documentsCount: count,
|
|
119707
|
-
minDocumentsForWarning
|
|
119708
|
-
})
|
|
119770
|
+
${deletedIndexes.map(
|
|
119771
|
+
(deletedIndex) => formatDeletedIndex({ ...deletedIndex, minDocumentsForWarning })
|
|
119709
119772
|
).join("\n")}
|
|
119710
119773
|
|
|
119711
119774
|
The documents that are in the index won\u2019t be deleted, but the index will need
|
|
@@ -119728,7 +119791,7 @@ to be backfilled again if you want to restore it later.
|
|
|
119728
119791
|
}
|
|
119729
119792
|
stopSpinner();
|
|
119730
119793
|
if (!await promptYesNo(ctx, {
|
|
119731
|
-
message: `Delete ${
|
|
119794
|
+
message: `Delete ${deletedIndexes.length === 1 ? "this index" : "these indexes"}?`,
|
|
119732
119795
|
default: false
|
|
119733
119796
|
})) {
|
|
119734
119797
|
return ctx.crash({
|
|
@@ -119739,16 +119802,98 @@ to be backfilled again if you want to restore it later.
|
|
|
119739
119802
|
}
|
|
119740
119803
|
logFinishedStep("Proceeding with push.");
|
|
119741
119804
|
}
|
|
119805
|
+
async function deletedIndexesFromSchemaEvaluation({
|
|
119806
|
+
ctx,
|
|
119807
|
+
span,
|
|
119808
|
+
request,
|
|
119809
|
+
options
|
|
119810
|
+
}) {
|
|
119811
|
+
try {
|
|
119812
|
+
const response = await evaluateSchema(
|
|
119813
|
+
ctx,
|
|
119814
|
+
span,
|
|
119815
|
+
request,
|
|
119816
|
+
options,
|
|
119817
|
+
/* bestEffort */
|
|
119818
|
+
true
|
|
119819
|
+
);
|
|
119820
|
+
return Object.entries(response.componentSchemaEvaluations).flatMap(
|
|
119821
|
+
([componentPath2, prediction]) => prediction.indexes.filter((index) => index.change === "dropped").map((index) => ({
|
|
119822
|
+
componentPath: componentPath2,
|
|
119823
|
+
index,
|
|
119824
|
+
documentsCount: index.numDocs,
|
|
119825
|
+
replacedBy: prediction.indexes.find(
|
|
119826
|
+
(other) => other.change === "added" && other.name === index.name
|
|
119827
|
+
) ?? null
|
|
119828
|
+
}))
|
|
119829
|
+
);
|
|
119830
|
+
} catch (error3) {
|
|
119831
|
+
logVerbose(
|
|
119832
|
+
`Schema evaluation unavailable, sizing deleted indexes per table: ${error3 instanceof Error ? error3.message : String(error3)}`
|
|
119833
|
+
);
|
|
119834
|
+
return null;
|
|
119835
|
+
}
|
|
119836
|
+
}
|
|
119837
|
+
async function deletedIndexesFromTableSizes({
|
|
119838
|
+
ctx,
|
|
119839
|
+
span,
|
|
119840
|
+
request,
|
|
119841
|
+
options
|
|
119842
|
+
}) {
|
|
119843
|
+
const { schemaChange: schemaChange2 } = await evaluatePush(ctx, span, request, options);
|
|
119844
|
+
const indexDiffs = schemaChange2.indexDiffs ?? {};
|
|
119845
|
+
const deletedIndexes = Object.entries(indexDiffs).flatMap(
|
|
119846
|
+
([componentPath2, indexDiff2]) => indexDiff2.removed_indexes.map((index) => ({
|
|
119847
|
+
componentPath: componentPath2,
|
|
119848
|
+
index,
|
|
119849
|
+
replacedBy: indexDiff2.added_indexes.find((other) => other.name === index.name) ?? null
|
|
119850
|
+
}))
|
|
119851
|
+
);
|
|
119852
|
+
if (deletedIndexes.length === 0) {
|
|
119853
|
+
return [];
|
|
119854
|
+
}
|
|
119855
|
+
const tablesWithDeletedIndexes = [
|
|
119856
|
+
...new Set(
|
|
119857
|
+
deletedIndexes.map(
|
|
119858
|
+
({ componentPath: componentPath2, index }) => `${componentPath2}:${getTableName(index)}`
|
|
119859
|
+
)
|
|
119860
|
+
)
|
|
119861
|
+
].map((str) => {
|
|
119862
|
+
const [componentPath2, table] = str.split(":");
|
|
119863
|
+
return { componentPath: componentPath2, table };
|
|
119864
|
+
});
|
|
119865
|
+
changeSpinner("Checking whether the deleted indexes are on large tables...");
|
|
119866
|
+
const documentCounts = await Promise.all(
|
|
119867
|
+
tablesWithDeletedIndexes.map(async ({ componentPath: componentPath2, table }) => ({
|
|
119868
|
+
componentPath: componentPath2,
|
|
119869
|
+
table,
|
|
119870
|
+
count: await runSystemQuery(ctx, {
|
|
119871
|
+
deploymentUrl: options.url,
|
|
119872
|
+
adminKey: options.adminKey,
|
|
119873
|
+
functionName: "_system/cli/tableSize:default",
|
|
119874
|
+
componentPath: componentPath2,
|
|
119875
|
+
args: { tableName: table }
|
|
119876
|
+
})
|
|
119877
|
+
}))
|
|
119878
|
+
);
|
|
119879
|
+
return deletedIndexes.map(({ componentPath: componentPath2, index, replacedBy }) => ({
|
|
119880
|
+
componentPath: componentPath2,
|
|
119881
|
+
index,
|
|
119882
|
+
replacedBy,
|
|
119883
|
+
documentsCount: documentCounts.find(
|
|
119884
|
+
(count) => count.table === getTableName(index) && count.componentPath === componentPath2
|
|
119885
|
+
).count
|
|
119886
|
+
}));
|
|
119887
|
+
}
|
|
119742
119888
|
function formatDeletedIndex({
|
|
119743
|
-
|
|
119889
|
+
componentPath: componentPath2,
|
|
119744
119890
|
index,
|
|
119745
|
-
indexDiff: indexDiff2,
|
|
119746
119891
|
documentsCount,
|
|
119892
|
+
replacedBy,
|
|
119747
119893
|
minDocumentsForWarning
|
|
119748
119894
|
}) {
|
|
119749
|
-
const componentNameFormatted =
|
|
119895
|
+
const componentNameFormatted = componentPath2 !== "" ? `${chalkStderr.gray(componentPath2)}:` : "";
|
|
119750
119896
|
const documentsCountFormatted = documentsCount >= minDocumentsForWarning ? ` ${chalkStderr.yellowBright(`\u26A0\uFE0F ${documentsCount.toLocaleString()} documents`)}` : ` ${documentsCount.toLocaleString()} ${documentsCount === 1 ? "document" : "documents"}`;
|
|
119751
|
-
const replacedBy = indexDiff2.added_indexes.find((i) => i.name === index.name);
|
|
119752
119897
|
const replacedByFormatted = replacedBy ? `
|
|
119753
119898
|
${chalkStderr.green("\u2192 replaced by:")} ${formatIndex(replacedBy)}` : "";
|
|
119754
119899
|
return "\u26D4 " + componentNameFormatted + formatIndex(index) + documentsCountFormatted + replacedByFormatted;
|
|
@@ -119768,6 +119913,90 @@ function minDocumentsForIndexDeleteWarning() {
|
|
|
119768
119913
|
return MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING;
|
|
119769
119914
|
}
|
|
119770
119915
|
|
|
119916
|
+
// src/cli/lib/checkForSlowSchemaValidation.ts
|
|
119917
|
+
init_source();
|
|
119918
|
+
init_log();
|
|
119919
|
+
init_utils3();
|
|
119920
|
+
var MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27;
|
|
119921
|
+
async function checkForSlowSchemaValidation({
|
|
119922
|
+
ctx,
|
|
119923
|
+
span,
|
|
119924
|
+
request,
|
|
119925
|
+
options
|
|
119926
|
+
}) {
|
|
119927
|
+
const response = await evaluateSchemaBestEffort({
|
|
119928
|
+
ctx,
|
|
119929
|
+
span,
|
|
119930
|
+
request,
|
|
119931
|
+
options
|
|
119932
|
+
});
|
|
119933
|
+
if (response === null) {
|
|
119934
|
+
return;
|
|
119935
|
+
}
|
|
119936
|
+
const walkedTables = Object.entries(
|
|
119937
|
+
response.componentSchemaEvaluations
|
|
119938
|
+
).flatMap(
|
|
119939
|
+
([componentPath2, prediction]) => prediction.tables.filter((table) => table.outcome === "mustWalk").map((table) => ({ componentPath: componentPath2, table }))
|
|
119940
|
+
);
|
|
119941
|
+
if (walkedTables.length === 0) {
|
|
119942
|
+
return;
|
|
119943
|
+
}
|
|
119944
|
+
const totalBytes = walkedTables.reduce(
|
|
119945
|
+
(sum, { table }) => sum + table.sizeBytes,
|
|
119946
|
+
0
|
|
119947
|
+
);
|
|
119948
|
+
if (totalBytes < minBytesForSchemaWalkWarning()) {
|
|
119949
|
+
return;
|
|
119950
|
+
}
|
|
119951
|
+
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:
|
|
119952
|
+
|
|
119953
|
+
${walkedTables.map(
|
|
119954
|
+
({ componentPath: componentPath2, table }) => formatWalkedTable({ componentPath: componentPath2, table })
|
|
119955
|
+
).join("\n")}
|
|
119956
|
+
`);
|
|
119957
|
+
}
|
|
119958
|
+
async function evaluateSchemaBestEffort({
|
|
119959
|
+
ctx,
|
|
119960
|
+
span,
|
|
119961
|
+
request,
|
|
119962
|
+
options
|
|
119963
|
+
}) {
|
|
119964
|
+
try {
|
|
119965
|
+
return await evaluateSchema(
|
|
119966
|
+
ctx,
|
|
119967
|
+
span,
|
|
119968
|
+
request,
|
|
119969
|
+
options,
|
|
119970
|
+
/* bestEffort */
|
|
119971
|
+
true
|
|
119972
|
+
);
|
|
119973
|
+
} catch (error3) {
|
|
119974
|
+
logVerbose(
|
|
119975
|
+
`Skipping slow schema validation check: ${error3 instanceof Error ? error3.message : String(error3)}`
|
|
119976
|
+
);
|
|
119977
|
+
return null;
|
|
119978
|
+
}
|
|
119979
|
+
}
|
|
119980
|
+
function formatWalkedTable({
|
|
119981
|
+
componentPath: componentPath2,
|
|
119982
|
+
table
|
|
119983
|
+
}) {
|
|
119984
|
+
const componentPrefix = componentPath2 !== "" ? `${chalkStderr.gray(componentPath2)}: ` : "";
|
|
119985
|
+
const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;
|
|
119986
|
+
const sizeFormatted = formatSize(table.sizeBytes);
|
|
119987
|
+
return ` ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})`;
|
|
119988
|
+
}
|
|
119989
|
+
function minBytesForSchemaWalkWarning() {
|
|
119990
|
+
const envValue = process.env.CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
|
|
119991
|
+
if (envValue !== void 0) {
|
|
119992
|
+
const parsed = parseInt(envValue, 10);
|
|
119993
|
+
if (!isNaN(parsed)) {
|
|
119994
|
+
return parsed;
|
|
119995
|
+
}
|
|
119996
|
+
}
|
|
119997
|
+
return MIN_BYTES_FOR_SCHEMA_WALK_WARNING;
|
|
119998
|
+
}
|
|
119999
|
+
|
|
119771
120000
|
// src/cli/lib/components.ts
|
|
119772
120001
|
var import_crypto6 = require("crypto");
|
|
119773
120002
|
async function runCodegen(ctx, credentials, options) {
|
|
@@ -120041,6 +120270,17 @@ async function startComponentsPushAndCodegen(ctx, parentSpan, projectConfig, con
|
|
|
120041
120270
|
})
|
|
120042
120271
|
);
|
|
120043
120272
|
}
|
|
120273
|
+
if (options.dryRun && options.warnOnSlowSchemaValidation) {
|
|
120274
|
+
await parentSpan.enterAsync(
|
|
120275
|
+
"checkForSlowSchemaValidation",
|
|
120276
|
+
(span) => checkForSlowSchemaValidation({
|
|
120277
|
+
ctx,
|
|
120278
|
+
span,
|
|
120279
|
+
request: startPushRequest2,
|
|
120280
|
+
options
|
|
120281
|
+
})
|
|
120282
|
+
);
|
|
120283
|
+
}
|
|
120044
120284
|
changeSpinner("Uploading functions to Convex...");
|
|
120045
120285
|
const startPushResponse2 = await parentSpan.enterAsync(
|
|
120046
120286
|
"startPush",
|
|
@@ -120569,6 +120809,7 @@ async function devAgainstDeployment(ctx, credentials, devOptions) {
|
|
|
120569
120809
|
// Pass logManager to control logs during deploy
|
|
120570
120810
|
largeIndexDeletionCheck: "no verification",
|
|
120571
120811
|
// `convex dev` can’t push to prod
|
|
120812
|
+
warnOnSlowSchemaValidation: true,
|
|
120572
120813
|
message: null
|
|
120573
120814
|
},
|
|
120574
120815
|
devOptions
|
|
@@ -121311,6 +121552,7 @@ async function pushToDeployment(ctx, args) {
|
|
|
121311
121552
|
pushAllModules: false,
|
|
121312
121553
|
largeIndexDeletionCheck: "no verification",
|
|
121313
121554
|
// `convex run` can’t push to prod
|
|
121555
|
+
warnOnSlowSchemaValidation: true,
|
|
121314
121556
|
message: null
|
|
121315
121557
|
},
|
|
121316
121558
|
{
|
|
@@ -124991,6 +125233,8 @@ var codegen = new Command2("codegen").summary("Generate backend type definitions
|
|
|
124991
125233
|
systemUdfs: !!options.systemUdfs,
|
|
124992
125234
|
largeIndexDeletionCheck: "no verification",
|
|
124993
125235
|
// `codegen` is a read-only operation
|
|
125236
|
+
warnOnSlowSchemaValidation: false,
|
|
125237
|
+
// ditto: a codegen dry run never deploys
|
|
124994
125238
|
codegenOnlyThisComponent: options.componentDir
|
|
124995
125239
|
};
|
|
124996
125240
|
if (options.systemUdfs) {
|
|
@@ -127385,6 +127629,7 @@ async function deployToNewPreviewDeployment(ctx, deploymentSelection, options) {
|
|
|
127385
127629
|
pushAllModules: !!options.pushAllModules,
|
|
127386
127630
|
largeIndexDeletionCheck: "no verification",
|
|
127387
127631
|
// fine for preview deployments
|
|
127632
|
+
warnOnSlowSchemaValidation: true,
|
|
127388
127633
|
message: options.message
|
|
127389
127634
|
};
|
|
127390
127635
|
showSpinner(`Deploying to ${previewUrl}...`);
|
|
@@ -130679,42 +130924,11 @@ var dev = new Command2("dev").summary("Develop against a dev deployment, watchin
|
|
|
130679
130924
|
// src/cli/docs.ts
|
|
130680
130925
|
init_source();
|
|
130681
130926
|
init_log();
|
|
130682
|
-
init_utils3();
|
|
130683
130927
|
var docs = new Command2("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) => {
|
|
130684
|
-
|
|
130685
|
-
url: void 0,
|
|
130686
|
-
adminKey: void 0,
|
|
130687
|
-
envFile: void 0
|
|
130688
|
-
});
|
|
130689
|
-
const deploymentSelection = await getDeploymentSelection(ctx, {
|
|
130690
|
-
url: void 0,
|
|
130691
|
-
adminKey: void 0,
|
|
130692
|
-
envFile: void 0
|
|
130693
|
-
});
|
|
130694
|
-
const configuredDeployment = deploymentNameFromSelection(deploymentSelection);
|
|
130695
|
-
if (configuredDeployment === null) {
|
|
130696
|
-
await openDocs(ctx, options.open);
|
|
130697
|
-
return;
|
|
130698
|
-
}
|
|
130699
|
-
const getCookieUrl = new URL(
|
|
130700
|
-
`get_cookie/${configuredDeployment}`,
|
|
130701
|
-
BIG_BRAIN_URL
|
|
130702
|
-
);
|
|
130703
|
-
const fetch2 = bigBrainFetch(ctx);
|
|
130704
|
-
try {
|
|
130705
|
-
const res = await fetch2(getCookieUrl);
|
|
130706
|
-
deprecationCheckWarning(ctx, res);
|
|
130707
|
-
const { cookie } = await res.json();
|
|
130708
|
-
await openDocs(ctx, options.open, cookie);
|
|
130709
|
-
} catch {
|
|
130710
|
-
await openDocs(ctx, options.open);
|
|
130711
|
-
}
|
|
130928
|
+
await openDocs(options.open);
|
|
130712
130929
|
});
|
|
130713
|
-
async function openDocs(
|
|
130714
|
-
|
|
130715
|
-
if (cookie !== void 0) {
|
|
130716
|
-
docsUrl += "/?t=" + cookie;
|
|
130717
|
-
}
|
|
130930
|
+
async function openDocs(toOpen) {
|
|
130931
|
+
const docsUrl = "https://docs.convex.dev/?utm_source=convex-cli";
|
|
130718
130932
|
if (toOpen) {
|
|
130719
130933
|
await open_default(docsUrl);
|
|
130720
130934
|
logMessage(chalkStderr.green("Docs have launched! Check your browser."));
|