aboutsummaryrefslogtreecommitdiffstats
path: root/npm_assets/node_modules/merge/merge.js
diff options
context:
space:
mode:
Diffstat (limited to 'npm_assets/node_modules/merge/merge.js')
-rw-r--r--npm_assets/node_modules/merge/merge.js177
1 files changed, 177 insertions, 0 deletions
diff --git a/npm_assets/node_modules/merge/merge.js b/npm_assets/node_modules/merge/merge.js
new file mode 100644
index 0000000..1a9ac77
--- /dev/null
+++ b/npm_assets/node_modules/merge/merge.js
@@ -0,0 +1,177 @@
+/*!
+ * @name JavaScript/NodeJS Merge v1.2.1
+ * @author yeikos
+ * @repository https://github.com/yeikos/js.merge
+
+ * Copyright 2014 yeikos - MIT license
+ * https://raw.github.com/yeikos/js.merge/master/LICENSE
+ */
+
+;(function(isNode) {
+
+ /**
+ * Merge one or more objects
+ * @param bool? clone
+ * @param mixed,... arguments
+ * @return object
+ */
+
+ var Public = function(clone) {
+
+ return merge(clone === true, false, arguments);
+
+ }, publicName = 'merge';
+
+ /**
+ * Merge two or more objects recursively
+ * @param bool? clone
+ * @param mixed,... arguments
+ * @return object
+ */
+
+ Public.recursive = function(clone) {
+
+ return merge(clone === true, true, arguments);
+
+ };
+
+ /**
+ * Clone the input removing any reference
+ * @param mixed input
+ * @return mixed
+ */
+
+ Public.clone = function(input) {
+
+ var output = input,
+ type = typeOf(input),
+ index, size;
+
+ if (type === 'array') {
+
+ output = [];
+ size = input.length;
+
+ for (index=0;index<size;++index)
+
+ output[index] = Public.clone(input[index]);
+
+ } else if (type === 'object') {
+
+ output = {};
+
+ for (index in input)
+
+ output[index] = Public.clone(input[index]);
+
+ }
+
+ return output;
+
+ };
+
+ /**
+ * Merge two objects recursively
+ * @param mixed input
+ * @param mixed extend
+ * @return mixed
+ */
+
+ function merge_recursive(base, extend) {
+
+ if (typeOf(base) !== 'object')
+
+ return extend;
+
+ for (var key in extend) {
+
+ if (typeOf(base[key]) === 'object' && typeOf(extend[key]) === 'object') {
+
+ base[key] = merge_recursive(base[key], extend[key]);
+
+ } else {
+
+ base[key] = extend[key];
+
+ }
+
+ }
+
+ return base;
+
+ }
+
+ /**
+ * Merge two or more objects
+ * @param bool clone
+ * @param bool recursive
+ * @param array argv
+ * @return object
+ */
+
+ function merge(clone, recursive, argv) {
+
+ var result = argv[0],
+ size = argv.length;
+
+ if (clone || typeOf(result) !== 'object')
+
+ result = {};
+
+ for (var index=0;index<size;++index) {
+
+ var item = argv[index],
+
+ type = typeOf(item);
+
+ if (type !== 'object') continue;
+
+ for (var key in item) {
+
+ if (key === '__proto__') continue;
+
+ var sitem = clone ? Public.clone(item[key]) : item[key];
+
+ if (recursive) {
+
+ result[key] = merge_recursive(result[key], sitem);
+
+ } else {
+
+ result[key] = sitem;
+
+ }
+
+ }
+
+ }
+
+ return result;
+
+ }
+
+ /**
+ * Get type of variable
+ * @param mixed input
+ * @return string
+ *
+ * @see http://jsperf.com/typeofvar
+ */
+
+ function typeOf(input) {
+
+ return ({}).toString.call(input).slice(8, -1).toLowerCase();
+
+ }
+
+ if (isNode) {
+
+ module.exports = Public;
+
+ } else {
+
+ window[publicName] = Public;
+
+ }
+
+})(typeof module === 'object' && module && typeof module.exports === 'object' && module.exports); \ No newline at end of file