sprockets-rails 3.3.0 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e6cad3e417e1aa7ebb1d631d729eece508df7a9e7532d345402c4f5ea74b232
4
- data.tar.gz: aff71fbf71de696753d98af6268b3f3325614dab7a9a3bcbc703a97c42f3843d
3
+ metadata.gz: 6be530b798270a9a8b0590e0faecb2189cd3c0c6b921c483c7361831885b1a5a
4
+ data.tar.gz: '09b0e1f10512e0c51797736ea6eae9c79d174b45897b54326ae22aabc8773277'
5
5
  SHA512:
6
- metadata.gz: 779b26e279a0ae753c72f3b96281e3693a98701890064c23d769759cff66f4ad4b5500b8e271e8b1152cda74bafb5757c6c446b62f4d72f4bb7b41bd227136b0
7
- data.tar.gz: bb5310789f00b8656f13e16473277efbb575aeedd81c10d4b9410e78af0372ce14ab71860c826bca6bfd6e5e8cb5bf9325fc98646d432b36890f25053b6c7eff
6
+ metadata.gz: 37622f84b510b136e07544cee58151e02dc2db4ab489255afbfacc8e51b2f50a6751beeaec3c96b585b249f9f654fa8357c6caca8d07337a7d1400d624f31950
7
+ data.tar.gz: 159688118eab9c77ba8820895324fbd6b13cf7c28d5626c1fb56fa3bb8dc71274f5a0422b742e3136d55a41ba2711258d881d2005d0cdeeef6fb0f766c3380c5
@@ -2,13 +2,15 @@ module Sprockets
2
2
  module Rails
3
3
  # Rewrites urls in CSS files with the digested paths
4
4
  class AssetUrlProcessor
5
- REGEX = /url\(\s*["']?(?!(?:\#|data|http))([^"'\s)]+)\s*["']?\)/
6
-
5
+ REGEX = /url\(\s*["']?(?!(?:\#|data|http))(?<relativeToCurrentDir>.\/)?(?<path>[^"'\s)]+)\s*["']?\)/
7
6
  def self.call(input)
8
7
  context = input[:environment].context_class.new(input)
9
- data = input[:data].gsub(REGEX) { |_match| "url(#{context.asset_path($1)})" }
8
+ data = input[:data].gsub(REGEX) do |_match|
9
+ path = Regexp.last_match[:path]
10
+ "url(#{context.asset_path(path)})"
11
+ end
10
12
 
11
- { data: data }
13
+ context.metadata.merge(data: data)
12
14
  end
13
15
  end
14
16
  end
@@ -0,0 +1,54 @@
1
+ module Sprockets
2
+ module Rails
3
+ # Rewrites source mapping urls with the digested paths and protect against semicolon appending with a dummy comment line
4
+ class SourcemappingUrlProcessor
5
+ REGEX = /\/\/# sourceMappingURL=(.*\.map)/
6
+
7
+ class << self
8
+ def call(input)
9
+ env = input[:environment]
10
+ context = env.context_class.new(input)
11
+ data = input[:data].gsub(REGEX) do |_match|
12
+ sourcemap_logical_path = combine_sourcemap_logical_path(sourcefile: input[:name], sourcemap: $1)
13
+
14
+ begin
15
+ resolved_sourcemap_comment(sourcemap_logical_path, context: context)
16
+ rescue Sprockets::FileNotFound
17
+ removed_sourcemap_comment(sourcemap_logical_path, filename: input[:filename], env: env)
18
+ end
19
+ end
20
+
21
+ { data: data }
22
+ end
23
+
24
+ private
25
+ def combine_sourcemap_logical_path(sourcefile:, sourcemap:)
26
+ if (parts = sourcefile.split("/")).many?
27
+ parts[0..-2].append(sourcemap).join("/")
28
+ else
29
+ sourcemap
30
+ end
31
+ end
32
+
33
+ def resolved_sourcemap_comment(sourcemap_logical_path, context:)
34
+ "//# sourceMappingURL=#{sourcemap_asset_path(sourcemap_logical_path, context: context)}\n//!\n"
35
+ end
36
+
37
+ def sourcemap_asset_path(sourcemap_logical_path, context:)
38
+ # FIXME: Work-around for bug where if the sourcemap is nested two levels deep, it'll resolve as the source file
39
+ # that's being mapped, rather than the map itself. So context.resolve("a/b/c.js.map") will return "c.js?"
40
+ if context.resolve(sourcemap_logical_path) =~ /\.map/
41
+ context.asset_path(sourcemap_logical_path)
42
+ else
43
+ raise Sprockets::FileNotFound, "Failed to resolve source map asset due to nesting depth"
44
+ end
45
+ end
46
+
47
+ def removed_sourcemap_comment(sourcemap_logical_path, filename:, env:)
48
+ env.logger.warn "Removed sourceMappingURL comment for missing asset '#{sourcemap_logical_path}' from #{filename}"
49
+ nil
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  module Sprockets
2
2
  module Rails
3
- VERSION = "3.3.0"
3
+ VERSION = "3.4.1"
4
4
  end
5
5
  end
@@ -6,6 +6,7 @@ require 'active_support/core_ext/numeric/bytes'
6
6
  require 'sprockets'
7
7
 
8
8
  require 'sprockets/rails/asset_url_processor'
9
+ require 'sprockets/rails/sourcemapping_url_processor'
9
10
  require 'sprockets/rails/context'
10
11
  require 'sprockets/rails/helper'
11
12
  require 'sprockets/rails/quiet_assets'
@@ -122,6 +123,10 @@ module Sprockets
122
123
  Sprockets.register_postprocessor "text/css", ::Sprockets::Rails::AssetUrlProcessor
123
124
  end
124
125
 
126
+ initializer :asset_sourcemap_url_processor do |app|
127
+ Sprockets.register_postprocessor "application/javascript", ::Sprockets::Rails::SourcemappingUrlProcessor
128
+ end
129
+
125
130
  config.assets.version = ""
126
131
  config.assets.debug = false
127
132
  config.assets.compile = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprockets-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Peek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-11 00:00:00.000000000 Z
11
+ date: 2021-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sprockets
@@ -122,6 +122,7 @@ files:
122
122
  - lib/sprockets/rails/helper.rb
123
123
  - lib/sprockets/rails/quiet_assets.rb
124
124
  - lib/sprockets/rails/route_wrapper.rb
125
+ - lib/sprockets/rails/sourcemapping_url_processor.rb
125
126
  - lib/sprockets/rails/task.rb
126
127
  - lib/sprockets/rails/utils.rb
127
128
  - lib/sprockets/rails/version.rb