UNPKG

ts-data-forge

Version:

[![npm version](https://img.shields.io/npm/v/ts-data-forge.svg)](https://www.npmjs.com/package/ts-data-forge) [![npm downloads](https://img.shields.io/npm/dm/ts-data-forge.svg)](https://www.npmjs.com/package/ts-data-forge) [![License](https://img.shields.

42 lines (39 loc) 1.29 kB
import { isOk } from './ternary-result-is-ok.mjs'; import { isWarn } from './ternary-result-is-warn.mjs'; import { warn } from './ternary-result-warn.mjs'; function flatMap(...args) { switch (args.length) { case 2: { const [result, flatMapFn] = args; return flatMapImpl(result, flatMapFn); } case 1: { const [flatMapFn] = args; return (result) => flatMapImpl(result, flatMapFn); } } } const flatMapImpl = (result, flatMapFn) => { if (isOk(result)) { // eslint-disable-next-line total-functions/no-unsafe-type-assertion return flatMapFn(result.value); } if (isWarn(result)) { const next = flatMapFn( // eslint-disable-next-line total-functions/no-unsafe-type-assertion result.value); if (isOk(next)) { return warn(next.value, // eslint-disable-next-line total-functions/no-unsafe-type-assertion result.warning); } if (isWarn(next)) { return warn(next.value, next.warning); } return next; } // eslint-disable-next-line total-functions/no-unsafe-type-assertion return result; }; export { flatMap }; //# sourceMappingURL=ternary-result-flat-map.mjs.map