diff options
Diffstat (limited to 'node_modules/es5-ext/object')
-rw-r--r-- | node_modules/es5-ext/object/assign-deep.js | 33 | ||||
-rw-r--r-- | node_modules/es5-ext/object/copy-deep.js | 53 | ||||
-rw-r--r-- | node_modules/es5-ext/object/ensure-array.js | 9 | ||||
-rw-r--r-- | node_modules/es5-ext/object/ensure-finite-number.js | 2 | ||||
-rw-r--r-- | node_modules/es5-ext/object/flatten.js | 2 | ||||
-rw-r--r-- | node_modules/es5-ext/object/index.js | 3 | ||||
-rw-r--r-- | node_modules/es5-ext/object/is-array-like.js | 1 | ||||
-rw-r--r-- | node_modules/es5-ext/object/is-plain-function.js | 11 | ||||
-rw-r--r-- | node_modules/es5-ext/object/set-prototype-of/shim.js | 6 |
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; |