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

Copy Markdown View Source

Unified token transformer for Lavash templates.

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

  1. data-lavash-* attributes on HTML elements (for JS hooks/optimistic updates)
  2. __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: %{...}
)