@tanstack/svelte-table
Version:
Headless UI for building powerful tables & datagrids for Svelte.
46 lines (45 loc) • 1.48 kB
JavaScript
export function mergeObjects(...sources) {
const target = {};
for (let source of sources) {
if (typeof source === 'function')
source = source();
if (source) {
const descriptors = Object.getOwnPropertyDescriptors(source);
for (const key in descriptors) {
if (key in target)
continue;
Object.defineProperty(target, key, {
enumerable: true,
get() {
for (let i = sources.length - 1; i >= 0; i--) {
let v, s = sources[i];
if (typeof s === 'function')
s = s();
// eslint-disable-next-line prefer-const
v = (s || {})[key];
if (v !== undefined)
return v;
}
},
});
}
}
}
return target;
}
export function flatMerge(...sources) {
const result = {};
for (let source of sources) {
if (typeof source === 'function')
source = source();
if (!source)
continue;
for (const key of Reflect.ownKeys(source)) {
const value = source[key];
if (value !== undefined) {
result[key] = value;
}
}
}
return result;
}