| 275 | ); |
| 276 | |
| 277 | const runCommitHooks = (hooks: readonly PendingCommitHook[]): Effect.Effect<void, StorageFailure> => |
| 278 | Effect.gen(function* () { |
| 279 | let failureCause: Cause.Cause<StorageFailure> = Cause.empty; |
| 280 | for (const hook of hooks) { |
| 281 | if (Predicate.isTagged(hook, "Observer")) { |
| 282 | yield* hook.effect.pipe(Effect.ignoreCause({ log: false })); |
| 283 | continue; |
| 284 | } |
| 285 | const exit = yield* Effect.exit(hook.effect); |
| 286 | if (Exit.isFailure(exit)) failureCause = Cause.combine(failureCause, exit.cause); |
| 287 | } |
| 288 | if (failureCause.reasons.length > 0) return yield* Effect.failCause(failureCause); |
| 289 | }); |
| 290 | |
| 291 | class TransactionEffectFailure { |
| 292 | constructor(readonly error: unknown) {} |