fp-ts-zio
Version:
fp-ts bindings for Scala ZIO
237 lines • 9.13 kB
JavaScript
;
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