]> source.dussan.org Git - jquery.git/commitdiff
Deferred: Respect source maps in jQuery.Deferred.exceptionHook
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Wed, 1 Feb 2023 12:46:44 +0000 (13:46 +0100)
committerGitHub <noreply@github.com>
Wed, 1 Feb 2023 12:46:44 +0000 (13:46 +0100)
So far, `jQuery.Deferred.exceptionHook` used to log error message and stack
separately. However, that breaks browser applying source maps against the stack
trace - most browsers require logging an error instance. This change makes us
do exactly that.

One drawback of the change is that in IE 11 previously stack was printed
directly and now just the error summary; to get to the actual stack
trace, three clicks are required. This seems to be a low price to pay
for having source maps work in all the other browsers, though.

Safari with the new change requires one click to get to the stack trace
which sounds manageable.

Fixes gh-3179
Closes gh-5192
Ref https://crbug.com/622227

src/deferred/exceptionHook.js
test/unit/deferred.js

index 2e3c7cc35ce87530bc7ec0641c3517738bff7d2f..0315b2ecbab2ec33da771c35bf41395b0c03b0d7 100644 (file)
@@ -10,8 +10,8 @@ jQuery.Deferred.exceptionHook = function( error, stack ) {
 
        if ( error && rerrorNames.test( error.name ) ) {
                window.console.warn(
-                       "jQuery.Deferred exception: " + error.message,
-                       error.stack,
+                       "jQuery.Deferred exception",
+                       error,
                        stack
                );
        }
index 535dc0115becb7fdfedf8fb1c059c4ded048e756..8a215ff998527a630a78faa3ee4701dd80f456db 100644 (file)
@@ -575,9 +575,9 @@ QUnit.test( "jQuery.Deferred.exceptionHook", function( assert ) {
                defer = jQuery.Deferred(),
                oldWarn = window.console.warn;
 
-       window.console.warn = function() {
-               var msg = Array.prototype.join.call( arguments, " " );
-               assert.ok( /barf/.test( msg ), "Message: " + msg );
+       window.console.warn = function( _intro, error ) {
+               assert.ok( /barf/.test( error.message + "\n" + error.stack ),
+                       "Error mentions the method: " + error.message + "\n" + error.stack );
        };
 
        jQuery.when(