svelte-meta-tags
Version:
Svelte Meta Tags provides components designed to help you manage SEO for Svelte projects
28 lines (27 loc) • 1.03 kB
JavaScript
/* eslint-disable @typescript-eslint/no-explicit-any */
export const deepMerge = (target, source) => {
if (!target || !source)
return target ?? source ?? {};
const result = { ...target };
for (const [key, value] of Object.entries(source)) {
const targetValue = target[key];
if (targetValue instanceof Date || typeof targetValue === 'function') {
result[key] = targetValue;
}
else if (value instanceof Date || typeof value === 'function') {
result[key] = value;
}
else if (isObject(targetValue) && isObject(value)) {
result[key] = deepMerge(targetValue, value);
}
else if (isArray(targetValue) && isArray(value)) {
result[key] = value;
}
else {
result[key] = value !== undefined ? value : targetValue;
}
}
return result;
};
const isObject = (obj) => obj !== null && typeof obj === 'object' && !Array.isArray(obj);
const isArray = (obj) => Array.isArray(obj);