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
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
import { runSystemQuery } from "../run.js";
|
|
9
9
|
import {
|
|
10
10
|
deploymentStateDir,
|
|
11
|
-
loadDeploymentConfig,
|
|
12
11
|
saveDeploymentConfig
|
|
13
12
|
} from "./filePaths.js";
|
|
14
13
|
import {
|
|
@@ -30,12 +29,28 @@ import { promptOptions, promptYesNo } from "../utils/prompts.js";
|
|
|
30
29
|
import { recursivelyDelete } from "../fsUtils.js";
|
|
31
30
|
import { LocalDeploymentError } from "./errors.js";
|
|
32
31
|
import { ensureBackendBinaryDownloaded } from "./download.js";
|
|
33
|
-
|
|
32
|
+
import {
|
|
33
|
+
generateLocalDevSecretsWithLatestBinary,
|
|
34
|
+
LEGACY_LOCAL_BACKEND_INSTANCE_SECRET
|
|
35
|
+
} from "./secrets.js";
|
|
36
|
+
export async function handlePotentialUpgradeAndStart(ctx, args) {
|
|
37
|
+
const { adminKey, instanceSecret } = args.existingCredentials === null || args.existingCredentials.instanceSecret === LEGACY_LOCAL_BACKEND_INSTANCE_SECRET ? (
|
|
38
|
+
// Using `generateLocalDevSecretsFromLatestBinary` instead of `generateLocalDevSecrets`
|
|
39
|
+
// here, because `newBinaryPath` can be a binary that doesn’t support
|
|
40
|
+
// the `keygen admin-key` subcommand (when the --local-backend-version flag is provided to the CLI)
|
|
41
|
+
//
|
|
42
|
+
// In most cases (the user is not using the flag), we have already downloaded the latest binary
|
|
43
|
+
// shortly before in handleLocalDeployment/handleAnonymousDeployment, so this doesn’t cause an
|
|
44
|
+
// extra download (even if the user chooses later not to upgrade their deployment)
|
|
45
|
+
await generateLocalDevSecretsWithLatestBinary(ctx, {
|
|
46
|
+
deploymentName: args.deploymentName
|
|
47
|
+
})
|
|
48
|
+
) : args.existingCredentials;
|
|
34
49
|
const newConfig = {
|
|
35
50
|
ports: args.ports,
|
|
36
51
|
backendVersion: args.newVersion,
|
|
37
|
-
adminKey
|
|
38
|
-
instanceSecret
|
|
52
|
+
adminKey,
|
|
53
|
+
instanceSecret,
|
|
39
54
|
cloudProjectId: args.cloudProjectId
|
|
40
55
|
};
|
|
41
56
|
if (args.oldVersion === null || args.oldVersion === args.newVersion) {
|
|
@@ -45,14 +60,15 @@ export async function handlePotentialUpgrade(ctx, args) {
|
|
|
45
60
|
args.deploymentName,
|
|
46
61
|
newConfig
|
|
47
62
|
);
|
|
48
|
-
|
|
63
|
+
const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
|
|
49
64
|
binaryPath: args.newBinaryPath,
|
|
50
65
|
deploymentKind: args.deploymentKind,
|
|
51
66
|
deploymentName: args.deploymentName,
|
|
52
67
|
ports: args.ports,
|
|
53
|
-
instanceSecret
|
|
68
|
+
instanceSecret,
|
|
54
69
|
isLatestVersion: true
|
|
55
70
|
});
|
|
71
|
+
return { cleanupHandle: cleanupHandle2, adminKey };
|
|
56
72
|
}
|
|
57
73
|
logVerbose(
|
|
58
74
|
`Considering upgrade from ${args.oldVersion} to ${args.newVersion}`
|
|
@@ -73,14 +89,15 @@ export async function handlePotentialUpgrade(ctx, args) {
|
|
|
73
89
|
...newConfig,
|
|
74
90
|
backendVersion: args.oldVersion
|
|
75
91
|
});
|
|
76
|
-
|
|
92
|
+
const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
|
|
77
93
|
binaryPath: oldBinaryPath,
|
|
78
94
|
ports: args.ports,
|
|
79
95
|
deploymentKind: args.deploymentKind,
|
|
80
96
|
deploymentName: args.deploymentName,
|
|
81
|
-
instanceSecret
|
|
97
|
+
instanceSecret,
|
|
82
98
|
isLatestVersion: false
|
|
83
99
|
});
|
|
100
|
+
return { cleanupHandle: cleanupHandle2, adminKey };
|
|
84
101
|
}
|
|
85
102
|
const choice = args.forceUpgrade || !process.stdin.isTTY ? "transfer" : await promptOptions(ctx, {
|
|
86
103
|
message: "Transfer data from existing deployment?",
|
|
@@ -103,31 +120,31 @@ export async function handlePotentialUpgrade(ctx, args) {
|
|
|
103
120
|
args.deploymentName,
|
|
104
121
|
newConfig
|
|
105
122
|
);
|
|
106
|
-
|
|
123
|
+
const { cleanupHandle: cleanupHandle2 } = await runLocalBackend(ctx, {
|
|
107
124
|
binaryPath: args.newBinaryPath,
|
|
108
125
|
deploymentKind: args.deploymentKind,
|
|
109
126
|
deploymentName: args.deploymentName,
|
|
110
127
|
ports: args.ports,
|
|
111
|
-
instanceSecret
|
|
128
|
+
instanceSecret,
|
|
112
129
|
isLatestVersion: true
|
|
113
130
|
});
|
|
131
|
+
return { cleanupHandle: cleanupHandle2, adminKey };
|
|
114
132
|
}
|
|
115
|
-
const
|
|
116
|
-
const oldAdminKey = loadDeploymentConfig(ctx, args.deploymentKind, args.deploymentName)?.adminKey ?? args.adminKey;
|
|
117
|
-
return handleUpgrade(ctx, {
|
|
133
|
+
const { cleanupHandle } = await handleUpgrade(ctx, {
|
|
118
134
|
deploymentKind: args.deploymentKind,
|
|
119
135
|
deploymentName: args.deploymentName,
|
|
120
136
|
oldVersion: args.oldVersion,
|
|
121
137
|
newBinaryPath: args.newBinaryPath,
|
|
122
138
|
newVersion: args.newVersion,
|
|
123
139
|
ports: args.ports,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
instanceSecret: args.instanceSecret,
|
|
140
|
+
adminKey,
|
|
141
|
+
instanceSecret,
|
|
127
142
|
cloudProjectId: args.cloudProjectId
|
|
128
143
|
});
|
|
144
|
+
return { cleanupHandle, adminKey };
|
|
129
145
|
}
|
|
130
146
|
async function handleUpgrade(ctx, args) {
|
|
147
|
+
const { adminKey } = args;
|
|
131
148
|
const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(
|
|
132
149
|
ctx,
|
|
133
150
|
{
|
|
@@ -148,7 +165,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
148
165
|
const deploymentUrl = localDeploymentUrl(args.ports.cloud);
|
|
149
166
|
const envs = await runSystemQuery(ctx, {
|
|
150
167
|
deploymentUrl,
|
|
151
|
-
adminKey
|
|
168
|
+
adminKey,
|
|
152
169
|
functionName: "_system/cli/queryEnvironmentVariables",
|
|
153
170
|
componentPath: void 0,
|
|
154
171
|
args: {}
|
|
@@ -161,13 +178,13 @@ async function handleUpgrade(ctx, args) {
|
|
|
161
178
|
if (ctx.fs.exists(exportPath)) {
|
|
162
179
|
ctx.fs.unlink(exportPath);
|
|
163
180
|
}
|
|
164
|
-
const
|
|
181
|
+
const snapshotExportState = await startSnapshotExport(ctx, {
|
|
165
182
|
deploymentUrl,
|
|
166
|
-
adminKey
|
|
183
|
+
adminKey,
|
|
167
184
|
includeStorage: true,
|
|
168
185
|
inputPath: exportPath
|
|
169
186
|
});
|
|
170
|
-
if (
|
|
187
|
+
if (snapshotExportState.state !== "completed") {
|
|
171
188
|
return ctx.crash({
|
|
172
189
|
exitCode: 1,
|
|
173
190
|
errorType: "fatal",
|
|
@@ -175,9 +192,9 @@ async function handleUpgrade(ctx, args) {
|
|
|
175
192
|
});
|
|
176
193
|
}
|
|
177
194
|
await downloadSnapshotExport(ctx, {
|
|
178
|
-
snapshotExportTs:
|
|
195
|
+
snapshotExportTs: snapshotExportState.start_ts,
|
|
179
196
|
inputPath: exportPath,
|
|
180
|
-
adminKey
|
|
197
|
+
adminKey,
|
|
181
198
|
deploymentUrl
|
|
182
199
|
});
|
|
183
200
|
logVerbose("Stopping the backend on the old version");
|
|
@@ -204,7 +221,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
204
221
|
if (envs.length > 0) {
|
|
205
222
|
const fetch = deploymentFetch(ctx, {
|
|
206
223
|
deploymentUrl,
|
|
207
|
-
adminKey
|
|
224
|
+
adminKey
|
|
208
225
|
});
|
|
209
226
|
try {
|
|
210
227
|
await fetch("/api/update_environment_variables", {
|
|
@@ -218,7 +235,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
218
235
|
logVerbose("Doing a snapshot import");
|
|
219
236
|
const importId = await uploadForImport(ctx, {
|
|
220
237
|
deploymentUrl,
|
|
221
|
-
adminKey
|
|
238
|
+
adminKey,
|
|
222
239
|
filePath: exportPath,
|
|
223
240
|
importArgs: { format: "zip", mode: "replace", tableName: void 0 },
|
|
224
241
|
onImportFailed: async (e) => {
|
|
@@ -229,7 +246,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
229
246
|
let status = await waitForStableImportState(ctx, {
|
|
230
247
|
importId,
|
|
231
248
|
deploymentUrl,
|
|
232
|
-
adminKey
|
|
249
|
+
adminKey,
|
|
233
250
|
onProgress: () => {
|
|
234
251
|
return 0;
|
|
235
252
|
}
|
|
@@ -245,7 +262,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
245
262
|
}
|
|
246
263
|
await confirmImport(ctx, {
|
|
247
264
|
importId,
|
|
248
|
-
adminKey
|
|
265
|
+
adminKey,
|
|
249
266
|
deploymentUrl,
|
|
250
267
|
onError: async (e) => {
|
|
251
268
|
logFailure(`Failed to confirm import: ${e}`);
|
|
@@ -255,7 +272,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
255
272
|
status = await waitForStableImportState(ctx, {
|
|
256
273
|
importId,
|
|
257
274
|
deploymentUrl,
|
|
258
|
-
adminKey
|
|
275
|
+
adminKey,
|
|
259
276
|
onProgress: () => {
|
|
260
277
|
return 0;
|
|
261
278
|
}
|
|
@@ -274,7 +291,7 @@ async function handleUpgrade(ctx, args) {
|
|
|
274
291
|
saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {
|
|
275
292
|
ports: args.ports,
|
|
276
293
|
backendVersion: args.newVersion,
|
|
277
|
-
adminKey
|
|
294
|
+
adminKey,
|
|
278
295
|
instanceSecret: args.instanceSecret,
|
|
279
296
|
cloudProjectId: args.cloudProjectId
|
|
280
297
|
});
|
|
@@ -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,OAAO,UAAU;AAEjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B;AAAA,EAGE;AAAA,EACA;AAAA,
|
|
6
|
-
"names": []
|
|
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": ["cleanupHandle"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
import { logMessage } from "../../../bundler/log.js";
|
|
3
3
|
import { detect } from "detect-port";
|
|
4
|
-
import crypto from "crypto";
|
|
5
4
|
import { chalkStderr } from "chalk";
|
|
6
5
|
export async function choosePorts(ctx, {
|
|
7
6
|
count,
|
|
@@ -54,9 +53,6 @@ export async function chooseLocalBackendPorts(ctx, options) {
|
|
|
54
53
|
});
|
|
55
54
|
return { cloudPort, sitePort };
|
|
56
55
|
}
|
|
57
|
-
export async function isOffline() {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
56
|
export function printLocalDeploymentWelcomeMessage() {
|
|
61
57
|
logMessage(
|
|
62
58
|
chalkStderr.cyan("You're trying out the beta local deployment feature!")
|
|
@@ -67,8 +63,5 @@ export function printLocalDeploymentWelcomeMessage() {
|
|
|
67
63
|
)
|
|
68
64
|
);
|
|
69
65
|
}
|
|
70
|
-
export function generateInstanceSecret() {
|
|
71
|
-
return crypto.randomBytes(32).toString("hex");
|
|
72
|
-
}
|
|
73
66
|
export const LOCAL_BACKEND_INSTANCE_SECRET = "4361726e697461732c206c69746572616c6c79206d65616e696e6720226c6974";
|
|
74
67
|
//# 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": ";AACA,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AACvB,
|
|
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": ";AACA,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AACvB,SAAS,mBAAmB;AAE5B,sBAAsB,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,MAAM,OAAO,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,MAAM,OAAO,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,MAAM,OAAO,SAAS;AACnC,YAAM,KAAK,IAAI;AAAA,IACjB;AAAA,EACF;AACA,SAAO;AACT;AAEA,sBAAsB,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,gBAAS,qCAAqC;AACnD;AAAA,IACE,YAAY,KAAK,sDAAsD;AAAA,EACzE;AACA;AAAA,IACE,YAAY;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;AAEO,aAAM,gCACX;",
|
|
6
6
|
"names": ["port"]
|
|
7
7
|
}
|
|
@@ -9,9 +9,9 @@ export const INLINE_QUERY_DESCRIPTION = [
|
|
|
9
9
|
"Use `--component` to target a mounted component.",
|
|
10
10
|
"",
|
|
11
11
|
"To format the query:",
|
|
12
|
-
'
|
|
13
|
-
'
|
|
14
|
-
'
|
|
12
|
+
'\u2022 Simple expressions are returned automatically, for example: `await ctx.db.query("messages").take(5)`.',
|
|
13
|
+
'\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;`.',
|
|
14
|
+
'\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); } })`.'
|
|
15
15
|
].join("\n");
|
|
16
16
|
export function inlineQueryToQuerySource(inlineQuery) {
|
|
17
17
|
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": ";AACA,SAAS,uBAAuB;AAEhC,MAAM,wBACJ;AAGK,aAAM,sCACX;AAEK,aAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI;AAiBJ,gBAAS,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,sBAAsB,qBACpB,KACA,MAMqC;AACrC,QAAM,kBAAkB,gBAAgB,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/esm/cli/run.js
CHANGED
|
@@ -29,11 +29,11 @@ export const run = new Command("run").summary(
|
|
|
29
29
|
[
|
|
30
30
|
"Run a function or evaluate an inline readonly query on your deployment.",
|
|
31
31
|
"",
|
|
32
|
-
'
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
32
|
+
'\u2022 Run a function with JSON arguments: `npx convex run messages:send \'{"body": "hello", "author": "me"}\'`',
|
|
33
|
+
"\u2022 Run a function on prod: `npx convex run messages:list --prod`",
|
|
34
|
+
"\u2022 Live-update a query's result: `npx convex run messages:list --watch`",
|
|
35
|
+
"\u2022 Push local code before running: `npx convex run messages:send '{}' --push`",
|
|
36
|
+
"\u2022 Evaluate an inline readonly query: `npx convex run --inline-query 'await ctx.db.query(\"messages\").take(5)'`",
|
|
37
37
|
"",
|
|
38
38
|
"Arguments are specified as a JSON object. By default, this runs on your dev deployment."
|
|
39
39
|
].join("\n")
|
package/dist/esm/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": []
|
|
7
7
|
}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -37,7 +37,6 @@ async function invokeMutation(func, argsStr, visibility) {
|
|
|
37
37
|
scheduler: setupMutationScheduler(),
|
|
38
38
|
meta: setupMutationMeta(visibility),
|
|
39
39
|
runQuery: (reference, args2, options) => runUdf("query", reference, args2, options?.transactionLimits),
|
|
40
|
-
runSnapshotQuery: (reference, args2, options) => runUdf("snapshotQuery", reference, args2, options?.transactionLimits),
|
|
41
40
|
runMutation: (reference, args2, options) => runUdf("mutation", reference, args2, options?.transactionLimits)
|
|
42
41
|
};
|
|
43
42
|
const result = await invokeFunction(func, mutationCtx, args);
|