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
1 month ago
|
'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;
|
||
|
};
|