Sha256: 883cddb6e3b5413da8a7617eae98f86e1ecc75da8b4f866febc5fe2ea1f7571b

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module React
  module JSX
    # A {React::JSX}-compliant transformer which uses the deprecated `JSXTransformer.js` to transform JSX.
    class JSXTransformer
      DEFAULT_ASSET_PATH = "JSXTransformer.js"

      def initialize(options)
        @transform_options = {
          stripTypes: options.fetch(:strip_types, false),
          harmony: options.fetch(:harmony, false)
        }

        @asset_path = options.fetch(:asset_path, DEFAULT_ASSET_PATH)

        # If execjs uses therubyracer, there is no 'global'. Make sure
        # we have it so JSX script can work properly.
        js_code = "var global = global || this;#{jsx_transform_code}"
        @context = ExecJS.compile(js_code)
      end

      def transform(code)
        result = @context.call("JSXTransformer.transform", code, @transform_options)
        result["code"]
      end

      # search for transformer file using sprockets - allows user to override
      # this file in their own application
      def jsx_transform_code
        ::Rails.application.assets[@asset_path].to_s
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
react-rails-3.2.0 lib/react/jsx/jsx_transformer.rb
react-rails-3.1.1 lib/react/jsx/jsx_transformer.rb
react-rails-3.1.0 lib/react/jsx/jsx_transformer.rb
react-rails-3.0.0 lib/react/jsx/jsx_transformer.rb
react-rails-3.0.0.rc.0 lib/react/jsx/jsx_transformer.rb