8000 3.25.0 · sshyran/sentry-javascript@c306608 · GitHub
[go: up one dir, main page]

Skip to content

Commit c306608

Browse files
committed
3.25.0
1 parent 80dffad commit c306608

File tree

103 files changed

+3468
-518
lines changed
  • console
  • ember,require,vue
  • ember,require
  • ember,vue
  • ember
  • require,vue
  • require
  • vue
  • docs
  • src
  • test
  • Some content is hidden

    Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

    103 files changed

    +3468
    -518
    lines changed

    CHANGELOG.md

    Lines changed: 6 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1,5 +1,11 @@
    11
    # Changelog
    22

    3+
    ## 3.25.0
    4+
    5+
    * FEAT: Handle JavaScript loaded in the browser inside a blob (#1322)
    6+
    * FEAT: Handle DOMError and DOMException gracefully (#1310)
    7+
    * BUILD: include plugins-combination in dist and clear some old grunt config (#1313)
    8+
    39
    ## 3.24.2
    410

    511
    * FEAT: Capture breadcrumbs on failed fetch request (#1293)

    bower.json

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -1,6 +1,6 @@
    11
    {
    22
    "name": "raven-js",
    3-
    "version": "3.24.2",
    3+
    "version": "3.25.0",
    44
    "dependencies": {},
    55
    "main": "dist/raven.js",
    66
    "ignore": [

    dist/angular,console,ember,require,vue/raven.js

    Lines changed: 98 additions & 6 deletions
    Original file line numberDiff line numberDiff line change
    @@ -1,4 +1,4 @@
    1-
    /*! Raven.js 3.24.2 (540f32b) | github.com/getsentry/raven-js */
    1+
    /*! Raven.js 3.25.0 (80dffad) | github.com/getsentry/raven-js */
    22

    33
    /*
    44
    * Includes TraceKit
    @@ -286,10 +286,12 @@ var md5 = _dereq_(13);
    286286
    var RavenConfigError = _dereq_(6);
    287287

    288288
    var utils = _dereq_(10);
    289+
    var isErrorEvent = utils.isErrorEvent;
    290+
    var isDOMError = utils.isDOMError;
    291+
    var isDOMException = utils.isDOMException;
    289292
    var isError = utils.isError;
    290293
    var isObject = utils.isObject;
    291294
    var isPlainObject = utils.isPlainObject;
    292-
    var isErrorEvent = utils.isErrorEvent;
    293295
    var isUndefined = utils.isUndefined;
    294296
    var isFunction = utils.isFunction;
    295297
    var isString = utils.isString;
    @@ -417,7 +419,7 @@ Raven.prototype = {
    417419
    // webpack (using a build step causes webpack #1617). Grunt verifies that
    418420
    // this value matches package.json during build.
    419421
    // See: https://github.com/getsentry/raven-js/issues/465
    420-
    VERSION: '3.24.2',
    422+
    VERSION: '3.25.0',
    421423

    422424
    debug: false,
    423425

    @@ -749,6 +751,23 @@ Raven.prototype = {
    749751
    if (isErrorEvent(ex) && ex.error) {
    750752
    // If it is an ErrorEvent with `error` property, extract it to get actual Error
    751753
    ex = ex.error;
    754+
    } else if (isDOMError(ex) || isDOMException(ex)) {
    755+
    // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
    756+
    // then we just extract the name and message, as they don't provide anything else
    757+
    // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
    758+
    // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
    759+
    var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');
    760+
    var message = ex.message ? name + ': ' + ex.message : name;
    761+
    762+
    return this.captureMessage(
    763+
    message,
    764+
    objectMerge(options, {
    765+
    // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
    766+
    // but it's barely any overhead so we may at least try
    767+
    stacktrace: true,
    768+
    trimHeadFrames: options.trimHeadFrames + 1
    769+
    })
    770+
    );
    752771
    } else if (isError(ex)) {
    753772
    // we have a real Error object
    754773
    ex = ex;
    @@ -760,6 +779,7 @@ Raven.prototype = {
    760779
    ex = new Error(options.message);
    761780
    } else {
    762781
    // If none of previous checks were valid, then it means that
    782+
    // it's not a DOMError/DOMException
    763783
    // it's not a plain Object
    764784
    // it's not a valid ErrorEvent (one with an error property)
    765785
    // it's not an Error
    @@ -2532,7 +2552,7 @@ function isObject(what) {
    25322552
    // Yanked from https://git.io/vS8DV re-used under CC0
    25332553
    // with some tiny modifications
    25342554
    function isError(value) {
    2535-
    switch ({}.toString.call(value)) {
    2555+
    switch (Object.prototype.toString.call(value)) {
    25362556
    case '[object Error]':
    25372557
    return true;
    25382558
    case '[object Exception]':
    @@ -2545,7 +2565,15 @@ function isError(value) {
    25452565
    }
    25462566

    25472567
    function isErrorEvent(value) {
    2548-
    return supportsErrorEvent() && {}.toString.call(value) === '[object ErrorEvent]';
    2568+
    return Object.prototype.toString.call(value) === '[object ErrorEvent]';
    2569+
    }
    2570+
    2571+
    function isDOMError(value) {
    2572+
    return Object.prototype.toString.call(value) === '[object DOMError]';
    2573+
    }
    2574+
    2575+
    function isDOMException(value) {
    2576+
    return Object.prototype.toString.call(value) === '[object DOMException]';
    25492577
    }
    25502578

    25512579
    function isUndefined(what) {
    @@ -2588,6 +2616,24 @@ function supportsErrorEvent() {
    25882616
    }
    25892617
    }
    25902618

    2619+
    function supportsDOMError() {
    2620+
    try {
    2621+
    new DOMError(''); // eslint-disable-line no-new
    2622+
    return true;
    2623+
    } catch (e) {
    2624+
    return false;
    2625+
    }
    2626+
    }
    2627+
    2628+
    function supportsDOMException() {
    2629+
    try {
    2630+
    new DOMException(''); // eslint-disable-line no-new
    2631+
    return true;
    2632+
    } catch (e) {
    2633+
    return false;
    2634+
    }
    2635+
    }
    2636+
    25912637
    function supportsFetch() {
    25922638
    if (!('fetch' in _window)) return false;
    25932639

    @@ -3103,13 +3149,17 @@ module.exports = {
    31033149
    isObject: isObject,
    31043150
    isError: isError,
    31053151
    isErrorEvent: isErrorEvent,
    3152+
    isDOMError: isDOMError,
    3153+
    isDOMException: isDOMException,
    31063154
    isUndefined: isUndefined,
    31073155
    isFunction: isFunction,
    31083156
    isPlainObject: isPlainObject,
    31093157
    isString: isString,
    31103158
    isArray: isArray,
    31113159
    isEmptyObject: isEmptyObject,
    31123160
    supportsErrorEvent: supportsErrorEvent,
    3161+
    supportsDOMError: supportsDOMError,
    3162+
    supportsDOMException: supportsDOMException,
    31133163
    supportsFetch: supportsFetch,
    31143164
    supportsReferrerPolicy: supportsReferrerPolicy,
    31153165
    supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
    @@ -3169,10 +3219,14 @@ var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Ran
    31693219

    31703220
    function getLocationHref() {
    31713221
    if (typeof document === 'undefined' || document.location == null) return '';
    3172-
    31733222
    return document.location.href;
    31743223
    }
    31753224

    3225+
    function getLocationOrigin() {
    3226+
    if (typeof document === 'undefined' || document.location == null) return '';
    3227+
    return document.location.origin;
    3228+
    }
    3229+
    31763230
    /**
    31773231
    * TraceKit.report: cross-browser processing of unhandled exceptions
    31783232
    *
    @@ -3580,6 +3634,44 @@ TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
    35803634
    element.func = UNKNOWN_FUNCTION;
    35813635
    }
    35823636

    3637+
    if (element.url && element.url.substr(0, 5) === 'blob:') {
    3638+
    // Special case for handling JavaScript loaded into a blob.
    3639+
    // We use a synchronous AJAX request here as a blob is already in
    3640+
    // memory - it's not making a network request. This will generate a warning
    3641+
    // in the browser console, but there has already been an error so that's not
    3642+
    // that much of an issue.
    3643+
    var xhr = new XMLHttpRequest();
    3644+
    xhr.open('GET', element.url, false);
    3645+
    xhr.send(null);
    3646+
    3647+
    // If we failed to download the source, skip this patch
    3648+
    if (xhr.status === 200) {
    3649+
    var source = xhr.responseText || '';
    3650+
    3651+
    // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
    3652+
    // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
    3653+
    source = source.slice(-300);
    3654+
    3655+
    // Now we dig out the source map URL
    3656+
    var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);
    3657+
    3658+
    // If we don't find a source map comment or we find more than one, continue on to the next element.
    3659+
    if (sourceMaps) {
    3660+
    var sourceMapAddress = sourceMaps[1];
    3661+
    3662+
    // Now we check to see if it's a relative URL.
    3663+
    // If it is, convert it to an absolute one.
    3664+
    if (sourceMapAddress.charAt(0) === '~') {
    3665+
    sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
    3666+
    }
    3667+
    3668+
    // Now we strip the '.map' off of the end of the URL and update the
    3669+
    // element so that Sentry can match the map to the blob.
    3670+
    element.url = sourceMapAddress.slice(0, -4);
    3671+
    }
    3672+
    }
    3673+
    }
    3674+
    35833675
    stack.push(element);
    35843676
    }
    35853677

    dist/angular,console,ember,require,vue/raven.min.js

    Lines changed: 3 additions & 3 deletions
    Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

    dist/angular,console,ember,require,vue/raven.min.js.map

    Lines changed: 1 addition & 1 deletion
    Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

    0 commit comments

    Comments
     (0)
    0