isomorfeus-asset-manager 0.14.7 → 0.14.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/isomorfeus/asset_manager/asset.rb +60 -17
- data/lib/isomorfeus/asset_manager/config.rb +2 -2
- data/lib/isomorfeus/asset_manager/rack_middleware.rb +86 -39
- data/lib/isomorfeus/asset_manager/ruby_import.rb +5 -1
- data/lib/isomorfeus/asset_manager/version.rb +1 -1
- data/lib/isomorfeus/asset_manager.rb +37 -20
- data/node_modules/.package-lock.json +4 -4
- data/node_modules/esbuild-wasm/esbuild.wasm +0 -0
- data/node_modules/esbuild-wasm/esm/browser.d.ts +11 -0
- data/node_modules/esbuild-wasm/esm/browser.js +53 -9
- data/node_modules/esbuild-wasm/esm/browser.min.js +6 -6
- data/node_modules/esbuild-wasm/lib/browser.d.ts +11 -0
- data/node_modules/esbuild-wasm/lib/browser.js +53 -9
- data/node_modules/esbuild-wasm/lib/browser.min.js +6 -6
- data/node_modules/esbuild-wasm/lib/main.d.ts +11 -0
- data/node_modules/esbuild-wasm/lib/main.js +57 -12
- data/node_modules/esbuild-wasm/package.json +2 -2
- data/package.json +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78b774bc55cc59e8fee7021c0cad65221b01885e932f7881cf6f006e45898400
|
4
|
+
data.tar.gz: 76c7b73948ed055aeeca30847e307ef1e7ef7174075463abbfff04555e032df3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e05e0fdb8f88f717638ba1aece5332d737e7e7e16f0262519386eebb4e92b21af5e31176e76dabed2d19afed09a3b8652922c0365c49625cac3e4827e72f722
|
7
|
+
data.tar.gz: 8a67ce45a8dad7badc69a5e4cff9d617ff0f5bd9e9316d369fc335e190793110696f684ac2289dd31874eeaba25d06e63dcd9f1d543870b7197d61168d813b96
|
data/README.md
CHANGED
@@ -12,4 +12,4 @@ No need to install esbuild separately, everything bundled ready to go.
|
|
12
12
|
However, if within the project the 'esbuild' npm package is installed in node_modules, that version will be used instead.
|
13
13
|
|
14
14
|
### Community and Support
|
15
|
-
At the [Isomorfeus Framework Project](
|
15
|
+
At the [Isomorfeus Framework Project](https://isomorfeus.com)
|
@@ -5,6 +5,7 @@ module Isomorfeus
|
|
5
5
|
attr_reader :bundle_gz, :bundle_gz_size
|
6
6
|
attr_reader :bundle_map, :bundle_map_size
|
7
7
|
attr_reader :bundle_map_gz, :bundle_map_gz_size
|
8
|
+
attr_reader :bundle_ruby_modules
|
8
9
|
attr_reader :css, :css_size
|
9
10
|
attr_reader :css_gz, :css_gz_size
|
10
11
|
attr_reader :css_map, :css_map_size
|
@@ -52,6 +53,22 @@ module Isomorfeus
|
|
52
53
|
@bundle_map
|
53
54
|
end
|
54
55
|
|
56
|
+
def bundle_ruby_modules=(m)
|
57
|
+
@bundled = true
|
58
|
+
@bundle_ruby_modules = m
|
59
|
+
if !Isomorfeus.production? && @target != :node
|
60
|
+
@bundle_ruby_modules.each do |key, mod_hash|
|
61
|
+
mod_hash[:js_size] = mod_hash[:js].size
|
62
|
+
mod_hash[:js_gz] = Zlib::gzip(mod_hash[:js], level: Zlib::BEST_COMPRESSION)
|
63
|
+
mod_hash[:js_gz_size] = mod_hash[:js_gz].size
|
64
|
+
mod_hash[:map_size] = mod_hash[:map].size
|
65
|
+
mod_hash[:map_gz] = Zlib::gzip(mod_hash[:map], level: Zlib::BEST_COMPRESSION)
|
66
|
+
mod_hash[:map_gz_size] = mod_hash[:map_gz].size
|
67
|
+
end
|
68
|
+
end
|
69
|
+
@bundle_ruby_modules
|
70
|
+
end
|
71
|
+
|
55
72
|
def bundled?
|
56
73
|
@bundled
|
57
74
|
end
|
@@ -92,6 +109,16 @@ module Isomorfeus
|
|
92
109
|
@ruby_imports.map(&:module_name)
|
93
110
|
end
|
94
111
|
|
112
|
+
def ruby_imports_to_s(asset_name)
|
113
|
+
s = @ruby_imports.size - 1
|
114
|
+
return '' if s < 0
|
115
|
+
js = "async function iam_load_ruby_modules() {\n"
|
116
|
+
@ruby_imports.each do |import|
|
117
|
+
js << ' await ' << import.to_dev_s(asset_name)
|
118
|
+
end
|
119
|
+
js << "}\niam_load_ruby_modules();\n"
|
120
|
+
end
|
121
|
+
|
95
122
|
def touch
|
96
123
|
@mtime = (Time.now.to_f * (10 ** 9)).to_i
|
97
124
|
end
|
@@ -108,27 +135,43 @@ module Isomorfeus
|
|
108
135
|
// Isomorfeus Asset Manager HMR code begin
|
109
136
|
let ws_protocol = (window.location.protocol == 'https:') ? 'wss:' : 'ws:';
|
110
137
|
let ws_url = ws_protocol + '//' + window.location.host + "#{Isomorfeus.assets_websocket_path}";
|
111
|
-
let
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
138
|
+
let hmr_ws_fun = function() {
|
139
|
+
let hmr_ws = new WebSocket(ws_url);
|
140
|
+
hmr_ws.onopen = function(event) { console.log("Isomorfeus Asset Manager HMR socket connected"); }
|
141
|
+
hmr_ws.onmessage = function(event) {
|
142
|
+
let update = JSON.parse(event.data);
|
143
|
+
if (typeof update.error !== 'undefined') { console.error(update.error); return; }
|
144
|
+
if (typeof update.locale !== 'undefined') {
|
145
|
+
console.log('Isomorfeus Asset Manager updating locale ', update.locale);
|
146
|
+
try { Opal.Isomorfeus.I18n.Init.$reload_from_server(); }
|
147
|
+
catch { console.log('Isomorfeus Asset Manager could not update locale ', update.locale) }
|
148
|
+
return;
|
149
|
+
}
|
150
|
+
let start_index = 'Opal.modules[\\"'.length;
|
151
|
+
let end_index = update.javascript.indexOf('"', start_index);
|
152
|
+
let opal_module_name = update.javascript.substr(start_index, end_index - start_index);
|
153
|
+
console.log('Isomorfeus Asset Manager updating ', opal_module_name);
|
154
|
+
if (typeof Opal !== 'undefined' && typeof Opal.require_table !== "undefined" && Opal.require_table['corelib/module']) {
|
155
|
+
try {
|
156
|
+
eval(update.javascript);
|
157
|
+
if (Opal.require_table[opal_module_name]) { Opal.load.call(Opal, opal_module_name); }
|
158
|
+
else { Opal.require.call(Opal, opal_module_name); }
|
159
|
+
Opal.Isomorfeus.$force_render();
|
160
|
+
} catch (e) { console.error(e); return; }
|
161
|
+
}
|
162
|
+
};
|
163
|
+
hmr_ws.onclose = function(event) {
|
164
|
+
setTimeout(function() {
|
165
|
+
console.log("Isomorfeus Asset Manager reconnecting HMR socket");
|
166
|
+
hmr_ws_fun();
|
167
|
+
}, 2000);
|
168
|
+
};
|
127
169
|
}
|
170
|
+
hmr_ws_fun()
|
128
171
|
// Isomorfeus Asset Manager HMR code end
|
129
172
|
JAVASCRIPT
|
130
173
|
end
|
131
|
-
js << "#{@ruby_imports.map(&:to_s).join("\n")}"
|
174
|
+
js << "#{@ruby_imports.map(&:to_s).join("\n")}" if Isomorfeus.production? || target == :node
|
132
175
|
end
|
133
176
|
js
|
134
177
|
end
|
@@ -66,8 +66,8 @@ module Isomorfeus
|
|
66
66
|
|
67
67
|
self.hmr_listener = nil
|
68
68
|
self.asset_manager_hmr_channel = :isomorfeus_asset_manager_module_updates
|
69
|
-
self.asset_manager_hmr_dirs = %w[channels components data operations policies]
|
70
|
-
self.assets_websocket_path = '/
|
69
|
+
self.asset_manager_hmr_dirs = %w[channels components data locales operations policies]
|
70
|
+
self.assets_websocket_path = '/_asset_manager_hmr_websocket'
|
71
71
|
self.assets_path = '/assets'
|
72
72
|
self.assets = {
|
73
73
|
'web.js' => Isomorfeus::AssetManager::Asset.new(:browser),
|
@@ -25,8 +25,93 @@ module Isomorfeus
|
|
25
25
|
path_info = env['PATH_INFO']
|
26
26
|
if path_info.start_with?(@assets_path)
|
27
27
|
|
28
|
+
if !Isomorfeus.production?
|
29
|
+
if path_info.end_with?('.rb.js')
|
30
|
+
asset_key_module_name = path_info[@assets_path_size..-7]
|
31
|
+
asset_key, module_name = asset_key_module_name.split('/')
|
32
|
+
asset_key += '.js'
|
33
|
+
if Isomorfeus.assets.key?(asset_key)
|
34
|
+
asset = Isomorfeus.assets[asset_key]
|
35
|
+
if asset && asset.target != :node
|
36
|
+
asset_manager.transition(asset_key, asset)
|
37
|
+
if asset.bundle_ruby_modules.key?(module_name)
|
38
|
+
headers = {}
|
39
|
+
headers['Last-Modified'] = asset.mtime
|
40
|
+
headers[Rack::CONTENT_TYPE] = 'application/javascript'
|
41
|
+
if should_gzip?(env)
|
42
|
+
headers['Content-Encoding'] = "gzip"
|
43
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_ruby_modules[module_name][:js_gz_size]
|
44
|
+
return [200, headers, asset.bundle_ruby_modules[module_name][:js_gz]]
|
45
|
+
else
|
46
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_ruby_modules[module_name][:js_size]
|
47
|
+
return [200, headers, asset.bundle_ruby_modules[module_name][:js]]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
elsif path_info.end_with?('.rb.js.map')
|
54
|
+
asset_key_module_name = path_info[@assets_path_size..-11]
|
55
|
+
asset_key, module_name = asset_key_module_name.split('/')
|
56
|
+
asset_key += '.js'
|
57
|
+
asset = Isomorfeus.assets[asset_key]
|
58
|
+
if asset && asset.target != :node
|
59
|
+
asset_manager.transition(asset_key, asset) unless asset.bundled?
|
60
|
+
if asset.bundle_ruby_modules.key?(module_name)
|
61
|
+
headers = {}
|
62
|
+
headers['Last-Modified'] = asset.mtime
|
63
|
+
headers[Rack::CONTENT_TYPE] = 'application/json'
|
64
|
+
if should_gzip?(env)
|
65
|
+
headers['Content-Encoding'] = "gzip"
|
66
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_ruby_modules[module_name][:map_gz_size]
|
67
|
+
return [200, headers, asset.bundle_ruby_modules[module_name][:map_gz]]
|
68
|
+
else
|
69
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_ruby_modules[module_name][:map_size]
|
70
|
+
return [200, headers, asset.bundle_ruby_modules[module_name][:map]]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
elsif path_info.end_with?('.js.map')
|
76
|
+
asset_key = path_info[@assets_path_size..-5]
|
77
|
+
asset = Isomorfeus.assets[asset_key]
|
78
|
+
if asset && asset.target != :node
|
79
|
+
asset_manager.transition(asset_key, asset) unless asset.bundled?
|
80
|
+
headers = {}
|
81
|
+
headers['Last-Modified'] = asset.mtime
|
82
|
+
headers[Rack::CONTENT_TYPE] = 'application/json'
|
83
|
+
if should_gzip?(env)
|
84
|
+
headers['Content-Encoding'] = "gzip"
|
85
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_map_gz_size
|
86
|
+
return [200, headers, asset.bundle_map_gz]
|
87
|
+
else
|
88
|
+
headers[Rack::CONTENT_LENGTH] = asset.bundle_map_size
|
89
|
+
return [200, headers, asset.bundle_map]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
elsif path_info.end_with?('.css.map')
|
94
|
+
# get css source map
|
95
|
+
asset_key = path_info[@assets_path_size..-9] + '.js'
|
96
|
+
asset = Isomorfeus.assets[asset_key]
|
97
|
+
if asset && asset.target != :node
|
98
|
+
asset_manager.transition(asset_key, asset) unless asset.bundled?
|
99
|
+
headers = {}
|
100
|
+
headers['Last-Modified'] = asset.mtime
|
101
|
+
headers[Rack::CONTENT_TYPE] = 'application/json'
|
102
|
+
if should_gzip?(env)
|
103
|
+
headers['Content-Encoding'] = "gzip"
|
104
|
+
headers[Rack::CONTENT_LENGTH] = asset.css_map_gz_size
|
105
|
+
return [200, headers, asset.css_map_gz]
|
106
|
+
else
|
107
|
+
headers[Rack::CONTENT_LENGTH] = asset.css_map_size
|
108
|
+
return [200, headers, asset.css_map]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
28
114
|
if path_info.end_with?('.js')
|
29
|
-
# get js
|
30
115
|
asset_key = path_info[@assets_path_size..-1]
|
31
116
|
if Isomorfeus.assets.key?(asset_key)
|
32
117
|
asset = Isomorfeus.assets[asset_key]
|
@@ -46,25 +131,6 @@ module Isomorfeus
|
|
46
131
|
end
|
47
132
|
end
|
48
133
|
|
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, headers, asset.bundle_map]
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
134
|
elsif path_info.end_with?('.css')
|
69
135
|
# get css
|
70
136
|
asset_key = path_info[@assets_path_size..-5] + '.js'
|
@@ -83,25 +149,6 @@ module Isomorfeus
|
|
83
149
|
return [200, headers, asset.css]
|
84
150
|
end
|
85
151
|
end
|
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]
|
91
|
-
if asset && asset.target != :node
|
92
|
-
asset_manager.transition(asset_key, asset) unless asset.bundled?
|
93
|
-
headers = {}
|
94
|
-
headers['Last-Modified'] = asset.mtime
|
95
|
-
headers[Rack::CONTENT_TYPE] = 'application/json'
|
96
|
-
if should_gzip?(env)
|
97
|
-
headers['Content-Encoding'] = "gzip"
|
98
|
-
headers[Rack::CONTENT_LENGTH] = asset.css_map_gz_size
|
99
|
-
return [200, headers, asset.css_map_gz]
|
100
|
-
else
|
101
|
-
headers[Rack::CONTENT_LENGTH] = asset.css_map_size
|
102
|
-
return [200, headers, asset.css_map]
|
103
|
-
end
|
104
|
-
end
|
105
152
|
end
|
106
153
|
|
107
154
|
return [404, {}, 'not found']
|
@@ -14,7 +14,11 @@ module Isomorfeus
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def to_s
|
17
|
-
"import(\"./#{@module_name}.js\");\n"
|
17
|
+
"import(\"./#{@module_name}.rb.js\");\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_dev_s(asset_name)
|
21
|
+
"import(\"#{Isomorfeus.assets_path}/#{asset_name}/#{@module_name}.rb.js\");\n"
|
18
22
|
end
|
19
23
|
|
20
24
|
private
|
@@ -60,21 +60,29 @@ module Isomorfeus
|
|
60
60
|
asset.mutex.synchronize do
|
61
61
|
return if !Isomorfeus.development? && asset.bundled?
|
62
62
|
return if Isomorfeus.development? && asset.bundled? && (self.class.last_updated.nil? || (asset.mtime > self.class.last_updated))
|
63
|
+
start = Time.now
|
64
|
+
puts "Isomorfeus Asset Manager bundling #{asset_key} ..."
|
63
65
|
asset.touch
|
64
|
-
|
66
|
+
asset_name = asset_key[0..-4]
|
67
|
+
asset.bundle_ruby_modules = build_ruby_and_save(asset_key, asset_name, asset)
|
65
68
|
save_imports(asset_key, asset)
|
66
69
|
run_esbuild(asset_key, asset, analyze)
|
67
|
-
asset.bundle = bundled_asset(asset_key)
|
68
|
-
asset.bundle_map = bundled_asset_map(asset_key) unless Isomorfeus.production?
|
70
|
+
asset.bundle = bundled_asset(asset_key, asset_name, asset)
|
69
71
|
asset.css = bundled_css(asset_key)
|
70
|
-
|
72
|
+
unless Isomorfeus.production?
|
73
|
+
asset.bundle_map = bundled_asset_map(asset_key)
|
74
|
+
asset.css_map = bundled_css_map(asset_key)
|
75
|
+
end
|
76
|
+
puts "Isomorfeus Asset Manager bundling #{asset_key} took #{Time.now - start}s"
|
71
77
|
end
|
72
78
|
end
|
73
79
|
|
74
80
|
private
|
75
81
|
|
76
|
-
def bundled_asset(asset_key)
|
77
|
-
File.read(File.join(@output_path, asset_key))
|
82
|
+
def bundled_asset(asset_key, asset_name, asset)
|
83
|
+
res = File.read(File.join(@output_path, asset_key))
|
84
|
+
res << asset.ruby_imports_to_s(asset_name) if !Isomorfeus.production? && asset.target != :node
|
85
|
+
res
|
78
86
|
end
|
79
87
|
|
80
88
|
def bundled_asset_map(asset_key)
|
@@ -95,20 +103,24 @@ module Isomorfeus
|
|
95
103
|
File.write(File.join(@imports_path, asset_key), asset.to_s)
|
96
104
|
end
|
97
105
|
|
98
|
-
def build_ruby_and_save(asset_key, asset)
|
106
|
+
def build_ruby_and_save(asset_key, asset_name, asset)
|
107
|
+
rb = {}
|
99
108
|
asset.ruby_imports.each do |ruby_import|
|
100
|
-
|
109
|
+
module_name = ruby_import.module_name
|
110
|
+
out_file = File.join(@imports_path, module_name + '.rb.js')
|
101
111
|
next if !Isomorfeus.development? && File.exist?(out_file)
|
102
|
-
js_map_path = File.join(@imports_path, ruby_import.module_name + '.js.map')
|
103
112
|
result = Opal::Builder.build(ruby_import.resolved_path, { esm: true })
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
113
|
+
rb[module_name] = { js: result.to_s }
|
114
|
+
if !Isomorfeus.production? && asset.target != :node
|
115
|
+
rb[module_name][:js] << "\n//# sourceMappingURL=#{Isomorfeus.assets_path}/#{asset_name}/#{module_name}.rb.js.map\n"
|
116
|
+
rb[module_name][:map] = Oj.dump(result.source_map.as_json, mode: :strict)
|
117
|
+
else
|
118
|
+
FileUtils.mkdir_p(File.join(*[@imports_path].concat(module_name.split('/')[0...-1]))) if module_name.include?('/')
|
119
|
+
File.write(out_file, rb[module_name][:js])
|
120
|
+
rb[module_name][:js] = nil
|
109
121
|
end
|
110
|
-
File.write(out_file, js)
|
111
122
|
end
|
123
|
+
rb
|
112
124
|
end
|
113
125
|
|
114
126
|
def compile_ruby(file)
|
@@ -142,7 +154,7 @@ module Isomorfeus
|
|
142
154
|
<<~JAVASCRIPT
|
143
155
|
'use strict';
|
144
156
|
const path = require('path');
|
145
|
-
|
157
|
+
let esbuild_r;
|
146
158
|
try { esbuild_r = require('esbuild'); }
|
147
159
|
catch { esbuild_r = require('esbuild-wasm'); }
|
148
160
|
const esbuild = esbuild_r;
|
@@ -168,8 +180,14 @@ module Isomorfeus
|
|
168
180
|
am_class.last_updated = (Time.now.to_f * (10 ** 9)).to_i
|
169
181
|
next if file.start_with?(@server_path)
|
170
182
|
begin
|
171
|
-
|
172
|
-
|
183
|
+
if file.end_with?('.rb')
|
184
|
+
update = compile_ruby(file)
|
185
|
+
update_json = Oj.dump(update, mode: :strict)
|
186
|
+
elsif file.end_with?('.yml') || file.end_with?('.mo') || file.end_with?('.po')
|
187
|
+
update_json = Oj.dump({ locale: file }, mode: :strict)
|
188
|
+
else
|
189
|
+
update_json = Oj.dump({ error: "Don't know how to update #{file}!" }, mode: :strict)
|
190
|
+
end
|
173
191
|
Iodine.publish(Isomorfeus.asset_manager_hmr_channel, update_json)
|
174
192
|
rescue Exception => e
|
175
193
|
message = "IsomorfeusAssetManager during hot module update:\n#{e.class}\n#{e.message}\n#{e.backtrace.join("\n")}"
|
@@ -184,7 +202,6 @@ module Isomorfeus
|
|
184
202
|
# possible future improvement
|
185
203
|
# loader: {
|
186
204
|
# '.png': 'dataurl',
|
187
|
-
# '.svg': 'text',
|
188
205
|
# },
|
189
206
|
def run_esbuild(asset_key, asset, analyze = false)
|
190
207
|
resolve_paths = ENV['NODE_PATH'].split(Gem.win_platform? ? ';' : ':')
|
@@ -199,7 +216,7 @@ module Isomorfeus
|
|
199
216
|
format: '#{asset.target == :node ? 'cjs' : 'iife'}',
|
200
217
|
legalComments: 'linked',
|
201
218
|
loader: { '.svg': 'text' },
|
202
|
-
metafile: true,
|
219
|
+
metafile: #{analyze ? 'true' : 'false'},
|
203
220
|
minify: #{Isomorfeus.production? ? 'true' : 'false'},
|
204
221
|
nodePaths: #{resolve_paths},
|
205
222
|
outdir: global.output_path,
|
@@ -4,14 +4,14 @@
|
|
4
4
|
"requires": true,
|
5
5
|
"packages": {
|
6
6
|
"node_modules/esbuild-wasm": {
|
7
|
-
"version": "0.14.
|
8
|
-
"resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.
|
9
|
-
"integrity": "sha512-
|
7
|
+
"version": "0.14.21",
|
8
|
+
"resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.21.tgz",
|
9
|
+
"integrity": "sha512-sPMyljBiKxXjW1wLd5dQnrUJR1PAt8ybSidXoZWJnMuB1mpdLju57LtstDWWkCgcaE+TGJJ6NqP/OtGyeDdEAA==",
|
10
10
|
"bin": {
|
11
11
|
"esbuild": "bin/esbuild"
|
12
12
|
},
|
13
13
|
"engines": {
|
14
|
-
"node": ">=
|
14
|
+
"node": ">=12"
|
15
15
|
}
|
16
16
|
}
|
17
17
|
}
|
Binary file
|
@@ -22,6 +22,13 @@ interface CommonOptions {
|
|
22
22
|
/** Documentation: https://esbuild.github.io/api/#target */
|
23
23
|
target?: string | string[];
|
24
24
|
|
25
|
+
/** Documentation: https://esbuild.github.io/api/#mangle-props */
|
26
|
+
mangleProps?: RegExp;
|
27
|
+
/** Documentation: https://esbuild.github.io/api/#mangle-props */
|
28
|
+
reserveProps?: RegExp;
|
29
|
+
/** Documentation: https://esbuild.github.io/api/#mangle-props */
|
30
|
+
mangleCache?: Record<string, string | false>;
|
31
|
+
/** Documentation: https://esbuild.github.io/api/#drop */
|
25
32
|
drop?: Drop[];
|
26
33
|
/** Documentation: https://esbuild.github.io/api/#minify */
|
27
34
|
minify?: boolean;
|
@@ -195,6 +202,8 @@ export interface BuildResult {
|
|
195
202
|
stop?: () => void;
|
196
203
|
/** Only when "metafile: true" */
|
197
204
|
metafile?: Metafile;
|
205
|
+
/** Only when "mangleCache" is present */
|
206
|
+
mangleCache?: Record<string, string | false>;
|
198
207
|
}
|
199
208
|
|
200
209
|
export interface BuildFailure extends Error {
|
@@ -248,6 +257,8 @@ export interface TransformResult {
|
|
248
257
|
code: string;
|
249
258
|
map: string;
|
250
259
|
warnings: Message[];
|
260
|
+
/** Only when "mangleCache" is present */
|
261
|
+
mangleCache?: Record<string, string | false>;
|
251
262
|
}
|
252
263
|
|
253
264
|
export interface TransformFailure extends Error {
|
@@ -251,6 +251,21 @@ function validateInitializeOptions(options) {
|
|
251
251
|
worker
|
252
252
|
};
|
253
253
|
}
|
254
|
+
function validateMangleCache(mangleCache) {
|
255
|
+
let validated;
|
256
|
+
if (mangleCache !== void 0) {
|
257
|
+
validated = /* @__PURE__ */ Object.create(null);
|
258
|
+
for (let key of Object.keys(mangleCache)) {
|
259
|
+
let value = mangleCache[key];
|
260
|
+
if (typeof value === "string" || value === false) {
|
261
|
+
validated[key] = value;
|
262
|
+
} else {
|
263
|
+
throw new Error(`Expected ${JSON.stringify(key)} in mangle cache to map to either a string or false`);
|
264
|
+
}
|
265
|
+
}
|
266
|
+
}
|
267
|
+
return validated;
|
268
|
+
}
|
254
269
|
function pushLogFlags(flags, options, keys, isTTY, logLevelDefault) {
|
255
270
|
let color = getFlag(options, keys, "color", mustBeBoolean);
|
256
271
|
let logLevel = getFlag(options, keys, "logLevel", mustBeString);
|
@@ -269,6 +284,8 @@ function pushCommonFlags(flags, options, keys) {
|
|
269
284
|
let target = getFlag(options, keys, "target", mustBeStringOrArray);
|
270
285
|
let format = getFlag(options, keys, "format", mustBeString);
|
271
286
|
let globalName = getFlag(options, keys, "globalName", mustBeString);
|
287
|
+
let mangleProps = getFlag(options, keys, "mangleProps", mustBeRegExp);
|
288
|
+
let reserveProps = getFlag(options, keys, "reserveProps", mustBeRegExp);
|
272
289
|
let minify = getFlag(options, keys, "minify", mustBeBoolean);
|
273
290
|
let minifySyntax = getFlag(options, keys, "minifySyntax", mustBeBoolean);
|
274
291
|
let minifyWhitespace = getFlag(options, keys, "minifyWhitespace", mustBeBoolean);
|
@@ -316,6 +333,10 @@ function pushCommonFlags(flags, options, keys) {
|
|
316
333
|
if (drop)
|
317
334
|
for (let what of drop)
|
318
335
|
flags.push(`--drop:${what}`);
|
336
|
+
if (mangleProps)
|
337
|
+
flags.push(`--mangle-props=${mangleProps.source}`);
|
338
|
+
if (reserveProps)
|
339
|
+
flags.push(`--reserve-props=${reserveProps.source}`);
|
319
340
|
if (jsx)
|
320
341
|
flags.push(`--jsx=${jsx}`);
|
321
342
|
if (jsxFactory)
|
@@ -376,6 +397,7 @@ function flagsForBuildOptions(callName, options, isTTY, logLevelDefault, writeDe
|
|
376
397
|
let write = (_a = getFlag(options, keys, "write", mustBeBoolean)) != null ? _a : writeDefault;
|
377
398
|
let allowOverwrite = getFlag(options, keys, "allowOverwrite", mustBeBoolean);
|
378
399
|
let incremental = getFlag(options, keys, "incremental", mustBeBoolean) === true;
|
400
|
+
let mangleCache = getFlag(options, keys, "mangleCache", mustBeObject);
|
379
401
|
keys.plugins = true;
|
380
402
|
checkForInvalidFlags(options, keys, `in ${callName}() call`);
|
381
403
|
if (sourcemap)
|
@@ -525,7 +547,8 @@ function flagsForBuildOptions(callName, options, isTTY, logLevelDefault, writeDe
|
|
525
547
|
absWorkingDir,
|
526
548
|
incremental,
|
527
549
|
nodePaths,
|
528
|
-
watch: watchMode
|
550
|
+
watch: watchMode,
|
551
|
+
mangleCache: validateMangleCache(mangleCache)
|
529
552
|
};
|
530
553
|
}
|
531
554
|
function flagsForTransformOptions(callName, options, isTTY, logLevelDefault) {
|
@@ -539,6 +562,7 @@ function flagsForTransformOptions(callName, options, isTTY, logLevelDefault) {
|
|
539
562
|
let loader = getFlag(options, keys, "loader", mustBeString);
|
540
563
|
let banner = getFlag(options, keys, "banner", mustBeString);
|
541
564
|
let footer = getFlag(options, keys, "footer", mustBeString);
|
565
|
+
let mangleCache = getFlag(options, keys, "mangleCache", mustBeObject);
|
542
566
|
checkForInvalidFlags(options, keys, `in ${callName}() call`);
|
543
567
|
if (sourcemap)
|
544
568
|
flags.push(`--sourcemap=${sourcemap === true ? "external" : sourcemap}`);
|
@@ -552,7 +576,10 @@ function flagsForTransformOptions(callName, options, isTTY, logLevelDefault) {
|
|
552
576
|
flags.push(`--banner=${banner}`);
|
553
577
|
if (footer)
|
554
578
|
flags.push(`--footer=${footer}`);
|
555
|
-
return
|
579
|
+
return {
|
580
|
+
flags,
|
581
|
+
mangleCache: validateMangleCache(mangleCache)
|
582
|
+
};
|
556
583
|
}
|
557
584
|
function createChannel(streamIn) {
|
558
585
|
let responseCallbacks = /* @__PURE__ */ new Map();
|
@@ -696,8 +723,8 @@ function createChannel(streamIn) {
|
|
696
723
|
if (isFirstPacket) {
|
697
724
|
isFirstPacket = false;
|
698
725
|
let binaryVersion = String.fromCharCode(...bytes);
|
699
|
-
if (binaryVersion !== "0.14.
|
700
|
-
throw new Error(`Cannot start service: Host version "${"0.14.
|
726
|
+
if (binaryVersion !== "0.14.21") {
|
727
|
+
throw new Error(`Cannot start service: Host version "${"0.14.21"}" does not match binary version ${JSON.stringify(binaryVersion)}`);
|
701
728
|
}
|
702
729
|
return;
|
703
730
|
}
|
@@ -1156,7 +1183,8 @@ function createChannel(streamIn) {
|
|
1156
1183
|
absWorkingDir,
|
1157
1184
|
incremental,
|
1158
1185
|
nodePaths,
|
1159
|
-
watch
|
1186
|
+
watch,
|
1187
|
+
mangleCache
|
1160
1188
|
} = flagsForBuildOptions(callName, options, isTTY, buildLogLevelDefault, writeDefault);
|
1161
1189
|
let request = {
|
1162
1190
|
command: "build",
|
@@ -1172,6 +1200,8 @@ function createChannel(streamIn) {
|
|
1172
1200
|
};
|
1173
1201
|
if (requestPlugins)
|
1174
1202
|
request.plugins = requestPlugins;
|
1203
|
+
if (mangleCache)
|
1204
|
+
request.mangleCache = mangleCache;
|
1175
1205
|
let serve2 = serveOptions && buildServeData(refs, serveOptions, request, key);
|
1176
1206
|
let rebuild;
|
1177
1207
|
let stop;
|
@@ -1180,6 +1210,8 @@ function createChannel(streamIn) {
|
|
1180
1210
|
result.outputFiles = response.outputFiles.map(convertOutputFiles);
|
1181
1211
|
if (response.metafile)
|
1182
1212
|
result.metafile = JSON.parse(response.metafile);
|
1213
|
+
if (response.mangleCache)
|
1214
|
+
result.mangleCache = response.mangleCache;
|
1183
1215
|
if (response.writeToStdout !== void 0)
|
1184
1216
|
console.log(decodeUTF8(response.writeToStdout).replace(/\n$/, ""));
|
1185
1217
|
};
|
@@ -1307,20 +1339,32 @@ function createChannel(streamIn) {
|
|
1307
1339
|
try {
|
1308
1340
|
if (typeof input !== "string")
|
1309
1341
|
throw new Error('The input to "transform" must be a string');
|
1310
|
-
let
|
1342
|
+
let {
|
1343
|
+
flags,
|
1344
|
+
mangleCache
|
1345
|
+
} = flagsForTransformOptions(callName, options, isTTY, transformLogLevelDefault);
|
1311
1346
|
let request = {
|
1312
1347
|
command: "transform",
|
1313
1348
|
flags,
|
1314
1349
|
inputFS: inputPath !== null,
|
1315
1350
|
input: inputPath !== null ? inputPath : input
|
1316
1351
|
};
|
1352
|
+
if (mangleCache)
|
1353
|
+
request.mangleCache = mangleCache;
|
1317
1354
|
sendRequest(refs, request, (error, response) => {
|
1318
1355
|
if (error)
|
1319
1356
|
return callback(new Error(error), null);
|
1320
1357
|
let errors = replaceDetailsInMessages(response.errors, details);
|
1321
1358
|
let warnings = replaceDetailsInMessages(response.warnings, details);
|
1322
1359
|
let outstanding = 1;
|
1323
|
-
let next = () =>
|
1360
|
+
let next = () => {
|
1361
|
+
if (--outstanding === 0) {
|
1362
|
+
let result = { warnings, code: response.code, map: response.map };
|
1363
|
+
if (response.mangleCache)
|
1364
|
+
result.mangleCache = response == null ? void 0 : response.mangleCache;
|
1365
|
+
callback(null, result);
|
1366
|
+
}
|
1367
|
+
};
|
1324
1368
|
if (errors.length > 0)
|
1325
1369
|
return callback(failureErrorWithLog("Transform failed", errors, warnings), null);
|
1326
1370
|
if (response.codeFS) {
|
@@ -1625,7 +1669,7 @@ function convertOutputFiles({ path, contents }) {
|
|
1625
1669
|
}
|
1626
1670
|
|
1627
1671
|
// lib/npm/browser.ts
|
1628
|
-
var version = "0.14.
|
1672
|
+
var version = "0.14.21";
|
1629
1673
|
var build = (options) => ensureServiceIsRunning().build(options);
|
1630
1674
|
var serve = () => {
|
1631
1675
|
throw new Error(`The "serve" API only works in node`);
|
@@ -2382,7 +2426,7 @@ onmessage = ({ data: wasm }) => {
|
|
2382
2426
|
callback(null, count);
|
2383
2427
|
};
|
2384
2428
|
let go = new global.Go();
|
2385
|
-
go.argv = ["", \`--service=\${"0.14.
|
2429
|
+
go.argv = ["", \`--service=\${"0.14.21"}\`];
|
2386
2430
|
WebAssembly.instantiate(wasm, go.importObject).then(({ instance }) => go.run(instance));
|
2387
2431
|
};}`;
|
2388
2432
|
let worker;
|