@minecraft-docker/shared 1.6.0 → 1.6.2
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/dist/application/index.d.ts +3 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +5 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/ports/inbound/IBackupUseCase.d.ts +69 -0
- package/dist/application/ports/inbound/IBackupUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IBackupUseCase.js +2 -0
- package/dist/application/ports/inbound/IBackupUseCase.js.map +1 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.d.ts +32 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.js +2 -0
- package/dist/application/ports/inbound/ICreateServerUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts +26 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.js +2 -0
- package/dist/application/ports/inbound/IDeleteServerUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts +47 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.js +2 -0
- package/dist/application/ports/inbound/IPlayerLookupUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.d.ts +34 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.js +2 -0
- package/dist/application/ports/inbound/IServerStatusUseCase.js.map +1 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts +97 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts.map +1 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.js +2 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.js.map +1 -0
- package/dist/application/ports/inbound/index.d.ts +7 -0
- package/dist/application/ports/inbound/index.d.ts.map +1 -0
- package/dist/application/ports/inbound/index.js +2 -0
- package/dist/application/ports/inbound/index.js.map +1 -0
- package/dist/application/ports/index.d.ts +3 -0
- package/dist/application/ports/index.d.ts.map +1 -0
- package/dist/application/ports/index.js +2 -0
- package/dist/application/ports/index.js.map +1 -0
- package/dist/application/ports/outbound/IDocProvider.d.ts +73 -0
- package/dist/application/ports/outbound/IDocProvider.d.ts.map +1 -0
- package/dist/application/ports/outbound/IDocProvider.js +2 -0
- package/dist/application/ports/outbound/IDocProvider.js.map +1 -0
- package/dist/application/ports/outbound/IModSourcePort.d.ts +71 -0
- package/dist/application/ports/outbound/IModSourcePort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IModSourcePort.js +19 -0
- package/dist/application/ports/outbound/IModSourcePort.js.map +1 -0
- package/dist/application/ports/outbound/IPromptPort.d.ts +148 -0
- package/dist/application/ports/outbound/IPromptPort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IPromptPort.js +2 -0
- package/dist/application/ports/outbound/IPromptPort.js.map +1 -0
- package/dist/application/ports/outbound/IServerRepository.d.ts +54 -0
- package/dist/application/ports/outbound/IServerRepository.d.ts.map +1 -0
- package/dist/application/ports/outbound/IServerRepository.js +2 -0
- package/dist/application/ports/outbound/IServerRepository.js.map +1 -0
- package/dist/application/ports/outbound/IServiceManagerPort.d.ts +115 -0
- package/dist/application/ports/outbound/IServiceManagerPort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IServiceManagerPort.js +2 -0
- package/dist/application/ports/outbound/IServiceManagerPort.js.map +1 -0
- package/dist/application/ports/outbound/IShellPort.d.ts +114 -0
- package/dist/application/ports/outbound/IShellPort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IShellPort.js +2 -0
- package/dist/application/ports/outbound/IShellPort.js.map +1 -0
- package/dist/application/ports/outbound/IUserRepository.d.ts +42 -0
- package/dist/application/ports/outbound/IUserRepository.d.ts.map +1 -0
- package/dist/application/ports/outbound/IUserRepository.js +2 -0
- package/dist/application/ports/outbound/IUserRepository.js.map +1 -0
- package/dist/application/ports/outbound/IWorldRepository.d.ts +90 -0
- package/dist/application/ports/outbound/IWorldRepository.d.ts.map +1 -0
- package/dist/application/ports/outbound/IWorldRepository.js +2 -0
- package/dist/application/ports/outbound/IWorldRepository.js.map +1 -0
- package/dist/application/ports/outbound/index.d.ts +9 -0
- package/dist/application/ports/outbound/index.d.ts.map +1 -0
- package/dist/application/ports/outbound/index.js +2 -0
- package/dist/application/ports/outbound/index.js.map +1 -0
- package/dist/application/use-cases/BackupUseCase.d.ts +35 -0
- package/dist/application/use-cases/BackupUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/BackupUseCase.js +222 -0
- package/dist/application/use-cases/BackupUseCase.js.map +1 -0
- package/dist/application/use-cases/CreateServerUseCase.d.ts +22 -0
- package/dist/application/use-cases/CreateServerUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/CreateServerUseCase.js +144 -0
- package/dist/application/use-cases/CreateServerUseCase.js.map +1 -0
- package/dist/application/use-cases/DeleteServerUseCase.d.ts +24 -0
- package/dist/application/use-cases/DeleteServerUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/DeleteServerUseCase.js +108 -0
- package/dist/application/use-cases/DeleteServerUseCase.js.map +1 -0
- package/dist/application/use-cases/PlayerLookupUseCase.d.ts +23 -0
- package/dist/application/use-cases/PlayerLookupUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/PlayerLookupUseCase.js +130 -0
- package/dist/application/use-cases/PlayerLookupUseCase.js.map +1 -0
- package/dist/application/use-cases/ServerStatusUseCase.d.ts +30 -0
- package/dist/application/use-cases/ServerStatusUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/ServerStatusUseCase.js +117 -0
- package/dist/application/use-cases/ServerStatusUseCase.js.map +1 -0
- package/dist/application/use-cases/WorldManagementUseCase.d.ts +50 -0
- package/dist/application/use-cases/WorldManagementUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/WorldManagementUseCase.js +571 -0
- package/dist/application/use-cases/WorldManagementUseCase.js.map +1 -0
- package/dist/application/use-cases/index.d.ts +7 -0
- package/dist/application/use-cases/index.d.ts.map +1 -0
- package/dist/application/use-cases/index.js +7 -0
- package/dist/application/use-cases/index.js.map +1 -0
- package/dist/docker/index.d.ts +125 -0
- package/dist/docker/index.d.ts.map +1 -0
- package/dist/docker/index.js +557 -0
- package/dist/docker/index.js.map +1 -0
- package/dist/domain/entities/Server.d.ts +77 -0
- package/dist/domain/entities/Server.d.ts.map +1 -0
- package/dist/domain/entities/Server.js +138 -0
- package/dist/domain/entities/Server.js.map +1 -0
- package/dist/domain/entities/User.d.ts +77 -0
- package/dist/domain/entities/User.d.ts.map +1 -0
- package/dist/domain/entities/User.js +121 -0
- package/dist/domain/entities/User.js.map +1 -0
- package/dist/domain/entities/World.d.ts +76 -0
- package/dist/domain/entities/World.d.ts.map +1 -0
- package/dist/domain/entities/World.js +141 -0
- package/dist/domain/entities/World.js.map +1 -0
- package/dist/domain/entities/index.d.ts +4 -0
- package/dist/domain/entities/index.d.ts.map +1 -0
- package/dist/domain/entities/index.js +4 -0
- package/dist/domain/entities/index.js.map +1 -0
- package/dist/domain/index.d.ts +3 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +7 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/mod/ModDependency.d.ts +18 -0
- package/dist/domain/mod/ModDependency.d.ts.map +1 -0
- package/dist/domain/mod/ModDependency.js +5 -0
- package/dist/domain/mod/ModDependency.js.map +1 -0
- package/dist/domain/mod/ModFile.d.ts +27 -0
- package/dist/domain/mod/ModFile.d.ts.map +1 -0
- package/dist/domain/mod/ModFile.js +5 -0
- package/dist/domain/mod/ModFile.js.map +1 -0
- package/dist/domain/mod/ModProject.d.ts +36 -0
- package/dist/domain/mod/ModProject.d.ts.map +1 -0
- package/dist/domain/mod/ModProject.js +5 -0
- package/dist/domain/mod/ModProject.js.map +1 -0
- package/dist/domain/mod/ModSearchResult.d.ts +18 -0
- package/dist/domain/mod/ModSearchResult.d.ts.map +1 -0
- package/dist/domain/mod/ModSearchResult.js +5 -0
- package/dist/domain/mod/ModSearchResult.js.map +1 -0
- package/dist/domain/mod/ModVersion.d.ts +36 -0
- package/dist/domain/mod/ModVersion.d.ts.map +1 -0
- package/dist/domain/mod/ModVersion.js +5 -0
- package/dist/domain/mod/ModVersion.js.map +1 -0
- package/dist/domain/mod/index.d.ts +11 -0
- package/dist/domain/mod/index.d.ts.map +1 -0
- package/dist/domain/mod/index.js +6 -0
- package/dist/domain/mod/index.js.map +1 -0
- package/dist/domain/mod/types.d.ts +43 -0
- package/dist/domain/mod/types.d.ts.map +1 -0
- package/dist/domain/mod/types.js +6 -0
- package/dist/domain/mod/types.js.map +1 -0
- package/dist/domain/value-objects/McVersion.d.ts +35 -0
- package/dist/domain/value-objects/McVersion.d.ts.map +1 -0
- package/dist/domain/value-objects/McVersion.js +117 -0
- package/dist/domain/value-objects/McVersion.js.map +1 -0
- package/dist/domain/value-objects/Memory.d.ts +37 -0
- package/dist/domain/value-objects/Memory.d.ts.map +1 -0
- package/dist/domain/value-objects/Memory.js +107 -0
- package/dist/domain/value-objects/Memory.js.map +1 -0
- package/dist/domain/value-objects/ProcessInfo.d.ts +99 -0
- package/dist/domain/value-objects/ProcessInfo.d.ts.map +1 -0
- package/dist/domain/value-objects/ProcessInfo.js +171 -0
- package/dist/domain/value-objects/ProcessInfo.js.map +1 -0
- package/dist/domain/value-objects/Role.d.ts +41 -0
- package/dist/domain/value-objects/Role.d.ts.map +1 -0
- package/dist/domain/value-objects/Role.js +66 -0
- package/dist/domain/value-objects/Role.js.map +1 -0
- package/dist/domain/value-objects/ServerName.d.ts +21 -0
- package/dist/domain/value-objects/ServerName.d.ts.map +1 -0
- package/dist/domain/value-objects/ServerName.js +58 -0
- package/dist/domain/value-objects/ServerName.js.map +1 -0
- package/dist/domain/value-objects/ServerType.d.ts +40 -0
- package/dist/domain/value-objects/ServerType.d.ts.map +1 -0
- package/dist/domain/value-objects/ServerType.js +136 -0
- package/dist/domain/value-objects/ServerType.js.map +1 -0
- package/dist/domain/value-objects/ServiceStatus.d.ts +64 -0
- package/dist/domain/value-objects/ServiceStatus.d.ts.map +1 -0
- package/dist/domain/value-objects/ServiceStatus.js +99 -0
- package/dist/domain/value-objects/ServiceStatus.js.map +1 -0
- package/dist/domain/value-objects/UserId.d.ts +21 -0
- package/dist/domain/value-objects/UserId.d.ts.map +1 -0
- package/dist/domain/value-objects/UserId.js +43 -0
- package/dist/domain/value-objects/UserId.js.map +1 -0
- package/dist/domain/value-objects/Username.d.ts +16 -0
- package/dist/domain/value-objects/Username.d.ts.map +1 -0
- package/dist/domain/value-objects/Username.js +46 -0
- package/dist/domain/value-objects/Username.js.map +1 -0
- package/dist/domain/value-objects/WorldOptions.d.ts +49 -0
- package/dist/domain/value-objects/WorldOptions.d.ts.map +1 -0
- package/dist/domain/value-objects/WorldOptions.js +149 -0
- package/dist/domain/value-objects/WorldOptions.js.map +1 -0
- package/dist/domain/value-objects/index.d.ts +11 -0
- package/dist/domain/value-objects/index.d.ts.map +1 -0
- package/dist/domain/value-objects/index.js +13 -0
- package/dist/domain/value-objects/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/adapters/ApiPromptAdapter.d.ts +115 -0
- package/dist/infrastructure/adapters/ApiPromptAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ApiPromptAdapter.js +268 -0
- package/dist/infrastructure/adapters/ApiPromptAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/DocsAdapter.d.ts +45 -0
- package/dist/infrastructure/adapters/DocsAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/DocsAdapter.js +490 -0
- package/dist/infrastructure/adapters/DocsAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/ServerRepository.d.ts +49 -0
- package/dist/infrastructure/adapters/ServerRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ServerRepository.js +206 -0
- package/dist/infrastructure/adapters/ServerRepository.js.map +1 -0
- package/dist/infrastructure/adapters/ShellAdapter.d.ts +41 -0
- package/dist/infrastructure/adapters/ShellAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ShellAdapter.js +198 -0
- package/dist/infrastructure/adapters/ShellAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/SqliteUserRepository.d.ts +70 -0
- package/dist/infrastructure/adapters/SqliteUserRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/SqliteUserRepository.js +149 -0
- package/dist/infrastructure/adapters/SqliteUserRepository.js.map +1 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts +67 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/WorldRepository.js +283 -0
- package/dist/infrastructure/adapters/WorldRepository.js.map +1 -0
- package/dist/infrastructure/adapters/YamlUserRepository.d.ts +67 -0
- package/dist/infrastructure/adapters/YamlUserRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/YamlUserRepository.js +161 -0
- package/dist/infrastructure/adapters/YamlUserRepository.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +12 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -0
- package/dist/infrastructure/adapters/index.js +12 -0
- package/dist/infrastructure/adapters/index.js.map +1 -0
- package/dist/infrastructure/config/Pm2EcosystemConfig.d.ts +192 -0
- package/dist/infrastructure/config/Pm2EcosystemConfig.d.ts.map +1 -0
- package/dist/infrastructure/config/Pm2EcosystemConfig.js +48 -0
- package/dist/infrastructure/config/Pm2EcosystemConfig.js.map +1 -0
- package/dist/infrastructure/config/index.d.ts +6 -0
- package/dist/infrastructure/config/index.d.ts.map +1 -0
- package/dist/infrastructure/config/index.js +6 -0
- package/dist/infrastructure/config/index.js.map +1 -0
- package/dist/infrastructure/factories/ModSourceFactory.d.ts +73 -0
- package/dist/infrastructure/factories/ModSourceFactory.d.ts.map +1 -0
- package/dist/infrastructure/factories/ModSourceFactory.js +98 -0
- package/dist/infrastructure/factories/ModSourceFactory.js.map +1 -0
- package/dist/infrastructure/factories/index.d.ts +5 -0
- package/dist/infrastructure/factories/index.d.ts.map +1 -0
- package/dist/infrastructure/factories/index.js +5 -0
- package/dist/infrastructure/factories/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +7 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +7 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/types/index.d.ts +151 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +81 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +200 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +10 -2
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { IBackupUseCase, BackupPushResult, BackupStatusResult, BackupHistoryResult, BackupRestoreResult, IPromptPort, IShellPort } from '../ports/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Backup Use Case
|
|
4
|
+
* Manages world backups to GitHub
|
|
5
|
+
*/
|
|
6
|
+
export declare class BackupUseCase implements IBackupUseCase {
|
|
7
|
+
private readonly prompt;
|
|
8
|
+
private readonly shell;
|
|
9
|
+
constructor(prompt: IPromptPort, shell: IShellPort);
|
|
10
|
+
/**
|
|
11
|
+
* Interactive backup push
|
|
12
|
+
*/
|
|
13
|
+
push(): Promise<BackupPushResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Push backup with message
|
|
16
|
+
*/
|
|
17
|
+
pushWithMessage(message: string): Promise<BackupPushResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Get backup status
|
|
20
|
+
*/
|
|
21
|
+
status(): Promise<BackupStatusResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Get backup history
|
|
24
|
+
*/
|
|
25
|
+
history(): Promise<BackupHistoryResult[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Interactive restore selection
|
|
28
|
+
*/
|
|
29
|
+
restore(): Promise<BackupRestoreResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Restore from specific commit
|
|
32
|
+
*/
|
|
33
|
+
restoreFromCommit(commitHash: string): Promise<BackupRestoreResult>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=BackupUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackupUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/BackupUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAEhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU;IAGpC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAgDvC;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoCjE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA8B3C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoB/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkE7C;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAyB1E"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backup Use Case
|
|
3
|
+
* Manages world backups to GitHub
|
|
4
|
+
*/
|
|
5
|
+
export class BackupUseCase {
|
|
6
|
+
prompt;
|
|
7
|
+
shell;
|
|
8
|
+
constructor(prompt, shell) {
|
|
9
|
+
this.prompt = prompt;
|
|
10
|
+
this.shell = shell;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Interactive backup push
|
|
14
|
+
*/
|
|
15
|
+
async push() {
|
|
16
|
+
this.prompt.intro('Backup Worlds to GitHub');
|
|
17
|
+
try {
|
|
18
|
+
// Check backup status first
|
|
19
|
+
const statusResult = await this.status();
|
|
20
|
+
if (!statusResult.configured) {
|
|
21
|
+
this.prompt.error('Backup not configured');
|
|
22
|
+
this.prompt.note('Set BACKUP_GITHUB_TOKEN and BACKUP_GITHUB_REPO in .env', 'Configuration Required');
|
|
23
|
+
this.prompt.outro('Backup cancelled');
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
error: 'Backup not configured',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Prompt for backup message
|
|
30
|
+
const message = await this.prompt.text({
|
|
31
|
+
message: 'Backup message:',
|
|
32
|
+
placeholder: 'Manual backup',
|
|
33
|
+
});
|
|
34
|
+
if (this.prompt.isCancel(message)) {
|
|
35
|
+
this.prompt.outro('Backup cancelled');
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: 'Cancelled',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Execute backup
|
|
42
|
+
return await this.pushWithMessage(message || 'Manual backup');
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (this.prompt.isCancel(error)) {
|
|
46
|
+
this.prompt.outro('Backup cancelled');
|
|
47
|
+
return {
|
|
48
|
+
success: false,
|
|
49
|
+
error: 'Cancelled',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Push backup with message
|
|
57
|
+
*/
|
|
58
|
+
async pushWithMessage(message) {
|
|
59
|
+
const spinner = this.prompt.spinner();
|
|
60
|
+
spinner.start('Backing up worlds...');
|
|
61
|
+
const result = await this.shell.backupPush(message);
|
|
62
|
+
if (!result.success) {
|
|
63
|
+
spinner.stop('Backup failed');
|
|
64
|
+
this.prompt.error(result.stderr || 'Unknown error');
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
message,
|
|
68
|
+
error: result.stderr,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
spinner.stop('Backup complete');
|
|
72
|
+
// Parse commit hash from output
|
|
73
|
+
const commitMatch = result.stdout.match(/commit:\s*([a-f0-9]+)/i);
|
|
74
|
+
const commitHash = commitMatch ? commitMatch[1] : undefined;
|
|
75
|
+
this.prompt.success('Worlds backed up successfully');
|
|
76
|
+
if (commitHash) {
|
|
77
|
+
this.prompt.note(`Commit: ${commitHash}`, 'Backup Info');
|
|
78
|
+
}
|
|
79
|
+
this.prompt.outro('Backup complete');
|
|
80
|
+
return {
|
|
81
|
+
success: true,
|
|
82
|
+
commitHash,
|
|
83
|
+
message,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get backup status
|
|
88
|
+
*/
|
|
89
|
+
async status() {
|
|
90
|
+
const result = await this.shell.backupStatus();
|
|
91
|
+
if (!result.success) {
|
|
92
|
+
return {
|
|
93
|
+
configured: false,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Parse status output
|
|
97
|
+
const output = result.stdout;
|
|
98
|
+
const repoMatch = output.match(/Repository:\s*(.+)/i);
|
|
99
|
+
const branchMatch = output.match(/Branch:\s*(.+)/i);
|
|
100
|
+
const lastBackupMatch = output.match(/Last backup:\s*(.+)/i);
|
|
101
|
+
const autoMatch = output.match(/Auto backup:\s*(enabled|disabled)/i);
|
|
102
|
+
return {
|
|
103
|
+
configured: true,
|
|
104
|
+
repository: repoMatch ? repoMatch[1]?.trim() : undefined,
|
|
105
|
+
branch: branchMatch ? branchMatch[1]?.trim() : undefined,
|
|
106
|
+
lastBackup: lastBackupMatch
|
|
107
|
+
? new Date(lastBackupMatch[1].trim())
|
|
108
|
+
: undefined,
|
|
109
|
+
autoBackupEnabled: autoMatch
|
|
110
|
+
? autoMatch[1]?.toLowerCase() === 'enabled'
|
|
111
|
+
: undefined,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get backup history
|
|
116
|
+
*/
|
|
117
|
+
async history() {
|
|
118
|
+
const result = await this.shell.backupHistory(true);
|
|
119
|
+
if (!result.success) {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const data = JSON.parse(result.stdout);
|
|
124
|
+
return data.map((entry) => ({
|
|
125
|
+
commitHash: entry.hash,
|
|
126
|
+
message: entry.message,
|
|
127
|
+
date: new Date(entry.date),
|
|
128
|
+
author: entry.author,
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Interactive restore selection
|
|
137
|
+
*/
|
|
138
|
+
async restore() {
|
|
139
|
+
this.prompt.intro('Restore from Backup');
|
|
140
|
+
try {
|
|
141
|
+
// Get history
|
|
142
|
+
const history = await this.history();
|
|
143
|
+
if (history.length === 0) {
|
|
144
|
+
this.prompt.warn('No backup history found');
|
|
145
|
+
this.prompt.outro('Nothing to restore');
|
|
146
|
+
return {
|
|
147
|
+
success: false,
|
|
148
|
+
commitHash: '',
|
|
149
|
+
error: 'No backup history found',
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// Prompt for commit selection
|
|
153
|
+
const selected = await this.prompt.select({
|
|
154
|
+
message: 'Select backup to restore:',
|
|
155
|
+
options: history.slice(0, 10).map((entry) => ({
|
|
156
|
+
value: entry.commitHash,
|
|
157
|
+
label: entry.commitHash.substring(0, 7),
|
|
158
|
+
hint: `${entry.message} (${entry.date.toLocaleDateString()})`,
|
|
159
|
+
})),
|
|
160
|
+
});
|
|
161
|
+
if (this.prompt.isCancel(selected)) {
|
|
162
|
+
this.prompt.outro('Restore cancelled');
|
|
163
|
+
return {
|
|
164
|
+
success: false,
|
|
165
|
+
commitHash: '',
|
|
166
|
+
error: 'Cancelled',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// Confirm restore
|
|
170
|
+
const confirmed = await this.prompt.confirm({
|
|
171
|
+
message: 'This will overwrite current world data. Continue?',
|
|
172
|
+
initialValue: false,
|
|
173
|
+
});
|
|
174
|
+
if (!confirmed) {
|
|
175
|
+
this.prompt.outro('Restore cancelled');
|
|
176
|
+
return {
|
|
177
|
+
success: false,
|
|
178
|
+
commitHash: selected,
|
|
179
|
+
error: 'Cancelled',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// Execute restore
|
|
183
|
+
return await this.restoreFromCommit(selected);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
if (this.prompt.isCancel(error)) {
|
|
187
|
+
this.prompt.outro('Restore cancelled');
|
|
188
|
+
return {
|
|
189
|
+
success: false,
|
|
190
|
+
commitHash: '',
|
|
191
|
+
error: 'Cancelled',
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Restore from specific commit
|
|
199
|
+
*/
|
|
200
|
+
async restoreFromCommit(commitHash) {
|
|
201
|
+
const spinner = this.prompt.spinner();
|
|
202
|
+
spinner.start('Restoring from backup...');
|
|
203
|
+
const result = await this.shell.backupRestore(commitHash);
|
|
204
|
+
if (!result.success) {
|
|
205
|
+
spinner.stop('Restore failed');
|
|
206
|
+
this.prompt.error(result.stderr || 'Unknown error');
|
|
207
|
+
return {
|
|
208
|
+
success: false,
|
|
209
|
+
commitHash,
|
|
210
|
+
error: result.stderr,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
spinner.stop('Restore complete');
|
|
214
|
+
this.prompt.success(`Restored from ${commitHash.substring(0, 7)}`);
|
|
215
|
+
this.prompt.outro('Restore complete');
|
|
216
|
+
return {
|
|
217
|
+
success: true,
|
|
218
|
+
commitHash,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=BackupUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackupUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/BackupUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Server } from '../../domain/index.js';
|
|
2
|
+
import type { ICreateServerUseCase, CreateServerConfig, IPromptPort, IShellPort, IServerRepository, IWorldRepository } from '../ports/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create Server Use Case
|
|
5
|
+
* Orchestrates interactive server creation flow
|
|
6
|
+
*/
|
|
7
|
+
export declare class CreateServerUseCase implements ICreateServerUseCase {
|
|
8
|
+
private readonly prompt;
|
|
9
|
+
private readonly shell;
|
|
10
|
+
private readonly serverRepo;
|
|
11
|
+
private readonly worldRepo?;
|
|
12
|
+
constructor(prompt: IPromptPort, shell: IShellPort, serverRepo: IServerRepository, worldRepo?: IWorldRepository | undefined);
|
|
13
|
+
/**
|
|
14
|
+
* Execute interactive server creation
|
|
15
|
+
*/
|
|
16
|
+
execute(): Promise<Server>;
|
|
17
|
+
/**
|
|
18
|
+
* Execute server creation with provided configuration
|
|
19
|
+
*/
|
|
20
|
+
executeWithConfig(config: CreateServerConfig): Promise<Server>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=CreateServerUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateServerUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/CreateServerUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAOP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAHV,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,iBAAiB,EAC7B,SAAS,CAAC,EAAE,gBAAgB,YAAA;IAG/C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAyFhC;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;CAsDrE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Server, ServerName, ServerType, McVersion, Memory, WorldOptions, WorldSetupType, } from '../../domain/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create Server Use Case
|
|
4
|
+
* Orchestrates interactive server creation flow
|
|
5
|
+
*/
|
|
6
|
+
export class CreateServerUseCase {
|
|
7
|
+
prompt;
|
|
8
|
+
shell;
|
|
9
|
+
serverRepo;
|
|
10
|
+
worldRepo;
|
|
11
|
+
constructor(prompt, shell, serverRepo, worldRepo) {
|
|
12
|
+
this.prompt = prompt;
|
|
13
|
+
this.shell = shell;
|
|
14
|
+
this.serverRepo = serverRepo;
|
|
15
|
+
this.worldRepo = worldRepo;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Execute interactive server creation
|
|
19
|
+
*/
|
|
20
|
+
async execute() {
|
|
21
|
+
this.prompt.intro('Create Minecraft Server');
|
|
22
|
+
try {
|
|
23
|
+
// Prompt for server name
|
|
24
|
+
const name = await this.prompt.promptServerName();
|
|
25
|
+
// Check if server already exists
|
|
26
|
+
if (await this.serverRepo.exists(name.value)) {
|
|
27
|
+
this.prompt.error(`Server '${name.value}' already exists`);
|
|
28
|
+
this.prompt.handleCancel();
|
|
29
|
+
}
|
|
30
|
+
// Prompt for server type
|
|
31
|
+
const type = await this.prompt.promptServerType();
|
|
32
|
+
// Prompt for Minecraft version
|
|
33
|
+
const version = await this.prompt.promptMcVersion(type);
|
|
34
|
+
// Prompt for world options
|
|
35
|
+
let worldOptions = await this.prompt.promptWorldOptions();
|
|
36
|
+
// If "existing" was selected and we have a world repository,
|
|
37
|
+
// show the enhanced world selection with availability status
|
|
38
|
+
if (worldOptions.setupType === WorldSetupType.EXISTING &&
|
|
39
|
+
this.worldRepo) {
|
|
40
|
+
const worldsWithStatus = await this.worldRepo.findAllWithServerStatus();
|
|
41
|
+
const selectedWorld = await this.prompt.promptExistingWorldSelection(worldsWithStatus);
|
|
42
|
+
if (selectedWorld) {
|
|
43
|
+
worldOptions = WorldOptions.existingWorld(selectedWorld.name);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// User cancelled or no world available, fallback to new world
|
|
47
|
+
this.prompt.info('Creating a new world instead');
|
|
48
|
+
worldOptions = WorldOptions.newWorld();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Prompt for memory
|
|
52
|
+
const memory = await this.prompt.promptMemory();
|
|
53
|
+
// Create server configuration
|
|
54
|
+
const server = Server.create({
|
|
55
|
+
name,
|
|
56
|
+
type,
|
|
57
|
+
version,
|
|
58
|
+
memory,
|
|
59
|
+
worldOptions,
|
|
60
|
+
});
|
|
61
|
+
// Execute creation - stop spinner before running script to avoid output conflicts
|
|
62
|
+
const spinner = this.prompt.spinner();
|
|
63
|
+
spinner.start('Creating server...');
|
|
64
|
+
spinner.stop('Running create script...');
|
|
65
|
+
const result = await this.shell.createServer(name, {
|
|
66
|
+
type,
|
|
67
|
+
version,
|
|
68
|
+
worldOptions,
|
|
69
|
+
memory,
|
|
70
|
+
autoStart: true,
|
|
71
|
+
});
|
|
72
|
+
if (!result.success) {
|
|
73
|
+
this.prompt.error(result.stderr || 'Unknown error occurred');
|
|
74
|
+
throw new Error(result.stderr || 'Server creation failed');
|
|
75
|
+
}
|
|
76
|
+
this.prompt.success(`Server '${name.value}' created!`);
|
|
77
|
+
this.prompt.note(`Connect via: ${name.hostname}:25565`, 'Connection Info');
|
|
78
|
+
this.prompt.outro('Happy mining!');
|
|
79
|
+
return server;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (this.prompt.isCancel(error)) {
|
|
83
|
+
this.prompt.outro('Server creation cancelled');
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Execute server creation with provided configuration
|
|
91
|
+
*/
|
|
92
|
+
async executeWithConfig(config) {
|
|
93
|
+
// Parse configuration
|
|
94
|
+
const name = ServerName.create(config.name);
|
|
95
|
+
const type = config.type
|
|
96
|
+
? ServerType.create(config.type)
|
|
97
|
+
: ServerType.getRecommended();
|
|
98
|
+
const version = config.version
|
|
99
|
+
? McVersion.create(config.version)
|
|
100
|
+
: McVersion.latest();
|
|
101
|
+
const memory = config.memory
|
|
102
|
+
? Memory.create(config.memory)
|
|
103
|
+
: Memory.default();
|
|
104
|
+
// Determine world options
|
|
105
|
+
let worldOptions;
|
|
106
|
+
if (config.worldUrl) {
|
|
107
|
+
worldOptions = WorldOptions.downloadWorld(config.worldUrl);
|
|
108
|
+
}
|
|
109
|
+
else if (config.worldName) {
|
|
110
|
+
worldOptions = WorldOptions.existingWorld(config.worldName);
|
|
111
|
+
}
|
|
112
|
+
else if (config.seed) {
|
|
113
|
+
worldOptions = WorldOptions.newWorld(config.seed);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
worldOptions = WorldOptions.default();
|
|
117
|
+
}
|
|
118
|
+
// Check if server already exists
|
|
119
|
+
if (await this.serverRepo.exists(name.value)) {
|
|
120
|
+
throw new Error(`Server '${name.value}' already exists`);
|
|
121
|
+
}
|
|
122
|
+
// Create server
|
|
123
|
+
const server = Server.create({
|
|
124
|
+
name,
|
|
125
|
+
type,
|
|
126
|
+
version,
|
|
127
|
+
memory,
|
|
128
|
+
worldOptions,
|
|
129
|
+
});
|
|
130
|
+
// Execute creation
|
|
131
|
+
const result = await this.shell.createServer(name, {
|
|
132
|
+
type,
|
|
133
|
+
version,
|
|
134
|
+
worldOptions,
|
|
135
|
+
memory,
|
|
136
|
+
autoStart: config.autoStart ?? true,
|
|
137
|
+
});
|
|
138
|
+
if (!result.success) {
|
|
139
|
+
throw new Error(result.stderr || 'Server creation failed');
|
|
140
|
+
}
|
|
141
|
+
return server;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=CreateServerUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateServerUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/CreateServerUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IDeleteServerUseCase, IPromptPort, IShellPort, IServerRepository } from '../ports/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Delete Server Use Case
|
|
4
|
+
* Orchestrates server deletion with confirmation
|
|
5
|
+
*/
|
|
6
|
+
export declare class DeleteServerUseCase implements IDeleteServerUseCase {
|
|
7
|
+
private readonly prompt;
|
|
8
|
+
private readonly shell;
|
|
9
|
+
private readonly serverRepo;
|
|
10
|
+
constructor(prompt: IPromptPort, shell: IShellPort, serverRepo: IServerRepository);
|
|
11
|
+
/**
|
|
12
|
+
* Execute interactive server deletion
|
|
13
|
+
*/
|
|
14
|
+
execute(): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Execute server deletion with provided name
|
|
17
|
+
*/
|
|
18
|
+
executeWithName(name: string, force?: boolean): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Perform the actual deletion
|
|
21
|
+
*/
|
|
22
|
+
private performDeletion;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=DeleteServerUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteServerUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/DeleteServerUseCase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,iBAAiB;IAGhD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAsDjC;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBpE;;OAEG;YACW,eAAe;CAwC9B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delete Server Use Case
|
|
3
|
+
* Orchestrates server deletion with confirmation
|
|
4
|
+
*/
|
|
5
|
+
export class DeleteServerUseCase {
|
|
6
|
+
prompt;
|
|
7
|
+
shell;
|
|
8
|
+
serverRepo;
|
|
9
|
+
constructor(prompt, shell, serverRepo) {
|
|
10
|
+
this.prompt = prompt;
|
|
11
|
+
this.shell = shell;
|
|
12
|
+
this.serverRepo = serverRepo;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Execute interactive server deletion
|
|
16
|
+
*/
|
|
17
|
+
async execute() {
|
|
18
|
+
this.prompt.intro('Delete Minecraft Server');
|
|
19
|
+
try {
|
|
20
|
+
// Get all servers
|
|
21
|
+
const servers = await this.serverRepo.findAll();
|
|
22
|
+
if (servers.length === 0) {
|
|
23
|
+
this.prompt.warn('No servers found');
|
|
24
|
+
this.prompt.outro('Nothing to delete');
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
// Prompt for server selection
|
|
28
|
+
const server = await this.prompt.promptServerSelection(servers);
|
|
29
|
+
// Show server info
|
|
30
|
+
this.prompt.note(`Name: ${server.name.value}\n` +
|
|
31
|
+
`Type: ${server.type.label} ${server.version.value}\n` +
|
|
32
|
+
`Status: ${server.status}\n` +
|
|
33
|
+
(server.hasPlayers ? `Players: ${server.playerCount} online` : ''), 'Server Info');
|
|
34
|
+
// Warn if running with players
|
|
35
|
+
if (server.isRunning && server.hasPlayers) {
|
|
36
|
+
this.prompt.warn(`Warning: ${server.playerCount} player(s) are currently online!`);
|
|
37
|
+
}
|
|
38
|
+
// Confirm deletion
|
|
39
|
+
const confirmed = await this.prompt.confirm({
|
|
40
|
+
message: 'Are you sure you want to delete this server?',
|
|
41
|
+
initialValue: false,
|
|
42
|
+
});
|
|
43
|
+
if (!confirmed) {
|
|
44
|
+
this.prompt.outro('Deletion cancelled');
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
// Execute deletion
|
|
48
|
+
return await this.performDeletion(server);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (this.prompt.isCancel(error)) {
|
|
52
|
+
this.prompt.outro('Deletion cancelled');
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Execute server deletion with provided name
|
|
60
|
+
*/
|
|
61
|
+
async executeWithName(name, force = false) {
|
|
62
|
+
// Check if server exists
|
|
63
|
+
const server = await this.serverRepo.findByName(name);
|
|
64
|
+
if (!server) {
|
|
65
|
+
throw new Error(`Server '${name}' not found`);
|
|
66
|
+
}
|
|
67
|
+
// If not force mode and server has players, throw error
|
|
68
|
+
if (!force && server.isRunning && server.hasPlayers) {
|
|
69
|
+
throw new Error(`Server '${name}' has ${server.playerCount} player(s) online. Use --force to delete anyway.`);
|
|
70
|
+
}
|
|
71
|
+
return await this.performDeletion(server, force);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Perform the actual deletion
|
|
75
|
+
*/
|
|
76
|
+
async performDeletion(server, force = false) {
|
|
77
|
+
const spinner = this.prompt.spinner();
|
|
78
|
+
try {
|
|
79
|
+
// Stop server if running
|
|
80
|
+
if (server.isRunning) {
|
|
81
|
+
spinner.start('Stopping server...');
|
|
82
|
+
await this.shell.stopServer(server.name);
|
|
83
|
+
spinner.stop('Server stopped');
|
|
84
|
+
}
|
|
85
|
+
// Delete server - stop spinner before running script to avoid output conflicts
|
|
86
|
+
// Always pass force=true since confirmation was already handled by UseCase
|
|
87
|
+
spinner.start('Removing server...');
|
|
88
|
+
spinner.stop('Running delete script...');
|
|
89
|
+
const result = await this.shell.deleteServer(server.name, true);
|
|
90
|
+
if (!result.success) {
|
|
91
|
+
this.prompt.error(result.stderr || 'Unknown error occurred');
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
this.prompt.success(`Server '${server.name.value}' deleted`);
|
|
95
|
+
// Note about world preservation
|
|
96
|
+
if (server.worldOptions.isExistingWorld) {
|
|
97
|
+
this.prompt.note(`World data preserved in worlds/${server.worldOptions.worldName}/`, 'World Data');
|
|
98
|
+
}
|
|
99
|
+
this.prompt.outro('Server removed successfully');
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
spinner.stop('Deletion failed');
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=DeleteServerUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteServerUseCase.js","sourceRoot":"","sources":["../../../src/application/use-cases/DeleteServerUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { IPlayerLookupUseCase, PlayerLookupResult, PlayerUuidResult, IPromptPort, IShellPort } from '../ports/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Player Lookup Use Case
|
|
4
|
+
* Looks up Minecraft player information
|
|
5
|
+
*/
|
|
6
|
+
export declare class PlayerLookupUseCase implements IPlayerLookupUseCase {
|
|
7
|
+
private readonly prompt;
|
|
8
|
+
private readonly shell;
|
|
9
|
+
constructor(prompt: IPromptPort, shell: IShellPort);
|
|
10
|
+
/**
|
|
11
|
+
* Interactive player lookup
|
|
12
|
+
*/
|
|
13
|
+
lookup(): Promise<PlayerLookupResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Lookup player by name
|
|
16
|
+
*/
|
|
17
|
+
lookupByName(name: string): Promise<PlayerLookupResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Get player UUID
|
|
20
|
+
*/
|
|
21
|
+
getUuid(name: string, offline?: boolean): Promise<PlayerUuidResult>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=PlayerLookupUseCase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerLookupUseCase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/PlayerLookupUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU;IAGpC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyC3C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwD7D;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAgCxE"}
|