@minecraft-docker/shared 1.5.0 → 1.6.1
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 +56 -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/IPromptPort.d.ts +136 -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/IShellPort.d.ts +106 -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/IWorldRepository.d.ts +71 -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 +6 -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 +145 -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 +33 -0
- package/dist/application/use-cases/WorldManagementUseCase.d.ts.map +1 -0
- package/dist/application/use-cases/WorldManagementUseCase.js +239 -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 +111 -0
- package/dist/docker/index.d.ts.map +1 -0
- package/dist/docker/index.js +532 -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/World.d.ts +70 -0
- package/dist/domain/entities/World.d.ts.map +1 -0
- package/dist/domain/entities/World.js +128 -0
- package/dist/domain/entities/World.js.map +1 -0
- package/dist/domain/entities/index.d.ts +3 -0
- package/dist/domain/entities/index.d.ts.map +1 -0
- package/dist/domain/entities/index.js +3 -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 +5 -0
- package/dist/domain/index.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/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 +39 -0
- package/dist/domain/value-objects/ServerType.d.ts.map +1 -0
- package/dist/domain/value-objects/ServerType.js +128 -0
- package/dist/domain/value-objects/ServerType.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 +6 -0
- package/dist/domain/value-objects/index.d.ts.map +1 -0
- package/dist/domain/value-objects/index.js +6 -0
- package/dist/domain/value-objects/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.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 +39 -0
- package/dist/infrastructure/adapters/ShellAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ShellAdapter.js +188 -0
- package/dist/infrastructure/adapters/ShellAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts +55 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/WorldRepository.js +213 -0
- package/dist/infrastructure/adapters/WorldRepository.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +9 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -0
- package/dist/infrastructure/adapters/index.js +9 -0
- package/dist/infrastructure/adapters/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +6 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +6 -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 +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { ServerName } from '../value-objects/ServerName.js';
|
|
2
|
+
import { ServerType } from '../value-objects/ServerType.js';
|
|
3
|
+
import { McVersion } from '../value-objects/McVersion.js';
|
|
4
|
+
import { Memory } from '../value-objects/Memory.js';
|
|
5
|
+
import { WorldOptions } from '../value-objects/WorldOptions.js';
|
|
6
|
+
/**
|
|
7
|
+
* Server status enumeration
|
|
8
|
+
*/
|
|
9
|
+
export var ServerStatus;
|
|
10
|
+
(function (ServerStatus) {
|
|
11
|
+
ServerStatus["RUNNING"] = "running";
|
|
12
|
+
ServerStatus["STOPPED"] = "stopped";
|
|
13
|
+
ServerStatus["STARTING"] = "starting";
|
|
14
|
+
ServerStatus["STOPPING"] = "stopping";
|
|
15
|
+
ServerStatus["ERROR"] = "error";
|
|
16
|
+
ServerStatus["UNKNOWN"] = "unknown";
|
|
17
|
+
})(ServerStatus || (ServerStatus = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Server entity
|
|
20
|
+
* Represents a Minecraft server instance
|
|
21
|
+
*/
|
|
22
|
+
export class Server {
|
|
23
|
+
_config;
|
|
24
|
+
_status;
|
|
25
|
+
_playerCount;
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this._config = { ...config };
|
|
28
|
+
this._status = ServerStatus.UNKNOWN;
|
|
29
|
+
this._playerCount = 0;
|
|
30
|
+
}
|
|
31
|
+
// Getters for configuration
|
|
32
|
+
get name() {
|
|
33
|
+
return this._config.name;
|
|
34
|
+
}
|
|
35
|
+
get type() {
|
|
36
|
+
return this._config.type;
|
|
37
|
+
}
|
|
38
|
+
get version() {
|
|
39
|
+
return this._config.version;
|
|
40
|
+
}
|
|
41
|
+
get memory() {
|
|
42
|
+
return this._config.memory;
|
|
43
|
+
}
|
|
44
|
+
get worldOptions() {
|
|
45
|
+
return this._config.worldOptions;
|
|
46
|
+
}
|
|
47
|
+
get rconPassword() {
|
|
48
|
+
return this._config.rconPassword;
|
|
49
|
+
}
|
|
50
|
+
get autoStart() {
|
|
51
|
+
return this._config.autoStart ?? true;
|
|
52
|
+
}
|
|
53
|
+
// Status management
|
|
54
|
+
get status() {
|
|
55
|
+
return this._status;
|
|
56
|
+
}
|
|
57
|
+
get playerCount() {
|
|
58
|
+
return this._playerCount;
|
|
59
|
+
}
|
|
60
|
+
get isRunning() {
|
|
61
|
+
return this._status === ServerStatus.RUNNING;
|
|
62
|
+
}
|
|
63
|
+
get isStopped() {
|
|
64
|
+
return this._status === ServerStatus.STOPPED;
|
|
65
|
+
}
|
|
66
|
+
get hasPlayers() {
|
|
67
|
+
return this._playerCount > 0;
|
|
68
|
+
}
|
|
69
|
+
// Status setters (called by infrastructure layer)
|
|
70
|
+
setStatus(status) {
|
|
71
|
+
this._status = status;
|
|
72
|
+
}
|
|
73
|
+
setPlayerCount(count) {
|
|
74
|
+
if (count < 0) {
|
|
75
|
+
throw new Error('Player count cannot be negative');
|
|
76
|
+
}
|
|
77
|
+
this._playerCount = count;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Container name for Docker
|
|
81
|
+
*/
|
|
82
|
+
get containerName() {
|
|
83
|
+
return this._config.name.containerName;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Hostname for mc-router connection
|
|
87
|
+
*/
|
|
88
|
+
get hostname() {
|
|
89
|
+
return this._config.name.hostname;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Convert to CLI arguments for create-server.sh
|
|
93
|
+
*/
|
|
94
|
+
toCreateArgs() {
|
|
95
|
+
const args = [];
|
|
96
|
+
args.push('-t', this._config.type.value);
|
|
97
|
+
args.push('-v', this._config.version.value);
|
|
98
|
+
// Add world options
|
|
99
|
+
args.push(...this._config.worldOptions.toCliArgs());
|
|
100
|
+
if (!this.autoStart) {
|
|
101
|
+
args.push('--no-start');
|
|
102
|
+
}
|
|
103
|
+
return args;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Convert to environment variables for config.env
|
|
107
|
+
*/
|
|
108
|
+
toEnvVars() {
|
|
109
|
+
return {
|
|
110
|
+
TYPE: this._config.type.value,
|
|
111
|
+
VERSION: this._config.version.value,
|
|
112
|
+
MEMORY: this._config.memory.value,
|
|
113
|
+
...(this._config.rconPassword && { RCON_PASSWORD: this._config.rconPassword }),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Create a new server with the given configuration
|
|
118
|
+
*/
|
|
119
|
+
static create(config) {
|
|
120
|
+
return new Server(config);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Create a minimal server configuration (for listing/status)
|
|
124
|
+
*/
|
|
125
|
+
static fromStatus(name, type, version, status, playerCount) {
|
|
126
|
+
const server = new Server({
|
|
127
|
+
name: ServerName.create(name),
|
|
128
|
+
type: ServerType.create(type),
|
|
129
|
+
version: McVersion.create(version),
|
|
130
|
+
memory: Memory.default(),
|
|
131
|
+
worldOptions: WorldOptions.default(),
|
|
132
|
+
});
|
|
133
|
+
server.setStatus(status);
|
|
134
|
+
server.setPlayerCount(playerCount);
|
|
135
|
+
return server;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=Server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../../src/domain/entities/Server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* World lock status
|
|
3
|
+
*/
|
|
4
|
+
export declare enum WorldLockStatus {
|
|
5
|
+
UNLOCKED = "unlocked",
|
|
6
|
+
LOCKED = "locked"
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* World lock information
|
|
10
|
+
*/
|
|
11
|
+
export interface WorldLock {
|
|
12
|
+
serverName: string;
|
|
13
|
+
timestamp: Date;
|
|
14
|
+
pid?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* World entity
|
|
18
|
+
* Represents a Minecraft world with lock management
|
|
19
|
+
*/
|
|
20
|
+
export declare class World {
|
|
21
|
+
private readonly _name;
|
|
22
|
+
private readonly _path;
|
|
23
|
+
private _lockStatus;
|
|
24
|
+
private _lock?;
|
|
25
|
+
private _sizeBytes?;
|
|
26
|
+
private _lastModified?;
|
|
27
|
+
constructor(name: string, path: string);
|
|
28
|
+
get name(): string;
|
|
29
|
+
get path(): string;
|
|
30
|
+
get lockStatus(): WorldLockStatus;
|
|
31
|
+
get lock(): WorldLock | undefined;
|
|
32
|
+
get isLocked(): boolean;
|
|
33
|
+
get isUnlocked(): boolean;
|
|
34
|
+
get lockedBy(): string | undefined;
|
|
35
|
+
get sizeBytes(): number | undefined;
|
|
36
|
+
get lastModified(): Date | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Get human-readable size
|
|
39
|
+
*/
|
|
40
|
+
get sizeFormatted(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Lock the world to a server
|
|
43
|
+
*/
|
|
44
|
+
lockTo(serverName: string, pid?: number): void;
|
|
45
|
+
/**
|
|
46
|
+
* Release the lock
|
|
47
|
+
*/
|
|
48
|
+
release(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Force release (for stale locks)
|
|
51
|
+
*/
|
|
52
|
+
forceRelease(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Set world metadata
|
|
55
|
+
*/
|
|
56
|
+
setMetadata(sizeBytes: number, lastModified: Date): void;
|
|
57
|
+
/**
|
|
58
|
+
* Check if lock is stale (older than specified minutes)
|
|
59
|
+
*/
|
|
60
|
+
isLockStale(maxAgeMinutes?: number): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Create world from directory listing
|
|
63
|
+
*/
|
|
64
|
+
static fromDirectory(name: string, basePath: string): World;
|
|
65
|
+
/**
|
|
66
|
+
* Create world with lock status
|
|
67
|
+
*/
|
|
68
|
+
static withLock(name: string, path: string, serverName: string, timestamp: Date, pid?: number): World;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=World.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"World.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/World.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,eAAe;IACzB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK,CAAC,CAAY;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAO;gBAEjB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAMtC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,UAAU,IAAI,eAAe,CAEhC;IAED,IAAI,IAAI,IAAI,SAAS,GAAG,SAAS,CAEhC;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,IAAI,YAAY,IAAI,IAAI,GAAG,SAAS,CAEnC;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAa1B;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAe9C;;OAEG;IACH,OAAO,IAAI,IAAI;IAKf;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAG,IAAI;IAKxD;;OAEG;IACH,WAAW,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO;IAQhD;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK;IAI3D;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,IAAI,EACf,GAAG,CAAC,EAAE,MAAM,GACX,KAAK;CAMT"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* World lock status
|
|
3
|
+
*/
|
|
4
|
+
export var WorldLockStatus;
|
|
5
|
+
(function (WorldLockStatus) {
|
|
6
|
+
WorldLockStatus["UNLOCKED"] = "unlocked";
|
|
7
|
+
WorldLockStatus["LOCKED"] = "locked";
|
|
8
|
+
})(WorldLockStatus || (WorldLockStatus = {}));
|
|
9
|
+
/**
|
|
10
|
+
* World entity
|
|
11
|
+
* Represents a Minecraft world with lock management
|
|
12
|
+
*/
|
|
13
|
+
export class World {
|
|
14
|
+
_name;
|
|
15
|
+
_path;
|
|
16
|
+
_lockStatus;
|
|
17
|
+
_lock;
|
|
18
|
+
_sizeBytes;
|
|
19
|
+
_lastModified;
|
|
20
|
+
constructor(name, path) {
|
|
21
|
+
this._name = name;
|
|
22
|
+
this._path = path;
|
|
23
|
+
this._lockStatus = WorldLockStatus.UNLOCKED;
|
|
24
|
+
}
|
|
25
|
+
get name() {
|
|
26
|
+
return this._name;
|
|
27
|
+
}
|
|
28
|
+
get path() {
|
|
29
|
+
return this._path;
|
|
30
|
+
}
|
|
31
|
+
get lockStatus() {
|
|
32
|
+
return this._lockStatus;
|
|
33
|
+
}
|
|
34
|
+
get lock() {
|
|
35
|
+
return this._lock;
|
|
36
|
+
}
|
|
37
|
+
get isLocked() {
|
|
38
|
+
return this._lockStatus === WorldLockStatus.LOCKED;
|
|
39
|
+
}
|
|
40
|
+
get isUnlocked() {
|
|
41
|
+
return this._lockStatus === WorldLockStatus.UNLOCKED;
|
|
42
|
+
}
|
|
43
|
+
get lockedBy() {
|
|
44
|
+
return this._lock?.serverName;
|
|
45
|
+
}
|
|
46
|
+
get sizeBytes() {
|
|
47
|
+
return this._sizeBytes;
|
|
48
|
+
}
|
|
49
|
+
get lastModified() {
|
|
50
|
+
return this._lastModified;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get human-readable size
|
|
54
|
+
*/
|
|
55
|
+
get sizeFormatted() {
|
|
56
|
+
if (!this._sizeBytes)
|
|
57
|
+
return 'Unknown';
|
|
58
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
59
|
+
let size = this._sizeBytes;
|
|
60
|
+
let unitIndex = 0;
|
|
61
|
+
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
62
|
+
size /= 1024;
|
|
63
|
+
unitIndex++;
|
|
64
|
+
}
|
|
65
|
+
return `${size.toFixed(1)}${units[unitIndex]}`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Lock the world to a server
|
|
69
|
+
*/
|
|
70
|
+
lockTo(serverName, pid) {
|
|
71
|
+
if (this._lockStatus === WorldLockStatus.LOCKED) {
|
|
72
|
+
throw new Error(`World '${this._name}' is already locked by '${this._lock?.serverName}'`);
|
|
73
|
+
}
|
|
74
|
+
this._lockStatus = WorldLockStatus.LOCKED;
|
|
75
|
+
this._lock = {
|
|
76
|
+
serverName,
|
|
77
|
+
timestamp: new Date(),
|
|
78
|
+
pid,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Release the lock
|
|
83
|
+
*/
|
|
84
|
+
release() {
|
|
85
|
+
this._lockStatus = WorldLockStatus.UNLOCKED;
|
|
86
|
+
this._lock = undefined;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Force release (for stale locks)
|
|
90
|
+
*/
|
|
91
|
+
forceRelease() {
|
|
92
|
+
this._lockStatus = WorldLockStatus.UNLOCKED;
|
|
93
|
+
this._lock = undefined;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Set world metadata
|
|
97
|
+
*/
|
|
98
|
+
setMetadata(sizeBytes, lastModified) {
|
|
99
|
+
this._sizeBytes = sizeBytes;
|
|
100
|
+
this._lastModified = lastModified;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check if lock is stale (older than specified minutes)
|
|
104
|
+
*/
|
|
105
|
+
isLockStale(maxAgeMinutes = 60) {
|
|
106
|
+
if (!this._lock)
|
|
107
|
+
return false;
|
|
108
|
+
const now = new Date();
|
|
109
|
+
const lockAge = (now.getTime() - this._lock.timestamp.getTime()) / (1000 * 60);
|
|
110
|
+
return lockAge > maxAgeMinutes;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create world from directory listing
|
|
114
|
+
*/
|
|
115
|
+
static fromDirectory(name, basePath) {
|
|
116
|
+
return new World(name, `${basePath}/${name}`);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create world with lock status
|
|
120
|
+
*/
|
|
121
|
+
static withLock(name, path, serverName, timestamp, pid) {
|
|
122
|
+
const world = new World(name, path);
|
|
123
|
+
world._lockStatus = WorldLockStatus.LOCKED;
|
|
124
|
+
world._lock = { serverName, timestamp, pid };
|
|
125
|
+
return world;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=World.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"World.js","sourceRoot":"","sources":["../../../src/domain/entities/World.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { ServerName, ServerType, ServerTypeEnum, type ServerTypeInfo, McVersion, Memory, WorldOptions, WorldSetupType, type WorldOptionsData, } from './value-objects/index.js';
|
|
2
|
+
export { Server, ServerStatus, type ServerConfig, World, WorldLockStatus, type WorldLock, } from './entities/index.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,KAAK,cAAc,EACnB,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,EACd,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,EACL,eAAe,EACf,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Value Objects
|
|
2
|
+
export { ServerName, ServerType, ServerTypeEnum, McVersion, Memory, WorldOptions, WorldSetupType, } from './value-objects/index.js';
|
|
3
|
+
// Entities
|
|
4
|
+
export { Server, ServerStatus, World, WorldLockStatus, } from './entities/index.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EAEd,SAAS,EACT,MAAM,EACN,YAAY,EACZ,cAAc,GAEf,MAAM,0BAA0B,CAAC;AAElC,WAAW;AACX,OAAO,EACL,MAAM,EACN,YAAY,EAEZ,KAAK,EACL,eAAe,GAEhB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* McVersion Value Object
|
|
3
|
+
* Represents a validated Minecraft version
|
|
4
|
+
*/
|
|
5
|
+
export declare class McVersion {
|
|
6
|
+
private readonly _value;
|
|
7
|
+
private readonly _major;
|
|
8
|
+
private readonly _minor;
|
|
9
|
+
private readonly _patch;
|
|
10
|
+
private constructor();
|
|
11
|
+
get value(): string;
|
|
12
|
+
get major(): number;
|
|
13
|
+
get minor(): number;
|
|
14
|
+
get patch(): number;
|
|
15
|
+
/**
|
|
16
|
+
* Returns the recommended Java version for this Minecraft version
|
|
17
|
+
*/
|
|
18
|
+
get recommendedJavaVersion(): number;
|
|
19
|
+
/**
|
|
20
|
+
* Check if this version is compatible with Java version
|
|
21
|
+
*/
|
|
22
|
+
isCompatibleWithJava(javaVersion: number): boolean;
|
|
23
|
+
static create(value: string): McVersion;
|
|
24
|
+
static latest(): McVersion;
|
|
25
|
+
/**
|
|
26
|
+
* Compare versions
|
|
27
|
+
* Returns: negative if this < other, 0 if equal, positive if this > other
|
|
28
|
+
*/
|
|
29
|
+
compareTo(other: McVersion): number;
|
|
30
|
+
isNewerThan(other: McVersion): boolean;
|
|
31
|
+
isOlderThan(other: McVersion): boolean;
|
|
32
|
+
equals(other: McVersion): boolean;
|
|
33
|
+
toString(): string;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=McVersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McVersion.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/McVersion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO;IASP,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,sBAAsB,IAAI,MAAM,CAenC;IAED;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;IAsCvC,MAAM,CAAC,MAAM,IAAI,SAAS;IAI1B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAenC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAItC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAItC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAIjC,QAAQ,IAAI,MAAM;CAGnB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* McVersion Value Object
|
|
3
|
+
* Represents a validated Minecraft version
|
|
4
|
+
*/
|
|
5
|
+
export class McVersion {
|
|
6
|
+
_value;
|
|
7
|
+
_major;
|
|
8
|
+
_minor;
|
|
9
|
+
_patch;
|
|
10
|
+
constructor(_value, _major, _minor, _patch) {
|
|
11
|
+
this._value = _value;
|
|
12
|
+
this._major = _major;
|
|
13
|
+
this._minor = _minor;
|
|
14
|
+
this._patch = _patch;
|
|
15
|
+
Object.freeze(this);
|
|
16
|
+
}
|
|
17
|
+
get value() {
|
|
18
|
+
return this._value;
|
|
19
|
+
}
|
|
20
|
+
get major() {
|
|
21
|
+
return this._major;
|
|
22
|
+
}
|
|
23
|
+
get minor() {
|
|
24
|
+
return this._minor;
|
|
25
|
+
}
|
|
26
|
+
get patch() {
|
|
27
|
+
return this._patch;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns the recommended Java version for this Minecraft version
|
|
31
|
+
*/
|
|
32
|
+
get recommendedJavaVersion() {
|
|
33
|
+
// Minecraft 1.21+ requires Java 21
|
|
34
|
+
if (this._major >= 1 && this._minor >= 21) {
|
|
35
|
+
return 21;
|
|
36
|
+
}
|
|
37
|
+
// Minecraft 1.18-1.20.x requires Java 17
|
|
38
|
+
if (this._major >= 1 && this._minor >= 18) {
|
|
39
|
+
return 17;
|
|
40
|
+
}
|
|
41
|
+
// Minecraft 1.17 requires Java 16
|
|
42
|
+
if (this._major >= 1 && this._minor === 17) {
|
|
43
|
+
return 16;
|
|
44
|
+
}
|
|
45
|
+
// Older versions use Java 8
|
|
46
|
+
return 8;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if this version is compatible with Java version
|
|
50
|
+
*/
|
|
51
|
+
isCompatibleWithJava(javaVersion) {
|
|
52
|
+
return javaVersion >= this.recommendedJavaVersion;
|
|
53
|
+
}
|
|
54
|
+
static create(value) {
|
|
55
|
+
const trimmed = value.trim();
|
|
56
|
+
// Special case for "LATEST"
|
|
57
|
+
if (trimmed.toUpperCase() === 'LATEST') {
|
|
58
|
+
return new McVersion('LATEST', 0, 0, 0);
|
|
59
|
+
}
|
|
60
|
+
// Parse semantic version: 1.21.1, 1.20, 1.19.4
|
|
61
|
+
const versionMatch = trimmed.match(/^(\d+)\.(\d+)(?:\.(\d+))?$/);
|
|
62
|
+
if (!versionMatch) {
|
|
63
|
+
throw new Error(`Invalid Minecraft version format: ${value}. Expected format: X.Y or X.Y.Z (e.g., 1.21 or 1.21.1)`);
|
|
64
|
+
}
|
|
65
|
+
const major = parseInt(versionMatch[1], 10);
|
|
66
|
+
const minor = parseInt(versionMatch[2], 10);
|
|
67
|
+
const patch = versionMatch[3] ? parseInt(versionMatch[3], 10) : 0;
|
|
68
|
+
// Minecraft versions start at 1.0
|
|
69
|
+
if (major < 1) {
|
|
70
|
+
throw new Error('Minecraft major version must be at least 1');
|
|
71
|
+
}
|
|
72
|
+
// Current versions are around 1.21, so limit to reasonable range
|
|
73
|
+
if (major === 1 && (minor < 0 || minor > 99)) {
|
|
74
|
+
throw new Error('Minecraft minor version must be between 0 and 99');
|
|
75
|
+
}
|
|
76
|
+
if (patch < 0 || patch > 99) {
|
|
77
|
+
throw new Error('Minecraft patch version must be between 0 and 99');
|
|
78
|
+
}
|
|
79
|
+
return new McVersion(trimmed, major, minor, patch);
|
|
80
|
+
}
|
|
81
|
+
static latest() {
|
|
82
|
+
return new McVersion('LATEST', 0, 0, 0);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Compare versions
|
|
86
|
+
* Returns: negative if this < other, 0 if equal, positive if this > other
|
|
87
|
+
*/
|
|
88
|
+
compareTo(other) {
|
|
89
|
+
// LATEST is always considered newest
|
|
90
|
+
if (this._value === 'LATEST' && other._value !== 'LATEST')
|
|
91
|
+
return 1;
|
|
92
|
+
if (this._value !== 'LATEST' && other._value === 'LATEST')
|
|
93
|
+
return -1;
|
|
94
|
+
if (this._value === 'LATEST' && other._value === 'LATEST')
|
|
95
|
+
return 0;
|
|
96
|
+
if (this._major !== other._major) {
|
|
97
|
+
return this._major - other._major;
|
|
98
|
+
}
|
|
99
|
+
if (this._minor !== other._minor) {
|
|
100
|
+
return this._minor - other._minor;
|
|
101
|
+
}
|
|
102
|
+
return this._patch - other._patch;
|
|
103
|
+
}
|
|
104
|
+
isNewerThan(other) {
|
|
105
|
+
return this.compareTo(other) > 0;
|
|
106
|
+
}
|
|
107
|
+
isOlderThan(other) {
|
|
108
|
+
return this.compareTo(other) < 0;
|
|
109
|
+
}
|
|
110
|
+
equals(other) {
|
|
111
|
+
return this._value === other._value;
|
|
112
|
+
}
|
|
113
|
+
toString() {
|
|
114
|
+
return this._value;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=McVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McVersion.js","sourceRoot":"","sources":["../../../src/domain/value-objects/McVersion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Value Object
|
|
3
|
+
* Represents JVM memory allocation (e.g., "2G", "4G", "512M")
|
|
4
|
+
*/
|
|
5
|
+
export declare class Memory {
|
|
6
|
+
private readonly _value;
|
|
7
|
+
private readonly _bytes;
|
|
8
|
+
private constructor();
|
|
9
|
+
get value(): string;
|
|
10
|
+
get bytes(): number;
|
|
11
|
+
get megabytes(): number;
|
|
12
|
+
get gigabytes(): number;
|
|
13
|
+
/**
|
|
14
|
+
* Returns formatted string (e.g., "4G" or "512M")
|
|
15
|
+
*/
|
|
16
|
+
get formatted(): string;
|
|
17
|
+
static create(value: string): Memory;
|
|
18
|
+
static fromGigabytes(gb: number): Memory;
|
|
19
|
+
static fromMegabytes(mb: number): Memory;
|
|
20
|
+
/**
|
|
21
|
+
* Default memory allocation (4G)
|
|
22
|
+
*/
|
|
23
|
+
static default(): Memory;
|
|
24
|
+
/**
|
|
25
|
+
* Recommended minimum for vanilla servers
|
|
26
|
+
*/
|
|
27
|
+
static minimum(): Memory;
|
|
28
|
+
/**
|
|
29
|
+
* Recommended for modded servers
|
|
30
|
+
*/
|
|
31
|
+
static forMods(): Memory;
|
|
32
|
+
isGreaterThan(other: Memory): boolean;
|
|
33
|
+
isLessThan(other: Memory): boolean;
|
|
34
|
+
equals(other: Memory): boolean;
|
|
35
|
+
toString(): string;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/Memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,MAAM;IAEf,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,OAAO;IAOP,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAMtB;IAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA8CpC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIxC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIxC;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIrC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIlC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9B,QAAQ,IAAI,MAAM;CAGnB"}
|