UNPKG

@hazae41/result

Version:

Rust-like Result for TypeScript

253 lines (250 loc) 6.77 kB
'use strict'; var err = require('./err.cjs'); var errors = require('./errors.cjs'); var ok = require('./ok.cjs'); exports.Result = void 0; (function (Result) { /** * Create a Result from a maybe Error value * @param inner * @returns `Ok<T>` if `T`, `Err<Error>` if `Error` */ function from(inner) { if (inner instanceof Error) return new err.Err(inner); else return new ok.Ok(inner); } Result.from = from; /** * Create a Result from a boolean * @param value * @returns */ function assert(value) { return value ? ok.Ok.void() : err.Err.void(); } Result.assert = assert; function rewrap(wrapper) { try { return new ok.Ok(wrapper.getOrThrow()); } catch (error) { return new err.Err(error); } } Result.rewrap = rewrap; /** * Catch an Err thrown from Err.throw * @param callback * @param type * @returns `Ok<T>` if no `Err` was thrown, `Err<E>` otherwise * @see Err.throw */ async function unthrow(callback) { let ref; try { return await callback((e) => ref = e); } catch (e) { if (ref !== undefined) return ref; throw e; } } Result.unthrow = unthrow; /** * Catch an Err thrown from Err.throw * @param callback * @param type * @returns `Ok<T>` if no `Err` was thrown, `Err<E>` otherwise * @see Err.throw */ function unthrowSync(callback) { let ref; try { return callback((e) => ref = e); } catch (e) { if (ref !== undefined) return ref; throw e; } } Result.unthrowSync = unthrowSync; /** * Run a callback and wrap any returned value in Ok<T> and any thrown error in Err<unknown> * @param callback * @returns */ async function runAndWrap(callback) { try { return new ok.Ok(await callback()); } catch (e) { return new err.Err(e); } } Result.runAndWrap = runAndWrap; /** * Run a callback and wrap any returned value in Ok<T> and any thrown error in Err<unknown> * @param callback * @returns */ function runAndWrapSync(callback) { try { return new ok.Ok(callback()); } catch (e) { return new err.Err(e); } } Result.runAndWrapSync = runAndWrapSync; /** * Run a callback and wrap any returned value in Ok<T> and any thrown error in Err<Catched> * @param callback * @returns */ async function runAndDoubleWrap(callback) { try { return new ok.Ok(await callback()); } catch (e) { return new err.Err(errors.Catched.wrap(e)); } } Result.runAndDoubleWrap = runAndDoubleWrap; /** * Run a callback and wrap any returned value in Ok<T> and any thrown error in Err<Catched> * @param callback * @returns */ function runAndDoubleWrapSync(callback) { try { return new ok.Ok(callback()); } catch (e) { return new err.Err(errors.Catched.wrap(e)); } } Result.runAndDoubleWrapSync = runAndDoubleWrapSync; /** * Run a callback and wrap any thrown error in Err<unknown> * @param callback * @returns */ async function runOrWrap(callback) { try { return await callback(); } catch (e) { return new err.Err(e); } } Result.runOrWrap = runOrWrap; /** * Run a callback and wrap any thrown error in Err<unknown> * @param callback * @returns */ function runOrWrapSync(callback) { try { return callback(); } catch (e) { return new err.Err(e); } } Result.runOrWrapSync = runOrWrapSync; /** * Run a callback and wrap any thrown error in Err<unknown> * @param callback * @returns */ async function runOrDoubleWrap(callback) { try { return await callback(); } catch (e) { return new err.Err(errors.Catched.wrap(e)); } } Result.runOrDoubleWrap = runOrDoubleWrap; /** * Run a callback and wrap any thrown error in Err<unknown> * @param callback * @returns */ function runOrDoubleWrapSync(callback) { try { return callback(); } catch (e) { return new err.Err(errors.Catched.wrap(e)); } } Result.runOrDoubleWrapSync = runOrDoubleWrapSync; /** * Transform `Iterable<Result<T,E>` into `Result<Array<T>, E>` * @param iterable * @returns `Result<Array<T>, E>` */ function all(iterable) { return collect(iterate(iterable)); } Result.all = all; function maybeAll(iterable) { return maybeCollect(maybeIterate(iterable)); } Result.maybeAll = maybeAll; /** * Transform `Iterable<Result<T,E>` into `Iterator<T, Result<void, E>>` * @param iterable * @returns `Iterator<T, Result<void, E>>` */ function* iterate(iterable) { for (const result of iterable) { if (result.isOk()) yield result.get(); else return result; } return ok.Ok.void(); } Result.iterate = iterate; function* maybeIterate(iterable) { for (const result of iterable) { if (result == null) return result; else if (result.isOk()) yield result.get(); else return result; } return ok.Ok.void(); } Result.maybeIterate = maybeIterate; /** * Transform `Iterator<T, Result<void, E>>` into `Result<Array<T>, E>` * @param iterator `Result<Array<T>, E>` */ function collect(iterator) { const array = new Array(); let result = iterator.next(); for (; !result.done; result = iterator.next()) array.push(result.value); return result.value.set(array); } Result.collect = collect; function maybeCollect(iterator) { const array = new Array(); let result = iterator.next(); for (; !result.done; result = iterator.next()) array.push(result.value); if (result.value == null) return; return result.value.set(array); } Result.maybeCollect = maybeCollect; })(exports.Result || (exports.Result = {})); //# sourceMappingURL=result.cjs.map