@etohq/workflows-input-schema-runtime
v0.0.1-next-20260318155517
Published
Cross-platform runtime for input schema (transforms, validation, rule evaluation)
Readme
@etohq/workflows-input-schema-runtime
Cross-platform runtime utilities for @etohq/workflows-input-schema:
- Schema validation (static analysis)
- Submission validation (type coercion, transforms, constraints)
- Rule evaluation (visibility/required/value overrides, variables, skip/end decisions)
API
import { validateSchemaSpec } from "@etohq/workflows-input-schema-runtime"
import { validateSubmission } from "@etohq/workflows-input-schema-runtime"
import { evaluateRules } from "@etohq/workflows-input-schema-runtime"Validate A Schema
import type { InputSchemaSpec } from "@etohq/workflows-input-schema"
import { validateSchemaSpec } from "@etohq/workflows-input-schema-runtime"
const schema: InputSchemaSpec = {
id: "schema_1",
version: 1,
name: "Example",
fields: [{ key: "name", value_type: "string", required: true }],
layout: [
{ type: "section", id: "s1", children: [{ type: "field", field_key: "name" }] },
{ type: "ending", id: "done", title: { default: "Done" } },
],
}
const result = validateSchemaSpec(schema)
// result.status: valid | warning | invalid
// result.issues: ValidationIssue[]Validate A Submission
import { validateSubmission } from "@etohq/workflows-input-schema-runtime"
const submission = {
schema_id: "schema_1",
schema_version: 1,
values: { name: " Alice " },
}
const res = validateSubmission(schema, submission)
// res.enriched_values contains coerced/transformed values when no type errors occurred.Evaluate Rules
import { evaluateRules } from "@etohq/workflows-input-schema-runtime"
const runtime = evaluateRules(schema, submission)
// runtime.field_state: required/visible per field
// runtime.value_overrides: rule-set values per field
// runtime.variable_overrides: computed variables by id
// runtime.end / runtime.skip_to: control flow directivesRuntime Semantics Notes
- Endings are terminal in the implicit layout flow.
skip_tomust target a non-ending node (useendto terminate).- Static analysis (cycles, reachability) is strongest when control-flow rules are scoped (
rule.scope.node_id).
