UNPKG

@leapond/utilities

Version:

A set of JavaScript utilities for on-demand using.

85 lines (78 loc) 2.23 kB
import deepMerge from "./deepMerge"; let a1 = 1, a2 = undefined, b1 = { a: 1, b: 2, d: {x: 1}, e: [1, 2], f: new Set([1, 2]), g: new Map([[1, {x: 1, y: 2}]]) }, b2 = { b: 20, c: 30, d: {x: 10}, e: [30], f: new Set([2, 3]), g: new Map([[1, {y: 20, z: 30, zz: 33}], [2, 55]]), z: {zz: 100, z1: {z2: {z3: 9}}} } test('Simple Merge', () => { let a3 = deepMerge(a1, a2) expect(a3).toBe(a2) a1 = null a3 = deepMerge(a1, a2) expect(a3).toBe(a2) a1 = String('a') a3 = deepMerge(a1, a2) expect(a3).toBe(a2) }) test('Normal Merge', () => { let b3 = deepMerge(b1, b2) expect(b3 === b1).toBe(true) expect(b3.a === 1 && b3.b === 20 && b3.c === 30).toBe(true) expect(b3.e[0] === 30 && b3.e[1] === 2).toBe(true) expect(b3.f === b1.f).toBe(true) expect([...b3.f.values()].join()).toBe('1,2,3') expect(b3.g.get(1).x === 1 && b3.g.get(1).y === 20).toBe(true) expect(b3.zz === b2.zz).toBe(true) }) test('Merge Options(2)', () => { let d = 4, c = {d}, b = {c}, a = {b} let aa = {a}, bb = {a: {b: {c: {d: 4, dd: 44}}}}, cc = deepMerge(aa, bb, {clone: 2}); expect(cc !== aa).toBe(true) expect(cc.a !== a).toBe(true) expect(cc.a.b === b).toBe(true) expect(cc.a.b.c === c).toBe(true) expect(cc.a.b.c.d === 4).toBe(true) expect(cc.a.b.c.dd === 44).toBe(true) }) test('Merge Options(-2)', () => { let d = 4, c = {d}, b = {c}, a = {b} let aa = {a}, bb = {a: {b: {c: {d: 4, dd: 44}}}}, cc = deepMerge(aa, bb, {clone: -2}); expect(cc === aa).toBe(true) expect(cc.a === a).toBe(true) expect(cc.a.b !== b).toBe(true) expect(cc.a.b.c !== c).toBe(true) expect(cc.a.b.c.d === 4).toBe(true) expect(cc.a.b.c.dd === 44).toBe(true) }) test('Batch Merge', () => { let r1 = deepMerge.batch([null, { a: 1, d: [1] }, false, 2, {b: 2}, true, NaN, {c: 3}, {d: [1, 2, 3]}], {arrayPolicy: deepMerge.ARRAY_CONCAT_UNIQ}), r2 = deepMerge.batch([null, {a: 1}, false, 2, [/*break*/], {b: 2}, true, NaN, {c: 3}]); expect(r1.a).toBe(1) expect(r1.b).toBe(2) expect(r1.c).toBe(3) expect(r1.d.join()).toBe([1, 2, 3].join()) // break expect(r2.a).toBe(undefined) expect(r2.b).toBe(2) expect(r2.c).toBe(3) })