@minecraft-docker/mcctl 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.
- package/dist/application/index.d.ts +2 -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/commands/backup.d.ts +16 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +182 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/ban.d.ts +14 -0
- package/dist/commands/ban.d.ts.map +1 -0
- package/dist/commands/ban.js +418 -0
- package/dist/commands/ban.js.map +1 -0
- package/dist/commands/config.d.ts +18 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +106 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +22 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +83 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +17 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +71 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/exec.d.ts +10 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +29 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +18 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +186 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/kick.d.ts +12 -0
- package/dist/commands/kick.d.ts.map +1 -0
- package/dist/commands/kick.js +71 -0
- package/dist/commands/kick.js.map +1 -0
- package/dist/commands/migrate.d.ts +18 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +470 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/op.d.ts +12 -0
- package/dist/commands/op.d.ts.map +1 -0
- package/dist/commands/op.js +220 -0
- package/dist/commands/op.js.map +1 -0
- package/dist/commands/player-online.d.ts +11 -0
- package/dist/commands/player-online.d.ts.map +1 -0
- package/dist/commands/player-online.js +151 -0
- package/dist/commands/player-online.js.map +1 -0
- package/dist/commands/player.d.ts +18 -0
- package/dist/commands/player.d.ts.map +1 -0
- package/dist/commands/player.js +352 -0
- package/dist/commands/player.js.map +1 -0
- package/dist/commands/server-backup.d.ts +36 -0
- package/dist/commands/server-backup.d.ts.map +1 -0
- package/dist/commands/server-backup.js +320 -0
- package/dist/commands/server-backup.js.map +1 -0
- package/dist/commands/server-restore.d.ts +13 -0
- package/dist/commands/server-restore.d.ts.map +1 -0
- package/dist/commands/server-restore.js +294 -0
- package/dist/commands/server-restore.js.map +1 -0
- package/dist/commands/status.d.ts +13 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +325 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/whitelist.d.ts +12 -0
- package/dist/commands/whitelist.d.ts.map +1 -0
- package/dist/commands/whitelist.js +316 -0
- package/dist/commands/whitelist.js.map +1 -0
- package/dist/commands/world.d.ts +16 -0
- package/dist/commands/world.d.ts.map +1 -0
- package/dist/commands/world.js +135 -0
- package/dist/commands/world.js.map +1 -0
- package/dist/domain/index.d.ts +2 -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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +609 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts +29 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.js +419 -0
- package/dist/infrastructure/adapters/ClackPromptAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +3 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -0
- package/dist/infrastructure/adapters/index.js +5 -0
- package/dist/infrastructure/adapters/index.js.map +1 -0
- package/dist/infrastructure/di/container.d.ts +47 -0
- package/dist/infrastructure/di/container.d.ts.map +1 -0
- package/dist/infrastructure/di/container.js +140 -0
- package/dist/infrastructure/di/container.js.map +1 -0
- package/dist/infrastructure/di/index.d.ts +2 -0
- package/dist/infrastructure/di/index.d.ts.map +1 -0
- package/dist/infrastructure/di/index.js +2 -0
- package/dist/infrastructure/di/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +4 -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/lib/mojang-api.d.ts +51 -0
- package/dist/lib/mojang-api.d.ts.map +1 -0
- package/dist/lib/mojang-api.js +136 -0
- package/dist/lib/mojang-api.js.map +1 -0
- package/dist/lib/player-cache.d.ts +79 -0
- package/dist/lib/player-cache.d.ts.map +1 -0
- package/dist/lib/player-cache.js +302 -0
- package/dist/lib/player-cache.js.map +1 -0
- package/dist/lib/player-json.d.ts +69 -0
- package/dist/lib/player-json.d.ts.map +1 -0
- package/dist/lib/player-json.js +96 -0
- package/dist/lib/player-json.js.map +1 -0
- package/dist/lib/prompts/action-select.d.ts +23 -0
- package/dist/lib/prompts/action-select.d.ts.map +1 -0
- package/dist/lib/prompts/action-select.js +124 -0
- package/dist/lib/prompts/action-select.js.map +1 -0
- package/dist/lib/prompts/index.d.ts +7 -0
- package/dist/lib/prompts/index.d.ts.map +1 -0
- package/dist/lib/prompts/index.js +7 -0
- package/dist/lib/prompts/index.js.map +1 -0
- package/dist/lib/prompts/player-select.d.ts +25 -0
- package/dist/lib/prompts/player-select.d.ts.map +1 -0
- package/dist/lib/prompts/player-select.js +122 -0
- package/dist/lib/prompts/player-select.js.map +1 -0
- package/dist/lib/prompts/server-select.d.ts +26 -0
- package/dist/lib/prompts/server-select.d.ts.map +1 -0
- package/dist/lib/prompts/server-select.js +99 -0
- package/dist/lib/prompts/server-select.js.map +1 -0
- package/dist/lib/rcon.d.ts +53 -0
- package/dist/lib/rcon.d.ts.map +1 -0
- package/dist/lib/rcon.js +131 -0
- package/dist/lib/rcon.js.map +1 -0
- package/dist/lib/shell.d.ts +109 -0
- package/dist/lib/shell.d.ts.map +1 -0
- package/dist/lib/shell.js +318 -0
- package/dist/lib/shell.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import pc from 'picocolors';
|
|
3
|
+
import { ServerName, ServerType, McVersion, Memory, WorldOptions, } from '@minecraft-docker/shared';
|
|
4
|
+
/**
|
|
5
|
+
* ClackPromptAdapter
|
|
6
|
+
* Implements IPromptPort using @clack/prompts
|
|
7
|
+
*/
|
|
8
|
+
export class ClackPromptAdapter {
|
|
9
|
+
// ========================================
|
|
10
|
+
// Basic Prompts
|
|
11
|
+
// ========================================
|
|
12
|
+
intro(message) {
|
|
13
|
+
p.intro(pc.bgCyan(pc.black(` ${message} `)));
|
|
14
|
+
}
|
|
15
|
+
outro(message) {
|
|
16
|
+
p.outro(pc.green(message));
|
|
17
|
+
}
|
|
18
|
+
async text(options) {
|
|
19
|
+
const result = await p.text({
|
|
20
|
+
message: options.message,
|
|
21
|
+
placeholder: options.placeholder,
|
|
22
|
+
initialValue: options.initialValue,
|
|
23
|
+
validate: options.validate,
|
|
24
|
+
});
|
|
25
|
+
if (this.isCancel(result)) {
|
|
26
|
+
this.handleCancel();
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
async select(options) {
|
|
31
|
+
// @clack/prompts requires label for non-primitive types
|
|
32
|
+
const clackOptions = options.options.map((opt) => ({
|
|
33
|
+
value: opt.value,
|
|
34
|
+
label: opt.label,
|
|
35
|
+
hint: opt.hint,
|
|
36
|
+
}));
|
|
37
|
+
const result = await p.select({
|
|
38
|
+
message: options.message,
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
options: clackOptions,
|
|
41
|
+
initialValue: options.initialValue,
|
|
42
|
+
});
|
|
43
|
+
if (this.isCancel(result)) {
|
|
44
|
+
this.handleCancel();
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
async confirm(options) {
|
|
49
|
+
const result = await p.confirm({
|
|
50
|
+
message: options.message,
|
|
51
|
+
initialValue: options.initialValue,
|
|
52
|
+
});
|
|
53
|
+
if (this.isCancel(result)) {
|
|
54
|
+
this.handleCancel();
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
// ========================================
|
|
59
|
+
// Domain-Specific Prompts
|
|
60
|
+
// ========================================
|
|
61
|
+
async promptServerName() {
|
|
62
|
+
const name = await p.text({
|
|
63
|
+
message: 'Server name:',
|
|
64
|
+
placeholder: 'myserver',
|
|
65
|
+
validate: (value) => {
|
|
66
|
+
try {
|
|
67
|
+
ServerName.create(value);
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return error instanceof Error ? error.message : 'Invalid server name';
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
if (this.isCancel(name)) {
|
|
76
|
+
this.handleCancel();
|
|
77
|
+
}
|
|
78
|
+
return ServerName.create(name);
|
|
79
|
+
}
|
|
80
|
+
async promptServerType() {
|
|
81
|
+
const types = ServerType.getAll();
|
|
82
|
+
const result = await p.select({
|
|
83
|
+
message: 'Server type:',
|
|
84
|
+
options: types.map((t) => ({
|
|
85
|
+
value: t.value,
|
|
86
|
+
label: t.label + (t.recommended ? ' (Recommended)' : ''),
|
|
87
|
+
hint: t.description,
|
|
88
|
+
})),
|
|
89
|
+
initialValue: 'PAPER',
|
|
90
|
+
});
|
|
91
|
+
if (this.isCancel(result)) {
|
|
92
|
+
this.handleCancel();
|
|
93
|
+
}
|
|
94
|
+
return ServerType.create(result);
|
|
95
|
+
}
|
|
96
|
+
async promptMcVersion(serverType) {
|
|
97
|
+
const commonVersions = ['LATEST', '1.21.1', '1.21', '1.20.4', '1.20.1', '1.19.4'];
|
|
98
|
+
const result = await p.select({
|
|
99
|
+
message: 'Minecraft version:',
|
|
100
|
+
options: [
|
|
101
|
+
...commonVersions.map((v) => ({
|
|
102
|
+
value: v,
|
|
103
|
+
label: v === 'LATEST' ? 'Latest' : v,
|
|
104
|
+
hint: v === 'LATEST' ? 'Auto-detect latest version' : undefined,
|
|
105
|
+
})),
|
|
106
|
+
{ value: 'other', label: 'Other...', hint: 'Enter a specific version' },
|
|
107
|
+
],
|
|
108
|
+
initialValue: 'LATEST',
|
|
109
|
+
});
|
|
110
|
+
if (this.isCancel(result)) {
|
|
111
|
+
this.handleCancel();
|
|
112
|
+
}
|
|
113
|
+
if (result === 'other') {
|
|
114
|
+
const customVersion = await p.text({
|
|
115
|
+
message: 'Enter Minecraft version:',
|
|
116
|
+
placeholder: '1.21.1',
|
|
117
|
+
validate: (value) => {
|
|
118
|
+
try {
|
|
119
|
+
McVersion.create(value);
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return error instanceof Error ? error.message : 'Invalid version';
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
if (this.isCancel(customVersion)) {
|
|
128
|
+
this.handleCancel();
|
|
129
|
+
}
|
|
130
|
+
return McVersion.create(customVersion);
|
|
131
|
+
}
|
|
132
|
+
return McVersion.create(result);
|
|
133
|
+
}
|
|
134
|
+
async promptMemory() {
|
|
135
|
+
const memoryOptions = [
|
|
136
|
+
{ value: '2G', label: '2 GB', hint: 'Minimum for vanilla' },
|
|
137
|
+
{ value: '4G', label: '4 GB', hint: 'Recommended for most servers' },
|
|
138
|
+
{ value: '6G', label: '6 GB', hint: 'For modded servers' },
|
|
139
|
+
{ value: '8G', label: '8 GB', hint: 'For large modpacks' },
|
|
140
|
+
{ value: 'other', label: 'Other...', hint: 'Enter custom value' },
|
|
141
|
+
];
|
|
142
|
+
const result = await p.select({
|
|
143
|
+
message: 'Memory allocation:',
|
|
144
|
+
options: memoryOptions,
|
|
145
|
+
initialValue: '4G',
|
|
146
|
+
});
|
|
147
|
+
if (this.isCancel(result)) {
|
|
148
|
+
this.handleCancel();
|
|
149
|
+
}
|
|
150
|
+
if (result === 'other') {
|
|
151
|
+
const customMemory = await p.text({
|
|
152
|
+
message: 'Enter memory (e.g., 4G, 512M):',
|
|
153
|
+
placeholder: '4G',
|
|
154
|
+
validate: (value) => {
|
|
155
|
+
try {
|
|
156
|
+
Memory.create(value);
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return error instanceof Error ? error.message : 'Invalid memory format';
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
if (this.isCancel(customMemory)) {
|
|
165
|
+
this.handleCancel();
|
|
166
|
+
}
|
|
167
|
+
return Memory.create(customMemory);
|
|
168
|
+
}
|
|
169
|
+
return Memory.create(result);
|
|
170
|
+
}
|
|
171
|
+
async promptWorldOptions() {
|
|
172
|
+
const setupType = await p.select({
|
|
173
|
+
message: 'World setup:',
|
|
174
|
+
options: [
|
|
175
|
+
{ value: 'new', label: 'New world', hint: 'Generate a new world' },
|
|
176
|
+
{ value: 'new-seed', label: 'New world with seed', hint: 'Generate with specific seed' },
|
|
177
|
+
{ value: 'existing', label: 'Use existing world', hint: 'From worlds/ directory' },
|
|
178
|
+
{ value: 'download', label: 'Download from URL', hint: 'Download world ZIP' },
|
|
179
|
+
],
|
|
180
|
+
initialValue: 'new',
|
|
181
|
+
});
|
|
182
|
+
if (this.isCancel(setupType)) {
|
|
183
|
+
this.handleCancel();
|
|
184
|
+
}
|
|
185
|
+
switch (setupType) {
|
|
186
|
+
case 'new':
|
|
187
|
+
return WorldOptions.newWorld();
|
|
188
|
+
case 'new-seed': {
|
|
189
|
+
const seed = await p.text({
|
|
190
|
+
message: 'World seed:',
|
|
191
|
+
placeholder: '12345 or any string',
|
|
192
|
+
});
|
|
193
|
+
if (this.isCancel(seed)) {
|
|
194
|
+
this.handleCancel();
|
|
195
|
+
}
|
|
196
|
+
return WorldOptions.newWorld(seed);
|
|
197
|
+
}
|
|
198
|
+
case 'existing': {
|
|
199
|
+
const worldName = await p.text({
|
|
200
|
+
message: 'World name (from worlds/ directory):',
|
|
201
|
+
placeholder: 'survival',
|
|
202
|
+
validate: (value) => {
|
|
203
|
+
if (!value.trim()) {
|
|
204
|
+
return 'World name is required';
|
|
205
|
+
}
|
|
206
|
+
return undefined;
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
if (this.isCancel(worldName)) {
|
|
210
|
+
this.handleCancel();
|
|
211
|
+
}
|
|
212
|
+
return WorldOptions.existingWorld(worldName);
|
|
213
|
+
}
|
|
214
|
+
case 'download': {
|
|
215
|
+
const url = await p.text({
|
|
216
|
+
message: 'Download URL (ZIP file):',
|
|
217
|
+
placeholder: 'https://example.com/world.zip',
|
|
218
|
+
validate: (value) => {
|
|
219
|
+
try {
|
|
220
|
+
WorldOptions.downloadWorld(value);
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
return error instanceof Error ? error.message : 'Invalid URL';
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
if (this.isCancel(url)) {
|
|
229
|
+
this.handleCancel();
|
|
230
|
+
}
|
|
231
|
+
return WorldOptions.downloadWorld(url);
|
|
232
|
+
}
|
|
233
|
+
default:
|
|
234
|
+
return WorldOptions.newWorld();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async promptServerSelection(servers) {
|
|
238
|
+
const result = await p.select({
|
|
239
|
+
message: 'Select server:',
|
|
240
|
+
options: servers.map((s) => ({
|
|
241
|
+
value: s.name.value,
|
|
242
|
+
label: s.containerName,
|
|
243
|
+
hint: `${s.type.label} ${s.version.value} (${s.status}${s.hasPlayers ? `, ${s.playerCount} players` : ''})`,
|
|
244
|
+
})),
|
|
245
|
+
});
|
|
246
|
+
if (this.isCancel(result)) {
|
|
247
|
+
this.handleCancel();
|
|
248
|
+
}
|
|
249
|
+
const server = servers.find((s) => s.name.value === result);
|
|
250
|
+
if (!server) {
|
|
251
|
+
throw new Error('Server not found');
|
|
252
|
+
}
|
|
253
|
+
return server;
|
|
254
|
+
}
|
|
255
|
+
async promptWorldSelection(worlds) {
|
|
256
|
+
const result = await p.select({
|
|
257
|
+
message: 'Select world:',
|
|
258
|
+
options: worlds.map((w) => ({
|
|
259
|
+
value: w.name,
|
|
260
|
+
label: w.name,
|
|
261
|
+
hint: w.isLocked ? `Locked by ${w.lockedBy}` : `${w.sizeFormatted} (unlocked)`,
|
|
262
|
+
})),
|
|
263
|
+
});
|
|
264
|
+
if (this.isCancel(result)) {
|
|
265
|
+
this.handleCancel();
|
|
266
|
+
}
|
|
267
|
+
const world = worlds.find((w) => w.name === result);
|
|
268
|
+
if (!world) {
|
|
269
|
+
throw new Error('World not found');
|
|
270
|
+
}
|
|
271
|
+
return world;
|
|
272
|
+
}
|
|
273
|
+
async promptExistingWorldSelection(worlds) {
|
|
274
|
+
// Check if there are any worlds
|
|
275
|
+
if (worlds.length === 0) {
|
|
276
|
+
this.warn('No worlds found in worlds/ directory');
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
// Check if all worlds are in use by running servers
|
|
280
|
+
const selectableWorlds = worlds.filter((w) => w.category !== 'running');
|
|
281
|
+
if (selectableWorlds.length === 0) {
|
|
282
|
+
this.warn('All worlds are currently in use by running servers');
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
const options = [];
|
|
286
|
+
// Group by category: available, stopped, running
|
|
287
|
+
const available = worlds.filter((w) => w.category === 'available');
|
|
288
|
+
const stopped = worlds.filter((w) => w.category === 'stopped');
|
|
289
|
+
const running = worlds.filter((w) => w.category === 'running');
|
|
290
|
+
// Add available worlds
|
|
291
|
+
if (available.length > 0) {
|
|
292
|
+
options.push({
|
|
293
|
+
value: '__header_available__',
|
|
294
|
+
label: pc.green('── Available ──'),
|
|
295
|
+
hint: 'Free to use',
|
|
296
|
+
});
|
|
297
|
+
for (const w of available) {
|
|
298
|
+
options.push({
|
|
299
|
+
value: w.world.name,
|
|
300
|
+
label: ` ${w.world.name}`,
|
|
301
|
+
hint: w.world.sizeFormatted,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Add stopped server worlds
|
|
306
|
+
if (stopped.length > 0) {
|
|
307
|
+
options.push({
|
|
308
|
+
value: '__header_stopped__',
|
|
309
|
+
label: pc.yellow('── Server Stopped ──'),
|
|
310
|
+
hint: 'Selectable with warning',
|
|
311
|
+
});
|
|
312
|
+
for (const w of stopped) {
|
|
313
|
+
options.push({
|
|
314
|
+
value: w.world.name,
|
|
315
|
+
label: ` ${w.world.name}`,
|
|
316
|
+
hint: `Used by ${w.assignedServer} (stopped)`,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// Add running server worlds (disabled)
|
|
321
|
+
if (running.length > 0) {
|
|
322
|
+
options.push({
|
|
323
|
+
value: '__header_running__',
|
|
324
|
+
label: pc.red('── In Use ──'),
|
|
325
|
+
hint: 'Not selectable',
|
|
326
|
+
});
|
|
327
|
+
for (const w of running) {
|
|
328
|
+
options.push({
|
|
329
|
+
value: `__disabled_${w.world.name}__`,
|
|
330
|
+
label: pc.dim(` ${w.world.name}`),
|
|
331
|
+
hint: pc.dim(`In use by ${w.assignedServer} (running)`),
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Add cancel option
|
|
336
|
+
options.push({
|
|
337
|
+
value: '__cancel__',
|
|
338
|
+
label: pc.gray('Cancel'),
|
|
339
|
+
hint: 'Go back',
|
|
340
|
+
});
|
|
341
|
+
const result = await p.select({
|
|
342
|
+
message: 'Select existing world:',
|
|
343
|
+
options,
|
|
344
|
+
});
|
|
345
|
+
if (this.isCancel(result)) {
|
|
346
|
+
this.handleCancel();
|
|
347
|
+
}
|
|
348
|
+
const selected = result;
|
|
349
|
+
// Handle special values
|
|
350
|
+
if (selected === '__cancel__' ||
|
|
351
|
+
selected.startsWith('__header_') ||
|
|
352
|
+
selected.startsWith('__disabled_')) {
|
|
353
|
+
if (selected.startsWith('__disabled_')) {
|
|
354
|
+
this.warn('This world is in use by a running server. Stop the server first.');
|
|
355
|
+
return this.promptExistingWorldSelection(worlds);
|
|
356
|
+
}
|
|
357
|
+
if (selected.startsWith('__header_')) {
|
|
358
|
+
// Re-prompt if header selected
|
|
359
|
+
return this.promptExistingWorldSelection(worlds);
|
|
360
|
+
}
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
363
|
+
// Find selected world
|
|
364
|
+
const worldEntry = worlds.find((w) => w.world.name === selected);
|
|
365
|
+
if (!worldEntry) {
|
|
366
|
+
throw new Error('World not found');
|
|
367
|
+
}
|
|
368
|
+
// Show warning for stopped server worlds
|
|
369
|
+
if (worldEntry.category === 'stopped') {
|
|
370
|
+
this.warn(`This world is assigned to ${worldEntry.assignedServer} (currently stopped). ` +
|
|
371
|
+
'Using it with a new server may cause conflicts when the original server starts.');
|
|
372
|
+
const proceed = await this.confirm({
|
|
373
|
+
message: 'Continue with this world?',
|
|
374
|
+
initialValue: false,
|
|
375
|
+
});
|
|
376
|
+
if (!proceed) {
|
|
377
|
+
return this.promptExistingWorldSelection(worlds);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return worldEntry.world;
|
|
381
|
+
}
|
|
382
|
+
// ========================================
|
|
383
|
+
// Status Display
|
|
384
|
+
// ========================================
|
|
385
|
+
spinner() {
|
|
386
|
+
const spin = p.spinner();
|
|
387
|
+
return {
|
|
388
|
+
start: (message) => spin.start(message),
|
|
389
|
+
stop: (message) => spin.stop(message),
|
|
390
|
+
message: (message) => spin.message(message),
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
success(message) {
|
|
394
|
+
p.log.success(pc.green(message));
|
|
395
|
+
}
|
|
396
|
+
error(message) {
|
|
397
|
+
p.log.error(pc.red(message));
|
|
398
|
+
}
|
|
399
|
+
warn(message) {
|
|
400
|
+
p.log.warn(pc.yellow(message));
|
|
401
|
+
}
|
|
402
|
+
info(message) {
|
|
403
|
+
p.log.info(pc.cyan(message));
|
|
404
|
+
}
|
|
405
|
+
note(message, title) {
|
|
406
|
+
p.note(message, title);
|
|
407
|
+
}
|
|
408
|
+
// ========================================
|
|
409
|
+
// Utility
|
|
410
|
+
// ========================================
|
|
411
|
+
isCancel(value) {
|
|
412
|
+
return p.isCancel(value);
|
|
413
|
+
}
|
|
414
|
+
handleCancel() {
|
|
415
|
+
p.cancel('Operation cancelled');
|
|
416
|
+
process.exit(0);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=ClackPromptAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClackPromptAdapter.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/ClackPromptAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// CLI-specific adapter
|
|
2
|
+
export { ClackPromptAdapter } from './ClackPromptAdapter.js';
|
|
3
|
+
// Re-export shared adapters for backward compatibility
|
|
4
|
+
export { ShellAdapter, ServerRepository, WorldRepository, DocsAdapter, } from '@minecraft-docker/shared';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,uDAAuD;AACvD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type IPromptPort, type IShellPort, type IServerRepository, type IWorldRepository, type IDocProvider, type ICreateServerUseCase, type IDeleteServerUseCase, type IServerStatusUseCase, type IWorldManagementUseCase, type IBackupUseCase, type IPlayerLookupUseCase } from '@minecraft-docker/shared';
|
|
2
|
+
export interface ContainerOptions {
|
|
3
|
+
rootDir?: string;
|
|
4
|
+
sudoPassword?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Dependency Injection Container
|
|
8
|
+
* Manages creation and lifecycle of dependencies
|
|
9
|
+
*/
|
|
10
|
+
export declare class Container {
|
|
11
|
+
private readonly paths;
|
|
12
|
+
private readonly sudoPassword?;
|
|
13
|
+
private _promptPort?;
|
|
14
|
+
private _shellPort?;
|
|
15
|
+
private _serverRepo?;
|
|
16
|
+
private _worldRepo?;
|
|
17
|
+
private _docProvider?;
|
|
18
|
+
constructor(options?: ContainerOptions | string);
|
|
19
|
+
get promptPort(): IPromptPort;
|
|
20
|
+
get shellPort(): IShellPort;
|
|
21
|
+
get serverRepository(): IServerRepository;
|
|
22
|
+
get worldRepository(): IWorldRepository;
|
|
23
|
+
get docProvider(): IDocProvider;
|
|
24
|
+
get createServerUseCase(): ICreateServerUseCase;
|
|
25
|
+
get deleteServerUseCase(): IDeleteServerUseCase;
|
|
26
|
+
get serverStatusUseCase(): IServerStatusUseCase;
|
|
27
|
+
get worldManagementUseCase(): IWorldManagementUseCase;
|
|
28
|
+
get backupUseCase(): IBackupUseCase;
|
|
29
|
+
get playerLookupUseCase(): IPlayerLookupUseCase;
|
|
30
|
+
/**
|
|
31
|
+
* Create a container with default configuration
|
|
32
|
+
*/
|
|
33
|
+
static create(options?: ContainerOptions | string): Container;
|
|
34
|
+
/**
|
|
35
|
+
* Create a container with custom adapters (for testing)
|
|
36
|
+
*/
|
|
37
|
+
static createWithAdapters(promptPort: IPromptPort, shellPort: IShellPort, serverRepo: IServerRepository, worldRepo: IWorldRepository): Container;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get or create the global container
|
|
41
|
+
*/
|
|
42
|
+
export declare function getContainer(options?: ContainerOptions | string): Container;
|
|
43
|
+
/**
|
|
44
|
+
* Reset the global container (for testing)
|
|
45
|
+
*/
|
|
46
|
+
export declare function resetContainer(): void;
|
|
47
|
+
//# sourceMappingURL=container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/di/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAIlC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IAGvC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,WAAW,CAAC,CAAoB;IACxC,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAe;gBAExB,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAkB/C,IAAI,UAAU,IAAI,WAAW,CAK5B;IAED,IAAI,SAAS,IAAI,UAAU,CAQ1B;IAED,IAAI,gBAAgB,IAAI,iBAAiB,CAKxC;IAED,IAAI,eAAe,IAAI,gBAAgB,CAKtC;IAED,IAAI,WAAW,IAAI,YAAY,CAK9B;IAMD,IAAI,mBAAmB,IAAI,oBAAoB,CAO9C;IAED,IAAI,mBAAmB,IAAI,oBAAoB,CAM9C;IAED,IAAI,mBAAmB,IAAI,oBAAoB,CAM9C;IAED,IAAI,sBAAsB,IAAI,uBAAuB,CAOpD;IAED,IAAI,aAAa,IAAI,cAAc,CAElC;IAED,IAAI,mBAAmB,IAAI,oBAAoB,CAE9C;IAMD;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS;IAI7D;;OAEG;IACH,MAAM,CAAC,kBAAkB,CACvB,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,gBAAgB,GAC1B,SAAS;CAQb;AAQD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAe3E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Paths,
|
|
2
|
+
// Infrastructure adapters from shared
|
|
3
|
+
ShellAdapter, ServerRepository, WorldRepository, DocsAdapter,
|
|
4
|
+
// Use cases from shared
|
|
5
|
+
CreateServerUseCase, DeleteServerUseCase, ServerStatusUseCase, WorldManagementUseCase, BackupUseCase, PlayerLookupUseCase, } from '@minecraft-docker/shared';
|
|
6
|
+
// CLI-specific adapter
|
|
7
|
+
import { ClackPromptAdapter } from '../adapters/ClackPromptAdapter.js';
|
|
8
|
+
/**
|
|
9
|
+
* Dependency Injection Container
|
|
10
|
+
* Manages creation and lifecycle of dependencies
|
|
11
|
+
*/
|
|
12
|
+
export class Container {
|
|
13
|
+
paths;
|
|
14
|
+
sudoPassword;
|
|
15
|
+
// Adapters (singleton)
|
|
16
|
+
_promptPort;
|
|
17
|
+
_shellPort;
|
|
18
|
+
_serverRepo;
|
|
19
|
+
_worldRepo;
|
|
20
|
+
_docProvider;
|
|
21
|
+
constructor(options) {
|
|
22
|
+
if (typeof options === 'string') {
|
|
23
|
+
// Backward compatibility: rootDir as string
|
|
24
|
+
this.paths = new Paths(options);
|
|
25
|
+
this.sudoPassword = undefined;
|
|
26
|
+
}
|
|
27
|
+
else if (options) {
|
|
28
|
+
this.paths = new Paths(options.rootDir);
|
|
29
|
+
this.sudoPassword = options.sudoPassword;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.paths = new Paths();
|
|
33
|
+
this.sudoPassword = undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ========================================
|
|
37
|
+
// Ports (Adapters)
|
|
38
|
+
// ========================================
|
|
39
|
+
get promptPort() {
|
|
40
|
+
if (!this._promptPort) {
|
|
41
|
+
this._promptPort = new ClackPromptAdapter();
|
|
42
|
+
}
|
|
43
|
+
return this._promptPort;
|
|
44
|
+
}
|
|
45
|
+
get shellPort() {
|
|
46
|
+
if (!this._shellPort) {
|
|
47
|
+
this._shellPort = new ShellAdapter({
|
|
48
|
+
paths: this.paths,
|
|
49
|
+
sudoPassword: this.sudoPassword,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return this._shellPort;
|
|
53
|
+
}
|
|
54
|
+
get serverRepository() {
|
|
55
|
+
if (!this._serverRepo) {
|
|
56
|
+
this._serverRepo = new ServerRepository(this.paths);
|
|
57
|
+
}
|
|
58
|
+
return this._serverRepo;
|
|
59
|
+
}
|
|
60
|
+
get worldRepository() {
|
|
61
|
+
if (!this._worldRepo) {
|
|
62
|
+
this._worldRepo = new WorldRepository(this.paths);
|
|
63
|
+
}
|
|
64
|
+
return this._worldRepo;
|
|
65
|
+
}
|
|
66
|
+
get docProvider() {
|
|
67
|
+
if (!this._docProvider) {
|
|
68
|
+
this._docProvider = new DocsAdapter(this.paths.root);
|
|
69
|
+
}
|
|
70
|
+
return this._docProvider;
|
|
71
|
+
}
|
|
72
|
+
// ========================================
|
|
73
|
+
// Use Cases
|
|
74
|
+
// ========================================
|
|
75
|
+
get createServerUseCase() {
|
|
76
|
+
return new CreateServerUseCase(this.promptPort, this.shellPort, this.serverRepository, this.worldRepository);
|
|
77
|
+
}
|
|
78
|
+
get deleteServerUseCase() {
|
|
79
|
+
return new DeleteServerUseCase(this.promptPort, this.shellPort, this.serverRepository);
|
|
80
|
+
}
|
|
81
|
+
get serverStatusUseCase() {
|
|
82
|
+
return new ServerStatusUseCase(this.promptPort, this.shellPort, this.serverRepository);
|
|
83
|
+
}
|
|
84
|
+
get worldManagementUseCase() {
|
|
85
|
+
return new WorldManagementUseCase(this.promptPort, this.shellPort, this.worldRepository, this.serverRepository);
|
|
86
|
+
}
|
|
87
|
+
get backupUseCase() {
|
|
88
|
+
return new BackupUseCase(this.promptPort, this.shellPort);
|
|
89
|
+
}
|
|
90
|
+
get playerLookupUseCase() {
|
|
91
|
+
return new PlayerLookupUseCase(this.promptPort, this.shellPort);
|
|
92
|
+
}
|
|
93
|
+
// ========================================
|
|
94
|
+
// Factory
|
|
95
|
+
// ========================================
|
|
96
|
+
/**
|
|
97
|
+
* Create a container with default configuration
|
|
98
|
+
*/
|
|
99
|
+
static create(options) {
|
|
100
|
+
return new Container(options);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a container with custom adapters (for testing)
|
|
104
|
+
*/
|
|
105
|
+
static createWithAdapters(promptPort, shellPort, serverRepo, worldRepo) {
|
|
106
|
+
const container = new Container();
|
|
107
|
+
container._promptPort = promptPort;
|
|
108
|
+
container._shellPort = shellPort;
|
|
109
|
+
container._serverRepo = serverRepo;
|
|
110
|
+
container._worldRepo = worldRepo;
|
|
111
|
+
return container;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Global container instance
|
|
116
|
+
*/
|
|
117
|
+
let globalContainer = null;
|
|
118
|
+
let globalContainerOptions = undefined;
|
|
119
|
+
/**
|
|
120
|
+
* Get or create the global container
|
|
121
|
+
*/
|
|
122
|
+
export function getContainer(options) {
|
|
123
|
+
// Convert string to options for comparison
|
|
124
|
+
const normalizedOptions = typeof options === 'string' ? { rootDir: options } : options;
|
|
125
|
+
// Check if we need to recreate the container (options changed)
|
|
126
|
+
const optionsChanged = globalContainerOptions?.rootDir !== normalizedOptions?.rootDir ||
|
|
127
|
+
globalContainerOptions?.sudoPassword !== normalizedOptions?.sudoPassword;
|
|
128
|
+
if (!globalContainer || optionsChanged) {
|
|
129
|
+
globalContainer = Container.create(normalizedOptions);
|
|
130
|
+
globalContainerOptions = normalizedOptions;
|
|
131
|
+
}
|
|
132
|
+
return globalContainer;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Reset the global container (for testing)
|
|
136
|
+
*/
|
|
137
|
+
export function resetContainer() {
|
|
138
|
+
globalContainer = null;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/infrastructure/di/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/di/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|