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