{"version":3,"sources":["jsdelivr-header.js","/npm/@appsignal/plugin-window-events@1.0.25/src/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,uRCHA,SAAS,EAAmB,EAAgC,CAC1D,IAAM,EAAM,OAEN,EAAI,EAAA,CACR,QAAS,GACT,qBAAsB,EAAI,EACvB,CAAO,EAGZ,OAAO,UAAA,CACL,IAAM,EAAO,KAEP,EAAO,CACX,QAAS,EAAI,QACb,mBAAoB,EAAI,sBAG1B,SAAS,EAEP,EACA,EACA,EACA,EACA,EAAa,CAEb,IAAM,EAAO,EAAK,WAAU,EAM1B,OAAO,GAAU,UACjB,IAAW,GACX,kBAAkB,KAAK,CAAK,EAE5B,QAAQ,KACN,wEAAwE,GAGtE,EACF,EAAK,SAAS,CAAK,EAInB,EAAK,SAAS,CACZ,KAAM,QAEN,QACE,OAAO,GAAU,SACb,EACA,+CACN,MAAO,MAAA,OAAM,EAAM,GAAA,EAAA,OAAI,CAAM,EAAA,OAAG,EAAQ,IAAA,OAAI,CAAK,EAAK,EAAE,CACzD,CAAA,EAGH,EAAK,KAAK,CAAI,GAGZ,OAAO,EAAK,SAAY,YAC1B,EAAK,QAAQ,MAAM,KAAM,SAAgB,CAE7C,CAEA,SAAS,EAEP,EAA4B,CAE5B,IAAM,EAAO,EAAK,WAAU,EAExB,EAEA,GAAS,EAAM,QAAU,EAAQ,EAAM,MAAM,EAC/C,EAAQ,EAAM,OAEd,EAAQ,CACN,KAAM,iCACN,QAAS,EAAiB,CAAK,GAInC,EAAK,SAAS,CAAK,EAEnB,EAAK,KAAK,CAAI,EAEV,OAAO,EAAK,oBAAuB,YACrC,EAAK,mBAAmB,MAAM,KAAM,SAAgB,CAExD,CAEI,EAAK,UACP,EAAI,QAAU,GAGZ,EAAK,uBACP,EAAI,qBAAuB,EAE/B,EAEA,SAAS,EAAiB,EAA4B,CACpD,GAAI,CAAC,GAAS,CAAC,EAAM,OACnB,MAAO,GAGT,GAAI,OAAO,EAAM,QAAW,SAC1B,OAAO,EAAM,OAGf,GAAI,CACF,OAAO,KAAK,UAAU,EAAM,OAAQ,EAAgB,CAAE,CACvD,OAAQ,EAAG,CAGV,OAAI,GAAK,OAAQ,EAAU,SAAY,SAC9B,+BAAA,OAAgC,EAAU,QAAO,GAAA,EAEnD,6BACR,CACH,CAEA,SAAS,GAAgB,CACvB,IAAM,EAAmB,CAAA,EACnB,EAAoB,CAAA,EAC1B,OAAO,SAAC,EAAa,EAAU,CAC7B,GAAI,OAAO,GAAU,UAAY,IAAU,KAAM,CAC/C,IAAM,EAAI,EAAU,QAAQ,CAAK,EACjC,GAAI,IAAM,GACR,MAAO,kBAAA,OAAkB,EAAQ,CAAC,GAAK,cAAa,GAAA,EAEpD,EAAU,KAAK,CAAK,EACpB,EAAQ,KAAK,CAAG,CAEnB,CAED,OAAO,CACT,CACF,CACF,CAEO,IAAM,EAAS","file":"/npm/@appsignal/plugin-window-events@1.0.25/dist/esm/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v4.62.2 and esbuild v0.28.1.\n * Original file: /npm/@appsignal/plugin-window-events@1.0.25/dist/esm/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import type Appsignal from \"@appsignal/javascript\"\nimport { isError } from \"@appsignal/javascript\"\n\nfunction windowEventsPlugin(options?: { [key: string]: any }) {\n  const ctx = window as Window\n\n  const opts = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options\n  }\n\n  return function (this: Appsignal) {\n    const self = this\n\n    const prev = {\n      onError: ctx.onerror,\n      unhandledRejection: ctx.onunhandledrejection\n    }\n\n    function _onErrorHandler(\n      this: WindowEventHandlers,\n      event: Event | string,\n      source?: string,\n      lineno?: number,\n      colno?: number,\n      error?: Error\n    ): void {\n      const span = self.createSpan()\n\n      // handles \"Script error.\" message in some browsers when script is loaded\n      // cross origin.\n      // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#Notes\n      if (\n        typeof event === \"string\" &&\n        lineno === 0 &&\n        /Script error\\.?/.test(event)\n      ) {\n        console.warn(\n          \"[APPSIGNAL]: Cross-domain or eval script error detected, error ignored\"\n        )\n      } else {\n        if (error) {\n          span.setError(error)\n        } else {\n          // handle browsers that don't supply an `error` argument\n          // or don't return a stacktrace\n          span.setError({\n            name: \"Error\",\n            // `event` shoiuld be the message in most browsers\n            message:\n              typeof event === \"string\"\n                ? event\n                : 'An HTML onerror=\"\" handler failed to execute',\n            stack: `at ${source}:${lineno}${colno ? `:${colno}` : \"\"}`\n          })\n        }\n\n        self.send(span)\n      }\n\n      if (typeof prev.onError === \"function\") {\n        prev.onError.apply(this, arguments as any)\n      }\n    }\n\n    function _onUnhandledRejectionHandler(\n      this: WindowEventHandlers,\n      event: PromiseRejectionEvent\n    ): void {\n      const span = self.createSpan()\n\n      let error: Error\n\n      if (event && event.reason && isError(event.reason)) {\n        error = event.reason\n      } else {\n        error = {\n          name: \"UnhandledPromiseRejectionError\",\n          message: _reasonFromEvent(event)\n        }\n      }\n\n      span.setError(error)\n\n      self.send(span)\n\n      if (typeof prev.unhandledRejection === \"function\") {\n        prev.unhandledRejection.apply(this, arguments as any)\n      }\n    }\n\n    if (opts.onerror) {\n      ctx.onerror = _onErrorHandler\n    }\n\n    if (opts.onunhandledrejection) {\n      ctx.onunhandledrejection = _onUnhandledRejectionHandler\n    }\n  }\n\n  function _reasonFromEvent(event: PromiseRejectionEvent): string {\n    if (!event || !event.reason) {\n      return \"\"\n    }\n\n    if (typeof event.reason === \"string\") {\n      return event.reason\n    }\n\n    try {\n      return JSON.stringify(event.reason, circularReplacer())\n    } catch (e) {\n      // Stringifying the reason may cause a RangeError when the reason\n      // is a very large object.\n      if (e && typeof (e as any).message === \"string\") {\n        return `[could not stringify value: ${(e as any).message}]`\n      }\n      return \"[could not stringify value]\"\n    }\n  }\n\n  function circularReplacer() {\n    const seenValue: any[] = []\n    const seenKey: string[] = []\n    return (key: string, value: any) => {\n      if (typeof value === \"object\" && value !== null) {\n        const i = seenValue.indexOf(value)\n        if (i !== -1) {\n          return `[cyclic value: ${seenKey[i] || \"root object\"}]`\n        } else {\n          seenValue.push(value)\n          seenKey.push(key)\n        }\n      }\n\n      return value\n    }\n  }\n}\n\nexport const plugin = windowEventsPlugin\n"]}