tools/core/orchestrators/invocation.orchestrator.ts

tools/core/orchestrators/invocation.orchestrator.ts is a file in Coordination Surface. 64 lines of code and 4 definitions.

import type { Invocation, Operation, Outcome } from "../types/invocation.types.ts";
import {
    agenda,
    arrive,
    defer,
    inherit,
    raise,
    record,
    relocate,
    retire,
    retract,
    roster,
    successor,
} from "../coordinators/venue.coordinator.ts";
import {
    append,
    extract,
    fixture,
    half,
    index,
    mark,
    member,
    repair,
    role,
    surfaceRaise,
    task,
    transition,
} from "../coordinators/invocation.coordinator.ts";
import { finish } from "../readers/invocation.reader.ts";

const EXCLUSIVE_ACTS: readonly Operation[] = [
    raise,
    relocate,
    retire,
    roster,
    inherit,
    agenda,
    append,
    repair,
    extract,
    fixture,
    member,
    role,
    surfaceRaise,
    half,
    task,
    mark,
    transition,
    index,
    record,
    retract,
    successor,
    defer,
    arrive,
];

export const runExclusive = async function runExclusive(invocation: Invocation): Promise<void> {
    let pending: Outcome | Promise<Outcome> | null = null;
    for (const operation of EXCLUSIVE_ACTS) {
        pending ??= operation(invocation);
    }

    if (pending !== null) {
        const outcome = await pending;
        finish(outcome.message, outcome.code);
    }
};