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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff9a8f0e408ac39900fbdf2f84af35b829a5decf60412dcc536594b7be6ce0d4
4
- data.tar.gz: be5a5258bc3759bb902f04798108e9ea2928d6b75934d0c3f05b299e37d2ba8a
3
+ metadata.gz: cdcf458b09fa1d032dc66f6c8fc61094b95ac6782ee15c4036c74fd68e830276
4
+ data.tar.gz: 1de06150024171c6d2ab5aab2f74d09d3ebaed3607ffbc589e332907b5f39ef2
5
5
  SHA512:
6
- metadata.gz: d37d573ff6f236997f01ec48692f933be8836ceb8fddad64660a043a45193c6d8b13b697ecc08f23eb946e4698b378916151dc65bfc73834122ff8800a5bbae9
7
- data.tar.gz: 1d8940b0fb0a25ebb35219d551e5529697e3888be12b9d7506600624bc427e436eb7b9d4004e380e1a2280eb38ad777700285a5fa39c6f44469fcc9e94ea6a61
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
- @bundle_map_gz = Zlib::gzip(m, level: Zlib::BEST_COMPRESSION) unless @target == :node
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
- # get js
30
- if Isomorfeus.assets.key?(asset_key)
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] = 'application/javascript'
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.bundle_gz_size
40
- return [200, headers, asset.bundle_gz]
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.bundle_size
43
- return [200, {}, asset.bundle]
44
- end
82
+ headers[Rack::CONTENT_LENGTH] = asset.css_size
83
+ return [200, {}, asset.css]
84
+ end
45
85
  end
46
-
47
- # get source map
48
- elsif asset_key.end_with?('.js.map')
49
- asset = Isomorfeus.assets[asset_key[0..-5]]
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.bundle_map_gz.size
58
- return [200, headers, asset.bundle_map_gz]
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.bundle_map.size
61
- return [200, {}, asset.bundle_map]
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
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  class AssetManager
3
- VERSION = '0.13.1'
3
+ VERSION = '0.13.5'
4
4
  end
5
5
  end
@@ -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.9",
8
- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.9.tgz",
9
- "integrity": "sha512-qMLSYVSlm6ZrV1OqXYPHelniJns2DbUI0MxwZyNGrym/arrEX19T2xfJvzujLHXVShBRHEMLgplJkNtQ2NXapQ==",
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