class EJX::Template::Base

Attributes

children[RW]
imports[RW]

Public Class Methods

new(escape: nil) click to toggle source
# File lib/ejx/template/base.rb, line 5
def initialize(escape: nil)
  @children = []
  @escape = escape
  @imports = []
end

Public Instance Methods

to_module() click to toggle source
# File lib/ejx/template/base.rb, line 11
def to_module
  var_generator = EJX::Template::VarGenerator.new
  
  output = if @escape
    "import {" + @escape.split('.').reverse.join(" as __ejx_append} from '") + "';\n"
  else
    "import {append as __ejx_append} from 'ejx';\n"
  end
  
  @imports.each do |import|
    output << import << "\n"
  end
  
  output << "\nexport default async function (locals) {\n"
  output << "    var __output = [], __promises = [];\n    \n"
  
  @children.each do |child|
    output << case child
    when EJX::Template::String
      "    __output.push(#{child.to_js});\n"
    else
      child.to_js(var_generator: var_generator)
    end
  end
  output << "\n    await Promise.all(__promises);\n"
  output << "    return __output;\n"
  output << "}"
  output
end