UNPKG

map-transform

Version:

Map and transform objects with mapping definitions

33 lines 1.33 kB
import { setTargetOnState, goForward } from '../utils/stateHelpers.js'; import { defToDataMapper } from '../utils/definitionHelpers.js'; import { ensureArray } from '../utils/array.js'; const getLogicalFn = (operator) => operator === 'OR' ? (a, b) => Boolean(a) || Boolean(b) : (a, b) => Boolean(a) && Boolean(b); const transformer = function logical({ path = '.', operator = 'AND', }) { return (options) => { const pathArr = ensureArray(path); const getFns = pathArr.map((path) => defToDataMapper(path, options)); const setFns = pathArr.map((path) => defToDataMapper(`>${path}`, options)); const logicalOp = getLogicalFn(operator); return async (data, state) => { if (state.rev) { const value = Boolean(data); let obj; for (const setFn of setFns) { obj = await setFn(value, setTargetOnState(goForward(state), obj)); } return obj; } else { const values = []; for (const getFn of getFns) { values.push(await getFn(data, state)); } return values.reduce(logicalOp); } }; }; }; export default transformer; //# sourceMappingURL=logical.js.map