UNPKG

veffect

Version:

powerful TypeScript validation library built on the robust foundation of Effect combining exceptional type safety, high performance, and developer experience. Taking inspiration from Effect's functional principles, VEffect delivers a balanced approach tha

83 lines (65 loc) 1.89 kB
import type * as Cause from "../Cause.js" import type * as Effect from "../Effect.js" import type * as FiberStatus from "../FiberStatus.js" import type * as FiberRuntime from "./fiberRuntime.js" /** @internal */ export type FiberMessage = InterruptSignal | Stateful | Resume | YieldNow /** @internal */ export const OP_INTERRUPT_SIGNAL = "InterruptSignal" as const /** @internal */ export type OP_INTERRUPT_SIGNAL = typeof OP_INTERRUPT_SIGNAL /** @internal */ export const OP_STATEFUL = "Stateful" as const /** @internal */ export type OP_STATEFUL = typeof OP_STATEFUL /** @internal */ export const OP_RESUME = "Resume" as const /** @internal */ export type OP_RESUME = typeof OP_RESUME /** @internal */ export const OP_YIELD_NOW = "YieldNow" as const /** @internal */ export type OP_YIELD_NOW = typeof OP_YIELD_NOW /** @internal */ export interface InterruptSignal { readonly _tag: OP_INTERRUPT_SIGNAL readonly cause: Cause.Cause<never> } /** @internal */ export interface Stateful { readonly _tag: OP_STATEFUL onFiber(fiber: FiberRuntime.FiberRuntime<any, any>, status: FiberStatus.FiberStatus): void } /** @internal */ export interface Resume { readonly _tag: OP_RESUME readonly effect: Effect.Effect<any, any, any> } /** @internal */ export interface YieldNow { readonly _tag: OP_YIELD_NOW } /** @internal */ export const interruptSignal = (cause: Cause.Cause<never>): FiberMessage => ({ _tag: OP_INTERRUPT_SIGNAL, cause }) /** @internal */ export const stateful = ( onFiber: ( fiber: FiberRuntime.FiberRuntime<any, any>, status: FiberStatus.FiberStatus ) => void ): FiberMessage => ({ _tag: OP_STATEFUL, onFiber }) /** @internal */ export const resume = (effect: Effect.Effect<any, any, any>): FiberMessage => ({ _tag: OP_RESUME, effect }) /** @internal */ export const yieldNow = (): FiberMessage => ({ _tag: OP_YIELD_NOW })