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

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;
}