瀏覽代碼

Fixed #34496 -- Fixed handling source maps with data URI in ManifestStaticFilesStorage.

Regression in 781b44240a06f0c868254f40f36ce46c927f56d1.
Hielke Walinga 1 年之前
父節點
當前提交
fb535e0a90

+ 2 - 2
django/contrib/staticfiles/storage.py

@@ -86,7 +86,7 @@ class HashedFilesMixin:
                 ),
                 (
                     (
-                        r"(?m)(?P<matched>)^(/\*#[ \t]"
+                        r"(?m)^(?P<matched>/\*#[ \t]"
                         r"(?-i:sourceMappingURL)=(?P<url>.*)[ \t]*\*/)$"
                     ),
                     "/*# sourceMappingURL=%(url)s */",
@@ -97,7 +97,7 @@ class HashedFilesMixin:
             "*.js",
             (
                 (
-                    r"(?m)(?P<matched>)^(//# (?-i:sourceMappingURL)=(?P<url>.*))$",
+                    r"(?m)^(?P<matched>//# (?-i:sourceMappingURL)=(?P<url>.*))$",
                     "//# sourceMappingURL=%(url)s",
                 ),
             ),

+ 2 - 0
tests/staticfiles_tests/project/documents/cached/source_map_data_uri.css

@@ -0,0 +1,2 @@
+* {outline: 1px solid red;}
+/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMv*/

+ 2 - 0
tests/staticfiles_tests/project/documents/cached/source_map_data_uri.js

@@ -0,0 +1,2 @@
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMv
+let a_variable = 1;

+ 24 - 0
tests/staticfiles_tests/test_storage.py

@@ -269,6 +269,18 @@ class TestHashedFiles:
             )
         self.assertPostCondition()
 
+    def test_css_source_map_data_uri(self):
+        relpath = self.hashed_file_path("cached/source_map_data_uri.css")
+        self.assertEqual(relpath, "cached/source_map_data_uri.3166be10260d.css")
+        with storage.staticfiles_storage.open(relpath) as relfile:
+            content = relfile.read()
+            source_map_data_uri = (
+                b"/*# sourceMappingURL=data:application/json;charset=utf8;base64,"
+                b"eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMv*/"
+            )
+            self.assertIn(source_map_data_uri, content)
+        self.assertPostCondition()
+
     def test_js_source_map(self):
         relpath = self.hashed_file_path("cached/source_map.js")
         self.assertEqual(relpath, "cached/source_map.cd45b8534a87.js")
@@ -307,6 +319,18 @@ class TestHashedFiles:
             )
         self.assertPostCondition()
 
+    def test_js_source_map_data_uri(self):
+        relpath = self.hashed_file_path("cached/source_map_data_uri.js")
+        self.assertEqual(relpath, "cached/source_map_data_uri.a68d23cbf6dd.js")
+        with storage.staticfiles_storage.open(relpath) as relfile:
+            content = relfile.read()
+            source_map_data_uri = (
+                b"//# sourceMappingURL=data:application/json;charset=utf8;base64,"
+                b"eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMv"
+            )
+            self.assertIn(source_map_data_uri, content)
+        self.assertPostCondition()
+
     @override_settings(
         STATICFILES_DIRS=[os.path.join(TEST_ROOT, "project", "faulty")],
         STATICFILES_FINDERS=["django.contrib.staticfiles.finders.FileSystemFinder"],