Module: JsxRosetta

Defined in:
lib/jsx_rosetta.rb,
lib/jsx_rosetta/ir.rb,
lib/jsx_rosetta/ast.rb,
lib/jsx_rosetta/cli.rb,
lib/jsx_rosetta/parser.rb,
lib/jsx_rosetta/routes.rb,
lib/jsx_rosetta/backend.rb,
lib/jsx_rosetta/version.rb,
lib/jsx_rosetta/ast/node.rb,
lib/jsx_rosetta/ir/types.rb,
lib/jsx_rosetta/ast/types.rb,
lib/jsx_rosetta/ast/visitor.rb,
lib/jsx_rosetta/ir/lowering.rb,
lib/jsx_rosetta/node_bridge.rb,
lib/jsx_rosetta/parse_error.rb,
lib/jsx_rosetta/backend/base.rb,
lib/jsx_rosetta/ast/inflector.rb,
lib/jsx_rosetta/backend/rails_view.rb,
lib/jsx_rosetta/backend/routes_script.rb,
lib/jsx_rosetta/backend/view_component.rb,
lib/jsx_rosetta/backend/view_component/expression_translator.rb

Defined Under Namespace

Modules: AST, Backend, IR, Routes Classes: CLI, Error, NodeBridge, ParseError, Parser

Constant Summary collapse

VERSION =
"0.3.0"

Class Method Summary collapse

Class Method Details

.backend_for(name, helpers: nil, layout: :sidecar) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/jsx_rosetta.rb', line 25

def self.backend_for(name, helpers: nil, layout: :sidecar)
  case name
  when :view_component then Backend::ViewComponent.new(helpers: helpers, layout: layout)
  when :rails_view then Backend::RailsView.new(helpers: helpers, layout: layout)
  else
    raise Error, "unknown backend: #{name.inspect}"
  end
end

.lower(source, typescript: false, source_filename: nil) ⇒ Object



12
13
14
15
# File 'lib/jsx_rosetta.rb', line 12

def self.lower(source, typescript: false, source_filename: nil)
  ast = parse(source, typescript: typescript, source_filename: source_filename)
  IR.lower(ast, source: source)
end

.parse(source, typescript: false, source_filename: nil) ⇒ Object



8
9
10
# File 'lib/jsx_rosetta.rb', line 8

def self.parse(source, typescript: false, source_filename: nil)
  Parser.new.parse(source, typescript: typescript, source_filename: source_filename)
end

.translate(source, backend: :view_component, helpers: nil, layout: :sidecar, typescript: false, source_filename: nil) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/jsx_rosetta.rb', line 17

def self.translate(source, backend: :view_component, helpers: nil, layout: :sidecar,
                   typescript: false, source_filename: nil)
  ast = parse(source, typescript: typescript, source_filename: source_filename)
  components = IR.lower_all(ast, source: source)
  backend_instance = backend_for(backend, helpers: helpers, layout: layout)
  components.flat_map { |component| backend_instance.emit(component) }
end