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.
- package/LICENSE +21 -0
- package/dist/client.d.ts +5 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +11 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/configCenter.d.ts +14 -0
- package/dist/commands/configCenter.d.ts.map +1 -0
- package/dist/commands/configCenter.js +56 -0
- package/dist/commands/configCenter.js.map +1 -0
- package/dist/commands/demo.d.ts +3 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +18 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/housekeeping.d.ts +3 -0
- package/dist/commands/housekeeping.d.ts.map +1 -0
- package/dist/commands/housekeeping.js +11 -0
- package/dist/commands/housekeeping.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +36 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/manage.d.ts +60 -0
- package/dist/commands/manage.d.ts.map +1 -0
- package/dist/commands/manage.js +440 -0
- package/dist/commands/manage.js.map +1 -0
- package/dist/commands/misc.d.ts +24 -0
- package/dist/commands/misc.d.ts.map +1 -0
- package/dist/commands/misc.js +183 -0
- package/dist/commands/misc.js.map +1 -0
- package/dist/commands/plugins.d.ts +15 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +77 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/services.d.ts +22 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +236 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +40 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/token.d.ts +5 -0
- package/dist/commands/token.d.ts.map +1 -0
- package/dist/commands/token.js +33 -0
- package/dist/commands/token.js.map +1 -0
- package/dist/commands/workspaces.d.ts +8 -0
- package/dist/commands/workspaces.d.ts.map +1 -0
- package/dist/commands/workspaces.js +52 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/format.d.ts +34 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +145 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/prompts.d.ts +5 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +59 -0
- package/dist/prompts.js.map +1 -0
- 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"}
|
package/dist/prompts.js
ADDED
|
@@ -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
|
+
}
|