server/node_modules/kado/index.js
/*
*
* Really Great thanks to open source communities
*
*/
Really Great thanks to open source communities
Really Great thanks to open source communities
function parse_str (str, array) {
  var strArr = String(str).replace(/^&/, '').replace(/&$/, '').split('&'),
    sal = strArr.length,
    i, j, ct, p, lastObj, obj, lastIter, undef, chr, tmp, key, value,
    postLeftBracketPos, keys, keysLen,
    fixStr = function (str) {
      return decodeURIComponent(str.replace(/\+/g, '%20'));
    };
  if (!array) {
    array = this.window;
  }
  for (i = 0; i < sal; i++) {
    tmp = strArr[i].split('=');
    key = fixStr(tmp[0]);
    value = (tmp.length < 2) ? '' : fixStr(tmp[1]);
    while (key.charAt(0) === ' ') {
      key = key.slice(1);
    }
    if (key.indexOf('\x00') > -1) {
      key = key.slice(0, key.indexOf('\x00'));
    }
    if (key && key.charAt(0) !== '[') {
      keys = [];
      postLeftBracketPos = 0;
      for (j = 0; j < key.length; j++) {
        if (key.charAt(j) === '[' && !postLeftBracketPos) {
          postLeftBracketPos = j + 1;
        }
        else if (key.charAt(j) === ']') {
          if (postLeftBracketPos) {
            if (!keys.length) {
              keys.push(key.slice(0, postLeftBracketPos - 1));
            }
            keys.push(key.substr(postLeftBracketPos, j - postLeftBracketPos));
            postLeftBracketPos = 0;
            if (key.charAt(j + 1) !== '[') {
              break;
            }
          }
        }
      }
      if (!keys.length) {
        keys = [key];
      }
      for (j = 0; j < keys[0].length; j++) {
        chr = keys[0].charAt(j);
        if (chr === ' ' || chr === '.' || chr === '[') {
          keys[0] = keys[0].substr(0, j) + '_' + keys[0].substr(j + 1);
        }
        if (chr === '[') {
          break;
        }
      }
      obj = array;
      for (j = 0, keysLen = keys.length; j < keysLen; j++) {
        key = keys[j].replace(/^['"]/, '').replace(/['"]$/, '');
        lastIter = j !== keys.length - 1;
        lastObj = obj;
        if ((key !== '' && key !== ' ') || j === 0) {
          if (obj[key] === undef) {
            obj[key] = {};
          }
          obj = obj[key];
        }
        else { 
          ct = -1;
          for (p in obj) {
            if (obj.hasOwnProperty(p)) {
              if (+p > ct && p.match(/^\d+$/g)) {
                ct = +p;
              }
            }
          }
          key = ct + 1;
        }
      }
      lastObj[key] = value;
    }
  }
}
function parse_str ( str , array ) { var strArr = String ( str ) . replace ( / ^& / , '' ) . replace ( / &$ / , '' ) . split ( '&' ) , sal = strArr . length , i , j , ct , p , lastObj , obj , lastIter , undef , chr , tmp , key , value , postLeftBracketPos , keys , keysLen , fixStr = function ( str ) { return decodeURIComponent ( str . replace ( / \+ / g , '%20' ) ) ; } ; if ( ! array ) { array = this . window ; } for ( i = 0 ; i < sal ; i ++ ) { tmp = strArr [ i ] . split ( '=' ) ; key = fixStr ( tmp [ 0 ] ) ; value = ( tmp . length < 2 ) ? '' : fixStr ( tmp [ 1 ] ) ; while ( key . charAt ( 0 ) === ' ' ) { key = key . slice ( 1 ) ; } if ( key . indexOf ( '\x00' ) > - 1 ) { key = key . slice ( 0 , key . indexOf ( '\x00' ) ) ; } if ( key && key . charAt ( 0 ) !== '[' ) { keys = [ ] ; postLeftBracketPos = 0 ; for ( j = 0 ; j < key . length ; j ++ ) { if ( key . charAt ( j ) === '[' && ! postLeftBracketPos ) { postLeftBracketPos = j + 1 ; } else if ( key . charAt ( j ) === ']' ) { if ( postLeftBracketPos ) { if ( ! keys . length ) { keys . push ( key . slice ( 0 , postLeftBracketPos - 1 ) ) ; } keys . push ( key . substr ( postLeftBracketPos , j - postLeftBracketPos ) ) ; postLeftBracketPos = 0 ; if ( key . charAt ( j + 1 ) !== '[' ) { break ; } } } } if ( ! keys . length ) { keys = [ key ] ; } for ( j = 0 ; j < keys [ 0 ] . length ; j ++ ) { chr = keys [ 0 ] . charAt ( j ) ; if ( chr === ' ' || chr === '.' || chr === '[' ) { keys [ 0 ] = keys [ 0 ] . substr ( 0 , j ) + '_' + keys [ 0 ] . substr ( j + 1 ) ; } if ( chr === '[' ) { break ; } } obj = array ; for ( j = 0 , keysLen = keys . length ; j < keysLen ; j ++ ) { key = keys [ j ] . replace ( / ^['"] / , '' ) . replace ( / ['"]$ / , '' ) ; lastIter = j !== keys . length - 1 ; lastObj = obj ; if ( ( key !== '' && key !== ' ' ) || j === 0 ) { if ( obj [ key ] === undef ) { obj [ key ] = { } ; } obj = obj [ key ] ; } else { ct = - 1 ; for ( p in obj ) { if ( obj . hasOwnProperty ( p ) ) { if ( + p > ct && p . match ( / ^\d+$ / g ) ) { ct = + p ; } } } key = ct + 1 ; } } lastObj [ key ] = value ; } } }
Really Great thanks to open source communities
Really Great thanks to open source communities
// http://kevin.vanzonneveld.net // +   original by: Cagri Ekin // +   improved by: Michael White (http://getsprink.com) // +    tweaked by: Jack // +   bugfixed by: Onno Marsman // +   reimplemented by: stag019 // +   bugfixed by: Brett Zamir (http://brett-zamir.me) // +   bugfixed by: stag019 // +   input by: Dreamer // +   bugfixed by: Brett Zamir (http://brett-zamir.me) // +   bugfixed by: MIO_KODUKI (http://mio-koduki.blogspot.com/) // +   input by: Zaide (http://zaidesthings.com/) // +   input by: David Pesta (http://davidpesta.com/) // +   input by: jeicquest // +   improved by: Brett Zamir (http://brett-zamir.me) // %        note 1: When no argument is specified, will put variables in global scope. // %        note 1: When a particular argument has been passed, and the returned value is different parse_str of PHP. For example, a=b=c&d====c // *     example 1: var arr = {}; // *     example 1: parse_str('first=foo&second=bar', arr); // *     results 1: arr == { first: 'foo', second: 'bar' } // *     example 2: var arr = {}; // *     example 2: parse_str('str_a=Jack+and+Jill+didn%27t+see+the+well.', arr); // *     results 2: arr == { str_a: "Jack and Jill didn't see the well." } // *     example 3: var abc = {3:'a'}; // *     example 3: parse_str('abc[a][b]["c"]=def&abc[q]=t+5'); // *     results 3: JSON.stringify(abc) === '{"3":"a","a":{"b":{"c":"def"}},"q":"t 5"}'; // To insert new dimension