UNPKG

@studion/infra-code-blocks

Version:
44 lines (43 loc) 1.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeWithDefaults = mergeWithDefaults; function isPlainObject(value) { if (value === null || typeof value !== 'object') { return false; } const prototype = Object.getPrototypeOf(value); return prototype === Object.prototype || prototype === null; } function mergeObjects(defaults, args) { const result = { ...defaults }; for (const [key, value] of Object.entries(args)) { if (value === undefined) { continue; } const defaultValue = defaults[key]; result[key] = isPlainObject(defaultValue) && isPlainObject(value) ? mergeObjects(defaultValue, value) : value; } return result; } /** * Merges `args` into `defaults`, recursively merging plain-object values. * * `undefined` values in `args` are ignored, including inside nested objects. * Arrays, `null`, and non-plain objects are treated as replacement values and * are not recursively merged. * * @example * const merged = mergeWithDefaults( * { timeout: 3000, retry: { count: 3, delay: 500 } }, * { retry: { count: 5 } }, * ); * * console.log(merged); * // { timeout: 3000, retry: { count: 5, delay: 500 } } */ function mergeWithDefaults(defaults, args) { return mergeObjects(defaults, args); }