@mittwald/cli 1.0.0-alpha.19 → 1.0.0-alpha.21
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/README.md +904 -83
- package/dist/esm/BaseCommand.js +1 -0
- package/dist/esm/commands/app/copy.d.ts +1 -0
- package/dist/esm/commands/app/copy.js +1 -0
- package/dist/esm/commands/app/dependency/list.js +1 -1
- package/dist/esm/commands/app/dependency/versions.js +1 -1
- package/dist/esm/commands/app/install/contao.d.ts +11 -0
- package/dist/esm/commands/app/install/contao.js +24 -0
- package/dist/esm/commands/app/install/joomla.d.ts +11 -0
- package/dist/esm/commands/app/install/joomla.js +23 -0
- package/dist/esm/commands/app/install/matomo.d.ts +11 -0
- package/dist/esm/commands/app/install/matomo.js +21 -0
- package/dist/esm/commands/app/install/node.d.ts +11 -0
- package/dist/esm/commands/app/install/node.js +13 -0
- package/dist/esm/commands/app/install/php.d.ts +11 -0
- package/dist/esm/commands/app/install/php.js +13 -0
- package/dist/esm/commands/app/install/shopware5.d.ts +11 -0
- package/dist/esm/commands/app/install/shopware5.js +26 -0
- package/dist/esm/commands/app/install/shopware6.d.ts +11 -0
- package/dist/esm/commands/app/install/shopware6.js +26 -0
- package/dist/esm/commands/app/install/typo3.d.ts +11 -0
- package/dist/esm/commands/app/install/typo3.js +22 -0
- package/dist/esm/commands/app/install/wordpress.d.ts +4 -16
- package/dist/esm/commands/app/install/wordpress.js +16 -107
- package/dist/esm/commands/app/list.d.ts +1 -1
- package/dist/esm/commands/app/list.js +1 -1
- package/dist/esm/commands/app/versions.js +1 -1
- package/dist/esm/commands/database/mysql/create.d.ts +1 -0
- package/dist/esm/commands/database/mysql/create.js +1 -1
- package/dist/esm/commands/database/mysql/list.d.ts +1 -1
- package/dist/esm/commands/database/mysql/list.js +1 -1
- package/dist/esm/commands/database/redis/create.d.ts +1 -0
- package/dist/esm/commands/database/redis/create.js +1 -1
- package/dist/esm/commands/database/redis/list.d.ts +1 -1
- package/dist/esm/commands/database/redis/list.js +1 -1
- package/dist/esm/commands/database/redis/versions.d.ts +2 -2
- package/dist/esm/commands/database/redis/versions.js +2 -2
- package/dist/esm/commands/domain/list.d.ts +1 -1
- package/dist/esm/commands/domain/list.js +1 -1
- package/dist/esm/commands/domain/ownership/list.d.ts +10 -3
- package/dist/esm/commands/domain/ownership/list.js +17 -3
- package/dist/esm/commands/domain/virtualhost/create.d.ts +1 -0
- package/dist/esm/commands/domain/virtualhost/create.js +1 -1
- package/dist/esm/commands/domain/virtualhost/list.d.ts +1 -0
- package/dist/esm/commands/domain/virtualhost/list.js +1 -1
- package/dist/esm/commands/mail/address/create.d.ts +1 -0
- package/dist/esm/commands/mail/address/create.js +1 -1
- package/dist/esm/commands/mail/address/list.d.ts +1 -1
- package/dist/esm/commands/mail/address/list.js +1 -1
- package/dist/esm/commands/org/delete.d.ts +1 -1
- package/dist/esm/commands/org/delete.js +1 -1
- package/dist/esm/commands/org/get.d.ts +1 -1
- package/dist/esm/commands/org/get.js +1 -1
- package/dist/esm/commands/org/invite/list.d.ts +1 -1
- package/dist/esm/commands/org/invite/list.js +1 -1
- package/dist/esm/commands/org/invite.d.ts +2 -2
- package/dist/esm/commands/org/invite.js +4 -17
- package/dist/esm/commands/org/membership/list.d.ts +1 -1
- package/dist/esm/commands/org/membership/list.js +1 -1
- package/dist/esm/commands/project/backup/create.d.ts +19 -0
- package/dist/esm/commands/project/backup/create.js +59 -0
- package/dist/esm/commands/project/backup/delete.d.ts +13 -0
- package/dist/esm/commands/project/backup/delete.js +21 -0
- package/dist/esm/commands/project/backup/download.d.ts +27 -0
- package/dist/esm/commands/project/backup/download.js +177 -0
- package/dist/esm/commands/project/backup/get.d.ts +11 -2
- package/dist/esm/commands/project/backup/get.js +26 -5
- package/dist/esm/commands/project/backup/list.d.ts +10 -10
- package/dist/esm/commands/project/backup/list.js +1 -1
- package/dist/esm/commands/project/backupschedule/list.d.ts +13 -7
- package/dist/esm/commands/project/backupschedule/list.js +15 -7
- package/dist/esm/commands/project/create.d.ts +3 -1
- package/dist/esm/commands/project/create.js +5 -8
- package/dist/esm/commands/project/cronjob/list.d.ts +1 -1
- package/dist/esm/commands/project/cronjob/list.js +1 -1
- package/dist/esm/commands/project/delete.d.ts +1 -1
- package/dist/esm/commands/project/delete.js +1 -1
- package/dist/esm/commands/project/filesystem/usage.d.ts +1 -1
- package/dist/esm/commands/project/filesystem/usage.js +1 -1
- package/dist/esm/commands/project/get.d.ts +1 -1
- package/dist/esm/commands/project/get.js +2 -2
- package/dist/esm/commands/project/list.d.ts +10 -2
- package/dist/esm/commands/project/list.js +10 -2
- package/dist/esm/commands/project/ssh.d.ts +1 -1
- package/dist/esm/commands/project/ssh.js +1 -1
- package/dist/esm/commands/project/update.d.ts +1 -1
- package/dist/esm/commands/project/update.js +1 -1
- package/dist/esm/lib/app/Installer.d.ts +21 -0
- package/dist/esm/lib/app/Installer.js +49 -0
- package/dist/esm/lib/app/flags.d.ts +25 -0
- package/dist/esm/lib/app/flags.js +190 -1
- package/dist/esm/lib/app/install.d.ts +4 -0
- package/dist/esm/lib/app/install.js +20 -0
- package/dist/esm/lib/app/{appVersionHelpers.d.ts → versions.d.ts} +3 -0
- package/dist/esm/lib/app/{appVersionHelpers.js → versions.js} +18 -0
- package/dist/esm/lib/app/wait.d.ts +3 -0
- package/dist/esm/lib/app/wait.js +19 -0
- package/dist/esm/lib/context_flags.d.ts +20 -9
- package/dist/esm/lib/context_flags.js +25 -2
- package/dist/esm/lib/database/mysql/flags.js +1 -1
- package/dist/esm/lib/database/redis/flags.js +1 -1
- package/dist/esm/lib/expires.d.ts +11 -0
- package/dist/esm/lib/expires.js +31 -0
- package/dist/esm/lib/handleError.js +3 -20
- package/dist/esm/lib/org/flags.d.ts +11 -3
- package/dist/esm/lib/password.d.ts +2 -0
- package/dist/esm/lib/password.js +20 -0
- package/dist/esm/lib/project/flags.d.ts +11 -3
- package/dist/esm/lib/project/hooks.d.ts +3 -0
- package/dist/esm/lib/project/hooks.js +11 -0
- package/dist/esm/lib/project/ingress.d.ts +2 -0
- package/dist/esm/lib/project/ingress.js +16 -0
- package/dist/esm/lib/project/shortId.d.ts +2 -0
- package/dist/esm/lib/project/shortId.js +11 -0
- package/dist/esm/lib/projectbackup/hooks.d.ts +5 -0
- package/dist/esm/lib/projectbackup/hooks.js +19 -0
- package/dist/esm/lib/server/flags.d.ts +11 -3
- package/dist/esm/lib/viewhelpers/size.d.ts +2 -1
- package/dist/esm/lib/viewhelpers/size.js +2 -2
- package/dist/esm/lib/wait.d.ts +4 -0
- package/dist/esm/lib/wait.js +13 -2
- package/dist/esm/rendering/process/components/ProcessStateSummary.js +3 -0
- package/dist/esm/rendering/process/process.d.ts +2 -0
- package/dist/esm/rendering/process/process.js +4 -0
- package/dist/esm/rendering/react/ExecRenderBaseCommand.js +11 -1
- package/dist/esm/rendering/react/components/ErrorBox.js +27 -1
- package/dist/esm/rendering/react/components/ProjectBackup/ProjectBackupDetails.d.ts +6 -0
- package/dist/esm/rendering/react/components/ProjectBackup/ProjectBackupDetails.js +29 -0
- package/dist/esm/rendering/react/components/ProjectBackup/ProjectBackupStatus.d.ts +6 -0
- package/dist/esm/rendering/react/components/ProjectBackup/ProjectBackupStatus.js +8 -0
- package/package.json +37 -3
- package/dist/esm/commands/project/backupschedule/get.d.ts +0 -3
- package/dist/esm/commands/project/backupschedule/get.js +0 -6
- package/dist/esm/commands/project/list-react.d.ts +0 -11
- package/dist/esm/commands/project/list-react.js +0 -42
- package/dist/esm/generated/backup/getProjectBackup.d.ts +0 -16
- package/dist/esm/generated/backup/getProjectBackup.js +0 -25
- package/dist/esm/generated/backup/getProjectBackupSchedule.d.ts +0 -16
- package/dist/esm/generated/backup/getProjectBackupSchedule.js +0 -25
- package/dist/esm/generated/backup/listProjectBackupSchedules.d.ts +0 -13
- package/dist/esm/generated/backup/listProjectBackupSchedules.js +0 -24
- package/dist/esm/generated/backup/listProjectBackups.d.ts +0 -13
- package/dist/esm/generated/backup/listProjectBackups.js +0 -24
- package/dist/esm/generated/domain/listDomainOwnerships.d.ts +0 -13
- package/dist/esm/generated/domain/listDomainOwnerships.js +0 -21
- /package/dist/esm/lib/app/{appHelpers.d.ts → uuid.d.ts} +0 -0
- /package/dist/esm/lib/app/{appHelpers.js → uuid.js} +0 -0
package/dist/esm/BaseCommand.js
CHANGED
|
@@ -13,6 +13,7 @@ export class BaseCommand extends Command {
|
|
|
13
13
|
throw new Error(`Could not get token from either config file (${this.getTokenFilename()}) or environment`);
|
|
14
14
|
}
|
|
15
15
|
this.apiClient = MittwaldAPIV2Client.newWithToken(token);
|
|
16
|
+
this.apiClient.axios.defaults.headers["User-Agent"] = `mittwald-cli/${this.config.version}`;
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
getTokenFilename() {
|
|
@@ -4,6 +4,7 @@ type Result = {
|
|
|
4
4
|
appInstallationId: string;
|
|
5
5
|
};
|
|
6
6
|
export declare class Copy extends ExecRenderBaseCommand<typeof Copy, Result> {
|
|
7
|
+
static description: string;
|
|
7
8
|
static args: {
|
|
8
9
|
"installation-id": import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
9
10
|
};
|
|
@@ -6,6 +6,7 @@ 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
|
export class Copy extends ExecRenderBaseCommand {
|
|
9
|
+
static description = "Copy an app within a project";
|
|
9
10
|
static args = { ...appInstallationFlags };
|
|
10
11
|
static flags = {
|
|
11
12
|
...processFlags,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ListBaseCommand } from "../../../ListBaseCommand.js";
|
|
2
2
|
export class List extends ListBaseCommand {
|
|
3
|
-
static description = "
|
|
3
|
+
static description = "Get all available dependencies";
|
|
4
4
|
static args = {};
|
|
5
5
|
static flags = {
|
|
6
6
|
...ListBaseCommand.baseFlags,
|
|
@@ -3,7 +3,7 @@ import { ListBaseCommand } from "../../../ListBaseCommand.js";
|
|
|
3
3
|
import { SemVer } from "semver";
|
|
4
4
|
import { Args } from "@oclif/core";
|
|
5
5
|
export class Versions extends ListBaseCommand {
|
|
6
|
-
static description = "
|
|
6
|
+
static description = "Get all available versions of a particular dependency";
|
|
7
7
|
static args = {
|
|
8
8
|
systemsoftware: Args.string({
|
|
9
9
|
description: "name of the systemsoftware for which to list versions",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallContao extends ExecRenderBaseCommand<typeof InstallContao, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | "site-title" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("4916ce3e-cba4-4d2e-9798-a8764aa14cf3", "Contao", [
|
|
4
|
+
"version",
|
|
5
|
+
"host",
|
|
6
|
+
"admin-firstname",
|
|
7
|
+
"admin-user",
|
|
8
|
+
"admin-email",
|
|
9
|
+
"admin-pass",
|
|
10
|
+
"admin-firstname",
|
|
11
|
+
"admin-lastname",
|
|
12
|
+
"site-title",
|
|
13
|
+
"wait",
|
|
14
|
+
]);
|
|
15
|
+
export default class InstallContao extends ExecRenderBaseCommand {
|
|
16
|
+
static description = installer.description;
|
|
17
|
+
static flags = installer.flags;
|
|
18
|
+
async exec() {
|
|
19
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
20
|
+
}
|
|
21
|
+
render(result) {
|
|
22
|
+
return installer.render(result, this.flags);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallJoomla extends ExecRenderBaseCommand<typeof InstallJoomla, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | "site-title" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("8d404bff-6d75-4833-9eed-1b83b0552585", "Joomla!", [
|
|
4
|
+
"version",
|
|
5
|
+
"host",
|
|
6
|
+
"admin-user",
|
|
7
|
+
"admin-email",
|
|
8
|
+
"admin-pass",
|
|
9
|
+
"admin-firstname",
|
|
10
|
+
"admin-lastname",
|
|
11
|
+
"site-title",
|
|
12
|
+
"wait",
|
|
13
|
+
]);
|
|
14
|
+
export default class InstallJoomla extends ExecRenderBaseCommand {
|
|
15
|
+
static description = installer.description;
|
|
16
|
+
static flags = installer.flags;
|
|
17
|
+
async exec() {
|
|
18
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
19
|
+
}
|
|
20
|
+
render(result) {
|
|
21
|
+
return installer.render(result, this.flags);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallMatomo extends ExecRenderBaseCommand<typeof InstallMatomo, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "site-title" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("91fa05e7-34f7-42e8-a8d3-a9c42abd5f8c", "Matomo", [
|
|
4
|
+
"version",
|
|
5
|
+
"host",
|
|
6
|
+
"admin-user",
|
|
7
|
+
"admin-email",
|
|
8
|
+
"admin-pass",
|
|
9
|
+
"site-title",
|
|
10
|
+
"wait",
|
|
11
|
+
]);
|
|
12
|
+
export default class InstallMatomo extends ExecRenderBaseCommand {
|
|
13
|
+
static description = installer.description;
|
|
14
|
+
static flags = installer.flags;
|
|
15
|
+
async exec() {
|
|
16
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
17
|
+
}
|
|
18
|
+
render(result) {
|
|
19
|
+
return installer.render(result, this.flags);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallNode extends ExecRenderBaseCommand<typeof InstallNode, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "site-title" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("3e7f920b-a711-4d2f-9871-661e1b41a2f0", "Node.js Project", ["version", "site-title", "wait"]);
|
|
4
|
+
export default class InstallNode extends ExecRenderBaseCommand {
|
|
5
|
+
static description = installer.description;
|
|
6
|
+
static flags = installer.flags;
|
|
7
|
+
async exec() {
|
|
8
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
9
|
+
}
|
|
10
|
+
render(result) {
|
|
11
|
+
return installer.render(result, this.flags);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallPhp extends ExecRenderBaseCommand<typeof InstallPhp, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "site-title" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("34220303-cb87-4592-8a95-2eb20a97b2ac", "PHP Project", ["version", "site-title", "wait"]);
|
|
4
|
+
export default class InstallPhp extends ExecRenderBaseCommand {
|
|
5
|
+
static description = installer.description;
|
|
6
|
+
static flags = installer.flags;
|
|
7
|
+
async exec() {
|
|
8
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
9
|
+
}
|
|
10
|
+
render(result) {
|
|
11
|
+
return installer.render(result, this.flags);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallShopware5 extends ExecRenderBaseCommand<typeof InstallShopware5, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | "site-title" | "shop-email" | "shop-lang" | "shop-currency" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("a23acf9c-9298-4082-9e7d-25356f9976dc", "Shopware 5", [
|
|
4
|
+
"version",
|
|
5
|
+
"host",
|
|
6
|
+
"admin-user",
|
|
7
|
+
"admin-email",
|
|
8
|
+
"admin-pass",
|
|
9
|
+
"admin-firstname",
|
|
10
|
+
"admin-lastname",
|
|
11
|
+
"site-title",
|
|
12
|
+
"shop-email",
|
|
13
|
+
"shop-lang",
|
|
14
|
+
"shop-currency",
|
|
15
|
+
"wait",
|
|
16
|
+
]);
|
|
17
|
+
export default class InstallShopware5 extends ExecRenderBaseCommand {
|
|
18
|
+
static description = installer.description;
|
|
19
|
+
static flags = installer.flags;
|
|
20
|
+
async exec() {
|
|
21
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
22
|
+
}
|
|
23
|
+
render(result) {
|
|
24
|
+
return installer.render(result, this.flags);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallShopware6 extends ExecRenderBaseCommand<typeof InstallShopware6, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "admin-firstname" | "admin-lastname" | "site-title" | "shop-email" | "shop-lang" | "shop-currency" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("12d54d05-7e55-4cf3-90c4-093516e0eaf8", "Shopware 6", [
|
|
4
|
+
"version",
|
|
5
|
+
"host",
|
|
6
|
+
"admin-user",
|
|
7
|
+
"admin-email",
|
|
8
|
+
"admin-pass",
|
|
9
|
+
"admin-firstname",
|
|
10
|
+
"admin-lastname",
|
|
11
|
+
"site-title",
|
|
12
|
+
"shop-email",
|
|
13
|
+
"shop-lang",
|
|
14
|
+
"shop-currency",
|
|
15
|
+
"wait",
|
|
16
|
+
]);
|
|
17
|
+
export default class InstallShopware6 extends ExecRenderBaseCommand {
|
|
18
|
+
static description = installer.description;
|
|
19
|
+
static flags = installer.flags;
|
|
20
|
+
async exec() {
|
|
21
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
22
|
+
}
|
|
23
|
+
render(result) {
|
|
24
|
+
return installer.render(result, this.flags);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallTYPO3 extends ExecRenderBaseCommand<typeof InstallTYPO3, AppInstallationResult> {
|
|
5
|
+
static description: string;
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "site-title" | "install-mode" | "wait")[]>>;
|
|
7
|
+
protected exec(): Promise<{
|
|
8
|
+
appInstallationId: string;
|
|
9
|
+
}>;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
11
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("352971cc-b96a-4a26-8651-b08d7c8a7357", "TYPO3", [
|
|
4
|
+
"version",
|
|
5
|
+
"host",
|
|
6
|
+
"admin-user",
|
|
7
|
+
"admin-email",
|
|
8
|
+
"admin-pass",
|
|
9
|
+
"site-title",
|
|
10
|
+
"install-mode",
|
|
11
|
+
"wait",
|
|
12
|
+
]);
|
|
13
|
+
export default class InstallTYPO3 extends ExecRenderBaseCommand {
|
|
14
|
+
static description = installer.description;
|
|
15
|
+
static flags = installer.flags;
|
|
16
|
+
async exec() {
|
|
17
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
18
|
+
}
|
|
19
|
+
render(result) {
|
|
20
|
+
return installer.render(result, this.flags);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
2
2
|
import React from "react";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}> {
|
|
3
|
+
import { AppInstallationResult } from "../../../lib/app/Installer.js";
|
|
4
|
+
export default class InstallWordPress extends ExecRenderBaseCommand<typeof InstallWordPress, AppInstallationResult> {
|
|
6
5
|
static description: string;
|
|
7
|
-
static flags:
|
|
8
|
-
version: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
-
host: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
-
"admin-user": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
-
"admin-email": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
-
"admin-pass": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
-
"site-title": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
|
-
wait: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
15
|
-
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
16
|
-
};
|
|
6
|
+
static flags: import("@oclif/core/lib/interfaces/parser.js").FlagInput<import("../../../lib/app/flags.js").RelevantFlags<readonly ("version" | "host" | "admin-user" | "admin-email" | "admin-pass" | "site-title" | "wait")[]>>;
|
|
17
7
|
protected exec(): Promise<{
|
|
18
8
|
appInstallationId: string;
|
|
19
9
|
}>;
|
|
20
|
-
protected render(
|
|
21
|
-
appInstallationId: string;
|
|
22
|
-
}): React.ReactNode;
|
|
10
|
+
protected render(result: AppInstallationResult): React.ReactNode;
|
|
23
11
|
}
|
|
@@ -1,112 +1,21 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Flags } from "@oclif/core";
|
|
3
|
-
import { getAppUuidFromAppName } from "../../../lib/app/appHelpers.js";
|
|
4
|
-
import { getAppVersionUuidFromAppVersion, getLatestAvailableAppVersionForApp, } from "../../../lib/app/appVersionHelpers.js";
|
|
5
|
-
import { assertStatus } from "@mittwald/api-client-commons";
|
|
6
|
-
import { projectFlags, withProjectId } from "../../../lib/project/flags.js";
|
|
7
1
|
import { ExecRenderBaseCommand } from "../../../rendering/react/ExecRenderBaseCommand.js";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
default: "latest",
|
|
22
|
-
}),
|
|
23
|
-
host: Flags.string({
|
|
24
|
-
required: true,
|
|
25
|
-
description: "Host under which the App will be available (Needs to be created separately).",
|
|
26
|
-
}),
|
|
27
|
-
"admin-user": Flags.string({
|
|
28
|
-
required: true,
|
|
29
|
-
description: "First Admin User for the app.",
|
|
30
|
-
}),
|
|
31
|
-
"admin-email": Flags.string({
|
|
32
|
-
required: true,
|
|
33
|
-
description: "First Admin Users E-Mail.",
|
|
34
|
-
}),
|
|
35
|
-
"admin-pass": Flags.string({
|
|
36
|
-
required: true,
|
|
37
|
-
description: "First Admin Users Password.",
|
|
38
|
-
}),
|
|
39
|
-
"site-title": Flags.string({
|
|
40
|
-
required: true,
|
|
41
|
-
description: "Site Title of the created appInstallation.",
|
|
42
|
-
}),
|
|
43
|
-
wait: Flags.boolean({
|
|
44
|
-
char: "w",
|
|
45
|
-
description: "Wait for the App to be ready.",
|
|
46
|
-
}),
|
|
47
|
-
};
|
|
2
|
+
import { AppInstaller, } from "../../../lib/app/Installer.js";
|
|
3
|
+
const installer = new AppInstaller("da3aa3ae-4b6b-4398-a4a8-ee8def827876", "WordPress", [
|
|
4
|
+
"version",
|
|
5
|
+
"host",
|
|
6
|
+
"admin-user",
|
|
7
|
+
"admin-email",
|
|
8
|
+
"admin-pass",
|
|
9
|
+
"site-title",
|
|
10
|
+
"wait",
|
|
11
|
+
]);
|
|
12
|
+
export default class InstallWordPress extends ExecRenderBaseCommand {
|
|
13
|
+
static description = installer.description;
|
|
14
|
+
static flags = installer.flags;
|
|
48
15
|
async exec() {
|
|
49
|
-
|
|
50
|
-
const { flags, args } = await this.parse(AppCreateWordpress);
|
|
51
|
-
const app = "WordPress";
|
|
52
|
-
const appUuid = await getAppUuidFromAppName(this.apiClient, app);
|
|
53
|
-
const projectId = await withProjectId(this.apiClient, flags, args, this.config);
|
|
54
|
-
const appVersion = await process.runStep("determining app version", async () => {
|
|
55
|
-
let v;
|
|
56
|
-
if (flags.version && flags.version !== "latest") {
|
|
57
|
-
v = await getAppVersionUuidFromAppVersion(this.apiClient, appUuid, flags.version);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
v = await getLatestAvailableAppVersionForApp(this.apiClient, appUuid);
|
|
61
|
-
}
|
|
62
|
-
if (!v) {
|
|
63
|
-
throw new Error("App Version ${flags.version} not found.");
|
|
64
|
-
}
|
|
65
|
-
return v;
|
|
66
|
-
});
|
|
67
|
-
process.addInfo(_jsxs(Text, { children: ["installing version: ", _jsx(Value, { children: appVersion.externalVersion })] }));
|
|
68
|
-
const [appInstallationId, eventId] = await process.runStep("starting installation", async () => {
|
|
69
|
-
const result = await this.apiClient.app.requestAppinstallation({
|
|
70
|
-
pathParameters: { projectId },
|
|
71
|
-
data: {
|
|
72
|
-
appVersionId: appVersion.id,
|
|
73
|
-
description: flags["site-title"],
|
|
74
|
-
updatePolicy: "none",
|
|
75
|
-
userInputs: [
|
|
76
|
-
{ name: "host", value: flags.host },
|
|
77
|
-
{ name: "site_title", value: flags["site-title"] },
|
|
78
|
-
{ name: "admin_user", value: flags["admin-user"] },
|
|
79
|
-
{ name: "admin_email", value: flags["admin-email"] },
|
|
80
|
-
{ name: "admin_pass", value: flags["admin-pass"] },
|
|
81
|
-
],
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
assertStatus(result, 201);
|
|
85
|
-
return [result.data.id, result.headers["etag"]];
|
|
86
|
-
});
|
|
87
|
-
if (flags.wait) {
|
|
88
|
-
const stepWaiting = process.addStep(_jsx(Text, { children: "waiting for app installation to be ready" }));
|
|
89
|
-
await waitUntil(async () => {
|
|
90
|
-
const installationResponse = await this.apiClient.app.getAppinstallation({
|
|
91
|
-
pathParameters: { appInstallationId },
|
|
92
|
-
// TODO: Remove once @mittwald/api-client supports this
|
|
93
|
-
headers: { "if-event-reached": eventId }, // eslint-disable-line
|
|
94
|
-
});
|
|
95
|
-
if (installationResponse.status === 200 &&
|
|
96
|
-
installationResponse.data.appVersion.current ==
|
|
97
|
-
installationResponse.data.appVersion.desired) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
stepWaiting.complete();
|
|
102
|
-
}
|
|
103
|
-
process.complete(_jsx(Success, { children: "Your WordPress installation is now complete. Have fun! \uD83C\uDF89" }));
|
|
104
|
-
return { appInstallationId };
|
|
16
|
+
return installer.exec(this.apiClient, this.args, this.flags, this.config);
|
|
105
17
|
}
|
|
106
|
-
render(
|
|
107
|
-
|
|
108
|
-
this.log(appInstallationId);
|
|
109
|
-
}
|
|
110
|
-
return undefined;
|
|
18
|
+
render(result) {
|
|
19
|
+
return installer.render(result, this.flags);
|
|
111
20
|
}
|
|
112
21
|
}
|
|
@@ -15,7 +15,7 @@ type ExtendedResponseItem = ResponseItem & {
|
|
|
15
15
|
export default class List extends ListBaseCommand<typeof List, ResponseItem, Response> {
|
|
16
16
|
static description: string;
|
|
17
17
|
static flags: {
|
|
18
|
-
|
|
18
|
+
"project-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string>;
|
|
19
19
|
};
|
|
20
20
|
protected getData(): Promise<Response>;
|
|
21
21
|
protected mapData(data: SuccessfulResponse<Response, 200>["data"]): Promise<ExtendedResponseItem[]>;
|
|
@@ -9,7 +9,7 @@ export default class List extends ListBaseCommand {
|
|
|
9
9
|
...projectFlags,
|
|
10
10
|
};
|
|
11
11
|
async getData() {
|
|
12
|
-
const projectId = await withProjectId(this.apiClient, this.flags, this.args, this.config);
|
|
12
|
+
const projectId = await withProjectId(this.apiClient, List, this.flags, this.args, this.config);
|
|
13
13
|
const apps = await this.apiClient.app.listAppinstallations({
|
|
14
14
|
pathParameters: { projectId },
|
|
15
15
|
});
|
|
@@ -2,7 +2,7 @@ import { BaseCommand } from "../../BaseCommand.js";
|
|
|
2
2
|
import { Args } from "@oclif/core";
|
|
3
3
|
import { isUuid } from "../../Helpers.js";
|
|
4
4
|
import { assertStatus } from "@mittwald/api-client-commons";
|
|
5
|
-
import { getAppNameFromUuid, getAppUuidFromAppName, } from "../../lib/app/
|
|
5
|
+
import { getAppNameFromUuid, getAppUuidFromAppName, } from "../../lib/app/uuid.js";
|
|
6
6
|
export default class AppVersions extends BaseCommand {
|
|
7
7
|
static description = "List supported Apps and Versions";
|
|
8
8
|
static args = {
|
|
@@ -15,6 +15,7 @@ export declare class Create extends ExecRenderBaseCommand<typeof Create, Result>
|
|
|
15
15
|
"user-external": import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
16
16
|
"user-access-level": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
17
17
|
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
18
|
+
"project-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string>;
|
|
18
19
|
};
|
|
19
20
|
protected exec(): Promise<Result>;
|
|
20
21
|
private getPassword;
|
|
@@ -46,7 +46,7 @@ export class Create extends ExecRenderBaseCommand {
|
|
|
46
46
|
};
|
|
47
47
|
async exec() {
|
|
48
48
|
const p = makeProcessRenderer(this.flags, "Creating a new MySQL database");
|
|
49
|
-
const projectId = await withProjectId(this.apiClient, this.flags, this.args, this.config);
|
|
49
|
+
const projectId = await withProjectId(this.apiClient, Create, this.flags, this.args, this.config);
|
|
50
50
|
const { description, version, collation, "character-set": characterSet, "user-external": externalAccess, "user-access-level": accessLevel, } = this.flags;
|
|
51
51
|
const password = await this.getPassword(p);
|
|
52
52
|
const db = await p.runStep("creating MySQL database", async () => {
|
|
@@ -10,7 +10,7 @@ export declare class List extends ListBaseCommand<typeof List, ResponseItem, Res
|
|
|
10
10
|
static description: string;
|
|
11
11
|
static args: {};
|
|
12
12
|
static flags: {
|
|
13
|
-
|
|
13
|
+
"project-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string>;
|
|
14
14
|
};
|
|
15
15
|
getData(): Promise<Response>;
|
|
16
16
|
protected mapData(data: SuccessfulResponse<Response, 200>["data"]): MittwaldAPIV2.Components.Schemas.DatabaseMySqlDatabase[];
|
|
@@ -9,7 +9,7 @@ export class List extends ListBaseCommand {
|
|
|
9
9
|
...projectFlags,
|
|
10
10
|
};
|
|
11
11
|
async getData() {
|
|
12
|
-
const projectId = await withProjectId(this.apiClient, this.flags, this.args, this.config);
|
|
12
|
+
const projectId = await withProjectId(this.apiClient, List, this.flags, this.args, this.config);
|
|
13
13
|
return await this.apiClient.database.listMysqlDatabases({
|
|
14
14
|
pathParameters: { projectId },
|
|
15
15
|
});
|
|
@@ -12,6 +12,7 @@ export declare class Create extends ExecRenderBaseCommand<typeof Create, Result>
|
|
|
12
12
|
"max-memory": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
13
|
"max-memory-policy": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
14
14
|
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
15
|
+
"project-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string>;
|
|
15
16
|
};
|
|
16
17
|
protected exec(): Promise<Result>;
|
|
17
18
|
protected render({ databaseId }: Result): ReactNode;
|
|
@@ -47,7 +47,7 @@ export class Create extends ExecRenderBaseCommand {
|
|
|
47
47
|
};
|
|
48
48
|
async exec() {
|
|
49
49
|
const p = makeProcessRenderer(this.flags, "Creating a new Redis database");
|
|
50
|
-
const projectId = await withProjectId(this.apiClient, this.flags, this.args, this.config);
|
|
50
|
+
const projectId = await withProjectId(this.apiClient, Create, this.flags, this.args, this.config);
|
|
51
51
|
const { description, version, "max-memory": maxMemory, "max-memory-policy": maxMemoryPolicy, persistent, } = this.flags;
|
|
52
52
|
const db = await p.runStep("creating Redis database", async () => {
|
|
53
53
|
const r = await this.apiClient.database.createRedisDatabase({
|
|
@@ -10,7 +10,7 @@ export declare class List extends ListBaseCommand<typeof List, ResponseItem, Res
|
|
|
10
10
|
static description: string;
|
|
11
11
|
static args: {};
|
|
12
12
|
static flags: {
|
|
13
|
-
|
|
13
|
+
"project-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string>;
|
|
14
14
|
};
|
|
15
15
|
getData(): Promise<Response>;
|
|
16
16
|
protected mapData(data: SuccessfulResponse<Response, 200>["data"]): MittwaldAPIV2.Components.Schemas.DatabaseRedisDatabase[];
|
|
@@ -8,7 +8,7 @@ export class List extends ListBaseCommand {
|
|
|
8
8
|
...projectFlags,
|
|
9
9
|
};
|
|
10
10
|
async getData() {
|
|
11
|
-
const projectId = await withProjectId(this.apiClient, this.flags, this.args, this.config);
|
|
11
|
+
const projectId = await withProjectId(this.apiClient, List, this.flags, this.args, this.config);
|
|
12
12
|
return await this.apiClient.database.listRedisDatabases({
|
|
13
13
|
pathParameters: { projectId },
|
|
14
14
|
});
|
|
@@ -6,11 +6,11 @@ import { ListColumns } from "../../../Formatter.js";
|
|
|
6
6
|
type ResponseItem = Simplify<MittwaldAPIV2.Paths.V2RedisVersions.Get.Responses.$200.Content.ApplicationJson[number]>;
|
|
7
7
|
export type PathParams = MittwaldAPIV2.Paths.V2RedisVersions.Get.Parameters.Path;
|
|
8
8
|
export type Response = Awaited<ReturnType<MittwaldAPIV2Client["database"]["listRedisVersions"]>>;
|
|
9
|
-
export default class
|
|
9
|
+
export default class Versions extends ListBaseCommand<typeof Versions, ResponseItem, Response> {
|
|
10
10
|
static description: string;
|
|
11
11
|
static args: {};
|
|
12
12
|
static flags: {
|
|
13
|
-
|
|
13
|
+
"project-id": import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string>;
|
|
14
14
|
};
|
|
15
15
|
getData(): Promise<Response>;
|
|
16
16
|
protected mapData(data: SuccessfulResponse<Response, 200>["data"]): MittwaldAPIV2.Components.Schemas.DatabaseRedisVersion[];
|