/** * A `Supervisor` is allowed to supervise the launching and termination of * fibers, producing some visible value of type `T` from the supervision. * * @since 2.0.0 */ import type * as Context from "./Context.js" import type * as Effect from "./Effect.js" import type * as Exit from "./Exit.js" import type * as Fiber from "./Fiber.js" import * as core from "./internal/core.js" import * as circular from "./internal/layer/circular.js" import * as internal from "./internal/supervisor.js" import type * as Layer from "./Layer.js" import type * as MutableRef from "./MutableRef.js" import type * as Option from "./Option.js" import type * as SortedSet from "./SortedSet.js" import type * as Types from "./Types.js" /** * @since 2.0.0 * @category symbols */ export const SupervisorTypeId: unique symbol = internal.SupervisorTypeId /** * @since 2.0.0 * @category symbols */ export type SupervisorTypeId = typeof SupervisorTypeId /** * @since 2.0.0 * @category models */ export interface Supervisor extends Supervisor.Variance { /** * Returns an `Effect` that succeeds with the value produced by this * supervisor. This value may change over time, reflecting what the supervisor * produces as it supervises fibers. */ readonly value: Effect.Effect /** * Supervises the start of a `Fiber`. */ onStart( context: Context.Context, effect: Effect.Effect, parent: Option.Option>, fiber: Fiber.RuntimeFiber ): void /** * Supervises the end of a `Fiber`. */ onEnd(value: Exit.Exit, fiber: Fiber.RuntimeFiber): void /** * Supervises the execution of an `Effect` by a `Fiber`. */ onEffect(fiber: Fiber.RuntimeFiber, effect: Effect.Effect): void /** * Supervises the suspension of a computation running within a `Fiber`. */ onSuspend(fiber: Fiber.RuntimeFiber): void /** * Supervises the resumption of a computation running within a `Fiber`. */ onResume(fiber: Fiber.RuntimeFiber): void /** * Maps this supervisor to another one, which has the same effect, but whose * value has been transformed by the specified function. */ map(f: (a: T) => B): Supervisor /** * Returns a new supervisor that performs the function of this supervisor, and * the function of the specified supervisor, producing a tuple of the outputs * produced by both supervisors. */ zip(right: Supervisor): Supervisor<[T, A]> } /** * @since 2.0.0 */ export declare namespace Supervisor { /** * @since 2.0.0 * @category models */ export interface Variance { readonly [SupervisorTypeId]: { readonly _T: Types.Covariant } } } /** * @since 2.0.0 * @category context */ export const addSupervisor: (supervisor: Supervisor) => Layer.Layer = circular.addSupervisor /** * Creates a new supervisor that tracks children in a set. * * @since 2.0.0 * @category constructors */ export const fibersIn: ( ref: MutableRef.MutableRef>> ) => Effect.Effect>>> = internal.fibersIn /** * Creates a new supervisor that constantly yields effect when polled * * @since 2.0.0 * @category constructors */ export const fromEffect: (effect: Effect.Effect) => Supervisor = internal.fromEffect /** * A supervisor that doesn't do anything in response to supervision events. * * @since 2.0.0 * @category constructors */ export const none: Supervisor = internal.none /** * Creates a new supervisor that tracks children in a set. * * @since 2.0.0 * @category constructors */ export const track: Effect.Effect>>> = internal.track /** * Unsafely creates a new supervisor that tracks children in a set. * * @since 2.0.0 * @category unsafe */ export const unsafeTrack: () => Supervisor>> = internal.unsafeTrack /** * @since 2.0.0 * @category constructors */ export abstract class AbstractSupervisor implements Supervisor { /** * @since 2.0.0 */ abstract value: Effect.Effect /** * @since 2.0.0 */ onStart( _context: Context.Context, _effect: Effect.Effect, _parent: Option.Option>, _fiber: Fiber.RuntimeFiber ): void { // } /** * @since 2.0.0 */ onEnd( _value: Exit.Exit, _fiber: Fiber.RuntimeFiber ): void { // } /** * @since 2.0.0 */ onEffect( _fiber: Fiber.RuntimeFiber, _effect: Effect.Effect ): void { // } /** * @since 2.0.0 */ onSuspend( _fiber: Fiber.RuntimeFiber ): void { // } /** * @since 2.0.0 */ onResume( _fiber: Fiber.RuntimeFiber ): void { // } /** * @since 2.0.0 */ map(f: (a: T) => B): Supervisor { return new internal.ProxySupervisor(this, core.map(this.value, f)) } /** * @since 2.0.0 */ zip( right: Supervisor ): Supervisor<[T, A]> { return new internal.Zip(this, right) } /** * @since 2.0.0 */ onRun(execution: () => X, _fiber: Fiber.RuntimeFiber): X { return execution() } /** * @since 2.0.0 */ readonly [SupervisorTypeId]: { _T: (_: never) => never } = internal.supervisorVariance }