jekyll-simple-assets 0.3.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 066a9158d842b14dd87beb951baa1012dc97eb74e68009b97ebce1fc75d114dd
4
- data.tar.gz: a78b84504fdff45054e89b9b3f017692460d9c74c3ed0017df0c45d4605f6950
3
+ metadata.gz: de767c626fd0732f43f0922b71ff3b0ef130be4ca6f28f0debd0f33f75df2cd5
4
+ data.tar.gz: 49430a9031fd6cfb541c76f80c346fc8782287cb31fc5446eb31da030dc7ae55
5
5
  SHA512:
6
- metadata.gz: 556175bc3e9f81311e942242ac3b00574fdb6ac1fd979fe37cb74bd392b170ac14e49c893e917a870ed9714951e65a53e560bb1a76855bb647c2c945a8513528
7
- data.tar.gz: 2e081620199cdf8ec5330678311d260da6b9405c25b7121324955be887018180c643a5e87cb80d2c1abb8b23fe3d28ae39233d20b00e07e0a9fc78d6549e213a
6
+ metadata.gz: a3477b5d323c0a8c0ca927a953e8420981c17711799be68ead1d59d2f0ca047406b2b05ebcd6c480cfb519f39025e7f1991e0e1b7d6ded306875191cba865d71
7
+ data.tar.gz: 6d3d2a4a85fb4f8f55a01cea832dc58e23e49d4f522e8b765f5558c7e2f755b1be29f12246152e835c8f7e03a41118c1fd717d1d460a57a2d51809c7b6223c18
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jekyll-simple-assets (0.2.0)
4
+ jekyll-simple-assets (0.6.0)
5
5
  css_parser
6
6
  jekyll
7
+ terser
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
@@ -11,59 +12,62 @@ GEM
11
12
  addressable (2.7.0)
12
13
  public_suffix (>= 2.0.2, < 5.0)
13
14
  colorator (1.1.0)
14
- concurrent-ruby (1.1.6)
15
- css_parser (1.7.1)
15
+ concurrent-ruby (1.1.8)
16
+ css_parser (1.9.0)
16
17
  addressable
17
- em-websocket (0.5.1)
18
+ em-websocket (0.5.2)
18
19
  eventmachine (>= 0.12.9)
19
20
  http_parser.rb (~> 0.6.0)
20
21
  eventmachine (1.2.7)
21
- ffi (1.13.1)
22
+ execjs (2.7.0)
23
+ ffi (1.15.0)
22
24
  forwardable-extended (2.6.0)
23
25
  http_parser.rb (0.6.0)
24
- i18n (1.8.3)
26
+ i18n (1.8.9)
25
27
  concurrent-ruby (~> 1.0)
26
- jekyll (4.1.0)
28
+ jekyll (4.2.0)
27
29
  addressable (~> 2.4)
28
30
  colorator (~> 1.0)
29
31
  em-websocket (~> 0.5)
30
32
  i18n (~> 1.0)
31
33
  jekyll-sass-converter (~> 2.0)
32
34
  jekyll-watch (~> 2.0)
33
- kramdown (~> 2.1)
35
+ kramdown (~> 2.3)
34
36
  kramdown-parser-gfm (~> 1.0)
35
37
  liquid (~> 4.0)
36
38
  mercenary (~> 0.4.0)
37
39
  pathutil (~> 0.9)
38
40
  rouge (~> 3.0)
39
41
  safe_yaml (~> 1.0)
40
- terminal-table (~> 1.8)
42
+ terminal-table (~> 2.0)
41
43
  jekyll-sass-converter (2.1.0)
42
44
  sassc (> 2.0.1, < 3.0)
43
45
  jekyll-watch (2.2.1)
44
46
  listen (~> 3.0)
45
- kramdown (2.2.1)
47
+ kramdown (2.3.1)
46
48
  rexml
47
49
  kramdown-parser-gfm (1.1.0)
48
50
  kramdown (~> 2.0)
49
51
  liquid (4.0.3)
50
- listen (3.2.1)
52
+ listen (3.5.0)
51
53
  rb-fsevent (~> 0.10, >= 0.10.3)
52
54
  rb-inotify (~> 0.9, >= 0.9.10)
53
55
  mercenary (0.4.0)
54
56
  pathutil (0.16.2)
55
57
  forwardable-extended (~> 2.6)
56
- public_suffix (4.0.5)
58
+ public_suffix (4.0.6)
57
59
  rb-fsevent (0.10.4)
58
60
  rb-inotify (0.10.1)
59
61
  ffi (~> 1.0)
60
62
  rexml (3.2.4)
61
- rouge (3.20.0)
63
+ rouge (3.26.0)
62
64
  safe_yaml (1.0.5)
63
65
  sassc (2.4.0)
64
66
  ffi (~> 1.9)
65
- terminal-table (1.8.0)
67
+ terminal-table (2.0.0)
66
68
  unicode-display_width (~> 1.1, >= 1.1.1)
69
+ terser (1.1.3)
70
+ execjs (>= 0.3.0, < 3)
67
71
  unicode-display_width (1.7.0)
68
72
 
69
73
  PLATFORMS
data/README.md CHANGED
@@ -23,6 +23,7 @@ Returns a base64 encoded md5 hash based on the contents of the path given.
23
23
 
24
24
  Returns a relative url to the path given, with a hash based on the content of
25
25
  the file as a query string.
26
+ Will link to a minified version of the file if possible.
26
27
 
27
28
  ```liquid
28
29
  {% asset assets/js/app.js %}
@@ -58,6 +59,15 @@ Returns an md5 hash of the input string.
58
59
  {{ 'some text' | md5 }}
59
60
  ```
60
61
 
62
+ #### uglify
63
+
64
+ Minifies javascript given as an input string (uses terser, and terser settings
65
+ even though the filter is called `uglify`
66
+
67
+ ```liquid
68
+ {{ 'const foo = "bar"' | uglify }}
69
+ ```
70
+
61
71
  ## Content hashes
62
72
 
63
73
  How the content hashes work is by generating a placeholder string that is
@@ -77,6 +87,48 @@ This plugin can also be used to generate critical css stylesheets. See
77
87
  configuration for more information on doing this. To generate critical css,
78
88
  [critical](https://github.com/addyosmani/critical) must be installed.
79
89
 
90
+ ## Javascript/Typescript bundling
91
+
92
+ This plugin can also be used to bundle javascript and typescript files and
93
+ modules using esbuild. Node modules can be included just by requiring them.
94
+ Local modules can be required under the `@simple-assets` namespace, which
95
+ will look for js files in the `_js` and `_ts` directories.
96
+
97
+ For example:
98
+ ```javascript
99
+ // assets/js/main.js
100
+
101
+ // require node_module
102
+ var leftpad = require('left-pad');
103
+
104
+ // will look for left-pad.js or left-pad.ts at _js/ or _ts/ in the
105
+ // project root
106
+ var rightpad = require('@simple-assets/right-pad');
107
+ ```
108
+
109
+ You can also put variables in the liquid frontmatter of a js/ts file (that is
110
+ not under `_js` or `_ts`) to configure esbuild.
111
+
112
+ ```liquid
113
+ ---
114
+ bundle: false # don't bundle or run esbuild on this file
115
+ esbuild_flags: --target=es5 # pass any flags to esbuild for this file
116
+ ---
117
+ ```
118
+
119
+ To bundle javascript [esbuild](https://github.com/evanw/esbuild) must be
120
+ installed.
121
+
122
+ ## Javascript minification
123
+
124
+ The terser package is also included and will minify files if `terser_enabled`
125
+ is set to true in config.yml, or if JEKYLL_ENV is set to production. Any
126
+ options can be passed to terser under the `terser` key in config.yml
127
+ (see configuration for example, or
128
+ [here](https://github.com/ahorek/terser-ruby) for detailed options).
129
+ Additionally you can set terser settings in the liquid frontmatter of a js file
130
+ in the same manner as in config.yml, also under the `terser` key.
131
+
80
132
  ## Configuration
81
133
 
82
134
  ```
@@ -86,6 +138,10 @@ simple_assets:
86
138
  # default: false
87
139
  hashing_enabled: true
88
140
 
141
+ # If set to true, source maps will be generated for javascript
142
+ # default: false
143
+ source_maps_enabled: true
144
+
89
145
  # The length of the content hashes generated.
90
146
  # default: 16
91
147
  hash_length: 8
@@ -109,4 +165,14 @@ simple_assets:
109
165
  layout: post
110
166
  # If the rules should be removed from the original source css files
111
167
  extract: true
168
+
169
+ # Options for bundling javascript/typescript with the `esbuild` npm module
170
+ # Set to true to enable
171
+ bundle: true
172
+
173
+ # Options for javascript minification with terser
174
+ terser:
175
+ # any options for terser can be put here and will be passed to it
176
+ output:
177
+ ascii_only: true
112
178
  ```
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency "jekyll"
22
22
  spec.add_runtime_dependency "css_parser"
23
+ spec.add_runtime_dependency "terser"
23
24
 
24
25
  spec.add_development_dependency "bundler"
25
26
  end
@@ -155,7 +155,10 @@ def self.replace_placeholders_for_path (page_path, input)
155
155
  replacement = SimpleAssets::asset_contenthash_map[asset_path]
156
156
 
157
157
  if type == 'path'
158
- replacement = "#{ asset_path }?v=#{ replacement }"
158
+ min_path = asset_path.sub(/\.([^\.]*?)$/, '.min.\1')
159
+ url = (File.file? File.join(SimpleAssets::site.config['destination'], min_path)) ? min_path : asset_path
160
+
161
+ replacement = "#{ url }?v=#{ replacement }"
159
162
 
160
163
  replacement = SimpleAssets::relative_url(replacement)
161
164
  end
@@ -170,14 +173,6 @@ def self.replace_placeholders_for_path (page_path, input)
170
173
  output
171
174
  end
172
175
 
173
- def self.replace_placeholders_for_asset (doc, site)
174
- page_path = doc.path.sub("#{ site.config['source'] }/", '')
175
-
176
- return unless SimpleAssets::page_assets_map[page_path]
177
-
178
- doc.output = SimpleAssets::replace_placeholders_for_path(page_path, doc.output)
179
- end
180
-
181
176
 
182
177
  end
183
178
  end
@@ -7,19 +7,22 @@ module Jekyll
7
7
  module SimpleAssets
8
8
 
9
9
 
10
- def self.critical_css_source_files
11
- @@critical_css_source_files ||= []
10
+ def self.critical_css_source_files ()
11
+ @@critical_css_source_files ||= {}
12
12
  end
13
13
 
14
14
  def self.make_temp_css_files_for_critical (asset)
15
15
  SimpleAssets::config['critical_css']['css_files'].each do |path|
16
16
  next unless asset.path == path || asset.path == path.sub(/\.css$/, '.scss')
17
17
 
18
- f = Tempfile.new('css-source')
18
+ f = Tempfile.new([ 'css-source', '.css' ])
19
19
  f.write asset.output
20
20
  f.close
21
+ File.chmod(0755, f.path)
21
22
 
22
- SimpleAssets::critical_css_source_files << { 'file' => f, 'page' => asset }
23
+ Jekyll.logger.debug("SimpleAssets:", "Created new temp file for css: #{ asset.path } at: #{ f.path }")
24
+
25
+ SimpleAssets::critical_css_source_files[path] = { 'file' => f, 'page' => asset }
23
26
  end
24
27
  end
25
28
 
@@ -40,7 +43,7 @@ end
40
43
  def self.generate_critical_css (site)
41
44
  css_files_str = ''
42
45
 
43
- SimpleAssets::critical_css_source_files.each do |f|
46
+ SimpleAssets::critical_css_source_files.each do |_, f|
44
47
  css_files_str += "--css #{ f['file'].path } "
45
48
 
46
49
  f['css'] = CssParser::Parser.new
@@ -60,13 +63,16 @@ def self.generate_critical_css (site)
60
63
  stdin.write(html)
61
64
  stdin.close
62
65
 
63
- err = stderr.read
64
- unless wait_thr.value.success?
65
- Jekyll.logger.error("SimpleAssets:", 'Critical:' + err || stdout.read)
66
-
67
- next
68
- else
69
- Jekyll.logger.warn("SimpleAssets:", 'Critical:' + err) if err
66
+ if !wait_thr.value.success? || stderr.read != ''
67
+ Jekyll.logger.error("SimpleAssets:", 'Critical (css) error:')
68
+ stderr.each do |line|
69
+ Jekyll.logger.error("", line)
70
+ end
71
+ elsif stderr.read != ''
72
+ Jekyll.logger.error("SimpleAssets:", 'Critical (css) error:')
73
+ stderr.each do |line|
74
+ Jekyll.logger.error("", line)
75
+ end
70
76
  end
71
77
 
72
78
  critical_css_str = stdout.read
@@ -88,7 +94,7 @@ def self.generate_critical_css (site)
88
94
 
89
95
  critical_css.load_string! critical_css_str
90
96
 
91
- SimpleAssets::critical_css_source_files.each do |f|
97
+ SimpleAssets::critical_css_source_files.each do |_, f|
92
98
  f['css'].each_rule_set do |source_rule_set, source_media_type|
93
99
  critical_css.each_rule_set do |critical_rule_set, critical_media_type|
94
100
  if critical_rule_set.selectors.join(',') == source_rule_set.selectors.join(',')
@@ -104,13 +110,19 @@ def self.generate_critical_css (site)
104
110
  end
105
111
  end
106
112
 
107
- SimpleAssets::critical_css_source_files.each do |f|
108
- f['page'].output = f['css'].to_s if f['extract']
113
+ SimpleAssets::critical_css_source_files.each do |_, f|
114
+ leftover_css = f['css'].to_s if f['extract']
115
+
116
+ # css_parser leaves blank keyframes so fix them
117
+ keyframes = f['page'].output.scan(/@keyframes\s+(?:.*?)\s*{(?:\s*\S*?\s*{.*?}\s*)+}/m)
118
+ keyframes.each { |keyframe| leftover_css += keyframe }
119
+
120
+ f['page'].output
109
121
  end
110
122
  end
111
123
 
112
124
  def self.resolve_critical_css_content_hashes (site)
113
- SimpleAssets::critical_css_source_files.each do |source_file|
125
+ SimpleAssets::critical_css_source_files.each do |_, source_file|
114
126
  page = source_file['page']
115
127
  page_path = page.path.sub("#{ site.config['source'] }/", '')
116
128
 
@@ -0,0 +1,93 @@
1
+ module Jekyll
2
+ module SimpleAssets
3
+
4
+ def self.generate_esbuild_config_file ()
5
+ source_path = Jekyll::SimpleAssets::site.config['source']
6
+
7
+ tsconfig_path = File.join(source_path, 'jsconfig.json')
8
+ jsconfig_path = File.join(source_path, 'tsconfig.json')
9
+
10
+ config = {}
11
+
12
+ if File.file?(tsconfig_path)
13
+ config = JSON.parse(File.read(tsconfig_path))
14
+ elsif File.file?(jsconfig_path)
15
+ config = JSON.parse(File.read(jsconfig_path))
16
+ end
17
+
18
+ f = Tempfile.new([ 'jsconfig.esbuild.', '.json' ])
19
+
20
+ config['compilerOptions'] = {} unless config['compilerOptions']
21
+
22
+ base_url = source_path
23
+ if config['compilerOptions']['baseUrl']
24
+ base_url = File.join(source_path, config['compilerOptions']['baseUrl'])
25
+ end
26
+ config['compilerOptions']['baseUrl'] = Pathname.new(base_url).relative_path_from(Pathname.new(f.path))
27
+
28
+ config['compilerOptions']['paths'] = {} unless config['compilerOptions']['paths']
29
+
30
+ relative_path = Pathname.new(source_path).relative_path_from(Pathname.new(base_url))
31
+
32
+ config['compilerOptions']['paths']['@simple-assets/*'] = [
33
+ File.join(relative_path, '_js/*'),
34
+ File.join(relative_path, '_ts/*'),
35
+ ]
36
+
37
+ f.write config.to_json
38
+ f.close
39
+ File.chmod(0755, f.path)
40
+
41
+ Jekyll::SimpleAssets::esbuild_config_file(f)
42
+
43
+ Jekyll.logger.debug("SimpleAssets:", "esbuild: using tsconfig #{ f.path }")
44
+ end
45
+
46
+ def self.esbuild_bundle_file (page, payload, config_path)
47
+ if page.data['bundle'] == false
48
+ return
49
+ end
50
+
51
+ bundle_cmd = "npx esbuild --bundle --tsconfig=#{ config_path }"
52
+
53
+ if page.data['esbuild_flags']
54
+ bundle_cmd += ' ' + page.data['esbuild_flags']
55
+ end
56
+
57
+ node_env = '--define:process.env.NODE_ENV="' + (ENV['JEKYLL_ENV'] != 'production' ? "'development'" : "'production'") + '"'
58
+
59
+ bundle_cmd += ' ' + node_env + " --sourcefile=#{ page.path[/[^\/]*$/] }"
60
+
61
+ if SimpleAssets::source_maps_enabled?
62
+ bundle_cmd += ' ' + '--sourcemap=inline'
63
+ end
64
+
65
+ dir = File.dirname(page.path)
66
+
67
+ Jekyll.logger.info("SimpleAssets:", 'bundling: ' + page.path)
68
+ Jekyll.logger.debug("SimpleAssets:", 'running command: ' + bundle_cmd)
69
+
70
+ Open3.popen3(bundle_cmd, :chdir => dir) do |stdin, stdout, stderr, wait_thr|
71
+ stdin.write(page.output)
72
+ stdin.close
73
+
74
+ bundled = stdout.read
75
+
76
+ if !wait_thr.value.success? || stderr.read != ''
77
+ Jekyll.logger.error("SimpleAssets:", 'esbuild error:')
78
+ stderr.each do |line|
79
+ Jekyll.logger.error("", line)
80
+ end
81
+ elsif stderr.read != ''
82
+ Jekyll.logger.error("SimpleAssets:", 'esbuild error:')
83
+ stderr.each do |line|
84
+ Jekyll.logger.error("", line)
85
+ end
86
+ end
87
+
88
+ page.output = bundled
89
+ end
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,100 @@
1
+ require 'fileutils'
2
+ require 'terser'
3
+
4
+ module Jekyll
5
+
6
+ module SimpleAssets
7
+ def self.symbolize_keys (hash)
8
+ return {} if hash.nil?
9
+
10
+ hash.inject({}) do |result, (key, value)|
11
+
12
+ new_key = case key
13
+ when String then key.to_sym
14
+ else key
15
+ end
16
+ new_value = case value
17
+ when Hash then symbolize_keys(value)
18
+ else value
19
+ end
20
+
21
+ if new_value.is_a?(String) and new_value.match(/^\/.*\/$/)
22
+ new_value = /#{ Regexp.quote(new_value[1..-2]) }/
23
+ end
24
+
25
+ result[new_key] = new_value
26
+
27
+ result
28
+ end
29
+ end
30
+
31
+ def self.merge_recursively(a, b)
32
+ a.merge(b) {|key, a_item, b_item| SimpleAssets::merge_recursively(a_item, b_item) }
33
+ end
34
+
35
+ def self.should_minify_file? (page)
36
+ return false unless page.respond_to? :output
37
+ return false unless SimpleAssets::terser_enabled?
38
+ return false if page.data['do_not_compress'] == true
39
+ return true
40
+ end
41
+
42
+ def self.minify_file (page)
43
+ return unless SimpleAssets::should_minify_file?(page)
44
+
45
+ site_config = symbolize_keys(SimpleAssets::site.config['simple_assets']['terser'])
46
+ page_config = symbolize_keys(page.data['terser'])
47
+
48
+ config = SimpleAssets::merge_recursively(site_config || {}, page_config || {})
49
+
50
+ map_path = page.path + '.map'
51
+ if SimpleAssets::source_maps_enabled?
52
+ config = SimpleAssets::merge_recursively(config, {
53
+ :source_map => { :filename => page.path[/[^\/]*$/], :url => true },
54
+ })
55
+
56
+ minified, source_map = Terser.new(config).compile_with_map(page.output)
57
+ else
58
+ minified = Terser.new(config).compile(page.output)
59
+ end
60
+
61
+ min_path = page.path.sub(/\.(j|t)s$/i, '.min.js')
62
+ Jekyll.logger.info("SimpleAssets:", 'minified: ' + min_path)
63
+
64
+ if source_map
65
+ File.write(File.join(SimpleAssets::site.config['destination'], map_path), source_map)
66
+ minified = minified.gsub(/^\/\/#\s*?source(Mapping)?URL=.*$/, '')
67
+ minified += "\n//# sourceMappingURL=#{ SimpleAssets::relative_url(map_path) }"
68
+
69
+ Jekyll.logger.debug("SimpleAssets:", 'created source map: ' + map_path)
70
+
71
+ SimpleAssets::site.config['keep_files'] << map_path
72
+ end
73
+
74
+ if SimpleAssets::page_assets_map[page.path]
75
+ SimpleAssets::page_assets_map[min_path] = SimpleAssets::page_assets_map[page.path]
76
+ end
77
+
78
+ SimpleAssets::site.config['keep_files'] << min_path
79
+
80
+ return min_path, minified
81
+ end
82
+
83
+ module UglifyFilter
84
+ def uglify (input)
85
+ return if input.nil?
86
+
87
+ return input.split('\n').join('\\\n') unless SimpleAssets::terser_enabled?
88
+
89
+ config = @context.registers[:site].config['simple_assets']
90
+
91
+ terser_config = SimpleAssets::symbolize_keys(config['terser'])
92
+
93
+ Terser.new(terser_config).compile(input)
94
+ end
95
+ end
96
+ end
97
+
98
+ end
99
+
100
+ Liquid::Template.register_filter(Jekyll::SimpleAssets::UglifyFilter)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module SimpleAssets
5
- VERSION = "0.3.1"
5
+ VERSION = "0.6.1"
6
6
  end
7
7
  end
@@ -7,11 +7,15 @@ require 'shellwords'
7
7
 
8
8
  require 'jekyll-simple-assets/content-hash'
9
9
  require 'jekyll-simple-assets/critical'
10
+ require 'jekyll-simple-assets/esbuild'
11
+ require 'jekyll-simple-assets/terser'
10
12
 
11
13
  module Jekyll
12
14
  module SimpleAssets
13
- def self.site (site)
14
- @@site ||= site
15
+ def self.site (site = nil)
16
+ @@site = site if site
17
+
18
+ @@site
15
19
  end
16
20
 
17
21
  def self.config
@@ -26,6 +30,22 @@ module Jekyll
26
30
  config.key?('critical_css')
27
31
  end
28
32
 
33
+ def self.esbuild_enabled?
34
+ config.key?('bundle') && config['bundle'] != false
35
+ end
36
+
37
+ def self.esbuild_config_file (file = nil)
38
+ @@esbuild_config_file ||= file
39
+ end
40
+
41
+ def self.terser_enabled?
42
+ config['terser_enabled'] || ENV['JEKYLL_ENV'] == 'production'
43
+ end
44
+
45
+ def self.source_maps_enabled?
46
+ config['source_maps_enabled']
47
+ end
48
+
29
49
  module SimpleAssetsFilters
30
50
  def md5 (input)
31
51
  Digest::MD5.hexdigest(input)
@@ -105,7 +125,38 @@ Jekyll::Hooks.register :site, :post_render, priority: :low do |site, payload|
105
125
  end
106
126
 
107
127
  potential_pages.each do |doc|
108
- Jekyll::SimpleAssets::replace_placeholders_for_asset(doc, site)
128
+ page_path = doc.path.sub("#{ site.config['source'] }/", '')
129
+
130
+ if Jekyll::SimpleAssets::page_assets_map[page_path]
131
+ doc.output = Jekyll::SimpleAssets::replace_placeholders_for_path(page_path, doc.output)
132
+ end
133
+
134
+ if doc.extname =~ /^\.(j|t)s$/i and Jekyll::SimpleAssets::should_minify_file?(doc)
135
+ min_path, minified = Jekyll::SimpleAssets::minify_file(doc)
136
+
137
+ if min_path and Jekyll::SimpleAssets::page_assets_map[page_path]
138
+ minified = Jekyll::SimpleAssets::replace_placeholders_for_path(page_path, minified)
139
+ end
140
+
141
+ File.write(File.join(Jekyll::SimpleAssets::site.config['destination'], min_path), minified)
142
+ end
143
+ end
144
+ end
145
+ end
146
+
147
+ Jekyll::Hooks.register :pages, :post_render do |page, payload|
148
+ unless Jekyll::SimpleAssets::esbuild_config_file
149
+ Jekyll::SimpleAssets::generate_esbuild_config_file()
150
+ end
151
+
152
+ if page.extname =~ /^\.(j|t)s$/i
153
+ if Jekyll::SimpleAssets::esbuild_enabled?
154
+ Jekyll::SimpleAssets::esbuild_bundle_file(page, payload, Jekyll::SimpleAssets::esbuild_config_file.path)
155
+ end
156
+
157
+ if Jekyll::SimpleAssets::should_minify_file?(page)
158
+ min_path = page.path.sub(/\.(j|t)s$/i, '.min.js')
159
+ File.write(File.join(Jekyll::SimpleAssets::site.config['destination'], min_path), '')
109
160
  end
110
161
  end
111
162
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-simple-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sophie Askew
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-21 00:00:00.000000000 Z
11
+ date: 2021-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: terser
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -68,6 +82,8 @@ files:
68
82
  - lib/jekyll-simple-assets.rb
69
83
  - lib/jekyll-simple-assets/content-hash.rb
70
84
  - lib/jekyll-simple-assets/critical.rb
85
+ - lib/jekyll-simple-assets/esbuild.rb
86
+ - lib/jekyll-simple-assets/terser.rb
71
87
  - lib/jekyll-simple-assets/version.rb
72
88
  homepage: https://github.com/syldexiahime/jekyll-simple-assets
73
89
  licenses: