const isPlainObject = (value: unknown): value is Record => Boolean(value) && typeof value === "object" && !Array.isArray(value); /** * Recursively merge plain objects. Nested objects are merged; arrays and * scalars from `override` replace those in `base`. Inputs are not mutated. */ export const deepMerge = ( base: Record, override: Record, ): Record => { const result: Record = { ...base }; for (const [key, value] of Object.entries(override)) { const current = result[key]; result[key] = isPlainObject(value) && isPlainObject(current) ? deepMerge(current, value) : value; } return result; };