.
This commit is contained in:
		
							
								
								
									
										7
									
								
								qwen/nodejs/node_modules/deepmerge/.editorconfig
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								qwen/nodejs/node_modules/deepmerge/.editorconfig
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
root = true
 | 
			
		||||
 | 
			
		||||
[*]
 | 
			
		||||
indent_style = tab
 | 
			
		||||
end_of_line = lf
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
							
								
								
									
										1
									
								
								qwen/nodejs/node_modules/deepmerge/.eslintcache
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								qwen/nodejs/node_modules/deepmerge/.eslintcache
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
[{"/Users/joshduff/code/deepmerge/test/custom-is-mergeable-object.js":"1"},{"size":1990,"mtime":1679007485753,"results":"2","hashOfConfig":"3"},{"filePath":"4","messages":"5","suppressedMessages":"6","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"ktjd5k","/Users/joshduff/code/deepmerge/test/custom-is-mergeable-object.js",[],[]]
 | 
			
		||||
							
								
								
									
										167
									
								
								qwen/nodejs/node_modules/deepmerge/changelog.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								qwen/nodejs/node_modules/deepmerge/changelog.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
			
		||||
# [4.3.1](https://github.com/TehShrike/deepmerge/releases/tag/v4.3.1)
 | 
			
		||||
 | 
			
		||||
- Fix type definition for arrayMerge options.  [#239](https://github.com/TehShrike/deepmerge/pull/239)
 | 
			
		||||
 | 
			
		||||
# [4.3.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.3.0)
 | 
			
		||||
 | 
			
		||||
- Avoid thrown errors if the target doesn't have `propertyIsEnumerable`.  [#252](https://github.com/TehShrike/deepmerge/pull/252)
 | 
			
		||||
 | 
			
		||||
# [4.2.2](https://github.com/TehShrike/deepmerge/releases/tag/v4.2.2)
 | 
			
		||||
 | 
			
		||||
- `isMergeableObject` is now only called if there are two values that could be merged.  [a34dd4d2](https://github.com/TehShrike/deepmerge/commit/a34dd4d25bf5e250653540a2022bc832c7b00a19)
 | 
			
		||||
 | 
			
		||||
# [4.2.1](https://github.com/TehShrike/deepmerge/releases/tag/v4.2.1)
 | 
			
		||||
 | 
			
		||||
- Fix: falsey values can now be merged.  [#170](https://github.com/TehShrike/deepmerge/issues/170)
 | 
			
		||||
 | 
			
		||||
# [4.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.2.0)
 | 
			
		||||
 | 
			
		||||
- Properties are now only overwritten if they exist on the target object and are enumerable.  [#164](https://github.com/TehShrike/deepmerge/pull/164)
 | 
			
		||||
 | 
			
		||||
Technically this could probably be a patch release since "which properties get overwritten" wasn't documented and accidentally overwriting a built-in function or some function up the property chain would almost certainly be undesirable, but it feels like a gray area, so here we are with a feature version bump.
 | 
			
		||||
 | 
			
		||||
# [4.1.2](https://github.com/TehShrike/deepmerge/releases/tag/v4.1.2)
 | 
			
		||||
 | 
			
		||||
- Rolled back #167 since `Object.assign` breaks ES5 support.  [55067352](https://github.com/TehShrike/deepmerge/commit/55067352a92c65a6c44a5165f3387720aae1e192)
 | 
			
		||||
 | 
			
		||||
# [4.1.1](https://github.com/TehShrike/deepmerge/releases/tag/v4.1.1)
 | 
			
		||||
 | 
			
		||||
- The `options` argument is no longer mutated [#167](https://github.com/TehShrike/deepmerge/pull/167)
 | 
			
		||||
 | 
			
		||||
# [4.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.1.0)
 | 
			
		||||
 | 
			
		||||
- `cloneUnlessOtherwiseSpecified` is now exposed to the `arrayMerge` function [#165](https://github.com/TehShrike/deepmerge/pull/165)
 | 
			
		||||
 | 
			
		||||
# [4.0.0](https://github.com/TehShrike/deepmerge/releases/tag/v4.0.0)
 | 
			
		||||
 | 
			
		||||
- The `main` entry point in `package.json` is now a CommonJS module instead of a UMD module [#155](https://github.com/TehShrike/deepmerge/pull/155)
 | 
			
		||||
 | 
			
		||||
# [3.3.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.3.0)
 | 
			
		||||
 | 
			
		||||
- Enumerable Symbol properties are now copied [#151](https://github.com/TehShrike/deepmerge/pull/151)
 | 
			
		||||
 | 
			
		||||
# [3.2.1](https://github.com/TehShrike/deepmerge/releases/tag/v3.2.1)
 | 
			
		||||
 | 
			
		||||
- bumping dev dependency versions to try to shut up bogus security warnings from Github/npm [#149](https://github.com/TehShrike/deepmerge/pull/149)
 | 
			
		||||
 | 
			
		||||
# [3.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.2.0)
 | 
			
		||||
 | 
			
		||||
- feature: added the [`customMerge`](https://github.com/TehShrike/deepmerge#custommerge) option [#133](https://github.com/TehShrike/deepmerge/pull/133)
 | 
			
		||||
 | 
			
		||||
# [3.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.1.0)
 | 
			
		||||
 | 
			
		||||
- typescript typing: make the `all` function generic [#129](https://github.com/TehShrike/deepmerge/pull/129)
 | 
			
		||||
 | 
			
		||||
# [3.0.0](https://github.com/TehShrike/deepmerge/releases/tag/v3.0.0)
 | 
			
		||||
 | 
			
		||||
- drop ES module build [#123](https://github.com/TehShrike/deepmerge/issues/123)
 | 
			
		||||
 | 
			
		||||
# [2.2.1](https://github.com/TehShrike/deepmerge/releases/tag/v2.2.1)
 | 
			
		||||
 | 
			
		||||
- bug: typescript export type was wrong [#121](https://github.com/TehShrike/deepmerge/pull/121)
 | 
			
		||||
 | 
			
		||||
# [2.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v2.2.0)
 | 
			
		||||
 | 
			
		||||
- feature: added TypeScript typings [#119](https://github.com/TehShrike/deepmerge/pull/119)
 | 
			
		||||
 | 
			
		||||
# [2.1.1](https://github.com/TehShrike/deepmerge/releases/tag/v2.1.1)
 | 
			
		||||
 | 
			
		||||
- documentation: Rename "methods" to "api", note ESM syntax [#103](https://github.com/TehShrike/deepmerge/pull/103)
 | 
			
		||||
- documentation: Fix grammar [#107](https://github.com/TehShrike/deepmerge/pull/107)
 | 
			
		||||
- documentation: Restructure headers for clarity + some wording tweaks [108](https://github.com/TehShrike/deepmerge/pull/108) + [109](https://github.com/TehShrike/deepmerge/pull/109)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# [2.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v2.1.0)
 | 
			
		||||
 | 
			
		||||
- feature: Support a custom `isMergeableObject` function [#96](https://github.com/TehShrike/deepmerge/pull/96)
 | 
			
		||||
- documentation: note a Webpack bug that some users might need to work around [#100](https://github.com/TehShrike/deepmerge/pull/100)
 | 
			
		||||
 | 
			
		||||
# [2.0.1](https://github.com/TehShrike/deepmerge/releases/tag/v2.0.1)
 | 
			
		||||
 | 
			
		||||
- documentation: fix the old array merge algorithm in the readme.  [#84](https://github.com/TehShrike/deepmerge/pull/84)
 | 
			
		||||
 | 
			
		||||
# [2.0.0](https://github.com/TehShrike/deepmerge/releases/tag/v2.0.0)
 | 
			
		||||
 | 
			
		||||
- breaking: the array merge algorithm has changed from a complicated thing to `target.concat(source).map(element => cloneUnlessOtherwiseSpecified(element, optionsArgument))`
 | 
			
		||||
- breaking: The `clone` option now defaults to `true`
 | 
			
		||||
- feature: `merge.all` now accepts an array of any size, even 0 or 1 elements
 | 
			
		||||
 | 
			
		||||
See [pull request 77](https://github.com/TehShrike/deepmerge/pull/77).
 | 
			
		||||
 | 
			
		||||
# [1.5.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.5.2)
 | 
			
		||||
 | 
			
		||||
- fix: no longer attempts to merge React elements [#76](https://github.com/TehShrike/deepmerge/issues/76)
 | 
			
		||||
 | 
			
		||||
# [1.5.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.5.1)
 | 
			
		||||
 | 
			
		||||
- bower support: officially dropping bower support.  If you use bower, please depend on the [unpkg distribution](https://unpkg.com/deepmerge/dist/umd.js).  See [#63](https://github.com/TehShrike/deepmerge/issues/63)
 | 
			
		||||
 | 
			
		||||
# [1.5.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.5.0)
 | 
			
		||||
 | 
			
		||||
- bug fix: merging objects into arrays was allowed, and doesn't make any sense. [#65](https://github.com/TehShrike/deepmerge/issues/65) published as a feature release instead of a patch because it is a decent behavior change.
 | 
			
		||||
 | 
			
		||||
# [1.4.4](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.4)
 | 
			
		||||
 | 
			
		||||
- bower support: updated `main` in bower.json
 | 
			
		||||
 | 
			
		||||
# [1.4.3](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.3)
 | 
			
		||||
 | 
			
		||||
- bower support: inline is-mergeable-object in a new CommonJS build, so that people using both bower and CommonJS can bundle the library [0b34e6](https://github.com/TehShrike/deepmerge/commit/0b34e6e95f989f2fc8091d25f0d291c08f3d2d24)
 | 
			
		||||
 | 
			
		||||
# [1.4.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.2)
 | 
			
		||||
 | 
			
		||||
- performance: bump is-mergeable-object dependency version for a slight performance improvement [5906c7](https://github.com/TehShrike/deepmerge/commit/5906c765d691d48e83d76efbb0d4b9ca150dc12c)
 | 
			
		||||
 | 
			
		||||
# [1.4.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.1)
 | 
			
		||||
 | 
			
		||||
- documentation: fix unpkg link [acc45b](https://github.com/TehShrike/deepmerge/commit/acc45be85519c1df906a72ecb24764b622d18d47)
 | 
			
		||||
 | 
			
		||||
# [1.4.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.4.0)
 | 
			
		||||
 | 
			
		||||
- api: instead of only exporting a UMD module, expose a UMD module with `pkg.main`, a CJS module with `pkg.browser`, and an ES module with `pkg.module` [#62](https://github.com/TehShrike/deepmerge/pull/62)
 | 
			
		||||
 | 
			
		||||
# [1.3.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.3.2)
 | 
			
		||||
 | 
			
		||||
- documentation: note the minified/gzipped file sizes [56](https://github.com/TehShrike/deepmerge/pull/56)
 | 
			
		||||
- documentation: make data structures more readable in merge example: pull request [57](https://github.com/TehShrike/deepmerge/pull/57)
 | 
			
		||||
 | 
			
		||||
# [1.3.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.3.1)
 | 
			
		||||
 | 
			
		||||
- documentation: clarify and test some array merging documentation: pull request [51](https://github.com/TehShrike/deepmerge/pull/51)
 | 
			
		||||
 | 
			
		||||
# [1.3.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.3.0)
 | 
			
		||||
 | 
			
		||||
- feature: `merge.all`, a merge function that merges any number of objects: pull request [50](https://github.com/TehShrike/deepmerge/pull/50)
 | 
			
		||||
 | 
			
		||||
# [1.2.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.2.0)
 | 
			
		||||
 | 
			
		||||
- fix: an error that would be thrown when an array would be merged onto a truthy non-array value: pull request [46](https://github.com/TehShrike/deepmerge/pull/46)
 | 
			
		||||
- feature: the ability to clone: Issue [28](https://github.com/TehShrike/deepmerge/issues/28), pull requests [44](https://github.com/TehShrike/deepmerge/pull/44) and [48](https://github.com/TehShrike/deepmerge/pull/48)
 | 
			
		||||
- maintenance: added tests + travis to `.npmignore`: pull request [47](https://github.com/TehShrike/deepmerge/pull/47)
 | 
			
		||||
 | 
			
		||||
# [1.1.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.1.1)
 | 
			
		||||
 | 
			
		||||
- fix an issue where an error was thrown when merging an array onto a non-array: [Pull request 46](https://github.com/TehShrike/deepmerge/pull/46)
 | 
			
		||||
 | 
			
		||||
# [1.1.0](https://github.com/TehShrike/deepmerge/releases/tag/v1.1.0)
 | 
			
		||||
 | 
			
		||||
- allow consumers to specify their own array merging algorithm: [Pull request 37](https://github.com/TehShrike/deepmerge/pull/37)
 | 
			
		||||
 | 
			
		||||
# [1.0.3](https://github.com/TehShrike/deepmerge/releases/tag/v1.0.3)
 | 
			
		||||
 | 
			
		||||
- adding bower.json back: [Issue 38](https://github.com/TehShrike/deepmerge/pull/38)
 | 
			
		||||
- updating keywords and Github links in package.json [bc3898e](https://github.com/TehShrike/deepmerge/commit/bc3898e587a56f74591328f40f656b0152c1d5eb)
 | 
			
		||||
 | 
			
		||||
# [1.0.2](https://github.com/TehShrike/deepmerge/releases/tag/v1.0.2)
 | 
			
		||||
 | 
			
		||||
- Updating the readme: dropping bower, testing that the example works: [7102fc](https://github.com/TehShrike/deepmerge/commit/7102fcc4ddec11e2d33205866f9f18df14e5aeb5)
 | 
			
		||||
 | 
			
		||||
# [1.0.1](https://github.com/TehShrike/deepmerge/releases/tag/v1.0.1)
 | 
			
		||||
 | 
			
		||||
- `null`, dates, and regular expressions are now properly merged in arrays: [Issue 18](https://github.com/TehShrike/deepmerge/pull/18), plus commit: [ef1c6b](https://github.com/TehShrike/deepmerge/commit/ef1c6bac8350ba12a24966f0bc7da02560827586)
 | 
			
		||||
 | 
			
		||||
# 1.0.0
 | 
			
		||||
 | 
			
		||||
- Should only be a patch change, because this module is READY. [Issue 15](https://github.com/TehShrike/deepmerge/issues/15)
 | 
			
		||||
- Regular expressions are now treated like primitive values when merging: [Issue 30](https://github.com/TehShrike/deepmerge/pull/30)
 | 
			
		||||
- Dates are now treated like primitives when merging: [Issue 31](https://github.com/TehShrike/deepmerge/issues/31)
 | 
			
		||||
							
								
								
									
										133
									
								
								qwen/nodejs/node_modules/deepmerge/dist/cjs.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								qwen/nodejs/node_modules/deepmerge/dist/cjs.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,133 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var isMergeableObject = function isMergeableObject(value) {
 | 
			
		||||
	return isNonNullObject(value)
 | 
			
		||||
		&& !isSpecial(value)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function isNonNullObject(value) {
 | 
			
		||||
	return !!value && typeof value === 'object'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isSpecial(value) {
 | 
			
		||||
	var stringValue = Object.prototype.toString.call(value);
 | 
			
		||||
 | 
			
		||||
	return stringValue === '[object RegExp]'
 | 
			
		||||
		|| stringValue === '[object Date]'
 | 
			
		||||
		|| isReactElement(value)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25
 | 
			
		||||
var canUseSymbol = typeof Symbol === 'function' && Symbol.for;
 | 
			
		||||
var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;
 | 
			
		||||
 | 
			
		||||
function isReactElement(value) {
 | 
			
		||||
	return value.$$typeof === REACT_ELEMENT_TYPE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function emptyTarget(val) {
 | 
			
		||||
	return Array.isArray(val) ? [] : {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function cloneUnlessOtherwiseSpecified(value, options) {
 | 
			
		||||
	return (options.clone !== false && options.isMergeableObject(value))
 | 
			
		||||
		? deepmerge(emptyTarget(value), value, options)
 | 
			
		||||
		: value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function defaultArrayMerge(target, source, options) {
 | 
			
		||||
	return target.concat(source).map(function(element) {
 | 
			
		||||
		return cloneUnlessOtherwiseSpecified(element, options)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getMergeFunction(key, options) {
 | 
			
		||||
	if (!options.customMerge) {
 | 
			
		||||
		return deepmerge
 | 
			
		||||
	}
 | 
			
		||||
	var customMerge = options.customMerge(key);
 | 
			
		||||
	return typeof customMerge === 'function' ? customMerge : deepmerge
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getEnumerableOwnPropertySymbols(target) {
 | 
			
		||||
	return Object.getOwnPropertySymbols
 | 
			
		||||
		? Object.getOwnPropertySymbols(target).filter(function(symbol) {
 | 
			
		||||
			return Object.propertyIsEnumerable.call(target, symbol)
 | 
			
		||||
		})
 | 
			
		||||
		: []
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getKeys(target) {
 | 
			
		||||
	return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function propertyIsOnObject(object, property) {
 | 
			
		||||
	try {
 | 
			
		||||
		return property in object
 | 
			
		||||
	} catch(_) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Protects from prototype poisoning and unexpected merging up the prototype chain.
 | 
			
		||||
function propertyIsUnsafe(target, key) {
 | 
			
		||||
	return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,
 | 
			
		||||
		&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,
 | 
			
		||||
			&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mergeObject(target, source, options) {
 | 
			
		||||
	var destination = {};
 | 
			
		||||
	if (options.isMergeableObject(target)) {
 | 
			
		||||
		getKeys(target).forEach(function(key) {
 | 
			
		||||
			destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
	getKeys(source).forEach(function(key) {
 | 
			
		||||
		if (propertyIsUnsafe(target, key)) {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
 | 
			
		||||
			destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
 | 
			
		||||
		} else {
 | 
			
		||||
			destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	return destination
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function deepmerge(target, source, options) {
 | 
			
		||||
	options = options || {};
 | 
			
		||||
	options.arrayMerge = options.arrayMerge || defaultArrayMerge;
 | 
			
		||||
	options.isMergeableObject = options.isMergeableObject || isMergeableObject;
 | 
			
		||||
	// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
 | 
			
		||||
	// implementations can use it. The caller may not replace it.
 | 
			
		||||
	options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;
 | 
			
		||||
 | 
			
		||||
	var sourceIsArray = Array.isArray(source);
 | 
			
		||||
	var targetIsArray = Array.isArray(target);
 | 
			
		||||
	var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
 | 
			
		||||
 | 
			
		||||
	if (!sourceAndTargetTypesMatch) {
 | 
			
		||||
		return cloneUnlessOtherwiseSpecified(source, options)
 | 
			
		||||
	} else if (sourceIsArray) {
 | 
			
		||||
		return options.arrayMerge(target, source, options)
 | 
			
		||||
	} else {
 | 
			
		||||
		return mergeObject(target, source, options)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
deepmerge.all = function deepmergeAll(array, options) {
 | 
			
		||||
	if (!Array.isArray(array)) {
 | 
			
		||||
		throw new Error('first argument should be an array')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return array.reduce(function(prev, next) {
 | 
			
		||||
		return deepmerge(prev, next, options)
 | 
			
		||||
	}, {})
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var deepmerge_1 = deepmerge;
 | 
			
		||||
 | 
			
		||||
module.exports = deepmerge_1;
 | 
			
		||||
							
								
								
									
										139
									
								
								qwen/nodejs/node_modules/deepmerge/dist/umd.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								qwen/nodejs/node_modules/deepmerge/dist/umd.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,139 @@
 | 
			
		||||
(function (global, factory) {
 | 
			
		||||
	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
 | 
			
		||||
	typeof define === 'function' && define.amd ? define(factory) :
 | 
			
		||||
	(global = global || self, global.deepmerge = factory());
 | 
			
		||||
}(this, function () { 'use strict';
 | 
			
		||||
 | 
			
		||||
	var isMergeableObject = function isMergeableObject(value) {
 | 
			
		||||
		return isNonNullObject(value)
 | 
			
		||||
			&& !isSpecial(value)
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	function isNonNullObject(value) {
 | 
			
		||||
		return !!value && typeof value === 'object'
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function isSpecial(value) {
 | 
			
		||||
		var stringValue = Object.prototype.toString.call(value);
 | 
			
		||||
 | 
			
		||||
		return stringValue === '[object RegExp]'
 | 
			
		||||
			|| stringValue === '[object Date]'
 | 
			
		||||
			|| isReactElement(value)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25
 | 
			
		||||
	var canUseSymbol = typeof Symbol === 'function' && Symbol.for;
 | 
			
		||||
	var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;
 | 
			
		||||
 | 
			
		||||
	function isReactElement(value) {
 | 
			
		||||
		return value.$$typeof === REACT_ELEMENT_TYPE
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function emptyTarget(val) {
 | 
			
		||||
		return Array.isArray(val) ? [] : {}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function cloneUnlessOtherwiseSpecified(value, options) {
 | 
			
		||||
		return (options.clone !== false && options.isMergeableObject(value))
 | 
			
		||||
			? deepmerge(emptyTarget(value), value, options)
 | 
			
		||||
			: value
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function defaultArrayMerge(target, source, options) {
 | 
			
		||||
		return target.concat(source).map(function(element) {
 | 
			
		||||
			return cloneUnlessOtherwiseSpecified(element, options)
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function getMergeFunction(key, options) {
 | 
			
		||||
		if (!options.customMerge) {
 | 
			
		||||
			return deepmerge
 | 
			
		||||
		}
 | 
			
		||||
		var customMerge = options.customMerge(key);
 | 
			
		||||
		return typeof customMerge === 'function' ? customMerge : deepmerge
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function getEnumerableOwnPropertySymbols(target) {
 | 
			
		||||
		return Object.getOwnPropertySymbols
 | 
			
		||||
			? Object.getOwnPropertySymbols(target).filter(function(symbol) {
 | 
			
		||||
				return Object.propertyIsEnumerable.call(target, symbol)
 | 
			
		||||
			})
 | 
			
		||||
			: []
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function getKeys(target) {
 | 
			
		||||
		return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function propertyIsOnObject(object, property) {
 | 
			
		||||
		try {
 | 
			
		||||
			return property in object
 | 
			
		||||
		} catch(_) {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Protects from prototype poisoning and unexpected merging up the prototype chain.
 | 
			
		||||
	function propertyIsUnsafe(target, key) {
 | 
			
		||||
		return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,
 | 
			
		||||
			&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,
 | 
			
		||||
				&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function mergeObject(target, source, options) {
 | 
			
		||||
		var destination = {};
 | 
			
		||||
		if (options.isMergeableObject(target)) {
 | 
			
		||||
			getKeys(target).forEach(function(key) {
 | 
			
		||||
				destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
		getKeys(source).forEach(function(key) {
 | 
			
		||||
			if (propertyIsUnsafe(target, key)) {
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
 | 
			
		||||
				destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
 | 
			
		||||
			} else {
 | 
			
		||||
				destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
		return destination
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function deepmerge(target, source, options) {
 | 
			
		||||
		options = options || {};
 | 
			
		||||
		options.arrayMerge = options.arrayMerge || defaultArrayMerge;
 | 
			
		||||
		options.isMergeableObject = options.isMergeableObject || isMergeableObject;
 | 
			
		||||
		// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
 | 
			
		||||
		// implementations can use it. The caller may not replace it.
 | 
			
		||||
		options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;
 | 
			
		||||
 | 
			
		||||
		var sourceIsArray = Array.isArray(source);
 | 
			
		||||
		var targetIsArray = Array.isArray(target);
 | 
			
		||||
		var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
 | 
			
		||||
 | 
			
		||||
		if (!sourceAndTargetTypesMatch) {
 | 
			
		||||
			return cloneUnlessOtherwiseSpecified(source, options)
 | 
			
		||||
		} else if (sourceIsArray) {
 | 
			
		||||
			return options.arrayMerge(target, source, options)
 | 
			
		||||
		} else {
 | 
			
		||||
			return mergeObject(target, source, options)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	deepmerge.all = function deepmergeAll(array, options) {
 | 
			
		||||
		if (!Array.isArray(array)) {
 | 
			
		||||
			throw new Error('first argument should be an array')
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return array.reduce(function(prev, next) {
 | 
			
		||||
			return deepmerge(prev, next, options)
 | 
			
		||||
		}, {})
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	var deepmerge_1 = deepmerge;
 | 
			
		||||
 | 
			
		||||
	return deepmerge_1;
 | 
			
		||||
 | 
			
		||||
}));
 | 
			
		||||
							
								
								
									
										20
									
								
								qwen/nodejs/node_modules/deepmerge/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								qwen/nodejs/node_modules/deepmerge/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
declare function deepmerge<T>(x: Partial<T>, y: Partial<T>, options?: deepmerge.Options): T;
 | 
			
		||||
declare function deepmerge<T1, T2>(x: Partial<T1>, y: Partial<T2>, options?: deepmerge.Options): T1 & T2;
 | 
			
		||||
 | 
			
		||||
declare namespace deepmerge {
 | 
			
		||||
	export interface Options {
 | 
			
		||||
		arrayMerge?(target: any[], source: any[], options?: ArrayMergeOptions): any[];
 | 
			
		||||
		clone?: boolean;
 | 
			
		||||
		customMerge?: (key: string, options?: Options) => ((x: any, y: any) => any) | undefined;
 | 
			
		||||
		isMergeableObject?(value: object): boolean;
 | 
			
		||||
	}
 | 
			
		||||
	export interface ArrayMergeOptions {
 | 
			
		||||
		isMergeableObject(value: object): boolean;
 | 
			
		||||
		cloneUnlessOtherwiseSpecified(value: object, options?: Options): object;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	export function all (objects: object[], options?: Options): object;
 | 
			
		||||
	export function all<T> (objects: Partial<T>[], options?: Options): T;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export = deepmerge;
 | 
			
		||||
							
								
								
									
										106
									
								
								qwen/nodejs/node_modules/deepmerge/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								qwen/nodejs/node_modules/deepmerge/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
var defaultIsMergeableObject = require('is-mergeable-object')
 | 
			
		||||
 | 
			
		||||
function emptyTarget(val) {
 | 
			
		||||
	return Array.isArray(val) ? [] : {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function cloneUnlessOtherwiseSpecified(value, options) {
 | 
			
		||||
	return (options.clone !== false && options.isMergeableObject(value))
 | 
			
		||||
		? deepmerge(emptyTarget(value), value, options)
 | 
			
		||||
		: value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function defaultArrayMerge(target, source, options) {
 | 
			
		||||
	return target.concat(source).map(function(element) {
 | 
			
		||||
		return cloneUnlessOtherwiseSpecified(element, options)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getMergeFunction(key, options) {
 | 
			
		||||
	if (!options.customMerge) {
 | 
			
		||||
		return deepmerge
 | 
			
		||||
	}
 | 
			
		||||
	var customMerge = options.customMerge(key)
 | 
			
		||||
	return typeof customMerge === 'function' ? customMerge : deepmerge
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getEnumerableOwnPropertySymbols(target) {
 | 
			
		||||
	return Object.getOwnPropertySymbols
 | 
			
		||||
		? Object.getOwnPropertySymbols(target).filter(function(symbol) {
 | 
			
		||||
			return Object.propertyIsEnumerable.call(target, symbol)
 | 
			
		||||
		})
 | 
			
		||||
		: []
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getKeys(target) {
 | 
			
		||||
	return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function propertyIsOnObject(object, property) {
 | 
			
		||||
	try {
 | 
			
		||||
		return property in object
 | 
			
		||||
	} catch(_) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Protects from prototype poisoning and unexpected merging up the prototype chain.
 | 
			
		||||
function propertyIsUnsafe(target, key) {
 | 
			
		||||
	return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,
 | 
			
		||||
		&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,
 | 
			
		||||
			&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mergeObject(target, source, options) {
 | 
			
		||||
	var destination = {}
 | 
			
		||||
	if (options.isMergeableObject(target)) {
 | 
			
		||||
		getKeys(target).forEach(function(key) {
 | 
			
		||||
			destination[key] = cloneUnlessOtherwiseSpecified(target[key], options)
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	getKeys(source).forEach(function(key) {
 | 
			
		||||
		if (propertyIsUnsafe(target, key)) {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
 | 
			
		||||
			destination[key] = getMergeFunction(key, options)(target[key], source[key], options)
 | 
			
		||||
		} else {
 | 
			
		||||
			destination[key] = cloneUnlessOtherwiseSpecified(source[key], options)
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
	return destination
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function deepmerge(target, source, options) {
 | 
			
		||||
	options = options || {}
 | 
			
		||||
	options.arrayMerge = options.arrayMerge || defaultArrayMerge
 | 
			
		||||
	options.isMergeableObject = options.isMergeableObject || defaultIsMergeableObject
 | 
			
		||||
	// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
 | 
			
		||||
	// implementations can use it. The caller may not replace it.
 | 
			
		||||
	options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified
 | 
			
		||||
 | 
			
		||||
	var sourceIsArray = Array.isArray(source)
 | 
			
		||||
	var targetIsArray = Array.isArray(target)
 | 
			
		||||
	var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray
 | 
			
		||||
 | 
			
		||||
	if (!sourceAndTargetTypesMatch) {
 | 
			
		||||
		return cloneUnlessOtherwiseSpecified(source, options)
 | 
			
		||||
	} else if (sourceIsArray) {
 | 
			
		||||
		return options.arrayMerge(target, source, options)
 | 
			
		||||
	} else {
 | 
			
		||||
		return mergeObject(target, source, options)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
deepmerge.all = function deepmergeAll(array, options) {
 | 
			
		||||
	if (!Array.isArray(array)) {
 | 
			
		||||
		throw new Error('first argument should be an array')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return array.reduce(function(prev, next) {
 | 
			
		||||
		return deepmerge(prev, next, options)
 | 
			
		||||
	}, {})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = deepmerge
 | 
			
		||||
							
								
								
									
										21
									
								
								qwen/nodejs/node_modules/deepmerge/license.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								qwen/nodejs/node_modules/deepmerge/license.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2012 James Halliday, Josh Duff, and other 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.
 | 
			
		||||
							
								
								
									
										42
									
								
								qwen/nodejs/node_modules/deepmerge/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								qwen/nodejs/node_modules/deepmerge/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "deepmerge",
 | 
			
		||||
  "description": "A library for deep (recursive) merging of Javascript objects",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "merge",
 | 
			
		||||
    "deep",
 | 
			
		||||
    "extend",
 | 
			
		||||
    "copy",
 | 
			
		||||
    "clone",
 | 
			
		||||
    "recursive"
 | 
			
		||||
  ],
 | 
			
		||||
  "version": "4.3.1",
 | 
			
		||||
  "homepage": "https://github.com/TehShrike/deepmerge",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git://github.com/TehShrike/deepmerge.git"
 | 
			
		||||
  },
 | 
			
		||||
  "main": "dist/cjs.js",
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": ">=0.10.0"
 | 
			
		||||
  },
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "build": "rollup -c",
 | 
			
		||||
    "test": "npm run build && tape test/*.js && jsmd readme.md && npm run test:typescript",
 | 
			
		||||
    "test:typescript": "tsc --noEmit test/typescript.ts && ts-node test/typescript.ts",
 | 
			
		||||
    "size": "npm run build && uglifyjs --compress --mangle -- ./dist/umd.js | gzip -c | wc -c"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/node": "^8.10.54",
 | 
			
		||||
    "is-mergeable-object": "1.1.0",
 | 
			
		||||
    "is-plain-object": "^5.0.0",
 | 
			
		||||
    "jsmd": "^1.0.2",
 | 
			
		||||
    "rollup": "^1.23.1",
 | 
			
		||||
    "rollup-plugin-commonjs": "^10.1.0",
 | 
			
		||||
    "rollup-plugin-node-resolve": "^5.2.0",
 | 
			
		||||
    "tape": "^4.11.0",
 | 
			
		||||
    "ts-node": "7.0.1",
 | 
			
		||||
    "typescript": "=2.2.2",
 | 
			
		||||
    "uglify-js": "^3.6.1"
 | 
			
		||||
  },
 | 
			
		||||
  "license": "MIT"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										264
									
								
								qwen/nodejs/node_modules/deepmerge/readme.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								qwen/nodejs/node_modules/deepmerge/readme.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,264 @@
 | 
			
		||||
# deepmerge
 | 
			
		||||
 | 
			
		||||
Merges the enumerable properties of two or more objects deeply.
 | 
			
		||||
 | 
			
		||||
> UMD bundle is 723B minified+gzipped
 | 
			
		||||
 | 
			
		||||
## Getting Started
 | 
			
		||||
 | 
			
		||||
### Example Usage
 | 
			
		||||
<!--js
 | 
			
		||||
const merge = require('./')
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const x = {
 | 
			
		||||
	foo: { bar: 3 },
 | 
			
		||||
	array: [{
 | 
			
		||||
		does: 'work',
 | 
			
		||||
		too: [ 1, 2, 3 ]
 | 
			
		||||
	}]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const y = {
 | 
			
		||||
	foo: { baz: 4 },
 | 
			
		||||
	quux: 5,
 | 
			
		||||
	array: [{
 | 
			
		||||
		does: 'work',
 | 
			
		||||
		too: [ 4, 5, 6 ]
 | 
			
		||||
	}, {
 | 
			
		||||
		really: 'yes'
 | 
			
		||||
	}]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const output = {
 | 
			
		||||
	foo: {
 | 
			
		||||
		bar: 3,
 | 
			
		||||
		baz: 4
 | 
			
		||||
	},
 | 
			
		||||
	array: [{
 | 
			
		||||
		does: 'work',
 | 
			
		||||
		too: [ 1, 2, 3 ]
 | 
			
		||||
	}, {
 | 
			
		||||
		does: 'work',
 | 
			
		||||
		too: [ 4, 5, 6 ]
 | 
			
		||||
	}, {
 | 
			
		||||
		really: 'yes'
 | 
			
		||||
	}],
 | 
			
		||||
	quux: 5
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
merge(x, y) // => output
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Installation
 | 
			
		||||
 | 
			
		||||
With [npm](http://npmjs.org) do:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
npm install deepmerge
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
deepmerge can be used directly in the browser without the use of package managers/bundlers as well:  [UMD version from unpkg.com](https://unpkg.com/deepmerge/dist/umd.js).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Include
 | 
			
		||||
 | 
			
		||||
deepmerge exposes a CommonJS entry point:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
const merge = require('deepmerge')
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The ESM entry point was dropped due to a [Webpack bug](https://github.com/webpack/webpack/issues/6584).
 | 
			
		||||
 | 
			
		||||
# API
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## `merge(x, y, [options])`
 | 
			
		||||
 | 
			
		||||
Merge two objects `x` and `y` deeply, returning a new merged object with the
 | 
			
		||||
elements from both `x` and `y`.
 | 
			
		||||
 | 
			
		||||
If an element at the same key is present for both `x` and `y`, the value from
 | 
			
		||||
`y` will appear in the result.
 | 
			
		||||
 | 
			
		||||
Merging creates a new object, so that neither `x` or `y` is modified.
 | 
			
		||||
 | 
			
		||||
**Note:** By default, arrays are merged by concatenating them.
 | 
			
		||||
 | 
			
		||||
## `merge.all(arrayOfObjects, [options])`
 | 
			
		||||
 | 
			
		||||
Merges any number of objects into a single result object.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const foobar = { foo: { bar: 3 } }
 | 
			
		||||
const foobaz = { foo: { baz: 4 } }
 | 
			
		||||
const bar = { bar: 'yay!' }
 | 
			
		||||
 | 
			
		||||
merge.all([ foobar, foobaz, bar ]) // => { foo: { bar: 3, baz: 4 }, bar: 'yay!' }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Options
 | 
			
		||||
 | 
			
		||||
### `arrayMerge`
 | 
			
		||||
 | 
			
		||||
There are multiple ways to merge two arrays, below are a few examples but you can also create your own custom function.
 | 
			
		||||
 | 
			
		||||
Your `arrayMerge` function will be called with three arguments: a `target` array, the `source` array, and an `options` object with these properties:
 | 
			
		||||
 | 
			
		||||
- `isMergeableObject(value)`
 | 
			
		||||
- `cloneUnlessOtherwiseSpecified(value, options)`
 | 
			
		||||
 | 
			
		||||
#### `arrayMerge` example: overwrite target array
 | 
			
		||||
 | 
			
		||||
Overwrites the existing array values completely rather than concatenating them:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const overwriteMerge = (destinationArray, sourceArray, options) => sourceArray
 | 
			
		||||
 | 
			
		||||
merge(
 | 
			
		||||
	[1, 2, 3],
 | 
			
		||||
	[3, 2, 1],
 | 
			
		||||
	{ arrayMerge: overwriteMerge }
 | 
			
		||||
) // => [3, 2, 1]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### `arrayMerge` example: combine arrays
 | 
			
		||||
 | 
			
		||||
Combines objects at the same index in the two arrays.
 | 
			
		||||
 | 
			
		||||
This was the default array merging algorithm pre-version-2.0.0.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const combineMerge = (target, source, options) => {
 | 
			
		||||
	const destination = target.slice()
 | 
			
		||||
 | 
			
		||||
	source.forEach((item, index) => {
 | 
			
		||||
		if (typeof destination[index] === 'undefined') {
 | 
			
		||||
			destination[index] = options.cloneUnlessOtherwiseSpecified(item, options)
 | 
			
		||||
		} else if (options.isMergeableObject(item)) {
 | 
			
		||||
			destination[index] = merge(target[index], item, options)
 | 
			
		||||
		} else if (target.indexOf(item) === -1) {
 | 
			
		||||
			destination.push(item)
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
	return destination
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
merge(
 | 
			
		||||
	[{ a: true }],
 | 
			
		||||
	[{ b: true }, 'ah yup'],
 | 
			
		||||
	{ arrayMerge: combineMerge }
 | 
			
		||||
) // => [{ a: true, b: true }, 'ah yup']
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### `isMergeableObject`
 | 
			
		||||
 | 
			
		||||
By default, deepmerge clones every property from almost every kind of object.
 | 
			
		||||
 | 
			
		||||
You may not want this, if your objects are of special types, and you want to copy the whole object instead of just copying its properties.
 | 
			
		||||
 | 
			
		||||
You can accomplish this by passing in a function for the `isMergeableObject` option.
 | 
			
		||||
 | 
			
		||||
If you only want to clone properties of plain objects, and ignore all "special" kinds of instantiated objects, you probably want to drop in [`is-plain-object`](https://github.com/jonschlinkert/is-plain-object).
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const { isPlainObject } = require('is-plain-object')
 | 
			
		||||
 | 
			
		||||
function SuperSpecial() {
 | 
			
		||||
	this.special = 'oh yeah man totally'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const instantiatedSpecialObject = new SuperSpecial()
 | 
			
		||||
 | 
			
		||||
const target = {
 | 
			
		||||
	someProperty: {
 | 
			
		||||
		cool: 'oh for sure'
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const source = {
 | 
			
		||||
	someProperty: instantiatedSpecialObject
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const defaultOutput = merge(target, source)
 | 
			
		||||
 | 
			
		||||
defaultOutput.someProperty.cool // => 'oh for sure'
 | 
			
		||||
defaultOutput.someProperty.special // => 'oh yeah man totally'
 | 
			
		||||
defaultOutput.someProperty instanceof SuperSpecial // => false
 | 
			
		||||
 | 
			
		||||
const customMergeOutput = merge(target, source, {
 | 
			
		||||
	isMergeableObject: isPlainObject
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
customMergeOutput.someProperty.cool // => undefined
 | 
			
		||||
customMergeOutput.someProperty.special // => 'oh yeah man totally'
 | 
			
		||||
customMergeOutput.someProperty instanceof SuperSpecial // => true
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### `customMerge`
 | 
			
		||||
 | 
			
		||||
Specifies a function which can be used to override the default merge behavior for a property, based on the property name.
 | 
			
		||||
 | 
			
		||||
The `customMerge` function will be passed the key for each property, and should return the function which should be used to merge the values for that property.
 | 
			
		||||
 | 
			
		||||
It may also return undefined, in which case the default merge behaviour will be used.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
const alex = {
 | 
			
		||||
	name: {
 | 
			
		||||
		first: 'Alex',
 | 
			
		||||
		last: 'Alexson'
 | 
			
		||||
	},
 | 
			
		||||
	pets: ['Cat', 'Parrot']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const tony = {
 | 
			
		||||
	name: {
 | 
			
		||||
		first: 'Tony',
 | 
			
		||||
		last: 'Tonison'
 | 
			
		||||
	},
 | 
			
		||||
	pets: ['Dog']
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const mergeNames = (nameA, nameB) => `${nameA.first} and ${nameB.first}`
 | 
			
		||||
 | 
			
		||||
const options = {
 | 
			
		||||
	customMerge: (key) => {
 | 
			
		||||
		if (key === 'name') {
 | 
			
		||||
			return mergeNames
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const result = merge(alex, tony, options)
 | 
			
		||||
 | 
			
		||||
result.name // => 'Alex and Tony'
 | 
			
		||||
result.pets // => ['Cat', 'Parrot', 'Dog']
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### `clone`
 | 
			
		||||
 | 
			
		||||
*Deprecated.*
 | 
			
		||||
 | 
			
		||||
Defaults to `true`.
 | 
			
		||||
 | 
			
		||||
If `clone` is `false` then child objects will be copied directly instead of being cloned.  This was the default behavior before version 2.x.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Testing
 | 
			
		||||
 | 
			
		||||
With [npm](http://npmjs.org) do:
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
npm test
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# License
 | 
			
		||||
 | 
			
		||||
MIT
 | 
			
		||||
							
								
								
									
										22
									
								
								qwen/nodejs/node_modules/deepmerge/rollup.config.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								qwen/nodejs/node_modules/deepmerge/rollup.config.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
import resolve from 'rollup-plugin-node-resolve'
 | 
			
		||||
import commonjs from 'rollup-plugin-commonjs'
 | 
			
		||||
import pkg from './package.json'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	input: `index.js`,
 | 
			
		||||
	plugins: [
 | 
			
		||||
		commonjs(),
 | 
			
		||||
		resolve(),
 | 
			
		||||
	],
 | 
			
		||||
	output: [
 | 
			
		||||
		{
 | 
			
		||||
			file: pkg.main,
 | 
			
		||||
			format: `cjs`
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: 'deepmerge',
 | 
			
		||||
			file: 'dist/umd.js',
 | 
			
		||||
			format: `umd`
 | 
			
		||||
		},
 | 
			
		||||
	],
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user