UNPKG

map-transform

Version:

Map and transform objects with mapping definitions

48 lines 1.4 kB
import { isObject } from '../utils/is.js'; import { revFromState } from '../utils/stateHelpers.js'; const isExplodedArray = (data) => data.length > 0 && data.every((item) => isObject(item) && typeof item.key === 'number'); const setValueOnKey = (target, keyValue) => { if (isObject(keyValue)) { const { key, value } = keyValue; if (Array.isArray(target)) { target[key] = value; } else { target[String(key)] = value; } } return target; }; function doImplode(data) { if (Array.isArray(data)) { return data.reduce(setValueOnKey, isExplodedArray(data) ? [] : {}); } else { return undefined; } } function doExplode(data) { if (isObject(data)) { return Object.entries(data) .filter(([, value]) => value !== undefined) .map(([key, value]) => ({ key, value, })); } else if (Array.isArray(data)) { return data.map((value, key) => ({ key, value })); } else { return undefined; } } function explodeOrImplode(isImplode) { return () => () => async (data, state) => revFromState(state, isImplode) ? doImplode(data) : doExplode(data); } export const explode = explodeOrImplode(false); export const implode = explodeOrImplode(true); //# sourceMappingURL=explode.js.map