ninedeploy 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/dist/client.d.ts +5 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +11 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/commands/configCenter.d.ts +14 -0
  7. package/dist/commands/configCenter.d.ts.map +1 -0
  8. package/dist/commands/configCenter.js +56 -0
  9. package/dist/commands/configCenter.js.map +1 -0
  10. package/dist/commands/demo.d.ts +3 -0
  11. package/dist/commands/demo.d.ts.map +1 -0
  12. package/dist/commands/demo.js +18 -0
  13. package/dist/commands/demo.js.map +1 -0
  14. package/dist/commands/housekeeping.d.ts +3 -0
  15. package/dist/commands/housekeeping.d.ts.map +1 -0
  16. package/dist/commands/housekeeping.js +11 -0
  17. package/dist/commands/housekeeping.js.map +1 -0
  18. package/dist/commands/login.d.ts +3 -0
  19. package/dist/commands/login.d.ts.map +1 -0
  20. package/dist/commands/login.js +36 -0
  21. package/dist/commands/login.js.map +1 -0
  22. package/dist/commands/manage.d.ts +60 -0
  23. package/dist/commands/manage.d.ts.map +1 -0
  24. package/dist/commands/manage.js +440 -0
  25. package/dist/commands/manage.js.map +1 -0
  26. package/dist/commands/misc.d.ts +24 -0
  27. package/dist/commands/misc.d.ts.map +1 -0
  28. package/dist/commands/misc.js +183 -0
  29. package/dist/commands/misc.js.map +1 -0
  30. package/dist/commands/plugins.d.ts +15 -0
  31. package/dist/commands/plugins.d.ts.map +1 -0
  32. package/dist/commands/plugins.js +77 -0
  33. package/dist/commands/plugins.js.map +1 -0
  34. package/dist/commands/services.d.ts +22 -0
  35. package/dist/commands/services.d.ts.map +1 -0
  36. package/dist/commands/services.js +236 -0
  37. package/dist/commands/services.js.map +1 -0
  38. package/dist/commands/setup.d.ts +3 -0
  39. package/dist/commands/setup.d.ts.map +1 -0
  40. package/dist/commands/setup.js +40 -0
  41. package/dist/commands/setup.js.map +1 -0
  42. package/dist/commands/token.d.ts +5 -0
  43. package/dist/commands/token.d.ts.map +1 -0
  44. package/dist/commands/token.js +33 -0
  45. package/dist/commands/token.js.map +1 -0
  46. package/dist/commands/workspaces.d.ts +8 -0
  47. package/dist/commands/workspaces.d.ts.map +1 -0
  48. package/dist/commands/workspaces.js +52 -0
  49. package/dist/commands/workspaces.js.map +1 -0
  50. package/dist/config.d.ts +7 -0
  51. package/dist/config.d.ts.map +1 -0
  52. package/dist/config.js +31 -0
  53. package/dist/config.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +225 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/lib/format.d.ts +34 -0
  59. package/dist/lib/format.d.ts.map +1 -0
  60. package/dist/lib/format.js +145 -0
  61. package/dist/lib/format.js.map +1 -0
  62. package/dist/prompts.d.ts +5 -0
  63. package/dist/prompts.d.ts.map +1 -0
  64. package/dist/prompts.js +59 -0
  65. package/dist/prompts.js.map +1 -0
  66. package/package.json +41 -0
@@ -0,0 +1,145 @@
1
+ /** CLI formatting utilities — colors, spinners, tables, banners. */
2
+ const RESET = '\x1b[0m';
3
+ const BOLD = '\x1b[1m';
4
+ const DIM = '\x1b[2m';
5
+ const RED = '\x1b[31m';
6
+ const GREEN = '\x1b[32m';
7
+ const YELLOW = '\x1b[33m';
8
+ const BLUE = '\x1b[34m';
9
+ const MAGENTA = '\x1b[35m';
10
+ const CYAN = '\x1b[36m';
11
+ const GRAY = '\x1b[90m';
12
+ export const c = {
13
+ reset: (s) => `${RESET}${s}${RESET}`,
14
+ bold: (s) => `${BOLD}${s}${RESET}`,
15
+ dim: (s) => `${DIM}${s}${RESET}`,
16
+ red: (s) => `${RED}${s}${RESET}`,
17
+ green: (s) => `${GREEN}${s}${RESET}`,
18
+ yellow: (s) => `${YELLOW}${s}${RESET}`,
19
+ blue: (s) => `${BLUE}${s}${RESET}`,
20
+ magenta: (s) => `${MAGENTA}${s}${RESET}`,
21
+ cyan: (s) => `${CYAN}${s}${RESET}`,
22
+ gray: (s) => `${GRAY}${s}${RESET}`,
23
+ };
24
+ const STATUS_COLORS = {
25
+ running: c.green,
26
+ healthy: c.green,
27
+ active: c.green,
28
+ sent: c.green,
29
+ ok: c.green,
30
+ stopped: c.gray,
31
+ idle: c.gray,
32
+ deploying: c.yellow,
33
+ building: c.yellow,
34
+ queued: c.yellow,
35
+ pending: c.yellow,
36
+ creating: c.yellow,
37
+ error: c.red,
38
+ failed: c.red,
39
+ unhealthy: c.red,
40
+ };
41
+ export function statusColor(status) {
42
+ return (STATUS_COLORS[status] ?? ((s) => s))(status);
43
+ }
44
+ export function banner() {
45
+ const gradient = `${MAGENTA}╔${'═'.repeat(44)}╗${RESET}
46
+ ${MAGENTA}║${RESET} ${BOLD} 9 NineDeploy${RESET} ${DIM}Self-hosted PaaS${RESET} ${MAGENTA}║${RESET}
47
+ ${MAGENTA}║${RESET} ${GRAY}Deploy from Git or Docker in one click${RESET} ${MAGENTA}║${RESET}
48
+ ${MAGENTA}╚${'═'.repeat(44)}╝${RESET}`;
49
+ console.log(gradient);
50
+ console.log();
51
+ }
52
+ /** Simple spinner that shows a message while a promise resolves. */
53
+ export async function spinner(msg, fn) {
54
+ const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
55
+ let i = 0;
56
+ const interval = setInterval(() => {
57
+ process.stdout.write(`\r${CYAN}${frames[i % frames.length]}${RESET} ${msg}...`);
58
+ i++;
59
+ }, 80);
60
+ try {
61
+ const result = await fn();
62
+ clearInterval(interval);
63
+ process.stdout.write(`\r${GREEN}✓${RESET} ${msg}\n`);
64
+ return result;
65
+ }
66
+ catch (err) {
67
+ clearInterval(interval);
68
+ process.stdout.write(`\r${RED}✗${RESET} ${msg}\n`);
69
+ throw err;
70
+ }
71
+ }
72
+ /** Print a formatted table from an array of objects. */
73
+ export function table(rows, columns) {
74
+ if (rows.length === 0) {
75
+ console.log(c.gray(' (empty)'));
76
+ return;
77
+ }
78
+ const cols = columns ?? Object.keys(rows[0] ?? {});
79
+ const widths = cols.map((col) => Math.max(col.length, ...rows.map((r) => String(r[col] ?? '').length)));
80
+ // Header
81
+ const header = cols.map((col, i) => col.padEnd(widths[i])).join(' ');
82
+ console.log(` ${c.bold(c.cyan(header))}`);
83
+ console.log(` ${'─'.repeat(widths.reduce((a, b) => a + b + 2, -2))}`);
84
+ // Rows
85
+ for (const row of rows) {
86
+ const cells = cols.map((col, i) => {
87
+ const val = String(row[col] ?? '');
88
+ if (col === 'status' || col === 'health')
89
+ return statusColor(val).padEnd(widths[i]);
90
+ return val.padEnd(widths[i]);
91
+ });
92
+ console.log(` ${cells.join(' ')}`);
93
+ }
94
+ console.log();
95
+ }
96
+ /** Print a key-value pair with alignment. */
97
+ export function kv(key, value, indent = 2) {
98
+ const padded = ' '.repeat(indent);
99
+ const val = value === null || value === undefined ? c.gray('—') : String(value);
100
+ console.log(`${padded}${c.gray(key.padEnd(16))} ${val}`);
101
+ }
102
+ /** Print a section header. */
103
+ export function header(title) {
104
+ console.log();
105
+ console.log(` ${c.bold(c.cyan(title))}`);
106
+ console.log(` ${c.gray('─'.repeat(Math.max(title.length + 2, 30)))}`);
107
+ }
108
+ /** Print an error and exit. */
109
+ export function error(msg, code = 1) {
110
+ console.error(`\n ${c.red('✗')} ${msg}\n`);
111
+ process.exit(code);
112
+ }
113
+ /** Print a success message. */
114
+ export function success(msg) {
115
+ console.log(` ${c.green('✓')} ${c.green(msg)}`);
116
+ }
117
+ /** Print an info message. */
118
+ export function info(msg) {
119
+ console.log(` ${c.blue('ℹ')} ${c.dim(msg)}`);
120
+ }
121
+ /** Format bytes to human readable. */
122
+ export function fmtBytes(b) {
123
+ if (!b)
124
+ return '0 B';
125
+ const mb = b / 1048576;
126
+ if (mb < 1)
127
+ return `${(b / 1024).toFixed(0)} KB`;
128
+ if (mb >= 1024)
129
+ return `${(mb / 1024).toFixed(2)} GB`;
130
+ return `${mb.toFixed(1)} MB`;
131
+ }
132
+ /** Format relative time. */
133
+ export function fmtTime(ts) {
134
+ if (!ts)
135
+ return c.gray('never');
136
+ const diff = Date.now() - new Date(ts).getTime();
137
+ if (diff < 60000)
138
+ return 'just now';
139
+ if (diff < 3600000)
140
+ return `${Math.floor(diff / 60000)}m ago`;
141
+ if (diff < 86400000)
142
+ return `${Math.floor(diff / 3600000)}h ago`;
143
+ return new Date(ts).toLocaleDateString();
144
+ }
145
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Read a single line from stdin with normal echo. Honors an optional default. */
2
+ export declare function prompt(message: string, defaultValue?: string): Promise<string>;
3
+ /** Read a single line from stdin without echoing (for passwords / secrets). */
4
+ export declare function promptHidden(message: string): Promise<string>;
5
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9E;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC7D"}
@@ -0,0 +1,59 @@
1
+ import process from 'node:process';
2
+ /** Read a single line from stdin with normal echo. Honors an optional default. */
3
+ export function prompt(message, defaultValue) {
4
+ return new Promise((resolve) => {
5
+ process.stdout.write(defaultValue ? `${message} [${defaultValue}]: ` : `${message}: `);
6
+ process.stdin.resume();
7
+ process.stdin.setEncoding('utf8');
8
+ process.stdin.once('data', (chunk) => {
9
+ process.stdin.pause();
10
+ const value = String(chunk).replace(/\r?\n$/, '').trim();
11
+ resolve(value.length ? value : (defaultValue ?? ''));
12
+ });
13
+ });
14
+ }
15
+ /** Read a single line from stdin without echoing (for passwords / secrets). */
16
+ export function promptHidden(message) {
17
+ return new Promise((resolve) => {
18
+ const stdin = process.stdin;
19
+ const isTTY = typeof stdin.setRawMode === 'function';
20
+ process.stdout.write(`${message}: `);
21
+ if (isTTY)
22
+ stdin.setRawMode(true);
23
+ stdin.resume();
24
+ stdin.setEncoding('utf8');
25
+ let data = '';
26
+ const onData = (chunk) => {
27
+ for (const ch of chunk) {
28
+ const code = ch.charCodeAt(0);
29
+ if (code === 13 || code === 10) {
30
+ // Enter
31
+ if (isTTY)
32
+ stdin.setRawMode(false);
33
+ stdin.pause();
34
+ stdin.off('data', onData);
35
+ process.stdout.write('\n');
36
+ resolve(data);
37
+ return;
38
+ }
39
+ else if (code === 3) {
40
+ // Ctrl-C
41
+ process.exit(0);
42
+ }
43
+ else if (code === 127 || code === 8) {
44
+ // Backspace
45
+ if (data.length > 0) {
46
+ data = data.slice(0, -1);
47
+ process.stdout.write('\b \b');
48
+ }
49
+ }
50
+ else if (code >= 32 && code !== 127) {
51
+ data += ch;
52
+ process.stdout.write('*');
53
+ }
54
+ }
55
+ };
56
+ stdin.on('data', onData);
57
+ });
58
+ }
59
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "ninedeploy",
3
+ "version": "0.2.1",
4
+ "description": "Interactive CLI for NineDeploy self-hosted PaaS",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/NineDeploy/NineDeploy.git",
9
+ "directory": "apps/cli"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "type": "module",
18
+ "bin": {
19
+ "ninedeploy": "./dist/index.js"
20
+ },
21
+ "dependencies": {
22
+ "commander": "^15.0.0",
23
+ "ws": "^8.21.3",
24
+ "@ninedeploy/sdk": "0.2.1"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^26.2.0",
28
+ "@types/ws": "^8.18.1",
29
+ "tsx": "^4.23.12",
30
+ "typescript": "^7.0.2"
31
+ },
32
+ "scripts": {
33
+ "dev": "tsx src/index.ts",
34
+ "build": "tsc",
35
+ "start": "node dist/index.js",
36
+ "typecheck": "tsc --noEmit",
37
+ "lint": "biome lint .",
38
+ "test": "vitest run --coverage",
39
+ "clean": "rm -rf dist .turbo"
40
+ }
41
+ }