You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.1 KiB
JavaScript
61 lines
1.1 KiB
JavaScript
|
|
var codes = require('./codes.json');
|
|
|
|
module.exports = status;
|
|
|
|
// [Integer...]
|
|
status.codes = Object.keys(codes).map(function (code) {
|
|
code = ~~code;
|
|
var msg = codes[code];
|
|
status[code] = msg;
|
|
status[msg] = status[msg.toLowerCase()] = code;
|
|
return code;
|
|
});
|
|
|
|
// status codes for redirects
|
|
status.redirect = {
|
|
300: true,
|
|
301: true,
|
|
302: true,
|
|
303: true,
|
|
305: true,
|
|
307: true,
|
|
308: true,
|
|
};
|
|
|
|
// status codes for empty bodies
|
|
status.empty = {
|
|
204: true,
|
|
205: true,
|
|
304: true,
|
|
};
|
|
|
|
// status codes for when you should retry the request
|
|
status.retry = {
|
|
502: true,
|
|
503: true,
|
|
504: true,
|
|
};
|
|
|
|
function status(code) {
|
|
if (typeof code === 'number') {
|
|
if (!status[code]) throw new Error('invalid status code: ' + code);
|
|
return code;
|
|
}
|
|
|
|
if (typeof code !== 'string') {
|
|
throw new TypeError('code must be a number or string');
|
|
}
|
|
|
|
// '403'
|
|
var n = parseInt(code, 10)
|
|
if (!isNaN(n)) {
|
|
if (!status[n]) throw new Error('invalid status code: ' + n);
|
|
return n;
|
|
}
|
|
|
|
n = status[code.toLowerCase()];
|
|
if (!n) throw new Error('invalid status message: "' + code + '"');
|
|
return n;
|
|
}
|