UNPKG

fp-ts-zio

Version:

fp-ts bindings for Scala ZIO

237 lines 9.13 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); var Apply_1 = require("fp-ts/lib/Apply"); var Array_1 = require("fp-ts/lib/Array"); var Et = require("fp-ts/lib/Either"); var function_1 = require("fp-ts/lib/function"); var O = require("fp-ts/lib/Option"); var pipeable_1 = require("fp-ts/lib/pipeable"); var ReaderT_1 = require("fp-ts/lib/ReaderT"); var TE = require("fp-ts/lib/TaskEither"); var rxjs_1 = require("rxjs"); var T = ReaderT_1.getReaderM(TE.taskEither); exports.URI = 'ZIO'; var unsafeRun = function (r) { return function (ma) { return ma(r)(); }; }; var run = function (r) { return function (ma) { return pipeable_1.pipe(ma(r), TE.getOrElse(function_1.identity))(); }; }; var fromTaskEither = T.fromM; var succeed = T.of; var fail = function (e) { return fromTaskEither(TE.left(e)); }; var succeedLazy = function (ma) { return fromTaskEither(TE.rightIO(ma)); }; var failLazy = function (me) { return fromTaskEither(TE.leftIO(me)); }; var succeedPromise = function (ma) { return fromTaskEither(TE.rightTask(ma)); }; var failPromise = function (ma) { return fromTaskEither(TE.leftTask(ma)); }; var tryCatch = function (f, onRejected) { return fromTaskEither(TE.tryCatch(f, onRejected)); }; exports.zio = { URI: exports.URI, map: T.map, of: succeed, ap: T.ap, chain: T.chain, alt: function (fx, fy) { return function (r) { return TE.taskEither.alt(fx(r), function () { return fy()(r); }); }; }, bimap: function (ma, f, g) { return function (e) { return TE.taskEither.bimap(ma(e), f, g); }; }, mapLeft: function (ma, f) { return function (e) { return TE.taskEither.mapLeft(ma(e), f); }; }, fromIO: succeedLazy, fromTask: succeedPromise, throwError: fail }; exports.zioSeq = __assign(__assign({}, exports.zio), { ap: function (mab, ma) { return T.chain(mab, function (f) { return T.map(ma, f); }); } }); var _a = pipeable_1.pipeable(exports.zio), bimap = _a.bimap, chain = _a.chain, map = _a.map, mapLeft = _a.mapLeft, fromOption = _a.fromOption, fromEither = _a.fromEither, fromPredicate = _a.fromPredicate, filterOrElse = _a.filterOrElse; var flatMap = chain; var mapError = mapLeft; var access = function () { return function (f) { return function (r) { return succeed(f(r))(r); }; }; }; var accessM = function () { return function (f) { return function (r) { return f(r)(r); }; }; }; var environment = function () { return access()(function (r) { return r; }); }; var provide = function (r) { return function (ma) { return function () { return ma(r); }; }; }; function foldM(onError, onSuccess) { return function (ma) { return function (r) { return pipeable_1.pipe(ma(r), TE.fold(function (e) { return onError(e)(r); }, function (a) { return onSuccess(a)(r); })); }; }; } function fold(onError, onSuccess) { return foldM(function (e) { return succeed(onError(e)); }, function (a) { return succeed(onSuccess(a)); }); } function getOrElseM(onError) { return foldM(onError, succeed); } var getOrElse = function (onError) { return getOrElseM(function (e) { return succeed(onError(e)); }); }; function orElse(onError) { return function (ma) { return function (r) { return TE.orElse(function (e) { return onError(e)(r); })(ma(r)); }; }; } /** * Maps the success value of this effect to the specified constant value. */ function as(b) { return function (ma) { return pipeable_1.pipe(ma, map(function () { return b; })); }; } var asVoid = as(void 0); /** * Maps the error value of this effect to the specified constant value. */ function asError(e1) { return function (ma) { return pipeable_1.pipe(ma, mapError(function () { return e1; })); }; } var asErrorVoid = asError(void 0); /** * Make sure that a resource is cleaned up in the event of an exception. The * release action is called regardless of whether the body action throws or * returns. */ function bracket(acquire, use, release) { return function (r) { return TE.bracket(acquire(r), function (a) { return use(a)(r); }, function (a, e) { return release(a, e)(r); }); }; } var tap = function (onSuccess) { return function (ma) { return pipeable_1.pipe(ma, flatMap(function (a) { return pipeable_1.pipe(onSuccess(a), map(function () { return a; })); })); }; }; var tapError = function (onError) { return function (ma) { return pipeable_1.pipe(ma, orElse(function (e) { return pipeable_1.pipe(onError(e), flatMap(function () { return fail(e); })); })); }; }; var tapBoth = function (onError, onSuccess) { return function (ma) { return pipeable_1.pipe(ma, tap(onSuccess), tapError(onError)); }; }; exports.newZIORef = function (initial) { var value = initial; var subject = new rxjs_1.BehaviorSubject(value); var get = exports.ZIO.succeedLazy(function () { return value; }); var set = function (a) { return exports.ZIO.succeedLazy(function () { value = a; subject.next(a); }); }; var update = function (f) { return pipeable_1.pipe(exports.ZIO.succeedLazy(function () { return f(value); }), exports.ZIO.flatMap(set)); }; return { get: get, set: set, update: update }; }; var cached = function (ma) { return pipeable_1.pipe(exports.newZIORef(O.none), function (cache) { return pipeable_1.pipe(cache.get, flatMap(O.fold(function () { return pipeable_1.pipe(ma, tap(function (_) { return cache.set(O.some(_)); })); }, succeed))); }); }; function swap(ma) { return function (e) { return TE.swap(ma(e)); }; } exports.swap = swap; var sequence = Array_1.array.sequence(exports.zioSeq); var zip = Apply_1.sequenceT(exports.zioSeq); var zipWith = function (mb) { return function (ma) { return zip(ma, mb); }; }; var sequencePar = Array_1.array.sequence(exports.zio); var zipPar = Apply_1.sequenceT(exports.zio); var either = function (ma) { return pipeable_1.pipe(ma, exports.ZIO.foldM(function (e) { return exports.ZIO.succeed(Et.left(e)); }, function (a) { return exports.ZIO.succeed(Et.right(a)); })); }; var option = function (ma) { return pipeable_1.pipe(ma, exports.ZIO.foldM(function () { return exports.ZIO.succeed(O.none); }, function (a) { return exports.ZIO.succeed(O.some(a)); })); }; var nullable = function (ma) { return pipeable_1.pipe(ma, option, exports.ZIO.map(O.toNullable)); }; var _undefined = function (ma) { return pipeable_1.pipe(ma, option, exports.ZIO.map(O.toUndefined)); }; var absolve = function (ma) { return pipeable_1.pipe(ma, exports.ZIO.flatMap(function (ea) { return pipeable_1.pipe(ea, exports.ZIO.fromEither); })); }; var absolveOption = function (onNone) { return function (ma) { return pipeable_1.pipe(ma, exports.ZIO.flatMap(function (ea) { return pipeable_1.pipe(ea, exports.ZIO.fromOption(onNone)); })); }; }; var absolveNullable = function (onNull) { return function (ma) { return pipeable_1.pipe(ma, exports.ZIO.flatMap(function (ea) { return pipeable_1.pipe(ea, exports.ZIO.fromPredicate(function (_) { return _ !== null; }, onNull)); })); }; }; var absolveUndefined = function (onUndefined) { return function (ma) { return pipeable_1.pipe(ma, exports.ZIO.flatMap(function (ea) { return pipeable_1.pipe(ea, exports.ZIO.fromPredicate(function (_) { return _ !== undefined; }, onUndefined)); })); }; }; exports.ZIO = { unsafeRun: unsafeRun, run: run, succeed: succeed, fail: fail, succeedLazy: succeedLazy, failLazy: failLazy, succeedPromise: succeedPromise, failPromise: failPromise, tryCatch: tryCatch, fromTaskEither: fromTaskEither, fromOption: fromOption, fromEither: fromEither, fromPredicate: fromPredicate, filterOrElse: filterOrElse, map: map, bimap: bimap, mapError: mapError, flatMap: flatMap, orElse: orElse, foldM: foldM, fold: fold, getOrElseM: getOrElseM, getOrElse: getOrElse, cached: cached, tap: tap, tapError: tapError, tapBoth: tapBoth, bracket: bracket, as: as, asError: asError, asVoid: asVoid, asErrorVoid: asErrorVoid, accessM: accessM, access: access, environment: environment, provide: provide, zip: zip, zipPar: zipPar, zipWith: zipWith, sequence: sequence, sequencePar: sequencePar, swap: swap, succeedVoid: succeedLazy(function_1.constVoid), failVoid: failLazy(function_1.constVoid), either: either, option: option, nullable: nullable, undefined: _undefined, absolve: absolve, absolveOption: absolveOption, absolveNullable: absolveNullable, absolveUndefined: absolveUndefined }; //# sourceMappingURL=ZIO.js.map