| /*! |
| * statuses |
| * Copyright(c) 2014 Jonathan Ong |
| * Copyright(c) 2016 Douglas Christopher Wilson |
| * MIT Licensed |
| */ |
| |
| 'use strict' |
| |
| /** |
| * Module dependencies. |
| * @private |
| */ |
| |
| var codes = require('./codes.json') |
| |
| /** |
| * Module exports. |
| * @public |
| */ |
| |
| module.exports = status |
| |
| // status code to message map |
| status.STATUS_CODES = codes |
| |
| // array of status codes |
| status.codes = populateStatusesMap(status, codes) |
| |
| // 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 |
| } |
| |
| /** |
| * Populate the statuses map for given codes. |
| * @private |
| */ |
| |
| function populateStatusesMap (statuses, codes) { |
| var arr = [] |
| |
| Object.keys(codes).forEach(function forEachCode (code) { |
| var message = codes[code] |
| var status = Number(code) |
| |
| // Populate properties |
| statuses[status] = message |
| statuses[message] = status |
| statuses[message.toLowerCase()] = status |
| |
| // Add to array |
| arr.push(status) |
| }) |
| |
| return arr |
| } |
| |
| /** |
| * Get the status code. |
| * |
| * Given a number, this will throw if it is not a known status |
| * code, otherwise the code will be returned. Given a string, |
| * the string will be parsed for a number and return the code |
| * if valid, otherwise will lookup the code assuming this is |
| * the status message. |
| * |
| * @param {string|number} code |
| * @returns {number} |
| * @public |
| */ |
| |
| 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 |
| } |