jekyll-js-converter 0.0.2 → 1.0.0
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 +4 -4
- data/lib/jekyll-js-converter.rb +21 -0
- data/lib/jekyll-js-converter/version.rb +1 -1
- data/lib/jekyll/converters/js.rb +84 -32
- data/lib/jekyll/js_source_map_page.rb +29 -0
- metadata +3 -17
- data/lib/jekyll/theme.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01a1eeed7b7f346b0419859c5c4f59cd735c311f4f80ab1571147abf0d82cf66
|
4
|
+
data.tar.gz: 004070e0d99a326d423b20bf8bb3691c98e05d7e1089f7262304c3740317e297
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27142c7333b1ba84a3dea919ff2f3614e23b8d4f783f8c7280b97e55e6d9266924e0af3ddc1be79ba0ee6f9368013a2e70918ce18c03a9204d4dc25ca6cd86cb
|
7
|
+
data.tar.gz: a91ec043fbcc3c279616f47e462f8574dbbcc355962c4534605749653e9f77983bdcd79455424c9a6d8c77a602afa3527eb3b50413510cbf6958b42c620e779a
|
data/lib/jekyll-js-converter.rb
CHANGED
@@ -2,4 +2,25 @@ require 'jekyll-js-converter/version'
|
|
2
2
|
require 'jekyll/converters/js'
|
3
3
|
|
4
4
|
module JekyllJsConverter
|
5
|
+
class Jekyll::Theme
|
6
|
+
def javascript_path
|
7
|
+
@javascript_path ||= path_for '_javascript'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Jekyll::Hooks.register :pages, :pre_render do |page|
|
12
|
+
if page.is_a?(Jekyll::Page)
|
13
|
+
page.converters.each do |converter|
|
14
|
+
converter.associate_page(page) if converter.is_a?(Jekyll::Converters::Js)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Jekyll::Hooks.register :pages, :post_render do |page|
|
20
|
+
if page.is_a?(Jekyll::Page)
|
21
|
+
page.converters.each do |converter|
|
22
|
+
converter.dissociate_page(page) if converter.is_a?(Jekyll::Converters::Js)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
5
26
|
end
|
data/lib/jekyll/converters/js.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'uglifier'
|
2
|
+
require 'jekyll/js_source_map_page'
|
2
3
|
|
3
4
|
module Jekyll
|
4
5
|
module Converters
|
@@ -8,21 +9,15 @@ module Jekyll
|
|
8
9
|
safe true
|
9
10
|
priority :low
|
10
11
|
|
11
|
-
def
|
12
|
-
@
|
13
|
-
|
12
|
+
def associate_page(page)
|
13
|
+
@page = page
|
14
|
+
@source_map_page = JsSourceMapPage.new(@page)
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
def output_ext(ext)
|
21
|
-
'.js'
|
22
|
-
end
|
23
|
-
|
24
|
-
def safe?
|
25
|
-
!!@config['safe']
|
17
|
+
def dissociate_page(page)
|
18
|
+
@page = nil
|
19
|
+
@site = nil
|
20
|
+
@source_map_page = nil
|
26
21
|
end
|
27
22
|
|
28
23
|
def javascript_config
|
@@ -35,19 +30,19 @@ module Jekyll
|
|
35
30
|
|
36
31
|
def load_paths
|
37
32
|
@load_paths ||= begin
|
38
|
-
paths = [Jekyll.sanitized_path(
|
39
|
-
paths += javascript_config['load_paths'].map { |load_path| File.expand_path(load_path) } rescue []
|
33
|
+
paths = [Jekyll.sanitized_path(site.source, javascript_dir)]
|
34
|
+
paths += javascript_config['load_paths'].map { |load_path| File.expand_path(load_path, site.source) } rescue []
|
40
35
|
|
41
36
|
if safe?
|
42
|
-
paths.map! { |path| Jekyll.sanitized_path(
|
37
|
+
paths.map! { |path| Jekyll.sanitized_path(site.source, path) }
|
43
38
|
end
|
44
39
|
|
45
|
-
Dir.chdir(
|
40
|
+
Dir.chdir(site.source) do
|
46
41
|
paths = paths.flat_map { |path| Dir.glob(path) }
|
47
42
|
|
48
43
|
paths.map! do |path|
|
49
44
|
if safe?
|
50
|
-
Jekyll.sanitized_path(
|
45
|
+
Jekyll.sanitized_path(site.source, path)
|
51
46
|
else
|
52
47
|
File.expand_path(path)
|
53
48
|
end
|
@@ -55,26 +50,71 @@ module Jekyll
|
|
55
50
|
end
|
56
51
|
|
57
52
|
paths.uniq!
|
58
|
-
paths <<
|
53
|
+
paths << site.theme.javascript_path if site.theme&.javascript_path
|
59
54
|
paths.select { |path| File.directory?(path) }
|
60
55
|
end
|
61
56
|
end
|
62
57
|
|
58
|
+
def matches(ext)
|
59
|
+
ext =~ /^\.js$/i
|
60
|
+
end
|
61
|
+
|
62
|
+
def output_ext(ext = '')
|
63
|
+
'.js'
|
64
|
+
end
|
65
|
+
|
66
|
+
def safe?
|
67
|
+
!!@config['safe']
|
68
|
+
end
|
69
|
+
|
63
70
|
def convert(content)
|
64
|
-
|
65
|
-
Jekyll::Utils.
|
66
|
-
|
67
|
-
|
71
|
+
if generate_source_map?
|
72
|
+
config = Jekyll::Utils.symbolize_hash_keys(
|
73
|
+
Jekyll::Utils.deep_merge_hashes(
|
74
|
+
{ :uglifer => {
|
75
|
+
:source_map => {
|
76
|
+
:map_url => @source_map_page.name,
|
77
|
+
:sources_content => true,
|
78
|
+
:filename => @page.name
|
79
|
+
}
|
80
|
+
}
|
81
|
+
},
|
82
|
+
javascript_config
|
83
|
+
)
|
84
|
+
)
|
85
|
+
|
86
|
+
uglified, source_map = Uglifier.new(config[:uglifer]).compile_with_map(insert_imports(content))
|
87
|
+
|
88
|
+
@source_map_page.source_map(source_map)
|
89
|
+
site.pages << @source_map_page
|
90
|
+
|
91
|
+
uglified
|
92
|
+
else
|
93
|
+
config = Jekyll::Utils.symbolize_hash_keys(
|
94
|
+
Jekyll::Utils.deep_merge_hashes(
|
95
|
+
{ :uglifer => {} },
|
96
|
+
javascript_config
|
97
|
+
)
|
68
98
|
)
|
69
|
-
)
|
70
99
|
|
71
|
-
|
100
|
+
Uglifier.new(config[:uglifer]).compile(insert_imports(content))
|
101
|
+
end
|
72
102
|
end
|
73
103
|
|
74
104
|
private
|
75
105
|
|
106
|
+
def generate_source_map?
|
107
|
+
if @page.nil? || source_map_option.eql?(:never)
|
108
|
+
false
|
109
|
+
elsif source_map_option.eql?(:always)
|
110
|
+
true
|
111
|
+
else
|
112
|
+
:development == source_map_option && source_map_option == Jekyll.env.to_sym
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
76
116
|
def insert_imports(content)
|
77
|
-
content.enum_for(:scan,
|
117
|
+
content.enum_for(:scan, /^\/\/=\s*(\w+)\s+([\w\/\\\-\.:]+)\W*$/).map {
|
78
118
|
{ directive: Regexp.last_match[1],
|
79
119
|
path: Regexp.last_match[2],
|
80
120
|
insert_at: Regexp.last_match.end(0) }
|
@@ -86,17 +126,21 @@ module Jekyll
|
|
86
126
|
import_content = load_paths.reduce([]) { |files, load_path|
|
87
127
|
glob = case match[:directive]
|
88
128
|
when 'import'
|
89
|
-
match[:path]
|
90
|
-
|
129
|
+
if (match[:path] =~ URI::regexp).nil?
|
130
|
+
match[:path] += '.js' unless match[:path].end_with?('.js')
|
131
|
+
Dir.glob(File.join(load_path, '**', match[:path]))
|
132
|
+
else
|
133
|
+
[match[:path]]
|
134
|
+
end
|
91
135
|
when 'import_directory'
|
92
|
-
File.join(load_path, '**', match[:path], '*.js')
|
136
|
+
Dir.glob(File.join(load_path, '**', match[:path], '*.js'))
|
93
137
|
when 'import_tree'
|
94
|
-
File.join(load_path, '**', match[:path], '**', '*.js')
|
138
|
+
Dir.glob(File.join(load_path, '**', match[:path], '**', '*.js'))
|
95
139
|
end
|
96
140
|
|
97
|
-
files +
|
141
|
+
files + glob
|
98
142
|
}.uniq.reduce('') { |import_content, file|
|
99
|
-
import_content += File.read(file)
|
143
|
+
import_content += (file =~ URI::regexp).nil? ? File.read(file) : Net::HTTP.get(URI(file))
|
100
144
|
}
|
101
145
|
|
102
146
|
content.insert(match[:insert_at], "\n#{insert_imports(import_content)}")
|
@@ -105,6 +149,14 @@ module Jekyll
|
|
105
149
|
|
106
150
|
content
|
107
151
|
end
|
152
|
+
|
153
|
+
def site
|
154
|
+
@site ||= @page.nil? ? Jekyll.sites.last : @page.site
|
155
|
+
end
|
156
|
+
|
157
|
+
def source_map_option
|
158
|
+
javascript_config.fetch('source_map', :always).to_sym
|
159
|
+
end
|
108
160
|
end
|
109
161
|
end
|
110
162
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Jekyll
|
2
|
+
class JsSourceMapPage < Page
|
3
|
+
def initialize(js_page)
|
4
|
+
@site = js_page.site
|
5
|
+
@dir = js_page.dir
|
6
|
+
@data = js_page.data
|
7
|
+
@name = js_page.basename + '.js.map'
|
8
|
+
|
9
|
+
process(@name)
|
10
|
+
Jekyll::Hooks.trigger :pages, :post_init, self
|
11
|
+
end
|
12
|
+
|
13
|
+
def source_map(map)
|
14
|
+
self.content = map
|
15
|
+
end
|
16
|
+
|
17
|
+
def ext
|
18
|
+
'.map'
|
19
|
+
end
|
20
|
+
|
21
|
+
def asset_file?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def inspect
|
26
|
+
"#<#{self.class} @name=#{name.inspect}>"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-js-converter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Susco
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: jekyll
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 4.2.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 4.2.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: uglifier
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,7 +89,7 @@ files:
|
|
103
89
|
- lib/jekyll-js-converter.rb
|
104
90
|
- lib/jekyll-js-converter/version.rb
|
105
91
|
- lib/jekyll/converters/js.rb
|
106
|
-
- lib/jekyll/
|
92
|
+
- lib/jekyll/js_source_map_page.rb
|
107
93
|
homepage: https://github.com/dsusco/jekyll-js-converter
|
108
94
|
licenses:
|
109
95
|
- MIT
|