You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							113 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							113 lines
						
					
					
						
							2.0 KiB
						
					
					
				/*! | 
						|
 * 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 | 
						|
}
 | 
						|
 |