Skip to content
Snippets Groups Projects
Select Git revision
  • cbb77e77b723691c5060b4584b54474860f7963c
  • main default protected
  • renovate/lock-file-maintenance
  • demo protected
  • person-select-custom
  • dbp-translation-component
  • icon-set-mapping
  • port-i18next-parser
  • remove-sentry
  • favorites-and-recent-files
  • revert-6c632dc6
  • lit2
  • advertisement
  • wc-part
  • automagic
  • publish
  • wip-cleanup
  • demo-file-handling
18 results

components.js

Blame
  • errorreport.js 2.56 KiB
    import * as Sentry from '@sentry/browser';
    
    let _isInitialized = false;
    let _canReportEvent = false;
    
    let sentryDSN = '';
    
    /**
     * Initializes error reporting.
     *
     * If a sentry DSN is set we will use sentry, if not we will log to the console.
     *
     * @param {object} [options]
     * @param {boolean} [options.debug=false] Enable debug output
     * @param {string} [options.release] The project release
     */
    export function init(options) {
        let defaults = {
            debug: false,
        };
        let actual = Object.assign({}, defaults, options);
    
        if (_isInitialized) throw new Error('Already initialized');
    
        let sentryOptions = {debug: actual.debug};
    
        if (actual.release) {
            sentryOptions['release'] = actual.release;
        }
    
        if (actual.environment) {
            sentryOptions['environment'] = actual.environment;
        }
    
        if (!sentryDSN) {
            if (options.debug) console.log('No sentry DSN set, sentry disabled');
    
            // In case we don't have a sentry config, we still use sentry, but print
            // all events into the console don't send them to the server.
            // XXX: Dummy DSN needed to make init() work.
            sentryOptions['dsn'] = 'http://12345@dummy.dummy/42';
            sentryOptions['beforeSend'] = (event, hint) => {
                console.error('ERR-REPORT:', hint.originalException || hint.syntheticException);
                return null;
            };
        } else {
            sentryOptions['dsn'] = sentryDSN;
            _canReportEvent = true;
        }
    
        Sentry.init(sentryOptions);
    
        _isInitialized = true;
    }
    
    /**
     * Whether showReportDialog() will work.
     */
    export function canReportEvent() {
        if (!_isInitialized) throw new Error('Not initialized');
        return _canReportEvent;
    }
    
    /**
     * Show a report dialog for user error feedback.
     *
     * Call canReportEvent() first to see if this will do anything.
     */
    export function showReportDialog() {
        if (!canReportEvent()) return;
        Sentry.showReportDialog();
    }
    
    /**
     * Log an exception
     *
     * @param {*} exception
     */
    export function captureException(exception) {
        if (!_isInitialized) throw new Error('Not initialized');
        Sentry.captureException(exception);
    }
    
    /**
     * Log a message, returns an internal ID
     *
     * @param {string} message The message to log
     * @param {string} [level=error] The loglevel (error, warning, info, debug)
     */
    export function captureMessage(message, level) {
        if (!_isInitialized) throw new Error('Not initialized');
        if (!level) level = 'error';
        if (!['error', 'warning', 'info', 'debug'].includes(level))
            throw new Error('Invalid log level');
        Sentry.captureMessage(message, level);
    }