Files
asciidisco.com/build/node_modules/github/lib/error.js
2023-08-01 13:49:46 +02:00

111 lines
2.7 KiB
JavaScript

/** section: github
* class HttpError
*
* Copyright 2012 Cloud9 IDE, Inc.
*
* This product includes software developed by
* Cloud9 IDE, Inc (http://c9.io).
*
* Author: Mike de Boer <mike@c9.io>
**/
var Util = require('util')
exports.HttpError = function (message, code, headers) {
Error.call(this, message)
this.message = message
this.code = code
this.status = statusCodes[code]
this.headers = headers
}
Util.inherits(exports.HttpError, Error);
(function () {
/**
* HttpError#toString() -> String
*
* Returns the stringified version of the error (i.e. the message).
**/
this.toString = function () {
return this.message
}
/**
* HttpError#toJSON() -> Object
*
* Returns a JSON object representation of the error.
**/
this.toJSON = function () {
return {
code: this.code,
status: this.status,
message: this.message
}
}
}).call(exports.HttpError.prototype)
var statusCodes = {
400: 'Bad Request',
401: 'Unauthorized',
402: 'Payment Required',
403: 'Forbidden',
404: 'Not Found',
405: 'Method Not Allowed',
406: 'Not Acceptable',
407: 'Proxy Authentication Required',
408: 'Request Timeout',
409: 'Conflict',
410: 'Gone',
411: 'Length Required',
412: 'Precondition Failed',
413: 'Request Entity Too Large',
414: 'Request-URI Too Long',
415: 'Unsupported Media Type',
416: 'Requested Range Not Satisfiable',
417: 'Expectation Failed',
420: 'Enhance Your Calm',
422: 'Unprocessable Entity',
423: 'Locked',
424: 'Failed Dependency',
425: 'Unordered Collection',
426: 'Upgrade Required',
428: 'Precondition Required',
429: 'Too Many Requests',
431: 'Request Header Fields Too Large',
444: 'No Response',
449: 'Retry With',
499: 'Client Closed Request',
500: 'Internal Server Error',
501: 'Not Implemented',
502: 'Bad Gateway',
503: 'Service Unavailable',
504: 'Gateway Timeout',
505: 'HTTP Version Not Supported',
506: 'Variant Also Negotiates',
507: 'Insufficient Storage',
508: 'Loop Detected',
509: 'Bandwidth Limit Exceeded',
510: 'Not Extended',
511: 'Network Authentication Required'
}
// XXX: Remove?
for (var status in statusCodes) {
var defaultMsg = statusCodes[status]
var error = (function (defaultMsg, status) {
return function (msg) {
this.defaultMessage = defaultMsg
exports.HttpError.call(this, msg, status)
if (status >= 500) { Error.captureStackTrace(this, arguments.callee) } // eslint-disable-line
}
})(defaultMsg, status)
Util.inherits(error, exports.HttpError)
var className = defaultMsg.replace(/\s/g, '')
exports[className] = error
exports[status] = error
}