ts-data-forge
Version:
[](https://www.npmjs.com/package/ts-data-forge) [](https://www.npmjs.com/package/ts-data-forge) [ • 1.31 kB
JavaScript
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