@effect-ts/system
Version:
Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.
472 lines (386 loc) • 14.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.access = access;
exports.accessM = accessM;
exports.chain = chain;
exports.chain_ = chain_;
exports.checkInterruptible = checkInterruptible;
exports.checkPlatform = checkPlatform;
exports.checkTraced = checkTraced;
exports.descriptorWith = descriptorWith;
exports.effectAsyncOption = effectAsyncOption;
exports.effectAsyncOptionBlockingOn = effectAsyncOptionBlockingOn;
exports.foldCauseM = foldCauseM;
exports.foldCauseM_ = foldCauseM_;
exports.fork = fork;
exports.forkReport = forkReport;
exports.forkReport_ = forkReport_;
exports.halt = halt;
exports.haltWith = haltWith;
exports.interruptStatus = interruptStatus;
exports.interruptStatus_ = interruptStatus_;
exports.provideAll = provideAll;
exports.provideAll_ = provideAll_;
exports.result = result;
exports.succeed = succeed;
exports.succeedWith = succeedWith;
exports.supervised = supervised;
exports.supervised_ = supervised_;
exports.suspend = suspend;
exports.trace = void 0;
exports.traced = traced;
exports.tracingStatus = tracingStatus;
exports.tracingStatus_ = tracingStatus_;
exports.try = try_;
exports.tryCatch = tryCatch;
exports.tryCatchSuspend = tryCatchSuspend;
exports.tryOrElse = tryOrElse;
exports.tryOrElse_ = tryOrElse_;
exports.unitTraced = exports.unit = void 0;
exports.untraced = untraced;
exports.yieldNow = void 0;
var _core = /*#__PURE__*/require("../Cause/core.js");
var Exit = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("../Exit/core.js"));
var _index = /*#__PURE__*/require("../Function/index.js");
var O = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("../Option/index.js"));
var _primitives = /*#__PURE__*/require("./primitives.js");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**
* Effectfully accesses the environment of the effect.
*/
function access(f, __trace) {
return new _primitives.IRead(_ => new _primitives.ISucceed(f(_)), __trace);
}
/**
* Effectfully accesses the environment of the effect.
*/
function accessM(f, __trace) {
return new _primitives.IRead(f, __trace);
}
/**
* Returns an effect that models the execution of this effect, followed by
* the passing of its value to the specified continuation function `f`,
* followed by the effect that it returns.
*
* @ets_data_first chain_
*/
function chain(f, __trace) {
return val => new _primitives.IFlatMap(val, f, __trace);
}
/**
* Returns an effect that models the execution of this effect, followed by
* the passing of its value to the specified continuation function `f`,
* followed by the effect that it returns.
*/
function chain_(val, f, __trace) {
return new _primitives.IFlatMap(val, f, __trace);
}
/**
* Constructs an effect based on information about the current fiber, such as
* its identity.
*/
function descriptorWith(f, __trace) {
return new _primitives.IDescriptor(f, __trace);
}
/**
* Checks the interrupt status, and produces the effect returned by the
* specified callback.
*/
function checkInterruptible(f, __trace) {
return new _primitives.ICheckInterrupt(f, __trace);
}
/**
* Capture trace at the current point
*/
const trace = /*#__PURE__*/new _primitives.ITrace();
/**
* Checks the tracing status, and produces the effect returned by the
* specified callback.
*/
exports.trace = trace;
function checkTraced(f) {
return new _primitives.ICheckTracingStatus(f);
}
/**
* Disables Effect tracing facilities for the duration of the effect.
*
* Note: Effect tracing is cached, as such after the first iteration
* it has a negligible effect on performance of hot-spots (Additional
* hash map lookup per flatMap). As such, using `untraced` sections
* is not guaranteed to result in a noticeable performance increase.
*/
function untraced(self) {
return new _primitives.ITracingStatus(self, false);
}
/**
* Enables Effect tracing for this effect. Because this is the default, this
* operation only has an additional meaning if the effect is located within
* an `untraced` section, or the current fiber has been spawned by a parent
* inside an `untraced` section.
*/
function traced(self) {
return new _primitives.ITracingStatus(self, true);
}
/**
* Imports an asynchronous effect into a pure `Effect` value, possibly returning
* the value synchronously.
*
* If the register function returns a value synchronously, then the callback
* function `AsyncRE<R, E, A> => void` must not be called. Otherwise the callback
* function must be called at most once.
*
* The list of fibers, that may complete the async callback, is used to
* provide better diagnostics.
*/
function effectAsyncOption(register, __trace) {
return new _primitives.IEffectAsync(register, [], __trace);
}
/**
* Imports an asynchronous effect into a pure `Effect` value, possibly returning
* the value synchronously.
*
* If the register function returns a value synchronously, then the callback
* function `AsyncRE<R, E, A> => void` must not be called. Otherwise the callback
* function must be called at most once.
*
* The list of fibers, that may complete the async callback, is used to
* provide better diagnostics.
*/
function effectAsyncOptionBlockingOn(register, blockingOn, __trace) {
return new _primitives.IEffectAsync(register, blockingOn, __trace);
}
/**
* Imports a synchronous side-effect into a pure value, translating any
* thrown exceptions into typed failed effects creating with `halt`.
*/
function tryCatch(effect, onThrow, __trace) {
return new _primitives.IEffectPartial(effect, onThrow, __trace);
}
/**
* Imports a synchronous side-effect into a pure value, translating any
* thrown exceptions into typed failed effects creating with `halt`.
*/
function try_(effect, __trace) {
return new _primitives.IEffectPartial(effect, _index.identity, __trace);
}
/**
* Imports a synchronous side-effect into a pure value
*/
function succeedWith(effect, __trace) {
return new _primitives.IEffectTotal(effect, __trace);
}
/**
* A more powerful version of `foldM` that allows recovering from any kind of failure except interruptions.
*
* @ets_data_first foldCauseM_
*/
function foldCauseM(failure, success, __trace) {
return value => new _primitives.IFold(value, failure, success, __trace);
}
/**
* A more powerful version of `foldM` that allows recovering from any kind of failure except interruptions.
*/
function foldCauseM_(value, failure, success, __trace) {
return new _primitives.IFold(value, failure, success, __trace);
}
/**
* Returns an effect that forks this effect into its own separate fiber,
* returning the fiber immediately, without waiting for it to begin
* executing the effect.
*
* The returned fiber can be used to interrupt the forked fiber, await its
* result, or join the fiber. See `Fiber` for more information.
*
* The fiber is forked with interrupt supervision mode, meaning that when the
* fiber that forks the child exits, the child will be interrupted.
*/
function fork(value, __trace) {
return new _primitives.IFork(value, O.none, O.none, __trace);
}
/**
* Returns an effect that forks this effect into its own separate fiber,
* returning the fiber immediately, without waiting for it to begin
* executing the effect.
*
* The returned fiber can be used to interrupt the forked fiber, await its
* result, or join the fiber. See `Fiber` for more information.
*
* The fiber is forked with interrupt supervision mode, meaning that when the
* fiber that forks the child exits, the child will be interrupted.
*
* @ets_data_first forkReport_
*/
function forkReport(reportFailure, __trace) {
return value => new _primitives.IFork(value, O.none, O.some(reportFailure), __trace);
}
/**
* Returns an effect that forks this effect into its own separate fiber,
* returning the fiber immediately, without waiting for it to begin
* executing the effect.
*
* The returned fiber can be used to interrupt the forked fiber, await its
* result, or join the fiber. See `Fiber` for more information.
*
* The fiber is forked with interrupt supervision mode, meaning that when the
* fiber that forks the child exits, the child will be interrupted.
*/
function forkReport_(value, reportFailure, __trace) {
return new _primitives.IFork(value, O.none, O.some(reportFailure), __trace);
}
/**
* Returns an effect that models failure with the specified `Cause`.
*/
function halt(cause, __trace) {
return new _primitives.IFail(() => cause, __trace);
}
/**
* Returns an effect that models failure with the specified `Cause`.
*
* This version takes in a lazily-evaluated trace that can be attached to the `Cause`
* via `Cause.Traced`.
*/
function haltWith(cause, __trace) {
return new _primitives.IFail(cause, __trace);
}
/**
* Switches the interrupt status for this effect. If `true` is used, then the
* effect becomes interruptible (the default), while if `false` is used, then
* the effect becomes uninterruptible. These changes are compositional, so
* they only affect regions of the effect.
*
* @ets_data_first interruptStatus_
*/
function interruptStatus(flag, __trace) {
return effect => new _primitives.IInterruptStatus(effect, flag, __trace);
}
/**
* Switches the interrupt status for this effect. If `true` is used, then the
* effect becomes interruptible (the default), while if `false` is used, then
* the effect becomes uninterruptible. These changes are compositional, so
* they only affect regions of the effect.
*/
function interruptStatus_(effect, flag, __trace) {
return new _primitives.IInterruptStatus(effect, flag, __trace);
}
/**
* Toggles Effect tracing support for this effect. If `true` is used, then the
* effect will accumulate traces, while if `false` is used, then tracing
* is disabled. These changes are compositional, so they only affect regions
* of the effect.
*
* @ets_data_first tracingStatus_
*/
function tracingStatus(flag) {
return effect => new _primitives.ITracingStatus(effect, flag);
}
/**
* Toggles Effect tracing support for this effect. If `true` is used, then the
* effect will accumulate traces, while if `false` is used, then tracing
* is disabled. These changes are compositional, so they only affect regions
* of the effect.
*/
function tracingStatus_(effect, flag) {
return new _primitives.ITracingStatus(effect, flag);
}
/**
* Provides the `Effect` effect with its required environment, which eliminates
* its dependency on `R`.
*
* @ets_data_first provideAll_
*/
function provideAll(r, __trace) {
return next => new _primitives.IProvide(r, next, __trace);
}
/**
* Provides the `Effect` effect with its required environment, which eliminates
* its dependency on `R`.
*/
function provideAll_(next, r, __trace) {
return new _primitives.IProvide(r, next, __trace);
}
/**
* Returns an effect that semantically runs the effect on a fiber,
* producing an `Exit` for the completion value of the fiber.
*/
function result(value, __trace) {
return new _primitives.IFold(value, cause => succeed(Exit.halt(cause)), succ => succeed(Exit.succeed(succ)), __trace);
}
/**
* Lift a pure value into an effect
*/
function succeed(a, __trace) {
return new _primitives.ISucceed(a, __trace);
}
/**
* Returns an effect with the behavior of this one, but where all child
* fibers forked in the effect are reported to the specified supervisor.
*
* @ets_data_first supervised_
*/
function supervised(supervisor, __trace) {
return fa => new _primitives.ISupervise(fa, supervisor, __trace);
}
/**
* Returns an effect with the behavior of this one, but where all child
* fibers forked in the effect are reported to the specified supervisor.
*/
function supervised_(fa, supervisor, __trace) {
return new _primitives.ISupervise(fa, supervisor, __trace);
}
/**
* Returns a lazily constructed effect, whose construction may itself require effects.
* When no environment is required (i.e., when R == unknown) it is conceptually equivalent to `flatten(succeedWith(io))`.
*/
function suspend(factory, __trace) {
return new _primitives.ISuspend(factory, __trace);
}
/**
* Returns a lazily constructed effect, whose construction may itself require effects.
* When no environment is required (i.e., when R == unknown) it is conceptually equivalent to `flatten(tryCatch(orThrow, io))`.
*/
function tryCatchSuspend(factory, onThrow, __trace) {
return new _primitives.ISuspendPartial(factory, onThrow, __trace);
}
/**
* Executed `that` in case `self` fails with a `Cause` that doesn't contain defects,
* executes `success` in case of successes
*/
function tryOrElse_(self, that, success, __trace) {
return new _primitives.IFold(self, cause => O.fold_((0, _core.keepDefects)(cause), that, halt), success, __trace);
}
/**
* Executed `that` in case `self` fails with a `Cause` that doesn't contain defects,
* executes `success` in case of successes
*
* @ets_data_first tryOrElse_
*/
function tryOrElse(that, success, __trace) {
return self => tryOrElse_(self, that, success, __trace);
}
/**
* Returns the effect resulting from mapping the success of this effect to unit.
*/
const unit = /*#__PURE__*/new _primitives.ISucceed(undefined);
/**
* Returns the effect resulting from mapping the success of this effect to unit.
*/
exports.unit = unit;
const unitTraced = __trace => new _primitives.ISucceed(undefined, __trace);
/**
* Returns an effect that yields to the runtime system, starting on a fresh
* stack. Manual use of this method can improve fairness, at the cost of
* overhead.
*/
exports.unitTraced = unitTraced;
const yieldNow = /*#__PURE__*/new _primitives.IYield();
/**
* Checks the current platform
*/
exports.yieldNow = yieldNow;
function checkPlatform(f, __trace) {
return new _primitives.IPlatform(f, __trace);
}
//# sourceMappingURL=core.js.map