From 56c2e3210835883577a56ebc7c82d762ee13cd0c Mon Sep 17 00:00:00 2001 From: Mark Mullan Date: Wed, 9 Mar 2022 14:44:42 -0800 Subject: [PATCH] FIX: when processing sourcemap files that do not exist, also remove nested transformation extensions --- .../rails/sourcemapping_url_processor.rb | 2 +- test/test_sourcemapping_url_processor.rb | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/sprockets/rails/sourcemapping_url_processor.rb b/lib/sprockets/rails/sourcemapping_url_processor.rb index fe8a29cc..cd57de66 100644 --- a/lib/sprockets/rails/sourcemapping_url_processor.rb +++ b/lib/sprockets/rails/sourcemapping_url_processor.rb @@ -2,7 +2,7 @@ module Sprockets module Rails # Rewrites source mapping urls with the digested paths and protect against semicolon appending with a dummy comment line class SourcemappingUrlProcessor - REGEX = /\/\/# sourceMappingURL=(.*\.map)/ + REGEX = /\/\/# sourceMappingURL=(.*\.map\.?\w*)/ class << self def call(input) diff --git a/test/test_sourcemapping_url_processor.rb b/test/test_sourcemapping_url_processor.rb index ead7c33a..468655db 100644 --- a/test/test_sourcemapping_url_processor.rb +++ b/test/test_sourcemapping_url_processor.rb @@ -46,4 +46,28 @@ def resolve(path, **kargs) output = Sprockets::Rails::SourcemappingUrlProcessor.call(input) assert_equal({ data: "var mapped;\n" }, output) end + + def test_missing_with_json_file_ext_also_removes_file_ext + @env.context_class.class_eval do + def resolve(path, **kargs) + raise Sprockets::FileNotFound + end + end + + input = { environment: @env, data: "var mapped;\n//# sourceMappingURL=mappedNOT.js.map.json", name: 'mapped', filename: 'mapped.js', metadata: {} } + output = Sprockets::Rails::SourcemappingUrlProcessor.call(input) + assert_equal({ data: "var mapped;\n" }, output) + end + + def test_missing_with_json_file_ext_and_subsequent_valid_js_retains_valid_js + @env.context_class.class_eval do + def resolve(path, **kargs) + raise Sprockets::FileNotFound + end + end + + input = { environment: @env, data: "var mapped;\n//# sourceMappingURL=mappedNOT.js.map.json\nvar foo = bar();", name: 'mapped', filename: 'mapped.js', metadata: {} } + output = Sprockets::Rails::SourcemappingUrlProcessor.call(input) + assert_equal({ data: "var mapped;\n\nvar foo = bar();" }, output) + end end