deepmerge-plus
Version:
A library for deep (recursive) merging of Javascript objects
1 lines • 11.2 kB
Source Map (JSON)
{"version":3,"file":"index.cjs.development.cjs","sources":["../src/index.ts","../src/index.cts"],"sourcesContent":["import isMergeableObject from 'is-mergeable-object';\n\nfunction emptyTarget(val)\n{\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, optionsArgument: IOptions, tmp?: ICache)\n{\n\tconst clone = !optionsArgument || optionsArgument.clone !== false;\n\n\tconst bool = clone && _isMergeableObject(value, optionsArgument, tmp);\n\n\tlet ret = (bool)\n\t\t? deepmerge(emptyTarget(value), value, optionsArgument)\n\t\t: value;\n\n\tif (optionsArgument?.keyValueOrMode && !bool && tmp && ('key' in tmp))\n\t{\n\t\tif (tmp.destination)\n\t\t{\n\t\t\t//console.log('destination', tmp.destination[tmp.key], ret, tmp.key);\n\t\t\tret = tmp.destination[tmp.key] || ret;\n\t\t}\n\n\t\tif (tmp.target)\n\t\t{\n\t\t\t//console.log('target', tmp.target[tmp.key], ret, tmp.key);\n\t\t\tret = tmp.target[tmp.key] || ret;\n\t\t}\n\n\t\tif (tmp.source)\n\t\t{\n\t\t\t//console.log('source', tmp.source[tmp.key], ret, tmp.key);\n\t\t\tret = tmp.source[tmp.key] || ret;\n\t\t}\n\t}\n\n\treturn ret;\n}\n\nexport function _isMergeableObject(value, optionsArgument: IOptions, tmp?: ICache): boolean\n{\n\tlet ret = optionsArgument?.isMergeableObject?.(value, isMergeableObject, optionsArgument, tmp) as any;\n\n\tif (ret === null || typeof ret === 'undefined')\n\t{\n\t\tif ((typeof value?.[SYMBOL_IS_MERGEABLE] == 'boolean'))\n\t\t{\n\t\t\tret = value[SYMBOL_IS_MERGEABLE];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tret = isMergeableObject(value);\n\t\t}\n\t}\n\treturn ret\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument: IOptions)\n{\n\treturn target.concat(source).map(function (element, index, array)\n\t{\n\t\treturn cloneUnlessOtherwiseSpecified(element, optionsArgument, {\n\t\t\tkey: index,\n\t\t})\n\t})\n}\n\nfunction mergeObject(target, source, optionsArgument: IOptions)\n{\n\tlet destination = {};\n\tif (_isMergeableObject(target, optionsArgument))\n\t{\n\t\tObject.keys(target).forEach(function (key)\n\t\t{\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], optionsArgument, {\n\t\t\t\tkey,\n\t\t\t\tsource,\n\t\t\t\ttarget,\n\t\t\t\tdestination,\n\t\t\t})\n\t\t})\n\t}\n\tObject.keys(source).forEach(function (key)\n\t{\n\t\tif (!_isMergeableObject(source[key], optionsArgument, {\n\t\t\t\tkey,\n\t\t\t\tsource,\n\t\t\t\ttarget,\n\t\t\t}) || !target[key])\n\t\t{\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], optionsArgument, {\n\t\t\t\tkey,\n\t\t\t\tsource,\n\t\t\t\ttarget,\n\t\t\t})\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdestination[key] = deepmerge(target[key], source[key], optionsArgument)\n\t\t}\n\t});\n\treturn destination\n}\n\nexport function deepmerge<T1, T2>(x: T1, y: T2, options?: IOptions): Partial<T1 & T2>\nexport function deepmerge<T>(x: Partial<T>, y: Partial<T>, options?: IOptions): Partial<T>\nexport function deepmerge(target, source, optionsArgument)\n{\n\tconst sourceIsArray = Array.isArray(source);\n\tconst targetIsArray = Array.isArray(target);\n\tconst options = optionsArgument || { arrayMerge: defaultArrayMerge };\n\tconst sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch)\n\t{\n\t\treturn cloneUnlessOtherwiseSpecified(source, optionsArgument, {\n\t\t\ttarget,\n\t\t\tsource,\n\t\t});\n\t}\n\telse if (sourceIsArray)\n\t{\n\t\tlet arrayMerge = options.arrayMerge || defaultArrayMerge;\n\t\treturn arrayMerge(target, source, optionsArgument);\n\t}\n\telse\n\t{\n\t\treturn mergeObject(target, source, optionsArgument);\n\t}\n}\n\nexport interface ICache\n{\n\tkey?\n\tsource?\n\ttarget?\n\tdestination?\n}\n\nexport interface IOptions\n{\n\tclone?: boolean;\n\n\tarrayMerge?(destination: any[], source: any[], options?: IOptions): any[];\n\n\tisMergeableObject?(value, isMergeableObject: typeof isMergeable, optionsArgument?: IOptions, key?): void;\n\tisMergeableObject?(value, isMergeableObject: typeof isMergeable, optionsArgument?: IOptions, key?): boolean;\n\n\t/**\n\t * (val = old || new) mode\n\t */\n\tkeyValueOrMode?: boolean,\n}\n\nexport function isMergeable(value: any): boolean\n{\n\treturn isMergeableObject(value)\n}\n\nconst SYMBOL_IS_MERGEABLE = Symbol.for('SYMBOL_IS_MERGEABLE');\n\nexport { SYMBOL_IS_MERGEABLE }\n\nexport function deepmergeAll<T, T2 = any>(array: Array<Partial<T2 & T>>, optionsArgument?: IOptions): T2 & T\n{\n\tif (!Array.isArray(array))\n\t{\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\t// @ts-ignore\n\treturn array.reduce(function (prev, next)\n\t{\n\t\treturn deepmerge(prev, next, optionsArgument)\n\t}, {})\n}\n\nexport { deepmergeAll as all }\n\nexport default deepmerge\n\n// @ts-ignore\nif (process.env.TSDX_FORMAT !== 'esm')\n{\n\tObject.defineProperty(deepmerge, \"__esModule\", { value: true });\n\n\tObject.defineProperty(deepmerge, 'deepmerge', { value: deepmerge });\n\tObject.defineProperty(deepmerge, 'default', { value: deepmerge });\n\n\tObject.defineProperty(deepmerge, 'isMergeable', { value: isMergeable });\n\tObject.defineProperty(deepmerge, 'SYMBOL_IS_MERGEABLE', { value: SYMBOL_IS_MERGEABLE });\n\tObject.defineProperty(deepmerge, 'deepmergeAll', { value: deepmergeAll });\n\tObject.defineProperty(deepmerge, 'all', { value: deepmergeAll });\n\n\tObject.defineProperty(deepmerge, '_isMergeableObject', { value: _isMergeableObject });\n}\n","import _ from './index';\n\n// @ts-ignore\nexport = _\n"],"names":["emptyTarget","val","Array","isArray","cloneUnlessOtherwiseSpecified","value","optionsArgument","tmp","clone","bool","_isMergeableObject","ret","deepmerge","keyValueOrMode","destination","key","target","source","_optionsArgument$isMe","isMergeableObject","call","SYMBOL_IS_MERGEABLE","defaultArrayMerge","concat","map","element","index","array","mergeObject","Object","keys","forEach","sourceIsArray","targetIsArray","options","arrayMerge","sourceAndTargetTypesMatch","isMergeable","Symbol","for","deepmergeAll","Error","reduce","prev","next","defineProperty","module","exports","_"],"mappings":"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"}