react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / qs / lib / utils.js
81146 views// Load modules123// Declare internals45var internals = {};6internals.hexTable = new Array(256);7for (var i = 0; i < 256; ++i) {8internals.hexTable[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();9}101112exports.arrayToObject = function (source) {1314var obj = Object.create(null);15for (var i = 0, il = source.length; i < il; ++i) {16if (typeof source[i] !== 'undefined') {1718obj[i] = source[i];19}20}2122return obj;23};242526exports.merge = function (target, source) {2728if (!source) {29return target;30}3132if (typeof source !== 'object') {33if (Array.isArray(target)) {34target.push(source);35}36else if (typeof target === 'object') {37target[source] = true;38}39else {40target = [target, source];41}4243return target;44}4546if (typeof target !== 'object') {47target = [target].concat(source);48return target;49}5051if (Array.isArray(target) &&52!Array.isArray(source)) {5354target = exports.arrayToObject(target);55}5657var keys = Object.keys(source);58for (var k = 0, kl = keys.length; k < kl; ++k) {59var key = keys[k];60var value = source[key];6162if (!target[key]) {63target[key] = value;64}65else {66target[key] = exports.merge(target[key], value);67}68}6970return target;71};727374exports.decode = function (str) {7576try {77return decodeURIComponent(str.replace(/\+/g, ' '));78} catch (e) {79return str;80}81};8283exports.encode = function (str) {8485// This code was originally written by Brian White (mscdex) for the io.js core querystring library.86// It has been adapted here for stricter adherence to RFC 398687if (str.length === 0) {88return str;89}9091if (typeof str !== 'string') {92str = '' + str;93}9495var out = '';96for (var i = 0, il = str.length; i < il; ++i) {97var c = str.charCodeAt(i);9899if (c === 0x2D || // -100c === 0x2E || // .101c === 0x5F || // _102c === 0x7E || // ~103(c >= 0x30 && c <= 0x39) || // 0-9104(c >= 0x41 && c <= 0x5A) || // a-z105(c >= 0x61 && c <= 0x7A)) { // A-Z106107out += str[i];108continue;109}110111if (c < 0x80) {112out += internals.hexTable[c];113continue;114}115116if (c < 0x800) {117out += internals.hexTable[0xC0 | (c >> 6)] + internals.hexTable[0x80 | (c & 0x3F)];118continue;119}120121if (c < 0xD800 || c >= 0xE000) {122out += internals.hexTable[0xE0 | (c >> 12)] + internals.hexTable[0x80 | ((c >> 6) & 0x3F)] + internals.hexTable[0x80 | (c & 0x3F)];123continue;124}125126++i;127c = 0x10000 + (((c & 0x3FF) << 10) | (str.charCodeAt(i) & 0x3FF));128out += internals.hexTable[0xF0 | (c >> 18)] + internals.hexTable[0x80 | ((c >> 12) & 0x3F)] + internals.hexTable[0x80 | ((c >> 6) & 0x3F)] + internals.hexTable[0x80 | (c & 0x3F)];129}130131return out;132};133134exports.compact = function (obj, refs) {135136if (typeof obj !== 'object' ||137obj === null) {138139return obj;140}141142refs = refs || [];143var lookup = refs.indexOf(obj);144if (lookup !== -1) {145return refs[lookup];146}147148refs.push(obj);149150if (Array.isArray(obj)) {151var compacted = [];152153for (var i = 0, il = obj.length; i < il; ++i) {154if (typeof obj[i] !== 'undefined') {155compacted.push(obj[i]);156}157}158159return compacted;160}161162var keys = Object.keys(obj);163for (i = 0, il = keys.length; i < il; ++i) {164var key = keys[i];165obj[key] = exports.compact(obj[key], refs);166}167168return obj;169};170171172exports.isRegExp = function (obj) {173174return Object.prototype.toString.call(obj) === '[object RegExp]';175};176177178exports.isBuffer = function (obj) {179180if (obj === null ||181typeof obj === 'undefined') {182183return false;184}185186return !!(obj.constructor &&187obj.constructor.isBuffer &&188obj.constructor.isBuffer(obj));189};190191192