map-transform
Version:
Map and transform objects with mapping definitions
28 lines • 1.12 kB
JavaScript
import { ensureArray } from '../utils/array.js';
import { defToDataMapper } from '../utils/definitionHelpers.js';
import { isObject } from '../utils/is.js';
import { flipState } from '../utils/stateHelpers.js';
const undefinedFirst = ([_a, a], [_b, b]) => (b === undefined && a !== undefined ? 1 : a === undefined ? -1 : 0);
function mergeTransformer({ path }, flip) {
return (options) => {
const getFns = ensureArray(path).map((path) => defToDataMapper(path, options));
return async function mergePipelines(data, state) {
const values = [];
for (const fn of getFns) {
values.push(await fn(data, flipState(state, flip)));
}
return Object.fromEntries(values
.flat()
.filter(isObject)
.flatMap(Object.entries)
.sort(undefinedFirst));
};
};
}
export const merge = function merge(props) {
return mergeTransformer(props, false);
};
export const mergeRev = function mergeRev(props) {
return mergeTransformer(props, true);
};
//# sourceMappingURL=merge.js.map