Skip to content

Transaction

Transaction: object

Defined in: Core/Transaction.ts:67

make: <In>() => Transaction<In, Record<never, never>, never, never> = makeTransaction

Creates an empty, initialized Transaction ready to accumulate steps.

Creates an empty, initialized Transaction ready to accumulate steps.

In = void

The initial payload supplied to Transaction.run. Defaults to void.

Transaction<In, Record<never, never>, never, never>

Transaction.step for appending sequential steps to the transaction.

// Zero-argument transaction:
const pingTransaction = Transaction.make();

// Parameterized transaction:
const orderTransaction = Transaction.make<OrderInput>();

Transaction.step for appending sequential steps to the transaction.

const checkout = Transaction.make<OrderInput>();

run: {(options?): <Acc, E, EUndo>(transaction) => Result<Failure<E, EUndo>, Acc>; <In>(input, options?): <Acc, E, EUndo>(transaction) => Result<Failure<E, EUndo>, Acc>; } = runTransaction

Executes a Transaction, returning an infallible lazy Task.Result.

Steps run sequentially. If all steps succeed, returns Ok(Acc) containing all step outputs. If any step fails, times out, or is aborted, completed steps are undone in reverse (LIFO) order and returns Err(Transaction.Failure).

(options?): <Acc, E, EUndo>(transaction) => Result<Failure<E, EUndo>, Acc>

Executes a zero-input Transaction with optional run options.

RunOptions<unknown, unknown>

<Acc, E, EUndo>(transaction) => Result<Failure<E, EUndo>, Acc>

<In>(input, options?): <Acc, E, EUndo>(transaction) => Result<Failure<E, EUndo>, Acc>

Executes a parameterized Transaction with input and optional run options.

In

In

RunOptions<unknown, unknown>

<Acc, E, EUndo>(transaction) => Result<Failure<E, EUndo>, Acc>

Transaction.step for configuring transactional steps with compensating undo actions.

const outcome = await pipe(
  checkout,
  Transaction.run(orderInput, { signal }),
)();

step: <In, Acc, Id, Out, E2, EUndo2, ETimeout>(config) => <E1, EUndo1>(transaction) => Transaction<In, Acc & { readonly [K in string]: Out }, E2 | ETimeout | E1, EUndo2 | EUndo1>

Appends a step to a Transaction with an optional compensating undo action.

The step receives an accumulated context containing the initial input and all outputs from preceding steps. An optional compensating undo action can be defined to reverse external mutations if this or any subsequent step fails.

Appends a step to a Transaction.

The step receives an accumulated context containing the initial input and all outputs from preceding steps. An optional compensating undo action can be defined to reverse any external mutations if this or any subsequent step fails.

Supports optional retry and timeout resilience policies on forward execution.

In = void

Acc extends Record<string, unknown> = Record<never, never>

Id extends string = string

Out = unknown

E2 = never

EUndo2 = never

ETimeout = never

StepConfig<In, Acc, Id, Out, E2, EUndo2, ETimeout>

<E1, EUndo1>(transaction) => Transaction<In, Acc & { readonly [K in string]: Out }, E2 | ETimeout | E1, EUndo2 | EUndo1>

Transaction.run for executing the compiled transaction.

const transaction = pipe(
  Transaction.make<OrderInput>(),
  Transaction.step({
    id: "inventory",
    run: ({ initial }) => reserveInventory(initial.sku),
    undo: (reservation) => releaseInventory(reservation.id),
  }),
);

Transaction.run for executing the compiled transaction.

const withStep = pipe(
  transaction,
  Transaction.step({
    id: "inventory",
    run: ({ initial }) => reserveInventory(initial.sku),
    undo: (res) => releaseInventory(res.id),
  }),
);