UNPKG

style-dictionary

Version:

Style once, use everywhere. A build system for creating cross-platform styles.

32 lines (30 loc) 1.07 kB
import _deepmerge from '@bundled-es-modules/deepmerge'; import isPlainObject from 'is-plain-obj'; /** * Wrapper around deepmerge that merges only plain objects and arrays * @template T * @param {Partial<T>} target * @param {Partial<T>} source * @param {boolean} [dedupeArrays] * @returns {T} */ export const deepmerge = (target, source, dedupeArrays = true) => { return _deepmerge(target, source, { /** * Merge if object is array or a plain object (so not merging functions/class instances together) * @param {Object} obj */ isMergeableObject: (obj) => Array.isArray(obj) || isPlainObject(obj), /** * Combine arrays but remove duplicate primitives (e.g. no duplicate transforms) * @param {Array<unknown>} target * @param {Array<unknown>} source */ arrayMerge: (target, source) => { return dedupeArrays && target.length > 0 && source.length > 0 ? // if both arrays have values, dedupe them Array.from(new Set([...target, ...source])) : [...target, ...source]; }, }); };