@basictech/cli
Version:
Basic CLI for creating & managing your projects
74 lines • 2.45 kB
JavaScript
export class BasicCliError extends Error {
code;
suggestions;
constructor(message, code, suggestions) {
super(message);
this.code = code;
this.suggestions = suggestions;
this.name = 'BasicCliError';
}
}
export class AuthError extends BasicCliError {
constructor(message, suggestions) {
super(message, 'AUTH_ERROR', suggestions);
this.name = 'AuthError';
}
}
export class ApiError extends BasicCliError {
statusCode;
constructor(message, statusCode, suggestions) {
super(message, 'API_ERROR', suggestions);
this.statusCode = statusCode;
this.name = 'ApiError';
}
}
export class SchemaError extends BasicCliError {
constructor(message, suggestions) {
super(message, 'SCHEMA_ERROR', suggestions);
this.name = 'SchemaError';
}
}
export class NetworkError extends BasicCliError {
constructor(message = 'Network connection failed') {
super(message, 'NETWORK_ERROR', [
'Check your internet connection',
'Try again in a moment'
]);
this.name = 'NetworkError';
}
}
export function handleError(error) {
if (error instanceof BasicCliError) {
return error;
}
if (error instanceof Error) {
if (error.message.includes('ENOTFOUND') || error.message.includes('network')) {
return new NetworkError();
}
if (error.message.includes('unauthorized') || error.message.includes('401')) {
return new AuthError('Authentication failed', [
'Try logging in again with \'basic login\'',
'Check if your token has expired'
]);
}
if (error.message.includes('invalid character')) {
return new SchemaError('Invalid schema format', [
'Check for trailing commas in your schema',
'Ensure valid JSON syntax'
]);
}
return new BasicCliError(error.message, 'UNKNOWN_ERROR');
}
return new BasicCliError('An unknown error occurred', 'UNKNOWN_ERROR');
}
export function formatError(error) {
let output = `Error: ${error.message}`;
if (error.suggestions && error.suggestions.length > 0) {
output += '\n\nSuggestions:';
error.suggestions.forEach(suggestion => {
output += `\n - ${suggestion}`;
});
}
return output;
}
//# sourceMappingURL=errors.js.map