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.
		
		
		
		
		
			
		
			
				
					
					
						
							164 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							164 lines
						
					
					
						
							4.3 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
exports.randomString = function randomString(length, charSet) {
 | 
						|
  var result = [];
 | 
						|
  length = length || 16;
 | 
						|
  charSet = charSet || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
 | 
						|
 | 
						|
  while (length--) {
 | 
						|
    result.push(charSet[Math.floor(Math.random() * charSet.length)]);
 | 
						|
  }
 | 
						|
  return result.join('');
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * split string to array
 | 
						|
 * @param  {String} str
 | 
						|
 * @param  {String} [sep] default is ','
 | 
						|
 * @return {Array}
 | 
						|
 */
 | 
						|
exports.split = function split(str, sep) {
 | 
						|
  str = str || '';
 | 
						|
  sep = sep || ',';
 | 
						|
  var items = str.split(sep);
 | 
						|
  var needs = [];
 | 
						|
  for (var i = 0; i < items.length; i++) {
 | 
						|
    var s = items[i].trim();
 | 
						|
    if (s.length > 0) {
 | 
						|
      needs.push(s);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return needs;
 | 
						|
};
 | 
						|
// always optimized
 | 
						|
exports.splitAlwaysOptimized = function splitAlwaysOptimized() {
 | 
						|
  var str = '';
 | 
						|
  var sep = ',';
 | 
						|
  if (arguments.length === 1) {
 | 
						|
    str = arguments[0] || '';
 | 
						|
  } else if (arguments.length === 2) {
 | 
						|
    str = arguments[0] || '';
 | 
						|
    sep = arguments[1] || ',';
 | 
						|
  }
 | 
						|
  var items = str.split(sep);
 | 
						|
  var needs = [];
 | 
						|
  for (var i = 0; i < items.length; i++) {
 | 
						|
    var s = items[i].trim();
 | 
						|
    if (s.length > 0) {
 | 
						|
      needs.push(s);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return needs;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Replace string
 | 
						|
 *
 | 
						|
 * @param  {String} str
 | 
						|
 * @param  {String|RegExp} substr
 | 
						|
 * @param  {String|Function} newSubstr
 | 
						|
 * @return {String}
 | 
						|
 */
 | 
						|
exports.replace = function replace(str, substr, newSubstr) {
 | 
						|
  var replaceFunction = newSubstr;
 | 
						|
  if (typeof replaceFunction !== 'function') {
 | 
						|
    replaceFunction = function () {
 | 
						|
      return newSubstr;
 | 
						|
    };
 | 
						|
  }
 | 
						|
  return str.replace(substr, replaceFunction);
 | 
						|
};
 | 
						|
 | 
						|
// original source https://github.com/nodejs/node/blob/v7.5.0/lib/_http_common.js#L300
 | 
						|
/**
 | 
						|
 * True if val contains an invalid field-vchar
 | 
						|
 *  field-value    = *( field-content / obs-fold )
 | 
						|
 *  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
 | 
						|
 *  field-vchar    = VCHAR / obs-text
 | 
						|
 *
 | 
						|
 * checkInvalidHeaderChar() is currently designed to be inlinable by v8,
 | 
						|
 * so take care when making changes to the implementation so that the source
 | 
						|
 * code size does not exceed v8's default max_inlined_source_size setting.
 | 
						|
 **/
 | 
						|
var validHdrChars = [
 | 
						|
  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, // 0 - 15
 | 
						|
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 32 - 47
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 48 - 63
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 80 - 95
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 112 - 127
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 128 ...
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
						|
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  // ... 255
 | 
						|
];
 | 
						|
 | 
						|
/**
 | 
						|
 * Replace invalid http header characters with replacement
 | 
						|
 *
 | 
						|
 * @param  {String} val
 | 
						|
 * @param  {String|Function} replacement - can be `function(char)`
 | 
						|
 * @return {Object}
 | 
						|
 */
 | 
						|
exports.replaceInvalidHttpHeaderChar = function replaceInvalidHttpHeaderChar(val, replacement) {
 | 
						|
  replacement = replacement || ' ';
 | 
						|
  var invalid = false;
 | 
						|
 | 
						|
  if (!val || typeof val !== 'string') {
 | 
						|
    return {
 | 
						|
      val: val,
 | 
						|
      invalid: invalid,
 | 
						|
    };
 | 
						|
  }
 | 
						|
 | 
						|
  var replacementType = typeof replacement;
 | 
						|
  var chars;
 | 
						|
  for (var i = 0; i < val.length; ++i) {
 | 
						|
    if (!validHdrChars[val.charCodeAt(i)]) {
 | 
						|
      // delay create chars
 | 
						|
      chars = chars || val.split('');
 | 
						|
      if (replacementType === 'function') {
 | 
						|
        chars[i] = replacement(chars[i]);
 | 
						|
      } else {
 | 
						|
        chars[i] = replacement;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (chars) {
 | 
						|
    val = chars.join('');
 | 
						|
    invalid = true;
 | 
						|
  }
 | 
						|
 | 
						|
  return {
 | 
						|
    val: val,
 | 
						|
    invalid: invalid,
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Detect invalid http header characters in a string
 | 
						|
 *
 | 
						|
 * @param {String} val
 | 
						|
 * @return {Boolean}
 | 
						|
 */
 | 
						|
exports.includesInvalidHttpHeaderChar = function includesInvalidHttpHeaderChar(val) {
 | 
						|
  if (!val || typeof val !== 'string') {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  for (var i = 0; i < val.length; ++i) {
 | 
						|
    if (!validHdrChars[val.charCodeAt(i)]) {
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return false;
 | 
						|
};
 |