@mittwald/cli 1.10.0 → 1.11.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/bin/run.js +4 -1
- package/dist/commands/app/create/node.d.ts +1 -3
- package/dist/commands/app/create/php-worker.d.ts +1 -3
- package/dist/commands/app/create/php.d.ts +1 -3
- package/dist/commands/app/create/python.d.ts +1 -3
- package/dist/commands/app/create/static.d.ts +1 -3
- package/dist/commands/app/dependency/update.js +2 -4
- package/dist/commands/app/install/contao.d.ts +1 -3
- package/dist/commands/app/install/joomla.d.ts +1 -3
- package/dist/commands/app/install/matomo.d.ts +1 -3
- package/dist/commands/app/install/nextcloud.d.ts +1 -3
- package/dist/commands/app/install/shopware5.d.ts +1 -3
- package/dist/commands/app/install/shopware6.d.ts +1 -3
- package/dist/commands/app/install/typo3.d.ts +1 -3
- package/dist/commands/app/install/wordpress.d.ts +1 -3
- package/dist/commands/app/ssh.d.ts +1 -0
- package/dist/commands/app/ssh.js +15 -1
- package/dist/commands/app/update.js +4 -8
- package/dist/commands/app/upgrade.js +9 -9
- package/dist/commands/backup/create.js +1 -2
- package/dist/commands/backup/download.js +4 -5
- package/dist/commands/container/run.d.ts +4 -2
- package/dist/commands/container/run.js +7 -6
- package/dist/commands/database/mysql/create.js +1 -2
- package/dist/commands/database/mysql/dump.js +1 -2
- package/dist/commands/database/mysql/import.js +1 -2
- package/dist/commands/ddev/init.js +2 -6
- package/dist/commands/extension/install.js +1 -3
- package/dist/commands/login/reset.js +1 -2
- package/dist/commands/mail/address/create.js +1 -4
- package/dist/commands/mail/deliverybox/create.js +1 -4
- package/dist/commands/project/create.js +4 -6
- package/dist/commands/registry/create.js +1 -2
- package/dist/commands/registry/update.js +1 -2
- package/dist/commands/user/api-token/create.js +1 -1
- package/dist/commands/user/ssh-key/create.js +3 -8
- package/dist/commands/user/ssh-key/import.js +2 -3
- package/dist/lib/basecommands/DeleteBaseCommand.js +4 -4
- package/dist/lib/ddev/init_assert.js +1 -6
- package/dist/lib/ddev/init_database.js +1 -7
- package/dist/lib/ddev/init_projecttype.js +2 -11
- package/dist/lib/intellij/config.d.ts +5 -0
- package/dist/lib/intellij/config.js +295 -0
- package/dist/lib/intellij/config.test.d.ts +1 -0
- package/dist/lib/intellij/config.test.js +262 -0
- package/dist/lib/intellij/config_xml_types.d.ts +72 -0
- package/dist/lib/intellij/config_xml_types.js +2 -0
- package/dist/lib/resources/app/Installer.d.ts +6 -2
- package/dist/lib/resources/app/Installer.js +13 -6
- package/dist/lib/resources/app/flags.js +9 -12
- package/dist/lib/resources/app/install.d.ts +2 -1
- package/dist/lib/resources/app/install.js +3 -1
- package/dist/lib/resources/app/versions.js +1 -4
- package/dist/lib/resources/app/wait.js +1 -3
- package/dist/lib/resources/mail/commons.js +1 -4
- package/dist/lib/resources/ssh/appinstall.d.ts +3 -1
- package/dist/lib/resources/ssh/appinstall.js +1 -0
- package/dist/rendering/process/components/ProcessStateIcon.js +1 -1
- package/dist/rendering/process/process.d.ts +16 -16
- package/dist/rendering/process/process_exec.d.ts +1 -2
- package/dist/rendering/process/process_fancy.d.ts +9 -9
- package/dist/rendering/process/process_flags.js +4 -0
- package/dist/rendering/process/process_quiet.d.ts +3 -4
- package/dist/rendering/process/process_simple.d.ts +26 -0
- package/dist/rendering/process/process_simple.js +143 -0
- package/dist/rendering/process/process_simple.test.d.ts +1 -0
- package/dist/rendering/process/process_simple.test.js +149 -0
- package/dist/rendering/react/components/AppInstallation/AppBackendAccessHints.d.ts +15 -0
- package/dist/rendering/react/components/AppInstallation/AppBackendAccessHints.js +13 -0
- package/dist/rendering/react/components/AppInstallation/AppDomainConnectionHints.d.ts +12 -0
- package/dist/rendering/react/components/AppInstallation/AppDomainConnectionHints.js +21 -0
- package/dist/rendering/react/components/AppInstallation/AppManagementCommands.d.ts +12 -0
- package/dist/rendering/react/components/AppInstallation/AppManagementCommands.js +17 -0
- package/dist/rendering/react/components/AppInstallation/AppUsageHints.d.ts +17 -0
- package/dist/rendering/react/components/AppInstallation/AppUsageHints.js +23 -0
- package/dist/rendering/react/components/Container/CommandHint.d.ts +14 -0
- package/dist/rendering/react/components/Container/CommandHint.js +13 -0
- package/dist/rendering/react/components/Container/ContainerManagementCommands.d.ts +22 -0
- package/dist/rendering/react/components/Container/ContainerManagementCommands.js +23 -0
- package/dist/rendering/react/components/Container/ContainerUsageHints.d.ts +12 -0
- package/dist/rendering/react/components/Container/ContainerUsageHints.js +35 -0
- package/dist/rendering/react/components/Container/DomainConnectionHints.d.ts +12 -0
- package/dist/rendering/react/components/Container/DomainConnectionHints.js +21 -0
- package/dist/rendering/react/components/Container/InternalConnectionHints.d.ts +12 -0
- package/dist/rendering/react/components/Container/InternalConnectionHints.js +12 -0
- package/dist/rendering/react/components/Container/NoPortsUsageHints.d.ts +12 -0
- package/dist/rendering/react/components/Container/NoPortsUsageHints.js +12 -0
- package/dist/rendering/react/components/Container/PortConnectionHints.d.ts +13 -0
- package/dist/rendering/react/components/Container/PortConnectionHints.js +11 -0
- package/dist/rendering/react/components/Container/PortForwardingHints.d.ts +12 -0
- package/dist/rendering/react/components/Container/PortForwardingHints.js +18 -0
- package/dist/rendering/react/components/Container/types.d.ts +4 -0
- package/dist/rendering/react/components/Container/types.js +1 -0
- package/dist/rendering/react/components/Error/ErrorBox.d.ts +1 -1
- package/dist/rendering/react/components/Error/ErrorBox.js +3 -4
- package/dist/rendering/react/components/Error/GenericError.js +1 -1
- package/dist/rendering/react/components/ErrorBoundary.d.ts +1 -1
- package/dist/rendering/react/components/Success.d.ts +0 -1
- package/dist/rendering/react/components/Success.js +4 -2
- package/dist/rendering/react/styles/useDefaultBoxStyles.d.ts +11 -0
- package/dist/rendering/react/styles/useDefaultBoxStyles.js +23 -0
- package/package.json +6 -5
package/bin/run.js
CHANGED
|
@@ -5,8 +5,6 @@ export declare const nodeInstaller: AppInstaller<"site-title" | "entrypoint">;
|
|
|
5
5
|
export default class InstallNode extends ExecRenderBaseCommand<typeof InstallNode, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("entrypoint" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -5,8 +5,6 @@ export declare const phpWorkerInstaller: AppInstaller<"site-title" | "entrypoint
|
|
|
5
5
|
export default class InstallPhpWorker extends ExecRenderBaseCommand<typeof InstallPhpWorker, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("entrypoint" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -5,8 +5,6 @@ export declare const phpInstaller: AppInstaller<"site-title" | "document-root">;
|
|
|
5
5
|
export default class InstallPhp extends ExecRenderBaseCommand<typeof InstallPhp, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("document-root" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -5,8 +5,6 @@ export declare const pythonInstaller: AppInstaller<"site-title" | "entrypoint">;
|
|
|
5
5
|
export default class InstallPython extends ExecRenderBaseCommand<typeof InstallPython, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("entrypoint" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -5,8 +5,6 @@ export declare const staticInstaller: AppInstaller<"site-title" | "document-root
|
|
|
5
5
|
export default class InstallStatic extends ExecRenderBaseCommand<typeof InstallStatic, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("document-root" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { ExecRenderBaseCommand } from "../../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
3
|
import { appInstallationArgs } from "../../../lib/resources/app/flags.js";
|
|
4
4
|
import { makeProcessRenderer, processFlags, } from "../../../rendering/process/process_flags.js";
|
|
@@ -6,8 +6,6 @@ import { Flags } from "@oclif/core";
|
|
|
6
6
|
import { assertStatus } from "@mittwald/api-client-commons";
|
|
7
7
|
import { Success } from "../../../rendering/react/components/Success.js";
|
|
8
8
|
import { Range, SemVer } from "semver";
|
|
9
|
-
import { Value } from "../../../rendering/react/components/Value.js";
|
|
10
|
-
import { Text } from "ink";
|
|
11
9
|
export default class Update extends ExecRenderBaseCommand {
|
|
12
10
|
static summary = "Update the dependencies of an app";
|
|
13
11
|
static args = { ...appInstallationArgs };
|
|
@@ -69,7 +67,7 @@ export default class Update extends ExecRenderBaseCommand {
|
|
|
69
67
|
}
|
|
70
68
|
return versions[versions.length - 1];
|
|
71
69
|
});
|
|
72
|
-
process.addInfo(
|
|
70
|
+
process.addInfo(`selected ${systemSoftware.name} version: ${version.externalVersion}`);
|
|
73
71
|
versionsToUpdate[systemSoftware.id] = {
|
|
74
72
|
systemSoftwareVersion: version.id,
|
|
75
73
|
updatePolicy,
|
|
@@ -4,8 +4,6 @@ import { AppInstallationResult } from "../../../lib/resources/app/Installer.js";
|
|
|
4
4
|
export default class InstallContao extends ExecRenderBaseCommand<typeof InstallContao, AppInstallationResult> {
|
|
5
5
|
static description: string;
|
|
6
6
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
7
|
-
protected exec(): Promise<
|
|
8
|
-
appInstallationId: string;
|
|
9
|
-
}>;
|
|
7
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
10
8
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
9
|
}
|
|
@@ -4,8 +4,6 @@ import { AppInstallationResult } from "../../../lib/resources/app/Installer.js";
|
|
|
4
4
|
export default class InstallJoomla extends ExecRenderBaseCommand<typeof InstallJoomla, AppInstallationResult> {
|
|
5
5
|
static description: string;
|
|
6
6
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
7
|
-
protected exec(): Promise<
|
|
8
|
-
appInstallationId: string;
|
|
9
|
-
}>;
|
|
7
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
10
8
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
9
|
}
|
|
@@ -4,8 +4,6 @@ import { AppInstallationResult } from "../../../lib/resources/app/Installer.js";
|
|
|
4
4
|
export default class InstallMatomo extends ExecRenderBaseCommand<typeof InstallMatomo, AppInstallationResult> {
|
|
5
5
|
static description: string;
|
|
6
6
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
7
|
-
protected exec(): Promise<
|
|
8
|
-
appInstallationId: string;
|
|
9
|
-
}>;
|
|
7
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
10
8
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
9
|
}
|
|
@@ -4,8 +4,6 @@ import { AppInstallationResult } from "../../../lib/resources/app/Installer.js";
|
|
|
4
4
|
export default class InstallNextcloud extends ExecRenderBaseCommand<typeof InstallNextcloud, AppInstallationResult> {
|
|
5
5
|
static description: string;
|
|
6
6
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
7
|
-
protected exec(): Promise<
|
|
8
|
-
appInstallationId: string;
|
|
9
|
-
}>;
|
|
7
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
10
8
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
9
|
}
|
|
@@ -4,8 +4,6 @@ import { AppInstallationResult } from "../../../lib/resources/app/Installer.js";
|
|
|
4
4
|
export default class InstallShopware5 extends ExecRenderBaseCommand<typeof InstallShopware5, AppInstallationResult> {
|
|
5
5
|
static description: string;
|
|
6
6
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | "shop-email" | "shop-lang" | "shop-currency" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
7
|
-
protected exec(): Promise<
|
|
8
|
-
appInstallationId: string;
|
|
9
|
-
}>;
|
|
7
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
10
8
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
9
|
}
|
|
@@ -5,8 +5,6 @@ export declare const shopware6Installer: AppInstaller<"version" | "host" | "admi
|
|
|
5
5
|
export default class InstallShopware6 extends ExecRenderBaseCommand<typeof InstallShopware6, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | "shop-email" | "shop-lang" | "shop-currency" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -5,8 +5,6 @@ export declare const typo3Installer: AppInstaller<"version" | "host" | "admin-us
|
|
|
5
5
|
export default class InstallTYPO3 extends ExecRenderBaseCommand<typeof InstallTYPO3, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "install-mode" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -5,8 +5,6 @@ export declare const wordpressInstaller: AppInstaller<"version" | "host" | "admi
|
|
|
5
5
|
export default class InstallWordPress extends ExecRenderBaseCommand<typeof InstallWordPress, AppInstallationResult> {
|
|
6
6
|
static description: string;
|
|
7
7
|
static flags: import("@oclif/core/interfaces").FlagInput<import("../../../lib/resources/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | ("wait" | "wait-timeout" | "site-title"))[]>>;
|
|
8
|
-
protected exec(): Promise<
|
|
9
|
-
appInstallationId: string;
|
|
10
|
-
}>;
|
|
8
|
+
protected exec(): Promise<AppInstallationResult>;
|
|
11
9
|
protected render(result: AppInstallationResult): React.ReactNode;
|
|
12
10
|
}
|
|
@@ -9,6 +9,7 @@ export default class Ssh extends ExtendedBaseCommand<typeof Ssh> {
|
|
|
9
9
|
cd: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
10
|
info: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
11
|
test: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
"generate-intellij-config": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
13
|
"ssh-user": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
14
|
"ssh-identity-file": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
};
|
package/dist/commands/app/ssh.js
CHANGED
|
@@ -6,6 +6,7 @@ import { getSSHConnectionForAppInstallation } from "../../lib/resources/ssh/appi
|
|
|
6
6
|
import { sshConnectionFlags, } from "../../lib/resources/ssh/flags.js";
|
|
7
7
|
import { sshWrapperDocumentation } from "../../lib/resources/ssh/doc.js";
|
|
8
8
|
import { buildSSHClientFlags } from "../../lib/resources/ssh/connection.js";
|
|
9
|
+
import { generateIntellijConfigs } from "../../lib/intellij/config.js";
|
|
9
10
|
export default class Ssh extends ExtendedBaseCommand {
|
|
10
11
|
static summary = "Connect to an app via SSH";
|
|
11
12
|
static description = "Establishes an interactive SSH connection to an app installation.\n\n" +
|
|
@@ -24,11 +25,24 @@ export default class Ssh extends ExtendedBaseCommand {
|
|
|
24
25
|
test: Flags.boolean({
|
|
25
26
|
summary: "test connection and exit",
|
|
26
27
|
}),
|
|
28
|
+
"generate-intellij-config": Flags.boolean({
|
|
29
|
+
summary: "generate IntelliJ IDEA SSH and deployment configuration files",
|
|
30
|
+
}),
|
|
27
31
|
};
|
|
28
32
|
async run() {
|
|
29
33
|
const { flags } = await this.parse(Ssh);
|
|
30
34
|
const appInstallationId = await this.withAppInstallationId(Ssh);
|
|
31
|
-
const { host, user, directory } = await getSSHConnectionForAppInstallation(this.apiClient, appInstallationId, flags["ssh-user"]);
|
|
35
|
+
const { host, user, directory, appShortId } = await getSSHConnectionForAppInstallation(this.apiClient, appInstallationId, flags["ssh-user"]);
|
|
36
|
+
if (flags["generate-intellij-config"]) {
|
|
37
|
+
generateIntellijConfigs({
|
|
38
|
+
host,
|
|
39
|
+
user,
|
|
40
|
+
directory,
|
|
41
|
+
appShortId,
|
|
42
|
+
});
|
|
43
|
+
this.log("IntelliJ IDEA configuration files generated in .idea/ directory");
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
32
46
|
if (flags.info) {
|
|
33
47
|
this.log("hostname: %o", host);
|
|
34
48
|
this.log("username: %o", user);
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
3
|
import { appInstallationArgs, withAppInstallationId, } from "../../lib/resources/app/flags.js";
|
|
4
4
|
import { makeProcessRenderer, processFlags, } from "../../rendering/process/process_flags.js";
|
|
5
5
|
import { Success } from "../../rendering/react/components/Success.js";
|
|
6
|
-
import { Value } from "../../rendering/react/components/Value.js";
|
|
7
6
|
import { Flags } from "@oclif/core";
|
|
8
7
|
export class Update extends ExecRenderBaseCommand {
|
|
9
8
|
static summary = "Update properties of an app installation (use 'upgrade' to update the app version)";
|
|
@@ -56,7 +55,7 @@ function buildUpdateBodyFromFlags(flags) {
|
|
|
56
55
|
const updateBody = {};
|
|
57
56
|
const info = [];
|
|
58
57
|
if (flags.entrypoint) {
|
|
59
|
-
info.push(
|
|
58
|
+
info.push(`setting entrypoint to ${flags.entrypoint}`);
|
|
60
59
|
updateBody.userInputs = [
|
|
61
60
|
...(updateBody.userInputs || []),
|
|
62
61
|
{
|
|
@@ -66,15 +65,12 @@ function buildUpdateBodyFromFlags(flags) {
|
|
|
66
65
|
];
|
|
67
66
|
}
|
|
68
67
|
if (flags["document-root"]) {
|
|
69
|
-
info.push(
|
|
68
|
+
info.push(`setting document root to ${flags["document-root"]}`);
|
|
70
69
|
updateBody.customDocumentRoot = flags["document-root"];
|
|
71
70
|
}
|
|
72
71
|
if (flags.description !== undefined) {
|
|
73
|
-
info.push(
|
|
72
|
+
info.push(`setting description to ${flags.description}`);
|
|
74
73
|
updateBody.description = flags.description;
|
|
75
74
|
}
|
|
76
75
|
return [updateBody, info];
|
|
77
76
|
}
|
|
78
|
-
function UpdateFieldInfo({ name, value }) {
|
|
79
|
-
return (_jsxs(_Fragment, { children: ["setting ", name, " to ", _jsx(Value, { children: value })] }));
|
|
80
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsxs as _jsxs,
|
|
1
|
+
import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
3
|
import { appInstallationArgs, withAppInstallationId, } from "../../lib/resources/app/flags.js";
|
|
4
4
|
import { projectFlags } from "../../lib/resources/project/flags.js";
|
|
@@ -51,15 +51,15 @@ export class UpgradeApp extends ExecRenderBaseCommand {
|
|
|
51
51
|
ux.exit(1);
|
|
52
52
|
}
|
|
53
53
|
if (!this.flags.force) {
|
|
54
|
-
const confirmed = await process.addConfirmation(
|
|
54
|
+
const confirmed = await process.addConfirmation(`Confirm upgrading ${currentApp.name} ${currentAppVersion.externalVersion} (${currentAppInstallation.description}) to version ${targetAppVersion.externalVersion}`);
|
|
55
55
|
if (!confirmed) {
|
|
56
|
-
process.addInfo(
|
|
56
|
+
process.addInfo("Upgrade will not be triggered.");
|
|
57
57
|
process.complete(_jsx(_Fragment, {}));
|
|
58
58
|
ux.exit(1);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
else {
|
|
62
|
-
process.addInfo(
|
|
62
|
+
process.addInfo(`Commencing upgrade of ${currentApp.name} ${currentAppVersion.externalVersion} (${currentAppInstallation.description}) to Version ${targetAppVersion.externalVersion}.`);
|
|
63
63
|
}
|
|
64
64
|
const appUpgradePayload = {
|
|
65
65
|
appVersionId: targetAppVersion.id,
|
|
@@ -72,7 +72,7 @@ export class UpgradeApp extends ExecRenderBaseCommand {
|
|
|
72
72
|
});
|
|
73
73
|
if (missingDependencies.data.missingSystemSoftwareDependencies) {
|
|
74
74
|
appUpgradePayload.systemSoftware = {};
|
|
75
|
-
process.addStep(
|
|
75
|
+
process.addStep(`In order to upgrade your ${currentApp.name} to Version ${targetAppVersion.externalVersion} some dependencies need to be upgraded too.`);
|
|
76
76
|
for (const missingSystemSoftwareDependency of missingDependencies.data
|
|
77
77
|
.missingSystemSoftwareDependencies) {
|
|
78
78
|
const dependencyUpdateData = await updateMissingSystemSoftwareDependency(process, this.apiClient, missingSystemSoftwareDependency);
|
|
@@ -81,9 +81,9 @@ export class UpgradeApp extends ExecRenderBaseCommand {
|
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
if (!this.flags.force) {
|
|
84
|
-
const confirmed = await process.addConfirmation(
|
|
84
|
+
const confirmed = await process.addConfirmation("Do you want to continue?");
|
|
85
85
|
if (!confirmed) {
|
|
86
|
-
process.addInfo(
|
|
86
|
+
process.addInfo("Upgrade will not be triggered.");
|
|
87
87
|
process.complete(_jsx(_Fragment, {}));
|
|
88
88
|
ux.exit(1);
|
|
89
89
|
}
|
|
@@ -136,7 +136,7 @@ export class UpgradeApp extends ExecRenderBaseCommand {
|
|
|
136
136
|
if (semverMatch) {
|
|
137
137
|
return semverMatch;
|
|
138
138
|
}
|
|
139
|
-
process.addInfo(
|
|
139
|
+
process.addInfo("The given target upgrade version does not seem to be a valid upgrade candidate.");
|
|
140
140
|
}
|
|
141
141
|
return await forceTargetVersionSelection(process, this.apiClient, targetAppVersionCandidates, currentApp, currentAppVersion);
|
|
142
142
|
}
|
|
@@ -182,7 +182,7 @@ async function updateMissingSystemSoftwareDependency(process, apiClient, depende
|
|
|
182
182
|
" could not be determined");
|
|
183
183
|
}
|
|
184
184
|
else {
|
|
185
|
-
process.addInfo(
|
|
185
|
+
process.addInfo(`${dependencySoftware.data.name} will be upgraded to Version ${dependencyTargetVersion.externalVersion}.`);
|
|
186
186
|
return {
|
|
187
187
|
dependencySoftwareId: dependencySoftware.data.id,
|
|
188
188
|
dependencyTargetVersionId: dependencyTargetVersion.id,
|
|
@@ -6,7 +6,6 @@ import { Flags } from "@oclif/core";
|
|
|
6
6
|
import { assertStatus } from "@mittwald/api-client-commons";
|
|
7
7
|
import { Success } from "../../rendering/react/components/Success.js";
|
|
8
8
|
import { waitFlags, waitUntil } from "../../lib/wait.js";
|
|
9
|
-
import { Text } from "ink";
|
|
10
9
|
import { expireFlags } from "../../lib/flags/expireFlags.js";
|
|
11
10
|
export class Create extends ExecRenderBaseCommand {
|
|
12
11
|
static summary = "Create a new backup of a project";
|
|
@@ -37,7 +36,7 @@ export class Create extends ExecRenderBaseCommand {
|
|
|
37
36
|
return r.data;
|
|
38
37
|
});
|
|
39
38
|
if (this.flags.wait) {
|
|
40
|
-
const stepWaiting = p.addStep(
|
|
39
|
+
const stepWaiting = p.addStep("waiting for backup to be complete");
|
|
41
40
|
await waitUntil(async () => {
|
|
42
41
|
const backupResponse = await this.apiClient.backup.getProjectBackup({
|
|
43
42
|
projectBackupId: backup.id,
|
|
@@ -3,7 +3,6 @@ import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseComm
|
|
|
3
3
|
import { Flags } from "@oclif/core";
|
|
4
4
|
import { makeProcessRenderer, processFlags, } from "../../rendering/process/process_flags.js";
|
|
5
5
|
import crypto from "crypto";
|
|
6
|
-
import { Text } from "ink";
|
|
7
6
|
import { Value } from "../../rendering/react/components/Value.js";
|
|
8
7
|
import { assertStatus, } from "@mittwald/api-client-commons";
|
|
9
8
|
import { waitUntil } from "../../lib/wait.js";
|
|
@@ -58,11 +57,11 @@ export class Download extends ExecRenderBaseCommand {
|
|
|
58
57
|
const password = await p.runStep("generating password", async () => {
|
|
59
58
|
return crypto.randomBytes(32).toString("ascii").substring(0, 32);
|
|
60
59
|
});
|
|
61
|
-
p.addInfo(
|
|
60
|
+
p.addInfo(`generated password: ${password}`);
|
|
62
61
|
return password;
|
|
63
62
|
}
|
|
64
63
|
if (this.flags["prompt-password"]) {
|
|
65
|
-
return await p.addInput(
|
|
64
|
+
return await p.addInput("enter backup password", true);
|
|
66
65
|
}
|
|
67
66
|
return undefined;
|
|
68
67
|
}
|
|
@@ -79,7 +78,7 @@ export class Download extends ExecRenderBaseCommand {
|
|
|
79
78
|
return r.data;
|
|
80
79
|
});
|
|
81
80
|
if (backup.export && backup.export.phase !== "Expired") {
|
|
82
|
-
p.addInfo(
|
|
81
|
+
p.addInfo("backup download is already prepared");
|
|
83
82
|
}
|
|
84
83
|
else {
|
|
85
84
|
await p.runStep("preparing backup download", async () => {
|
|
@@ -115,7 +114,7 @@ export class Download extends ExecRenderBaseCommand {
|
|
|
115
114
|
const stat = fs.statSync(this.flags.output);
|
|
116
115
|
const range = `bytes=${stat.size}-`;
|
|
117
116
|
reqConfig.headers = { Range: range };
|
|
118
|
-
p.addInfo(
|
|
117
|
+
p.addInfo(`resuming download starting at ${stat.size} bytes`);
|
|
119
118
|
}
|
|
120
119
|
const downloadStep = p.addStep("downloading backup");
|
|
121
120
|
const resp = await axios(backupExport.downloadURL, reqConfig);
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
2
|
import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
|
+
import { MittwaldAPIV2 } from "@mittwald/api-client";
|
|
4
|
+
type ContainerServiceResponse = MittwaldAPIV2.Components.Schemas.ContainerServiceResponse;
|
|
3
5
|
type Result = {
|
|
4
|
-
|
|
6
|
+
service: ContainerServiceResponse;
|
|
5
7
|
};
|
|
6
8
|
export declare class Run extends ExecRenderBaseCommand<typeof Run, Result> {
|
|
7
9
|
static summary: string;
|
|
@@ -56,6 +58,6 @@ export declare class Run extends ExecRenderBaseCommand<typeof Run, Result> {
|
|
|
56
58
|
private buildServiceRequest;
|
|
57
59
|
private getImageAndMeta;
|
|
58
60
|
private getServiceName;
|
|
59
|
-
protected render({
|
|
61
|
+
protected render({ service }: Result): ReactNode;
|
|
60
62
|
}
|
|
61
63
|
export {};
|
|
@@ -8,6 +8,7 @@ import { assertStatus } from "@mittwald/api-client";
|
|
|
8
8
|
import { getImageMeta, getPortMappings, parseEnvironmentVariables, } from "../../lib/resources/container/containerconfig.js";
|
|
9
9
|
import { Success } from "../../rendering/react/components/Success.js";
|
|
10
10
|
import { Value } from "../../rendering/react/components/Value.js";
|
|
11
|
+
import ContainerUsageHints from "../../rendering/react/components/Container/ContainerUsageHints.js";
|
|
11
12
|
export class Run extends ExecRenderBaseCommand {
|
|
12
13
|
static summary = "Creates and starts a new container.";
|
|
13
14
|
static strict = false;
|
|
@@ -109,12 +110,11 @@ export class Run extends ExecRenderBaseCommand {
|
|
|
109
110
|
const serviceRequest = await p.runStep("preparing service request", this.buildServiceRequest(image, imageMeta, serviceName));
|
|
110
111
|
const stack = await p.runStep("creating container", this.addServiceToStack(stackId, serviceName, serviceRequest));
|
|
111
112
|
const service = stack.services?.find(matchServiceByName(serviceName));
|
|
112
|
-
|
|
113
|
-
if (!serviceId) {
|
|
113
|
+
if (!service) {
|
|
114
114
|
throw new Error("Service ID not found in the created stack.");
|
|
115
115
|
}
|
|
116
|
-
await p.complete(_jsxs(Success, { children: ["Container ", _jsx(Value, { children:
|
|
117
|
-
return {
|
|
116
|
+
await p.complete(_jsxs(Success, { children: ["Container ", _jsx(Value, { children: service.serviceName }), " was successfully created and started."] }));
|
|
117
|
+
return { service };
|
|
118
118
|
}
|
|
119
119
|
async addServiceToStack(stackId, serviceName, serviceRequest) {
|
|
120
120
|
const updateData = {
|
|
@@ -220,10 +220,11 @@ export class Run extends ExecRenderBaseCommand {
|
|
|
220
220
|
}
|
|
221
221
|
return dockerNames.getRandomName();
|
|
222
222
|
}
|
|
223
|
-
render({
|
|
223
|
+
render({ service }) {
|
|
224
224
|
if (this.flags.quiet) {
|
|
225
|
-
return
|
|
225
|
+
return service.id;
|
|
226
226
|
}
|
|
227
|
+
return _jsx(ContainerUsageHints, { service: service });
|
|
227
228
|
}
|
|
228
229
|
}
|
|
229
230
|
function matchServiceByName(name) {
|
|
@@ -3,7 +3,6 @@ import { ExecRenderBaseCommand } from "../../../lib/basecommands/ExecRenderBaseC
|
|
|
3
3
|
import { projectFlags } from "../../../lib/resources/project/flags.js";
|
|
4
4
|
import { makeProcessRenderer, processFlags, } from "../../../rendering/process/process_flags.js";
|
|
5
5
|
import { Flags } from "@oclif/core";
|
|
6
|
-
import { Text } from "ink";
|
|
7
6
|
import { assertStatus } from "@mittwald/api-client-commons";
|
|
8
7
|
import { Success } from "../../../rendering/react/components/Success.js";
|
|
9
8
|
import { Value } from "../../../rendering/react/components/Value.js";
|
|
@@ -95,7 +94,7 @@ export class Create extends ExecRenderBaseCommand {
|
|
|
95
94
|
if (this.flags["user-password"]) {
|
|
96
95
|
return this.flags["user-password"];
|
|
97
96
|
}
|
|
98
|
-
return await p.addInput(
|
|
97
|
+
return await p.addInput("enter password for default user", true);
|
|
99
98
|
}
|
|
100
99
|
render({ databaseId }) {
|
|
101
100
|
if (this.flags.quiet) {
|
|
@@ -2,7 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { ExecRenderBaseCommand } from "../../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
3
|
import { Flags } from "@oclif/core";
|
|
4
4
|
import { makeProcessRenderer, processFlags, } from "../../../rendering/process/process_flags.js";
|
|
5
|
-
import { Text } from "ink";
|
|
6
5
|
import { Value } from "../../../rendering/react/components/Value.js";
|
|
7
6
|
import * as fs from "fs";
|
|
8
7
|
import { Success } from "../../../rendering/react/components/Success.js";
|
|
@@ -48,7 +47,7 @@ export class Dump extends ExecRenderBaseCommand {
|
|
|
48
47
|
shell: `set -e -o pipefail > /dev/null ; mysqldump ${escapedArgs} | gzip`,
|
|
49
48
|
};
|
|
50
49
|
}
|
|
51
|
-
await p.runStep(
|
|
50
|
+
await p.runStep(`starting mysqldump via SSH on project ${project.shortId}`, () => executeViaSSH(this.apiClient, this.flags, { projectId: connectionDetails.project.id }, cmd, { input: null, output: this.getOutputStream() }));
|
|
52
51
|
return connectionDetails.database;
|
|
53
52
|
});
|
|
54
53
|
await p.complete(_jsx(DumpSuccess, { database: databaseName, output: this.flags.output }));
|
|
@@ -2,7 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { ExecRenderBaseCommand } from "../../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
3
|
import { Flags } from "@oclif/core";
|
|
4
4
|
import { makeProcessRenderer, processFlags, } from "../../../rendering/process/process_flags.js";
|
|
5
|
-
import { Text } from "ink";
|
|
6
5
|
import { Value } from "../../../rendering/react/components/Value.js";
|
|
7
6
|
import * as fs from "fs";
|
|
8
7
|
import { Success } from "../../../rendering/react/components/Success.js";
|
|
@@ -48,7 +47,7 @@ export class Import extends ExecRenderBaseCommand {
|
|
|
48
47
|
shell: `set -e -o pipefail > /dev/null ; gunzip | mysql ${escapedArgs}`,
|
|
49
48
|
};
|
|
50
49
|
}
|
|
51
|
-
await p.runStep(
|
|
50
|
+
await p.runStep(`starting mysql via SSH on project ${project.shortId}`, () => executeViaSSH(this.apiClient, this.flags, { projectId: connectionDetails.project.id }, cmd, { input: this.getInputStream(), output: null }));
|
|
52
51
|
return connectionDetails.database;
|
|
53
52
|
});
|
|
54
53
|
await p.complete(_jsx(ImportSuccess, { database: databaseName, input: this.flags.input }));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
3
|
import { appInstallationArgs } from "../../lib/resources/app/flags.js";
|
|
4
4
|
import { makeProcessRenderer, processFlags, } from "../../rendering/process/process_flags.js";
|
|
@@ -11,7 +11,6 @@ import { DDEVInitSuccess } from "../../rendering/react/components/DDEV/DDEVInitS
|
|
|
11
11
|
import { ddevConfigToFlags } from "../../lib/ddev/config.js";
|
|
12
12
|
import { renderDDEVConfig } from "../../lib/ddev/config_render.js";
|
|
13
13
|
import { loadDDEVConfig } from "../../lib/ddev/config_loader.js";
|
|
14
|
-
import { Value } from "../../rendering/react/components/Value.js";
|
|
15
14
|
import { ddevFlags } from "../../lib/ddev/flags.js";
|
|
16
15
|
import { compareSemVer } from "semver-parser";
|
|
17
16
|
import { assertStatus } from "@mittwald/api-client";
|
|
@@ -114,7 +113,7 @@ export class Init extends ExecRenderBaseCommand {
|
|
|
114
113
|
}
|
|
115
114
|
const existing = await loadDDEVConfig();
|
|
116
115
|
if (existing?.name) {
|
|
117
|
-
r.addInfo(
|
|
116
|
+
r.addInfo(`using existing project name: ${existing.name}`);
|
|
118
117
|
return existing.name;
|
|
119
118
|
}
|
|
120
119
|
return await r.addInput("Enter the project name", false);
|
|
@@ -174,6 +173,3 @@ async function writeContentsToFile(filename, data) {
|
|
|
174
173
|
await mkdir(dirname, { recursive: true });
|
|
175
174
|
await writeFile(filename, data);
|
|
176
175
|
}
|
|
177
|
-
function InfoUsingExistingName({ name }) {
|
|
178
|
-
return (_jsxs(_Fragment, { children: ["using existing project name: ", _jsx(Value, { children: name })] }));
|
|
179
|
-
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
1
|
import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js";
|
|
3
2
|
import { makeProcessRenderer, processFlags, } from "../../rendering/process/process_flags.js";
|
|
4
3
|
import { Args, Flags } from "@oclif/core";
|
|
5
4
|
import { assertStatus } from "@mittwald/api-client";
|
|
6
|
-
import { Text } from "ink";
|
|
7
5
|
import Context, { contextIDNormalizers } from "../../lib/context/Context.js";
|
|
8
6
|
export default class Install extends ExecRenderBaseCommand {
|
|
9
7
|
static description = "Install an extension in a project or organization";
|
|
@@ -49,7 +47,7 @@ export default class Install extends ExecRenderBaseCommand {
|
|
|
49
47
|
projectId = await normalizer(this.apiClient, projectId, ctx);
|
|
50
48
|
}
|
|
51
49
|
if (!consent) {
|
|
52
|
-
p.addInfo(
|
|
50
|
+
p.addInfo(`This extension requires access to the following scopes: ${ext.scopes.join(", ")}. Please confirm your consent, or run the command with the --consent flag.`);
|
|
53
51
|
const consentedInteractively = await p.addConfirmation("Consent to requested scopes?");
|
|
54
52
|
if (!consentedInteractively) {
|
|
55
53
|
throw new Error("Consent was not given; skipping extension installation");
|
|
@@ -4,7 +4,6 @@ import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseComm
|
|
|
4
4
|
import { Box, Text } from "ink";
|
|
5
5
|
import { Note } from "../../rendering/react/components/Note.js";
|
|
6
6
|
import { FancyProcessRenderer } from "../../rendering/process/process_fancy.js";
|
|
7
|
-
import { Filename } from "../../rendering/react/components/Filename.js";
|
|
8
7
|
import { getTokenFilename } from "../../lib/auth/token.js";
|
|
9
8
|
import { isNotFound } from "../../lib/util/fs/isNotFound.js";
|
|
10
9
|
export default class Reset extends ExecRenderBaseCommand {
|
|
@@ -15,7 +14,7 @@ export default class Reset extends ExecRenderBaseCommand {
|
|
|
15
14
|
const tokenFilename = getTokenFilename(this.config);
|
|
16
15
|
process.start();
|
|
17
16
|
if (await this.tokenFileExists(tokenFilename)) {
|
|
18
|
-
const step = process.addStep(
|
|
17
|
+
const step = process.addStep(`Deleting token file ${tokenFilename}`);
|
|
19
18
|
await fs.rm(tokenFilename, { force: true });
|
|
20
19
|
step.complete();
|
|
21
20
|
await process.complete(_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Authentication state successfully reset" }), _jsx(Note, { children: "Please keep in mind that this does not invalidate the token on the server. Invalidate your API token using the mStudio web interface, or using the 'mw user api-token revoke' command." })] }));
|
|
@@ -91,10 +91,7 @@ export default class Create extends ExecRenderBaseCommand {
|
|
|
91
91
|
if (this.flags["random-password"]) {
|
|
92
92
|
return [await generateRandomPassword(process), true];
|
|
93
93
|
}
|
|
94
|
-
return [
|
|
95
|
-
await process.addInput(_jsx(Text, { children: "enter mailbox password" }), true),
|
|
96
|
-
false,
|
|
97
|
-
];
|
|
94
|
+
return [await process.addInput("enter mailbox password", true), false];
|
|
98
95
|
}
|
|
99
96
|
async createForwardAddress(projectId, process, flags) {
|
|
100
97
|
const response = await process.runStep("creating mail address", async () => {
|
|
@@ -50,10 +50,7 @@ export default class Create extends ExecRenderBaseCommand {
|
|
|
50
50
|
if (this.flags["random-password"]) {
|
|
51
51
|
return [await generateRandomPassword(process), true];
|
|
52
52
|
}
|
|
53
|
-
return [
|
|
54
|
-
await process.addInput(_jsx(Text, { children: "enter delivery box password" }), true),
|
|
55
|
-
false,
|
|
56
|
-
];
|
|
53
|
+
return [await process.addInput("enter delivery box password", true), false];
|
|
57
54
|
}
|
|
58
55
|
async createMailDeliveryBox(projectId, process, flags) {
|
|
59
56
|
const [password, passwordGenerated] = await this.getPassword(process);
|