@lunnos/hyt 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +131 -0
  2. package/dist/commands/build.d.ts +3 -0
  3. package/dist/commands/build.d.ts.map +1 -0
  4. package/dist/commands/build.js +74 -0
  5. package/dist/commands/build.js.map +1 -0
  6. package/dist/commands/dev.d.ts +3 -0
  7. package/dist/commands/dev.d.ts.map +1 -0
  8. package/dist/commands/dev.js +179 -0
  9. package/dist/commands/dev.js.map +1 -0
  10. package/dist/commands/init.d.ts +3 -0
  11. package/dist/commands/init.d.ts.map +1 -0
  12. package/dist/commands/init.js +269 -0
  13. package/dist/commands/init.js.map +1 -0
  14. package/dist/commands/setup.d.ts +3 -0
  15. package/dist/commands/setup.d.ts.map +1 -0
  16. package/dist/commands/setup.js +164 -0
  17. package/dist/commands/setup.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +20 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/utils/config.d.ts +11 -0
  23. package/dist/utils/config.d.ts.map +1 -0
  24. package/dist/utils/config.js +39 -0
  25. package/dist/utils/config.js.map +1 -0
  26. package/dist/utils/download.d.ts +9 -0
  27. package/dist/utils/download.d.ts.map +1 -0
  28. package/dist/utils/download.js +89 -0
  29. package/dist/utils/download.js.map +1 -0
  30. package/dist/utils/errors.d.ts +13 -0
  31. package/dist/utils/errors.d.ts.map +1 -0
  32. package/dist/utils/errors.js +25 -0
  33. package/dist/utils/errors.js.map +1 -0
  34. package/dist/utils/gradle.d.ts +7 -0
  35. package/dist/utils/gradle.d.ts.map +1 -0
  36. package/dist/utils/gradle.js +50 -0
  37. package/dist/utils/gradle.js.map +1 -0
  38. package/dist/utils/hytale.d.ts +5 -0
  39. package/dist/utils/hytale.d.ts.map +1 -0
  40. package/dist/utils/hytale.js +84 -0
  41. package/dist/utils/hytale.js.map +1 -0
  42. package/dist/utils/java.d.ts +7 -0
  43. package/dist/utils/java.d.ts.map +1 -0
  44. package/dist/utils/java.js +53 -0
  45. package/dist/utils/java.js.map +1 -0
  46. package/dist/utils/javaDownload.d.ts +9 -0
  47. package/dist/utils/javaDownload.d.ts.map +1 -0
  48. package/dist/utils/javaDownload.js +185 -0
  49. package/dist/utils/javaDownload.js.map +1 -0
  50. package/dist/utils/paths.d.ts +9 -0
  51. package/dist/utils/paths.d.ts.map +1 -0
  52. package/dist/utils/paths.js +19 -0
  53. package/dist/utils/paths.js.map +1 -0
  54. package/dist/utils/server.d.ts +16 -0
  55. package/dist/utils/server.d.ts.map +1 -0
  56. package/dist/utils/server.js +70 -0
  57. package/dist/utils/server.js.map +1 -0
  58. package/dist/utils/ui.d.ts +12 -0
  59. package/dist/utils/ui.d.ts.map +1 -0
  60. package/dist/utils/ui.js +22 -0
  61. package/dist/utils/ui.js.map +1 -0
  62. package/dist/utils/watcher.d.ts +10 -0
  63. package/dist/utils/watcher.d.ts.map +1 -0
  64. package/dist/utils/watcher.js +45 -0
  65. package/dist/utils/watcher.js.map +1 -0
  66. package/package.json +44 -0
@@ -0,0 +1,16 @@
1
+ import type { ResultPromise } from 'execa';
2
+ export interface ServerOptions {
3
+ javaPath: string;
4
+ serverJarPath: string;
5
+ assetsPath: string;
6
+ workingDir: string;
7
+ }
8
+ /** Launch the Hytale server */
9
+ export declare function launchHytaleServer(options: ServerOptions): Promise<ResultPromise>;
10
+ /** Stop the running Hytale server */
11
+ export declare function stopHytaleServer(): Promise<void>;
12
+ /** Check if server is running */
13
+ export declare function isServerRunning(): boolean;
14
+ /** Restart the Hytale server */
15
+ export declare function restartHytaleServer(options: ServerOptions): Promise<ResultPromise>;
16
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/utils/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,+BAA+B;AAC/B,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAgCvF;AAED,qCAAqC;AACrC,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4BtD;AAED,iCAAiC;AACjC,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,gCAAgC;AAChC,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAKxF"}
@@ -0,0 +1,70 @@
1
+ import { execa } from 'execa';
2
+ import { HytaleError } from './errors.js';
3
+ let serverProcess = null;
4
+ /** Launch the Hytale server */
5
+ export async function launchHytaleServer(options) {
6
+ const { javaPath, serverJarPath, assetsPath, workingDir } = options;
7
+ try {
8
+ // Stop existing server if running
9
+ if (serverProcess) {
10
+ await stopHytaleServer();
11
+ }
12
+ // Launch server with output streaming
13
+ serverProcess = execa(javaPath, ['-jar', serverJarPath, '--assets', assetsPath], {
14
+ cwd: workingDir,
15
+ stdio: 'inherit', // Stream output to console
16
+ cleanup: true,
17
+ });
18
+ // Handle server exit
19
+ serverProcess.on('exit', (code) => {
20
+ if (code !== 0 && code !== null) {
21
+ console.log(`\n⚠️ Server exited with code ${code}`);
22
+ }
23
+ serverProcess = null;
24
+ });
25
+ return serverProcess;
26
+ }
27
+ catch (error) {
28
+ throw new HytaleError(`Failed to launch Hytale server: ${error.message}`);
29
+ }
30
+ }
31
+ /** Stop the running Hytale server */
32
+ export async function stopHytaleServer() {
33
+ if (!serverProcess) {
34
+ return;
35
+ }
36
+ try {
37
+ // Send stop command to server console
38
+ if (serverProcess.stdin) {
39
+ serverProcess.stdin.write('stop\n');
40
+ }
41
+ // Wait for graceful shutdown (max 10 seconds)
42
+ const timeout = setTimeout(() => {
43
+ if (serverProcess && !serverProcess.killed) {
44
+ serverProcess.kill('SIGTERM');
45
+ }
46
+ }, 10000);
47
+ await serverProcess;
48
+ clearTimeout(timeout);
49
+ serverProcess = null;
50
+ }
51
+ catch {
52
+ // Process might already be stopped
53
+ if (serverProcess && !serverProcess.killed) {
54
+ serverProcess.kill('SIGKILL');
55
+ }
56
+ serverProcess = null;
57
+ }
58
+ }
59
+ /** Check if server is running */
60
+ export function isServerRunning() {
61
+ return serverProcess !== null && !serverProcess.killed;
62
+ }
63
+ /** Restart the Hytale server */
64
+ export async function restartHytaleServer(options) {
65
+ await stopHytaleServer();
66
+ // Wait a bit before restarting
67
+ await new Promise(resolve => setTimeout(resolve, 2000));
68
+ return launchHytaleServer(options);
69
+ }
70
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/utils/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,IAAI,aAAa,GAAyB,IAAI,CAAC;AAS/C,+BAA+B;AAC/B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAsB;IAC7D,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEpE,IAAI,CAAC;QACH,kCAAkC;QAClC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC;QAED,sCAAsC;QACtC,aAAa,GAAG,KAAK,CACnB,QAAQ,EACR,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,EAC/C;YACE,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,SAAS,EAAE,2BAA2B;YAC7C,OAAO,EAAE,IAAI;SACd,CACF,CAAC;QAEF,qBAAqB;QACrB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAmB,EAAE,EAAE;YAC/C,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,WAAW,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,sCAAsC;QACtC,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,8CAA8C;QAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,MAAM,aAAa,CAAC;QACpB,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;QACnC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QACD,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AACzD,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAsB;IAC9D,MAAM,gBAAgB,EAAE,CAAC;IACzB,+BAA+B;IAC/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Ora } from 'ora';
2
+ /** Create and start a spinner */
3
+ export declare function startSpinner(message: string): Ora;
4
+ /** Show success message with checkmark */
5
+ export declare function success(message: string): void;
6
+ /** Show error message */
7
+ export declare function error(message: string): void;
8
+ /** Show info message */
9
+ export declare function info(message: string): void;
10
+ /** Show warning message */
11
+ export declare function warn(message: string): void;
12
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAEjD;AAED,0CAA0C;AAC1C,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,yBAAyB;AACzB,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAwB;AACxB,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,2BAA2B;AAC3B,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C"}
@@ -0,0 +1,22 @@
1
+ import ora from 'ora';
2
+ /** Create and start a spinner */
3
+ export function startSpinner(message) {
4
+ return ora(message).start();
5
+ }
6
+ /** Show success message with checkmark */
7
+ export function success(message) {
8
+ ora().succeed(message);
9
+ }
10
+ /** Show error message */
11
+ export function error(message) {
12
+ ora().fail(message);
13
+ }
14
+ /** Show info message */
15
+ export function info(message) {
16
+ ora().info(message);
17
+ }
18
+ /** Show warning message */
19
+ export function warn(message) {
20
+ ora().warn(message);
21
+ }
22
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"AAAA,OAAO,GAAY,MAAM,KAAK,CAAC;AAE/B,iCAAiC;AACjC,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { FSWatcher } from 'chokidar';
2
+ export interface WatcherOptions {
3
+ onFileChange: (filePath: string) => void | Promise<void>;
4
+ ignorePatterns?: string[];
5
+ }
6
+ /** Watch source files for changes */
7
+ export declare function watchFiles(watchDir: string, options: WatcherOptions): FSWatcher;
8
+ /** Stop watching files */
9
+ export declare function stopWatcher(watcher: FSWatcher): Promise<void>;
10
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/utils/watcher.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,SAAS,CA4C/E;AAED,0BAA0B;AAC1B,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE"}
@@ -0,0 +1,45 @@
1
+ import chokidar from 'chokidar';
2
+ /** Watch source files for changes */
3
+ export function watchFiles(watchDir, options) {
4
+ const { onFileChange, ignorePatterns = [] } = options;
5
+ // Default ignore patterns
6
+ const defaultIgnores = [
7
+ '**/build/**',
8
+ '**/.gradle/**',
9
+ '**/node_modules/**',
10
+ '**/.git/**',
11
+ '**/*.class',
12
+ '**/*.jar',
13
+ ];
14
+ const watcher = chokidar.watch(watchDir, {
15
+ ignored: [...defaultIgnores, ...ignorePatterns],
16
+ persistent: true,
17
+ ignoreInitial: true, // Don't trigger on startup
18
+ awaitWriteFinish: {
19
+ stabilityThreshold: 300, // Wait 300ms after last change
20
+ pollInterval: 100,
21
+ },
22
+ // Performance optimizations
23
+ usePolling: false,
24
+ interval: 100,
25
+ binaryInterval: 300,
26
+ });
27
+ watcher.on('change', (filePath) => {
28
+ onFileChange(filePath);
29
+ });
30
+ watcher.on('add', (filePath) => {
31
+ onFileChange(filePath);
32
+ });
33
+ watcher.on('unlink', (filePath) => {
34
+ onFileChange(filePath);
35
+ });
36
+ watcher.on('error', (error) => {
37
+ console.error('Watcher error:', error);
38
+ });
39
+ return watcher;
40
+ }
41
+ /** Stop watching files */
42
+ export async function stopWatcher(watcher) {
43
+ await watcher.close();
44
+ }
45
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/utils/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,QAAuB,MAAM,UAAU,CAAC;AAQ/C,qCAAqC;AACrC,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAuB;IAClE,MAAM,EAAE,YAAY,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEtD,0BAA0B;IAC1B,MAAM,cAAc,GAAG;QACrB,aAAa;QACb,eAAe;QACf,oBAAoB;QACpB,YAAY;QACZ,YAAY;QACZ,UAAU;KACX,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE;QACvC,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,GAAG,cAAc,CAAC;QAC/C,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI,EAAE,2BAA2B;QAChD,gBAAgB,EAAE;YAChB,kBAAkB,EAAE,GAAG,EAAE,+BAA+B;YACxD,YAAY,EAAE,GAAG;SAClB;QACD,4BAA4B;QAC5B,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,GAAG;QACb,cAAc,EAAE,GAAG;KACpB,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE;QACxC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,QAAgB,EAAE,EAAE;QACrC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE;QACxC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAkB;IAClD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@lunnos/hyt",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool for Hytale plugin development automation",
5
+ "type": "module",
6
+ "bin": "./dist/index.js",
7
+ "engines": {
8
+ "node": ">=20.8.1"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "semantic-release": "semantic-release"
15
+ },
16
+ "keywords": [
17
+ "hytale",
18
+ "plugin",
19
+ "cli",
20
+ "development"
21
+ ],
22
+ "author": "Lunnos",
23
+ "license": "ISC",
24
+ "dependencies": {
25
+ "chokidar": "^5.0.0",
26
+ "cli-progress": "^3.12.0",
27
+ "commander": "^14.0.2",
28
+ "execa": "^9.6.1",
29
+ "ora": "^9.0.0"
30
+ },
31
+ "devDependencies": {
32
+ "@semantic-release/changelog": "^6.0.3",
33
+ "@semantic-release/git": "^10.0.1",
34
+ "@types/chokidar": "^1.7.5",
35
+ "@types/cli-progress": "^3.11.6",
36
+ "@types/node": "^25.0.8",
37
+ "semantic-release": "^23.0.0",
38
+ "typescript": "^5.9.3"
39
+ },
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/LunnosMp4/hyt.git"
43
+ }
44
+ }