class Pakyow::Assets::Types::JS

Public Class Methods

new(*) click to toggle source
Calls superclass method Pakyow::Assets::Asset::new
# File lib/pakyow/assets/types/js.rb, line 14
def initialize(*)
  super

  @options = @config.babel.to_h

  if @config.source_maps
    @options[:source_file_name] = Pathname.new(@local_path).relative_path_from(
      Pathname.new(Pakyow.config.root)
    ).to_s
  end
end

Public Instance Methods

process(content) click to toggle source
# File lib/pakyow/assets/types/js.rb, line 26
def process(content)
  result = if transformable?
    transformed = Babel.transform(content, **@options)
    { content: transformed["code"], map: transformed["map"] }
  else
    { content: content, map: "" }
  end

  if @config.minify
    result = minify(result)
  end

  @source_map = result[:map]
  result[:content]
rescue StandardError => error
  Pakyow.logger.error "[#{self.class}] #{error}"

  # Be sure to return a string.
  #
  content
end
source_map?() click to toggle source
# File lib/pakyow/assets/types/js.rb, line 48
def source_map?
  transformable? || @config.minify
end
source_map_content() click to toggle source
# File lib/pakyow/assets/types/js.rb, line 52
def source_map_content
  ensure_content
  @source_map
end

Private Instance Methods

minify(input) click to toggle source
# File lib/pakyow/assets/types/js.rb, line 63
def minify(input)
  options = @config.uglifier.to_h

  if @config.source_maps
    options[:source_map] ||= {}

    if input[:map].to_s.empty?
      options[:source_map][:filename] = Pathname.new(@local_path.to_s).relative_path_from(
        Pathname.new(Pakyow.config.root)
      ).to_s
    else
      options[:source_map][:input_source_map] = input[:map]
    end
  else
    options.delete(:source_map)
  end

  uglifier = Uglifier.new(options)

  if @config.source_maps
    content, map = uglifier.compile_with_map(input[:content])
    { content: content, map: map }
  else
    { content: uglifier.compile(input[:content]) }
  end
rescue StandardError => error
  Pakyow.logger.error "[#{self.class}] #{error}"

  # Be sure to return the original input.
  #
  input
end
transformable?() click to toggle source
# File lib/pakyow/assets/types/js.rb, line 59
def transformable?
  !external?
end