fp-ts-zio
Version:
fp-ts bindings for Scala ZIO
120 lines • 4.83 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 Et = require("fp-ts/lib/Either");
var EitherT_1 = require("fp-ts/lib/EitherT");
var pipeable_1 = require("fp-ts/lib/pipeable");
var rxjs_1 = require("rxjs");
var Rx = require("rxjs/operators");
var Observable_1 = require("./Observable");
var ZIO_1 = require("./ZIO");
var T = EitherT_1.getEitherM(Observable_1.observable);
exports.URI = 'Stream';
// require when E exists, unsubscribe stream when error
var ensureError = function (ma) {
return pipeable_1.pipe(ma, Rx.takeWhile(Et.isRight, true));
};
var fail = T.left;
exports.fail = fail;
var succeed = T.of;
exports.succeed = succeed;
var failObservable = function (me) {
return pipeable_1.pipe(T.leftM(me), ensureError);
};
exports.failObservable = failObservable;
var succeedObservable = T.rightM;
exports.succeedObservable = succeedObservable;
var failLazy = function (me) { return failObservable(Observable_1.observable.fromIO(me)); };
exports.failLazy = failLazy;
var succeedLazy = function (ma) { return succeedObservable(Observable_1.observable.fromIO(ma)); };
exports.succeedLazy = succeedLazy;
var failPromise = function (me) {
return failObservable(Observable_1.observable.fromTask(me));
};
exports.failPromise = failPromise;
var succeedPromise = function (ma) {
return succeedObservable(Observable_1.observable.fromTask(ma));
};
exports.succeedPromise = succeedPromise;
var foldM = function (onError, onSuccess) { return function (ma) { return T.fold(ma, onError, onSuccess); }; };
exports.foldM = foldM;
var fold = function (onError, onSuccess) { return foldM(function (e) { return succeed(onError(e)); }, function (a) { return succeed(onSuccess(a)); }); };
exports.fold = fold;
var getOrElseM = function (onError) {
return foldM(onError, succeed);
};
exports.getOrElseM = getOrElseM;
var getOrElse = function (onError) {
return getOrElseM(function (e) { return succeed(onError(e)); });
};
exports.getOrElse = getOrElse;
var orElse = function (onError) { return function (ma) { return T.orElse(ma, onError); }; };
exports.orElse = orElse;
var swap = T.swap;
exports.swap = swap;
var tryCatch = function (f, onError) {
return pipeable_1.pipe(f, Rx.map(Et.right), Rx.catchError(onError));
};
exports.tryCatch = tryCatch;
var foreachM = function (f) { return function (ma) { return function (r) { return function () {
return pipeable_1.pipe(ma, Rx.concatMap(function (ea) {
return rxjs_1.defer(function () {
return pipeable_1.pipe(ea, Et.fold(function (e) { return ZIO_1.ZIO.fail(e); }, function (a) { return f(a); }), ZIO_1.ZIO.unsafeRun(r));
});
}), ensureError).toPromise();
}; }; }; };
exports.foreachM = foreachM;
var foreach = function (f) {
return foreachM(function (a) { return ZIO_1.ZIO.succeedLazy(function () { return f(a); }); });
};
exports.foreach = foreach;
function bracket(acquire, use, release) {
return T.chain(acquire, function (a) {
return T.chain(Observable_1.observable.map(use(a), Et.right), function (e) {
return T.chain(release(a, e), function () { return (Et.isLeft(e) ? T.left(e.left) : T.of(e.right)); });
});
});
}
exports.bracket = bracket;
exports.stream = {
URI: exports.URI,
bimap: T.bimap,
mapLeft: T.mapLeft,
map: T.map,
of: succeed,
ap: T.ap,
chain: T.chain,
alt: T.alt,
fromIO: succeedLazy,
fromTask: succeedPromise,
throwError: fail
};
exports.streamSeq = __assign(__assign({}, exports.stream), { ap: function (mab, ma) { return T.chain(mab, function (f) { return T.map(ma, f); }); } });
var _a = pipeable_1.pipeable(exports.stream), alt = _a.alt, ap = _a.ap, apFirst = _a.apFirst, apSecond = _a.apSecond, bimap = _a.bimap, chain = _a.chain, chainFirst = _a.chainFirst, flatten = _a.flatten, map = _a.map, mapLeft = _a.mapLeft, fromEither = _a.fromEither, fromOption = _a.fromOption, fromPredicate = _a.fromPredicate, filterOrElse = _a.filterOrElse;
exports.alt = alt;
exports.ap = ap;
exports.apFirst = apFirst;
exports.apSecond = apSecond;
exports.bimap = bimap;
exports.chainFirst = chainFirst;
exports.flatten = flatten;
exports.map = map;
exports.fromEither = fromEither;
exports.fromOption = fromOption;
exports.fromPredicate = fromPredicate;
exports.filterOrElse = filterOrElse;
var mapError = mapLeft;
exports.mapError = mapError;
var flatMap = chain;
exports.flatMap = flatMap;
//# sourceMappingURL=Stream.js.map