convex 1.40.0 → 1.41.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 +11 -0
- package/dist/browser.bundle.js +1 -1
- package/dist/browser.bundle.js.map +1 -1
- package/dist/cjs/cli/aiFiles.js +2 -2
- package/dist/cjs/cli/aiFiles.js.map +1 -1
- package/dist/cjs/cli/configure.js +1 -4
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/convexExport.js +3 -3
- package/dist/cjs/cli/convexExport.js.map +1 -1
- package/dist/cjs/cli/convexImport.js +2 -2
- package/dist/cjs/cli/convexImport.js.map +1 -1
- package/dist/cjs/cli/dashboard.js +19 -6
- package/dist/cjs/cli/dashboard.js.map +3 -3
- package/dist/cjs/cli/data.js +2 -2
- package/dist/cjs/cli/data.js.map +1 -1
- package/dist/cjs/cli/deploy.js +5 -5
- package/dist/cjs/cli/deploy.js.map +2 -2
- package/dist/cjs/cli/deploymentCreate.js +11 -5
- package/dist/cjs/cli/deploymentCreate.js.map +2 -2
- package/dist/cjs/cli/deploymentSelect.js +5 -5
- package/dist/cjs/cli/deploymentSelect.js.map +1 -1
- package/dist/cjs/cli/deploymentTokenCreate.js +5 -13
- package/dist/cjs/cli/deploymentTokenCreate.js.map +2 -2
- package/dist/cjs/cli/deploymentTokenDelete.js +4 -11
- package/dist/cjs/cli/deploymentTokenDelete.js.map +2 -2
- package/dist/cjs/cli/dev.js +6 -5
- package/dist/cjs/cli/dev.js.map +2 -2
- package/dist/cjs/cli/env.js +16 -16
- package/dist/cjs/cli/env.js.map +2 -2
- package/dist/cjs/cli/envDefault.js +10 -10
- package/dist/cjs/cli/envDefault.js.map +1 -1
- package/dist/cjs/cli/insights.js +3 -3
- package/dist/cjs/cli/insights.js.map +1 -1
- package/dist/cjs/cli/lib/aiFiles/skills.js +2 -2
- package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/cjs/cli/lib/command.js +1 -1
- package/dist/cjs/cli/lib/command.js.map +1 -1
- package/dist/cjs/cli/lib/deployment.js.map +1 -1
- package/dist/cjs/cli/lib/deploymentSelection.js +39 -0
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/dev.js +31 -0
- package/dist/cjs/cli/lib/dev.js.map +2 -2
- package/dist/cjs/cli/lib/generateDocs.js +256 -0
- package/dist/cjs/cli/lib/generateDocs.js.map +7 -0
- package/dist/cjs/cli/lib/localDeployment/anonymous.js +24 -49
- package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +3 -3
- package/dist/cjs/cli/lib/localDeployment/bigBrain.js +0 -9
- package/dist/cjs/cli/lib/localDeployment/bigBrain.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/dashboard.js +30 -68
- package/dist/cjs/cli/lib/localDeployment/dashboard.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/download.js +14 -1
- package/dist/cjs/cli/lib/localDeployment/download.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/filePaths.js +33 -4
- package/dist/cjs/cli/lib/localDeployment/filePaths.js.map +2 -2
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js +37 -126
- package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +3 -3
- package/dist/cjs/cli/lib/localDeployment/secrets.js +91 -0
- package/dist/cjs/cli/lib/localDeployment/secrets.js.map +7 -0
- package/dist/cjs/cli/lib/localDeployment/upgrade.js +43 -28
- package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
- package/dist/cjs/cli/lib/localDeployment/utils.js +0 -19
- package/dist/cjs/cli/lib/localDeployment/utils.js.map +3 -3
- package/dist/cjs/cli/lib/runTestFunction.js +3 -3
- package/dist/cjs/cli/lib/runTestFunction.js.map +1 -1
- package/dist/cjs/cli/run.js +5 -5
- package/dist/cjs/cli/run.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/impl/registration_impl.js +0 -1
- package/dist/cjs/server/impl/registration_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-types/cli/configure.d.ts +3 -2
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/dashboard.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentTokenCreate.d.ts.map +1 -1
- package/dist/cjs-types/cli/deploymentTokenDelete.d.ts.map +1 -1
- package/dist/cjs-types/cli/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
- package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +16 -16
- package/dist/cjs-types/cli/lib/deployment.d.ts +0 -2
- package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +7 -0
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/dev.d.ts +2 -1
- package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/generateDocs.d.ts +20 -0
- package/dist/cjs-types/cli/lib/generateDocs.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
- package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
- package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/download.d.ts +11 -1
- package/dist/cjs-types/cli/lib/localDeployment/download.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
- package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
- package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts +31 -0
- package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
- package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
- package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +0 -2
- package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/versionApi.d.ts +2 -2
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/server/impl/registration_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 +16 -0
- package/dist/cjs-types/server/meta.d.ts.map +1 -1
- package/dist/cjs-types/server/registration.d.ts +11 -5
- package/dist/cjs-types/server/registration.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +66405 -67923
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/cli/aiFiles.js +2 -2
- package/dist/esm/cli/aiFiles.js.map +1 -1
- package/dist/esm/cli/configure.js +1 -4
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/convexExport.js +3 -3
- package/dist/esm/cli/convexExport.js.map +1 -1
- package/dist/esm/cli/convexImport.js +2 -2
- package/dist/esm/cli/convexImport.js.map +1 -1
- package/dist/esm/cli/dashboard.js +16 -3
- package/dist/esm/cli/dashboard.js.map +2 -2
- package/dist/esm/cli/data.js +2 -2
- package/dist/esm/cli/data.js.map +1 -1
- package/dist/esm/cli/deploy.js +5 -5
- package/dist/esm/cli/deploy.js.map +2 -2
- package/dist/esm/cli/deploymentCreate.js +13 -9
- package/dist/esm/cli/deploymentCreate.js.map +2 -2
- package/dist/esm/cli/deploymentSelect.js +5 -5
- package/dist/esm/cli/deploymentSelect.js.map +1 -1
- package/dist/esm/cli/deploymentTokenCreate.js +9 -15
- package/dist/esm/cli/deploymentTokenCreate.js.map +2 -2
- package/dist/esm/cli/deploymentTokenDelete.js +8 -16
- package/dist/esm/cli/deploymentTokenDelete.js.map +2 -2
- package/dist/esm/cli/dev.js +6 -5
- package/dist/esm/cli/dev.js.map +2 -2
- package/dist/esm/cli/env.js +16 -16
- package/dist/esm/cli/env.js.map +2 -2
- package/dist/esm/cli/envDefault.js +10 -10
- package/dist/esm/cli/envDefault.js.map +1 -1
- package/dist/esm/cli/insights.js +3 -3
- package/dist/esm/cli/insights.js.map +1 -1
- package/dist/esm/cli/lib/aiFiles/skills.js +2 -2
- package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
- package/dist/esm/cli/lib/command.js +1 -1
- package/dist/esm/cli/lib/command.js.map +1 -1
- package/dist/esm/cli/lib/deployment.js.map +1 -1
- package/dist/esm/cli/lib/deploymentSelection.js +38 -0
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/dev.js +31 -0
- package/dist/esm/cli/lib/dev.js.map +2 -2
- package/dist/esm/cli/lib/generateDocs.js +233 -0
- package/dist/esm/cli/lib/generateDocs.js.map +7 -0
- package/dist/esm/cli/lib/localDeployment/anonymous.js +30 -61
- package/dist/esm/cli/lib/localDeployment/anonymous.js.map +3 -3
- package/dist/esm/cli/lib/localDeployment/bigBrain.js +0 -8
- package/dist/esm/cli/lib/localDeployment/bigBrain.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/dashboard.js +36 -69
- package/dist/esm/cli/lib/localDeployment/dashboard.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/download.js +15 -2
- package/dist/esm/cli/lib/localDeployment/download.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/filePaths.js +29 -2
- package/dist/esm/cli/lib/localDeployment/filePaths.js.map +2 -2
- package/dist/esm/cli/lib/localDeployment/localDeployment.js +40 -134
- package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +3 -3
- package/dist/esm/cli/lib/localDeployment/secrets.js +57 -0
- package/dist/esm/cli/lib/localDeployment/secrets.js.map +7 -0
- package/dist/esm/cli/lib/localDeployment/upgrade.js +45 -28
- package/dist/esm/cli/lib/localDeployment/upgrade.js.map +3 -3
- package/dist/esm/cli/lib/localDeployment/utils.js +0 -7
- package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
- package/dist/esm/cli/lib/runTestFunction.js +3 -3
- package/dist/esm/cli/lib/runTestFunction.js.map +1 -1
- package/dist/esm/cli/run.js +5 -5
- package/dist/esm/cli/run.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/impl/registration_impl.js +0 -1
- package/dist/esm/server/impl/registration_impl.js.map +2 -2
- package/dist/esm/server/index.js.map +2 -2
- package/dist/esm-types/cli/configure.d.ts +3 -2
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/dashboard.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentTokenCreate.d.ts.map +1 -1
- package/dist/esm-types/cli/deploymentTokenDelete.d.ts.map +1 -1
- package/dist/esm-types/cli/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
- package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +16 -16
- package/dist/esm-types/cli/lib/deployment.d.ts +0 -2
- package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts +7 -0
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/dev.d.ts +2 -1
- package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/generateDocs.d.ts +20 -0
- package/dist/esm-types/cli/lib/generateDocs.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/generateDocs.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
- package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
- package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
- package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/download.d.ts +11 -1
- package/dist/esm-types/cli/lib/localDeployment/download.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
- package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
- package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts +31 -0
- package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
- package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
- package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +0 -2
- package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/versionApi.d.ts +2 -2
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/server/impl/registration_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 +16 -0
- package/dist/esm-types/server/meta.d.ts.map +1 -1
- package/dist/esm-types/server/registration.d.ts +11 -5
- package/dist/esm-types/server/registration.d.ts.map +1 -1
- package/dist/react.bundle.js +1 -1
- package/dist/react.bundle.js.map +1 -1
- package/package.json +4 -2
- package/src/browser/sync/request_manager.test.ts +2 -2
- package/src/cli/aiFiles.ts +2 -2
- package/src/cli/configure.ts +4 -6
- package/src/cli/convexExport.ts +3 -3
- package/src/cli/convexImport.ts +2 -2
- package/src/cli/dashboard.ts +29 -3
- package/src/cli/data.ts +2 -2
- package/src/cli/deploy.ts +5 -5
- package/src/cli/deploymentCreate.test.ts +151 -24
- package/src/cli/deploymentCreate.ts +21 -11
- package/src/cli/deploymentSelect.ts +5 -5
- package/src/cli/deploymentSelection.test.ts +0 -3
- package/src/cli/deploymentToken.test.ts +34 -23
- package/src/cli/deploymentTokenCreate.ts +9 -21
- package/src/cli/deploymentTokenDelete.ts +8 -23
- package/src/cli/dev.ts +5 -4
- package/src/cli/env.ts +16 -16
- package/src/cli/envDefault.ts +10 -10
- package/src/cli/insights.ts +3 -3
- package/src/cli/lib/aiFiles/integration.test.ts +2 -0
- package/src/cli/lib/aiFiles/skills.ts +3 -3
- package/src/cli/lib/command.ts +2 -2
- package/src/cli/lib/deployment.ts +0 -5
- package/src/cli/lib/deploymentSelection.ts +67 -0
- package/src/cli/lib/dev.ts +39 -0
- package/src/cli/lib/generateDocs.test.ts +326 -0
- package/src/cli/lib/generateDocs.ts +393 -0
- package/src/cli/lib/localDeployment/anonymous.ts +48 -72
- package/src/cli/lib/localDeployment/bigBrain.ts +7 -15
- package/src/cli/lib/localDeployment/dashboard.ts +48 -80
- package/src/cli/lib/localDeployment/download.ts +34 -3
- package/src/cli/lib/localDeployment/filePaths.ts +66 -6
- package/src/cli/lib/localDeployment/localDeployment.ts +46 -184
- package/src/cli/lib/localDeployment/run.test.ts +6 -6
- package/src/cli/lib/localDeployment/secrets.test.ts +53 -0
- package/src/cli/lib/localDeployment/secrets.ts +93 -0
- package/src/cli/lib/localDeployment/tests/keygenFailure.mjs +9 -0
- package/src/cli/lib/localDeployment/tests/keygenSuccess.mjs +31 -0
- package/src/cli/lib/localDeployment/upgrade.ts +52 -38
- package/src/cli/lib/localDeployment/utils.ts +0 -10
- package/src/cli/lib/runTestFunction.ts +3 -3
- package/src/cli/run.ts +5 -5
- package/src/index.ts +1 -1
- package/src/server/impl/registration_impl.ts +0 -2
- package/src/server/index.ts +1 -0
- package/src/server/meta.ts +17 -0
- package/src/server/registration.test.ts +2 -35
- package/src/server/registration.ts +10 -19
|
@@ -28,7 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var upgrade_exports = {};
|
|
30
30
|
__export(upgrade_exports, {
|
|
31
|
-
|
|
31
|
+
handlePotentialUpgradeAndStart: () => handlePotentialUpgradeAndStart
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(upgrade_exports);
|
|
34
34
|
var import_path = __toESM(require("path"), 1);
|
|
@@ -43,12 +43,25 @@ var import_prompts = require("../utils/prompts.js");
|
|
|
43
43
|
var import_fsUtils = require("../fsUtils.js");
|
|
44
44
|
var import_errors = require("./errors.js");
|
|
45
45
|
var import_download = require("./download.js");
|
|
46
|
-
|
|
46
|
+
var import_secrets = require("./secrets.js");
|
|
47
|
+
async function handlePotentialUpgradeAndStart(ctx, args) {
|
|
48
|
+
const { adminKey, instanceSecret } = args.existingCredentials === null || args.existingCredentials.instanceSecret === import_secrets.LEGACY_LOCAL_BACKEND_INSTANCE_SECRET ? (
|
|
49
|
+
// Using `generateLocalDevSecretsFromLatestBinary` instead of `generateLocalDevSecrets`
|
|
50
|
+
// here, because `newBinaryPath` can be a binary that doesn’t support
|
|
51
|
+
// the `keygen admin-key` subcommand (when the --local-backend-version flag is provided to the CLI)
|
|
52
|
+
//
|
|
53
|
+
// In most cases (the user is not using the flag), we have already downloaded the latest binary
|
|
54
|
+
// shortly before in handleLocalDeployment/handleAnonymousDeployment, so this doesn’t cause an
|
|
55
|
+
// extra download (even if the user chooses later not to upgrade their deployment)
|
|
56
|
+
await (0, import_secrets.generateLocalDevSecretsWithLatestBinary)(ctx, {
|
|
57
|
+
deploymentName: args.deploymentName
|
|
58
|
+
})
|
|
59
|
+
) : args.existingCredentials;
|
|
47
60
|
const newConfig = {
|
|
48
61
|
ports: args.ports,
|
|
49
62
|
backendVersion: args.newVersion,
|
|
50
|
-
adminKey
|
|
51
|
-
instanceSecret
|
|
63
|
+
adminKey,
|
|
64
|
+
instanceSecret,
|
|
52
65
|
cloudProjectId: args.cloudProjectId
|
|
53
66
|
};
|
|
54
67
|
if (args.oldVersion === null || args.oldVersion === args.newVersion) {
|
|
@@ -58,14 +71,15 @@ async function handlePotentialUpgrade(ctx, args) {
|
|
|
58
71
|
args.deploymentName,
|
|
59
72
|
newConfig
|
|
60
73
|
);
|
|
61
|
-
|
|
74
|
+
const { cleanupHandle: cleanupHandle2 } = await (0, import_run2.runLocalBackend)(ctx, {
|
|
62
75
|
binaryPath: args.newBinaryPath,
|
|
63
76
|
deploymentKind: args.deploymentKind,
|
|
64
77
|
deploymentName: args.deploymentName,
|
|
65
78
|
ports: args.ports,
|
|
66
|
-
instanceSecret
|
|
79
|
+
instanceSecret,
|
|
67
80
|
isLatestVersion: true
|
|
68
81
|
});
|
|
82
|
+
return { cleanupHandle: cleanupHandle2, adminKey };
|
|
69
83
|
}
|
|
70
84
|
(0, import_log.logVerbose)(
|
|
71
85
|
`Considering upgrade from ${args.oldVersion} to ${args.newVersion}`
|
|
@@ -86,14 +100,15 @@ async function handlePotentialUpgrade(ctx, args) {
|
|
|
86
100
|
...newConfig,
|
|
87
101
|
backendVersion: args.oldVersion
|
|
88
102
|
});
|
|
89
|
-
|
|
103
|
+
const { cleanupHandle: cleanupHandle2 } = await (0, import_run2.runLocalBackend)(ctx, {
|
|
90
104
|
binaryPath: oldBinaryPath,
|
|
91
105
|
ports: args.ports,
|
|
92
106
|
deploymentKind: args.deploymentKind,
|
|
93
107
|
deploymentName: args.deploymentName,
|
|
94
|
-
instanceSecret
|
|
108
|
+
instanceSecret,
|
|
95
109
|
isLatestVersion: false
|
|
96
110
|
});
|
|
111
|
+
return { cleanupHandle: cleanupHandle2, adminKey };
|
|
97
112
|
}
|
|
98
113
|
const choice = args.forceUpgrade || !process.stdin.isTTY ? "transfer" : await (0, import_prompts.promptOptions)(ctx, {
|
|
99
114
|
message: "Transfer data from existing deployment?",
|
|
@@ -116,31 +131,31 @@ async function handlePotentialUpgrade(ctx, args) {
|
|
|
116
131
|
args.deploymentName,
|
|
117
132
|
newConfig
|
|
118
133
|
);
|
|
119
|
-
|
|
134
|
+
const { cleanupHandle: cleanupHandle2 } = await (0, import_run2.runLocalBackend)(ctx, {
|
|
120
135
|
binaryPath: args.newBinaryPath,
|
|
121
136
|
deploymentKind: args.deploymentKind,
|
|
122
137
|
deploymentName: args.deploymentName,
|
|
123
138
|
ports: args.ports,
|
|
124
|
-
instanceSecret
|
|
139
|
+
instanceSecret,
|
|
125
140
|
isLatestVersion: true
|
|
126
141
|
});
|
|
142
|
+
return { cleanupHandle: cleanupHandle2, adminKey };
|
|
127
143
|
}
|
|
128
|
-
const
|
|
129
|
-
const oldAdminKey = (0, import_filePaths.loadDeploymentConfig)(ctx, args.deploymentKind, args.deploymentName)?.adminKey ?? args.adminKey;
|
|
130
|
-
return handleUpgrade(ctx, {
|
|
144
|
+
const { cleanupHandle } = await handleUpgrade(ctx, {
|
|
131
145
|
deploymentKind: args.deploymentKind,
|
|
132
146
|
deploymentName: args.deploymentName,
|
|
133
147
|
oldVersion: args.oldVersion,
|
|
134
148
|
newBinaryPath: args.newBinaryPath,
|
|
135
149
|
newVersion: args.newVersion,
|
|
136
150
|
ports: args.ports,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
instanceSecret: args.instanceSecret,
|
|
151
|
+
adminKey,
|
|
152
|
+
instanceSecret,
|
|
140
153
|
cloudProjectId: args.cloudProjectId
|
|
141
154
|
});
|
|
155
|
+
return { cleanupHandle, adminKey };
|
|
142
156
|
}
|
|
143
157
|
async function handleUpgrade(ctx, args) {
|
|
158
|
+
const { adminKey } = args;
|
|
144
159
|
const { binaryPath: oldBinaryPath } = await (0, import_download.ensureBackendBinaryDownloaded)(
|
|
145
160
|
ctx,
|
|
146
161
|
{
|
|
@@ -161,7 +176,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
161
176
|
const deploymentUrl = (0, import_run2.localDeploymentUrl)(args.ports.cloud);
|
|
162
177
|
const envs = await (0, import_run.runSystemQuery)(ctx, {
|
|
163
178
|
deploymentUrl,
|
|
164
|
-
adminKey
|
|
179
|
+
adminKey,
|
|
165
180
|
functionName: "_system/cli/queryEnvironmentVariables",
|
|
166
181
|
componentPath: void 0,
|
|
167
182
|
args: {}
|
|
@@ -174,13 +189,13 @@ async function handleUpgrade(ctx, args) {
|
|
|
174
189
|
if (ctx.fs.exists(exportPath)) {
|
|
175
190
|
ctx.fs.unlink(exportPath);
|
|
176
191
|
}
|
|
177
|
-
const
|
|
192
|
+
const snapshotExportState = await (0, import_convexExport.startSnapshotExport)(ctx, {
|
|
178
193
|
deploymentUrl,
|
|
179
|
-
adminKey
|
|
194
|
+
adminKey,
|
|
180
195
|
includeStorage: true,
|
|
181
196
|
inputPath: exportPath
|
|
182
197
|
});
|
|
183
|
-
if (
|
|
198
|
+
if (snapshotExportState.state !== "completed") {
|
|
184
199
|
return ctx.crash({
|
|
185
200
|
exitCode: 1,
|
|
186
201
|
errorType: "fatal",
|
|
@@ -188,9 +203,9 @@ async function handleUpgrade(ctx, args) {
|
|
|
188
203
|
});
|
|
189
204
|
}
|
|
190
205
|
await (0, import_convexExport.downloadSnapshotExport)(ctx, {
|
|
191
|
-
snapshotExportTs:
|
|
206
|
+
snapshotExportTs: snapshotExportState.start_ts,
|
|
192
207
|
inputPath: exportPath,
|
|
193
|
-
adminKey
|
|
208
|
+
adminKey,
|
|
194
209
|
deploymentUrl
|
|
195
210
|
});
|
|
196
211
|
(0, import_log.logVerbose)("Stopping the backend on the old version");
|
|
@@ -217,7 +232,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
217
232
|
if (envs.length > 0) {
|
|
218
233
|
const fetch = (0, import_utils.deploymentFetch)(ctx, {
|
|
219
234
|
deploymentUrl,
|
|
220
|
-
adminKey
|
|
235
|
+
adminKey
|
|
221
236
|
});
|
|
222
237
|
try {
|
|
223
238
|
await fetch("/api/update_environment_variables", {
|
|
@@ -231,7 +246,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
231
246
|
(0, import_log.logVerbose)("Doing a snapshot import");
|
|
232
247
|
const importId = await (0, import_convexImport.uploadForImport)(ctx, {
|
|
233
248
|
deploymentUrl,
|
|
234
|
-
adminKey
|
|
249
|
+
adminKey,
|
|
235
250
|
filePath: exportPath,
|
|
236
251
|
importArgs: { format: "zip", mode: "replace", tableName: void 0 },
|
|
237
252
|
onImportFailed: async (e) => {
|
|
@@ -242,7 +257,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
242
257
|
let status = await (0, import_convexImport.waitForStableImportState)(ctx, {
|
|
243
258
|
importId,
|
|
244
259
|
deploymentUrl,
|
|
245
|
-
adminKey
|
|
260
|
+
adminKey,
|
|
246
261
|
onProgress: () => {
|
|
247
262
|
return 0;
|
|
248
263
|
}
|
|
@@ -258,7 +273,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
258
273
|
}
|
|
259
274
|
await (0, import_convexImport.confirmImport)(ctx, {
|
|
260
275
|
importId,
|
|
261
|
-
adminKey
|
|
276
|
+
adminKey,
|
|
262
277
|
deploymentUrl,
|
|
263
278
|
onError: async (e) => {
|
|
264
279
|
(0, import_log.logFailure)(`Failed to confirm import: ${e}`);
|
|
@@ -268,7 +283,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
268
283
|
status = await (0, import_convexImport.waitForStableImportState)(ctx, {
|
|
269
284
|
importId,
|
|
270
285
|
deploymentUrl,
|
|
271
|
-
adminKey
|
|
286
|
+
adminKey,
|
|
272
287
|
onProgress: () => {
|
|
273
288
|
return 0;
|
|
274
289
|
}
|
|
@@ -287,7 +302,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
287
302
|
(0, import_filePaths.saveDeploymentConfig)(ctx, args.deploymentKind, args.deploymentName, {
|
|
288
303
|
ports: args.ports,
|
|
289
304
|
backendVersion: args.newVersion,
|
|
290
|
-
adminKey
|
|
305
|
+
adminKey,
|
|
291
306
|
instanceSecret: args.instanceSecret,
|
|
292
307
|
cloudProjectId: args.cloudProjectId
|
|
293
308
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/cli/lib/localDeployment/upgrade.ts"],
|
|
4
|
-
"sourcesContent": ["import path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n logFailure,\n logFinishedStep,\n logVerbose,\n} from \"../../../bundler/log.js\";\nimport { runSystemQuery } from \"../run.js\";\nimport {\n LocalDeploymentConfig,\n LocalDeploymentKind,\n deploymentStateDir,\n loadDeploymentConfig,\n saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport {\n ensureBackendStopped,\n localDeploymentUrl,\n runLocalBackend,\n} from \"./run.js\";\nimport {\n downloadSnapshotExport,\n startSnapshotExport,\n} from \"../convexExport.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"../utils/utils.js\";\nimport {\n confirmImport,\n uploadForImport,\n waitForStableImportState,\n} from \"../convexImport.js\";\nimport { promptOptions, promptYesNo } from \"../utils/prompts.js\";\nimport { recursivelyDelete } from \"../fsUtils.js\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nexport async function handlePotentialUpgrade(\n ctx: Context,\n args: {\n deploymentKind: LocalDeploymentKind;\n deploymentName: string;\n oldVersion: string | null;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n adminKey: string;\n instanceSecret: string;\n forceUpgrade: boolean;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string }> {\n const newConfig: LocalDeploymentConfig = {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey: args.adminKey,\n instanceSecret: args.instanceSecret,\n cloudProjectId: args.cloudProjectId,\n };\n if (args.oldVersion === null || args.oldVersion === args.newVersion) {\n // No upgrade needed. Save the current config and start running the backend.\n saveDeploymentConfig(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n newConfig,\n );\n return runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n ports: args.ports,\n instanceSecret: args.instanceSecret,\n isLatestVersion: true,\n });\n }\n logVerbose(\n `Considering upgrade from ${args.oldVersion} to ${args.newVersion}`,\n );\n const confirmed =\n args.forceUpgrade ||\n !process.stdin.isTTY ||\n (await promptYesNo(ctx, {\n message: `This deployment is using an older version of the Convex backend. Upgrade now?`,\n default: true,\n }));\n if (!confirmed) {\n const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n ctx,\n {\n kind: \"version\",\n version: args.oldVersion,\n },\n );\n // Skipping upgrade, save the config with the old version and run.\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ...newConfig,\n backendVersion: args.oldVersion,\n });\n return runLocalBackend(ctx, {\n binaryPath: oldBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: false,\n });\n }\n const choice =\n args.forceUpgrade || !process.stdin.isTTY\n ? \"transfer\"\n : await promptOptions(ctx, {\n message: \"Transfer data from existing deployment?\",\n default: \"transfer\",\n choices: [\n { name: \"transfer data\", value: \"transfer\" },\n { name: \"start fresh\", value: \"reset\" },\n ],\n });\n const deploymentStatePath = deploymentStateDir(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n );\n if (choice === \"reset\") {\n recursivelyDelete(ctx, deploymentStatePath, { force: true });\n saveDeploymentConfig(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n newConfig,\n );\n return runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n ports: args.ports,\n instanceSecret: args.instanceSecret,\n isLatestVersion: true,\n });\n }\n const newAdminKey = args.adminKey;\n const oldAdminKey =\n loadDeploymentConfig(ctx, args.deploymentKind, args.deploymentName)\n ?.adminKey ?? args.adminKey;\n return handleUpgrade(ctx, {\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n oldVersion: args.oldVersion!,\n newBinaryPath: args.newBinaryPath,\n newVersion: args.newVersion,\n ports: args.ports,\n oldAdminKey,\n newAdminKey,\n instanceSecret: args.instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n}\n\nasync function handleUpgrade(\n ctx: Context,\n args: {\n deploymentName: string;\n deploymentKind: LocalDeploymentKind;\n oldVersion: string;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n // In most of the cases the admin key is the same for the old and new version.\n // This is helpful when we start generating new admin key formats that might\n // be incompatible with older backend versions.\n oldAdminKey: string;\n newAdminKey: string;\n instanceSecret: string;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string }> {\n const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n ctx,\n {\n kind: \"version\",\n version: args.oldVersion,\n },\n );\n\n logVerbose(\"Running backend on old version\");\n const { cleanupHandle: oldCleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: oldBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: false,\n });\n\n logVerbose(\"Downloading env vars\");\n const deploymentUrl = localDeploymentUrl(args.ports.cloud);\n const envs = (await runSystemQuery(ctx, {\n deploymentUrl,\n adminKey: args.oldAdminKey,\n functionName: \"_system/cli/queryEnvironmentVariables\",\n componentPath: undefined,\n args: {},\n })) as Array<{\n name: string;\n value: string;\n }>;\n\n logVerbose(\"Doing a snapshot export\");\n const exportPath = path.join(\n deploymentStateDir(ctx, args.deploymentKind, args.deploymentName),\n \"export.zip\",\n );\n if (ctx.fs.exists(exportPath)) {\n ctx.fs.unlink(exportPath);\n }\n const snaphsotExportState = await startSnapshotExport(ctx, {\n deploymentUrl,\n adminKey: args.oldAdminKey,\n includeStorage: true,\n inputPath: exportPath,\n });\n if (snaphsotExportState.state !== \"completed\") {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Failed to export snapshot\",\n });\n }\n await downloadSnapshotExport(ctx, {\n snapshotExportTs: snaphsotExportState.start_ts,\n inputPath: exportPath,\n adminKey: args.oldAdminKey,\n deploymentUrl,\n });\n\n logVerbose(\"Stopping the backend on the old version\");\n const oldCleanupFunc = ctx.removeCleanup(oldCleanupHandle);\n if (oldCleanupFunc) {\n await oldCleanupFunc(0);\n }\n await ensureBackendStopped(ctx, {\n ports: args.ports,\n maxTimeSecs: 5,\n deploymentName: args.deploymentName,\n allowOtherDeployments: false,\n });\n\n // TODO(ENG-7078) save old artifacts to backup files\n logVerbose(\"Running backend on new version\");\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: true,\n });\n\n logVerbose(\"Importing the env vars\");\n if (envs.length > 0) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl,\n adminKey: args.newAdminKey,\n });\n try {\n await fetch(\"/api/update_environment_variables\", {\n body: JSON.stringify({ changes: envs }),\n method: \"POST\",\n });\n } catch (e) {\n // TODO: this should ideally have a `LocalDeploymentError`\n return await logAndHandleFetchError(ctx, e);\n }\n }\n\n logVerbose(\"Doing a snapshot import\");\n const importId = await uploadForImport(ctx, {\n deploymentUrl,\n adminKey: args.newAdminKey,\n filePath: exportPath,\n importArgs: { format: \"zip\", mode: \"replace\", tableName: undefined },\n onImportFailed: async (e) => {\n logFailure(`Failed to import snapshot: ${e}`);\n },\n });\n logVerbose(`Snapshot import started`);\n let status = await waitForStableImportState(ctx, {\n importId,\n deploymentUrl,\n adminKey: args.newAdminKey,\n onProgress: () => {\n // do nothing for now\n return 0;\n },\n });\n if (status.state !== \"waiting_for_confirmation\") {\n const message = \"Error while transferring data: Failed to upload snapshot\";\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: new LocalDeploymentError(message),\n });\n }\n\n await confirmImport(ctx, {\n importId,\n adminKey: args.newAdminKey,\n deploymentUrl,\n onError: async (e) => {\n logFailure(`Failed to confirm import: ${e}`);\n },\n });\n logVerbose(`Snapshot import confirmed`);\n status = await waitForStableImportState(ctx, {\n importId,\n deploymentUrl,\n adminKey: args.newAdminKey,\n onProgress: () => {\n // do nothing for now\n return 0;\n },\n });\n logVerbose(`Snapshot import status: ${status.state}`);\n if (status.state !== \"completed\") {\n const message = \"Error while transferring data: Failed to import snapshot\";\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: new LocalDeploymentError(message),\n });\n }\n\n logFinishedStep(\"Successfully upgraded to a new backend version\");\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey: args.newAdminKey,\n instanceSecret: args.instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n\n return { cleanupHandle };\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,iBAIO;AACP,iBAA+B;AAC/B,
|
|
6
|
-
"names": ["import_run", "path"]
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n logFailure,\n logFinishedStep,\n logVerbose,\n} from \"../../../bundler/log.js\";\nimport { runSystemQuery } from \"../run.js\";\nimport {\n LocalDeploymentConfig,\n LocalDeploymentKind,\n deploymentStateDir,\n saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport {\n ensureBackendStopped,\n localDeploymentUrl,\n runLocalBackend,\n} from \"./run.js\";\nimport {\n downloadSnapshotExport,\n startSnapshotExport,\n} from \"../convexExport.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"../utils/utils.js\";\nimport {\n confirmImport,\n uploadForImport,\n waitForStableImportState,\n} from \"../convexImport.js\";\nimport { promptOptions, promptYesNo } from \"../utils/prompts.js\";\nimport { recursivelyDelete } from \"../fsUtils.js\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport {\n generateLocalDevSecretsWithLatestBinary,\n LEGACY_LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./secrets.js\";\n\nexport async function handlePotentialUpgradeAndStart(\n ctx: Context,\n args: {\n deploymentKind: LocalDeploymentKind;\n deploymentName: string;\n oldVersion: string | null;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n existingCredentials: { adminKey: string; instanceSecret: string } | null;\n forceUpgrade: boolean;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string; adminKey: string }> {\n const { adminKey, instanceSecret } =\n args.existingCredentials === null ||\n args.existingCredentials.instanceSecret ===\n LEGACY_LOCAL_BACKEND_INSTANCE_SECRET\n ? // Using `generateLocalDevSecretsFromLatestBinary` instead of `generateLocalDevSecrets`\n // here, because `newBinaryPath` can be a binary that doesn\u2019t support\n // the `keygen admin-key` subcommand (when the --local-backend-version flag is provided to the CLI)\n //\n // In most cases (the user is not using the flag), we have already downloaded the latest binary\n // shortly before in handleLocalDeployment/handleAnonymousDeployment, so this doesn\u2019t cause an\n // extra download (even if the user chooses later not to upgrade their deployment)\n await generateLocalDevSecretsWithLatestBinary(ctx, {\n deploymentName: args.deploymentName,\n })\n : args.existingCredentials;\n const newConfig: LocalDeploymentConfig = {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey,\n instanceSecret,\n cloudProjectId: args.cloudProjectId,\n };\n if (args.oldVersion === null || args.oldVersion === args.newVersion) {\n // No upgrade needed. Save the current config and start running the backend.\n saveDeploymentConfig(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n newConfig,\n );\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n ports: args.ports,\n instanceSecret,\n isLatestVersion: true,\n });\n return { cleanupHandle, adminKey };\n }\n logVerbose(\n `Considering upgrade from ${args.oldVersion} to ${args.newVersion}`,\n );\n const confirmed =\n args.forceUpgrade ||\n !process.stdin.isTTY ||\n (await promptYesNo(ctx, {\n message: `This deployment is using an older version of the Convex backend. Upgrade now?`,\n default: true,\n }));\n if (!confirmed) {\n const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n ctx,\n {\n kind: \"version\",\n version: args.oldVersion,\n },\n );\n // Skipping upgrade, save the config with the old version and run.\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ...newConfig,\n backendVersion: args.oldVersion,\n });\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: oldBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret,\n isLatestVersion: false,\n });\n return { cleanupHandle, adminKey };\n }\n const choice =\n args.forceUpgrade || !process.stdin.isTTY\n ? \"transfer\"\n : await promptOptions(ctx, {\n message: \"Transfer data from existing deployment?\",\n default: \"transfer\",\n choices: [\n { name: \"transfer data\", value: \"transfer\" },\n { name: \"start fresh\", value: \"reset\" },\n ],\n });\n const deploymentStatePath = deploymentStateDir(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n );\n if (choice === \"reset\") {\n recursivelyDelete(ctx, deploymentStatePath, { force: true });\n saveDeploymentConfig(\n ctx,\n args.deploymentKind,\n args.deploymentName,\n newConfig,\n );\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n ports: args.ports,\n instanceSecret,\n isLatestVersion: true,\n });\n return { cleanupHandle, adminKey };\n }\n const { cleanupHandle } = await handleUpgrade(ctx, {\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n oldVersion: args.oldVersion!,\n newBinaryPath: args.newBinaryPath,\n newVersion: args.newVersion,\n ports: args.ports,\n adminKey,\n instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n return { cleanupHandle, adminKey };\n}\n\nasync function handleUpgrade(\n ctx: Context,\n args: {\n deploymentName: string;\n deploymentKind: LocalDeploymentKind;\n oldVersion: string;\n newBinaryPath: string;\n newVersion: string;\n ports: {\n cloud: number;\n site: number;\n };\n instanceSecret: string;\n adminKey: string;\n cloudProjectId: number | undefined;\n },\n): Promise<{ cleanupHandle: string }> {\n const { adminKey } = args;\n const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n ctx,\n {\n kind: \"version\",\n version: args.oldVersion,\n },\n );\n\n logVerbose(\"Running backend on old version\");\n const { cleanupHandle: oldCleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: oldBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: false,\n });\n\n logVerbose(\"Downloading env vars\");\n const deploymentUrl = localDeploymentUrl(args.ports.cloud);\n const envs = (await runSystemQuery(ctx, {\n deploymentUrl,\n adminKey,\n functionName: \"_system/cli/queryEnvironmentVariables\",\n componentPath: undefined,\n args: {},\n })) as Array<{\n name: string;\n value: string;\n }>;\n\n logVerbose(\"Doing a snapshot export\");\n const exportPath = path.join(\n deploymentStateDir(ctx, args.deploymentKind, args.deploymentName),\n \"export.zip\",\n );\n if (ctx.fs.exists(exportPath)) {\n ctx.fs.unlink(exportPath);\n }\n const snapshotExportState = await startSnapshotExport(ctx, {\n deploymentUrl,\n adminKey,\n includeStorage: true,\n inputPath: exportPath,\n });\n if (snapshotExportState.state !== \"completed\") {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Failed to export snapshot\",\n });\n }\n await downloadSnapshotExport(ctx, {\n snapshotExportTs: snapshotExportState.start_ts,\n inputPath: exportPath,\n adminKey,\n deploymentUrl,\n });\n\n logVerbose(\"Stopping the backend on the old version\");\n const oldCleanupFunc = ctx.removeCleanup(oldCleanupHandle);\n if (oldCleanupFunc) {\n await oldCleanupFunc(0);\n }\n await ensureBackendStopped(ctx, {\n ports: args.ports,\n maxTimeSecs: 5,\n deploymentName: args.deploymentName,\n allowOtherDeployments: false,\n });\n\n // TODO(ENG-7078) save old artifacts to backup files\n logVerbose(\"Running backend on new version\");\n const { cleanupHandle } = await runLocalBackend(ctx, {\n binaryPath: args.newBinaryPath,\n ports: args.ports,\n deploymentKind: args.deploymentKind,\n deploymentName: args.deploymentName,\n instanceSecret: args.instanceSecret,\n isLatestVersion: true,\n });\n\n logVerbose(\"Importing the env vars\");\n if (envs.length > 0) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl,\n adminKey,\n });\n try {\n await fetch(\"/api/update_environment_variables\", {\n body: JSON.stringify({ changes: envs }),\n method: \"POST\",\n });\n } catch (e) {\n // TODO: this should ideally have a `LocalDeploymentError`\n return await logAndHandleFetchError(ctx, e);\n }\n }\n\n logVerbose(\"Doing a snapshot import\");\n const importId = await uploadForImport(ctx, {\n deploymentUrl,\n adminKey,\n filePath: exportPath,\n importArgs: { format: \"zip\", mode: \"replace\", tableName: undefined },\n onImportFailed: async (e) => {\n logFailure(`Failed to import snapshot: ${e}`);\n },\n });\n logVerbose(`Snapshot import started`);\n let status = await waitForStableImportState(ctx, {\n importId,\n deploymentUrl,\n adminKey,\n onProgress: () => {\n // do nothing for now\n return 0;\n },\n });\n if (status.state !== \"waiting_for_confirmation\") {\n const message = \"Error while transferring data: Failed to upload snapshot\";\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: new LocalDeploymentError(message),\n });\n }\n\n await confirmImport(ctx, {\n importId,\n adminKey,\n deploymentUrl,\n onError: async (e) => {\n logFailure(`Failed to confirm import: ${e}`);\n },\n });\n logVerbose(`Snapshot import confirmed`);\n status = await waitForStableImportState(ctx, {\n importId,\n deploymentUrl,\n adminKey,\n onProgress: () => {\n // do nothing for now\n return 0;\n },\n });\n logVerbose(`Snapshot import status: ${status.state}`);\n if (status.state !== \"completed\") {\n const message = \"Error while transferring data: Failed to import snapshot\";\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: message,\n errForSentry: new LocalDeploymentError(message),\n });\n }\n\n logFinishedStep(\"Successfully upgraded to a new backend version\");\n saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n ports: args.ports,\n backendVersion: args.newVersion,\n adminKey,\n instanceSecret: args.instanceSecret,\n cloudProjectId: args.cloudProjectId,\n });\n\n return { cleanupHandle };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_run", "cleanupHandle", "path"]
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,28 +15,17 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
var utils_exports = {};
|
|
30
20
|
__export(utils_exports, {
|
|
31
21
|
LOCAL_BACKEND_INSTANCE_SECRET: () => LOCAL_BACKEND_INSTANCE_SECRET,
|
|
32
22
|
chooseLocalBackendPorts: () => chooseLocalBackendPorts,
|
|
33
23
|
choosePorts: () => choosePorts,
|
|
34
|
-
generateInstanceSecret: () => generateInstanceSecret,
|
|
35
|
-
isOffline: () => isOffline,
|
|
36
24
|
printLocalDeploymentWelcomeMessage: () => printLocalDeploymentWelcomeMessage
|
|
37
25
|
});
|
|
38
26
|
module.exports = __toCommonJS(utils_exports);
|
|
39
27
|
var import_log = require("../../../bundler/log.js");
|
|
40
28
|
var import_detect_port = require("detect-port");
|
|
41
|
-
var import_crypto = __toESM(require("crypto"), 1);
|
|
42
29
|
var import_chalk = require("chalk");
|
|
43
30
|
async function choosePorts(ctx, {
|
|
44
31
|
count,
|
|
@@ -91,9 +78,6 @@ async function chooseLocalBackendPorts(ctx, options) {
|
|
|
91
78
|
});
|
|
92
79
|
return { cloudPort, sitePort };
|
|
93
80
|
}
|
|
94
|
-
async function isOffline() {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
81
|
function printLocalDeploymentWelcomeMessage() {
|
|
98
82
|
(0, import_log.logMessage)(
|
|
99
83
|
import_chalk.chalkStderr.cyan("You're trying out the beta local deployment feature!")
|
|
@@ -104,8 +88,5 @@ function printLocalDeploymentWelcomeMessage() {
|
|
|
104
88
|
)
|
|
105
89
|
);
|
|
106
90
|
}
|
|
107
|
-
function generateInstanceSecret() {
|
|
108
|
-
return import_crypto.default.randomBytes(32).toString("hex");
|
|
109
|
-
}
|
|
110
91
|
const LOCAL_BACKEND_INSTANCE_SECRET = "4361726e697461732c206c69746572616c6c79206d65616e696e6720226c6974";
|
|
111
92
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/cli/lib/localDeployment/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { Context } from \"../../../bundler/context.js\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { detect } from \"detect-port\";\nimport
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["port"
|
|
4
|
+
"sourcesContent": ["import { Context } from \"../../../bundler/context.js\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { detect } from \"detect-port\";\nimport { chalkStderr } from \"chalk\";\n\nexport async function choosePorts(\n ctx: Context,\n {\n count,\n requestedPorts,\n suggestedPorts,\n startPort,\n }: {\n count: number;\n /** Ports that must mandatorily be used when provided. */\n requestedPorts?: Array<number | null>;\n /** Ports that will be tried preferentially when provided, but are not required. */\n suggestedPorts?: Array<number | null>;\n startPort: number;\n },\n): Promise<Array<number>> {\n const ports: Array<number> = [];\n for (let i = 0; i < count; i++) {\n const requestedPort = requestedPorts?.[i];\n if (requestedPort !== null) {\n const port = await detect(requestedPort);\n if (port !== requestedPort) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Requested port ${requestedPort} is not available`,\n });\n }\n ports.push(port);\n } else {\n const suggestedPort = suggestedPorts?.[ports.length] ?? null;\n if (suggestedPort !== null) {\n const port = await detect(suggestedPort);\n if (port === suggestedPort) {\n ports.push(suggestedPort);\n continue;\n }\n }\n\n const portToTry =\n ports.length > 0 ? ports[ports.length - 1] + 1 : startPort;\n const port = await detect(portToTry);\n ports.push(port);\n }\n }\n return ports;\n}\n\nexport async function chooseLocalBackendPorts(\n ctx: Context,\n options?: {\n suggestedPorts?:\n | { cloud?: number | undefined; site?: number | undefined }\n | undefined;\n requestedPorts?:\n | { cloud?: number | undefined; site?: number | undefined }\n | undefined;\n },\n): Promise<{ cloudPort: number; sitePort: number }> {\n const { suggestedPorts, requestedPorts } = options ?? {};\n\n const [cloudPort, sitePort] = await choosePorts(ctx, {\n count: 2,\n startPort: 3210,\n requestedPorts: [\n requestedPorts?.cloud ?? null,\n requestedPorts?.site ?? null,\n ],\n suggestedPorts: [\n suggestedPorts?.cloud ?? null,\n suggestedPorts?.site ?? null,\n ],\n });\n return { cloudPort, sitePort };\n}\n\nexport function printLocalDeploymentWelcomeMessage() {\n logMessage(\n chalkStderr.cyan(\"You're trying out the beta local deployment feature!\"),\n );\n logMessage(\n chalkStderr.cyan(\n \"To learn more, read the docs: https://docs.convex.dev/cli/local-deployments\",\n ),\n );\n}\n\nexport const LOCAL_BACKEND_INSTANCE_SECRET =\n \"4361726e697461732c206c69746572616c6c79206d65616e696e6720226c6974\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA2B;AAC3B,yBAAuB;AACvB,mBAA4B;AAE5B,eAAsB,YACpB,KACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQwB;AACxB,QAAM,QAAuB,CAAC;AAC9B,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,UAAM,gBAAgB,iBAAiB,CAAC;AACxC,QAAI,kBAAkB,MAAM;AAC1B,YAAM,OAAO,UAAM,2BAAO,aAAa;AACvC,UAAI,SAAS,eAAe;AAC1B,eAAO,IAAI,MAAM;AAAA,UACf,UAAU;AAAA,UACV,WAAW;AAAA,UACX,gBAAgB,kBAAkB,aAAa;AAAA,QACjD,CAAC;AAAA,MACH;AACA,YAAM,KAAK,IAAI;AAAA,IACjB,OAAO;AACL,YAAM,gBAAgB,iBAAiB,MAAM,MAAM,KAAK;AACxD,UAAI,kBAAkB,MAAM;AAC1B,cAAMA,QAAO,UAAM,2BAAO,aAAa;AACvC,YAAIA,UAAS,eAAe;AAC1B,gBAAM,KAAK,aAAa;AACxB;AAAA,QACF;AAAA,MACF;AAEA,YAAM,YACJ,MAAM,SAAS,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI,IAAI;AACnD,YAAM,OAAO,UAAM,2BAAO,SAAS;AACnC,YAAM,KAAK,IAAI;AAAA,IACjB;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,wBACpB,KACA,SAQkD;AAClD,QAAM,EAAE,gBAAgB,eAAe,IAAI,WAAW,CAAC;AAEvD,QAAM,CAAC,WAAW,QAAQ,IAAI,MAAM,YAAY,KAAK;AAAA,IACnD,OAAO;AAAA,IACP,WAAW;AAAA,IACX,gBAAgB;AAAA,MACd,gBAAgB,SAAS;AAAA,MACzB,gBAAgB,QAAQ;AAAA,IAC1B;AAAA,IACA,gBAAgB;AAAA,MACd,gBAAgB,SAAS;AAAA,MACzB,gBAAgB,QAAQ;AAAA,IAC1B;AAAA,EACF,CAAC;AACD,SAAO,EAAE,WAAW,SAAS;AAC/B;AAEO,SAAS,qCAAqC;AACnD;AAAA,IACE,yBAAY,KAAK,sDAAsD;AAAA,EACzE;AACA;AAAA,IACE,yBAAY;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,gCACX;",
|
|
6
|
+
"names": ["port"]
|
|
7
7
|
}
|
|
@@ -34,9 +34,9 @@ const INLINE_QUERY_DESCRIPTION = [
|
|
|
34
34
|
"Use `--component` to target a mounted component.",
|
|
35
35
|
"",
|
|
36
36
|
"To format the query:",
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'
|
|
37
|
+
'\u2022 Simple expressions are returned automatically, for example: `await ctx.db.query("messages").take(5)`.',
|
|
38
|
+
'\u2022 For multi-statement queries, use an explicit return, for example: `const firstMessage = await ctx.db.query("messages").first(); console.log(firstMessage?._id); return firstMessage;`.',
|
|
39
|
+
'\u2022 For full control, pass a module source that exports a default query, for example: `export default query({ handler: async (ctx) => { return await ctx.db.query("messages").take(10); } })`.'
|
|
40
40
|
].join("\n");
|
|
41
41
|
function inlineQueryToQuerySource(inlineQuery) {
|
|
42
42
|
const trimmedQuery = inlineQuery.trim();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/lib/runTestFunction.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Context } from \"../../bundler/context.js\";\nimport { deploymentFetch } from \"./utils/utils.js\";\n\nconst QUERY_MODULE_PREAMBLE =\n 'import { query, internalQuery } from \"convex:/_system/repl/wrappers.js\";';\n\n/** Shared help text for the query/module string (CLI argument + MCP input). */\nexport const RUN_ONEOFF_QUERY_SOURCE_DESCRIPTION =\n 'JavaScript module source for a single file (testQuery.js) that exports a default readonly query, for example: export default query({ handler: async (ctx) => ({ count: (await ctx.db.query(\"messages\").take(10)).length }) });';\n\nexport const INLINE_QUERY_DESCRIPTION = [\n \"JavaScript to evaluate as a readonly query. The query is completely sandboxed, so it can only read data and cannot modify the database or access the network.\",\n \"\",\n \"This is a one-shot query and cannot be combined with `--watch`.\",\n \"Use `--component` to target a mounted component.\",\n \"\",\n \"To format the query:\",\n '
|
|
4
|
+
"sourcesContent": ["import type { Context } from \"../../bundler/context.js\";\nimport { deploymentFetch } from \"./utils/utils.js\";\n\nconst QUERY_MODULE_PREAMBLE =\n 'import { query, internalQuery } from \"convex:/_system/repl/wrappers.js\";';\n\n/** Shared help text for the query/module string (CLI argument + MCP input). */\nexport const RUN_ONEOFF_QUERY_SOURCE_DESCRIPTION =\n 'JavaScript module source for a single file (testQuery.js) that exports a default readonly query, for example: export default query({ handler: async (ctx) => ({ count: (await ctx.db.query(\"messages\").take(10)).length }) });';\n\nexport const INLINE_QUERY_DESCRIPTION = [\n \"JavaScript to evaluate as a readonly query. The query is completely sandboxed, so it can only read data and cannot modify the database or access the network.\",\n \"\",\n \"This is a one-shot query and cannot be combined with `--watch`.\",\n \"Use `--component` to target a mounted component.\",\n \"\",\n \"To format the query:\",\n '\u2022 Simple expressions are returned automatically, for example: `await ctx.db.query(\"messages\").take(5)`.',\n '\u2022 For multi-statement queries, use an explicit return, for example: `const firstMessage = await ctx.db.query(\"messages\").first(); console.log(firstMessage?._id); return firstMessage;`.',\n '\u2022 For full control, pass a module source that exports a default query, for example: `export default query({ handler: async (ctx) => { return await ctx.db.query(\"messages\").take(10); } })`.',\n].join(\"\\n\");\n\nexport type RunTestFunctionQuerySuccess = {\n kind: \"success\";\n value: unknown;\n logLines: string[];\n};\n\nexport type RunTestFunctionQueryApplicationFailure = {\n kind: \"applicationFailure\";\n payload: unknown;\n};\n\nexport type RunTestFunctionQueryResult =\n | RunTestFunctionQuerySuccess\n | RunTestFunctionQueryApplicationFailure;\n\nexport function inlineQueryToQuerySource(inlineQuery: string) {\n const trimmedQuery = inlineQuery.trim();\n if (looksLikeQueryModuleSource(trimmedQuery)) {\n return injectQueryModulePreamble(trimmedQuery);\n }\n\n const queryBody = inlineQueryBody(trimmedQuery);\n return `${QUERY_MODULE_PREAMBLE}\n\nexport default query({\n handler: async (ctx) => {\n${indent(queryBody, 4)}\n },\n});`;\n}\n\n/**\n * POST /api/run_test_function with the same body shape as the dashboard and MCP.\n * Uses deploymentFetch for Convex-Client, auth headers, retries, and error typing.\n * On HTTP failure, throws ThrowingFetchError (from deploymentFetch).\n */\nexport async function runTestFunctionQuery(\n ctx: Context,\n args: {\n deploymentUrl: string;\n adminKey: string;\n querySource: string;\n componentId?: string;\n },\n): Promise<RunTestFunctionQueryResult> {\n const fetchDeployment = deploymentFetch(ctx, {\n deploymentUrl: args.deploymentUrl,\n adminKey: args.adminKey,\n });\n const response = await fetchDeployment(\"/api/run_test_function\", {\n method: \"POST\",\n body: JSON.stringify({\n adminKey: args.adminKey,\n args: {},\n bundle: {\n path: \"testQuery.js\",\n source: args.querySource,\n },\n format: \"convex_encoded_json\",\n ...(args.componentId !== undefined\n ? { componentId: args.componentId }\n : {}),\n }),\n });\n const result: unknown = await response.json();\n if (\n typeof result !== \"object\" ||\n result === null ||\n !(\"status\" in result) ||\n (result as { status: string }).status !== \"success\"\n ) {\n return { kind: \"applicationFailure\", payload: result };\n }\n const ok = result as {\n status: \"success\";\n value: unknown;\n logLines?: string[];\n };\n return {\n kind: \"success\",\n value: ok.value,\n logLines: ok.logLines ?? [],\n };\n}\n\nfunction looksLikeQueryModuleSource(querySource: string) {\n if (!querySource.includes(\"export default\")) return false;\n return /\\b(?:query|internalQuery)\\s*\\(/.test(querySource);\n}\n\nfunction injectQueryModulePreamble(querySource: string) {\n if (querySource.includes(\"convex:/_system/repl/wrappers.js\"))\n return querySource;\n return `${QUERY_MODULE_PREAMBLE}\n\n${querySource}`;\n}\n\nfunction inlineQueryBody(inlineQuery: string) {\n const trimmed = inlineQuery.trim();\n if (!isExpression(trimmed)) return trimmed;\n return `return (${trimmed.replace(/;$/, \"\")});`;\n}\n\nfunction isExpression(inlineQuery: string) {\n if (inlineQuery.includes(\"\\n\")) return false;\n return !/^(const|let|var|if|for|while|switch|try|throw|return)\\b/.test(\n inlineQuery,\n );\n}\n\nfunction indent(text: string, spaces: number) {\n const prefix = \" \".repeat(spaces);\n return text\n .split(\"\\n\")\n .map((line) => `${prefix}${line}`)\n .join(\"\\n\");\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAgC;AAEhC,MAAM,wBACJ;AAGK,MAAM,sCACX;AAEK,MAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI;AAiBJ,SAAS,yBAAyB,aAAqB;AAC5D,QAAM,eAAe,YAAY,KAAK;AACtC,MAAI,2BAA2B,YAAY,GAAG;AAC5C,WAAO,0BAA0B,YAAY;AAAA,EAC/C;AAEA,QAAM,YAAY,gBAAgB,YAAY;AAC9C,SAAO,GAAG,qBAAqB;AAAA;AAAA;AAAA;AAAA,EAI/B,OAAO,WAAW,CAAC,CAAC;AAAA;AAAA;AAGtB;AAOA,eAAsB,qBACpB,KACA,MAMqC;AACrC,QAAM,sBAAkB,8BAAgB,KAAK;AAAA,IAC3C,eAAe,KAAK;AAAA,IACpB,UAAU,KAAK;AAAA,EACjB,CAAC;AACD,QAAM,WAAW,MAAM,gBAAgB,0BAA0B;AAAA,IAC/D,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,MAAM,CAAC;AAAA,MACP,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,QAAQ,KAAK;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,MACR,GAAI,KAAK,gBAAgB,SACrB,EAAE,aAAa,KAAK,YAAY,IAChC,CAAC;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AACD,QAAM,SAAkB,MAAM,SAAS,KAAK;AAC5C,MACE,OAAO,WAAW,YAClB,WAAW,QACX,EAAE,YAAY,WACb,OAA8B,WAAW,WAC1C;AACA,WAAO,EAAE,MAAM,sBAAsB,SAAS,OAAO;AAAA,EACvD;AACA,QAAM,KAAK;AAKX,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,GAAG;AAAA,IACV,UAAU,GAAG,YAAY,CAAC;AAAA,EAC5B;AACF;AAEA,SAAS,2BAA2B,aAAqB;AACvD,MAAI,CAAC,YAAY,SAAS,gBAAgB,EAAG,QAAO;AACpD,SAAO,iCAAiC,KAAK,WAAW;AAC1D;AAEA,SAAS,0BAA0B,aAAqB;AACtD,MAAI,YAAY,SAAS,kCAAkC;AACzD,WAAO;AACT,SAAO,GAAG,qBAAqB;AAAA;AAAA,EAE/B,WAAW;AACb;AAEA,SAAS,gBAAgB,aAAqB;AAC5C,QAAM,UAAU,YAAY,KAAK;AACjC,MAAI,CAAC,aAAa,OAAO,EAAG,QAAO;AACnC,SAAO,WAAW,QAAQ,QAAQ,MAAM,EAAE,CAAC;AAC7C;AAEA,SAAS,aAAa,aAAqB;AACzC,MAAI,YAAY,SAAS,IAAI,EAAG,QAAO;AACvC,SAAO,CAAC,0DAA0D;AAAA,IAChE;AAAA,EACF;AACF;AAEA,SAAS,OAAO,MAAc,QAAgB;AAC5C,QAAM,SAAS,IAAI,OAAO,MAAM;AAChC,SAAO,KACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,EAAE,EAChC,KAAK,IAAI;AACd;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cjs/cli/run.js
CHANGED
|
@@ -40,11 +40,11 @@ const run = new import_extra_typings.Command("run").summary(
|
|
|
40
40
|
[
|
|
41
41
|
"Run a function or evaluate an inline readonly query on your deployment.",
|
|
42
42
|
"",
|
|
43
|
-
'
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
43
|
+
'\u2022 Run a function with JSON arguments: `npx convex run messages:send \'{"body": "hello", "author": "me"}\'`',
|
|
44
|
+
"\u2022 Run a function on prod: `npx convex run messages:list --prod`",
|
|
45
|
+
"\u2022 Live-update a query's result: `npx convex run messages:list --watch`",
|
|
46
|
+
"\u2022 Push local code before running: `npx convex run messages:send '{}' --push`",
|
|
47
|
+
"\u2022 Evaluate an inline readonly query: `npx convex run --inline-query 'await ctx.db.query(\"messages\").take(5)'`",
|
|
48
48
|
"",
|
|
49
49
|
"Arguments are specified as a JSON object. By default, this runs on your dev deployment."
|
|
50
50
|
].join("\n")
|
package/dist/cjs/cli/run.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/run.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage, logOutput } from \"../bundler/log.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { jsonToConvex, type JSONValue } from \"../values/value.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport {\n formatValue,\n pushToDeployment,\n runInDeployment,\n runSystemQuery,\n} from \"./lib/run.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\nimport {\n inlineQueryToQuerySource,\n runTestFunctionQuery,\n} from \"./lib/runTestFunction.js\";\nimport {\n logAndHandleFetchError,\n ThrowingFetchError,\n} from \"./lib/utils/utils.js\";\n\nexport const run = new Command(\"run\")\n .summary(\n \"Run a function or evaluate an inline readonly query on your deployment\",\n )\n .description(\n [\n \"Run a function or evaluate an inline readonly query on your deployment.\",\n \"\",\n '
|
|
4
|
+
"sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage, logOutput } from \"../bundler/log.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { jsonToConvex, type JSONValue } from \"../values/value.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport {\n formatValue,\n pushToDeployment,\n runInDeployment,\n runSystemQuery,\n} from \"./lib/run.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\nimport {\n inlineQueryToQuerySource,\n runTestFunctionQuery,\n} from \"./lib/runTestFunction.js\";\nimport {\n logAndHandleFetchError,\n ThrowingFetchError,\n} from \"./lib/utils/utils.js\";\n\nexport const run = new Command(\"run\")\n .summary(\n \"Run a function or evaluate an inline readonly query on your deployment\",\n )\n .description(\n [\n \"Run a function or evaluate an inline readonly query on your deployment.\",\n \"\",\n '\u2022 Run a function with JSON arguments: `npx convex run messages:send \\'{\"body\": \"hello\", \"author\": \"me\"}\\'`',\n \"\u2022 Run a function on prod: `npx convex run messages:list --prod`\",\n \"\u2022 Live-update a query's result: `npx convex run messages:list --watch`\",\n \"\u2022 Push local code before running: `npx convex run messages:send '{}' --push`\",\n \"\u2022 Evaluate an inline readonly query: `npx convex run --inline-query 'await ctx.db.query(\\\"messages\\\").take(5)'`\",\n \"\",\n \"Arguments are specified as a JSON object. By default, this runs on your dev deployment.\",\n ].join(\"\\n\"),\n )\n .allowExcessArguments(false)\n .addRunOptions()\n .addDeploymentSelectionOptions(actionDescription(\"Run the function on\"))\n .showHelpAfterError()\n .action(async (functionName, argsString, options) => {\n const ctx = await oneoffContext(options);\n const target = await resolveRunTarget({\n ctx,\n functionName,\n argsString,\n options,\n });\n if (target.kind === \"function\" || options.push) {\n await ensureHasConvexDependency(ctx, \"run\");\n }\n\n const deploymentSelection = await getDeploymentSelection(ctx, options);\n const deployment = await loadSelectedDeploymentCredentials(\n ctx,\n deploymentSelection,\n { ensureLocalRunning: false },\n );\n\n if (\n deployment.deploymentFields?.deploymentType === \"prod\" &&\n options.push\n ) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n `\\`convex run\\` doesn't support pushing functions to prod deployments. ` +\n `Remove the --push flag. To push to production use \\`npx convex deploy\\`.`,\n });\n }\n\n await withRunningBackend({\n ctx,\n deployment: {\n deploymentUrl: deployment.url,\n deploymentFields: deployment.deploymentFields,\n },\n action: async () => {\n if (target.kind === \"inlineQuery\") {\n if (options.push) {\n await pushToDeployment(ctx, {\n deploymentUrl: deployment.url,\n adminKey: deployment.adminKey,\n deploymentName:\n deployment.deploymentFields?.deploymentName ?? null,\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n codegen: options.codegen === \"enable\",\n liveComponentSources: Boolean(options.liveComponentSources),\n });\n }\n return await runInlineQueryInDeployment({\n ctx,\n deploymentUrl: deployment.url,\n adminKey: deployment.adminKey,\n inlineQuery: target.inlineQuery,\n ...(options.component !== undefined\n ? { componentPath: options.component }\n : {}),\n });\n }\n\n await runInDeployment(ctx, {\n deploymentUrl: deployment.url,\n adminKey: deployment.adminKey,\n deploymentName: deployment.deploymentFields?.deploymentName ?? null,\n functionName: target.functionName,\n argsString: target.argsString,\n componentPath: options.component,\n identityString: options.identity,\n push: Boolean(options.push),\n watch: Boolean(options.watch),\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n codegen: options.codegen === \"enable\",\n liveComponentSources: Boolean(options.liveComponentSources),\n });\n },\n });\n });\n\ntype RunTarget =\n | {\n kind: \"function\";\n functionName: string;\n argsString: string;\n }\n | {\n kind: \"inlineQuery\";\n inlineQuery: string;\n };\n\nasync function resolveRunTarget(args: {\n ctx: Awaited<ReturnType<typeof oneoffContext>>;\n functionName: string | undefined;\n argsString: string | undefined;\n options: {\n inlineQuery?: string;\n watch?: boolean;\n push?: boolean;\n identity?: string;\n component?: string;\n };\n}): Promise<RunTarget> {\n const inlineQuery = args.options.inlineQuery?.trim();\n if (inlineQuery !== undefined && args.functionName !== undefined) {\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`npx convex run` accepts either <functionName> or `--inline-query`, not both.\",\n });\n }\n if (inlineQuery === undefined) {\n if (args.functionName === undefined) {\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`npx convex run` requires either <functionName> or `--inline-query`.\",\n });\n }\n return {\n kind: \"function\",\n functionName: args.functionName,\n argsString: args.argsString ?? \"{}\",\n };\n }\n if (inlineQuery.length === 0) {\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"`--inline-query` must not be empty.\",\n });\n }\n if (args.options.watch) {\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`--inline-query` can't be combined with `--watch`. Use `convex run <functionName> --watch` for named deployed queries.\",\n });\n }\n if (args.options.identity !== undefined) {\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"`--inline-query` can't be combined with `--identity`.\",\n });\n }\n return { kind: \"inlineQuery\", inlineQuery };\n}\n\nasync function runInlineQueryInDeployment(args: {\n ctx: Awaited<ReturnType<typeof oneoffContext>>;\n deploymentUrl: string;\n adminKey: string;\n inlineQuery: string;\n componentPath?: string;\n}) {\n try {\n const componentId = await resolveInlineQueryComponentId(args);\n const outcome = await runTestFunctionQuery(args.ctx, {\n deploymentUrl: args.deploymentUrl,\n adminKey: args.adminKey,\n querySource: inlineQueryToQuerySource(args.inlineQuery),\n ...(componentId !== undefined ? { componentId } : {}),\n });\n if (outcome.kind === \"applicationFailure\") {\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: chalkStderr.red(\n `Query failed: ${JSON.stringify(outcome.payload, null, 2)}`,\n ),\n });\n }\n\n for (const line of outcome.logLines) {\n logMessage(line);\n }\n\n const convexValue = jsonToConvex(outcome.value as JSONValue);\n if (convexValue !== null) logOutput(formatValue(convexValue));\n } catch (err) {\n if (err instanceof ThrowingFetchError) return await err.handle(args.ctx);\n return await logAndHandleFetchError(args.ctx, err);\n }\n}\n\nasync function resolveInlineQueryComponentId(args: {\n ctx: Awaited<ReturnType<typeof oneoffContext>>;\n deploymentUrl: string;\n adminKey: string;\n componentPath?: string;\n}) {\n const componentPath = args.componentPath?.trim();\n if (componentPath === undefined || componentPath === \"_App\") {\n return undefined;\n }\n if (componentPath.length === 0) {\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"`--component` must not be empty.\",\n });\n }\n\n const components = (await runSystemQuery(args.ctx, {\n deploymentUrl: args.deploymentUrl,\n adminKey: args.adminKey,\n functionName: \"_system/frontend/components:list\",\n componentPath: undefined,\n args: {},\n })) as { id: string; path: string }[];\n\n const component = components.find(({ path }) => path === componentPath);\n if (component !== undefined) {\n return component.id;\n }\n\n const availableComponents = components\n .map(({ path }) => path)\n .filter((path) => path.length > 0)\n .sort();\n const availableComponentsMessage =\n availableComponents.length === 0\n ? \"This deployment has no mounted components.\"\n : `Available components:\\n${availableComponents.map((path) => `\u2022 ${chalkStderr.gray(path)}`).join(\"\\n\")}`;\n\n return await args.ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n `Component path \"${componentPath}\" was not found.\\n\\n` +\n `${availableComponentsMessage}\\n` +\n \"Omit `--component` to target the app root.\",\n });\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_run", "import_utils"]
|
|
7
7
|
}
|
package/dist/cjs/index.js
CHANGED
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["export const version = \"1.
|
|
4
|
+
"sourcesContent": ["export const version = \"1.41.0\";\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,UAAU;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -52,7 +52,6 @@ async function invokeMutation(func, argsStr, visibility) {
|
|
|
52
52
|
scheduler: (0, import_scheduler_impl.setupMutationScheduler)(),
|
|
53
53
|
meta: (0, import_meta_impl.setupMutationMeta)(visibility),
|
|
54
54
|
runQuery: (reference, args2, options) => runUdf("query", reference, args2, options?.transactionLimits),
|
|
55
|
-
runSnapshotQuery: (reference, args2, options) => runUdf("snapshotQuery", reference, args2, options?.transactionLimits),
|
|
56
55
|
runMutation: (reference, args2, options) => runUdf("mutation", reference, args2, options?.transactionLimits)
|
|
57
56
|
};
|
|
58
57
|
const result = await invokeFunction(func, mutationCtx, args);
|