Lavash.Template.TokenTransformer (Lavash v0.3.0-rc.2)

Copy Markdown View Source

Unified token-tree transformer for Lavash templates.

This module implements Lavash.TokenTransformer to handle all compile-time template transformations at the tree level:

  1. data-lavash-* attributes on HTML elements (for JS hooks/optimistic updates)
  2. __lavash_client_bindings__ on component calls (for binding chain propagation)
  3. <span data-lavash-display> wrapping of bare {@field} expressions

Tree shape (LV 1.2)

Nodes:

  • {:block, type, name, attrs, children, open_meta, close_meta}type is :tag | :local_component | :remote_component | :slot
  • {:self_close, type, name, attrs, meta} — void/self-closing tags
  • {:text, content, meta}
  • {:body_expr, code, meta}{...} inline expression
  • {:eex, code, meta}<%= ... %> expression
  • {:eex_block, code, clauses, meta}<%= if x do %>...<% end %> where each clause is {children, end_code, meta}
  • {:eex_comment, content, meta}

Attributes (per node):

  • {name, attr_value, meta} where attr_value is {:expr, code, meta} | {:string, content, meta} | nil
  • or {:root, {:expr, code, meta}, meta} for <div {@spread}>

Usage

Lavash.TagEngine.compile_from_tokens(parsed,
  token_transformer: Lavash.Template.TokenTransformer,
  lavash_metadata: %{...}
)