diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa8cc71..9f79931 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
+## 1.1.1 (Apr 9, 2015)
+
+ - Validate format of redirect array returned by preprocessors [[c48e245](https://github.com/SparkartGroupInc/universe-js/commit/c48e245075f4a2adad892e729d7ee1d5dc0d471c)]
+
## 1.1.0 (Apr 8, 2015)
- - Query options
+ - Query options [[5a40d14]](https://github.com/SparkartGroupInc/universe-js/commit/5a40d14c28739102a281fd810ba47bf249cc8624)
## 1.0.0 (Apr 1, 2015)
diff --git a/build/universe.js b/build/universe.js
index 547926f..e3f7dc7 100644
--- a/build/universe.js
+++ b/build/universe.js
@@ -126,7 +126,7 @@ var resourceUrl = function(endpoint) {
module.exports = Universe;
-},{"solidus-client":10,"solidus-client/lib/resource":12}],2:[function(_dereq_,module,exports){
+},{"solidus-client":7,"solidus-client/lib/resource":9}],2:[function(_dereq_,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
@@ -520,192 +520,13 @@ process.chdir = function (dir) {
};
},{}],5:[function(_dereq_,module,exports){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-'use strict';
-
-// If obj.hasOwnProperty has been overridden, then calling
-// obj.hasOwnProperty(prop) will break.
-// See: https://github.com/joyent/node/issues/1707
-function hasOwnProperty(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-module.exports = function(qs, sep, eq, options) {
- sep = sep || '&';
- eq = eq || '=';
- var obj = {};
-
- if (typeof qs !== 'string' || qs.length === 0) {
- return obj;
- }
-
- var regexp = /\+/g;
- qs = qs.split(sep);
-
- var maxKeys = 1000;
- if (options && typeof options.maxKeys === 'number') {
- maxKeys = options.maxKeys;
- }
-
- var len = qs.length;
- // maxKeys <= 0 means that we should not limit keys count
- if (maxKeys > 0 && len > maxKeys) {
- len = maxKeys;
- }
-
- for (var i = 0; i < len; ++i) {
- var x = qs[i].replace(regexp, '%20'),
- idx = x.indexOf(eq),
- kstr, vstr, k, v;
-
- if (idx >= 0) {
- kstr = x.substr(0, idx);
- vstr = x.substr(idx + 1);
- } else {
- kstr = x;
- vstr = '';
- }
-
- k = decodeURIComponent(kstr);
- v = decodeURIComponent(vstr);
-
- if (!hasOwnProperty(obj, k)) {
- obj[k] = v;
- } else if (isArray(obj[k])) {
- obj[k].push(v);
- } else {
- obj[k] = [obj[k], v];
- }
- }
-
- return obj;
-};
-
-var isArray = Array.isArray || function (xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
-};
-
-},{}],6:[function(_dereq_,module,exports){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-'use strict';
-
-var stringifyPrimitive = function(v) {
- switch (typeof v) {
- case 'string':
- return v;
-
- case 'boolean':
- return v ? 'true' : 'false';
-
- case 'number':
- return isFinite(v) ? v : '';
-
- default:
- return '';
- }
-};
-
-module.exports = function(obj, sep, eq, name) {
- sep = sep || '&';
- eq = eq || '=';
- if (obj === null) {
- obj = undefined;
- }
-
- if (typeof obj === 'object') {
- return map(objectKeys(obj), function(k) {
- var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
- if (isArray(obj[k])) {
- return obj[k].map(function(v) {
- return ks + encodeURIComponent(stringifyPrimitive(v));
- }).join(sep);
- } else {
- return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
- }
- }).join(sep);
-
- }
-
- if (!name) return '';
- return encodeURIComponent(stringifyPrimitive(name)) + eq +
- encodeURIComponent(stringifyPrimitive(obj));
-};
-
-var isArray = Array.isArray || function (xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
-};
-
-function map (xs, f) {
- if (xs.map) return xs.map(f);
- var res = [];
- for (var i = 0; i < xs.length; i++) {
- res.push(f(xs[i], i));
- }
- return res;
-}
-
-var objectKeys = Object.keys || function (obj) {
- var res = [];
- for (var key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
- }
- return res;
-};
-
-},{}],7:[function(_dereq_,module,exports){
-'use strict';
-
-exports.decode = exports.parse = _dereq_('./decode');
-exports.encode = exports.stringify = _dereq_('./encode');
-
-},{"./decode":5,"./encode":6}],8:[function(_dereq_,module,exports){
module.exports = function isBuffer(arg) {
return arg && typeof arg === 'object'
&& typeof arg.copy === 'function'
&& typeof arg.fill === 'function'
&& typeof arg.readUInt8 === 'function';
}
-},{}],9:[function(_dereq_,module,exports){
+},{}],6:[function(_dereq_,module,exports){
(function (process,global){
// Copyright Joyent, Inc. and other Node contributors.
//
@@ -1295,7 +1116,7 @@ function hasOwnProperty(obj, prop) {
}
}).call(this,_dereq_("IrXUsu"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./support/isBuffer":8,"IrXUsu":4,"inherits":3}],10:[function(_dereq_,module,exports){
+},{"./support/isBuffer":5,"IrXUsu":4,"inherits":3}],7:[function(_dereq_,module,exports){
var _ = _dereq_('underscore');
var handlebars_helper = _dereq_('handlebars-helper');
var EventEmitter = _dereq_('events').EventEmitter;
@@ -1384,7 +1205,7 @@ SolidusClient.prototype.render = function(view, params, callback) {
module.exports = SolidusClient;
-},{"./lib/resource.js":12,"./lib/view.js":14,"events":2,"handlebars-helper":15,"underscore":116,"util":9}],11:[function(_dereq_,module,exports){
+},{"./lib/resource.js":9,"./lib/view.js":11,"events":2,"handlebars-helper":13,"underscore":119,"util":6}],8:[function(_dereq_,module,exports){
/*
* Copyright (c) 2010 Nick Galbreath
* http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
@@ -1509,7 +1330,7 @@ base64.encode = function(s) {
module.exports = base64;
-},{}],12:[function(_dereq_,module,exports){
+},{}],9:[function(_dereq_,module,exports){
var DYNAMIC_SEGMENTS = /\{([^\}]*)\}/ig;
var DEFAULT_ENCODING = 'UTF8';
var DEFAULT_SOLIDUS_API_ROUTE = '/api/';
@@ -1517,8 +1338,9 @@ var DEFAULT_TIMEOUT = 20000;
var NOT_FOUND = /(404|not[ -_]?found|not[ -_]?find|no[ -_]?\w+?[ -_]?found|invalid[ -_]?\w+|unknown[ -_]?\w+|do(es)?[ -_]?not[ -_]?exist|empty)/i;
var _ = _dereq_('underscore');
-var querystring = _dereq_('querystring');
+var qs = _dereq_('qs');
var superagent = _dereq_('superagent');
+var extend = _dereq_('extend');
var util = _dereq_('./util');
@@ -1572,13 +1394,11 @@ var initializeOptions = function(options, resources_options, params) {
// Find all the matching global options
_.each(resources_options, function(options, match) {
var matcher = new RegExp(match, 'ig');
- if (matcher.test(self.url)) {
- self.options = _.extend(self.options, options);
- }
+ if (matcher.test(self.url)) extend(true, self.options, options);
});
// Merge the resource options
- self.options = _.extend(self.options, options);
+ extend(true, self.options, options);
// Expand the query options
_.each(self.options.query, function(value, name) {
@@ -1686,11 +1506,18 @@ var clientRequest = function(method, data, callback) {
var buildUrl = function(url) {
var start = url.indexOf('?') + 1;
var query = [];
- if (start > 0) query.push(querystring.parse(url.substring(start)));
+ if (start > 0) query.push(qs.parse(url.substring(start)));
if (this.options.query) query.push(this.options.query);
query = query.concat(Array.prototype.slice.call(arguments, 1));
+ query = _.extend.apply(_, query);
- query = querystring.stringify(_.extend.apply(_, query));
+ if (this.options.query_options && this.options.query_options['objectFormat'] === 'json') {
+ _.each(query, function(value, key) {
+ if (_.isObject(value) && !_.isArray(value)) query[key] = JSON.stringify(value);
+ });
+ }
+
+ query = qs.stringify(query, this.options.query_options);
if (query) {
return (start > 0 ? url.substring(0, start - 1) : url) + '?' + query;
} else {
@@ -1745,12 +1572,12 @@ var processDataStatus = function(data, callback) {
module.exports = Resource;
-},{"./base64":11,"./util":13,"querystring":7,"superagent":113,"underscore":116}],13:[function(_dereq_,module,exports){
+},{"./base64":8,"./util":10,"extend":12,"qs":111,"superagent":116,"underscore":119}],10:[function(_dereq_,module,exports){
module.exports.isNode = !(typeof window !== 'undefined' && window !== null);
module.exports.isIE = typeof XDomainRequest !== 'undefined';
-},{}],14:[function(_dereq_,module,exports){
+},{}],11:[function(_dereq_,module,exports){
var _ = _dereq_('underscore');
var util = _dereq_('./util');
@@ -1848,7 +1675,7 @@ var preprocessContext = function(callback) {
} else if (_.isString(context)) {
if (util.isNode) return callback(new Error('Cannot redirect'));
View.redirect(context);
- } else if (_.isArray(context)) {
+ } else if (_.isArray(context) && context.length === 2 && _.isNumber(context[0]) && _.isString(context[1])) {
if (util.isNode) return callback(new Error('Cannot redirect'));
View.redirect(context[1]);
} else if (!_.isObject(context)) {
@@ -1893,9 +1720,92 @@ var preprocessContextAsync = function(callback) {
module.exports = View;
-},{"./util":13,"underscore":116}],15:[function(_dereq_,module,exports){
+},{"./util":10,"underscore":119}],12:[function(_dereq_,module,exports){
+var hasOwn = Object.prototype.hasOwnProperty;
+var toString = Object.prototype.toString;
+var undefined;
+
+var isPlainObject = function isPlainObject(obj) {
+ 'use strict';
+ if (!obj || toString.call(obj) !== '[object Object]') {
+ return false;
+ }
+
+ var has_own_constructor = hasOwn.call(obj, 'constructor');
+ var has_is_property_of_method = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
+ // Not own constructor property must be Object
+ if (obj.constructor && !has_own_constructor && !has_is_property_of_method) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ var key;
+ for (key in obj) {}
+
+ return key === undefined || hasOwn.call(obj, key);
+};
+
+module.exports = function extend() {
+ 'use strict';
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0],
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if (typeof target === 'boolean') {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ } else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {
+ target = {};
+ }
+
+ for (; i < length; ++i) {
+ options = arguments[i];
+ // Only deal with non-null/undefined values
+ if (options != null) {
+ // Extend the base object
+ for (name in options) {
+ src = target[name];
+ copy = options[name];
+
+ // Prevent never-ending loop
+ if (target === copy) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if (deep && copy && (isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
+ if (copyIsArray) {
+ copyIsArray = false;
+ clone = src && Array.isArray(src) ? src : [];
+ } else {
+ clone = src && isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[name] = extend(deep, clone, copy);
+
+ // Don't bring in undefined values
+ } else if (copy !== undefined) {
+ target[name] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+
+},{}],13:[function(_dereq_,module,exports){
module.exports = _dereq_('./lib');
-},{"./lib":40}],16:[function(_dereq_,module,exports){
+},{"./lib":38}],14:[function(_dereq_,module,exports){
module.exports = function(){
var numbers = Array.prototype.slice.call( arguments, 0, -1 );
var result = 0;
@@ -1904,7 +1814,7 @@ module.exports = function(){
}
return result;
};
-},{}],17:[function(_dereq_,module,exports){
+},{}],15:[function(_dereq_,module,exports){
// Modified form of `timeago` helper from https://github.com/assemble/handlebars-helpers
var newDate = _dereq_('new-date');
@@ -1930,7 +1840,7 @@ module.exports = function( date ){
if( Math.floor( seconds ) <= 1 ) return 'Just now';
else return Math.floor( seconds ) +' seconds ago';
};
-},{"new-date":107}],18:[function(_dereq_,module,exports){
+},{"new-date":105}],16:[function(_dereq_,module,exports){
module.exports = function( collection, start, end, options ){
options = options || end;
if( typeof start !== 'number' ) return;
@@ -1942,7 +1852,7 @@ module.exports = function( collection, start, end, options ){
}
return result;
};
-},{}],19:[function(_dereq_,module,exports){
+},{}],17:[function(_dereq_,module,exports){
module.exports = function( collection, item, options ){
// string check
if( typeof collection === 'string' ){
@@ -1961,7 +1871,7 @@ module.exports = function( collection, item, options ){
}
return options.inverse(this);
};
-},{}],20:[function(_dereq_,module,exports){
+},{}],18:[function(_dereq_,module,exports){
module.exports = function(){
var numbers = Array.prototype.slice.call( arguments, 1, -1 );
var result = arguments[0];
@@ -1970,11 +1880,11 @@ module.exports = function(){
}
return result;
};
-},{}],21:[function(_dereq_,module,exports){
+},{}],19:[function(_dereq_,module,exports){
module.exports = function( string ){
return encodeURIComponent( string );
};
-},{}],22:[function(_dereq_,module,exports){
+},{}],20:[function(_dereq_,module,exports){
module.exports = function( left, right, exact, options ){
options = options || exact;
exact = ( exact === 'exact' ) ? true : false;
@@ -1982,7 +1892,7 @@ module.exports = function( left, right, exact, options ){
if( is_equal ) return options.fn(this);
return options.inverse(this);
};
-},{}],23:[function(_dereq_,module,exports){
+},{}],21:[function(_dereq_,module,exports){
module.exports = function( collection, count, options ){
options = options || count;
count = ( typeof count === 'number' ) ? count : 1;
@@ -1997,7 +1907,7 @@ module.exports = function( collection, count, options ){
}
return result;
};
-},{}],24:[function(_dereq_,module,exports){
+},{}],22:[function(_dereq_,module,exports){
var strftimeTZ = _dereq_('strftime').strftimeTZ;
var newDate = _dereq_('new-date');
@@ -2006,7 +1916,7 @@ module.exports = function( date_string, format, offset ){
var date = newDate( date_string );
return strftimeTZ( format, date, offset );
};
-},{"new-date":107,"strftime":112}],25:[function(_dereq_,module,exports){
+},{"new-date":105,"strftime":110}],23:[function(_dereq_,module,exports){
module.exports = function( left, right, equal, options ){
options = options || equal;
equal = ( equal === 'equal' ) ? true : false;
@@ -2014,7 +1924,7 @@ module.exports = function( left, right, equal, options ){
if( is_greater ) return options.fn( this );
return options.inverse( this );
};
-},{}],26:[function(_dereq_,module,exports){
+},{}],24:[function(_dereq_,module,exports){
module.exports = function( collection, separator ){
separator = ( typeof separator === 'string' ) ? separator : '';
// if the collectoin is an array this is easy
@@ -2028,7 +1938,7 @@ module.exports = function( collection, separator ){
}
return result.slice( 0, -separator.length );
};
-},{}],27:[function(_dereq_,module,exports){
+},{}],25:[function(_dereq_,module,exports){
var _isArray = _dereq_('lodash.isarray');
var _reduce = _dereq_('lodash.reduce');
@@ -2052,7 +1962,7 @@ module.exports = function( collection, count, options ){
}, '' );
return result;
};
-},{"lodash.isarray":41,"lodash.reduce":43}],28:[function(_dereq_,module,exports){
+},{"lodash.isarray":39,"lodash.reduce":41}],26:[function(_dereq_,module,exports){
module.exports = function( collection ){
if( collection.length ) return collection.length;
var length = 0;
@@ -2063,7 +1973,7 @@ module.exports = function( collection ){
}
return length;
};
-},{}],29:[function(_dereq_,module,exports){
+},{}],27:[function(_dereq_,module,exports){
module.exports = function( left, right, equal, options ){
options = options || equal;
equal = ( equal === 'equal' ) ? true : false;
@@ -2071,11 +1981,11 @@ module.exports = function( left, right, equal, options ){
if( is_greater ) return options.fn( this );
return options.inverse( this );
};
-},{}],30:[function(_dereq_,module,exports){
+},{}],28:[function(_dereq_,module,exports){
module.exports = function( string ){
return ( string || '' ).toLowerCase();
};
-},{}],31:[function(_dereq_,module,exports){
+},{}],29:[function(_dereq_,module,exports){
module.exports = function(){
var numbers = Array.prototype.slice.call( arguments, 1, -1 );
var result = arguments[0];
@@ -2084,7 +1994,7 @@ module.exports = function(){
}
return result;
};
-},{}],32:[function(_dereq_,module,exports){
+},{}],30:[function(_dereq_,module,exports){
module.exports = function( collection, start, amount, options ){
options = options || amount;
if( typeof start !== 'number' ) return;
@@ -2096,11 +2006,11 @@ module.exports = function( collection, start, amount, options ){
}
return result;
};
-},{}],33:[function(_dereq_,module,exports){
+},{}],31:[function(_dereq_,module,exports){
module.exports = function( string, to_replace, replacement ){
return ( string || '' ).replace( to_replace, replacement );
};
-},{}],34:[function(_dereq_,module,exports){
+},{}],32:[function(_dereq_,module,exports){
module.exports = function( collection, options ){
var result = '';
for( var i = collection.length - 1; i >= 0; i-- ){
@@ -2108,7 +2018,7 @@ module.exports = function( collection, options ){
}
return result;
};
-},{}],35:[function(_dereq_,module,exports){
+},{}],33:[function(_dereq_,module,exports){
// Simple shuffling method based off of http://bost.ocks.org/mike/shuffle/
var shuffle = function( array ){
var i = array.length, j, swap;
@@ -2129,7 +2039,7 @@ module.exports = function( collection, options ){
}
return result;
};
-},{}],36:[function(_dereq_,module,exports){
+},{}],34:[function(_dereq_,module,exports){
module.exports = function(){
var numbers = Array.prototype.slice.call( arguments, 1, -1 );
var result = parseFloat( arguments[0], 10 );
@@ -2138,7 +2048,7 @@ module.exports = function(){
}
return result;
};
-},{}],37:[function(_dereq_,module,exports){
+},{}],35:[function(_dereq_,module,exports){
module.exports = function( number, zero, options ){
options = options || zero;
zero = ( zero === 'zero' ) ? true : false;
@@ -2152,11 +2062,11 @@ module.exports = function( number, zero, options ){
}
return result;
};
-},{}],38:[function(_dereq_,module,exports){
+},{}],36:[function(_dereq_,module,exports){
module.exports = function( string ){
return ( string || '' ).toUpperCase();
};
-},{}],39:[function(_dereq_,module,exports){
+},{}],37:[function(_dereq_,module,exports){
module.exports = function( collection, key, value, limit, options ){
options = options || limit;
if( typeof limit !== 'number' ) limit = Infinity;
@@ -2171,7 +2081,7 @@ module.exports = function( collection, key, value, limit, options ){
}
return result;
};
-},{}],40:[function(_dereq_,module,exports){
+},{}],38:[function(_dereq_,module,exports){
var helpers = {
// string
lowercase: _dereq_('./helpers/lowercase.js'),
@@ -2212,7 +2122,7 @@ module.exports.help = function( Handlebars ){
module.exports.helpers = helpers;
-},{"./helpers/add.js":16,"./helpers/ago.js":17,"./helpers/between.js":18,"./helpers/contains.js":19,"./helpers/divide.js":20,"./helpers/encode.js":21,"./helpers/equal.js":22,"./helpers/first.js":23,"./helpers/formatDate.js":24,"./helpers/greater.js":25,"./helpers/join.js":26,"./helpers/last.js":27,"./helpers/length.js":28,"./helpers/less.js":29,"./helpers/lowercase.js":30,"./helpers/multiply.js":31,"./helpers/range.js":32,"./helpers/replace.js":33,"./helpers/reverse.js":34,"./helpers/shuffle.js":35,"./helpers/subtract.js":36,"./helpers/times.js":37,"./helpers/uppercase.js":38,"./helpers/where.js":39}],41:[function(_dereq_,module,exports){
+},{"./helpers/add.js":14,"./helpers/ago.js":15,"./helpers/between.js":16,"./helpers/contains.js":17,"./helpers/divide.js":18,"./helpers/encode.js":19,"./helpers/equal.js":20,"./helpers/first.js":21,"./helpers/formatDate.js":22,"./helpers/greater.js":23,"./helpers/join.js":24,"./helpers/last.js":25,"./helpers/length.js":26,"./helpers/less.js":27,"./helpers/lowercase.js":28,"./helpers/multiply.js":29,"./helpers/range.js":30,"./helpers/replace.js":31,"./helpers/reverse.js":32,"./helpers/shuffle.js":33,"./helpers/subtract.js":34,"./helpers/times.js":35,"./helpers/uppercase.js":36,"./helpers/where.js":37}],39:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2259,7 +2169,7 @@ var isArray = nativeIsArray || function(value) {
module.exports = isArray;
-},{"lodash._isnative":42}],42:[function(_dereq_,module,exports){
+},{"lodash._isnative":40}],40:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2295,7 +2205,7 @@ function isNative(value) {
module.exports = isNative;
-},{}],43:[function(_dereq_,module,exports){
+},{}],41:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2364,9 +2274,9 @@ function reduce(collection, callback, accumulator, thisArg) {
module.exports = reduce;
-},{"lodash.createcallback":44,"lodash.forown":80}],44:[function(_dereq_,module,exports){
+},{"lodash.createcallback":42,"lodash.forown":78}],42:[function(_dereq_,module,exports){
/**
- * Lo-Dash 2.4.1 (Custom Build)
+ * Lo-Dash 2.4.3 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
* Copyright 2012-2013 The Dojo Foundation
* Based on Underscore.js 1.5.2
@@ -2447,7 +2357,7 @@ function createCallback(func, thisArg, argCount) {
module.exports = createCallback;
-},{"lodash._basecreatecallback":45,"lodash._baseisequal":64,"lodash.isobject":73,"lodash.keys":75,"lodash.property":79}],45:[function(_dereq_,module,exports){
+},{"lodash._basecreatecallback":43,"lodash._baseisequal":62,"lodash.isobject":71,"lodash.keys":73,"lodash.property":77}],43:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2529,7 +2439,7 @@ function baseCreateCallback(func, thisArg, argCount) {
module.exports = baseCreateCallback;
-},{"lodash._setbinddata":46,"lodash.bind":49,"lodash.identity":61,"lodash.support":62}],46:[function(_dereq_,module,exports){
+},{"lodash._setbinddata":44,"lodash.bind":47,"lodash.identity":59,"lodash.support":60}],44:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2574,9 +2484,9 @@ var setBindData = !defineProperty ? noop : function(func, value) {
module.exports = setBindData;
-},{"lodash._isnative":47,"lodash.noop":48}],47:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],48:[function(_dereq_,module,exports){
+},{"lodash._isnative":45,"lodash.noop":46}],45:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],46:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2604,7 +2514,7 @@ function noop() {
module.exports = noop;
-},{}],49:[function(_dereq_,module,exports){
+},{}],47:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2646,7 +2556,7 @@ function bind(func, thisArg) {
module.exports = bind;
-},{"lodash._createwrapper":50,"lodash._slice":60}],50:[function(_dereq_,module,exports){
+},{"lodash._createwrapper":48,"lodash._slice":58}],48:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2754,7 +2664,7 @@ function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, ar
module.exports = createWrapper;
-},{"lodash._basebind":51,"lodash._basecreatewrapper":55,"lodash._slice":60,"lodash.isfunction":59}],51:[function(_dereq_,module,exports){
+},{"lodash._basebind":49,"lodash._basecreatewrapper":53,"lodash._slice":58,"lodash.isfunction":57}],49:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2818,7 +2728,7 @@ function baseBind(bindData) {
module.exports = baseBind;
-},{"lodash._basecreate":52,"lodash._setbinddata":46,"lodash._slice":60,"lodash.isobject":73}],52:[function(_dereq_,module,exports){
+},{"lodash._basecreate":50,"lodash._setbinddata":44,"lodash._slice":58,"lodash.isobject":71}],50:[function(_dereq_,module,exports){
(function (global){
/**
* Lo-Dash 2.4.1 (Custom Build)
@@ -2864,11 +2774,11 @@ if (!nativeCreate) {
module.exports = baseCreate;
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"lodash._isnative":53,"lodash.isobject":73,"lodash.noop":54}],53:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],54:[function(_dereq_,module,exports){
-module.exports=_dereq_(48)
-},{}],55:[function(_dereq_,module,exports){
+},{"lodash._isnative":51,"lodash.isobject":71,"lodash.noop":52}],51:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],52:[function(_dereq_,module,exports){
+module.exports=_dereq_(46)
+},{}],53:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2948,13 +2858,13 @@ function baseCreateWrapper(bindData) {
module.exports = baseCreateWrapper;
-},{"lodash._basecreate":56,"lodash._setbinddata":46,"lodash._slice":60,"lodash.isobject":73}],56:[function(_dereq_,module,exports){
-module.exports=_dereq_(52)
-},{"lodash._isnative":57,"lodash.isobject":73,"lodash.noop":58}],57:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],58:[function(_dereq_,module,exports){
-module.exports=_dereq_(48)
-},{}],59:[function(_dereq_,module,exports){
+},{"lodash._basecreate":54,"lodash._setbinddata":44,"lodash._slice":58,"lodash.isobject":71}],54:[function(_dereq_,module,exports){
+module.exports=_dereq_(50)
+},{"lodash._isnative":55,"lodash.isobject":71,"lodash.noop":56}],55:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],56:[function(_dereq_,module,exports){
+module.exports=_dereq_(46)
+},{}],57:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -2983,7 +2893,7 @@ function isFunction(value) {
module.exports = isFunction;
-},{}],60:[function(_dereq_,module,exports){
+},{}],58:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3023,7 +2933,7 @@ function slice(array, start, end) {
module.exports = slice;
-},{}],61:[function(_dereq_,module,exports){
+},{}],59:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3053,7 +2963,7 @@ function identity(value) {
module.exports = identity;
-},{}],62:[function(_dereq_,module,exports){
+},{}],60:[function(_dereq_,module,exports){
(function (global){
/**
* Lo-Dash 2.4.1 (Custom Build)
@@ -3097,9 +3007,9 @@ support.funcNames = typeof Function.name == 'string';
module.exports = support;
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"lodash._isnative":63}],63:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],64:[function(_dereq_,module,exports){
+},{"lodash._isnative":61}],61:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],62:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3310,7 +3220,7 @@ function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {
module.exports = baseIsEqual;
-},{"lodash._getarray":65,"lodash._objecttypes":67,"lodash._releasearray":68,"lodash.forin":71,"lodash.isfunction":72}],65:[function(_dereq_,module,exports){
+},{"lodash._getarray":63,"lodash._objecttypes":65,"lodash._releasearray":66,"lodash.forin":69,"lodash.isfunction":70}],63:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3333,7 +3243,7 @@ function getArray() {
module.exports = getArray;
-},{"lodash._arraypool":66}],66:[function(_dereq_,module,exports){
+},{"lodash._arraypool":64}],64:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3348,7 +3258,7 @@ var arrayPool = [];
module.exports = arrayPool;
-},{}],67:[function(_dereq_,module,exports){
+},{}],65:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3370,7 +3280,7 @@ var objectTypes = {
module.exports = objectTypes;
-},{}],68:[function(_dereq_,module,exports){
+},{}],66:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3397,9 +3307,9 @@ function releaseArray(array) {
module.exports = releaseArray;
-},{"lodash._arraypool":69,"lodash._maxpoolsize":70}],69:[function(_dereq_,module,exports){
-module.exports=_dereq_(66)
-},{}],70:[function(_dereq_,module,exports){
+},{"lodash._arraypool":67,"lodash._maxpoolsize":68}],67:[function(_dereq_,module,exports){
+module.exports=_dereq_(64)
+},{}],68:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3414,7 +3324,7 @@ var maxPoolSize = 40;
module.exports = maxPoolSize;
-},{}],71:[function(_dereq_,module,exports){
+},{}],69:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3470,9 +3380,9 @@ var forIn = function(collection, callback, thisArg) {
module.exports = forIn;
-},{"lodash._basecreatecallback":45,"lodash._objecttypes":67}],72:[function(_dereq_,module,exports){
-module.exports=_dereq_(59)
-},{}],73:[function(_dereq_,module,exports){
+},{"lodash._basecreatecallback":43,"lodash._objecttypes":65}],70:[function(_dereq_,module,exports){
+module.exports=_dereq_(57)
+},{}],71:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3513,9 +3423,9 @@ function isObject(value) {
module.exports = isObject;
-},{"lodash._objecttypes":74}],74:[function(_dereq_,module,exports){
-module.exports=_dereq_(67)
-},{}],75:[function(_dereq_,module,exports){
+},{"lodash._objecttypes":72}],72:[function(_dereq_,module,exports){
+module.exports=_dereq_(65)
+},{}],73:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3553,9 +3463,9 @@ var keys = !nativeKeys ? shimKeys : function(object) {
module.exports = keys;
-},{"lodash._isnative":76,"lodash._shimkeys":77,"lodash.isobject":73}],76:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],77:[function(_dereq_,module,exports){
+},{"lodash._isnative":74,"lodash._shimkeys":75,"lodash.isobject":71}],74:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],75:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3595,9 +3505,9 @@ var shimKeys = function(object) {
module.exports = shimKeys;
-},{"lodash._objecttypes":78}],78:[function(_dereq_,module,exports){
-module.exports=_dereq_(67)
-},{}],79:[function(_dereq_,module,exports){
+},{"lodash._objecttypes":76}],76:[function(_dereq_,module,exports){
+module.exports=_dereq_(65)
+},{}],77:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3639,7 +3549,7 @@ function property(key) {
module.exports = property;
-},{}],80:[function(_dereq_,module,exports){
+},{}],78:[function(_dereq_,module,exports){
/**
* Lo-Dash 2.4.1 (Custom Build)
* Build: `lodash modularize modern exports="npm" -o ./npm/`
@@ -3691,59 +3601,59 @@ var forOwn = function(collection, callback, thisArg) {
module.exports = forOwn;
-},{"lodash._basecreatecallback":81,"lodash._objecttypes":102,"lodash.keys":103}],81:[function(_dereq_,module,exports){
-module.exports=_dereq_(45)
-},{"lodash._setbinddata":82,"lodash.bind":85,"lodash.identity":99,"lodash.support":100}],82:[function(_dereq_,module,exports){
+},{"lodash._basecreatecallback":79,"lodash._objecttypes":100,"lodash.keys":101}],79:[function(_dereq_,module,exports){
+module.exports=_dereq_(43)
+},{"lodash._setbinddata":80,"lodash.bind":83,"lodash.identity":97,"lodash.support":98}],80:[function(_dereq_,module,exports){
+module.exports=_dereq_(44)
+},{"lodash._isnative":81,"lodash.noop":82}],81:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],82:[function(_dereq_,module,exports){
module.exports=_dereq_(46)
-},{"lodash._isnative":83,"lodash.noop":84}],83:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],84:[function(_dereq_,module,exports){
+},{}],83:[function(_dereq_,module,exports){
+module.exports=_dereq_(47)
+},{"lodash._createwrapper":84,"lodash._slice":96}],84:[function(_dereq_,module,exports){
module.exports=_dereq_(48)
-},{}],85:[function(_dereq_,module,exports){
+},{"lodash._basebind":85,"lodash._basecreatewrapper":90,"lodash._slice":96,"lodash.isfunction":95}],85:[function(_dereq_,module,exports){
module.exports=_dereq_(49)
-},{"lodash._createwrapper":86,"lodash._slice":98}],86:[function(_dereq_,module,exports){
+},{"lodash._basecreate":86,"lodash._setbinddata":80,"lodash._slice":96,"lodash.isobject":89}],86:[function(_dereq_,module,exports){
module.exports=_dereq_(50)
-},{"lodash._basebind":87,"lodash._basecreatewrapper":92,"lodash._slice":98,"lodash.isfunction":97}],87:[function(_dereq_,module,exports){
-module.exports=_dereq_(51)
-},{"lodash._basecreate":88,"lodash._setbinddata":82,"lodash._slice":98,"lodash.isobject":91}],88:[function(_dereq_,module,exports){
-module.exports=_dereq_(52)
-},{"lodash._isnative":89,"lodash.isobject":91,"lodash.noop":90}],89:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],90:[function(_dereq_,module,exports){
-module.exports=_dereq_(48)
-},{}],91:[function(_dereq_,module,exports){
-module.exports=_dereq_(73)
-},{"lodash._objecttypes":102}],92:[function(_dereq_,module,exports){
-module.exports=_dereq_(55)
-},{"lodash._basecreate":93,"lodash._setbinddata":82,"lodash._slice":98,"lodash.isobject":96}],93:[function(_dereq_,module,exports){
-module.exports=_dereq_(52)
-},{"lodash._isnative":94,"lodash.isobject":96,"lodash.noop":95}],94:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],95:[function(_dereq_,module,exports){
-module.exports=_dereq_(48)
+},{"lodash._isnative":87,"lodash.isobject":89,"lodash.noop":88}],87:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],88:[function(_dereq_,module,exports){
+module.exports=_dereq_(46)
+},{}],89:[function(_dereq_,module,exports){
+module.exports=_dereq_(71)
+},{"lodash._objecttypes":100}],90:[function(_dereq_,module,exports){
+module.exports=_dereq_(53)
+},{"lodash._basecreate":91,"lodash._setbinddata":80,"lodash._slice":96,"lodash.isobject":94}],91:[function(_dereq_,module,exports){
+module.exports=_dereq_(50)
+},{"lodash._isnative":92,"lodash.isobject":94,"lodash.noop":93}],92:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
+},{}],93:[function(_dereq_,module,exports){
+module.exports=_dereq_(46)
+},{}],94:[function(_dereq_,module,exports){
+module.exports=_dereq_(71)
+},{"lodash._objecttypes":100}],95:[function(_dereq_,module,exports){
+module.exports=_dereq_(57)
},{}],96:[function(_dereq_,module,exports){
-module.exports=_dereq_(73)
-},{"lodash._objecttypes":102}],97:[function(_dereq_,module,exports){
+module.exports=_dereq_(58)
+},{}],97:[function(_dereq_,module,exports){
module.exports=_dereq_(59)
},{}],98:[function(_dereq_,module,exports){
module.exports=_dereq_(60)
-},{}],99:[function(_dereq_,module,exports){
-module.exports=_dereq_(61)
+},{"lodash._isnative":99}],99:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
},{}],100:[function(_dereq_,module,exports){
-module.exports=_dereq_(62)
-},{"lodash._isnative":101}],101:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],102:[function(_dereq_,module,exports){
-module.exports=_dereq_(67)
+module.exports=_dereq_(65)
+},{}],101:[function(_dereq_,module,exports){
+module.exports=_dereq_(73)
+},{"lodash._isnative":102,"lodash._shimkeys":103,"lodash.isobject":104}],102:[function(_dereq_,module,exports){
+module.exports=_dereq_(40)
},{}],103:[function(_dereq_,module,exports){
module.exports=_dereq_(75)
-},{"lodash._isnative":104,"lodash._shimkeys":105,"lodash.isobject":106}],104:[function(_dereq_,module,exports){
-module.exports=_dereq_(42)
-},{}],105:[function(_dereq_,module,exports){
-module.exports=_dereq_(77)
-},{"lodash._objecttypes":102}],106:[function(_dereq_,module,exports){
-module.exports=_dereq_(73)
-},{"lodash._objecttypes":102}],107:[function(_dereq_,module,exports){
+},{"lodash._objecttypes":100}],104:[function(_dereq_,module,exports){
+module.exports=_dereq_(71)
+},{"lodash._objecttypes":100}],105:[function(_dereq_,module,exports){
var is = _dereq_('is')
, isodate = _dereq_('isodate')
@@ -3783,7 +3693,7 @@ function toMs (num) {
if (num < 31557600000) return num * 1000;
return num;
}
-},{"./milliseconds":108,"./seconds":109,"is":110,"isodate":111}],108:[function(_dereq_,module,exports){
+},{"./milliseconds":106,"./seconds":107,"is":108,"isodate":109}],106:[function(_dereq_,module,exports){
/**
* Matcher.
@@ -3815,7 +3725,7 @@ exports.parse = function (millis) {
millis = parseInt(millis, 10);
return new Date(millis);
};
-},{}],109:[function(_dereq_,module,exports){
+},{}],107:[function(_dereq_,module,exports){
/**
* Matcher.
@@ -3847,7 +3757,7 @@ exports.parse = function (seconds) {
var millis = parseInt(seconds, 10) * 1000;
return new Date(millis);
};
-},{}],110:[function(_dereq_,module,exports){
+},{}],108:[function(_dereq_,module,exports){
/**!
* is
@@ -4551,7 +4461,7 @@ is.string = function (value) {
};
-},{}],111:[function(_dereq_,module,exports){
+},{}],109:[function(_dereq_,module,exports){
/**
* Matcher, slightly modified from:
@@ -4620,7 +4530,7 @@ exports.is = function (string, strict) {
if (strict && false === /^\d{4}-\d{2}-\d{2}/.test(string)) return false;
return matcher.test(string);
};
-},{}],112:[function(_dereq_,module,exports){
+},{}],110:[function(_dereq_,module,exports){
//
// strftime
// github.com/samsonjs/strftime
@@ -4894,7 +4804,423 @@ exports.is = function (string, strict) {
}());
-},{}],113:[function(_dereq_,module,exports){
+},{}],111:[function(_dereq_,module,exports){
+module.exports = _dereq_('./lib/');
+
+},{"./lib/":112}],112:[function(_dereq_,module,exports){
+// Load modules
+
+var Stringify = _dereq_('./stringify');
+var Parse = _dereq_('./parse');
+
+
+// Declare internals
+
+var internals = {};
+
+
+module.exports = {
+ stringify: Stringify,
+ parse: Parse
+};
+
+},{"./parse":113,"./stringify":114}],113:[function(_dereq_,module,exports){
+// Load modules
+
+var Utils = _dereq_('./utils');
+
+
+// Declare internals
+
+var internals = {
+ delimiter: '&',
+ depth: 5,
+ arrayLimit: 20,
+ parameterLimit: 1000
+};
+
+
+internals.parseValues = function (str, options) {
+
+ var obj = {};
+ var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);
+
+ for (var i = 0, il = parts.length; i < il; ++i) {
+ var part = parts[i];
+ var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1;
+
+ if (pos === -1) {
+ obj[Utils.decode(part)] = '';
+ }
+ else {
+ var key = Utils.decode(part.slice(0, pos));
+ var val = Utils.decode(part.slice(pos + 1));
+
+ if (Object.prototype.hasOwnProperty(key)) {
+ continue;
+ }
+
+ if (!obj.hasOwnProperty(key)) {
+ obj[key] = val;
+ }
+ else {
+ obj[key] = [].concat(obj[key]).concat(val);
+ }
+ }
+ }
+
+ return obj;
+};
+
+
+internals.parseObject = function (chain, val, options) {
+
+ if (!chain.length) {
+ return val;
+ }
+
+ var root = chain.shift();
+
+ var obj = {};
+ if (root === '[]') {
+ obj = [];
+ obj = obj.concat(internals.parseObject(chain, val, options));
+ }
+ else {
+ var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;
+ var index = parseInt(cleanRoot, 10);
+ var indexString = '' + index;
+ if (!isNaN(index) &&
+ root !== cleanRoot &&
+ indexString === cleanRoot &&
+ index >= 0 &&
+ index <= options.arrayLimit) {
+
+ obj = [];
+ obj[index] = internals.parseObject(chain, val, options);
+ }
+ else {
+ obj[cleanRoot] = internals.parseObject(chain, val, options);
+ }
+ }
+
+ return obj;
+};
+
+
+internals.parseKeys = function (key, val, options) {
+
+ if (!key) {
+ return;
+ }
+
+ // The regex chunks
+
+ var parent = /^([^\[\]]*)/;
+ var child = /(\[[^\[\]]*\])/g;
+
+ // Get the parent
+
+ var segment = parent.exec(key);
+
+ // Don't allow them to overwrite object prototype properties
+
+ if (Object.prototype.hasOwnProperty(segment[1])) {
+ return;
+ }
+
+ // Stash the parent if it exists
+
+ var keys = [];
+ if (segment[1]) {
+ keys.push(segment[1]);
+ }
+
+ // Loop through children appending to the array until we hit depth
+
+ var i = 0;
+ while ((segment = child.exec(key)) !== null && i < options.depth) {
+
+ ++i;
+ if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) {
+ keys.push(segment[1]);
+ }
+ }
+
+ // If there's a remainder, just add whatever is left
+
+ if (segment) {
+ keys.push('[' + key.slice(segment.index) + ']');
+ }
+
+ return internals.parseObject(keys, val, options);
+};
+
+
+module.exports = function (str, options) {
+
+ if (str === '' ||
+ str === null ||
+ typeof str === 'undefined') {
+
+ return {};
+ }
+
+ options = options || {};
+ options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter;
+ options.depth = typeof options.depth === 'number' ? options.depth : internals.depth;
+ options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;
+ options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;
+
+ var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str;
+ var obj = {};
+
+ // Iterate over the keys and setup the new object
+
+ var keys = Object.keys(tempObj);
+ for (var i = 0, il = keys.length; i < il; ++i) {
+ var key = keys[i];
+ var newObj = internals.parseKeys(key, tempObj[key], options);
+ obj = Utils.merge(obj, newObj);
+ }
+
+ return Utils.compact(obj);
+};
+
+},{"./utils":115}],114:[function(_dereq_,module,exports){
+// Load modules
+
+var Utils = _dereq_('./utils');
+
+
+// Declare internals
+
+var internals = {
+ delimiter: '&',
+ arrayPrefixGenerators: {
+ brackets: function (prefix, key) {
+ return prefix + '[]';
+ },
+ indices: function (prefix, key) {
+ return prefix + '[' + key + ']';
+ },
+ repeat: function (prefix, key) {
+ return prefix;
+ }
+ }
+};
+
+
+internals.stringify = function (obj, prefix, generateArrayPrefix) {
+
+ if (Utils.isBuffer(obj)) {
+ obj = obj.toString();
+ }
+ else if (obj instanceof Date) {
+ obj = obj.toISOString();
+ }
+ else if (obj === null) {
+ obj = '';
+ }
+
+ if (typeof obj === 'string' ||
+ typeof obj === 'number' ||
+ typeof obj === 'boolean') {
+
+ return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)];
+ }
+
+ var values = [];
+
+ if (typeof obj === 'undefined') {
+ return values;
+ }
+
+ var objKeys = Object.keys(obj);
+ for (var i = 0, il = objKeys.length; i < il; ++i) {
+ var key = objKeys[i];
+ if (Array.isArray(obj)) {
+ values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix));
+ }
+ else {
+ values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix));
+ }
+ }
+
+ return values;
+};
+
+
+module.exports = function (obj, options) {
+
+ options = options || {};
+ var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
+
+ var keys = [];
+
+ if (typeof obj !== 'object' ||
+ obj === null) {
+
+ return '';
+ }
+
+ var arrayFormat;
+ if (options.arrayFormat in internals.arrayPrefixGenerators) {
+ arrayFormat = options.arrayFormat;
+ }
+ else if ('indices' in options) {
+ arrayFormat = options.indices ? 'indices' : 'repeat';
+ }
+ else {
+ arrayFormat = 'indices';
+ }
+
+ var generateArrayPrefix = internals.arrayPrefixGenerators[arrayFormat];
+
+ var objKeys = Object.keys(obj);
+ for (var i = 0, il = objKeys.length; i < il; ++i) {
+ var key = objKeys[i];
+ keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix));
+ }
+
+ return keys.join(delimiter);
+};
+
+},{"./utils":115}],115:[function(_dereq_,module,exports){
+// Load modules
+
+
+// Declare internals
+
+var internals = {};
+
+
+exports.arrayToObject = function (source) {
+
+ var obj = {};
+ for (var i = 0, il = source.length; i < il; ++i) {
+ if (typeof source[i] !== 'undefined') {
+
+ obj[i] = source[i];
+ }
+ }
+
+ return obj;
+};
+
+
+exports.merge = function (target, source) {
+
+ if (!source) {
+ return target;
+ }
+
+ if (typeof source !== 'object') {
+ if (Array.isArray(target)) {
+ target.push(source);
+ }
+ else {
+ target[source] = true;
+ }
+
+ return target;
+ }
+
+ if (typeof target !== 'object') {
+ target = [target].concat(source);
+ return target;
+ }
+
+ if (Array.isArray(target) &&
+ !Array.isArray(source)) {
+
+ target = exports.arrayToObject(target);
+ }
+
+ var keys = Object.keys(source);
+ for (var k = 0, kl = keys.length; k < kl; ++k) {
+ var key = keys[k];
+ var value = source[key];
+
+ if (!target[key]) {
+ target[key] = value;
+ }
+ else {
+ target[key] = exports.merge(target[key], value);
+ }
+ }
+
+ return target;
+};
+
+
+exports.decode = function (str) {
+
+ try {
+ return decodeURIComponent(str.replace(/\+/g, ' '));
+ } catch (e) {
+ return str;
+ }
+};
+
+
+exports.compact = function (obj, refs) {
+
+ if (typeof obj !== 'object' ||
+ obj === null) {
+
+ return obj;
+ }
+
+ refs = refs || [];
+ var lookup = refs.indexOf(obj);
+ if (lookup !== -1) {
+ return refs[lookup];
+ }
+
+ refs.push(obj);
+
+ if (Array.isArray(obj)) {
+ var compacted = [];
+
+ for (var i = 0, il = obj.length; i < il; ++i) {
+ if (typeof obj[i] !== 'undefined') {
+ compacted.push(obj[i]);
+ }
+ }
+
+ return compacted;
+ }
+
+ var keys = Object.keys(obj);
+ for (i = 0, il = keys.length; i < il; ++i) {
+ var key = keys[i];
+ obj[key] = exports.compact(obj[key], refs);
+ }
+
+ return obj;
+};
+
+
+exports.isRegExp = function (obj) {
+ return Object.prototype.toString.call(obj) === '[object RegExp]';
+};
+
+
+exports.isBuffer = function (obj) {
+
+ if (obj === null ||
+ typeof obj === 'undefined') {
+
+ return false;
+ }
+
+ return !!(obj.constructor &&
+ obj.constructor.isBuffer &&
+ obj.constructor.isBuffer(obj));
+};
+
+},{}],116:[function(_dereq_,module,exports){
/**
* Module dependencies.
*/
@@ -6007,7 +6333,7 @@ request.put = function(url, data, fn){
module.exports = request;
-},{"emitter":114,"reduce":115}],114:[function(_dereq_,module,exports){
+},{"emitter":117,"reduce":118}],117:[function(_dereq_,module,exports){
/**
* Expose `Emitter`.
@@ -6173,7 +6499,7 @@ Emitter.prototype.hasListeners = function(event){
return !! this.listeners(event).length;
};
-},{}],115:[function(_dereq_,module,exports){
+},{}],118:[function(_dereq_,module,exports){
/**
* Reduce `arr` with `fn`.
@@ -6198,7 +6524,7 @@ module.exports = function(arr, fn, initial){
return curr;
};
-},{}],116:[function(_dereq_,module,exports){
+},{}],119:[function(_dereq_,module,exports){
// Underscore.js 1.6.0
// http://underscorejs.org
// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
diff --git a/package.json b/package.json
index dffc5bd..7e0d0a1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "universe-js",
- "version": "1.1.0",
+ "version": "1.1.1",
"main": "index.js",
"author": {
"name": "Joannic Laborde",