class Sprockets::BumbleD::Transformer
Attributes
cache_key[R]
Public Class Methods
new(options)
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/sprockets/bumble_d/transformer.rb, line 21 def initialize(options) @options = options.dup @root_dir = @options.delete(:root_dir) babel_config_version = @options.delete(:babel_config_version) unless @root_dir && File.directory?(@root_dir) error_message = 'You must provide the `root_dir` directory from which ' \ 'node modules are to be resolved' raise RootDirectoryDoesNotExistError, error_message end @resolution_complete = false @cache_key = [ self.class.name, VERSION, babel_config_version, @options ].freeze end
Public Instance Methods
babel()
click to toggle source
# File lib/sprockets/bumble_d/transformer.rb, line 78 def babel @babel ||= BabelBridge.new(@root_dir) end
cache_key_from_input(input)
click to toggle source
rubocop:enable Metrics/AbcSize, Metrics/MethodLength
# File lib/sprockets/bumble_d/transformer.rb, line 74 def cache_key_from_input(input) @cache_key + [input[:filename]] + [input[:data]] end
call(input)
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
# File lib/sprockets/bumble_d/transformer.rb, line 44 def call(input) data = input[:data] result = input[:cache].fetch(cache_key_from_input(input)) do filename_relative = Sprockets::PathUtils.split_subpath( input[:load_path], input[:filename] ) options = { moduleIds: true, sourceRoot: input[:load_path], filename: input[:filename], filenameRelative: filename_relative, ast: false }.merge(options_with_resolved_plugins_and_presets) if options[:moduleIds] && options[:moduleRoot] options[:moduleId] ||= File.join(options[:moduleRoot], input[:name]) elsif options[:moduleIds] && input[:name] && !input[:name].empty? options[:moduleId] ||= input[:name] end babel.transform(data, options) end { data: result['code'] } end
Private Instance Methods
options_with_resolved_plugins_and_presets()
click to toggle source
# File lib/sprockets/bumble_d/transformer.rb, line 84 def options_with_resolved_plugins_and_presets unless @resolution_complete resolver = Resolver.new(babel) plugins = @options[:plugins] presets = @options[:presets] @options[:plugins] = resolver.resolve_plugins(plugins) if plugins.is_a?(Array) @options[:presets] = resolver.resolve_presets(presets) if presets.is_a?(Array) @resolution_complete = true end @options end