@minecraft-docker/shared 1.6.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.
Files changed (169) hide show
  1. package/dist/application/index.d.ts +3 -0
  2. package/dist/application/index.d.ts.map +1 -0
  3. package/dist/application/index.js +5 -0
  4. package/dist/application/index.js.map +1 -0
  5. package/dist/application/ports/inbound/IBackupUseCase.d.ts +69 -0
  6. package/dist/application/ports/inbound/IBackupUseCase.d.ts.map +1 -0
  7. package/dist/application/ports/inbound/IBackupUseCase.js +2 -0
  8. package/dist/application/ports/inbound/IBackupUseCase.js.map +1 -0
  9. package/dist/application/ports/inbound/ICreateServerUseCase.d.ts +32 -0
  10. package/dist/application/ports/inbound/ICreateServerUseCase.d.ts.map +1 -0
  11. package/dist/application/ports/inbound/ICreateServerUseCase.js +2 -0
  12. package/dist/application/ports/inbound/ICreateServerUseCase.js.map +1 -0
  13. package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts +26 -0
  14. package/dist/application/ports/inbound/IDeleteServerUseCase.d.ts.map +1 -0
  15. package/dist/application/ports/inbound/IDeleteServerUseCase.js +2 -0
  16. package/dist/application/ports/inbound/IDeleteServerUseCase.js.map +1 -0
  17. package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts +47 -0
  18. package/dist/application/ports/inbound/IPlayerLookupUseCase.d.ts.map +1 -0
  19. package/dist/application/ports/inbound/IPlayerLookupUseCase.js +2 -0
  20. package/dist/application/ports/inbound/IPlayerLookupUseCase.js.map +1 -0
  21. package/dist/application/ports/inbound/IServerStatusUseCase.d.ts +34 -0
  22. package/dist/application/ports/inbound/IServerStatusUseCase.d.ts.map +1 -0
  23. package/dist/application/ports/inbound/IServerStatusUseCase.js +2 -0
  24. package/dist/application/ports/inbound/IServerStatusUseCase.js.map +1 -0
  25. package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts +56 -0
  26. package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts.map +1 -0
  27. package/dist/application/ports/inbound/IWorldManagementUseCase.js +2 -0
  28. package/dist/application/ports/inbound/IWorldManagementUseCase.js.map +1 -0
  29. package/dist/application/ports/inbound/index.d.ts +7 -0
  30. package/dist/application/ports/inbound/index.d.ts.map +1 -0
  31. package/dist/application/ports/inbound/index.js +2 -0
  32. package/dist/application/ports/inbound/index.js.map +1 -0
  33. package/dist/application/ports/index.d.ts +3 -0
  34. package/dist/application/ports/index.d.ts.map +1 -0
  35. package/dist/application/ports/index.js +2 -0
  36. package/dist/application/ports/index.js.map +1 -0
  37. package/dist/application/ports/outbound/IDocProvider.d.ts +73 -0
  38. package/dist/application/ports/outbound/IDocProvider.d.ts.map +1 -0
  39. package/dist/application/ports/outbound/IDocProvider.js +2 -0
  40. package/dist/application/ports/outbound/IDocProvider.js.map +1 -0
  41. package/dist/application/ports/outbound/IPromptPort.d.ts +136 -0
  42. package/dist/application/ports/outbound/IPromptPort.d.ts.map +1 -0
  43. package/dist/application/ports/outbound/IPromptPort.js +2 -0
  44. package/dist/application/ports/outbound/IPromptPort.js.map +1 -0
  45. package/dist/application/ports/outbound/IServerRepository.d.ts +54 -0
  46. package/dist/application/ports/outbound/IServerRepository.d.ts.map +1 -0
  47. package/dist/application/ports/outbound/IServerRepository.js +2 -0
  48. package/dist/application/ports/outbound/IServerRepository.js.map +1 -0
  49. package/dist/application/ports/outbound/IShellPort.d.ts +106 -0
  50. package/dist/application/ports/outbound/IShellPort.d.ts.map +1 -0
  51. package/dist/application/ports/outbound/IShellPort.js +2 -0
  52. package/dist/application/ports/outbound/IShellPort.js.map +1 -0
  53. package/dist/application/ports/outbound/IWorldRepository.d.ts +71 -0
  54. package/dist/application/ports/outbound/IWorldRepository.d.ts.map +1 -0
  55. package/dist/application/ports/outbound/IWorldRepository.js +2 -0
  56. package/dist/application/ports/outbound/IWorldRepository.js.map +1 -0
  57. package/dist/application/ports/outbound/index.d.ts +6 -0
  58. package/dist/application/ports/outbound/index.d.ts.map +1 -0
  59. package/dist/application/ports/outbound/index.js +2 -0
  60. package/dist/application/ports/outbound/index.js.map +1 -0
  61. package/dist/application/use-cases/BackupUseCase.d.ts +35 -0
  62. package/dist/application/use-cases/BackupUseCase.d.ts.map +1 -0
  63. package/dist/application/use-cases/BackupUseCase.js +222 -0
  64. package/dist/application/use-cases/BackupUseCase.js.map +1 -0
  65. package/dist/application/use-cases/CreateServerUseCase.d.ts +22 -0
  66. package/dist/application/use-cases/CreateServerUseCase.d.ts.map +1 -0
  67. package/dist/application/use-cases/CreateServerUseCase.js +145 -0
  68. package/dist/application/use-cases/CreateServerUseCase.js.map +1 -0
  69. package/dist/application/use-cases/DeleteServerUseCase.d.ts +24 -0
  70. package/dist/application/use-cases/DeleteServerUseCase.d.ts.map +1 -0
  71. package/dist/application/use-cases/DeleteServerUseCase.js +108 -0
  72. package/dist/application/use-cases/DeleteServerUseCase.js.map +1 -0
  73. package/dist/application/use-cases/PlayerLookupUseCase.d.ts +23 -0
  74. package/dist/application/use-cases/PlayerLookupUseCase.d.ts.map +1 -0
  75. package/dist/application/use-cases/PlayerLookupUseCase.js +130 -0
  76. package/dist/application/use-cases/PlayerLookupUseCase.js.map +1 -0
  77. package/dist/application/use-cases/ServerStatusUseCase.d.ts +30 -0
  78. package/dist/application/use-cases/ServerStatusUseCase.d.ts.map +1 -0
  79. package/dist/application/use-cases/ServerStatusUseCase.js +117 -0
  80. package/dist/application/use-cases/ServerStatusUseCase.js.map +1 -0
  81. package/dist/application/use-cases/WorldManagementUseCase.d.ts +33 -0
  82. package/dist/application/use-cases/WorldManagementUseCase.d.ts.map +1 -0
  83. package/dist/application/use-cases/WorldManagementUseCase.js +239 -0
  84. package/dist/application/use-cases/WorldManagementUseCase.js.map +1 -0
  85. package/dist/application/use-cases/index.d.ts +7 -0
  86. package/dist/application/use-cases/index.d.ts.map +1 -0
  87. package/dist/application/use-cases/index.js +7 -0
  88. package/dist/application/use-cases/index.js.map +1 -0
  89. package/dist/docker/index.d.ts +111 -0
  90. package/dist/docker/index.d.ts.map +1 -0
  91. package/dist/docker/index.js +532 -0
  92. package/dist/docker/index.js.map +1 -0
  93. package/dist/domain/entities/Server.d.ts +77 -0
  94. package/dist/domain/entities/Server.d.ts.map +1 -0
  95. package/dist/domain/entities/Server.js +138 -0
  96. package/dist/domain/entities/Server.js.map +1 -0
  97. package/dist/domain/entities/World.d.ts +70 -0
  98. package/dist/domain/entities/World.d.ts.map +1 -0
  99. package/dist/domain/entities/World.js +128 -0
  100. package/dist/domain/entities/World.js.map +1 -0
  101. package/dist/domain/entities/index.d.ts +3 -0
  102. package/dist/domain/entities/index.d.ts.map +1 -0
  103. package/dist/domain/entities/index.js +3 -0
  104. package/dist/domain/entities/index.js.map +1 -0
  105. package/dist/domain/index.d.ts +3 -0
  106. package/dist/domain/index.d.ts.map +1 -0
  107. package/dist/domain/index.js +5 -0
  108. package/dist/domain/index.js.map +1 -0
  109. package/dist/domain/value-objects/McVersion.d.ts +35 -0
  110. package/dist/domain/value-objects/McVersion.d.ts.map +1 -0
  111. package/dist/domain/value-objects/McVersion.js +117 -0
  112. package/dist/domain/value-objects/McVersion.js.map +1 -0
  113. package/dist/domain/value-objects/Memory.d.ts +37 -0
  114. package/dist/domain/value-objects/Memory.d.ts.map +1 -0
  115. package/dist/domain/value-objects/Memory.js +107 -0
  116. package/dist/domain/value-objects/Memory.js.map +1 -0
  117. package/dist/domain/value-objects/ServerName.d.ts +21 -0
  118. package/dist/domain/value-objects/ServerName.d.ts.map +1 -0
  119. package/dist/domain/value-objects/ServerName.js +58 -0
  120. package/dist/domain/value-objects/ServerName.js.map +1 -0
  121. package/dist/domain/value-objects/ServerType.d.ts +39 -0
  122. package/dist/domain/value-objects/ServerType.d.ts.map +1 -0
  123. package/dist/domain/value-objects/ServerType.js +128 -0
  124. package/dist/domain/value-objects/ServerType.js.map +1 -0
  125. package/dist/domain/value-objects/WorldOptions.d.ts +49 -0
  126. package/dist/domain/value-objects/WorldOptions.d.ts.map +1 -0
  127. package/dist/domain/value-objects/WorldOptions.js +149 -0
  128. package/dist/domain/value-objects/WorldOptions.js.map +1 -0
  129. package/dist/domain/value-objects/index.d.ts +6 -0
  130. package/dist/domain/value-objects/index.d.ts.map +1 -0
  131. package/dist/domain/value-objects/index.js +6 -0
  132. package/dist/domain/value-objects/index.js.map +1 -0
  133. package/dist/index.d.ts +7 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +17 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/infrastructure/adapters/DocsAdapter.d.ts +45 -0
  138. package/dist/infrastructure/adapters/DocsAdapter.d.ts.map +1 -0
  139. package/dist/infrastructure/adapters/DocsAdapter.js +490 -0
  140. package/dist/infrastructure/adapters/DocsAdapter.js.map +1 -0
  141. package/dist/infrastructure/adapters/ServerRepository.d.ts +49 -0
  142. package/dist/infrastructure/adapters/ServerRepository.d.ts.map +1 -0
  143. package/dist/infrastructure/adapters/ServerRepository.js +206 -0
  144. package/dist/infrastructure/adapters/ServerRepository.js.map +1 -0
  145. package/dist/infrastructure/adapters/ShellAdapter.d.ts +39 -0
  146. package/dist/infrastructure/adapters/ShellAdapter.d.ts.map +1 -0
  147. package/dist/infrastructure/adapters/ShellAdapter.js +188 -0
  148. package/dist/infrastructure/adapters/ShellAdapter.js.map +1 -0
  149. package/dist/infrastructure/adapters/WorldRepository.d.ts +55 -0
  150. package/dist/infrastructure/adapters/WorldRepository.d.ts.map +1 -0
  151. package/dist/infrastructure/adapters/WorldRepository.js +213 -0
  152. package/dist/infrastructure/adapters/WorldRepository.js.map +1 -0
  153. package/dist/infrastructure/adapters/index.d.ts +9 -0
  154. package/dist/infrastructure/adapters/index.d.ts.map +1 -0
  155. package/dist/infrastructure/adapters/index.js +9 -0
  156. package/dist/infrastructure/adapters/index.js.map +1 -0
  157. package/dist/infrastructure/index.d.ts +6 -0
  158. package/dist/infrastructure/index.d.ts.map +1 -0
  159. package/dist/infrastructure/index.js +6 -0
  160. package/dist/infrastructure/index.js.map +1 -0
  161. package/dist/types/index.d.ts +151 -0
  162. package/dist/types/index.d.ts.map +1 -0
  163. package/dist/types/index.js +2 -0
  164. package/dist/types/index.js.map +1 -0
  165. package/dist/utils/index.d.ts +81 -0
  166. package/dist/utils/index.d.ts.map +1 -0
  167. package/dist/utils/index.js +200 -0
  168. package/dist/utils/index.js.map +1 -0
  169. 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,3 @@
1
+ export { Server, ServerStatus, type ServerConfig } from './Server.js';
2
+ export { World, WorldLockStatus, type WorldLock } from './World.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { Server, ServerStatus } from './Server.js';
2
+ export { World, WorldLockStatus } from './World.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}