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.

53 lines (50 loc) 1.31 kB
import { isErr } from './ternary-result-is-err.mjs'; import { isWarn } from './ternary-result-is-warn.mjs'; import { ok } from './ternary-result-ok.mjs'; import { warn } from './ternary-result-warn.mjs'; /** * Combines two `TernaryResult`s, prioritising Err over Warn over Ok. * * @example * * ```ts * const okPair = TernaryResult.zip(TernaryResult.ok('left'), TernaryResult.ok(1)); * * const warnPair = TernaryResult.zip( * TernaryResult.warn('left', 'warn'), * TernaryResult.ok(1), * ); * * const errPair = TernaryResult.zip( * TernaryResult.ok('left'), * TernaryResult.err('err'), * ); * * assert.deepStrictEqual(okPair, TernaryResult.ok(['left', 1] as const)); * * assert.deepStrictEqual( * warnPair, * TernaryResult.warn(['left', 1] as const, 'warn'), * ); * * assert.deepStrictEqual(errPair, TernaryResult.err('err')); * ``` */ const zip = (resultA, resultB) => { if (isErr(resultA)) { return resultA; } if (isErr(resultB)) { return resultB; } const pair = [resultA.value, resultB.value]; if (isWarn(resultA)) { return warn(pair, resultA.warning); } if (isWarn(resultB)) { return warn(pair, resultB.warning); } return ok(pair); }; export { zip }; //# sourceMappingURL=ternary-result-zip.mjs.map