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

55 lines (52 loc) 1.46 kB
import type { Effect } from "../Effect.js" import type { Concurrency } from "../Types.js" import * as core from "./core.js" /** @internal */ export const match = <A, E, R>( concurrency: Concurrency | undefined, sequential: () => Effect<A, E, R>, unbounded: () => Effect<A, E, R>, bounded: (limit: number) => Effect<A, E, R> ): Effect<A, E, R> => { switch (concurrency) { case undefined: return sequential() case "unbounded": return unbounded() case "inherit": return core.fiberRefGetWith( core.currentConcurrency, (concurrency) => concurrency === "unbounded" ? unbounded() : concurrency > 1 ? bounded(concurrency) : sequential() ) default: return concurrency > 1 ? bounded(concurrency) : sequential() } } /** @internal */ export const matchSimple = <A, E, R>( concurrency: Concurrency | undefined, sequential: () => Effect<A, E, R>, concurrent: () => Effect<A, E, R> ): Effect<A, E, R> => { switch (concurrency) { case undefined: return sequential() case "unbounded": return concurrent() case "inherit": return core.fiberRefGetWith( core.currentConcurrency, (concurrency) => concurrency === "unbounded" || concurrency > 1 ? concurrent() : sequential() ) default: return concurrency > 1 ? concurrent() : sequential() } }