| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | /*! * 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 mapstatus.message = codes// status message (lower-case) to code mapstatus.code = createMessageToStatusCodeMap(codes)// array of status codesstatus.codes = createStatusCodeList(codes)// status codes for redirectsstatus.redirect = {  300: true,  301: true,  302: true,  303: true,  305: true,  307: true,  308: true}// status codes for empty bodiesstatus.empty = {  204: true,  205: true,  304: true}// status codes for when you should retry the requeststatus.retry = {  502: true,  503: true,  504: true}/** * Create a map of message to status code. * @private */function createMessageToStatusCodeMap (codes) {  var map = {}  Object.keys(codes).forEach(function forEachCode (code) {    var message = codes[code]    var status = Number(code)    // populate map    map[message.toLowerCase()] = status  })  return map}/** * Create a list of all status codes. * @private */function createStatusCodeList (codes) {  return Object.keys(codes).map(function mapCode (code) {    return Number(code)  })}/** * Get the status code for given message. * @private */function getStatusCode (message) {  var msg = message.toLowerCase()  if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {    throw new Error('invalid status message: "' + message + '"')  }  return status.code[msg]}/** * Get the status message for given code. * @private */function getStatusMessage (code) {  if (!Object.prototype.hasOwnProperty.call(status.message, code)) {    throw new Error('invalid status code: ' + code)  }  return status.message[code]}/** * 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') {    return getStatusMessage(code)  }  if (typeof code !== 'string') {    throw new TypeError('code must be a number or string')  }  // '403'  var n = parseInt(code, 10)  if (!isNaN(n)) {    return getStatusMessage(n)  }  return getStatusCode(code)}
 |