Files
flowgraph/src/schema/edge.ts

49 lines
1.5 KiB
TypeScript

import { Type, type Static } from "@alkdev/typebox";
import { NodeStatusEnum } from "./enums.js";
import { OperationNodeAttrs } from "./node.js";
export const OperationEdgeAttrs = Type.Object({
compatible: Type.Boolean(),
detail: Type.Optional(Type.String()),
mismatches: Type.Optional(
Type.Array(
Type.Object({
path: Type.String(),
expected: Type.String(),
actual: Type.String(),
}),
),
),
});
export type OperationEdgeAttrs = Static<typeof OperationEdgeAttrs>;
export const TriggeredEdgeAttrs = Type.Object({});
export type TriggeredEdgeAttrs = Static<typeof TriggeredEdgeAttrs>;
export const DependencyEdgeAttrs = Type.Object({});
export type DependencyEdgeAttrs = Static<typeof DependencyEdgeAttrs>;
export type CallEdgeAttrs = TriggeredEdgeAttrs | DependencyEdgeAttrs;
export const TemplateEdgeAttrs = Type.Object({
edgeType: Type.Union([Type.Literal("sequential"), Type.Literal("conditional")]),
condition: Type.Optional(Type.Unknown()),
negated: Type.Optional(Type.Boolean()),
dataFlow: Type.Optional(Type.Boolean({ default: false })),
});
export type TemplateEdgeAttrs = Static<typeof TemplateEdgeAttrs>;
export type TemplateNodeAttrs = OperationNodeAttrs;
export const CallResultSchema = Type.Object({
status: NodeStatusEnum,
output: Type.Unknown(),
error: Type.Optional(
Type.Object({
code: Type.String(),
message: Type.String(),
details: Type.Optional(Type.Unknown()),
}),
),
});
export type CallResult = Static<typeof CallResultSchema>;