UNPKG

deepmerge-plus

Version:

A library for deep (recursive) merging of Javascript objects

1 lines 11 kB
{"version":3,"file":"index.umd.development.cjs","sources":["../src/index.ts"],"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"],"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"],"mappings":"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"}