@nindroidsystems/pluginator 2.3.0 → 2.3.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 CHANGED
@@ -1,43 +1,49 @@
1
1
  # Pluginator
2
2
 
3
- [![Proprietary](https://img.shields.io/badge/license-Proprietary-red.svg)](LICENSE)
4
- [![Bun](https://img.shields.io/badge/runtime-Bun-black)](https://bun.sh)
5
- [![TypeScript](https://img.shields.io/badge/language-TypeScript-blue)](https://www.typescriptlang.org/)
3
+ <a href="https://bun.sh" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/Built%20with-Bun-f9f1e1?logo=bun&logoColor=f9f1e1&labelColor=14151a" alt="Built with Bun"></a>
4
+ <a href="https://www.typescriptlang.org/" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/TypeScript-5.0-3178c6?logo=typescript&logoColor=white" alt="TypeScript"></a>
5
+ <a href="https://github.com/vadimdemedes/ink" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/Ink-React%20CLI-61dafb?logo=react&logoColor=white" alt="Ink React CLI"></a>
6
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-Proprietary-red" alt="License"></a>
7
+ <img src="https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-blue" alt="Platform">
6
8
 
7
- > **Last Updated:** February 20, 2026
8
-
9
- A sophisticated Minecraft server plugin manager with multi-source update checking, sync/backup workflows, and a modern terminal UI.
9
+ A powerful Minecraft server plugin manager with multi-source update checking, sync/backup workflows, and a modern terminal UI.
10
10
 
11
11
  ## Features
12
12
 
13
- ### Core Features
14
- - **Multi-Source Support** - Check updates from Spigot, Modrinth, GitHub, CurseForge, Hangar, Jenkins, and custom web manifests
15
- - **Server Sync** - Synchronize plugins between production and test servers
16
- - **Smart Backups** - Create timestamped tar.gz backups with automatic cleanup
17
- - **Modern Terminal UI** - Interactive, keyboard-driven interface with 9 tabs and customizable themes
18
- - **Plugin Scanning** - Extract metadata from JAR files automatically
19
- - **Checksum Verification** - SHA-256 verification for all downloads
20
- - **Parallel Updates** - Check multiple plugins concurrently
21
- - **Plugin Registry** - 100+ popular plugins pre-configured with verified sources
22
- - **Tier System** - Free, Plus, Pro, and Max tiers with usage-based limits
23
- - **Auto-Updater** - Automatic update checking with one-command updates
24
-
25
- ### Analytics & Health (v2.0)
26
- - **Health Dashboard** - Plugin health scoring based on compatibility, security, and update status
27
- - **Performance Analytics** - Server performance monitoring with metrics collection and alerts
28
- - **Recommendations Engine** - Smart plugin recommendations based on your setup and usage patterns
29
- - **Server Panel Integrations** - Connect to AMP, Pterodactyl, Crafty Controller, and MCSManager
30
-
31
- ### Organization & Workflows (v2.0)
32
- - **Plugin Templates** - Apply pre-configured plugin bundles for different server types
33
- - **Widget Dashboard** - Customizable dashboard with health, analytics, and streaming widgets
34
- - **Tags & Groups** - Organize plugins with custom tags and groups
35
- - **Profiles** - Save and switch between different plugin configurations
36
- - **Scheduled Updates** - Configure automatic update windows with major version handling
37
- - **Data Import/Export** - Export and import plugin configurations
13
+ ### Core
14
+ - **Multi-Source Updates** Check updates from Spigot, Modrinth, GitHub, CurseForge, Hangar, Jenkins, and custom web manifests
15
+ - **Server Sync** Synchronize plugins between production and test servers
16
+ - **Smart Backups** Timestamped tar.gz backups with automatic cleanup
17
+ - **Modern Terminal UI** Interactive, keyboard-driven interface with 9 tabs and customizable themes
18
+ - **Plugin Registry** 100+ popular plugins pre-configured with verified sources
19
+ - **Auto-Updater** Automatic update checking with one-command updates
20
+ - **Checksum Verification** — SHA-256 verification for all downloads
21
+
22
+ ### Analytics & Health
23
+ - **Health Dashboard** Plugin health scoring based on compatibility, security, and update status
24
+ - **Performance Analytics** — Server performance monitoring with metrics and alerts
25
+ - **Recommendations Engine** Smart plugin recommendations based on your setup
26
+ - **Server Panel Integrations** Connect to AMP, Pterodactyl, Crafty Controller, and MCSManager
27
+
28
+ ### Organization & Workflows
29
+ - **Tags & Groups** Organize plugins with custom tags and groups
30
+ - **Profiles** — Save and switch between different plugin configurations
31
+ - **Scheduled Updates** Configure automatic update windows with major version handling
32
+ - **Data Import/Export** Export and import plugin configurations
33
+ - **Widget Dashboard** Customizable dashboard with health, analytics, and streaming widgets
38
34
 
39
35
  ## Installation
40
36
 
37
+ ### Download Binary
38
+
39
+ | Platform | Download |
40
+ |----------|----------|
41
+ | Windows (x64) | [pluginator-windows-x64.zip](https://github.com/NindroidA/pluginator/releases/latest) |
42
+ | macOS (Intel) | [pluginator-darwin-x64.tar.gz](https://github.com/NindroidA/pluginator/releases/latest) |
43
+ | macOS (Apple Silicon) | [pluginator-darwin-arm64.tar.gz](https://github.com/NindroidA/pluginator/releases/latest) |
44
+ | Linux (x64) | [pluginator-linux-x64.tar.gz](https://github.com/NindroidA/pluginator/releases/latest) |
45
+ | Linux (ARM64) | [pluginator-linux-arm64.tar.gz](https://github.com/NindroidA/pluginator/releases/latest) |
46
+
41
47
  ### Quick Install
42
48
 
43
49
  ```bash
@@ -59,171 +65,34 @@ curl -fsSL https://pluginator.dev/install.sh | bash
59
65
 
60
66
  See [Installation Guide](docs/INSTALLATION.md) for detailed instructions.
61
67
 
62
- ### Prerequisites (npm/Bun install only)
63
-
64
- - [Bun](https://bun.sh) v1.1.0 or higher (or Node.js 18+)
65
-
66
- ## Usage
67
-
68
- ### Interactive Mode (Default)
69
-
70
- ```bash
71
- pluginator
72
- ```
73
-
74
- This launches the interactive terminal UI with tab-based navigation.
75
-
76
- #### Keyboard Shortcuts
77
-
78
- Pluginator uses a state-aware input system (v1.4.0) for consistent behavior.
79
-
80
- | Key | Action | Notes |
81
- |-----|--------|-------|
82
- | `Tab` / `Shift+Tab` | Navigate between tabs | |
83
- | `1-9` | Jump to tab | Home/Servers/Plugins/Updates/Logs/Sync/Health/Recs/Perf |
84
- | `j` / `↓` | Move down in lists | |
85
- | `k` / `↑` | Move up in lists | |
86
- | `g` / `G` | Jump to top/bottom | |
87
- | `Ctrl+C` | Quit (press twice) | 2s timeout |
88
- | `Ctrl+D` | Jump to Logs | Quick access |
89
- | `?` | Show help | |
90
- | `r` | Refresh | Home tab only |
91
- | `s` | Scan servers | Home tab only, throttled 500ms |
92
- | `u` | Check updates | Home tab only, throttled 1000ms |
93
- | `b` | Quick backup | Home tab only |
94
- | `c` | View changelog | In Updates view |
95
- | `Space` | Toggle selection | |
96
- | `Enter` | Confirm | |
97
- | `Esc` | Cancel | Context-aware |
98
- | `/` or `:` | Open command palette | 25+ commands |
99
-
100
- Keys are validated against the current UI state to prevent accidental actions during operations.
101
-
102
- ## CLI Commands
68
+ ## Quick Start
103
69
 
104
70
  ```bash
105
- # Setup wizard
71
+ # Initialize configuration
106
72
  pluginator setup
107
73
 
108
- # Sync plugins from production to test
109
- pluginator sync
110
-
111
- # Migrate plugins from test to production
112
- pluginator migrate
113
-
114
- # Create a backup
115
- pluginator backup
116
-
117
- # Check for updates
118
- pluginator check-updates
119
- ```
120
-
121
- ## Configuration
122
-
123
- Configuration file: `config/pluginator.config`
124
-
125
- ```ini
126
- # Debug mode (0 = off, 1 = on)
127
- PLUGINATOR_DEBUG=0
128
-
129
- # Server paths
130
- PROD_SERVER_PATH=./SERVER/prod
131
- TEST_SERVER_PATH=./SERVER/test
132
-
133
- # Backup settings
134
- BACKUP_DIR=./data/backups
135
- MAX_BACKUPS=5
136
-
137
- # Logging
138
- LOGS_DIR=./data/logs
139
- MAX_LOG_DAYS=30
140
-
141
- # Minecraft version for compatibility checks
142
- MINECRAFT_VERSION=1.21.1
143
-
144
- # Network settings
145
- API_TIMEOUT=30
146
- DOWNLOAD_THREADS=2
147
- ```
148
-
149
- ## Plugin Sources
150
-
151
- Pluginator supports multiple plugin sources:
152
-
153
- | Source | API | Rate Limit |
154
- |--------|-----|------------|
155
- | Spigot | Spiget API v2 | ~100 req/min |
156
- | Modrinth | Modrinth API v2 | 300 req/min |
157
- | GitHub | GitHub API v3 | 60/hr (unauth), 5000/hr (auth) |
158
- | CurseForge | CurseForge API | Requires API key |
159
- | Jenkins | Jenkins REST API | Server-dependent |
160
- | Hangar | Hangar API v1 | Generous |
161
- | Web Manifest | Custom JSON | Unlimited |
162
-
163
- ## Theming
164
-
165
- Choose from four built-in color themes: `default`, `ocean`, `forest`, `sunset`
166
-
167
- ```bash
168
- pluginator --theme ocean
169
- ```
170
-
171
- Or set in `~/.pluginator/config.json`:
172
- ```json
173
- { "theme": "ocean" }
174
- ```
175
-
74
+ # Launch interactive UI
75
+ pluginator
176
76
 
177
- ## Plugin Configuration
178
-
179
- Plugins are configured in `plugins.json`:
180
-
181
- ```json
182
- {
183
- "plugins": [
184
- {
185
- "name": "EssentialsX",
186
- "type": "spigot",
187
- "resourceId": "9089"
188
- },
189
- {
190
- "name": "LuckPerms",
191
- "type": "modrinth",
192
- "projectSlug": "luckperms"
193
- },
194
- {
195
- "name": "Vault",
196
- "type": "github",
197
- "repoSlug": "MilkBowl/Vault"
198
- }
199
- ]
200
- }
77
+ # Or use CLI commands
78
+ pluginator scan --prod # Scan production server
79
+ pluginator check-updates # Check for plugin updates
80
+ pluginator sync # Sync prod to test
201
81
  ```
202
82
 
203
- ### Plugin Types
204
-
205
- | Type | Required Fields | Description |
206
- |------|-----------------|-------------|
207
- | `spigot` | `resourceId` | Spiget resource ID |
208
- | `modrinth` | `projectSlug` | Modrinth project slug |
209
- | `github` | `repoSlug` | GitHub owner/repo format |
210
- | `bukkit` | `id` | CurseForge project ID |
211
- | `web` | `sourceUrl` | Custom manifest URL |
212
- | `jenkins` | `job` | Jenkins job name |
213
- | `manual` | - | Manual updates only |
83
+ ## Keyboard Shortcuts
214
84
 
215
- ### Optional Plugin Fields
216
-
217
- - `version` - Current installed version
218
- - `enabled` - Enable/disable plugin (default: true)
219
- - `disableOnTest` - Disable when synced to test server
220
- - `mcVersion` - Target Minecraft version
221
- - `filenamePattern` - Regex for JAR filename matching
85
+ | Key | Action |
86
+ |-----|--------|
87
+ | `1-9` | Switch tabs (Home/Servers/Plugins/Updates/Logs/Stats/Health/Recs/Perf) |
88
+ | `:` or `/` | Open command palette (25+ commands) |
89
+ | `j` / `k` or `↑` / `↓` | Navigate lists |
90
+ | `g` / `G` | Jump to top/bottom |
91
+ | `?` | Show help |
92
+ | `Ctrl+C` (2x) | Quit |
222
93
 
223
94
  ## Tier System
224
95
 
225
- Pluginator offers tiered subscriptions for different usage levels:
226
-
227
96
  | Tier | Price | Checks/Day | Downloads/Day |
228
97
  |------|-------|------------|---------------|
229
98
  | Free | $0 | 10 | 5 |
@@ -235,34 +104,28 @@ See [Tier System](docs/TIER_SYSTEM.md) for details.
235
104
 
236
105
  ## Documentation
237
106
 
238
- ### Getting Started
239
- - [Installation](docs/INSTALLATION.md) - Quick install for all platforms
240
- - [User Guide](docs/USER_GUIDE.md) - Detailed usage instructions
241
- - [Commands Reference](docs/COMMANDS.md) - Full command palette reference
107
+ - [Installation](docs/INSTALLATION.md) — Quick install for all platforms
108
+ - [User Guide](docs/USER_GUIDE.md) Complete usage documentation
109
+ - [Commands Reference](docs/COMMANDS.md) Full command palette reference
110
+ - [Plugin Registry](docs/PLUGIN_REGISTRY.md) Curated plugin database
111
+ - [Tier System](docs/TIER_SYSTEM.md) — Subscription tiers and features
112
+ - [Error Codes](docs/ERROR_CODES.md) — Error code reference (PLG-NNNN)
113
+ - [Security](docs/SECURITY.md) — Security policy and reporting
114
+ - [Changelog](docs/CHANGELOG.md) — Version history
242
115
 
243
- ### Features
244
- - [Health System](docs/HEALTH_SYSTEM.md) - Plugin health scoring and dashboard
245
- - [Analytics](docs/ANALYTICS.md) - Performance monitoring and alerts
246
- - [Templates](docs/TEMPLATES.md) - Plugin configuration templates
247
- - [Organization](docs/ORGANIZATION.md) - Tags, groups, profiles, and favorites
116
+ ## Support
248
117
 
249
- ### Reference
250
- - [Architecture](docs/ARCHITECTURE.md) - System design and component overview
251
- - [Plugin Registry](docs/PLUGIN_REGISTRY.md) - Using the curated plugin database
252
- - [Tier System](docs/TIER_SYSTEM.md) - Subscription tiers and authentication
253
- - [File Organization](docs/FILE_ORGANIZATION.md) - Where files are stored
254
- - [Auto-Updater](docs/AUTO_UPDATER.md) - Keeping Pluginator up to date
255
- - [Security](docs/SECURITY.md) - Security considerations and best practices
256
- - [Changelog](docs/CHANGELOG.md) - Version history
118
+ - **Bug Reports:** [Open an issue](https://github.com/NindroidA/pluginator/issues/new?template=bug-report.yml)
119
+ - **Feature Requests:** [Open an issue](https://github.com/NindroidA/pluginator/issues/new?template=feature-request.yml)
120
+ - **General Feedback:** [Open an issue](https://github.com/NindroidA/pluginator/issues/new?template=general-feedback.yml)
121
+ - **Plugin Partnerships:** [Partnership request](https://github.com/NindroidA/pluginator/issues/new?template=plugin-developer-request.yml)
257
122
 
258
- ## Contributing
123
+ ## Development
259
124
 
260
- See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
125
+ This project's development has been accelerated through the use of AI-assisted development tools, including GitHub Copilot, Claude Code, and other AI programming assistants. These tools have enhanced productivity while maintaining code quality and best practices. All AI-generated code has been reviewed, tested, and refined to ensure reliability.
261
126
 
262
127
  ## License
263
128
 
264
- [Proprietary](LICENSE) - Copyright (c) 2026 Nindroid Systems (Andrew Curtis)
265
-
266
- ## Development
129
+ Copyright (c) 2026 Nindroid Systems (Andrew Curtis - NindroidA). All Rights Reserved.
267
130
 
268
- This project's development has been accelerated through the use of AI-assisted development tools, including GitHub Copilot, Claude Code, and other AI programming assistants. These tools have enhanced productivity while maintaining code quality and best practices. All AI-generated code has been reviewed, tested, and refined to ensure reliability.
131
+ This is proprietary software. See [LICENSE](LICENSE) for details.
package/dist/cli.js CHANGED
@@ -2359,7 +2359,7 @@ var require_commander = __commonJS((exports) => {
2359
2359
  });
2360
2360
 
2361
2361
  // package.json
2362
- var version = "2.3.0", package_default;
2362
+ var version = "2.3.2", package_default;
2363
2363
  var init_package = __esm(() => {
2364
2364
  package_default = {
2365
2365
  name: "@nindroidsystems/pluginator",
@@ -2383,7 +2383,7 @@ var init_package = __esm(() => {
2383
2383
  "data/defaults"
2384
2384
  ],
2385
2385
  scripts: {
2386
- start: "rm -rf dist && bun build src/cli.ts --outdir dist --target bun && tsc --emitDeclarationOnly && bun run dist/cli.js",
2386
+ start: "rm -rf dist && bun build src/cli.ts --outdir dist --target bun --external @node-rs/crc32 && tsc --emitDeclarationOnly && bun run dist/cli.js",
2387
2387
  dev: "./scripts/build-dev.sh && bun run src/dev/cli.ts",
2388
2388
  typecheck: "tsc --noEmit",
2389
2389
  lint: "biome check .",
@@ -2392,7 +2392,7 @@ var init_package = __esm(() => {
2392
2392
  test: "bun test",
2393
2393
  "test:coverage": "bun test --coverage",
2394
2394
  "test:dev": "bun test tests/dev",
2395
- build: "rm -rf dist && bun build src/cli.ts --outdir dist --target bun && tsc --emitDeclarationOnly",
2395
+ build: "rm -rf dist && bun build src/cli.ts --outdir dist --target bun --external @node-rs/crc32 && tsc --emitDeclarationOnly",
2396
2396
  prepub: "bun run build",
2397
2397
  clean: "./scripts/clean.sh",
2398
2398
  "clean:all": "./scripts/clean.sh --all",
@@ -11808,348 +11808,6 @@ var require_simple_invariant = __commonJS((exports, module) => {
11808
11808
  };
11809
11809
  });
11810
11810
 
11811
- // node_modules/@node-rs/crc32-linux-x64-musl/crc32.linux-x64-musl.node
11812
- var require_crc32_linux_x64_musl = __commonJS((exports, module) => {
11813
- module.exports = __require("./crc32.linux-x64-musl-4qzbwpa3.node");
11814
- });
11815
-
11816
- // node_modules/@node-rs/crc32-linux-x64-gnu/crc32.linux-x64-gnu.node
11817
- var require_crc32_linux_x64_gnu = __commonJS((exports, module) => {
11818
- module.exports = __require("./crc32.linux-x64-gnu-23wcsc5b.node");
11819
- });
11820
-
11821
- // node_modules/@node-rs/crc32/index.js
11822
- var require_crc32 = __commonJS((exports, module) => {
11823
- var __filename = "/home/runner/work/pluginator-dev/pluginator-dev/node_modules/@node-rs/crc32/index.js";
11824
- var { createRequire } = __require("module");
11825
- __require = createRequire(__filename);
11826
- var { readFileSync: readFileSync2 } = __require("fs");
11827
- var nativeBinding = null;
11828
- var loadErrors = [];
11829
- var isMusl = () => {
11830
- let musl = false;
11831
- if (process.platform === "linux") {
11832
- musl = isMuslFromFilesystem();
11833
- if (musl === null) {
11834
- musl = isMuslFromReport();
11835
- }
11836
- if (musl === null) {
11837
- musl = isMuslFromChildProcess();
11838
- }
11839
- }
11840
- return musl;
11841
- };
11842
- var isFileMusl = (f) => f.includes("libc.musl-") || f.includes("ld-musl-");
11843
- var isMuslFromFilesystem = () => {
11844
- try {
11845
- return readFileSync2("/usr/bin/ldd", "utf-8").includes("musl");
11846
- } catch {
11847
- return null;
11848
- }
11849
- };
11850
- var isMuslFromReport = () => {
11851
- const report = typeof process.report.getReport === "function" ? process.report.getReport() : null;
11852
- if (!report) {
11853
- return null;
11854
- }
11855
- if (report.header && report.header.glibcVersionRuntime) {
11856
- return false;
11857
- }
11858
- if (Array.isArray(report.sharedObjects)) {
11859
- if (report.sharedObjects.some(isFileMusl)) {
11860
- return true;
11861
- }
11862
- }
11863
- return false;
11864
- };
11865
- var isMuslFromChildProcess = () => {
11866
- try {
11867
- return __require("child_process").execSync("ldd --version", { encoding: "utf8" }).includes("musl");
11868
- } catch (e) {
11869
- return false;
11870
- }
11871
- };
11872
- function requireNative() {
11873
- if (process.platform === "android") {
11874
- if (process.arch === "arm64") {
11875
- try {
11876
- return (()=>{throw new Error("Cannot require module "+"./crc32.android-arm64.node");})();
11877
- } catch (e) {
11878
- loadErrors.push(e);
11879
- }
11880
- try {
11881
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-android-arm64");})();
11882
- } catch (e) {
11883
- loadErrors.push(e);
11884
- }
11885
- } else if (process.arch === "arm") {
11886
- try {
11887
- return (()=>{throw new Error("Cannot require module "+"./crc32.android-arm-eabi.node");})();
11888
- } catch (e) {
11889
- loadErrors.push(e);
11890
- }
11891
- try {
11892
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-android-arm-eabi");})();
11893
- } catch (e) {
11894
- loadErrors.push(e);
11895
- }
11896
- } else {
11897
- loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`));
11898
- }
11899
- } else if (process.platform === "win32") {
11900
- if (process.arch === "x64") {
11901
- try {
11902
- return (()=>{throw new Error("Cannot require module "+"./crc32.win32-x64-msvc.node");})();
11903
- } catch (e) {
11904
- loadErrors.push(e);
11905
- }
11906
- try {
11907
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-win32-x64-msvc");})();
11908
- } catch (e) {
11909
- loadErrors.push(e);
11910
- }
11911
- } else if (process.arch === "ia32") {
11912
- try {
11913
- return (()=>{throw new Error("Cannot require module "+"./crc32.win32-ia32-msvc.node");})();
11914
- } catch (e) {
11915
- loadErrors.push(e);
11916
- }
11917
- try {
11918
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-win32-ia32-msvc");})();
11919
- } catch (e) {
11920
- loadErrors.push(e);
11921
- }
11922
- } else if (process.arch === "arm64") {
11923
- try {
11924
- return (()=>{throw new Error("Cannot require module "+"./crc32.win32-arm64-msvc.node");})();
11925
- } catch (e) {
11926
- loadErrors.push(e);
11927
- }
11928
- try {
11929
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-win32-arm64-msvc");})();
11930
- } catch (e) {
11931
- loadErrors.push(e);
11932
- }
11933
- } else {
11934
- loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`));
11935
- }
11936
- } else if (process.platform === "darwin") {
11937
- try {
11938
- return (()=>{throw new Error("Cannot require module "+"./crc32.darwin-universal.node");})();
11939
- } catch (e) {
11940
- loadErrors.push(e);
11941
- }
11942
- try {
11943
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-darwin-universal");})();
11944
- } catch (e) {
11945
- loadErrors.push(e);
11946
- }
11947
- if (process.arch === "x64") {
11948
- try {
11949
- return (()=>{throw new Error("Cannot require module "+"./crc32.darwin-x64.node");})();
11950
- } catch (e) {
11951
- loadErrors.push(e);
11952
- }
11953
- try {
11954
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-darwin-x64");})();
11955
- } catch (e) {
11956
- loadErrors.push(e);
11957
- }
11958
- } else if (process.arch === "arm64") {
11959
- try {
11960
- return (()=>{throw new Error("Cannot require module "+"./crc32.darwin-arm64.node");})();
11961
- } catch (e) {
11962
- loadErrors.push(e);
11963
- }
11964
- try {
11965
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-darwin-arm64");})();
11966
- } catch (e) {
11967
- loadErrors.push(e);
11968
- }
11969
- } else {
11970
- loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`));
11971
- }
11972
- } else if (process.platform === "freebsd") {
11973
- if (process.arch === "x64") {
11974
- try {
11975
- return (()=>{throw new Error("Cannot require module "+"./crc32.freebsd-x64.node");})();
11976
- } catch (e) {
11977
- loadErrors.push(e);
11978
- }
11979
- try {
11980
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-freebsd-x64");})();
11981
- } catch (e) {
11982
- loadErrors.push(e);
11983
- }
11984
- } else if (process.arch === "arm64") {
11985
- try {
11986
- return (()=>{throw new Error("Cannot require module "+"./crc32.freebsd-arm64.node");})();
11987
- } catch (e) {
11988
- loadErrors.push(e);
11989
- }
11990
- try {
11991
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-freebsd-arm64");})();
11992
- } catch (e) {
11993
- loadErrors.push(e);
11994
- }
11995
- } else {
11996
- loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`));
11997
- }
11998
- } else if (process.platform === "linux") {
11999
- if (process.arch === "x64") {
12000
- if (isMusl()) {
12001
- try {
12002
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-x64-musl.node");})();
12003
- } catch (e) {
12004
- loadErrors.push(e);
12005
- }
12006
- try {
12007
- return require_crc32_linux_x64_musl();
12008
- } catch (e) {
12009
- loadErrors.push(e);
12010
- }
12011
- } else {
12012
- try {
12013
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-x64-gnu.node");})();
12014
- } catch (e) {
12015
- loadErrors.push(e);
12016
- }
12017
- try {
12018
- return require_crc32_linux_x64_gnu();
12019
- } catch (e) {
12020
- loadErrors.push(e);
12021
- }
12022
- }
12023
- } else if (process.arch === "arm64") {
12024
- if (isMusl()) {
12025
- try {
12026
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-arm64-musl.node");})();
12027
- } catch (e) {
12028
- loadErrors.push(e);
12029
- }
12030
- try {
12031
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-arm64-musl");})();
12032
- } catch (e) {
12033
- loadErrors.push(e);
12034
- }
12035
- } else {
12036
- try {
12037
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-arm64-gnu.node");})();
12038
- } catch (e) {
12039
- loadErrors.push(e);
12040
- }
12041
- try {
12042
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-arm64-gnu");})();
12043
- } catch (e) {
12044
- loadErrors.push(e);
12045
- }
12046
- }
12047
- } else if (process.arch === "arm") {
12048
- if (isMusl()) {
12049
- try {
12050
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-arm-musleabihf.node");})();
12051
- } catch (e) {
12052
- loadErrors.push(e);
12053
- }
12054
- try {
12055
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-arm-musleabihf");})();
12056
- } catch (e) {
12057
- loadErrors.push(e);
12058
- }
12059
- } else {
12060
- try {
12061
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-arm-gnueabihf.node");})();
12062
- } catch (e) {
12063
- loadErrors.push(e);
12064
- }
12065
- try {
12066
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-arm-gnueabihf");})();
12067
- } catch (e) {
12068
- loadErrors.push(e);
12069
- }
12070
- }
12071
- } else if (process.arch === "riscv64") {
12072
- if (isMusl()) {
12073
- try {
12074
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-riscv64-musl.node");})();
12075
- } catch (e) {
12076
- loadErrors.push(e);
12077
- }
12078
- try {
12079
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-riscv64-musl");})();
12080
- } catch (e) {
12081
- loadErrors.push(e);
12082
- }
12083
- } else {
12084
- try {
12085
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-riscv64-gnu.node");})();
12086
- } catch (e) {
12087
- loadErrors.push(e);
12088
- }
12089
- try {
12090
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-riscv64-gnu");})();
12091
- } catch (e) {
12092
- loadErrors.push(e);
12093
- }
12094
- }
12095
- } else if (process.arch === "ppc64") {
12096
- try {
12097
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-ppc64-gnu.node");})();
12098
- } catch (e) {
12099
- loadErrors.push(e);
12100
- }
12101
- try {
12102
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-ppc64-gnu");})();
12103
- } catch (e) {
12104
- loadErrors.push(e);
12105
- }
12106
- } else if (process.arch === "s390x") {
12107
- try {
12108
- return (()=>{throw new Error("Cannot require module "+"./crc32.linux-s390x-gnu.node");})();
12109
- } catch (e) {
12110
- loadErrors.push(e);
12111
- }
12112
- try {
12113
- return (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-linux-s390x-gnu");})();
12114
- } catch (e) {
12115
- loadErrors.push(e);
12116
- }
12117
- } else {
12118
- loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`));
12119
- }
12120
- } else {
12121
- loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`));
12122
- }
12123
- }
12124
- nativeBinding = requireNative();
12125
- if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
12126
- try {
12127
- nativeBinding = (()=>{throw new Error("Cannot require module "+"./crc32.wasi.cjs");})();
12128
- } catch (err) {
12129
- if (process.env.NAPI_RS_FORCE_WASI) {
12130
- loadErrors.push(err);
12131
- }
12132
- }
12133
- if (!nativeBinding) {
12134
- try {
12135
- nativeBinding = (()=>{throw new Error("Cannot require module "+"@node-rs/crc32-wasm32-wasi");})();
12136
- } catch (err) {
12137
- if (process.env.NAPI_RS_FORCE_WASI) {
12138
- loadErrors.push(err);
12139
- }
12140
- }
12141
- }
12142
- }
12143
- if (!nativeBinding) {
12144
- if (loadErrors.length > 0) {
12145
- throw new Error("Failed to load native binding", { cause: loadErrors });
12146
- }
12147
- throw new Error(`Failed to load native binding`);
12148
- }
12149
- exports.crc32 = nativeBinding.crc32;
12150
- exports.crc32c = nativeBinding.crc32c;
12151
- });
12152
-
12153
11811
  // node_modules/yauzl-promise/lib/shared.js
12154
11812
  var require_shared = __commonJS((exports, module) => {
12155
11813
  var INTERNAL_SYMBOL = {};
@@ -12209,7 +11867,7 @@ var require_utils = __commonJS((exports, module) => {
12209
11867
  var require_entry = __commonJS((exports, module) => {
12210
11868
  var { createInflateRaw } = __require("zlib");
12211
11869
  var { Transform: TransformStream, pipeline } = __require("stream");
12212
- var calculateCrc32 = require_crc32().crc32;
11870
+ var calculateCrc32 = __require("@node-rs/crc32").crc32;
12213
11871
  var { isObject: isObject2, isBoolean: isBoolean2, isPositiveInteger, isPositiveIntegerOrZero } = require_is_it_type();
12214
11872
  var assert = require_simple_invariant();
12215
11873
  var { INTERNAL_SYMBOL, uncertainUncompressedSizeEntriesRegistry } = require_shared();
@@ -12390,7 +12048,7 @@ var require_entry = __commonJS((exports, module) => {
12390
12048
 
12391
12049
  // node_modules/yauzl-promise/lib/zip.js
12392
12050
  var require_zip = __commonJS((exports, module) => {
12393
- var calculateCrc32 = require_crc32().crc32;
12051
+ var calculateCrc32 = __require("@node-rs/crc32").crc32;
12394
12052
  var assert = require_simple_invariant();
12395
12053
  var { isPositiveIntegerOrZero } = require_is_it_type();
12396
12054
  var Entry = require_entry();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nindroidsystems/pluginator",
3
- "version": "2.3.0",
3
+ "version": "2.3.2",
4
4
  "description": "A sophisticated Minecraft server plugin manager with multi-source update checking, sync/backup workflows, and a modern terminal UI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  "data/defaults"
21
21
  ],
22
22
  "scripts": {
23
- "start": "rm -rf dist && bun build src/cli.ts --outdir dist --target bun && tsc --emitDeclarationOnly && bun run dist/cli.js",
23
+ "start": "rm -rf dist && bun build src/cli.ts --outdir dist --target bun --external @node-rs/crc32 && tsc --emitDeclarationOnly && bun run dist/cli.js",
24
24
  "dev": "./scripts/build-dev.sh && bun run src/dev/cli.ts",
25
25
  "typecheck": "tsc --noEmit",
26
26
  "lint": "biome check .",
@@ -29,7 +29,7 @@
29
29
  "test": "bun test",
30
30
  "test:coverage": "bun test --coverage",
31
31
  "test:dev": "bun test tests/dev",
32
- "build": "rm -rf dist && bun build src/cli.ts --outdir dist --target bun && tsc --emitDeclarationOnly",
32
+ "build": "rm -rf dist && bun build src/cli.ts --outdir dist --target bun --external @node-rs/crc32 && tsc --emitDeclarationOnly",
33
33
  "prepub": "bun run build",
34
34
  "clean": "./scripts/clean.sh",
35
35
  "clean:all": "./scripts/clean.sh --all",