@minecraft-docker/mcctl 1.7.0 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -20
- package/dist/commands/backup.d.ts +0 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +2 -28
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/console/api.js +2 -2
- package/dist/commands/console/init.js +2 -2
- package/dist/commands/console/service.js +2 -2
- package/dist/commands/index.d.ts +0 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +0 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +0 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -342
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +10 -42
- package/dist/index.js.map +1 -1
- package/dist/lib/admin-config.js +2 -2
- package/package.json +9 -15
- package/scripts/create-server.sh +2 -1
- package/templates/.env.example +6 -6
- package/templates/ecosystem.config.js +3 -3
- package/CHANGELOG.md +0 -278
- package/dist/commands/update.d.ts +0 -13
- package/dist/commands/update.d.ts.map +0 -1
- package/dist/commands/update.js +0 -117
- package/dist/commands/update.js.map +0 -1
- package/dist/lib/update-checker.d.ts +0 -28
- package/dist/lib/update-checker.d.ts.map +0 -1
- package/dist/lib/update-checker.js +0 -210
- package/dist/lib/update-checker.js.map +0 -1
- package/templates/gitignore.template +0 -70
- package/templates/servers/_template/logs/.gitkeep +0 -0
- package/templates/servers/compose.template.yml +0 -8
- /package/{templates/servers/_template/data → scripts}/.gitkeep +0 -0
package/CHANGELOG.md
DELETED
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [1.7.0] - 2026-01-31
|
|
9
|
-
|
|
10
|
-
### Added
|
|
11
|
-
- **Router Status API** (`GET /api/router/status`) - Real-time mc-router status (#157, #171)
|
|
12
|
-
- **Server Create/Delete API** (`POST/DELETE /api/servers/:name`) - REST API for server management (#154, #172)
|
|
13
|
-
- **Player Management API** - Whitelist, ban, op, kick operations via REST (#155, #173)
|
|
14
|
-
- **Backup API** (`POST /api/backup/:name`) - Trigger backups via REST (#156, #173)
|
|
15
|
-
- **mcctl init --reconfigure** - Reconfigure existing installation (#170)
|
|
16
|
-
- **E2E Tests** - Comprehensive API tests for router, players, backup, server create/delete
|
|
17
|
-
- **CLI E2E Tests** - Vitest-based e2e tests for CLI commands
|
|
18
|
-
|
|
19
|
-
### Changed
|
|
20
|
-
- Update XP methodology documentation in PRD
|
|
21
|
-
- Improve /work command with context mode and e2e test requirements
|
|
22
|
-
- Add issue checkbox update instructions to /work command
|
|
23
|
-
- Agent documentation updates for multi-agent collaboration
|
|
24
|
-
|
|
25
|
-
### Documentation
|
|
26
|
-
- Add mcctl-console implementation plan with GitHub issues #174-#190
|
|
27
|
-
- Update Admin Service documentation for new API endpoints
|
|
28
|
-
|
|
29
|
-
## [1.6.16] - 2026-01-31
|
|
30
|
-
|
|
31
|
-
### Changed
|
|
32
|
-
- Add README Changelog sync instructions to release-manager and technical-writer agents
|
|
33
|
-
- Ensure npm package page displays latest changelog entries in README.md
|
|
34
|
-
|
|
35
|
-
## [1.6.15] - 2026-01-31
|
|
36
|
-
|
|
37
|
-
### Added
|
|
38
|
-
- New `mcctl backup init` command for interactive GitHub backup setup (#167)
|
|
39
|
-
- Guided prompts for GitHub token, repository, and branch configuration
|
|
40
|
-
- Automatic `.env` file update with backup settings
|
|
41
|
-
- Token validation and repository existence check
|
|
42
|
-
|
|
43
|
-
### Fixed
|
|
44
|
-
- Include `scripts/` directory in npm package for template initialization
|
|
45
|
-
|
|
46
|
-
### Tests
|
|
47
|
-
- Add comprehensive tests for BackupUseCase.init() (12 test cases)
|
|
48
|
-
|
|
49
|
-
## [1.6.14] - 2026-01-31
|
|
50
|
-
|
|
51
|
-
### Fixed
|
|
52
|
-
- Sync all package versions to tag version before npm publish
|
|
53
|
-
- CI workflow now automatically updates all monorepo package versions to match Git tag
|
|
54
|
-
|
|
55
|
-
### Changed
|
|
56
|
-
- Split CLAUDE.md into modular files for better performance
|
|
57
|
-
|
|
58
|
-
## [1.6.13] - 2026-01-31
|
|
59
|
-
|
|
60
|
-
### Fixed
|
|
61
|
-
- Sync CHANGELOG.md to CLI package for npm page display
|
|
62
|
-
- Add automatic CHANGELOG sync to release workflow
|
|
63
|
-
|
|
64
|
-
## [1.6.12] - 2026-01-31
|
|
65
|
-
|
|
66
|
-
### Fixed
|
|
67
|
-
- **Critical**: Add missing `EXTRA_ARGS=--universe /worlds/` to npm package template (#165)
|
|
68
|
-
- **Problem**: Servers created with `mcctl create` stored worlds in `/data/` instead of shared `/worlds/` directory
|
|
69
|
-
- **Impact**: Shared world storage feature was non-functional; worlds were recreated on server restart
|
|
70
|
-
- **Affected versions**: 1.6.8 ~ 1.6.11 (npm package users only)
|
|
71
|
-
|
|
72
|
-
### Migration Guide for Affected Users
|
|
73
|
-
|
|
74
|
-
If you created servers with mcctl versions 1.6.8 ~ 1.6.11, follow these steps:
|
|
75
|
-
|
|
76
|
-
#### Option 1: Use Migration Command (Recommended)
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
# Check which servers need migration
|
|
80
|
-
mcctl migrate status
|
|
81
|
-
|
|
82
|
-
# Migrate all servers (moves world data and updates config)
|
|
83
|
-
mcctl migrate worlds --all
|
|
84
|
-
|
|
85
|
-
# Or migrate specific server
|
|
86
|
-
mcctl migrate worlds myserver
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
#### Option 2: Manual Fix
|
|
90
|
-
|
|
91
|
-
**Step 1**: Add `EXTRA_ARGS` to server's config.env:
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
# For each affected server
|
|
95
|
-
echo 'EXTRA_ARGS=--universe /worlds/' >> ~/minecraft-servers/servers/<server-name>/config.env
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Or add to global `.env` (applies to all servers):
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
echo 'EXTRA_ARGS=--universe /worlds/' >> ~/minecraft-servers/.env
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**Step 2**: Move existing world data:
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
cd ~/minecraft-servers
|
|
108
|
-
|
|
109
|
-
# Stop server first
|
|
110
|
-
mcctl stop <server-name>
|
|
111
|
-
|
|
112
|
-
# Move world from data/ to worlds/
|
|
113
|
-
mv servers/<server-name>/data/<level-name> worlds/<level-name>
|
|
114
|
-
|
|
115
|
-
# Start server
|
|
116
|
-
mcctl start <server-name>
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
**Step 3**: Verify world is loading correctly:
|
|
120
|
-
|
|
121
|
-
```bash
|
|
122
|
-
mcctl logs <server-name> -f
|
|
123
|
-
# Should NOT see "No existing world data, creating new world"
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
#### How to Check if Affected
|
|
127
|
-
|
|
128
|
-
Your server is affected if:
|
|
129
|
-
|
|
130
|
-
1. Created with `mcctl create` (versions 1.6.8 ~ 1.6.11)
|
|
131
|
-
2. World data exists in `servers/<name>/data/<world>/` instead of `worlds/<world>/`
|
|
132
|
-
3. Server logs show "No existing world data, creating new world" on restart
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
# Quick check: If this shows world folders, you're affected
|
|
136
|
-
ls ~/minecraft-servers/servers/*/data/*/level.dat 2>/dev/null
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## [1.6.11] - 2026-01-31
|
|
140
|
-
|
|
141
|
-
### Fixed
|
|
142
|
-
- Include CHANGELOG.md in npm package for proper changelog display on npmjs.com
|
|
143
|
-
|
|
144
|
-
## [1.6.10] - 2026-01-30
|
|
145
|
-
|
|
146
|
-
### Added
|
|
147
|
-
- System Requirements section in README.md
|
|
148
|
-
- Admin Service (Web Console + REST API) in Features list
|
|
149
|
-
- AI Assistant link for user support
|
|
150
|
-
- CHANGELOG.md with version history
|
|
151
|
-
|
|
152
|
-
### Changed
|
|
153
|
-
- Reorganized README.md Documentation section with Read the Docs links
|
|
154
|
-
- Updated External Links to include project-specific resources
|
|
155
|
-
|
|
156
|
-
### Fixed
|
|
157
|
-
- Broken documentation links in README.md
|
|
158
|
-
|
|
159
|
-
## [1.6.9] - 2026-01-30
|
|
160
|
-
|
|
161
|
-
### Fixed
|
|
162
|
-
- Fix template file naming for npm compatibility (`.gitignore` → `gitignore.template`)
|
|
163
|
-
- Fix `-v` flag conflict with `--version` in CLI argument parsing
|
|
164
|
-
|
|
165
|
-
### Changed
|
|
166
|
-
- Sync shared package version for release consistency
|
|
167
|
-
|
|
168
|
-
## [1.6.8] - 2026-01-30
|
|
169
|
-
|
|
170
|
-
### Fixed
|
|
171
|
-
- Add missing template files to npm package distribution
|
|
172
|
-
- Include `templates/` directory in package.json files array
|
|
173
|
-
|
|
174
|
-
## [1.6.7] - 2026-01-29
|
|
175
|
-
|
|
176
|
-
### Added
|
|
177
|
-
- Version update check with 24-hour cache (#160, #161)
|
|
178
|
-
- Display notification when newer version available on npm
|
|
179
|
-
|
|
180
|
-
## [1.6.6] - 2026-01-29
|
|
181
|
-
|
|
182
|
-
### Fixed
|
|
183
|
-
- Correct system architecture diagram in documentation
|
|
184
|
-
- Convert ASCII diagrams to Mermaid for proper rendering
|
|
185
|
-
|
|
186
|
-
### Changed
|
|
187
|
-
- Rename NotebookLM to AI Assistant chatbot
|
|
188
|
-
- Simplify mcctl-api Internal Architecture diagram
|
|
189
|
-
|
|
190
|
-
## [1.6.5] - 2026-01-28
|
|
191
|
-
|
|
192
|
-
### Added
|
|
193
|
-
- REST API reference documentation
|
|
194
|
-
- AI Assistant help section to homepage
|
|
195
|
-
- NotebookLM AI Assistant link to navigation
|
|
196
|
-
|
|
197
|
-
### Fixed
|
|
198
|
-
- Remove mcctl-console from E2E tests (not yet implemented)
|
|
199
|
-
|
|
200
|
-
## [1.6.4] - 2026-01-27
|
|
201
|
-
|
|
202
|
-
### Fixed
|
|
203
|
-
- Skip already published npm packages in release workflow
|
|
204
|
-
- Add mod-source-modrinth package to release workflow (#158, #159)
|
|
205
|
-
|
|
206
|
-
## [1.6.3] - 2026-01-27
|
|
207
|
-
|
|
208
|
-
### Added
|
|
209
|
-
- Comprehensive LLM knowledge base update for ChatGPT integration
|
|
210
|
-
|
|
211
|
-
### Fixed
|
|
212
|
-
- World new command to create directory and .meta file correctly
|
|
213
|
-
|
|
214
|
-
## [1.6.2] - 2026-01-26
|
|
215
|
-
|
|
216
|
-
### Added
|
|
217
|
-
- API documentation with implementation status and SSE streaming
|
|
218
|
-
- Admin service documentation for native PM2 services (#142, #153)
|
|
219
|
-
- E2E tests using PM2 instead of Docker (#141, #152)
|
|
220
|
-
- Console init for native PM2 execution (#137, #151)
|
|
221
|
-
- PM2 service management types (#135, #144)
|
|
222
|
-
- PM2 ecosystem template (#139, #143)
|
|
223
|
-
- Console remove command
|
|
224
|
-
- Port configuration to console init
|
|
225
|
-
|
|
226
|
-
### Changed
|
|
227
|
-
- Optimize console for native PM2 execution (#140, #150)
|
|
228
|
-
- Remove Docker configs from API and Console (#147, #148, #149)
|
|
229
|
-
- Remove Docker dependencies from API for native execution (#138, #145)
|
|
230
|
-
- Migrate console service commands to PM2 (#146)
|
|
231
|
-
|
|
232
|
-
### Fixed
|
|
233
|
-
- Auto-build Docker images from source when missing
|
|
234
|
-
|
|
235
|
-
## [1.6.1] - 2026-01-25
|
|
236
|
-
|
|
237
|
-
### Changed
|
|
238
|
-
- Major refactoring for PM2 native service execution
|
|
239
|
-
- Remove Docker dependency for Admin Service
|
|
240
|
-
|
|
241
|
-
## [1.6.0] - 2026-01-24
|
|
242
|
-
|
|
243
|
-
### Added
|
|
244
|
-
- Admin Service: REST API (mcctl-api) + Web Console (mcctl-console)
|
|
245
|
-
- `mcctl console` commands for admin service management
|
|
246
|
-
- User management with role-based access
|
|
247
|
-
- API key authentication support
|
|
248
|
-
|
|
249
|
-
### Changed
|
|
250
|
-
- Deprecated `mcctl admin` commands (use `mcctl console` instead)
|
|
251
|
-
|
|
252
|
-
## [1.5.0] - 2026-01-20
|
|
253
|
-
|
|
254
|
-
### Added
|
|
255
|
-
- Mod management commands (`mcctl mod search/add/remove/list/sources`)
|
|
256
|
-
- Modrinth, CurseForge, Spiget, and direct URL mod sources
|
|
257
|
-
- Server backup/restore commands (`mcctl server-backup`, `mcctl server-restore`)
|
|
258
|
-
|
|
259
|
-
## [1.4.0] - 2026-01-15
|
|
260
|
-
|
|
261
|
-
### Added
|
|
262
|
-
- Player management commands (whitelist, ban, op, kick)
|
|
263
|
-
- World management improvements with `.meta` file support
|
|
264
|
-
- Interactive world selection in `mcctl create`
|
|
265
|
-
|
|
266
|
-
## [1.3.0] - 2026-01-10
|
|
267
|
-
|
|
268
|
-
### Added
|
|
269
|
-
- nip.io magic DNS support for hostname routing
|
|
270
|
-
- VPN mesh network support (Tailscale, ZeroTier)
|
|
271
|
-
- Migration script for existing servers to nip.io
|
|
272
|
-
|
|
273
|
-
### Changed
|
|
274
|
-
- Dual hostname generation: `.local` and `.nip.io`
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
For older versions, see [GitHub Releases](https://github.com/smallmiro/minecraft-server-manager/releases).
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Update command options
|
|
3
|
-
*/
|
|
4
|
-
export interface UpdateCommandOptions {
|
|
5
|
-
check?: boolean;
|
|
6
|
-
force?: boolean;
|
|
7
|
-
yes?: boolean;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Execute update command
|
|
11
|
-
*/
|
|
12
|
-
export declare function updateCommand(options: UpdateCommandOptions): Promise<number>;
|
|
13
|
-
//# sourceMappingURL=update.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAyCD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4FlF"}
|
package/dist/commands/update.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { log, colors } from '@minecraft-docker/shared';
|
|
2
|
-
import { getInstalledVersion, fetchLatestVersionForced, getCachedVersion, clearCache, isUpdateAvailable, } from '../lib/update-checker.js';
|
|
3
|
-
import { spawnSync } from 'child_process';
|
|
4
|
-
import * as prompts from '@clack/prompts';
|
|
5
|
-
const PACKAGE_NAME = '@minecraft-docker/mcctl';
|
|
6
|
-
/**
|
|
7
|
-
* Print version comparison box
|
|
8
|
-
*/
|
|
9
|
-
function printVersionInfo(currentVersion, latestVersion, hasUpdate) {
|
|
10
|
-
console.log('');
|
|
11
|
-
console.log(colors.bold('mcctl Version Info'));
|
|
12
|
-
console.log('');
|
|
13
|
-
console.log(` Installed: ${colors.cyan(currentVersion)}`);
|
|
14
|
-
console.log(` Latest: ${hasUpdate ? colors.yellow(latestVersion) : colors.green(latestVersion)}`);
|
|
15
|
-
console.log('');
|
|
16
|
-
if (hasUpdate) {
|
|
17
|
-
console.log(colors.yellow(` Update available: ${currentVersion} → ${latestVersion}`));
|
|
18
|
-
console.log('');
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
console.log(colors.green(' You are using the latest version.'));
|
|
22
|
-
console.log('');
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Execute npm install command using spawnSync (safe, no shell injection)
|
|
27
|
-
*/
|
|
28
|
-
function runNpmInstall() {
|
|
29
|
-
console.log('');
|
|
30
|
-
console.log(colors.dim(`Running: npm install -g ${PACKAGE_NAME}`));
|
|
31
|
-
console.log('');
|
|
32
|
-
const result = spawnSync('npm', ['install', '-g', PACKAGE_NAME], {
|
|
33
|
-
stdio: 'inherit',
|
|
34
|
-
});
|
|
35
|
-
return result.status === 0;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Execute update command
|
|
39
|
-
*/
|
|
40
|
-
export async function updateCommand(options) {
|
|
41
|
-
const currentVersion = getInstalledVersion();
|
|
42
|
-
// If --force, clear cache first
|
|
43
|
-
if (options.force) {
|
|
44
|
-
clearCache();
|
|
45
|
-
}
|
|
46
|
-
// Get latest version
|
|
47
|
-
let latestVersion;
|
|
48
|
-
if (options.force) {
|
|
49
|
-
// Force fetch from npm
|
|
50
|
-
const spinner = prompts.spinner();
|
|
51
|
-
spinner.start('Checking for updates...');
|
|
52
|
-
latestVersion = await fetchLatestVersionForced();
|
|
53
|
-
if (!latestVersion) {
|
|
54
|
-
spinner.stop('Failed to fetch latest version from npm registry');
|
|
55
|
-
return 1;
|
|
56
|
-
}
|
|
57
|
-
spinner.stop('Version check complete');
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
// Try cache first, then fetch
|
|
61
|
-
latestVersion = getCachedVersion();
|
|
62
|
-
if (!latestVersion) {
|
|
63
|
-
const spinner = prompts.spinner();
|
|
64
|
-
spinner.start('Checking for updates...');
|
|
65
|
-
latestVersion = await fetchLatestVersionForced();
|
|
66
|
-
if (!latestVersion) {
|
|
67
|
-
spinner.stop('Failed to fetch latest version from npm registry');
|
|
68
|
-
return 1;
|
|
69
|
-
}
|
|
70
|
-
spinner.stop('Version check complete');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const hasUpdate = isUpdateAvailable(currentVersion, latestVersion);
|
|
74
|
-
// Print version info
|
|
75
|
-
printVersionInfo(currentVersion, latestVersion, hasUpdate);
|
|
76
|
-
// If --check, just show info and exit
|
|
77
|
-
if (options.check) {
|
|
78
|
-
return hasUpdate ? 1 : 0; // Exit code 1 if update available (useful for scripts)
|
|
79
|
-
}
|
|
80
|
-
// If no update available, we're done
|
|
81
|
-
if (!hasUpdate) {
|
|
82
|
-
return 0;
|
|
83
|
-
}
|
|
84
|
-
// Ask user if they want to update (unless --yes)
|
|
85
|
-
if (!options.yes) {
|
|
86
|
-
const confirm = await prompts.confirm({
|
|
87
|
-
message: `Update mcctl to ${latestVersion}?`,
|
|
88
|
-
});
|
|
89
|
-
if (prompts.isCancel(confirm) || !confirm) {
|
|
90
|
-
console.log('');
|
|
91
|
-
console.log(colors.dim('Update cancelled.'));
|
|
92
|
-
console.log('');
|
|
93
|
-
console.log(` To update manually, run:`);
|
|
94
|
-
console.log(colors.cyan(` npm install -g ${PACKAGE_NAME}`));
|
|
95
|
-
console.log('');
|
|
96
|
-
return 0;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
// Run npm install
|
|
100
|
-
const success = runNpmInstall();
|
|
101
|
-
if (success) {
|
|
102
|
-
console.log('');
|
|
103
|
-
console.log(colors.green('✓ mcctl updated successfully!'));
|
|
104
|
-
console.log('');
|
|
105
|
-
// Clear cache after successful update
|
|
106
|
-
clearCache();
|
|
107
|
-
return 0;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
console.log('');
|
|
111
|
-
log.error('Update failed. Try running manually:');
|
|
112
|
-
console.log(colors.cyan(` sudo npm install -g ${PACKAGE_NAME}`));
|
|
113
|
-
console.log('');
|
|
114
|
-
return 1;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=update.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Check for updates and print notification if available
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Get the current version (exported for update command)
|
|
6
|
-
*/
|
|
7
|
-
export declare function getInstalledVersion(): string;
|
|
8
|
-
/**
|
|
9
|
-
* Force fetch latest version from npm (ignores cache)
|
|
10
|
-
*/
|
|
11
|
-
export declare function fetchLatestVersionForced(): Promise<string | null>;
|
|
12
|
-
/**
|
|
13
|
-
* Get cached latest version if available
|
|
14
|
-
*/
|
|
15
|
-
export declare function getCachedVersion(): string | null;
|
|
16
|
-
/**
|
|
17
|
-
* Clear the update check cache
|
|
18
|
-
*/
|
|
19
|
-
export declare function clearCache(): void;
|
|
20
|
-
/**
|
|
21
|
-
* Compare versions and return if update is available
|
|
22
|
-
*/
|
|
23
|
-
export declare function isUpdateAvailable(currentVersion: string, latestVersion: string): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Check for updates and print notification if available
|
|
26
|
-
*/
|
|
27
|
-
export declare function checkForUpdates(): Promise<void>;
|
|
28
|
-
//# sourceMappingURL=update-checker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../src/lib/update-checker.ts"],"names":[],"mappings":"AA8JA;;GAEG;AACH;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAGhD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAQjC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAExF;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCrD"}
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { homedir } from 'os';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import { readFileSync, writeFileSync, existsSync, unlinkSync } from 'fs';
|
|
4
|
-
import { colors } from '@minecraft-docker/shared';
|
|
5
|
-
const PACKAGE_NAME = '@minecraft-docker/mcctl';
|
|
6
|
-
const CACHE_FILE = join(homedir(), '.mcctl-update-check.json');
|
|
7
|
-
const CACHE_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
8
|
-
const FETCH_TIMEOUT_MS = 2000; // 2 seconds
|
|
9
|
-
/**
|
|
10
|
-
* Get the current installed version from package.json
|
|
11
|
-
*/
|
|
12
|
-
function getCurrentVersion() {
|
|
13
|
-
try {
|
|
14
|
-
// Read from the package.json in the dist directory's parent
|
|
15
|
-
const packageJsonPath = new URL('../../package.json', import.meta.url);
|
|
16
|
-
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
17
|
-
return packageJson.version;
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
return '0.0.0';
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Read cache file
|
|
25
|
-
*/
|
|
26
|
-
function readCache() {
|
|
27
|
-
try {
|
|
28
|
-
if (!existsSync(CACHE_FILE)) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
const data = readFileSync(CACHE_FILE, 'utf-8');
|
|
32
|
-
return JSON.parse(data);
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Write cache file
|
|
40
|
-
*/
|
|
41
|
-
function writeCache(data) {
|
|
42
|
-
try {
|
|
43
|
-
writeFileSync(CACHE_FILE, JSON.stringify(data, null, 2));
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
// Ignore write errors
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Fetch latest version from npm registry
|
|
51
|
-
*/
|
|
52
|
-
async function fetchLatestVersion() {
|
|
53
|
-
const controller = new AbortController();
|
|
54
|
-
const timeoutId = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
55
|
-
try {
|
|
56
|
-
const response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, { signal: controller.signal });
|
|
57
|
-
clearTimeout(timeoutId);
|
|
58
|
-
if (!response.ok) {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
const data = await response.json();
|
|
62
|
-
return data.version;
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
clearTimeout(timeoutId);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Compare two semantic versions
|
|
71
|
-
* Returns true if version2 is newer than version1
|
|
72
|
-
*/
|
|
73
|
-
function isNewerVersion(currentVersion, latestVersion) {
|
|
74
|
-
const parseVersion = (v) => {
|
|
75
|
-
return v.replace(/^v/, '').split('.').map(n => parseInt(n, 10) || 0);
|
|
76
|
-
};
|
|
77
|
-
const current = parseVersion(currentVersion);
|
|
78
|
-
const latest = parseVersion(latestVersion);
|
|
79
|
-
for (let i = 0; i < Math.max(current.length, latest.length); i++) {
|
|
80
|
-
const c = current[i] ?? 0;
|
|
81
|
-
const l = latest[i] ?? 0;
|
|
82
|
-
if (l > c)
|
|
83
|
-
return true;
|
|
84
|
-
if (l < c)
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Print update notification box
|
|
91
|
-
*/
|
|
92
|
-
function printUpdateNotification(currentVersion, latestVersion) {
|
|
93
|
-
const message1 = `Update available: ${currentVersion} → ${latestVersion}`;
|
|
94
|
-
const message2 = `Run: npm i -g ${PACKAGE_NAME}`;
|
|
95
|
-
const maxLen = Math.max(message1.length, message2.length);
|
|
96
|
-
const padding = 2;
|
|
97
|
-
const boxWidth = maxLen + padding * 2;
|
|
98
|
-
const topBorder = '┌' + '─'.repeat(boxWidth) + '┐';
|
|
99
|
-
const bottomBorder = '└' + '─'.repeat(boxWidth) + '┘';
|
|
100
|
-
const emptyLine = '│' + ' '.repeat(boxWidth) + '│';
|
|
101
|
-
const padLine = (text) => {
|
|
102
|
-
const leftPad = ' '.repeat(padding);
|
|
103
|
-
const rightPad = ' '.repeat(boxWidth - text.length - padding);
|
|
104
|
-
return '│' + leftPad + text + rightPad + '│';
|
|
105
|
-
};
|
|
106
|
-
console.log('');
|
|
107
|
-
console.log(colors.yellow(topBorder));
|
|
108
|
-
console.log(colors.yellow(emptyLine));
|
|
109
|
-
console.log(colors.yellow(padLine(message1)));
|
|
110
|
-
console.log(colors.yellow(padLine(message2)));
|
|
111
|
-
console.log(colors.yellow(emptyLine));
|
|
112
|
-
console.log(colors.yellow(bottomBorder));
|
|
113
|
-
console.log('');
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Check if cache should be invalidated
|
|
117
|
-
* Cache is invalid if:
|
|
118
|
-
* 1. Cache doesn't exist
|
|
119
|
-
* 2. Cache is older than CACHE_DURATION_MS (24 hours)
|
|
120
|
-
* 3. Cached version is older than current version (user upgraded)
|
|
121
|
-
*/
|
|
122
|
-
function isCacheValid(cache, currentVersion) {
|
|
123
|
-
if (!cache)
|
|
124
|
-
return false;
|
|
125
|
-
const now = Date.now();
|
|
126
|
-
const isExpired = (now - cache.lastCheck) >= CACHE_DURATION_MS;
|
|
127
|
-
if (isExpired)
|
|
128
|
-
return false;
|
|
129
|
-
// If cached version is older than current, invalidate cache
|
|
130
|
-
// This handles the case where user upgraded but cache still has old "latest" version
|
|
131
|
-
const cachedIsOlderThanCurrent = isNewerVersion(cache.latestVersion, currentVersion);
|
|
132
|
-
if (cachedIsOlderThanCurrent)
|
|
133
|
-
return false;
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Check for updates and print notification if available
|
|
138
|
-
*/
|
|
139
|
-
/**
|
|
140
|
-
* Get the current version (exported for update command)
|
|
141
|
-
*/
|
|
142
|
-
export function getInstalledVersion() {
|
|
143
|
-
return getCurrentVersion();
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Force fetch latest version from npm (ignores cache)
|
|
147
|
-
*/
|
|
148
|
-
export async function fetchLatestVersionForced() {
|
|
149
|
-
return fetchLatestVersion();
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Get cached latest version if available
|
|
153
|
-
*/
|
|
154
|
-
export function getCachedVersion() {
|
|
155
|
-
const cache = readCache();
|
|
156
|
-
return cache?.latestVersion ?? null;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Clear the update check cache
|
|
160
|
-
*/
|
|
161
|
-
export function clearCache() {
|
|
162
|
-
try {
|
|
163
|
-
if (existsSync(CACHE_FILE)) {
|
|
164
|
-
unlinkSync(CACHE_FILE);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
// Ignore errors
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Compare versions and return if update is available
|
|
173
|
-
*/
|
|
174
|
-
export function isUpdateAvailable(currentVersion, latestVersion) {
|
|
175
|
-
return isNewerVersion(currentVersion, latestVersion);
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Check for updates and print notification if available
|
|
179
|
-
*/
|
|
180
|
-
export async function checkForUpdates() {
|
|
181
|
-
try {
|
|
182
|
-
const currentVersion = getCurrentVersion();
|
|
183
|
-
const cache = readCache();
|
|
184
|
-
// Check if cache is valid
|
|
185
|
-
if (isCacheValid(cache, currentVersion)) {
|
|
186
|
-
// Use cached version
|
|
187
|
-
if (isNewerVersion(currentVersion, cache.latestVersion)) {
|
|
188
|
-
printUpdateNotification(currentVersion, cache.latestVersion);
|
|
189
|
-
}
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
// Fetch latest version from npm
|
|
193
|
-
const latestVersion = await fetchLatestVersion();
|
|
194
|
-
if (latestVersion) {
|
|
195
|
-
// Update cache
|
|
196
|
-
writeCache({
|
|
197
|
-
lastCheck: Date.now(),
|
|
198
|
-
latestVersion,
|
|
199
|
-
});
|
|
200
|
-
// Check if update is available
|
|
201
|
-
if (isNewerVersion(currentVersion, latestVersion)) {
|
|
202
|
-
printUpdateNotification(currentVersion, latestVersion);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
catch {
|
|
207
|
-
// Silently ignore any errors - don't disrupt the user
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
//# sourceMappingURL=update-checker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../src/lib/update-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,YAAY;AAW3C;;GAEG;AACH,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACpF,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAe;IACjC,IAAI,CAAC;QACH,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB;IAC/B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,8BAA8B,YAAY,SAAS,EACnD,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAC9B,CAAC;QACF,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAyB,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,cAAsB,EAAE,aAAqB;IACnE,MAAM,YAAY,GAAG,CAAC,CAAS,EAAY,EAAE;QAC3C,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,cAAsB,EAAE,aAAqB;IAC5E,MAAM,QAAQ,GAAG,qBAAqB,cAAc,MAAM,aAAa,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAAG,iBAAiB,YAAY,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;IAEtC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;IACnD,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;IACtD,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;IAEnD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC9D,OAAO,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,GAAG,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,KAAuB,EAAE,cAAsB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC;IAC/D,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC;IAE5B,4DAA4D;IAC5D,qFAAqF;IACrF,MAAM,wBAAwB,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACrF,IAAI,wBAAwB;QAAE,OAAO,KAAK,CAAC;IAE3C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,OAAO,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,UAAU,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,cAAsB,EAAE,aAAqB;IAC7E,OAAO,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAE1B,0BAA0B;QAC1B,IAAI,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACxC,qBAAqB;YACrB,IAAI,cAAc,CAAC,cAAc,EAAE,KAAM,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzD,uBAAuB,CAAC,cAAc,EAAE,KAAM,CAAC,aAAa,CAAC,CAAC;YAChE,CAAC;YACD,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAEjD,IAAI,aAAa,EAAE,CAAC;YAClB,eAAe;YACf,UAAU,CAAC;gBACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,aAAa;aACd,CAAC,CAAC;YAEH,+BAA+B;YAC/B,IAAI,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC;gBAClD,uBAAuB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;AACH,CAAC"}
|