isomorfeus-asset-manager 0.13.1 → 0.13.5
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/isomorfeus/asset_manager/asset.rb +47 -7
- data/lib/isomorfeus/asset_manager/rack_middleware.rb +61 -19
- data/lib/isomorfeus/asset_manager/version.rb +1 -1
- data/lib/isomorfeus/asset_manager/view_helper.rb +4 -0
- data/lib/isomorfeus/asset_manager.rb +14 -2
- data/node_modules/.package-lock.json +3 -3
- data/node_modules/esbuild-wasm/esbuild.wasm +0 -0
- data/node_modules/esbuild-wasm/esm/browser.d.ts +177 -69
- data/node_modules/esbuild-wasm/esm/browser.js +4 -4
- data/node_modules/esbuild-wasm/esm/browser.min.js +2 -2
- data/node_modules/esbuild-wasm/lib/browser.d.ts +177 -69
- data/node_modules/esbuild-wasm/lib/browser.js +4 -4
- data/node_modules/esbuild-wasm/lib/browser.min.js +2 -2
- data/node_modules/esbuild-wasm/lib/main.d.ts +177 -69
- data/node_modules/esbuild-wasm/lib/main.js +7 -7
- data/node_modules/esbuild-wasm/package.json +1 -1
- data/package.json +1 -1
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdcf458b09fa1d032dc66f6c8fc61094b95ac6782ee15c4036c74fd68e830276
|
4
|
+
data.tar.gz: 1de06150024171c6d2ab5aab2f74d09d3ebaed3607ffbc589e332907b5f39ef2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bae40a9732cd8ab15b1d3033b86a7d31da6dfe74dc5b068b4e7ff502988f39bfc9c950780d01e8d10be59f3b4408d910ce7addf51b7d5285f2045e8cd45e848
|
7
|
+
data.tar.gz: 40838f081519fdc24fa2d36b8a791f3dde4abda3a47bb3a5c3b6dfe18e0774a2d3acc5b9c1bf6fad4cfbce07041e76bc20102bc7d753b38b1d81f4a9907ef367
|
@@ -3,8 +3,12 @@ module Isomorfeus
|
|
3
3
|
class Asset
|
4
4
|
attr_reader :bundle, :bundle_size
|
5
5
|
attr_reader :bundle_gz, :bundle_gz_size
|
6
|
-
attr_reader :bundle_map
|
7
|
-
attr_reader :bundle_map_gz
|
6
|
+
attr_reader :bundle_map, :bundle_map_size
|
7
|
+
attr_reader :bundle_map_gz, :bundle_map_gz_size
|
8
|
+
attr_reader :css, :css_size
|
9
|
+
attr_reader :css_gz, :css_gz_size
|
10
|
+
attr_reader :css_map, :css_map_size
|
11
|
+
attr_reader :css_map_gz, :css_map_gz_size
|
8
12
|
attr_reader :mtime, :ruby_imports, :target
|
9
13
|
attr_reader :mutex
|
10
14
|
|
@@ -13,6 +17,7 @@ module Isomorfeus
|
|
13
17
|
raise "Unknown asset target!" unless %i[browser node].include?(target)
|
14
18
|
@target = target
|
15
19
|
@bundled = false
|
20
|
+
@css_bundled = false
|
16
21
|
@ruby_compiled = false
|
17
22
|
@js_imports = []
|
18
23
|
@ruby_imports = []
|
@@ -26,21 +31,24 @@ module Isomorfeus
|
|
26
31
|
@ruby_imports << Isomorfeus::AssetManager::RubyImport.new(*args)
|
27
32
|
end
|
28
33
|
|
29
|
-
def bundle=(b)
|
34
|
+
def bundle=(b)
|
30
35
|
@bundled = true
|
31
36
|
@bundle = b
|
32
37
|
@bundle_size = @bundle.size
|
33
38
|
unless @target == :node
|
34
|
-
@bundle_gz = Zlib::gzip(b, level: Zlib::BEST_COMPRESSION)
|
39
|
+
@bundle_gz = Zlib::gzip(b, level: Zlib::BEST_COMPRESSION)
|
35
40
|
@bundle_gz_size = @bundle_gz.size
|
36
41
|
end
|
37
42
|
@bundle
|
38
43
|
end
|
39
44
|
|
40
|
-
def bundle_map=(m)
|
45
|
+
def bundle_map=(m)
|
41
46
|
@bundled = true
|
42
47
|
@bundle_map = m
|
43
|
-
|
48
|
+
unless @target == :node
|
49
|
+
@bundle_map_gz = Zlib::gzip(m, level: Zlib::BEST_COMPRESSION)
|
50
|
+
@bundle_map_gz_size = @bundle_map_gz.size
|
51
|
+
end
|
44
52
|
@bundle_map
|
45
53
|
end
|
46
54
|
|
@@ -48,6 +56,38 @@ module Isomorfeus
|
|
48
56
|
@bundled
|
49
57
|
end
|
50
58
|
|
59
|
+
def css=(b)
|
60
|
+
@bundled = true
|
61
|
+
if b
|
62
|
+
@has_css = true
|
63
|
+
@css = b
|
64
|
+
@css_size = @css.size
|
65
|
+
unless @target == :node
|
66
|
+
@css_gz = Zlib::gzip(b, level: Zlib::BEST_COMPRESSION)
|
67
|
+
@css_gz_size = @bundle_gz.size
|
68
|
+
end
|
69
|
+
end
|
70
|
+
@css
|
71
|
+
end
|
72
|
+
|
73
|
+
def css_map=(m)
|
74
|
+
@bundled = true
|
75
|
+
if m
|
76
|
+
@has_css = true
|
77
|
+
@css_map = m
|
78
|
+
@css_map_size = @css_map.size
|
79
|
+
unless @target == :node
|
80
|
+
@css_map_gz = Zlib::gzip(m, level: Zlib::BEST_COMPRESSION)
|
81
|
+
@css_map_gz_size = @css_map_gz.size
|
82
|
+
end
|
83
|
+
end
|
84
|
+
@css_map
|
85
|
+
end
|
86
|
+
|
87
|
+
def has_css?
|
88
|
+
@has_css
|
89
|
+
end
|
90
|
+
|
51
91
|
def ruby_modules
|
52
92
|
@ruby_imports.map(&:module_name)
|
53
93
|
end
|
@@ -79,7 +119,7 @@ module Isomorfeus
|
|
79
119
|
if (typeof Opal !== 'undefined' && typeof Opal.require_table !== "undefined" && Opal.require_table['corelib/module']) {
|
80
120
|
try {
|
81
121
|
eval(update.javascript);
|
82
|
-
if (Opal.require_table[opal_module_name]) { Opal.load.call(Opal, opal_module_name); }
|
122
|
+
if (Opal.require_table[opal_module_name]) { Opal.load.call(Opal, opal_module_name); }
|
83
123
|
else { Opal.require.call(Opal, opal_module_name); }
|
84
124
|
Opal.Isomorfeus.$force_render();
|
85
125
|
} catch (e) { console.error(e); return; }
|
@@ -9,7 +9,7 @@ module Isomorfeus
|
|
9
9
|
def initialize(app)
|
10
10
|
@app = app
|
11
11
|
@asset_manager = Isomorfeus::AssetManager.new
|
12
|
-
@compressible_types = %w[application/javascript text/javascript]
|
12
|
+
@compressible_types = %w[application/javascript text/javascript text/css]
|
13
13
|
if Isomorfeus.assets_path.end_with?('/')
|
14
14
|
@assets_path = Isomorfeus.assets_path
|
15
15
|
@assets_path_size = @assets_path.size
|
@@ -24,29 +24,70 @@ module Isomorfeus
|
|
24
24
|
def call(env)
|
25
25
|
path_info = env['PATH_INFO']
|
26
26
|
if path_info.start_with?(@assets_path)
|
27
|
-
asset_key = path_info[@assets_path_size..-1]
|
28
27
|
|
29
|
-
|
30
|
-
|
28
|
+
if path_info.end_with?('.js')
|
29
|
+
# get js
|
30
|
+
asset_key = path_info[@assets_path_size..-1]
|
31
|
+
if Isomorfeus.assets.key?(asset_key)
|
32
|
+
asset = Isomorfeus.assets[asset_key]
|
33
|
+
if asset && asset.target != :node
|
34
|
+
asset_manager.transition(asset_key, asset)
|
35
|
+
headers = {}
|
36
|
+
headers['Last-Modified'] = asset.mtime
|
37
|
+
headers[Rack::CONTENT_TYPE] = 'application/javascript'
|
38
|
+
if should_gzip?(env)
|
39
|
+
headers['Content-Encoding'] = "gzip"
|
40
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_gz_size
|
41
|
+
return [200, headers, asset.bundle_gz]
|
42
|
+
else
|
43
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_size
|
44
|
+
return [200, {}, asset.bundle]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
elsif path_info.end_with?('.js.map')
|
50
|
+
# get js source map
|
51
|
+
asset_key = path_info[@assets_path_size..-5]
|
52
|
+
asset = Isomorfeus.assets[asset_key]
|
53
|
+
if asset && asset.target != :node
|
54
|
+
asset_manager.transition(asset_key, asset) unless asset.bundled?
|
55
|
+
headers = {}
|
56
|
+
headers['Last-Modified'] = asset.mtime
|
57
|
+
headers[Rack::CONTENT_TYPE] = 'application/json'
|
58
|
+
if should_gzip?(env)
|
59
|
+
headers['Content-Encoding'] = "gzip"
|
60
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_map_gz_size
|
61
|
+
return [200, headers, asset.bundle_map_gz]
|
62
|
+
else
|
63
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_map_size
|
64
|
+
return [200, {}, asset.bundle_map]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
elsif path_info.end_with?('.css')
|
69
|
+
# get css
|
70
|
+
asset_key = path_info[@assets_path_size..-5] + '.js'
|
31
71
|
asset = Isomorfeus.assets[asset_key]
|
32
72
|
if asset && asset.target != :node
|
33
73
|
asset_manager.transition(asset_key, asset)
|
34
74
|
headers = {}
|
35
75
|
headers['Last-Modified'] = asset.mtime
|
36
|
-
headers[Rack::CONTENT_TYPE] = '
|
76
|
+
headers[Rack::CONTENT_TYPE] = 'text/css'
|
37
77
|
if should_gzip?(env)
|
38
78
|
headers['Content-Encoding'] = "gzip"
|
39
|
-
headers[Rack::CONTENT_LENGTH] = asset.
|
40
|
-
return [200, headers, asset.
|
79
|
+
headers[Rack::CONTENT_LENGTH] = asset.css_gz_size
|
80
|
+
return [200, headers, asset.css_gz]
|
41
81
|
else
|
42
|
-
headers[Rack::CONTENT_LENGTH] = asset.
|
43
|
-
return [200, {}, asset.
|
44
|
-
end
|
82
|
+
headers[Rack::CONTENT_LENGTH] = asset.css_size
|
83
|
+
return [200, {}, asset.css]
|
84
|
+
end
|
45
85
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
86
|
+
|
87
|
+
elsif path_info.end_with?('.css.map')
|
88
|
+
# get css source map
|
89
|
+
asset_key = path_info[@assets_path_size..-9] + '.js'
|
90
|
+
asset = Isomorfeus.assets[asset_key]
|
50
91
|
if asset && asset.target != :node
|
51
92
|
asset_manager.transition(asset_key, asset) unless asset.bundled?
|
52
93
|
headers = {}
|
@@ -54,15 +95,16 @@ module Isomorfeus
|
|
54
95
|
headers[Rack::CONTENT_TYPE] = 'application/json'
|
55
96
|
if should_gzip?(env)
|
56
97
|
headers['Content-Encoding'] = "gzip"
|
57
|
-
headers[Rack::CONTENT_LENGTH] = asset.
|
58
|
-
return [200, headers, asset.
|
98
|
+
headers[Rack::CONTENT_LENGTH] = asset.css_map_gz_size
|
99
|
+
return [200, headers, asset.css_map_gz]
|
59
100
|
else
|
60
|
-
headers[Rack::CONTENT_LENGTH] = asset.
|
61
|
-
return [200, {}, asset.
|
62
|
-
end
|
101
|
+
headers[Rack::CONTENT_LENGTH] = asset.css_map_size
|
102
|
+
return [200, {}, asset.css_map]
|
103
|
+
end
|
63
104
|
end
|
64
105
|
end
|
65
106
|
|
107
|
+
return [404, {}, 'not found']
|
66
108
|
# hot reloading subscription
|
67
109
|
elsif Isomorfeus.development? && path_info == Isomorfeus.assets_websocket_path
|
68
110
|
if env['rack.upgrade?'] == :websocket
|
@@ -4,6 +4,10 @@ module Isomorfeus
|
|
4
4
|
def script_tag(path)
|
5
5
|
"<script type=\"application/javascript\" src=\"#{Isomorfeus.assets_path}/#{path}\"></script>"
|
6
6
|
end
|
7
|
+
|
8
|
+
def stylesheet_tag(path)
|
9
|
+
"<link rel=\"stylesheet\" type=\"text/css\" href=\"#{Isomorfeus.assets_path}/#{path}\">"
|
10
|
+
end
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
@@ -24,7 +24,7 @@ module Isomorfeus
|
|
24
24
|
|
25
25
|
init_hmr_listener if Isomorfeus.development? && !Isomorfeus.hmr_listener
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
def transition(asset_key, asset, analyze: false)
|
29
29
|
return if !Isomorfeus.development? && asset.bundled?
|
30
30
|
asset.mutex.synchronize do
|
@@ -35,6 +35,8 @@ module Isomorfeus
|
|
35
35
|
run_esbuild(asset_key, asset, analyze)
|
36
36
|
asset.bundle = bundled_asset(asset_key)
|
37
37
|
asset.bundle_map = bundled_asset_map(asset_key) unless Isomorfeus.production?
|
38
|
+
asset.css = bundled_css(asset_key)
|
39
|
+
asset.css_map = bundled_css_map(asset_key) unless Isomorfeus.production?
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
@@ -48,6 +50,16 @@ module Isomorfeus
|
|
48
50
|
File.read(File.join(@output_path, asset_key + '.map'))
|
49
51
|
end
|
50
52
|
|
53
|
+
def bundled_css(asset_key)
|
54
|
+
filename = File.join(@output_path, asset_key[0..-4] + '.css')
|
55
|
+
File.read(filename) if File.exist?(filename)
|
56
|
+
end
|
57
|
+
|
58
|
+
def bundled_css_map(asset_key)
|
59
|
+
filename = File.join(@output_path, asset_key[0..-4] + '.css.map')
|
60
|
+
File.read(filename) if File.exist?(filename)
|
61
|
+
end
|
62
|
+
|
51
63
|
def save_imports(asset_key, asset)
|
52
64
|
File.write(File.join(@imports_path, asset_key), asset.to_s)
|
53
65
|
end
|
@@ -91,7 +103,7 @@ module Isomorfeus
|
|
91
103
|
end
|
92
104
|
end
|
93
105
|
end
|
94
|
-
raise "Asset Manager: error bundling '#{asset_key}'"
|
106
|
+
raise "Asset Manager: error bundling '#{asset_key}'"
|
95
107
|
end
|
96
108
|
end
|
97
109
|
|
@@ -4,9 +4,9 @@
|
|
4
4
|
"requires": true,
|
5
5
|
"packages": {
|
6
6
|
"node_modules/esbuild-wasm": {
|
7
|
-
"version": "0.13.
|
8
|
-
"resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.
|
9
|
-
"integrity": "sha512-
|
7
|
+
"version": "0.13.13",
|
8
|
+
"resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.13.tgz",
|
9
|
+
"integrity": "sha512-oy0ULEK7Vjb61nBbvdeuZwuASexHtUJsMK4+Z9ge+O6Oq1nq/yUlpefMXl5LUpgWUQViNCxlEz536xvYIsTO5w==",
|
10
10
|
"bin": {
|
11
11
|
"esbuild": "bin/esbuild"
|
12
12
|
},
|
Binary file
|