Unified token transformer for Lavash templates.
This module implements Lavash.TokenTransformer to handle all compile-time
template transformations at the token level:
data-lavash-*attributes on HTML elements (for JS hooks/optimistic updates)__lavash_client_bindings__on component calls (for binding chain propagation)
Token Structure
Tokens from Phoenix.LiveView.Tokenizer:
{:tag, name, attrs, meta}- HTML elements{:remote_component, name, attrs, meta}-<Foo.bar>components{:local_component, name, attrs, meta}-<.foo>components{:slot, name, attrs, meta}-<:header>slots{:close, type, name, meta}- Closing tags{:text, content, meta}- Text content{:expr, marker, content}-{...}expressions
Attributes are {name, value, attr_meta} where value is:
{:string, content, str_meta}-"literal"{:expr, content, expr_meta}-{@foo}nil- Boolean attribute
Usage
Pass this module as :token_transformer to Lavash.TagEngine:
EEx.compile_string(source,
engine: Lavash.TagEngine,
tag_handler: Phoenix.LiveView.HTMLEngine,
token_transformer: Lavash.Template.TokenTransformer,
lavash_metadata: %{...}
)