isomorfeus-asset-manager 0.14.7 → 0.14.11
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/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;
|