2024-03-04 02:27:08 +01:00
|
|
|
export const deepMerge = (
|
2024-04-07 07:30:49 +02:00
|
|
|
target: Record<string, unknown>,
|
|
|
|
|
source: Record<string, unknown>,
|
2024-03-04 02:27:08 +01:00
|
|
|
) => {
|
2024-04-07 07:30:49 +02:00
|
|
|
const result = { ...target, ...source };
|
|
|
|
|
for (const key of Object.keys(result)) {
|
|
|
|
|
result[key] =
|
|
|
|
|
typeof target[key] === "object" && typeof source[key] === "object"
|
|
|
|
|
? // @ts-expect-error deepMerge is recursive
|
|
|
|
|
deepMerge(target[key], source[key])
|
|
|
|
|
: structuredClone(result[key]);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
2024-03-04 02:27:08 +01:00
|
|
|
};
|
|
|
|
|
|
2024-04-07 07:30:49 +02:00
|
|
|
export const deepMergeArray = (array: Record<string, unknown>[]) =>
|
|
|
|
|
array.reduce((ci, ni) => deepMerge(ci, ni), {});
|