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/assign-deep.js33
-rw-r--r--node_modules/es5-ext/object/copy-deep.js53
-rw-r--r--node_modules/es5-ext/object/ensure-array.js9
-rw-r--r--node_modules/es5-ext/object/ensure-finite-number.js2
-rw-r--r--node_modules/es5-ext/object/flatten.js2
-rw-r--r--node_modules/es5-ext/object/index.js3
-rw-r--r--node_modules/es5-ext/object/is-array-like.js1
-rw-r--r--node_modules/es5-ext/object/is-plain-function.js11
-rw-r--r--node_modules/es5-ext/object/set-prototype-of/shim.js6
9 files changed, 85 insertions, 35 deletions
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 000000000..8034a038e
--- /dev/null
+++ b/node_modules/es5-ext/object/assign-deep.js
@@ -0,0 +1,33 @@
+"use strict";
+
+var includes = require("../array/#/contains")
+ , uniq = require("../array/#/uniq")
+ , objForEach = require("./for-each")
+ , isPlainObject = require("./is-plain-object")
+ , ensureValue = require("./valid-value");
+
+var isArray = Array.isArray, slice = Array.prototype.slice;
+
+var deepAssign = function (source, target) {
+ if (isPlainObject(source)) {
+ if (!isPlainObject(target)) return target;
+ objForEach(target, function (value, key) {
+ source[key] = deepAssign(source[key], value);
+ });
+ return source;
+ }
+ if (isArray(source)) {
+ if (!isArray(target)) return target;
+ target.forEach(function (item) {
+ if (!includes.call(source, item)) source.push(item);
+ });
+ return source;
+ }
+ return target;
+};
+
+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/copy-deep.js b/node_modules/es5-ext/object/copy-deep.js
index d1d39c982..39f9a1d69 100644
--- a/node_modules/es5-ext/object/copy-deep.js
+++ b/node_modules/es5-ext/object/copy-deep.js
@@ -3,40 +3,35 @@
var forEach = require("./for-each")
, isPlainObject = require("./is-plain-object")
, ensureValue = require("./valid-value")
- , isArray = Array.isArray
- , copy
- , copyItem;
+ , isArray = Array.isArray;
-copyItem = function (value) {
- var index;
- if (!isPlainObject(value) && !isArray(value)) return value;
- index = this[0].indexOf(value);
- if (index === -1) return copy.call(this, value);
- return this[1][index];
-};
+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" ? {} : [];
-copy = function (source) {
- var target = isArray(source) ? [] : {};
- this[0].push(source);
- this[1].push(target);
- if (isArray(source)) {
- source.forEach(function (value, key) {
- target[key] = copyItem.call(this, value, key);
- }, this);
+ ancestors.push(value);
+ ancestorsCopy.push(copy);
+ if (mode === "object") {
+ forEach(value, function (item, key) {
+ copy[key] = copyValue(item, ancestors, ancestorsCopy);
+ });
} else {
- forEach(
- source,
- function (value, key) {
- target[key] = copyItem.call(this, value, key);
- },
- this
- );
+ value.forEach(function (item, index) {
+ copy[index] = copyValue(item, ancestors, ancestorsCopy);
+ });
}
- return target;
+ ancestors.pop();
+ ancestorsCopy.pop();
+
+ return copy;
};
module.exports = function (source) {
- var obj = Object(ensureValue(source));
- if (obj !== source) return obj;
- return copy.call([[], []], obj);
+ return copyValue(ensureValue(source), [], []);
};
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 000000000..5ca7a9493
--- /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
index fb4959f23..4f6e4b4a8 100644
--- a/node_modules/es5-ext/object/ensure-finite-number.js
+++ b/node_modules/es5-ext/object/ensure-finite-number.js
@@ -5,5 +5,5 @@ var isFiniteNumber = require("./is-finite-number")
module.exports = function (value) {
if (isFiniteNumber(value)) return Number(value);
- throw new TypeError(safeToString + " does not represent a finite number value");
+ throw new TypeError(safeToString(value) + " does not represent a finite number value");
};
diff --git a/node_modules/es5-ext/object/flatten.js b/node_modules/es5-ext/object/flatten.js
index 4895ed632..34e1ab09b 100644
--- a/node_modules/es5-ext/object/flatten.js
+++ b/node_modules/es5-ext/object/flatten.js
@@ -5,7 +5,7 @@ var isPlainObject = require("./is-plain-object")
, process;
-process = function self (value, key) {
+process = function self(value, key) {
if (isPlainObject(value)) forEach(value, self, this);
else this[key] = value;
};
diff --git a/node_modules/es5-ext/object/index.js b/node_modules/es5-ext/object/index.js
index 9b29a6eb3..7075be41a 100644
--- a/node_modules/es5-ext/object/index.js
+++ b/node_modules/es5-ext/object/index.js
@@ -2,6 +2,7 @@
module.exports = {
assign: require("./assign"),
+ assignDeep: require("./assign-deep"),
clear: require("./clear"),
compact: require("./compact"),
compare: require("./compare"),
@@ -9,6 +10,7 @@ module.exports = {
copyDeep: require("./copy-deep"),
count: require("./count"),
create: require("./create"),
+ ensureArray: require("./ensure-array"),
ensureFiniteNumber: require("./ensure-finite-number"),
ensureNaturalNumber: require("./ensure-natural-number"),
ensureNaturalNumberValue: require("./ensure-natural-number-value"),
@@ -31,6 +33,7 @@ module.exports = {
isFiniteNumber: require("./is-finite-number"),
isNumberValue: require("./is-number-value"),
isObject: require("./is-object"),
+ isPlainFunction: require("./is-plain-function"),
isPlainObject: require("./is-plain-object"),
isPromise: require("./is-promise"),
isValue: require("./is-value"),
diff --git a/node_modules/es5-ext/object/is-array-like.js b/node_modules/es5-ext/object/is-array-like.js
index 8e53500c4..fcb9115d2 100644
--- a/node_modules/es5-ext/object/is-array-like.js
+++ b/node_modules/es5-ext/object/is-array-like.js
@@ -11,7 +11,6 @@ module.exports = function (value) {
// 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-plain-function.js b/node_modules/es5-ext/object/is-plain-function.js
new file mode 100644
index 000000000..a2f32348a
--- /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/set-prototype-of/shim.js b/node_modules/es5-ext/object/set-prototype-of/shim.js
index 312341e02..bc2178444 100644
--- a/node_modules/es5-ext/object/set-prototype-of/shim.js
+++ b/node_modules/es5-ext/object/set-prototype-of/shim.js
@@ -7,7 +7,7 @@
var isObject = require("../is-object")
, value = require("../valid-value")
- , objIsPrototypOf = Object.prototype.isPrototypeOf
+ , objIsPrototypeOf = Object.prototype.isPrototypeOf
, defineProperty = Object.defineProperty
, nullDesc = {
configurable: true,
@@ -40,10 +40,10 @@ module.exports = (function (status) {
};
}
} else {
- fn = function self (obj, prototype) {
+ fn = function self(obj, prototype) {
var isNullBase;
validate(obj, prototype);
- isNullBase = objIsPrototypOf.call(self.nullPolyfill, obj);
+ isNullBase = objIsPrototypeOf.call(self.nullPolyfill, obj);
if (isNullBase) delete self.nullPolyfill.__proto__;
if (prototype === null) prototype = self.nullPolyfill;
obj.__proto__ = prototype;