@simplens/onboard 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.
- package/README.md +214 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +125 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/utils.test.d.ts +2 -0
- package/dist/__tests__/utils.test.d.ts.map +1 -0
- package/dist/__tests__/utils.test.js +105 -0
- package/dist/__tests__/utils.test.js.map +1 -0
- package/dist/__tests__/validators.test.d.ts +2 -0
- package/dist/__tests__/validators.test.d.ts.map +1 -0
- package/dist/__tests__/validators.test.js +148 -0
- package/dist/__tests__/validators.test.js.map +1 -0
- package/dist/config/constants.d.ts +69 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +79 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/env-config.d.ts +33 -0
- package/dist/env-config.d.ts.map +1 -0
- package/dist/env-config.js +285 -0
- package/dist/env-config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +153 -0
- package/dist/index.js.map +1 -0
- package/dist/infra.d.ts +31 -0
- package/dist/infra.d.ts.map +1 -0
- package/dist/infra.js +267 -0
- package/dist/infra.js.map +1 -0
- package/dist/plugins.d.ts +35 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +164 -0
- package/dist/plugins.js.map +1 -0
- package/dist/services.d.ts +52 -0
- package/dist/services.d.ts.map +1 -0
- package/dist/services.js +158 -0
- package/dist/services.js.map +1 -0
- package/dist/templates.d.ts +3 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +202 -0
- package/dist/templates.js.map +1 -0
- package/dist/types/domain.d.ts +119 -0
- package/dist/types/domain.d.ts.map +1 -0
- package/dist/types/domain.js +5 -0
- package/dist/types/domain.js.map +1 -0
- package/dist/types/errors.d.ts +69 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +129 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +54 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +92 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils.d.ts +32 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +79 -0
- package/dist/utils.js.map +1 -0
- package/dist/validators.d.ts +93 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +180 -0
- package/dist/validators.js.map +1 -0
- package/package.json +45 -0
- package/src/__tests__/errors.test.ts +187 -0
- package/src/__tests__/utils.test.ts +142 -0
- package/src/__tests__/validators.test.ts +195 -0
- package/src/config/constants.ts +86 -0
- package/src/config/index.ts +1 -0
- package/src/env-config.ts +320 -0
- package/src/index.ts +203 -0
- package/src/infra.ts +300 -0
- package/src/plugins.ts +190 -0
- package/src/services.ts +190 -0
- package/src/templates.ts +203 -0
- package/src/types/domain.ts +127 -0
- package/src/types/errors.ts +173 -0
- package/src/types/index.ts +2 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/logger.ts +118 -0
- package/src/utils.ts +105 -0
- package/src/validators.ts +192 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error types for better error handling and troubleshooting
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Base error class for all onboarding errors
|
|
6
|
+
*/
|
|
7
|
+
export class OnboardingError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
troubleshooting;
|
|
10
|
+
constructor(code, message, troubleshooting) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.troubleshooting = troubleshooting;
|
|
14
|
+
this.name = 'OnboardingError';
|
|
15
|
+
Error.captureStackTrace(this, this.constructor);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Docker-related errors
|
|
20
|
+
*/
|
|
21
|
+
export class DockerError extends OnboardingError {
|
|
22
|
+
constructor(message, troubleshooting) {
|
|
23
|
+
super('DOCKER_ERROR', message, troubleshooting);
|
|
24
|
+
this.name = 'DockerError';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class DockerNotInstalledError extends DockerError {
|
|
28
|
+
constructor() {
|
|
29
|
+
super('Docker is not installed on this system', 'Please install Docker from: https://docs.docker.com/get-docker/');
|
|
30
|
+
this.name = 'DockerNotInstalledError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class DockerNotRunningError extends DockerError {
|
|
34
|
+
constructor() {
|
|
35
|
+
super('Docker daemon is not running', 'Please start Docker Desktop or Docker daemon, then try again');
|
|
36
|
+
this.name = 'DockerNotRunningError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class DockerPermissionError extends DockerError {
|
|
40
|
+
constructor() {
|
|
41
|
+
super('Permission denied when accessing Docker', 'Try running with sudo or add your user to the docker group:\n' +
|
|
42
|
+
' sudo usermod -aG docker $USER\n' +
|
|
43
|
+
' Then log out and log back in');
|
|
44
|
+
this.name = 'DockerPermissionError';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class DockerComposeError extends DockerError {
|
|
48
|
+
constructor(operation, details) {
|
|
49
|
+
super(`Failed to ${operation} with docker-compose`, details || 'Check docker-compose logs for more details:\n docker-compose logs');
|
|
50
|
+
this.name = 'DockerComposeError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* File system errors
|
|
55
|
+
*/
|
|
56
|
+
export class FileSystemError extends OnboardingError {
|
|
57
|
+
path;
|
|
58
|
+
constructor(message, path, troubleshooting) {
|
|
59
|
+
super('FILESYSTEM_ERROR', message, troubleshooting);
|
|
60
|
+
this.path = path;
|
|
61
|
+
this.name = 'FileSystemError';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export class DirectoryNotWritableError extends FileSystemError {
|
|
65
|
+
constructor(path) {
|
|
66
|
+
super(`Directory is not writable: ${path}`, path, 'Check directory permissions or choose a different directory');
|
|
67
|
+
this.name = 'DirectoryNotWritableError';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export class FileNotFoundError extends FileSystemError {
|
|
71
|
+
constructor(path) {
|
|
72
|
+
super(`File not found: ${path}`, path, 'Ensure the file exists or check the path');
|
|
73
|
+
this.name = 'FileNotFoundError';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Configuration errors
|
|
78
|
+
*/
|
|
79
|
+
export class ConfigurationError extends OnboardingError {
|
|
80
|
+
constructor(message, troubleshooting) {
|
|
81
|
+
super('CONFIG_ERROR', message, troubleshooting);
|
|
82
|
+
this.name = 'ConfigurationError';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export class InvalidEnvironmentValueError extends ConfigurationError {
|
|
86
|
+
constructor(key, value, expectedFormat) {
|
|
87
|
+
super(`Invalid value for ${key}: ${value}`, `Expected format: ${expectedFormat}`);
|
|
88
|
+
this.name = 'InvalidEnvironmentValueError';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export class PluginConfigurationError extends ConfigurationError {
|
|
92
|
+
constructor(pluginName, details) {
|
|
93
|
+
super(`Failed to configure plugin ${pluginName}`, details);
|
|
94
|
+
this.name = 'PluginConfigurationError';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Service health errors
|
|
99
|
+
*/
|
|
100
|
+
export class ServiceHealthError extends OnboardingError {
|
|
101
|
+
constructor(serviceName, timeout) {
|
|
102
|
+
super('SERVICE_HEALTH_ERROR', `Service '${serviceName}' did not become healthy within ${timeout}ms`, `Check service logs:\n docker-compose logs ${serviceName}\n\n` +
|
|
103
|
+
'Or check container status:\n docker ps -a');
|
|
104
|
+
this.name = 'ServiceHealthError';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Type guard to check if an error is an OnboardingError
|
|
109
|
+
*/
|
|
110
|
+
export function isOnboardingError(error) {
|
|
111
|
+
return error instanceof OnboardingError;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Format error for user display
|
|
115
|
+
*/
|
|
116
|
+
export function formatErrorForUser(error) {
|
|
117
|
+
if (isOnboardingError(error)) {
|
|
118
|
+
let message = `❌ ${error.message}`;
|
|
119
|
+
if (error.troubleshooting) {
|
|
120
|
+
message += `\n\n💡 Troubleshooting:\n${error.troubleshooting}`;
|
|
121
|
+
}
|
|
122
|
+
return message;
|
|
123
|
+
}
|
|
124
|
+
if (error instanceof Error) {
|
|
125
|
+
return `❌ Unexpected error: ${error.message}`;
|
|
126
|
+
}
|
|
127
|
+
return `❌ An unknown error occurred`;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging level
|
|
3
|
+
*/
|
|
4
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
5
|
+
/**
|
|
6
|
+
* Logger configuration
|
|
7
|
+
*/
|
|
8
|
+
interface LoggerConfig {
|
|
9
|
+
verbose: boolean;
|
|
10
|
+
debug: boolean;
|
|
11
|
+
logFile?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Initialize logger with configuration
|
|
15
|
+
*/
|
|
16
|
+
export declare function initLogger(config: Partial<LoggerConfig>): void;
|
|
17
|
+
/**
|
|
18
|
+
* Get current logger configuration
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLoggerConfig(): Readonly<LoggerConfig>;
|
|
21
|
+
/**
|
|
22
|
+
* Log debug message (only shown with --debug flag)
|
|
23
|
+
*/
|
|
24
|
+
export declare function logDebug(message: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Log verbose message (shown with --verbose or --debug)
|
|
27
|
+
*/
|
|
28
|
+
export declare function logVerbose(message: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Log info message (always displayed)
|
|
31
|
+
*/
|
|
32
|
+
export declare function logInfo(message: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Log success message (always displayed)
|
|
35
|
+
*/
|
|
36
|
+
export declare function logSuccess(message: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Log warning message (always displayed)
|
|
39
|
+
*/
|
|
40
|
+
export declare function logWarning(message: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Log error message (always displayed)
|
|
43
|
+
*/
|
|
44
|
+
export declare function logError(message: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Log command execution (debug level)
|
|
47
|
+
*/
|
|
48
|
+
export declare function logCommand(command: string, args: string[]): void;
|
|
49
|
+
/**
|
|
50
|
+
* Log file operation (debug level)
|
|
51
|
+
*/
|
|
52
|
+
export declare function logFileOperation(operation: string, filePath: string): void;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,UAAU,YAAY;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAE9D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,YAAY,CAAC,CAExD;AAiBD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAK9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKhD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE1E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { appendFile as fsAppendFile } from 'fs/promises';
|
|
3
|
+
let loggerConfig = {
|
|
4
|
+
verbose: false,
|
|
5
|
+
debug: false,
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Initialize logger with configuration
|
|
9
|
+
*/
|
|
10
|
+
export function initLogger(config) {
|
|
11
|
+
loggerConfig = { ...loggerConfig, ...config };
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get current logger configuration
|
|
15
|
+
*/
|
|
16
|
+
export function getLoggerConfig() {
|
|
17
|
+
return { ...loggerConfig };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Write log message to file if configured
|
|
21
|
+
*/
|
|
22
|
+
async function writeToLogFile(level, message) {
|
|
23
|
+
if (!loggerConfig.logFile)
|
|
24
|
+
return;
|
|
25
|
+
try {
|
|
26
|
+
const timestamp = new Date().toISOString();
|
|
27
|
+
const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
|
|
28
|
+
await fsAppendFile(loggerConfig.logFile, logEntry, 'utf-8');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
// Silently fail on log file errors
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Log debug message (only shown with --debug flag)
|
|
36
|
+
*/
|
|
37
|
+
export function logDebug(message) {
|
|
38
|
+
if (loggerConfig.debug) {
|
|
39
|
+
console.log(chalk.gray(`🔧 ${message}`));
|
|
40
|
+
}
|
|
41
|
+
writeToLogFile('debug', message);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Log verbose message (shown with --verbose or --debug)
|
|
45
|
+
*/
|
|
46
|
+
export function logVerbose(message) {
|
|
47
|
+
if (loggerConfig.verbose || loggerConfig.debug) {
|
|
48
|
+
console.log(chalk.cyan(`ℹ️ ${message}`));
|
|
49
|
+
}
|
|
50
|
+
writeToLogFile('info', message);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Log info message (always displayed)
|
|
54
|
+
*/
|
|
55
|
+
export function logInfo(message) {
|
|
56
|
+
console.log(chalk.blue(`ℹ️ ${message}`));
|
|
57
|
+
writeToLogFile('info', message);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Log success message (always displayed)
|
|
61
|
+
*/
|
|
62
|
+
export function logSuccess(message) {
|
|
63
|
+
console.log(chalk.green(`✅ ${message}`));
|
|
64
|
+
writeToLogFile('info', message);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Log warning message (always displayed)
|
|
68
|
+
*/
|
|
69
|
+
export function logWarning(message) {
|
|
70
|
+
console.log(chalk.yellow(`⚠️ ${message}`));
|
|
71
|
+
writeToLogFile('warn', message);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Log error message (always displayed)
|
|
75
|
+
*/
|
|
76
|
+
export function logError(message) {
|
|
77
|
+
console.log(chalk.red(`❌ ${message}`));
|
|
78
|
+
writeToLogFile('error', message);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Log command execution (debug level)
|
|
82
|
+
*/
|
|
83
|
+
export function logCommand(command, args) {
|
|
84
|
+
logDebug(`Executing: ${command} ${args.join(' ')}`);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Log file operation (debug level)
|
|
88
|
+
*/
|
|
89
|
+
export function logFileOperation(operation, filePath) {
|
|
90
|
+
logDebug(`${operation}: ${filePath}`);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export { logSuccess, logError, logWarning, logInfo, logDebug, logVerbose, logCommand, logFileOperation, initLogger, getLoggerConfig, } from './utils/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Display SimpleNS banner in blue using figlet
|
|
4
|
+
*/
|
|
5
|
+
export declare function displayBanner(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Execute a shell command with error handling
|
|
8
|
+
*/
|
|
9
|
+
export declare function executeCommand(command: string, args: string[], options?: {
|
|
10
|
+
cwd?: string;
|
|
11
|
+
silent?: boolean;
|
|
12
|
+
}): Promise<{
|
|
13
|
+
stdout: string;
|
|
14
|
+
stderr: string;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if file exists
|
|
18
|
+
*/
|
|
19
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Write file content
|
|
22
|
+
*/
|
|
23
|
+
export declare function writeFile(filePath: string, content: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Read file content
|
|
26
|
+
*/
|
|
27
|
+
export declare function readFile(filePath: string): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Append content to file
|
|
30
|
+
*/
|
|
31
|
+
export declare function appendFile(filePath: string, content: string): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAOA,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;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAcpC;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
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { execa } from 'execa';
|
|
3
|
+
import fs from 'fs/promises';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import figlet from 'figlet';
|
|
6
|
+
// Re-export logger functions for backward compatibility
|
|
7
|
+
export { logSuccess, logError, logWarning, logInfo, logDebug, logVerbose, logCommand, logFileOperation, initLogger, getLoggerConfig, } from './utils/logger.js';
|
|
8
|
+
/**
|
|
9
|
+
* Display SimpleNS banner in blue using figlet
|
|
10
|
+
*/
|
|
11
|
+
export function displayBanner() {
|
|
12
|
+
const simpleNS = figlet.textSync('SimpleNS', {
|
|
13
|
+
font: 'Standard',
|
|
14
|
+
horizontalLayout: 'default',
|
|
15
|
+
});
|
|
16
|
+
const onboard = figlet.textSync('Onboard', {
|
|
17
|
+
font: 'Standard',
|
|
18
|
+
horizontalLayout: 'default',
|
|
19
|
+
});
|
|
20
|
+
console.log(chalk.blue(simpleNS));
|
|
21
|
+
console.log(chalk.blue(onboard));
|
|
22
|
+
console.log('');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Execute a shell command with error handling
|
|
26
|
+
*/
|
|
27
|
+
export async function executeCommand(command, args, options) {
|
|
28
|
+
// Import dynamically to avoid circular dependency
|
|
29
|
+
const { logCommand } = await import('./utils/logger.js');
|
|
30
|
+
logCommand(command, args);
|
|
31
|
+
try {
|
|
32
|
+
const result = await execa(command, args, {
|
|
33
|
+
cwd: options?.cwd || process.cwd(),
|
|
34
|
+
stdio: options?.silent ? 'pipe' : 'inherit',
|
|
35
|
+
});
|
|
36
|
+
return { stdout: result.stdout, stderr: result.stderr };
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new Error(`Command failed: ${command} ${args.join(' ')}\n${error.message}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if file exists
|
|
44
|
+
*/
|
|
45
|
+
export async function fileExists(filePath) {
|
|
46
|
+
try {
|
|
47
|
+
await fs.access(filePath);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Write file content
|
|
56
|
+
*/
|
|
57
|
+
export async function writeFile(filePath, content) {
|
|
58
|
+
const { logFileOperation } = await import('./utils/logger.js');
|
|
59
|
+
logFileOperation('Writing file', filePath);
|
|
60
|
+
const dir = path.dirname(filePath);
|
|
61
|
+
await fs.mkdir(dir, { recursive: true });
|
|
62
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Read file content
|
|
66
|
+
*/
|
|
67
|
+
export async function readFile(filePath) {
|
|
68
|
+
return await fs.readFile(filePath, 'utf-8');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Append content to file
|
|
72
|
+
*/
|
|
73
|
+
export async function appendFile(filePath, content) {
|
|
74
|
+
// Ensure parent directory exists, similar to writeFile
|
|
75
|
+
const dir = path.dirname(filePath);
|
|
76
|
+
await fs.mkdir(dir, { recursive: true });
|
|
77
|
+
await fs.appendFile(filePath, content, 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export type OSType = 'windows' | 'linux' | 'darwin';
|
|
2
|
+
/**
|
|
3
|
+
* Checks if Docker is installed on the system by running `docker --version`.
|
|
4
|
+
*
|
|
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
|
+
*/
|
|
17
|
+
export declare function checkDockerInstalled(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Checks if the Docker daemon is running by executing `docker ps`.
|
|
20
|
+
* Provides specific error types based on the failure reason.
|
|
21
|
+
*
|
|
22
|
+
* @throws {DockerPermissionError} When user lacks permissions to access Docker socket
|
|
23
|
+
* @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
|
+
*/
|
|
36
|
+
export declare function checkDockerRunning(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Detects the operating system platform.
|
|
39
|
+
*
|
|
40
|
+
* @returns OS type: 'windows', 'darwin' (macOS), or 'linux'
|
|
41
|
+
* @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
|
+
*/
|
|
51
|
+
export declare function detectOS(): OSType;
|
|
52
|
+
/**
|
|
53
|
+
* Validates all system prerequisites before starting the onboarding process.
|
|
54
|
+
* Checks Docker installation, daemon status, and detects the operating system.
|
|
55
|
+
*
|
|
56
|
+
* @throws {DockerNotInstalledError} If Docker is not installed
|
|
57
|
+
* @throws {DockerNotRunningError} If Docker daemon is not running
|
|
58
|
+
* @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
|
+
*/
|
|
70
|
+
export declare function validatePrerequisites(): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Validates environment variable values based on the variable name/type.
|
|
73
|
+
* Performs format-specific validation for URLs, ports, and security credentials.
|
|
74
|
+
*
|
|
75
|
+
* @param key - Environment variable name (e.g., 'MONGO_URI', 'PORT', 'API_KEY')
|
|
76
|
+
* @param value - Value to validate
|
|
77
|
+
* @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
|
+
*/
|
|
92
|
+
export declare function validateEnvValue(key: string, value: string): boolean;
|
|
93
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM1D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBxD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAMjC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B3D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA6BpE"}
|