server/utils/merge.ts

18 lines
612 B
TypeScript
Raw Normal View History

export const deepMerge = (
2024-04-07 07:30:49 +02:00
target: Record<string, unknown>,
source: Record<string, unknown>,
) => {
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-04-07 07:30:49 +02:00
export const deepMergeArray = (array: Record<string, unknown>[]) =>
array.reduce((ci, ni) => deepMerge(ci, ni), {});