Class: Jekyll::Esbuild::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-esbuild.rb

Overview

Class that applies esbuild to JavaScript files using specified options

Instance Method Summary collapse

Constructor Details

#initialize(source, options = {}) ⇒ Engine

Returns a new instance of Engine.



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/jekyll-esbuild.rb', line 11

def initialize(source, options = {})
  Jekyll.logger.debug 'JekyllEsbuild:', 'Initializing engine'
  @script = File.expand_path(options[:script] || 'node_modules/.bin/esbuild', source)
  unless File.exist?(@script)
    Jekyll.logger.error 'JekyllEsbuild:', "Script #{@script} not found."
    exit 1
  end

  @bundle = options.fetch(:bundle, true)
  @minify = options.fetch(:minify, 'environment')
  @sourcemap = options.fetch(:sourcemap, 'environment')
end

Instance Method Details

#get_command_args(file_path) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/jekyll-esbuild.rb', line 24

def get_command_args(file_path)
  is_prod = ENV.fetch('NODE_ENV', 'development') == 'production'
  args = [@script, file_path.to_s, "--outfile=#{file_path}", '--allow-overwrite']
  args << '--bundle' if @bundle
  args << '--minify' if @minify == 'always' ||
                        (@minify == 'environment' && is_prod)

  args << '--sourcemap' if @sourcemap == 'always' ||
                           (@sourcemap == 'environment' && !is_prod)
  args
end

#process(file_path) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/jekyll-esbuild.rb', line 36

def process(file_path)
  args = get_command_args(file_path)
  _, stderr, status = Open3.capture3(*args)
  unless status.success?
    Jekyll.logger.error 'JekyllEsbuild:', "Failed with error: #{stderr}"
    raise "Esbuild failed with status #{status.exitstatus}"
  end
  Jekyll.logger.info 'JekyllEsbuild:', "Processed #{file_path}"
end