All files / internal deepMergeRecord.ts

100% Statements 7/7
100% Branches 9/9
100% Functions 2/2
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  148x               62x 62x 121x 119x     62x    
function isRecord(value: unknown): value is Record<string, unknown> {
  return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
}
 
/** Deeply merge plain records without mutating inputs; arrays replace wholesale. */
export function deepMergeRecord(
  base: Record<string, unknown>,
  patch: Record<string, unknown>,
): Record<string, unknown> {
  const merged = { ...base };
  for (const [key, value] of Object.entries(patch)) {
    if (value === undefined) continue;
    merged[key] =
      isRecord(base[key]) && isRecord(value) ? deepMergeRecord(base[key], value) : value;
  }
  return merged;
}