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