import { reportError } from "@effect-app/infra/errorReporter" import * as Effect from "effect-app/Effect" import * as Cause from "effect/Cause" import * as Exit from "effect/Exit" const reportQueueError_ = reportError("Queue") export const reportQueueError = (cause: Cause.Cause, extras?: Record) => reportQueueError_(cause, extras) export function reportNonInterruptedFailure(context?: Record) { const report = reportNonInterruptedFailureCause(context) return (inp: Effect.Effect): Effect.Effect, never, R> => inp.pipe( Effect.onExit( Exit.match({ onFailure: report, onSuccess: () => Effect.void }) ), Effect.exit ) } export function reportNonInterruptedFailureCause(context?: Record) { return (cause: Cause.Cause): Effect.Effect => { if (Cause.hasInterruptsOnly(cause)) { return Effect.failCause(cause as Cause.Cause) } return reportQueueError(cause, context) } }