import { Array as Arr, Context, Effect, Layer, Ref } from "effect" export interface TestAction { readonly command: string readonly details: Record } export class TestActions extends Context.Service Effect.Effect readonly getActions: Effect.Effect> }>()("TestActions") {} const make = Effect.gen(function*() { const actions = yield* Ref.make>([]) return TestActions.of({ getActions: Ref.get(actions), log: (action) => Ref.update(actions, Arr.append(action)) }) }) export const layer = Layer.effect(TestActions, make) export const logAction = ( command: string, details: Record = {} ): Effect.Effect => Effect.flatMap( TestActions, (actions) => actions.log({ command, details }) ) export const getActions: Effect.Effect< ReadonlyArray, never, TestActions > = Effect.flatMap(TestActions, (actions) => actions.getActions)