Packages
@loop-engine/dsl
@loop-engine/dsl turns fluent TypeScript or YAML/JSON documents into validated LoopDefinition contracts.
Install
1npm install @loop-engine/dslLoopBuilder
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/dsl"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: true38 })39 .build()YAML parsing
1import { parseLoopYaml } from "@loop-engine/dsl"2 3const definition = parseLoopYaml(yamlString)Equivalent YAML for the same loop:
1id: expense.approval2version: 1.0.03description: Expense approval loop4domain: finance5states:6 - id: SUBMITTED7 - id: UNDER_REVIEW8 - id: APPROVED9 isTerminal: true10 - id: REJECTED11 isTerminal: true12initialState: SUBMITTED13transitions:14 - id: start_review15 from: SUBMITTED16 to: UNDER_REVIEW17 allowedActors: [automation]18 - id: approve19 from: UNDER_REVIEW20 to: APPROVED21 allowedActors: [human]22 guards:23 - id: approval_obtained24 description: Manager approval required25 failureMessage: Approval missing26 severity: hard27 evaluatedBy: runtime28outcome:29 id: expense_approved30 description: Expense approved31 valueUnit: expense_approved32 measurable: trueSee /docs/defining-loops/yaml-format for the full format reference.
Validation and serialization
1import {2 parseLoopJson,3 parseLoopFile,4 serializeToJson,5 serializeToYaml,6 validateLoopDefinition7} from "@loop-engine/dsl"Validation signature:
1validateLoopDefinition(input: unknown): { valid: boolean; errors: string[]; definition?: LoopDefinition }Validation failure example:
1{2 valid: false,3 errors: ["initialState: initialState must exist in states"]4}