aboutsummaryrefslogtreecommitdiff
path: root/node_modules/es5-ext/object
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/es5-ext/object')
-rw-r--r--node_modules/es5-ext/object/_iterate.js30
-rw-r--r--node_modules/es5-ext/object/assign-deep.js34
-rw-r--r--node_modules/es5-ext/object/assign/implement.js8
-rw-r--r--node_modules/es5-ext/object/assign/index.js5
-rw-r--r--node_modules/es5-ext/object/assign/is-implemented.js9
-rw-r--r--node_modules/es5-ext/object/assign/shim.js23
-rw-r--r--node_modules/es5-ext/object/clear.js16
-rw-r--r--node_modules/es5-ext/object/compact.js10
-rw-r--r--node_modules/es5-ext/object/compare.js45
-rw-r--r--node_modules/es5-ext/object/copy-deep.js37
-rw-r--r--node_modules/es5-ext/object/copy.js19
-rw-r--r--node_modules/es5-ext/object/count.js7
-rw-r--r--node_modules/es5-ext/object/create.js48
-rw-r--r--node_modules/es5-ext/object/ensure-array.js9
-rw-r--r--node_modules/es5-ext/object/ensure-finite-number.js9
-rw-r--r--node_modules/es5-ext/object/ensure-integer.js9
-rw-r--r--node_modules/es5-ext/object/ensure-natural-number-value.js10
-rw-r--r--node_modules/es5-ext/object/ensure-natural-number.js10
-rw-r--r--node_modules/es5-ext/object/ensure-plain-function.js11
-rw-r--r--node_modules/es5-ext/object/ensure-promise.js9
-rw-r--r--node_modules/es5-ext/object/ensure-thenable.js9
-rw-r--r--node_modules/es5-ext/object/entries/implement.js10
-rw-r--r--node_modules/es5-ext/object/entries/index.js3
-rw-r--r--node_modules/es5-ext/object/entries/is-implemented.js9
-rw-r--r--node_modules/es5-ext/object/entries/shim.js14
-rw-r--r--node_modules/es5-ext/object/eq.js7
-rw-r--r--node_modules/es5-ext/object/every.js3
-rw-r--r--node_modules/es5-ext/object/filter.js14
-rw-r--r--node_modules/es5-ext/object/find-key.js3
-rw-r--r--node_modules/es5-ext/object/find.js10
-rw-r--r--node_modules/es5-ext/object/first-key.js13
-rw-r--r--node_modules/es5-ext/object/flatten.js17
-rw-r--r--node_modules/es5-ext/object/for-each.js3
-rw-r--r--node_modules/es5-ext/object/get-property-names.js17
-rw-r--r--node_modules/es5-ext/object/index.js69
-rw-r--r--node_modules/es5-ext/object/is-array-like.js17
-rw-r--r--node_modules/es5-ext/object/is-callable.js7
-rw-r--r--node_modules/es5-ext/object/is-copy-deep.js59
-rw-r--r--node_modules/es5-ext/object/is-copy.js23
-rw-r--r--node_modules/es5-ext/object/is-empty.js14
-rw-r--r--node_modules/es5-ext/object/is-finite-number.js7
-rw-r--r--node_modules/es5-ext/object/is-integer.js10
-rw-r--r--node_modules/es5-ext/object/is-natural-number-value.js9
-rw-r--r--node_modules/es5-ext/object/is-natural-number.js7
-rw-r--r--node_modules/es5-ext/object/is-number-value.js12
-rw-r--r--node_modules/es5-ext/object/is-object.js9
-rw-r--r--node_modules/es5-ext/object/is-plain-function.js11
-rw-r--r--node_modules/es5-ext/object/is-plain-object.js20
-rw-r--r--node_modules/es5-ext/object/is-promise.js4
-rw-r--r--node_modules/es5-ext/object/is-thenable.js8
-rw-r--r--node_modules/es5-ext/object/is-value.js7
-rw-r--r--node_modules/es5-ext/object/is.js10
-rw-r--r--node_modules/es5-ext/object/key-of.js17
-rw-r--r--node_modules/es5-ext/object/keys/implement.js10
-rw-r--r--node_modules/es5-ext/object/keys/index.js3
-rw-r--r--node_modules/es5-ext/object/keys/is-implemented.js10
-rw-r--r--node_modules/es5-ext/object/keys/shim.js7
-rw-r--r--node_modules/es5-ext/object/map-keys.js18
-rw-r--r--node_modules/es5-ext/object/map.js14
-rw-r--r--node_modules/es5-ext/object/mixin-prototypes.js37
-rw-r--r--node_modules/es5-ext/object/mixin.js31
-rw-r--r--node_modules/es5-ext/object/normalize-options.js20
-rw-r--r--node_modules/es5-ext/object/primitive-set.js12
-rw-r--r--node_modules/es5-ext/object/safe-traverse.js16
-rw-r--r--node_modules/es5-ext/object/serialize.js41
-rw-r--r--node_modules/es5-ext/object/set-prototype-of/implement.js8
-rw-r--r--node_modules/es5-ext/object/set-prototype-of/index.js5
-rw-r--r--node_modules/es5-ext/object/set-prototype-of/is-implemented.js9
-rw-r--r--node_modules/es5-ext/object/set-prototype-of/shim.js86
-rw-r--r--node_modules/es5-ext/object/some.js3
-rw-r--r--node_modules/es5-ext/object/to-array.js24
-rw-r--r--node_modules/es5-ext/object/unserialize.js8
-rw-r--r--node_modules/es5-ext/object/valid-callable.js6
-rw-r--r--node_modules/es5-ext/object/valid-object.js8
-rw-r--r--node_modules/es5-ext/object/valid-value.js8
-rw-r--r--node_modules/es5-ext/object/validate-array-like-object.js9
-rw-r--r--node_modules/es5-ext/object/validate-array-like.js8
-rw-r--r--node_modules/es5-ext/object/validate-stringifiable-value.js8
-rw-r--r--node_modules/es5-ext/object/validate-stringifiable.js12
79 files changed, 1231 insertions, 0 deletions
diff --git a/node_modules/es5-ext/object/_iterate.js b/node_modules/es5-ext/object/_iterate.js
new file mode 100644
index 00000000..1f0c85fd
--- /dev/null
+++ b/node_modules/es5-ext/object/_iterate.js
@@ -0,0 +1,30 @@
+// Internal method, used by iteration functions.
+// Calls a function for each key-value pair found in object
+// Optionally takes compareFn to iterate object in specific order
+
+"use strict";
+
+var callable = require("./valid-callable")
+ , value = require("./valid-value")
+ , bind = Function.prototype.bind
+ , call = Function.prototype.call
+ , keys = Object.keys
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (method, defVal) {
+ return function (obj, cb /*, thisArg, compareFn*/) {
+ var list, thisArg = arguments[2], compareFn = arguments[3];
+ obj = Object(value(obj));
+ callable(cb);
+
+ list = keys(obj);
+ if (compareFn) {
+ list.sort(typeof compareFn === "function" ? bind.call(compareFn, obj) : undefined);
+ }
+ if (typeof method !== "function") method = list[method];
+ return call.call(method, list, function (key, index) {
+ if (!objPropertyIsEnumerable.call(obj, key)) return defVal;
+ return call.call(cb, thisArg, obj[key], key, obj, index);
+ });
+ };
+};
diff --git a/node_modules/es5-ext/object/assign-deep.js b/node_modules/es5-ext/object/assign-deep.js
new file mode 100644
index 00000000..4a8597a4
--- /dev/null
+++ b/node_modules/es5-ext/object/assign-deep.js
@@ -0,0 +1,34 @@
+"use strict";
+
+var includes = require("../array/#/contains")
+ , uniq = require("../array/#/uniq")
+ , copyDeep = require("./copy-deep")
+ , objForEach = require("./for-each")
+ , isPlainObject = require("./is-plain-object")
+ , ensureValue = require("./valid-value");
+
+var isArray = Array.isArray, slice = Array.prototype.slice;
+
+var deepAssign = function (target, source) {
+ if (target === source) return target;
+ if (isPlainObject(target) && isPlainObject(source)) {
+ objForEach(source, function (value, key) { target[key] = deepAssign(target[key], value); });
+ return target;
+ }
+ if (isArray(target) && isArray(source)) {
+ source.forEach(function (item) {
+ if (includes.call(target, item)) return;
+ if (isArray(item) || isPlainObject(item)) item = copyDeep(item);
+ target.push(item);
+ });
+ return target;
+ }
+ if (isPlainObject(source) || isArray(source)) return copyDeep(source);
+ return source;
+};
+
+module.exports = function (target/*, ...objects*/) {
+ return uniq
+ .call([ensureValue(target)].concat(slice.call(arguments, 1).map(ensureValue)))
+ .reduce(deepAssign);
+};
diff --git a/node_modules/es5-ext/object/assign/implement.js b/node_modules/es5-ext/object/assign/implement.js
new file mode 100644
index 00000000..de3c92f1
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/implement.js
@@ -0,0 +1,8 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Object, "assign", { value: require("./shim"),
+ configurable: true,
+enumerable: false,
+writable: true });
+}
diff --git a/node_modules/es5-ext/object/assign/index.js b/node_modules/es5-ext/object/assign/index.js
new file mode 100644
index 00000000..1dd31e64
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/index.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = require("./is-implemented")()
+ ? Object.assign
+ : require("./shim");
diff --git a/node_modules/es5-ext/object/assign/is-implemented.js b/node_modules/es5-ext/object/assign/is-implemented.js
new file mode 100644
index 00000000..6b90ea96
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = function () {
+ var assign = Object.assign, obj;
+ if (typeof assign !== "function") return false;
+ obj = { foo: "raz" };
+ assign(obj, { bar: "dwa" }, { trzy: "trzy" });
+ return (obj.foo + obj.bar + obj.trzy) === "razdwatrzy";
+};
diff --git a/node_modules/es5-ext/object/assign/shim.js b/node_modules/es5-ext/object/assign/shim.js
new file mode 100644
index 00000000..afa58f2f
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/shim.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var keys = require("../keys")
+ , value = require("../valid-value")
+ , max = Math.max;
+
+module.exports = function (dest, src /*, …srcn*/) {
+ var error, i, length = max(arguments.length, 2), assign;
+ dest = Object(value(dest));
+ assign = function (key) {
+ try {
+ dest[key] = src[key];
+ } catch (e) {
+ if (!error) error = e;
+ }
+ };
+ for (i = 1; i < length; ++i) {
+ src = arguments[i];
+ keys(src).forEach(assign);
+ }
+ if (error !== undefined) throw error;
+ return dest;
+};
diff --git a/node_modules/es5-ext/object/clear.js b/node_modules/es5-ext/object/clear.js
new file mode 100644
index 00000000..268cc5b5
--- /dev/null
+++ b/node_modules/es5-ext/object/clear.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var keys = require("./keys");
+
+module.exports = function (obj) {
+ var error;
+ keys(obj).forEach(function (key) {
+ try {
+ delete this[key];
+ } catch (e) {
+ if (!error) error = e;
+ }
+ }, obj);
+ if (error !== undefined) throw error;
+ return obj;
+};
diff --git a/node_modules/es5-ext/object/compact.js b/node_modules/es5-ext/object/compact.js
new file mode 100644
index 00000000..9943aedc
--- /dev/null
+++ b/node_modules/es5-ext/object/compact.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var filter = require("./filter")
+ , isValue = require("./is-value");
+
+module.exports = function (obj) {
+ return filter(obj, function (val) {
+ return isValue(val);
+ });
+};
diff --git a/node_modules/es5-ext/object/compare.js b/node_modules/es5-ext/object/compare.js
new file mode 100644
index 00000000..8d078589
--- /dev/null
+++ b/node_modules/es5-ext/object/compare.js
@@ -0,0 +1,45 @@
+"use strict";
+
+var strCompare = require("../string/#/case-insensitive-compare")
+ , isObject = require("./is-object")
+ , isValue = require("./is-value")
+ , numIsNaN = require("../number/is-nan")
+ , resolve
+ , typeMap;
+
+typeMap = {
+ undefined: 0,
+ object: 1,
+ boolean: 2,
+ string: 3,
+ number: 4
+};
+
+resolve = function (a) {
+ if (isObject(a)) {
+ if (typeof a.valueOf !== "function") return NaN;
+ a = a.valueOf();
+ if (isObject(a)) {
+ if (typeof a.toString !== "function") return NaN;
+ a = a.toString();
+ if (typeof a !== "string") return NaN;
+ }
+ }
+ return a;
+};
+
+module.exports = function (val1, val2) {
+ if (val1 === val2) return 0; // Same
+
+ val1 = resolve(val1);
+ val2 = resolve(val2);
+ // eslint-disable-next-line eqeqeq
+ if (val1 == val2) return typeMap[typeof val1] - typeMap[typeof val2];
+ if (!isValue(val1)) return -1;
+ if (!isValue(val2)) return 1;
+ if (typeof val1 === "string" || typeof val2 === "string") {
+ return strCompare.call(val1, val2);
+ }
+ if (numIsNaN(val1) && numIsNaN(val2)) return 0; // Jslint: ignore
+ return Number(val1) - Number(val2);
+};
diff --git a/node_modules/es5-ext/object/copy-deep.js b/node_modules/es5-ext/object/copy-deep.js
new file mode 100644
index 00000000..39f9a1d6
--- /dev/null
+++ b/node_modules/es5-ext/object/copy-deep.js
@@ -0,0 +1,37 @@
+"use strict";
+
+var forEach = require("./for-each")
+ , isPlainObject = require("./is-plain-object")
+ , ensureValue = require("./valid-value")
+ , isArray = Array.isArray;
+
+var copyValue = function (value, ancestors, ancestorsCopy) {
+ var mode;
+ if (isPlainObject(value)) mode = "object";
+ else if (isArray(value)) mode = "array";
+ if (!mode) return value;
+
+ var copy = ancestorsCopy[ancestors.indexOf(value)];
+ if (copy) return copy;
+ copy = mode === "object" ? {} : [];
+
+ ancestors.push(value);
+ ancestorsCopy.push(copy);
+ if (mode === "object") {
+ forEach(value, function (item, key) {
+ copy[key] = copyValue(item, ancestors, ancestorsCopy);
+ });
+ } else {
+ value.forEach(function (item, index) {
+ copy[index] = copyValue(item, ancestors, ancestorsCopy);
+ });
+ }
+ ancestors.pop();
+ ancestorsCopy.pop();
+
+ return copy;
+};
+
+module.exports = function (source) {
+ return copyValue(ensureValue(source), [], []);
+};
diff --git a/node_modules/es5-ext/object/copy.js b/node_modules/es5-ext/object/copy.js
new file mode 100644
index 00000000..5368e428
--- /dev/null
+++ b/node_modules/es5-ext/object/copy.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var aFrom = require("../array/from")
+ , assign = require("./assign")
+ , value = require("./valid-value");
+
+module.exports = function (obj/*, propertyNames, options*/) {
+ var copy = Object(value(obj)), propertyNames = arguments[1], options = Object(arguments[2]);
+ if (copy !== obj && !propertyNames) return copy;
+ var result = {};
+ if (propertyNames) {
+ aFrom(propertyNames, function (propertyName) {
+ if (options.ensure || propertyName in obj) result[propertyName] = obj[propertyName];
+ });
+ } else {
+ assign(result, obj);
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/object/count.js b/node_modules/es5-ext/object/count.js
new file mode 100644
index 00000000..8a2a71ef
--- /dev/null
+++ b/node_modules/es5-ext/object/count.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var keys = require("./keys");
+
+module.exports = function (obj) {
+ return keys(obj).length;
+};
diff --git a/node_modules/es5-ext/object/create.js b/node_modules/es5-ext/object/create.js
new file mode 100644
index 00000000..9e3e6e8d
--- /dev/null
+++ b/node_modules/es5-ext/object/create.js
@@ -0,0 +1,48 @@
+// Workaround for http://code.google.com/p/v8/issues/detail?id=2804
+
+"use strict";
+
+var create = Object.create, shim;
+
+if (!require("./set-prototype-of/is-implemented")()) {
+ shim = require("./set-prototype-of/shim");
+}
+
+module.exports = (function () {
+ var nullObject, polyProps, desc;
+ if (!shim) return create;
+ if (shim.level !== 1) return create;
+
+ nullObject = {};
+ polyProps = {};
+ desc = {
+ configurable: false,
+ enumerable: false,
+ writable: true,
+ value: undefined
+ };
+ Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
+ if (name === "__proto__") {
+ polyProps[name] = {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: undefined
+ };
+ return;
+ }
+ polyProps[name] = desc;
+ });
+ Object.defineProperties(nullObject, polyProps);
+
+ Object.defineProperty(shim, "nullPolyfill", {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: nullObject
+ });
+
+ return function (prototype, props) {
+ return create(prototype === null ? nullObject : prototype, props);
+ };
+}());
diff --git a/node_modules/es5-ext/object/ensure-array.js b/node_modules/es5-ext/object/ensure-array.js
new file mode 100644
index 00000000..5ca7a949
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-array.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var toShortString = require("../to-short-string-representation")
+ , isArray = require("./is-array-like");
+
+module.exports = function (value) {
+ if (isArray(value)) return value;
+ throw new TypeError(toShortString(value) + " is not a array");
+};
diff --git a/node_modules/es5-ext/object/ensure-finite-number.js b/node_modules/es5-ext/object/ensure-finite-number.js
new file mode 100644
index 00000000..4f6e4b4a
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-finite-number.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isFiniteNumber = require("./is-finite-number")
+ , safeToString = require("../safe-to-string");
+
+module.exports = function (value) {
+ if (isFiniteNumber(value)) return Number(value);
+ throw new TypeError(safeToString(value) + " does not represent a finite number value");
+};
diff --git a/node_modules/es5-ext/object/ensure-integer.js b/node_modules/es5-ext/object/ensure-integer.js
new file mode 100644
index 00000000..9ec64b5b
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-integer.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var toShortString = require("../to-short-string-representation")
+ , isInteger = require("./is-integer");
+
+module.exports = function (num) {
+ if (!isInteger(num)) throw new TypeError(toShortString(num) + " is not a integer");
+ return Number(num);
+};
diff --git a/node_modules/es5-ext/object/ensure-natural-number-value.js b/node_modules/es5-ext/object/ensure-natural-number-value.js
new file mode 100644
index 00000000..1a901aa4
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-natural-number-value.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var isNaturalValue = require("./is-natural-number-value")
+ , toShortString = require("../to-short-string-representation");
+
+module.exports = function (arg) {
+ var num = Number(arg);
+ if (!isNaturalValue(arg)) throw new TypeError(toShortString(arg) + " is not a natural number");
+ return num;
+};
diff --git a/node_modules/es5-ext/object/ensure-natural-number.js b/node_modules/es5-ext/object/ensure-natural-number.js
new file mode 100644
index 00000000..ec7e5146
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-natural-number.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var isNatural = require("../number/is-natural")
+ , toShortString = require("../to-short-string-representation");
+
+module.exports = function (arg) {
+ var num = Number(arg);
+ if (!isNatural(num)) throw new TypeError(toShortString(arg) + " is not a natural number");
+ return num;
+};
diff --git a/node_modules/es5-ext/object/ensure-plain-function.js b/node_modules/es5-ext/object/ensure-plain-function.js
new file mode 100644
index 00000000..6cd9853e
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-plain-function.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , isPlainFunction = require("./is-plain-function");
+
+module.exports = function (value) {
+ if (!isPlainFunction(value)) {
+ throw new TypeError(safeToString(value) + " is not a plain function");
+ }
+ return value;
+};
diff --git a/node_modules/es5-ext/object/ensure-promise.js b/node_modules/es5-ext/object/ensure-promise.js
new file mode 100644
index 00000000..b5b53563
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-promise.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , isPromise = require("./is-promise");
+
+module.exports = function (value) {
+ if (!isPromise(value)) throw new TypeError(safeToString(value) + " is not a promise");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/ensure-thenable.js b/node_modules/es5-ext/object/ensure-thenable.js
new file mode 100644
index 00000000..c55c17ad
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-thenable.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , isThenable = require("./is-thenable");
+
+module.exports = function (value) {
+ if (!isThenable(value)) throw new TypeError(safeToString(value) + " is not a thenable");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/entries/implement.js b/node_modules/es5-ext/object/entries/implement.js
new file mode 100644
index 00000000..5c2a246d
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Object, "entries", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/object/entries/index.js b/node_modules/es5-ext/object/entries/index.js
new file mode 100644
index 00000000..4a297d6a
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Object.entries : require("./shim");
diff --git a/node_modules/es5-ext/object/entries/is-implemented.js b/node_modules/es5-ext/object/entries/is-implemented.js
new file mode 100644
index 00000000..e13c2e65
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = function () {
+ try {
+ return Object.entries({ foo: 12 })[0][0] === "foo";
+ } catch (e) {
+ return false;
+ }
+};
diff --git a/node_modules/es5-ext/object/entries/shim.js b/node_modules/es5-ext/object/entries/shim.js
new file mode 100644
index 00000000..2348e446
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/shim.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var ensureValue = require("../valid-value");
+
+module.exports = function (object) {
+ ensureValue(object);
+ var result = [];
+ object = Object(object);
+ for (var key in object) {
+ if (!propertyIsEnumerable.call(object, key)) continue;
+ result.push([key, object[key]]);
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/object/eq.js b/node_modules/es5-ext/object/eq.js
new file mode 100644
index 00000000..03124680
--- /dev/null
+++ b/node_modules/es5-ext/object/eq.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var numIsNaN = require("../number/is-nan");
+
+module.exports = function (val1, val2) {
+ return val1 === val2 || (numIsNaN(val1) && numIsNaN(val2));
+};
diff --git a/node_modules/es5-ext/object/every.js b/node_modules/es5-ext/object/every.js
new file mode 100644
index 00000000..892b5485
--- /dev/null
+++ b/node_modules/es5-ext/object/every.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")("every", true);
diff --git a/node_modules/es5-ext/object/filter.js b/node_modules/es5-ext/object/filter.js
new file mode 100644
index 00000000..c7dd969b
--- /dev/null
+++ b/node_modules/es5-ext/object/filter.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call;
+
+module.exports = function (obj, cb /*, thisArg*/) {
+ var result = {}, thisArg = arguments[2];
+ callable(cb);
+ forEach(obj, function (value, key, targetObj, index) {
+ if (call.call(cb, thisArg, value, key, targetObj, index)) result[key] = targetObj[key];
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/object/find-key.js b/node_modules/es5-ext/object/find-key.js
new file mode 100644
index 00000000..6da6ba6f
--- /dev/null
+++ b/node_modules/es5-ext/object/find-key.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")(require("../array/#/find"), false);
diff --git a/node_modules/es5-ext/object/find.js b/node_modules/es5-ext/object/find.js
new file mode 100644
index 00000000..5960421a
--- /dev/null
+++ b/node_modules/es5-ext/object/find.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var findKey = require("./find-key")
+ , isValue = require("./is-value");
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (obj, cb /*, thisArg, compareFn*/) {
+ var key = findKey.apply(this, arguments);
+ return isValue(key) ? obj[key] : key;
+};
diff --git a/node_modules/es5-ext/object/first-key.js b/node_modules/es5-ext/object/first-key.js
new file mode 100644
index 00000000..3666de57
--- /dev/null
+++ b/node_modules/es5-ext/object/first-key.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var value = require("./valid-value")
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (obj) {
+ var i;
+ value(obj);
+ for (i in obj) {
+ if (objPropertyIsEnumerable.call(obj, i)) return i;
+ }
+ return null;
+};
diff --git a/node_modules/es5-ext/object/flatten.js b/node_modules/es5-ext/object/flatten.js
new file mode 100644
index 00000000..34e1ab09
--- /dev/null
+++ b/node_modules/es5-ext/object/flatten.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var isPlainObject = require("./is-plain-object")
+ , forEach = require("./for-each")
+
+ , process;
+
+process = function self(value, key) {
+ if (isPlainObject(value)) forEach(value, self, this);
+ else this[key] = value;
+};
+
+module.exports = function (obj) {
+ var flattened = {};
+ forEach(obj, process, flattened);
+ return flattened;
+};
diff --git a/node_modules/es5-ext/object/for-each.js b/node_modules/es5-ext/object/for-each.js
new file mode 100644
index 00000000..d282956d
--- /dev/null
+++ b/node_modules/es5-ext/object/for-each.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")("forEach");
diff --git a/node_modules/es5-ext/object/get-property-names.js b/node_modules/es5-ext/object/get-property-names.js
new file mode 100644
index 00000000..7dfef279
--- /dev/null
+++ b/node_modules/es5-ext/object/get-property-names.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var uniq = require("../array/#/uniq")
+ , value = require("./valid-value")
+ , push = Array.prototype.push
+ , getOwnPropertyNames = Object.getOwnPropertyNames
+ , getPrototypeOf = Object.getPrototypeOf;
+
+module.exports = function (obj) {
+ var keys;
+ obj = Object(value(obj));
+ keys = getOwnPropertyNames(obj);
+ while ((obj = getPrototypeOf(obj))) {
+ push.apply(keys, getOwnPropertyNames(obj));
+ }
+ return uniq.call(keys);
+};
diff --git a/node_modules/es5-ext/object/index.js b/node_modules/es5-ext/object/index.js
new file mode 100644
index 00000000..ed0b7d5a
--- /dev/null
+++ b/node_modules/es5-ext/object/index.js
@@ -0,0 +1,69 @@
+"use strict";
+
+module.exports = {
+ assign: require("./assign"),
+ assignDeep: require("./assign-deep"),
+ clear: require("./clear"),
+ compact: require("./compact"),
+ compare: require("./compare"),
+ copy: require("./copy"),
+ copyDeep: require("./copy-deep"),
+ count: require("./count"),
+ create: require("./create"),
+ ensureArray: require("./ensure-array"),
+ ensureFiniteNumber: require("./ensure-finite-number"),
+ ensureInteger: require("./ensure-integer"),
+ ensureNaturalNumber: require("./ensure-natural-number"),
+ ensureNaturalNumberValue: require("./ensure-natural-number-value"),
+ ensurePlainFunction: require("./ensure-plain-function"),
+ ensurePromise: require("./ensure-promise"),
+ ensureThenable: require("./ensure-thenable"),
+ entries: require("./entries"),
+ eq: require("./eq"),
+ every: require("./every"),
+ filter: require("./filter"),
+ find: require("./find"),
+ findKey: require("./find-key"),
+ firstKey: require("./first-key"),
+ flatten: require("./flatten"),
+ forEach: require("./for-each"),
+ getPropertyNames: require("./get-property-names"),
+ is: require("./is"),
+ isArrayLike: require("./is-array-like"),
+ isCallable: require("./is-callable"),
+ isCopy: require("./is-copy"),
+ isCopyDeep: require("./is-copy-deep"),
+ isEmpty: require("./is-empty"),
+ isFiniteNumber: require("./is-finite-number"),
+ isInteger: require("./is-integer"),
+ isNaturalNumber: require("./is-natural-number"),
+ isNaturalNumberValue: require("./is-natural-number-value"),
+ isNumberValue: require("./is-number-value"),
+ isObject: require("./is-object"),
+ isPlainFunction: require("./is-plain-function"),
+ isPlainObject: require("./is-plain-object"),
+ isPromise: require("./is-promise"),
+ isThenable: require("./is-thenable"),
+ isValue: require("./is-value"),
+ keyOf: require("./key-of"),
+ keys: require("./keys"),
+ map: require("./map"),
+ mapKeys: require("./map-keys"),
+ normalizeOptions: require("./normalize-options"),
+ mixin: require("./mixin"),
+ mixinPrototypes: require("./mixin-prototypes"),
+ primitiveSet: require("./primitive-set"),
+ safeTraverse: require("./safe-traverse"),
+ serialize: require("./serialize"),
+ setPrototypeOf: require("./set-prototype-of"),
+ some: require("./some"),
+ toArray: require("./to-array"),
+ unserialize: require("./unserialize"),
+ validateArrayLike: require("./validate-array-like"),
+ validateArrayLikeObject: require("./validate-array-like-object"),
+ validCallable: require("./valid-callable"),
+ validObject: require("./valid-object"),
+ validateStringifiable: require("./validate-stringifiable"),
+ validateStringifiableValue: require("./validate-stringifiable-value"),
+ validValue: require("./valid-value")
+};
diff --git a/node_modules/es5-ext/object/is-array-like.js b/node_modules/es5-ext/object/is-array-like.js
new file mode 100644
index 00000000..fcb9115d
--- /dev/null
+++ b/node_modules/es5-ext/object/is-array-like.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var isFunction = require("../function/is-function")
+ , isObject = require("./is-object")
+ , isValue = require("./is-value");
+
+module.exports = function (value) {
+ return (
+ (isValue(value) &&
+ typeof value.length === "number" &&
+ // Just checking ((typeof x === 'object') && (typeof x !== 'function'))
+ // won't work right for some cases, e.g.:
+ // type of instance of NodeList in Safari is a 'function'
+ ((isObject(value) && !isFunction(value)) || typeof value === "string")) ||
+ false
+ );
+};
diff --git a/node_modules/es5-ext/object/is-callable.js b/node_modules/es5-ext/object/is-callable.js
new file mode 100644
index 00000000..c55915bc
--- /dev/null
+++ b/node_modules/es5-ext/object/is-callable.js
@@ -0,0 +1,7 @@
+// Deprecated
+
+"use strict";
+
+module.exports = function (obj) {
+ return typeof obj === "function";
+};
diff --git a/node_modules/es5-ext/object/is-copy-deep.js b/node_modules/es5-ext/object/is-copy-deep.js
new file mode 100644
index 00000000..a1206aea
--- /dev/null
+++ b/node_modules/es5-ext/object/is-copy-deep.js
@@ -0,0 +1,59 @@
+"use strict";
+
+var eq = require("./eq")
+ , isPlainObject = require("./is-plain-object")
+ , value = require("./valid-value");
+
+var isArray = Array.isArray
+ , keys = Object.keys
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , eqArr
+ , eqVal
+ , eqObj;
+
+eqArr = function (arr1, arr2, recMap) {
+ var i, length = arr1.length;
+ if (length !== arr2.length) return false;
+ for (i = 0; i < length; ++i) {
+ if (objHasOwnProperty.call(arr1, i) !== objHasOwnProperty.call(arr2, i)) return false;
+ if (!eqVal(arr1[i], arr2[i], recMap)) return false;
+ }
+ return true;
+};
+
+eqObj = function (obj1, obj2, recMap) {
+ var k1 = keys(obj1), k2 = keys(obj2);
+ if (k1.length !== k2.length) return false;
+ return k1.every(function (key) {
+ if (!objPropertyIsEnumerable.call(obj2, key)) return false;
+ return eqVal(obj1[key], obj2[key], recMap);
+ });
+};
+
+eqVal = function (val1, val2, recMap) {
+ var i, eqX, c1, c2;
+ if (eq(val1, val2)) return true;
+ if (isPlainObject(val1)) {
+ if (!isPlainObject(val2)) return false;
+ eqX = eqObj;
+ } else if (isArray(val1) && isArray(val2)) {
+ eqX = eqArr;
+ } else {
+ return false;
+ }
+ c1 = recMap[0];
+ c2 = recMap[1];
+ i = c1.indexOf(val1);
+ if (i === -1) {
+ i = c1.push(val1) - 1;
+ c2[i] = [];
+ } else if (c2[i].indexOf(val2) !== -1) return true;
+ c2[i].push(val2);
+ return eqX(val1, val2, recMap);
+};
+
+module.exports = function (val1, val2) {
+ if (eq(value(val1), value(val2))) return true;
+ return eqVal(Object(val1), Object(val2), [[], []]);
+};
diff --git a/node_modules/es5-ext/object/is-copy.js b/node_modules/es5-ext/object/is-copy.js
new file mode 100644
index 00000000..8c6ae5e2
--- /dev/null
+++ b/node_modules/es5-ext/object/is-copy.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var eq = require("./eq")
+ , value = require("./valid-value")
+ , keys = Object.keys
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (val1, val2) {
+ var k1, k2;
+
+ if (eq(value(val1), value(val2))) return true;
+
+ val1 = Object(val1);
+ val2 = Object(val2);
+
+ k1 = keys(val1);
+ k2 = keys(val2);
+ if (k1.length !== k2.length) return false;
+ return k1.every(function (key) {
+ if (!objPropertyIsEnumerable.call(val2, key)) return false;
+ return eq(val1[key], val2[key]);
+ });
+};
diff --git a/node_modules/es5-ext/object/is-empty.js b/node_modules/es5-ext/object/is-empty.js
new file mode 100644
index 00000000..dbc52d0c
--- /dev/null
+++ b/node_modules/es5-ext/object/is-empty.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var value = require("./valid-value")
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (obj) {
+ var i;
+ value(obj);
+ for (i in obj) {
+ // Jslint: ignore
+ if (objPropertyIsEnumerable.call(obj, i)) return false;
+ }
+ return true;
+};
diff --git a/node_modules/es5-ext/object/is-finite-number.js b/node_modules/es5-ext/object/is-finite-number.js
new file mode 100644
index 00000000..78ed6692
--- /dev/null
+++ b/node_modules/es5-ext/object/is-finite-number.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var isNumber = require("./is-number-value");
+
+module.exports = function (value) {
+ return isNumber(value) && isFinite(value);
+};
diff --git a/node_modules/es5-ext/object/is-integer.js b/node_modules/es5-ext/object/is-integer.js
new file mode 100644
index 00000000..1745b829
--- /dev/null
+++ b/node_modules/es5-ext/object/is-integer.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var isInteger = require("../number/is-integer")
+ , isValue = require("./is-value");
+
+module.exports = function (arg) {
+ if (!isValue(arg)) return false;
+ arg = Number(arg);
+ return isInteger(arg);
+};
diff --git a/node_modules/es5-ext/object/is-natural-number-value.js b/node_modules/es5-ext/object/is-natural-number-value.js
new file mode 100644
index 00000000..c7445218
--- /dev/null
+++ b/node_modules/es5-ext/object/is-natural-number-value.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isNaturalNumber = require("./is-natural-number")
+ , isValue = require("./is-value");
+
+module.exports = function (arg) {
+ if (!isValue(arg)) return false;
+ return isNaturalNumber(arg);
+};
diff --git a/node_modules/es5-ext/object/is-natural-number.js b/node_modules/es5-ext/object/is-natural-number.js
new file mode 100644
index 00000000..37d74586
--- /dev/null
+++ b/node_modules/es5-ext/object/is-natural-number.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var isNatural = require("../number/is-natural");
+
+module.exports = function (arg) {
+ return isNatural(Number(arg));
+};
diff --git a/node_modules/es5-ext/object/is-number-value.js b/node_modules/es5-ext/object/is-number-value.js
new file mode 100644
index 00000000..e9152768
--- /dev/null
+++ b/node_modules/es5-ext/object/is-number-value.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+module.exports = function (value) {
+ if (!isValue(value)) return false;
+ try {
+ return !isNaN(value);
+ } catch (e) {
+ return false;
+ }
+};
diff --git a/node_modules/es5-ext/object/is-object.js b/node_modules/es5-ext/object/is-object.js
new file mode 100644
index 00000000..846ae217
--- /dev/null
+++ b/node_modules/es5-ext/object/is-object.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+var map = { function: true, object: true };
+
+module.exports = function (value) {
+ return (isValue(value) && map[typeof value]) || false;
+};
diff --git a/node_modules/es5-ext/object/is-plain-function.js b/node_modules/es5-ext/object/is-plain-function.js
new file mode 100644
index 00000000..a2f32348
--- /dev/null
+++ b/node_modules/es5-ext/object/is-plain-function.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var isClassStr = RegExp.prototype.test.bind(/^\s*class[\s{/}]/)
+ , fnToString = Function.prototype.toString;
+
+module.exports = function (fn) {
+ if (typeof fn !== "function") return false;
+ if (typeof fn.call !== "function") return false;
+ if (typeof fn.apply !== "function") return false;
+ return !isClassStr(fnToString.call(fn));
+};
diff --git a/node_modules/es5-ext/object/is-plain-object.js b/node_modules/es5-ext/object/is-plain-object.js
new file mode 100644
index 00000000..ff153289
--- /dev/null
+++ b/node_modules/es5-ext/object/is-plain-object.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var getPrototypeOf = Object.getPrototypeOf
+ , prototype = Object.prototype
+ , objToString = prototype.toString
+ , id = Object().toString();
+
+module.exports = function (value) {
+ var proto, valueConstructor;
+ if (!value || typeof value !== "object" || objToString.call(value) !== id) {
+ return false;
+ }
+ proto = getPrototypeOf(value);
+ if (proto === null) {
+ valueConstructor = value.constructor;
+ if (typeof valueConstructor !== "function") return true;
+ return valueConstructor.prototype !== value;
+ }
+ return proto === prototype || getPrototypeOf(proto) === null;
+};
diff --git a/node_modules/es5-ext/object/is-promise.js b/node_modules/es5-ext/object/is-promise.js
new file mode 100644
index 00000000..33d6df13
--- /dev/null
+++ b/node_modules/es5-ext/object/is-promise.js
@@ -0,0 +1,4 @@
+"use strict";
+
+// In next major this check will also confirm on promise constructor
+module.exports = require("./is-thenable");
diff --git a/node_modules/es5-ext/object/is-thenable.js b/node_modules/es5-ext/object/is-thenable.js
new file mode 100644
index 00000000..a37bffb6
--- /dev/null
+++ b/node_modules/es5-ext/object/is-thenable.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isCallable = require("./is-callable")
+ , isObject = require("./is-object");
+
+module.exports = function (value) {
+ return isObject(value) && isCallable(value.then);
+};
diff --git a/node_modules/es5-ext/object/is-value.js b/node_modules/es5-ext/object/is-value.js
new file mode 100644
index 00000000..82af8f33
--- /dev/null
+++ b/node_modules/es5-ext/object/is-value.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var _undefined = require("../function/noop")(); // Support ES3 engines
+
+module.exports = function (val) {
+ return (val !== _undefined) && (val !== null);
+};
diff --git a/node_modules/es5-ext/object/is.js b/node_modules/es5-ext/object/is.js
new file mode 100644
index 00000000..54baadec
--- /dev/null
+++ b/node_modules/es5-ext/object/is.js
@@ -0,0 +1,10 @@
+// Implementation credits go to:
+// http://wiki.ecmascript.org/doku.php?id=harmony:egal
+
+"use strict";
+
+var numIsNaN = require("../number/is-nan");
+
+module.exports = function (val1, val2) {
+ return val1 === val2 ? val1 !== 0 || 1 / val1 === 1 / val2 : numIsNaN(val1) && numIsNaN(val2);
+};
diff --git a/node_modules/es5-ext/object/key-of.js b/node_modules/es5-ext/object/key-of.js
new file mode 100644
index 00000000..dc640e4d
--- /dev/null
+++ b/node_modules/es5-ext/object/key-of.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var eq = require("./eq")
+ , some = require("./some");
+
+module.exports = function (obj, searchValue) {
+ var result;
+ return some(obj, function (value, name) {
+ if (eq(value, searchValue)) {
+ result = name;
+ return true;
+ }
+ return false;
+ })
+ ? result
+ : null;
+};
diff --git a/node_modules/es5-ext/object/keys/implement.js b/node_modules/es5-ext/object/keys/implement.js
new file mode 100644
index 00000000..72ecfbdf
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Object, "keys", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/object/keys/index.js b/node_modules/es5-ext/object/keys/index.js
new file mode 100644
index 00000000..d1942279
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Object.keys : require("./shim");
diff --git a/node_modules/es5-ext/object/keys/is-implemented.js b/node_modules/es5-ext/object/keys/is-implemented.js
new file mode 100644
index 00000000..2dfcf1b9
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/is-implemented.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = function () {
+ try {
+ Object.keys("primitive");
+ return true;
+ } catch (e) {
+ return false;
+ }
+};
diff --git a/node_modules/es5-ext/object/keys/shim.js b/node_modules/es5-ext/object/keys/shim.js
new file mode 100644
index 00000000..a8908d5c
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/shim.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var isValue = require("../is-value");
+
+var keys = Object.keys;
+
+module.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };
diff --git a/node_modules/es5-ext/object/map-keys.js b/node_modules/es5-ext/object/map-keys.js
new file mode 100644
index 00000000..72dada07
--- /dev/null
+++ b/node_modules/es5-ext/object/map-keys.js
@@ -0,0 +1,18 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call;
+
+module.exports = function (obj, cb /*, thisArg*/) {
+ var result = {}, thisArg = arguments[2];
+ callable(cb);
+ forEach(
+ obj,
+ function (value, key, targetObj, index) {
+ result[call.call(cb, thisArg, key, value, this, index)] = value;
+ },
+ obj
+ );
+ return result;
+};
diff --git a/node_modules/es5-ext/object/map.js b/node_modules/es5-ext/object/map.js
new file mode 100644
index 00000000..7b718db1
--- /dev/null
+++ b/node_modules/es5-ext/object/map.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call;
+
+module.exports = function (obj, cb /*, thisArg*/) {
+ var result = {}, thisArg = arguments[2];
+ callable(cb);
+ forEach(obj, function (value, key, targetObj, index) {
+ result[key] = call.call(cb, thisArg, value, key, targetObj, index);
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/object/mixin-prototypes.js b/node_modules/es5-ext/object/mixin-prototypes.js
new file mode 100644
index 00000000..9094aef1
--- /dev/null
+++ b/node_modules/es5-ext/object/mixin-prototypes.js
@@ -0,0 +1,37 @@
+"use strict";
+
+var value = require("./valid-value")
+ , mixin = require("./mixin")
+ , defineProperty = Object.defineProperty
+ , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
+ , getOwnPropertyNames = Object.getOwnPropertyNames
+ , getPrototypeOf = Object.getPrototypeOf
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+
+module.exports = function (target, source) {
+ var error, end, define;
+ target = Object(value(target));
+ source = Object(value(source));
+ end = getPrototypeOf(target);
+ if (source === end) return target;
+ try {
+ mixin(target, source);
+ } catch (e) {
+ error = e;
+ }
+ source = getPrototypeOf(source);
+ define = function (name) {
+ if (objHasOwnProperty.call(target, name)) return;
+ try {
+ defineProperty(target, name, getOwnPropertyDescriptor(source, name));
+ } catch (e) {
+ error = e;
+ }
+ };
+ while (source && source !== end) {
+ getOwnPropertyNames(source).forEach(define);
+ source = getPrototypeOf(source);
+ }
+ if (error) throw error;
+ return target;
+};
diff --git a/node_modules/es5-ext/object/mixin.js b/node_modules/es5-ext/object/mixin.js
new file mode 100644
index 00000000..4da7cd51
--- /dev/null
+++ b/node_modules/es5-ext/object/mixin.js
@@ -0,0 +1,31 @@
+"use strict";
+
+var value = require("./valid-value")
+
+ , defineProperty = Object.defineProperty
+ , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
+ , getOwnPropertyNames = Object.getOwnPropertyNames
+ , getOwnPropertySymbols = Object.getOwnPropertySymbols;
+
+module.exports = function (target, source) {
+ var error, sourceObject = Object(value(source));
+ target = Object(value(target));
+ getOwnPropertyNames(sourceObject).forEach(function (name) {
+ try {
+ defineProperty(target, name, getOwnPropertyDescriptor(source, name));
+ } catch (e) {
+ error = e;
+}
+ });
+ if (typeof getOwnPropertySymbols === "function") {
+ getOwnPropertySymbols(sourceObject).forEach(function (symbol) {
+ try {
+ defineProperty(target, symbol, getOwnPropertyDescriptor(source, symbol));
+ } catch (e) {
+ error = e;
+}
+ });
+ }
+ if (error !== undefined) throw error;
+ return target;
+};
diff --git a/node_modules/es5-ext/object/normalize-options.js b/node_modules/es5-ext/object/normalize-options.js
new file mode 100644
index 00000000..6c394fe9
--- /dev/null
+++ b/node_modules/es5-ext/object/normalize-options.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+var forEach = Array.prototype.forEach, create = Object.create;
+
+var process = function (src, obj) {
+ var key;
+ for (key in src) obj[key] = src[key];
+};
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (opts1 /*, …options*/) {
+ var result = create(null);
+ forEach.call(arguments, function (options) {
+ if (!isValue(options)) return;
+ process(Object(options), result);
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/object/primitive-set.js b/node_modules/es5-ext/object/primitive-set.js
new file mode 100644
index 00000000..235eaa7f
--- /dev/null
+++ b/node_modules/es5-ext/object/primitive-set.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var forEach = Array.prototype.forEach, create = Object.create;
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (arg /*, …args*/) {
+ var set = create(null);
+ forEach.call(arguments, function (name) {
+ set[name] = true;
+ });
+ return set;
+};
diff --git a/node_modules/es5-ext/object/safe-traverse.js b/node_modules/es5-ext/object/safe-traverse.js
new file mode 100644
index 00000000..7b72d555
--- /dev/null
+++ b/node_modules/es5-ext/object/safe-traverse.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var value = require("./valid-value")
+ , isValue = require("./is-value");
+
+module.exports = function (obj /*, …names*/) {
+ var length, current = 1;
+ value(obj);
+ length = arguments.length - 1;
+ if (!length) return obj;
+ while (current < length) {
+ obj = obj[arguments[current++]];
+ if (!isValue(obj)) return undefined;
+ }
+ return obj[arguments[current]];
+};
diff --git a/node_modules/es5-ext/object/serialize.js b/node_modules/es5-ext/object/serialize.js
new file mode 100644
index 00000000..4be9aeb1
--- /dev/null
+++ b/node_modules/es5-ext/object/serialize.js
@@ -0,0 +1,41 @@
+"use strict";
+
+var toArray = require("./to-array")
+ , isDate = require("../date/is-date")
+ , isValue = require("../object/is-value")
+ , isRegExp = require("../reg-exp/is-reg-exp");
+
+var isArray = Array.isArray
+ , stringify = JSON.stringify
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+var keyValueToString = function (value, key) {
+ return stringify(key) + ":" + exports(value);
+};
+
+var sparseMap = function (arr) {
+ var i, length = arr.length, result = new Array(length);
+ for (i = 0; i < length; ++i) {
+ if (!objHasOwnProperty.call(arr, i)) continue;
+ result[i] = exports(arr[i]);
+ }
+ return result;
+};
+
+module.exports = exports = function (obj) {
+ if (!isValue(obj)) return String(obj);
+ switch (typeof obj) {
+ case "string":
+ return stringify(obj);
+ case "number":
+ case "boolean":
+ case "function":
+ return String(obj);
+ case "object":
+ if (isArray(obj)) return "[" + sparseMap(obj) + "]";
+ if (isRegExp(obj)) return String(obj);
+ if (isDate(obj)) return "new Date(" + obj.valueOf() + ")";
+ return "{" + toArray(obj, keyValueToString) + "}";
+ default:
+ throw new TypeError("Serialization of " + String(obj) + "is unsupported");
+ }
+};
diff --git a/node_modules/es5-ext/object/set-prototype-of/implement.js b/node_modules/es5-ext/object/set-prototype-of/implement.js
new file mode 100644
index 00000000..1b91aeba
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/implement.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var shim;
+
+if (!require("./is-implemented")() && (shim = require("./shim"))) {
+ Object.defineProperty(Object, "setPrototypeOf",
+ { value: shim, configurable: true, enumerable: false, writable: true });
+}
diff --git a/node_modules/es5-ext/object/set-prototype-of/index.js b/node_modules/es5-ext/object/set-prototype-of/index.js
new file mode 100644
index 00000000..e035173f
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/index.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = require("./is-implemented")()
+ ? Object.setPrototypeOf
+ : require("./shim");
diff --git a/node_modules/es5-ext/object/set-prototype-of/is-implemented.js b/node_modules/es5-ext/object/set-prototype-of/is-implemented.js
new file mode 100644
index 00000000..1a00627b
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var create = Object.create, getPrototypeOf = Object.getPrototypeOf, plainObject = {};
+
+module.exports = function (/* CustomCreate*/) {
+ var setPrototypeOf = Object.setPrototypeOf, customCreate = arguments[0] || create;
+ if (typeof setPrototypeOf !== "function") return false;
+ return getPrototypeOf(setPrototypeOf(customCreate(null), plainObject)) === plainObject;
+};
diff --git a/node_modules/es5-ext/object/set-prototype-of/shim.js b/node_modules/es5-ext/object/set-prototype-of/shim.js
new file mode 100644
index 00000000..bc217844
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/shim.js
@@ -0,0 +1,86 @@
+/* eslint no-proto: "off" */
+
+// Big thanks to @WebReflection for sorting this out
+// https://gist.github.com/WebReflection/5593554
+
+"use strict";
+
+var isObject = require("../is-object")
+ , value = require("../valid-value")
+ , objIsPrototypeOf = Object.prototype.isPrototypeOf
+ , defineProperty = Object.defineProperty
+ , nullDesc = {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: undefined
+}
+ , validate;
+
+validate = function (obj, prototype) {
+ value(obj);
+ if (prototype === null || isObject(prototype)) return obj;
+ throw new TypeError("Prototype must be null or an object");
+};
+
+module.exports = (function (status) {
+ var fn, set;
+ if (!status) return null;
+ if (status.level === 2) {
+ if (status.set) {
+ set = status.set;
+ fn = function (obj, prototype) {
+ set.call(validate(obj, prototype), prototype);
+ return obj;
+ };
+ } else {
+ fn = function (obj, prototype) {
+ validate(obj, prototype).__proto__ = prototype;
+ return obj;
+ };
+ }
+ } else {
+ fn = function self(obj, prototype) {
+ var isNullBase;
+ validate(obj, prototype);
+ isNullBase = objIsPrototypeOf.call(self.nullPolyfill, obj);
+ if (isNullBase) delete self.nullPolyfill.__proto__;
+ if (prototype === null) prototype = self.nullPolyfill;
+ obj.__proto__ = prototype;
+ if (isNullBase) defineProperty(self.nullPolyfill, "__proto__", nullDesc);
+ return obj;
+ };
+ }
+ return Object.defineProperty(fn, "level", {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: status.level
+ });
+}(
+ (function () {
+ var tmpObj1 = Object.create(null)
+ , tmpObj2 = {}
+ , set
+ , desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
+
+ if (desc) {
+ try {
+ set = desc.set; // Opera crashes at this point
+ set.call(tmpObj1, tmpObj2);
+ } catch (ignore) {}
+ if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { set: set, level: 2 };
+ }
+
+ tmpObj1.__proto__ = tmpObj2;
+ if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 2 };
+
+ tmpObj1 = {};
+ tmpObj1.__proto__ = tmpObj2;
+ if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 1 };
+
+ return false;
+ })()
+));
+
+require("../create");
diff --git a/node_modules/es5-ext/object/some.js b/node_modules/es5-ext/object/some.js
new file mode 100644
index 00000000..c919466b
--- /dev/null
+++ b/node_modules/es5-ext/object/some.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")("some", false);
diff --git a/node_modules/es5-ext/object/to-array.js b/node_modules/es5-ext/object/to-array.js
new file mode 100644
index 00000000..6ed50a8e
--- /dev/null
+++ b/node_modules/es5-ext/object/to-array.js
@@ -0,0 +1,24 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , isValue = require("./is-value")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call
+ , defaultCb = function (value, key) {
+ return [key, value];
+};
+
+module.exports = function (obj /*, cb, thisArg, compareFn*/) {
+ var a = [], cb = arguments[1], thisArg = arguments[2];
+ cb = isValue(cb) ? callable(cb) : defaultCb;
+
+ forEach(
+ obj,
+ function (value, key, targetObj, index) {
+ a.push(call.call(cb, thisArg, value, key, this, index));
+ },
+ obj,
+ arguments[3]
+ );
+ return a;
+};
diff --git a/node_modules/es5-ext/object/unserialize.js b/node_modules/es5-ext/object/unserialize.js
new file mode 100644
index 00000000..75745143
--- /dev/null
+++ b/node_modules/es5-ext/object/unserialize.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var value = require("./valid-value");
+
+module.exports = exports = function (code) {
+ // eslint-disable-next-line no-new-func
+ return new Function("return " + value(code))();
+};
diff --git a/node_modules/es5-ext/object/valid-callable.js b/node_modules/es5-ext/object/valid-callable.js
new file mode 100644
index 00000000..a97fb3ea
--- /dev/null
+++ b/node_modules/es5-ext/object/valid-callable.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function (fn) {
+ if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
+ return fn;
+};
diff --git a/node_modules/es5-ext/object/valid-object.js b/node_modules/es5-ext/object/valid-object.js
new file mode 100644
index 00000000..74b5e5f2
--- /dev/null
+++ b/node_modules/es5-ext/object/valid-object.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isObject = require("./is-object");
+
+module.exports = function (value) {
+ if (!isObject(value)) throw new TypeError(value + " is not an Object");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/valid-value.js b/node_modules/es5-ext/object/valid-value.js
new file mode 100644
index 00000000..d0ced8a4
--- /dev/null
+++ b/node_modules/es5-ext/object/valid-value.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+module.exports = function (value) {
+ if (!isValue(value)) throw new TypeError("Cannot use null or undefined");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/validate-array-like-object.js b/node_modules/es5-ext/object/validate-array-like-object.js
new file mode 100644
index 00000000..d7c45b36
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-array-like-object.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isArrayLike = require("./is-array-like")
+ , isObject = require("./is-object");
+
+module.exports = function (obj) {
+ if (isObject(obj) && isArrayLike(obj)) return obj;
+ throw new TypeError(obj + " is not array-like object");
+};
diff --git a/node_modules/es5-ext/object/validate-array-like.js b/node_modules/es5-ext/object/validate-array-like.js
new file mode 100644
index 00000000..07aa7949
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-array-like.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isArrayLike = require("./is-array-like");
+
+module.exports = function (obj) {
+ if (isArrayLike(obj)) return obj;
+ throw new TypeError(obj + " is not array-like value");
+};
diff --git a/node_modules/es5-ext/object/validate-stringifiable-value.js b/node_modules/es5-ext/object/validate-stringifiable-value.js
new file mode 100644
index 00000000..5f470428
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-stringifiable-value.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var ensureValue = require("./valid-value")
+ , stringifiable = require("./validate-stringifiable");
+
+module.exports = function (value) {
+ return stringifiable(ensureValue(value));
+};
diff --git a/node_modules/es5-ext/object/validate-stringifiable.js b/node_modules/es5-ext/object/validate-stringifiable.js
new file mode 100644
index 00000000..2b1f1271
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-stringifiable.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var isCallable = require("./is-callable");
+
+module.exports = function (stringifiable) {
+ try {
+ if (stringifiable && isCallable(stringifiable.toString)) return stringifiable.toString();
+ return String(stringifiable);
+ } catch (e) {
+ throw new TypeError("Passed argument cannot be stringifed");
+ }
+};