UNPKG

@casual-simulation/aux-common

Version:
149 lines 4.16 kB
export function logErrors(multiError, prefix) { logError(multiError, prefix); for (let error of multiError.errors) { logError(error, ' ' + prefix); } } export function logError(error, prefix, log = console.error) { log(`${prefix !== null && prefix !== void 0 ? prefix : ''} Error: ${error.errorMessage} (${error.errorCode})`); if (error.reason) { log(` ${prefix !== null && prefix !== void 0 ? prefix : ''} Reason:`, error.reason); } if (error.issues) { log(` ${prefix !== null && prefix !== void 0 ? prefix : ''} Issues:`, error.issues); } if (error.errors && Array.isArray(error.errors)) { for (let i = 0; i < error.errors.length; i++) { const err = error.errors[i]; logError(err, ` ${prefix !== null && prefix !== void 0 ? prefix : ''} ${i + 1}:`, log); } } } export function genericResult(result) { var _a; if (isSuccess(result)) { if (typeof result.value === 'object') { return { success: true, ...((_a = result.value) !== null && _a !== void 0 ? _a : {}), }; } else { return { success: true, value: result.value }; } } else { return { success: false, ...result.error, }; } } export function mapResult(result, fn) { return isSuccess(result) ? success(fn(result.value)) : result; } export function flatMapResult(result, fn) { return isSuccess(result) ? fn(result.value) : result; } export function matchResult(result, cases) { if (isSuccess(result)) { return cases.success(result.value); } else { const error = result.error; const handler = cases[error.errorCode]; if (handler) { return handler(error); } else { throw new Error(`No handler for error code: ${error.errorCode}`); } } } export function success(value) { return R.success(value); } export function failure(error) { return R.failure(error); } export function isSuccess(result) { return result.success === true; } export function isFailure(result) { return result.success === false; } export function unwrap(result) { if (isSuccess(result)) { return result.value; } else { throw new Error(`Result is a failure: ${JSON.stringify(result.error)}`); } } export function logResult(result, message) { if (isSuccess(result)) { console.log(message !== null && message !== void 0 ? message : 'Result:', result.value); } else { console.error(message !== null && message !== void 0 ? message : 'Error:', result.error); } return result; } export function wrap(fn) { try { const result = fn(); if (result instanceof Promise) { return result .then((value) => success(value)) .catch((error) => failure({ errorCode: 'wrapped_error', errorMessage: error.message, error, })); } else { return success(result); } } catch (error) { return failure({ errorCode: 'wrapped_error', errorMessage: error.message, error, }); } } export class R { constructor(success, _data) { this.success = success; this._data = _data; if (!success && typeof _data === 'object' && 'success' in _data) { const { success: _, ...error } = _data; this._data = error; } } static success(value) { return new R(true, value); } static failure(error) { return new R(false, error); } get value() { return this._data; } get error() { return this._data; } toString() { return `Result(${this.success}, ${JSON.stringify(this._data)})`; } toJSON() { return genericResult(this); } [Symbol.for('nodejs.util.inspect.custom')]() { return this.toJSON(); } } //# sourceMappingURL=Result.js.map