UNPKG

@typed/io

Version:

Runtime IO type system

49 lines 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.catchDecodeFailure = exports.decodeFailure = exports.Decoder = exports.decode = exports.DecodeError = exports.DecodeFailure = void 0; const effects_1 = require("@typed/effects"); const either_1 = require("@typed/either"); const lambda_1 = require("@typed/lambda"); const logic_1 = require("@typed/logic"); const maybe_1 = require("@typed/maybe"); const strings_1 = require("@typed/strings"); exports.DecodeFailure = Symbol.for('DecodeFailure'); var DecodeError; (function (DecodeError) { DecodeError.create = (expected, actual, options = {}) => { var _a; return ({ expected, actual, key: logic_1.isNotUndefined(options.key) ? maybe_1.Just.of(options.key) : maybe_1.Nothing, errors: (_a = options.errors) !== null && _a !== void 0 ? _a : [], }); }; })(DecodeError = exports.DecodeError || (exports.DecodeError = {})); exports.decode = lambda_1.curry(__decode); function* __decode(decoder, input) { return yield* decoder.decode(input); } var Decoder; (function (Decoder) { Decoder.fromGuard = (guard, expected) => ({ expected, *decode(i) { if (guard.is(i)) { return i; } return yield* effects_1.fail(exports.DecodeFailure, DecodeError.create(expected, strings_1.toString(i))); }, }); })(Decoder = exports.Decoder || (exports.Decoder = {})); exports.decodeFailure = (e) => effects_1.fail(exports.DecodeFailure, e); function* catchDecodeFailure(effect, onError) { function* myEffect() { const x = yield* effect; return either_1.Either.of(x); } const either = yield* effects_1.catchFailure(myEffect(), exports.DecodeFailure, either_1.Left.of); return either_1.mapLeft((e) => (onError ? [e, onError(e)] : e), either); } exports.catchDecodeFailure = catchDecodeFailure; //# sourceMappingURL=Decoder.js.map