Browse Source

feat(js-loader): Only use es5/es6 bundles in v7 JS loader (#66303)

As the coming version of the JS SDK only uses ES2017 bundles, it is no
longer necessary to differentiate between es5 and es6 bundles.

ref https://github.com/getsentry/sentry-javascript/pull/10911
Sigrid Huemer 1 year ago
parent
commit
270a826a35

+ 1 - 0
src/sentry/api/endpoints/project_key_details.py

@@ -88,6 +88,7 @@ class ProjectKeyDetailsEndpoint(ProjectEndpoint):
                     help_text="The Sentry Javascript SDK version to use. The currently supported options are:",
                     # Ideally we would call get_browser_sdk_version_choices() here but that requires
                     # passing in project to this decorator
+                    # todo: v8 add version
                     choices=[("latest", "Most recent version"), ("7.x", "Version 7 releases")],
                     required=False,
                 ),

+ 1 - 0
src/sentry/loader/browsersdkversion.py

@@ -37,6 +37,7 @@ def get_highest_browser_sdk_version(versions):
 
 
 def get_all_browser_sdk_version_versions():
+    # todo: v8 add version
     return ["latest", "7.x", "6.x", "5.x", "4.x"]
 
 

+ 1 - 0
src/sentry/projectoptions/defaults.py

@@ -169,6 +169,7 @@ register(
 )
 
 # The available loader SDK versions
+# todo: v8 add version
 register(
     key="sentry:loader_available_sdk_versions",
     epoch_defaults={1: ["7.x", "6.x", "5.x", "4.x"], 11: ["7.x"]},

+ 3 - 2
src/sentry/web/frontend/js_sdk_loader.py

@@ -67,6 +67,7 @@ class JavaScriptSdkLoader(BaseView):
                 "hasDebug": False,
             }
 
+        is_v7_sdk = sdk_version >= Version("7.0.0") and sdk_version < Version("8.0.0")
         is_greater_or_equal_v7_sdk = sdk_version >= Version("7.0.0")
 
         is_lazy = True
@@ -89,12 +90,12 @@ class JavaScriptSdkLoader(BaseView):
             bundle_kind_modifier += ".replay"
             is_lazy = False
 
-        # From JavaScript SDK version 7 onwards, the default bundle code is ES6, however, in the loader we
+        # In JavaScript SDK version 7, the default bundle code is ES6, however, in the loader we
         # want to provide the ES5 version. This is why we need to modify the requested bundle name here.
         #
         # If we are loading replay, do not add the es5 modifier, as those bundles are
         # ES6 only.
-        if is_greater_or_equal_v7_sdk and not has_replay:
+        if is_v7_sdk and not has_replay:
             bundle_kind_modifier += ".es5"
 
         if has_debug:

+ 36 - 0
tests/sentry/web/frontend/test_js_sdk_loader.py

@@ -175,6 +175,42 @@ class JavaScriptSdkLoaderTest(TestCase):
         self.assertTemplateUsed(resp, "sentry/js-sdk-loader.js.tmpl")
         assert b"/7.100.0/bundle.tracing.replay.min.js" in resp.content
 
+    @mock.patch(
+        "sentry.loader.browsersdkversion.load_version_from_file",
+        return_value=["8.0.0"],
+    )
+    @mock.patch(
+        "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="8.x"
+    )
+    def test_equal_to_v8_returns_default_bundle(
+        self, load_version_from_file, get_selected_browser_sdk_version
+    ):
+        settings.JS_SDK_LOADER_DEFAULT_SDK_URL = "https://browser.sentry-cdn.com/%s/bundle%s.min.js"
+        self.projectkey.data = {}
+        self.projectkey.save()
+        resp = self.client.get(self.path)
+        assert resp.status_code == 200
+        self.assertTemplateUsed(resp, "sentry/js-sdk-loader.js.tmpl")
+        assert b"/8.0.0/bundle.min.js" in resp.content
+
+    @mock.patch(
+        "sentry.loader.browsersdkversion.load_version_from_file",
+        return_value=["8.1.0", "8.0.0", "8", "8.0.0-alpha.0"],
+    )
+    @mock.patch(
+        "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="8.x"
+    )
+    def test_returns_latest_v8_version_when_various_v8_versions_available(
+        self, load_version_from_file, get_selected_browser_sdk_version
+    ):
+        settings.JS_SDK_LOADER_DEFAULT_SDK_URL = "https://browser.sentry-cdn.com/%s/bundle%s.min.js"
+        self.projectkey.data = {}
+        self.projectkey.save()
+        resp = self.client.get(self.path)
+        assert resp.status_code == 200
+        self.assertTemplateUsed(resp, "sentry/js-sdk-loader.js.tmpl")
+        assert b"/8.1.0/bundle.min.js" in resp.content
+
     @mock.patch("sentry.loader.browsersdkversion.load_version_from_file", return_value=["7.37.0"])
     @mock.patch(
         "sentry.loader.browsersdkversion.get_selected_browser_sdk_version", return_value="7.x"