@simplens/onboard 1.0.0 ā 1.0.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 +331 -214
- package/dist/__tests__/env-config.test.d.ts +2 -0
- package/dist/__tests__/env-config.test.d.ts.map +1 -0
- package/dist/__tests__/env-config.test.js +23 -0
- package/dist/__tests__/env-config.test.js.map +1 -0
- package/dist/__tests__/infra-prompts.test.d.ts +2 -0
- package/dist/__tests__/infra-prompts.test.d.ts.map +1 -0
- package/dist/__tests__/infra-prompts.test.js +43 -0
- package/dist/__tests__/infra-prompts.test.js.map +1 -0
- package/dist/__tests__/infra.test.d.ts +2 -0
- package/dist/__tests__/infra.test.d.ts.map +1 -0
- package/dist/__tests__/infra.test.js +14 -0
- package/dist/__tests__/infra.test.js.map +1 -0
- package/dist/__tests__/nginx.test.d.ts +2 -0
- package/dist/__tests__/nginx.test.d.ts.map +1 -0
- package/dist/__tests__/nginx.test.js +16 -0
- package/dist/__tests__/nginx.test.js.map +1 -0
- package/dist/env-config.d.ts +27 -12
- package/dist/env-config.d.ts.map +1 -1
- package/dist/env-config.js +258 -141
- package/dist/env-config.js.map +1 -1
- package/dist/index.js +341 -71
- package/dist/index.js.map +1 -1
- package/dist/infra.d.ts +17 -14
- package/dist/infra.d.ts.map +1 -1
- package/dist/infra.js +265 -176
- package/dist/infra.js.map +1 -1
- package/dist/plugins.d.ts +5 -10
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +75 -44
- package/dist/plugins.js.map +1 -1
- package/dist/services.d.ts +1 -23
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +47 -62
- package/dist/services.js.map +1 -1
- package/dist/templates.d.ts +3 -2
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +203 -198
- package/dist/templates.js.map +1 -1
- package/dist/types/domain.d.ts +2 -0
- package/dist/types/domain.d.ts.map +1 -1
- package/dist/ui.d.ts +45 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +93 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +32 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +66 -2
- package/dist/utils.js.map +1 -1
- package/dist/validators.d.ts +1 -52
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +10 -57
- package/dist/validators.js.map +1 -1
- package/package.json +3 -5
- package/src/__tests__/env-config.test.ts +28 -0
- package/src/__tests__/errors.test.ts +187 -187
- package/src/__tests__/infra-prompts.test.ts +54 -0
- package/src/__tests__/infra.test.ts +15 -0
- package/src/__tests__/utils.test.ts +142 -142
- package/src/__tests__/validators.test.ts +195 -195
- package/src/config/constants.ts +86 -86
- package/src/config/index.ts +1 -1
- package/src/env-config.ts +455 -320
- package/src/index.ts +534 -203
- package/src/infra.ts +404 -300
- package/src/plugins.ts +221 -190
- package/src/services.ts +175 -190
- package/src/templates.ts +209 -203
- package/src/types/domain.ts +129 -127
- package/src/types/errors.ts +173 -173
- package/src/types/index.ts +2 -2
- package/src/ui.ts +91 -0
- package/src/utils/index.ts +1 -1
- package/src/utils/logger.ts +144 -118
- package/src/utils.ts +183 -105
- package/src/validators.ts +145 -192
- package/tsconfig.json +18 -18
- package/vitest.config.ts +22 -20
package/dist/utils/logger.js
CHANGED
|
@@ -3,7 +3,32 @@ import { appendFile as fsAppendFile } from 'fs/promises';
|
|
|
3
3
|
let loggerConfig = {
|
|
4
4
|
verbose: false,
|
|
5
5
|
debug: false,
|
|
6
|
+
silent: false,
|
|
6
7
|
};
|
|
8
|
+
function formatTag(tag, color) {
|
|
9
|
+
return color(`[${tag.toUpperCase().padEnd(7)}]`);
|
|
10
|
+
}
|
|
11
|
+
function printLogLine(tag, message) {
|
|
12
|
+
if (loggerConfig.silent)
|
|
13
|
+
return;
|
|
14
|
+
switch (tag) {
|
|
15
|
+
case 'debug':
|
|
16
|
+
console.log(`${formatTag('debug', chalk.gray)} ${chalk.gray(message)}`);
|
|
17
|
+
return;
|
|
18
|
+
case 'info':
|
|
19
|
+
console.log(`${formatTag('info', chalk.blueBright)} ${message}`);
|
|
20
|
+
return;
|
|
21
|
+
case 'ok':
|
|
22
|
+
console.log(`${formatTag('ok', chalk.greenBright)} ${message}`);
|
|
23
|
+
return;
|
|
24
|
+
case 'warn':
|
|
25
|
+
console.log(`${formatTag('warn', chalk.yellowBright)} ${message}`);
|
|
26
|
+
return;
|
|
27
|
+
case 'error':
|
|
28
|
+
console.log(`${formatTag('error', chalk.redBright)} ${message}`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
7
32
|
/**
|
|
8
33
|
* Initialize logger with configuration
|
|
9
34
|
*/
|
|
@@ -36,7 +61,7 @@ async function writeToLogFile(level, message) {
|
|
|
36
61
|
*/
|
|
37
62
|
export function logDebug(message) {
|
|
38
63
|
if (loggerConfig.debug) {
|
|
39
|
-
|
|
64
|
+
printLogLine('debug', message);
|
|
40
65
|
}
|
|
41
66
|
writeToLogFile('debug', message);
|
|
42
67
|
}
|
|
@@ -44,8 +69,8 @@ export function logDebug(message) {
|
|
|
44
69
|
* Log verbose message (shown with --verbose or --debug)
|
|
45
70
|
*/
|
|
46
71
|
export function logVerbose(message) {
|
|
47
|
-
if (loggerConfig.verbose || loggerConfig.debug) {
|
|
48
|
-
console.log(chalk.
|
|
72
|
+
if (!loggerConfig.silent && (loggerConfig.verbose || loggerConfig.debug)) {
|
|
73
|
+
console.log(`${formatTag('verbose', chalk.cyanBright)} ${message}`);
|
|
49
74
|
}
|
|
50
75
|
writeToLogFile('info', message);
|
|
51
76
|
}
|
|
@@ -53,28 +78,28 @@ export function logVerbose(message) {
|
|
|
53
78
|
* Log info message (always displayed)
|
|
54
79
|
*/
|
|
55
80
|
export function logInfo(message) {
|
|
56
|
-
|
|
81
|
+
printLogLine('info', message);
|
|
57
82
|
writeToLogFile('info', message);
|
|
58
83
|
}
|
|
59
84
|
/**
|
|
60
85
|
* Log success message (always displayed)
|
|
61
86
|
*/
|
|
62
87
|
export function logSuccess(message) {
|
|
63
|
-
|
|
88
|
+
printLogLine('ok', message);
|
|
64
89
|
writeToLogFile('info', message);
|
|
65
90
|
}
|
|
66
91
|
/**
|
|
67
92
|
* Log warning message (always displayed)
|
|
68
93
|
*/
|
|
69
94
|
export function logWarning(message) {
|
|
70
|
-
|
|
95
|
+
printLogLine('warn', message);
|
|
71
96
|
writeToLogFile('warn', message);
|
|
72
97
|
}
|
|
73
98
|
/**
|
|
74
99
|
* Log error message (always displayed)
|
|
75
100
|
*/
|
|
76
101
|
export function logError(message) {
|
|
77
|
-
|
|
102
|
+
printLogLine('error', message);
|
|
78
103
|
writeToLogFile('error', message);
|
|
79
104
|
}
|
|
80
105
|
/**
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export { logSuccess, logError, logWarning, logInfo, logDebug, logVerbose, logCommand, logFileOperation, initLogger, getLoggerConfig, } from './utils/logger.js';
|
|
2
|
+
type AccentColor = 'blue' | 'cyan' | 'green' | 'yellow' | 'red' | 'gray';
|
|
3
|
+
export declare function divider(color?: AccentColor, char?: string): string;
|
|
4
|
+
export declare function printStepHeader(step: number, total: number, title: string): void;
|
|
5
|
+
export declare function printSummaryCard(title: string, rows: Array<{
|
|
6
|
+
label: string;
|
|
7
|
+
value: string;
|
|
8
|
+
}>): void;
|
|
9
|
+
export declare function printCommandHints(title: string, commands: string[]): void;
|
|
2
10
|
/**
|
|
3
11
|
* Display SimpleNS banner in blue using figlet
|
|
4
12
|
*/
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAQA,OAAO,EACH,UAAU,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,GAClB,MAAM,mBAAmB,CAAC;AAK3B,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAyBzE,wBAAgB,OAAO,CAAC,KAAK,GAAE,WAAoB,EAAE,IAAI,GAAE,MAAY,GAAG,MAAM,CAE/E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAUhF;AAED,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,IAAI,CAYN;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAQzE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAoBpC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAe7C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjF"}
|
package/dist/utils.js
CHANGED
|
@@ -3,12 +3,72 @@ import { execa } from 'execa';
|
|
|
3
3
|
import fs from 'fs/promises';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import figlet from 'figlet';
|
|
6
|
+
import { getLoggerConfig } from './utils/logger.js';
|
|
6
7
|
// Re-export logger functions for backward compatibility
|
|
7
8
|
export { logSuccess, logError, logWarning, logInfo, logDebug, logVerbose, logCommand, logFileOperation, initLogger, getLoggerConfig, } from './utils/logger.js';
|
|
9
|
+
const MAX_TUI_WIDTH = 78;
|
|
10
|
+
const MIN_TUI_WIDTH = 52;
|
|
11
|
+
function getTerminalWidth() {
|
|
12
|
+
const columns = process.stdout.columns ?? MAX_TUI_WIDTH;
|
|
13
|
+
return Math.max(MIN_TUI_WIDTH, Math.min(MAX_TUI_WIDTH, columns));
|
|
14
|
+
}
|
|
15
|
+
function accent(text, color) {
|
|
16
|
+
switch (color) {
|
|
17
|
+
case 'blue':
|
|
18
|
+
return chalk.blueBright(text);
|
|
19
|
+
case 'cyan':
|
|
20
|
+
return chalk.cyanBright(text);
|
|
21
|
+
case 'green':
|
|
22
|
+
return chalk.greenBright(text);
|
|
23
|
+
case 'yellow':
|
|
24
|
+
return chalk.yellowBright(text);
|
|
25
|
+
case 'red':
|
|
26
|
+
return chalk.redBright(text);
|
|
27
|
+
case 'gray':
|
|
28
|
+
default:
|
|
29
|
+
return chalk.gray(text);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function divider(color = 'gray', char = 'ā') {
|
|
33
|
+
return accent(char.repeat(getTerminalWidth()), color);
|
|
34
|
+
}
|
|
35
|
+
export function printStepHeader(step, total, title) {
|
|
36
|
+
if (getLoggerConfig().silent)
|
|
37
|
+
return;
|
|
38
|
+
const filled = 'ā '.repeat(Math.max(0, step));
|
|
39
|
+
const empty = 'Ā·'.repeat(Math.max(0, total - step));
|
|
40
|
+
const progress = chalk.gray(`${filled}${empty}`);
|
|
41
|
+
console.log(`\n${divider()}`);
|
|
42
|
+
console.log(`${accent(`[${step}/${total}]`, 'cyan')} ${chalk.whiteBright(title)} ${progress}`);
|
|
43
|
+
console.log(divider());
|
|
44
|
+
}
|
|
45
|
+
export function printSummaryCard(title, rows) {
|
|
46
|
+
if (getLoggerConfig().silent)
|
|
47
|
+
return;
|
|
48
|
+
const labelWidth = Math.max(...rows.map(row => row.label.length), 0);
|
|
49
|
+
console.log(`\n${accent(title, 'cyan')}`);
|
|
50
|
+
console.log(divider());
|
|
51
|
+
for (const row of rows) {
|
|
52
|
+
const label = chalk.gray(row.label.padEnd(labelWidth));
|
|
53
|
+
console.log(`${label} ${chalk.white(row.value)}`);
|
|
54
|
+
}
|
|
55
|
+
console.log(`${divider()}\n`);
|
|
56
|
+
}
|
|
57
|
+
export function printCommandHints(title, commands) {
|
|
58
|
+
if (getLoggerConfig().silent)
|
|
59
|
+
return;
|
|
60
|
+
console.log(accent(title, 'cyan'));
|
|
61
|
+
for (const command of commands) {
|
|
62
|
+
console.log(` ${accent('āŗ', 'gray')} ${chalk.white(command)}`);
|
|
63
|
+
}
|
|
64
|
+
console.log('');
|
|
65
|
+
}
|
|
8
66
|
/**
|
|
9
67
|
* Display SimpleNS banner in blue using figlet
|
|
10
68
|
*/
|
|
11
69
|
export function displayBanner() {
|
|
70
|
+
if (getLoggerConfig().silent)
|
|
71
|
+
return;
|
|
12
72
|
const simpleNS = figlet.textSync('SimpleNS', {
|
|
13
73
|
font: 'Standard',
|
|
14
74
|
horizontalLayout: 'default',
|
|
@@ -17,8 +77,12 @@ export function displayBanner() {
|
|
|
17
77
|
font: 'Standard',
|
|
18
78
|
horizontalLayout: 'default',
|
|
19
79
|
});
|
|
20
|
-
console.log(
|
|
21
|
-
console.log(
|
|
80
|
+
console.log('');
|
|
81
|
+
console.log(divider('blue', 'ā'));
|
|
82
|
+
console.log(chalk.blueBright(simpleNS));
|
|
83
|
+
console.log(chalk.cyanBright(onboard));
|
|
84
|
+
console.log(chalk.gray('SimpleNS local setup assistant'));
|
|
85
|
+
console.log(divider('blue', 'ā'));
|
|
22
86
|
console.log('');
|
|
23
87
|
}
|
|
24
88
|
/**
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,wDAAwD;AACxD,OAAO,EACH,UAAU,EACV,QAAQ,EACR,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,eAAe,GAClB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,aAAa,GAAG,EAAE,CAAC;AAIzB,SAAS,gBAAgB;IACrB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,aAAa,CAAC;IACxD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,MAAM,CAAC,IAAY,EAAE,KAAkB;IAC5C,QAAQ,KAAK,EAAE,CAAC;QACZ,KAAK,MAAM;YACP,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM;YACP,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,OAAO;YACR,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,QAAQ;YACT,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,KAAK,KAAK;YACN,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC;QACZ;YACI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAqB,MAAM,EAAE,OAAe,GAAG;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,KAAa;IACtE,IAAI,eAAe,EAAE,CAAC,MAAM;QAAE,OAAO;IAErC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,KAAa,EACb,IAA6C;IAE7C,IAAI,eAAe,EAAE,CAAC,MAAM;QAAE,OAAO;IAErC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAErE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAAkB;IAC/D,IAAI,eAAe,EAAE,CAAC,MAAM;QAAE,OAAO;IAErC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,IAAI,eAAe,EAAE,CAAC,MAAM;QAAE,OAAO;IAErC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE;QACzC,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE;QACvC,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,OAAe,EACf,IAAc,EACd,OAA4C;IAE5C,kDAAkD;IAClD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEzD,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE1B,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACtC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YAClC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IAC7D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/D,gBAAgB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC3C,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,OAAe;IAC9D,uDAAuD;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/validators.d.ts
CHANGED
|
@@ -3,16 +3,6 @@ export type OSType = 'windows' | 'linux' | 'darwin';
|
|
|
3
3
|
* Checks if Docker is installed on the system by running `docker --version`.
|
|
4
4
|
*
|
|
5
5
|
* @throws {DockerNotInstalledError} When Docker is not found in PATH or not installed
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```ts
|
|
9
|
-
* try {
|
|
10
|
-
* await checkDockerInstalled();
|
|
11
|
-
* console.log('Docker is available');
|
|
12
|
-
* } catch (error) {
|
|
13
|
-
* // Handle DockerNotInstalledError
|
|
14
|
-
* }
|
|
15
|
-
* ```
|
|
16
6
|
*/
|
|
17
7
|
export declare function checkDockerInstalled(): Promise<void>;
|
|
18
8
|
/**
|
|
@@ -21,17 +11,6 @@ export declare function checkDockerInstalled(): Promise<void>;
|
|
|
21
11
|
*
|
|
22
12
|
* @throws {DockerPermissionError} When user lacks permissions to access Docker socket
|
|
23
13
|
* @throws {DockerNotRunningError} When Docker daemon is not running or unreachable
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```ts
|
|
27
|
-
* try {
|
|
28
|
-
* await checkDockerRunning();
|
|
29
|
-
* } catch (error) {
|
|
30
|
-
* if (error instanceof DockerPermissionError) {
|
|
31
|
-
* // Guide user to add sudo or docker group
|
|
32
|
-
* }
|
|
33
|
-
* }
|
|
34
|
-
* ```
|
|
35
14
|
*/
|
|
36
15
|
export declare function checkDockerRunning(): Promise<void>;
|
|
37
16
|
/**
|
|
@@ -39,33 +18,16 @@ export declare function checkDockerRunning(): Promise<void>;
|
|
|
39
18
|
*
|
|
40
19
|
* @returns OS type: 'windows', 'darwin' (macOS), or 'linux'
|
|
41
20
|
* @note Defaults to 'linux' for unknown platforms
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```ts
|
|
45
|
-
* const os = detectOS();
|
|
46
|
-
* if (os === 'linux') {
|
|
47
|
-
* // Linux-specific configuration
|
|
48
|
-
* }
|
|
49
|
-
* ```
|
|
50
21
|
*/
|
|
51
22
|
export declare function detectOS(): OSType;
|
|
52
23
|
/**
|
|
53
24
|
* Validates all system prerequisites before starting the onboarding process.
|
|
54
25
|
* Checks Docker installation, daemon status, and detects the operating system.
|
|
26
|
+
* Uses clack spinners for visual feedback.
|
|
55
27
|
*
|
|
56
28
|
* @throws {DockerNotInstalledError} If Docker is not installed
|
|
57
29
|
* @throws {DockerNotRunningError} If Docker daemon is not running
|
|
58
30
|
* @throws {DockerPermissionError} If user lacks Docker permissions
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* ```ts
|
|
62
|
-
* try {
|
|
63
|
-
* await validatePrerequisites();
|
|
64
|
-
* // Proceed with setup
|
|
65
|
-
* } catch (error) {
|
|
66
|
-
* // Handle prerequisite errors
|
|
67
|
-
* }
|
|
68
|
-
* ```
|
|
69
31
|
*/
|
|
70
32
|
export declare function validatePrerequisites(): Promise<void>;
|
|
71
33
|
/**
|
|
@@ -75,19 +37,6 @@ export declare function validatePrerequisites(): Promise<void>;
|
|
|
75
37
|
* @param key - Environment variable name (e.g., 'MONGO_URI', 'PORT', 'API_KEY')
|
|
76
38
|
* @param value - Value to validate
|
|
77
39
|
* @returns `true` if valid, `false` otherwise
|
|
78
|
-
*
|
|
79
|
-
* @remarks
|
|
80
|
-
* Validation rules:
|
|
81
|
-
* - URLs: Must contain protocol (mongodb://, redis://)
|
|
82
|
-
* - Ports: Must be 1-65535
|
|
83
|
-
* - Secrets/Keys/Passwords: Must be at least 8 characters
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* ```ts
|
|
87
|
-
* validateEnvValue('MONGO_URI', 'mongodb://localhost:27017'); // true
|
|
88
|
-
* validateEnvValue('PORT', '3000'); // true
|
|
89
|
-
* validateEnvValue('API_KEY', 'short'); // false (too short)
|
|
90
|
-
* ```
|
|
91
40
|
*/
|
|
92
41
|
export declare function validateEnvValue(key: string, value: string): boolean;
|
|
93
42
|
//# sourceMappingURL=validators.d.ts.map
|
package/dist/validators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM1D;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBxD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAMjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA6BpE"}
|
package/dist/validators.js
CHANGED
|
@@ -1,21 +1,12 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
2
|
import { logSuccess, logWarning } from './utils.js';
|
|
3
|
+
import { spinner } from './ui.js';
|
|
3
4
|
import { DockerNotInstalledError, DockerNotRunningError, DockerPermissionError, } from './types/errors.js';
|
|
4
5
|
import { VALIDATION } from './config/constants.js';
|
|
5
6
|
/**
|
|
6
7
|
* Checks if Docker is installed on the system by running `docker --version`.
|
|
7
8
|
*
|
|
8
9
|
* @throws {DockerNotInstalledError} When Docker is not found in PATH or not installed
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```ts
|
|
12
|
-
* try {
|
|
13
|
-
* await checkDockerInstalled();
|
|
14
|
-
* console.log('Docker is available');
|
|
15
|
-
* } catch (error) {
|
|
16
|
-
* // Handle DockerNotInstalledError
|
|
17
|
-
* }
|
|
18
|
-
* ```
|
|
19
10
|
*/
|
|
20
11
|
export async function checkDockerInstalled() {
|
|
21
12
|
try {
|
|
@@ -31,17 +22,6 @@ export async function checkDockerInstalled() {
|
|
|
31
22
|
*
|
|
32
23
|
* @throws {DockerPermissionError} When user lacks permissions to access Docker socket
|
|
33
24
|
* @throws {DockerNotRunningError} When Docker daemon is not running or unreachable
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```ts
|
|
37
|
-
* try {
|
|
38
|
-
* await checkDockerRunning();
|
|
39
|
-
* } catch (error) {
|
|
40
|
-
* if (error instanceof DockerPermissionError) {
|
|
41
|
-
* // Guide user to add sudo or docker group
|
|
42
|
-
* }
|
|
43
|
-
* }
|
|
44
|
-
* ```
|
|
45
25
|
*/
|
|
46
26
|
export async function checkDockerRunning() {
|
|
47
27
|
try {
|
|
@@ -64,14 +44,6 @@ export async function checkDockerRunning() {
|
|
|
64
44
|
*
|
|
65
45
|
* @returns OS type: 'windows', 'darwin' (macOS), or 'linux'
|
|
66
46
|
* @note Defaults to 'linux' for unknown platforms
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* ```ts
|
|
70
|
-
* const os = detectOS();
|
|
71
|
-
* if (os === 'linux') {
|
|
72
|
-
* // Linux-specific configuration
|
|
73
|
-
* }
|
|
74
|
-
* ```
|
|
75
47
|
*/
|
|
76
48
|
export function detectOS() {
|
|
77
49
|
const platform = process.platform;
|
|
@@ -86,39 +58,33 @@ export function detectOS() {
|
|
|
86
58
|
/**
|
|
87
59
|
* Validates all system prerequisites before starting the onboarding process.
|
|
88
60
|
* Checks Docker installation, daemon status, and detects the operating system.
|
|
61
|
+
* Uses clack spinners for visual feedback.
|
|
89
62
|
*
|
|
90
63
|
* @throws {DockerNotInstalledError} If Docker is not installed
|
|
91
64
|
* @throws {DockerNotRunningError} If Docker daemon is not running
|
|
92
65
|
* @throws {DockerPermissionError} If user lacks Docker permissions
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ```ts
|
|
96
|
-
* try {
|
|
97
|
-
* await validatePrerequisites();
|
|
98
|
-
* // Proceed with setup
|
|
99
|
-
* } catch (error) {
|
|
100
|
-
* // Handle prerequisite errors
|
|
101
|
-
* }
|
|
102
|
-
* ```
|
|
103
66
|
*/
|
|
104
67
|
export async function validatePrerequisites() {
|
|
105
|
-
|
|
68
|
+
logSuccess('Running prerequisite checks...');
|
|
106
69
|
// Check Docker installation
|
|
70
|
+
const s = spinner();
|
|
71
|
+
s.start('Checking Docker installation...');
|
|
107
72
|
try {
|
|
108
73
|
await checkDockerInstalled();
|
|
109
|
-
|
|
74
|
+
s.stop('Docker installation detected');
|
|
110
75
|
}
|
|
111
76
|
catch (error) {
|
|
112
|
-
|
|
77
|
+
s.error('Docker installation check failed');
|
|
113
78
|
throw error;
|
|
114
79
|
}
|
|
115
80
|
// Check Docker daemon
|
|
81
|
+
s.start('Checking Docker daemon status...');
|
|
116
82
|
try {
|
|
117
83
|
await checkDockerRunning();
|
|
118
|
-
|
|
84
|
+
s.stop('Docker daemon is running');
|
|
119
85
|
}
|
|
120
86
|
catch (error) {
|
|
121
|
-
|
|
87
|
+
s.error('Docker daemon check failed');
|
|
122
88
|
throw error;
|
|
123
89
|
}
|
|
124
90
|
// Detect OS
|
|
@@ -135,19 +101,6 @@ export async function validatePrerequisites() {
|
|
|
135
101
|
* @param key - Environment variable name (e.g., 'MONGO_URI', 'PORT', 'API_KEY')
|
|
136
102
|
* @param value - Value to validate
|
|
137
103
|
* @returns `true` if valid, `false` otherwise
|
|
138
|
-
*
|
|
139
|
-
* @remarks
|
|
140
|
-
* Validation rules:
|
|
141
|
-
* - URLs: Must contain protocol (mongodb://, redis://)
|
|
142
|
-
* - Ports: Must be 1-65535
|
|
143
|
-
* - Secrets/Keys/Passwords: Must be at least 8 characters
|
|
144
|
-
*
|
|
145
|
-
* @example
|
|
146
|
-
* ```ts
|
|
147
|
-
* validateEnvValue('MONGO_URI', 'mongodb://localhost:27017'); // true
|
|
148
|
-
* validateEnvValue('PORT', '3000'); // true
|
|
149
|
-
* validateEnvValue('API_KEY', 'short'); // false (too short)
|
|
150
|
-
* ```
|
|
151
104
|
*/
|
|
152
105
|
export function validateEnvValue(key, value) {
|
|
153
106
|
// URL validation
|
package/dist/validators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplens/onboard",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
"description": "CLI tool to setup SimpleNS instance on any AMD64 machine",
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/figlet": "^1.7.0",
|
|
29
|
-
"@types/inquirer": "^9.0.7",
|
|
30
29
|
"@types/js-yaml": "^4.0.9",
|
|
31
30
|
"@types/node": "^20.19.30",
|
|
32
31
|
"@vitest/ui": "^4.0.18",
|
|
@@ -34,12 +33,11 @@
|
|
|
34
33
|
"vitest": "^4.0.18"
|
|
35
34
|
},
|
|
36
35
|
"dependencies": {
|
|
36
|
+
"@clack/prompts": "^1.0.0",
|
|
37
37
|
"chalk": "^5.3.0",
|
|
38
38
|
"commander": "^14.0.2",
|
|
39
39
|
"execa": "^8.0.1",
|
|
40
40
|
"figlet": "^1.10.0",
|
|
41
|
-
"
|
|
42
|
-
"js-yaml": "^4.1.0",
|
|
43
|
-
"ora": "^7.0.1"
|
|
41
|
+
"js-yaml": "^4.1.0"
|
|
44
42
|
}
|
|
45
43
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { normalizeBasePath, validateBasePath } from '../env-config.js';
|
|
3
|
+
|
|
4
|
+
describe('env-config base path helpers', () => {
|
|
5
|
+
it('accepts empty base path for root', () => {
|
|
6
|
+
expect(validateBasePath('')).toBe(true);
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it('accepts a single segment path', () => {
|
|
10
|
+
expect(validateBasePath('/dashboard')).toBe(true);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('accepts nested path segments', () => {
|
|
14
|
+
expect(validateBasePath('/admin/v1')).toBe(true);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('rejects path without leading slash', () => {
|
|
18
|
+
expect(validateBasePath('dashboard')).not.toBe(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('rejects trailing slash path', () => {
|
|
22
|
+
expect(validateBasePath('/dashboard/')).not.toBe(true);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('trims whitespace during normalization', () => {
|
|
26
|
+
expect(normalizeBasePath(' /dashboard ')).toBe('/dashboard');
|
|
27
|
+
});
|
|
28
|
+
});
|