soccer-go
Version:
Soccer CLI for stats and results.
84 lines (83 loc) • 3.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleCommandError = exports.formatErrorForPrinting = exports.ApplicationError = exports.ErrorCode = exports.isErrorNodeSystemError = void 0;
/**
* Asserts if a alleged `error` is a Node.js system error.
*/
const isErrorNodeSystemError = (error) => {
return ('code' in error &&
'errno' in error &&
'code' in error &&
'syscall' in error);
};
exports.isErrorNodeSystemError = isErrorNodeSystemError;
var ErrorCode;
(function (ErrorCode) {
ErrorCode[ErrorCode["GENERIC"] = 1000] = "GENERIC";
ErrorCode[ErrorCode["API_KEY_MISSING"] = 1001] = "API_KEY_MISSING";
ErrorCode[ErrorCode["API_KEY_INVALID"] = 1002] = "API_KEY_INVALID";
ErrorCode[ErrorCode["API_RESPONSE_400"] = 1003] = "API_RESPONSE_400";
ErrorCode[ErrorCode["API_RESPONSE_429"] = 1004] = "API_RESPONSE_429";
ErrorCode[ErrorCode["API_RESPONSE_500"] = 1005] = "API_RESPONSE_500";
ErrorCode[ErrorCode["LEAGUE_NOT_FOUND_BY_NAME"] = 1006] = "LEAGUE_NOT_FOUND_BY_NAME";
ErrorCode[ErrorCode["LEAGUE_NOT_FOUND_BY_CODE"] = 1007] = "LEAGUE_NOT_FOUND_BY_CODE";
ErrorCode[ErrorCode["TEAM_NOT_FOUND"] = 1008] = "TEAM_NOT_FOUND";
ErrorCode[ErrorCode["NETWORK_UNREACHABLE"] = 1009] = "NETWORK_UNREACHABLE";
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
class ApplicationError extends Error {
code;
extraData;
constructor(code, extraData) {
super();
this.code = code;
this.extraData = extraData;
}
}
exports.ApplicationError = ApplicationError;
const formatErrorForPrinting = (code, extraData) => {
switch (code) {
case ErrorCode.GENERIC:
return `Something unexpected happened:\n ${extraData}\n`;
case ErrorCode.API_KEY_MISSING:
return ('SOCCER_GO_API_KEY environment variable not set.\n\n' +
' $ export SOCCER_GO_API_KEY=<football_data_api_key>\n\n' +
'You can get your own API key over at\n' +
'https://www.football-data.org/client/register\n');
case ErrorCode.API_KEY_INVALID:
return ('The API key set is invalid.\n' +
'Please check that the SOCCER_GO_API_KEY environment variable matches ' +
'the key you received upon registration\n\n' +
' $ echo $SOCCER_GO_API_KEY\n');
case ErrorCode.API_RESPONSE_400:
return `Something went wrong with your request, reason:\n\n ${extraData}\n`;
case ErrorCode.API_RESPONSE_429:
return ('You seem to have made too many requests.\n' +
'Please wait a minute before making new requests.\n');
case ErrorCode.API_RESPONSE_500:
return 'Cannot retrieve data at this time, please try again later.\n';
case ErrorCode.LEAGUE_NOT_FOUND_BY_NAME:
return `Could not find league "${extraData}".\n`;
case ErrorCode.LEAGUE_NOT_FOUND_BY_CODE:
return `Could not find league with code "${extraData}".\n`;
case ErrorCode.TEAM_NOT_FOUND:
return `Could not find team "${extraData}".\n`;
case ErrorCode.NETWORK_UNREACHABLE:
return 'Could not contact the server.\nPlease check your internet connection.\n';
}
};
exports.formatErrorForPrinting = formatErrorForPrinting;
const handleCommandError = (error) => {
if (error instanceof ApplicationError) {
console.error((0, exports.formatErrorForPrinting)(error.code, error.extraData));
process.exit(error.code);
}
if (error instanceof Error) {
console.error((0, exports.formatErrorForPrinting)(ErrorCode.GENERIC, error.message));
process.exit(ErrorCode.GENERIC);
}
if (typeof error === 'string') {
console.error((0, exports.formatErrorForPrinting)(ErrorCode.GENERIC, error));
process.exit(ErrorCode.GENERIC);
}
};
exports.handleCommandError = handleCommandError;