/** * @since 2.0.0 */ import * as Context from "./Context.js" import type * as Effect from "./Effect.js" import type * as FiberRef from "./FiberRef.js" import * as core from "./internal/core.js" /** * @since 2.0.0 */ export const TestSizedTypeId: unique symbol = Symbol.for("effect/TestSized") /** * @since 2.0.0 */ export type TestSizedTypeId = typeof TestSizedTypeId /** * @since 2.0.0 */ export interface TestSized { readonly [TestSizedTypeId]: TestSizedTypeId readonly fiberRef: FiberRef.FiberRef readonly size: Effect.Effect withSize(size: number): (effect: Effect.Effect) => Effect.Effect } /** * @since 2.0.0 */ export const TestSized: Context.Tag = Context.GenericTag("effect/TestSized") /** @internal */ class SizedImpl implements TestSized { readonly [TestSizedTypeId]: TestSizedTypeId = TestSizedTypeId constructor(readonly fiberRef: FiberRef.FiberRef) {} get size(): Effect.Effect { return core.fiberRefGet(this.fiberRef) } withSize(size: number) { return (effect: Effect.Effect): Effect.Effect => core.fiberRefLocally(this.fiberRef, size)(effect) } } /** * @since 2.0.0 */ export const make = (size: number): TestSized => new SizedImpl(core.fiberRefUnsafeMake(size)) /** * @since 2.0.0 */ export const fromFiberRef = (fiberRef: FiberRef.FiberRef): TestSized => new SizedImpl(fiberRef)