# `Condukt.Workflows.Expr`
[🔗](https://github.com/tuist/condukt/blob/1.5.1/lib/condukt/workflows/expr.ex#L1)

Expression sub-language for Condukt workflows.

Workflow document fields contain `${...}` placeholders that reference
inputs, prior step outputs, and `as` bindings introduced by `map`
steps. Inside a placeholder, the language supports:

- identifiers: `inputs`, `steps`, plus any binding in scope
- member access: `inputs.name`, `steps.fetch.body.title`
- indexing: `xs[0]`, `obj["key"]`
- comparison: `==`, `!=`, `<`, `<=`, `>`, `>=`
- boolean: `&&`, `||`, `!`
- literals: strings, integers, floats, booleans, null
- formatters: `${var:json}`, `${var:csv}`

When a string field is exactly one `${expr}` placeholder, the
underlying value's type is preserved. Otherwise every placeholder is
coerced to a string and concatenated with the surrounding text.

# `eval`

Evaluates an expression AST against `ctx`.

# `interpolate`

Interpolates a single string. See module docs for the
type-preservation rule.

# `interpolate_value`

Recursively interpolates `${...}` placeholders inside any JSON
value: strings, lists, and maps. Non-string leaves are passed
through unchanged.

# `parse`

Parses an expression string (the contents of a `${...}` placeholder)
into an AST.

# `references`

Returns the sorted list of step ids referenced inside any `${...}`
placeholder anywhere in `value`. Used by the executor to infer
implicit dependencies between steps.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
