Packages
@loop-engine/loop-definition
@loop-engine/loop-definition turns fluent TypeScript or YAML/JSON documents into validated LoopDefinition contracts.
Install
1npm install @loop-engine/loop-definitionLoopBuilder
1LoopBuilder.create(id: string, domain: string): LoopBuilderBuilder methods implemented in source:
.version(v: string): LoopBuilder.description(d: string): LoopBuilder.state(id: string, options?: { isTerminal?: boolean; isError?: boolean }): LoopBuilder.initialState(id: string): LoopBuilder.transition(spec: { id: string; from: string; to: string; actors: ActorType[]; guards?: Partial<GuardSpec>[] }): LoopBuilder.outcome(spec: { id?: string; description?: string; valueUnit?: string; measurable?: boolean; businessMetrics?: ... }): LoopBuilder.build(): LoopDefinition
Fluent example
1import { LoopBuilder } from "@loop-engine/loop-definition"2 3const approval = LoopBuilder4 .create("expense.approval", "finance")5 .version("1.0.0")6 .description("Expense approval loop")7 .state("SUBMITTED")8 .state("UNDER_REVIEW")9 .state("APPROVED", { isTerminal: true })10 .state("REJECTED", { isTerminal: true })11 .initialState("SUBMITTED")12 .transition({13 id: "start_review",14 from: "SUBMITTED",15 to: "UNDER_REVIEW",16 actors: ["automation"]17 })18 .transition({19 id: "approve",20 from: "UNDER_REVIEW",21 to: "APPROVED",22 actors: ["human"],23 guards: [24 {25 id: "approval_obtained" as never,26 description: "Manager approval required",27 failureMessage: "Approval missing",28 severity: "hard",29 evaluatedBy: "runtime"30 }31 ]32 })33 .outcome({34 id: "expense_approved",35 description: "Expense approved",36 valueUnit: "expense_approved",37 measurable: true,38 businessMetrics: [39 { id: "m_expense_approved", label: "Expense approved", unit: "count" }40 ]41 })42 .build()