Sha256: c343bee7b4fb433556081dd3cfa286f4be9a1773bce6ad756b45e98e80bf7c04

Contents?: true

Size: 1.95 KB

Versions: 26

Compression:

Stored size: 1.95 KB

Contents

import { channel, client } from '@vitest/browser/client'

function serializeError(unhandledError) {
  if (typeof unhandledError !== 'object' || !unhandledError) {
    return {
      message: String(unhandledError),
    }
  }

  return {
    name: unhandledError.name,
    message: unhandledError.message,
    stack: String(unhandledError.stack),
  }
}

function catchWindowErrors(errorEvent, prop, cb) {
  let userErrorListenerCount = 0
  function throwUnhandlerError(e) {
    if (userErrorListenerCount === 0 && e[prop] != null) {
      cb(e)
    }
    else {
      console.error(e[prop])
    }
  }
  const addEventListener = window.addEventListener.bind(window)
  const removeEventListener = window.removeEventListener.bind(window)
  window.addEventListener(errorEvent, throwUnhandlerError)
  window.addEventListener = function (...args) {
    if (args[0] === errorEvent) {
      userErrorListenerCount++
    }
    return addEventListener.apply(this, args)
  }
  window.removeEventListener = function (...args) {
    if (args[0] === errorEvent && userErrorListenerCount) {
      userErrorListenerCount--
    }
    return removeEventListener.apply(this, args)
  }
  return function clearErrorHandlers() {
    window.removeEventListener(errorEvent, throwUnhandlerError)
  }
}

function registerUnexpectedErrors() {
  catchWindowErrors('error', 'error', event =>
    reportUnexpectedError('Error', event.error))
  catchWindowErrors('unhandledrejection', 'reason', event =>
    reportUnexpectedError('Unhandled Rejection', event.reason))
}

async function reportUnexpectedError(
  type,
  error,
) {
  const processedError = serializeError(error)
  await client.rpc.onUnhandledError(processedError, type)
  const state = __vitest_browser_runner__

  if (state.type === 'orchestrator') {
    return
  }

  if (!state.runTests || !__vitest_worker__.current) {
    channel.postMessage({
      type: 'done',
      filenames: state.files,
      id: state.iframeId,
    })
  }
}

registerUnexpectedErrors()

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.25 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.24 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.23 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.22 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.21 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.20 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.19 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.18 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.17 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.16 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.15 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.14 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.13 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.12 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.11 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.10 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.9 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.8 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js
clapton-0.0.7 lib/clapton/javascripts/node_modules/@vitest/browser/dist/client/error-catcher.js