New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

bugsnag-browser-lite

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bugsnag-browser-lite - npm Package Compare versions

Comparing version

to
2.0.0

dist/bugsnag_client.d.ts

138

dist/bugsnag-browser-lite.cjs.development.js
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }

@@ -7,8 +9,4 @@

var ErrorStackParser = _interopDefault(require('error-stack-parser'));
var React = require('react');
const notifyUrl = "https://notify.bugsnag.com";
let config = {
notifyUrl
};
const _pad = n => n < 10 ? `0${n}` : n; // Date#toISOString

@@ -21,3 +19,4 @@

return d.getUTCFullYear() + "-" + _pad(d.getUTCMonth() + 1) + "-" + _pad(d.getUTCDate()) + "T" + _pad(d.getUTCHours()) + ":" + _pad(d.getUTCMinutes()) + ":" + _pad(d.getUTCSeconds()) + "." + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + "Z";
} // const REPORT_FILTER_PATHS = [
}
// "events.[].app",

@@ -32,3 +31,3 @@ // "events.[].metaData",

function prepareReportJson(report) {
let payload = jsonStringify(report, null, null);
let payload = jsonStringify(report, null);

@@ -42,3 +41,3 @@ if (payload.length > 10e5) {

};
payload = jsonStringify(report, null, null);
payload = jsonStringify(report, null);
if (payload.length > 10e5) throw new Error("payload exceeded 1MB limit");

@@ -50,5 +49,4 @@ }

function sendReport(report, cb = () => {}) {
console.log('report', report)
if (typeof XMLHttpRequest !== "undefined" && false) {
function sendReport(config, report, cb = () => {}) {
if (typeof XMLHttpRequest !== "undefined") {
try {

@@ -64,3 +62,3 @@ const url = config.notifyUrl;

req.setRequestHeader("Content-Type", "application/json");
req.setRequestHeader("Bugsnag-Api-Key", config.apiKey);
req.setRequestHeader("Bugsnag-Api-Key", config.apiKey || "");
req.setRequestHeader("Bugsnag-Payload-Version", "5");

@@ -82,3 +80,7 @@ req.setRequestHeader("Bugsnag-Sent-At", isoDate());

function normaliseFunctionName(name) {
return /^global code$/i.test(name) ? "global code" : name;
if (name !== undefined) {
return /^global code$/i.test(name) ? "global code" : name;
} else {
return name;
}
} // takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)

@@ -99,3 +101,3 @@ // and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)

if (f.lineNumber > -1 && !f.file && !f.method) {
if (f.lineNumber && f.lineNumber > -1 && !f.file && !f.method) {
f.file = "global code";

@@ -173,10 +175,10 @@ }

};
} // Javascript Error object contains a `name` property which gives the type of
}
// error. E.g. SyntaxError, TypeError, RangeError, EvalError
// User can create their own custom error too and give it a custom name
function prepareBugsnagReport(config, error, opts) {
function prepareBugsnagReport(apiKey, error, opts) {
return {
apiKey: config.apiKey,
apiKey,
payloadVersion: 5,

@@ -203,22 +205,96 @@ notifier: {

}
const notifyUrl = "https://notify.bugsnag.com";
class BugsnagClient {
constructor(apiKey) {
this.config = {
apiKey,
notifyUrl
};
}
function notify(error, opts) {
console.log('error', error)
sendReport(prepareBugsnagReport(config, error, opts));
notify(error, opts) {
sendReport(this.config, prepareBugsnagReport(this.config.apiKey, error, opts));
}
}
const bugsnagClient = {
notify
const formatComponentStack = str => {
const lines = str.split(/\s*\n\s*/g);
let ret = "";
for (let line = 0, len = lines.length; line < len; line++) {
if (lines[line].length) ret += `${ret.length ? "\n" : ""}${lines[line]}`;
}
return ret;
};
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = {
error: null
};
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return {
error
};
}
componentDidCatch(error, info) {
const {
bugsnagClient
} = this.props;
const handledState = {
severity: "error",
unhandled: true,
severityReason: {
type: "unhandledException"
}
};
if (info && info.componentStack) {
info.componentStack = formatComponentStack(info.componentStack);
}
bugsnagClient.notify(error, {
metaData: {
react: info
},
...handledState
});
}
render() {
const {
error
} = this.state;
if (error) {
const {
FallbackComponent
} = this.props;
if (FallbackComponent) {
return React.createElement(FallbackComponent, this.state);
}
return null;
}
return this.props.children;
}
}
// import { ErrorBoundary } from "./bugsnag_react";
function bugsnag(apiKey) {
config.apiKey = apiKey;
return bugsnagClient;
return new BugsnagClient(apiKey);
}
exports.bugsnag = bugsnag;
exports.getStacktrace = getStacktrace;
exports.hasStack = hasStack;
exports.isoDate = isoDate;
exports.notifyUrl = notifyUrl;
exports.prepareBugsnagReport = prepareBugsnagReport;
exports.BugsnagClient = BugsnagClient;
exports.ErrorBoundary = ErrorBoundary;
exports.default = bugsnag;
//# sourceMappingURL=bugsnag-browser-lite.cjs.development.js.map

@@ -1,2 +0,2 @@

"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=e(require("safe-json-stringify")),n=e(require("error-stack-parser"));let r={notifyUrl:"https://notify.bugsnag.com"};const a=e=>e<10?"0"+e:e;function s(){const e=new Date;return e.getUTCFullYear()+"-"+a(e.getUTCMonth()+1)+"-"+a(e.getUTCDate())+"T"+a(e.getUTCHours())+":"+a(e.getUTCMinutes())+":"+a(e.getUTCSeconds())+"."+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}function o(e){return!(!e||!e.stack&&!e.stacktrace&&!e["opera#sourceloc"]||"string"!=typeof(e.stack||e.stacktrace||e["opera#sourceloc"])||e.stack===`${e.name}: ${e.message}`)}function i(e){const t={file:e.fileName,method:(n=e.functionName,/^global code$/i.test(n)?"global code":n),lineNumber:e.lineNumber,columnNumber:e.columnNumber};var n;return t.lineNumber>-1&&!t.file&&!t.method&&(t.file="global code"),t}function u(e){return o(e)?n.parse(e).map(i):[]}function l(){let e="Unknown OS";return-1!=navigator.appVersion.indexOf("Win")&&(e="Windows"),-1!=navigator.appVersion.indexOf("Mac")&&(e="MacOS"),-1!=navigator.appVersion.indexOf("X11")&&(e="UNIX"),-1!=navigator.appVersion.indexOf("Linux")&&(e="Linux"),e}function g(){const e=navigator,t=navigator.userAgent;let n,r,a,o=navigator.appName,i=""+parseFloat(navigator.appVersion);return-1!=(r=t.indexOf("Opera"))?(o="Opera",i=t.substring(r+6),-1!=(r=t.indexOf("Version"))&&(i=t.substring(r+8))):-1!=(r=t.indexOf("MSIE"))?(o="Microsoft Internet Explorer",i=t.substring(r+5)):-1!=(r=t.indexOf("Chrome"))?(o="Chrome",i=t.substring(r+7)):-1!=(r=t.indexOf("Safari"))?(o="Safari",i=t.substring(r+7),-1!=(r=t.indexOf("Version"))&&(i=t.substring(r+8))):-1!=(r=t.indexOf("Firefox"))?(o="Firefox",i=t.substring(r+8)):(n=t.lastIndexOf(" ")+1)<(r=t.lastIndexOf("/"))&&(o=t.substring(n,r),i=t.substring(r+1),o.toLowerCase()==o.toUpperCase()&&(o=navigator.appName)),-1!=(a=i.indexOf(";"))&&(i=i.substring(0,a)),-1!=(a=i.indexOf(" "))&&(i=i.substring(0,a)),{language:e.language,userAgent:e.userAgent,time:s(),osName:l(),browserName:o,browserVersion:i}}function c(e,t,n){return{apiKey:e.apiKey,payloadVersion:5,notifier:{name:"saltside web",version:"1.0.0",url:"https://saltside.se/"},events:[{exceptions:[{errorClass:t.name||"[no errorr name]",message:t.message||"[no errror message]",stacktrace:u(t)}],device:g(),app:{releaseStage:"development"},metaData:n?n.metaData:void 0,user:n?n.user:void 0}]}}const p={notify:function(e,n){!function(e,n=(()=>{})){if("undefined"!=typeof XMLHttpRequest)try{const a=r.notifyUrl,o=new XMLHttpRequest;o.onreadystatechange=function(){o.readyState===XMLHttpRequest.DONE&&n()},o.open("POST",a),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Bugsnag-Api-Key",r.apiKey),o.setRequestHeader("Bugsnag-Payload-Version","5"),o.setRequestHeader("Bugsnag-Sent-At",s()),o.send(function(e){let n=t(e,null,null);if(n.length>1e6&&(delete e.events[0].metaData,e.events[0].metaData={notifier:`WARNING!\nSerialized payload was ${n.length/1e6}MB (limit = 1MB)\nmetaData was removed`},n=t(e,null,null),n.length>1e6))throw new Error("payload exceeded 1MB limit");return n}(e))}catch(e){console.error(e)}else console.error("Bugsnag logger: Could not find XMLHttpRequest")}(c(r,e,n))}};exports.bugsnag=function(e){return r.apiKey=e,p},exports.getStacktrace=u,exports.hasStack=o,exports.isoDate=s,exports.notifyUrl="https://notify.bugsnag.com",exports.prepareBugsnagReport=c;
function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}function t(){const e=new Date;return e.getUTCFullYear()+"-"+l(e.getUTCMonth()+1)+"-"+l(e.getUTCDate())+"T"+l(e.getUTCHours())+":"+l(e.getUTCMinutes())+":"+l(e.getUTCSeconds())+"."+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}function r(e){const t={file:e.fileName,method:(r=e.functionName,void 0!==r&&/^global code$/i.test(r)?"global code":r),lineNumber:e.lineNumber,columnNumber:e.columnNumber};var r;return t.lineNumber&&t.lineNumber>-1&&!t.file&&!t.method&&(t.file="global code"),t}function n(e){return function(e){return!(!e||!e.stack&&!e.stacktrace&&!e["opera#sourceloc"]||"string"!=typeof(e.stack||e.stacktrace||e["opera#sourceloc"])||e.stack===`${e.name}: ${e.message}`)}(e)?s.parse(e).map(r):[]}function o(){let e="Unknown OS";return-1!=navigator.appVersion.indexOf("Win")&&(e="Windows"),-1!=navigator.appVersion.indexOf("Mac")&&(e="MacOS"),-1!=navigator.appVersion.indexOf("X11")&&(e="UNIX"),-1!=navigator.appVersion.indexOf("Linux")&&(e="Linux"),e}function a(){const e=navigator,r=navigator.userAgent;let n,a,i,s=navigator.appName,u=""+parseFloat(navigator.appVersion);return-1!=(a=r.indexOf("Opera"))?(s="Opera",u=r.substring(a+6),-1!=(a=r.indexOf("Version"))&&(u=r.substring(a+8))):-1!=(a=r.indexOf("MSIE"))?(s="Microsoft Internet Explorer",u=r.substring(a+5)):-1!=(a=r.indexOf("Chrome"))?(s="Chrome",u=r.substring(a+7)):-1!=(a=r.indexOf("Safari"))?(s="Safari",u=r.substring(a+7),-1!=(a=r.indexOf("Version"))&&(u=r.substring(a+8))):-1!=(a=r.indexOf("Firefox"))?(s="Firefox",u=r.substring(a+8)):(n=r.lastIndexOf(" ")+1)<(a=r.lastIndexOf("/"))&&(s=r.substring(n,a),u=r.substring(a+1),s.toLowerCase()==s.toUpperCase()&&(s=navigator.appName)),-1!=(i=u.indexOf(";"))&&(u=u.substring(0,i)),-1!=(i=u.indexOf(" "))&&(u=u.substring(0,i)),{language:e.language,userAgent:e.userAgent,time:t(),osName:o(),browserName:s,browserVersion:u}}Object.defineProperty(exports,"__esModule",{value:!0});var i=e(require("safe-json-stringify")),s=e(require("error-stack-parser")),u=require("react");const l=e=>e<10?"0"+e:e;class c{constructor(e){this.config={apiKey:e,notifyUrl:"https://notify.bugsnag.com"}}notify(e,r){!function(e,r,n=(()=>{})){if("undefined"!=typeof XMLHttpRequest)try{const o=e.notifyUrl,a=new XMLHttpRequest;a.onreadystatechange=function(){a.readyState===XMLHttpRequest.DONE&&n()},a.open("POST",o),a.setRequestHeader("Content-Type","application/json"),a.setRequestHeader("Bugsnag-Api-Key",e.apiKey||""),a.setRequestHeader("Bugsnag-Payload-Version","5"),a.setRequestHeader("Bugsnag-Sent-At",t()),a.send(function(e){let t=i(e,null);if(t.length>1e6&&(delete e.events[0].metaData,e.events[0].metaData={notifier:`WARNING!\nSerialized payload was ${t.length/1e6}MB (limit = 1MB)\nmetaData was removed`},t=i(e,null),t.length>1e6))throw Error("payload exceeded 1MB limit");return t}(r))}catch(e){console.error(e)}else console.error("Bugsnag logger: Could not find XMLHttpRequest")}(this.config,function(e,t,r){return{apiKey:e,payloadVersion:5,notifier:{name:"saltside web",version:"1.0.0",url:"https://saltside.se/"},events:[{exceptions:[{errorClass:t.name||"[no errorr name]",message:t.message||"[no errror message]",stacktrace:n(t)}],device:a(),app:{releaseStage:"development"},metaData:r?r.metaData:void 0,user:r?r.user:void 0}]}}(this.config.apiKey,e,r))}}exports.BugsnagClient=c,exports.ErrorBoundary=class extends u.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){const{bugsnagClient:r}=this.props;t&&t.componentStack&&(t.componentStack=(e=>{const t=e.split(/\s*\n\s*/g);let r="";for(let e=0,n=t.length;e<n;e++)t[e].length&&(r+=`${r.length?"\n":""}${t[e]}`);return r})(t.componentStack)),r.notify(e,{metaData:{react:t},severity:"error",unhandled:!0,severityReason:{type:"unhandledException"}})}render(){const{error:e}=this.state;if(e){const{FallbackComponent:e}=this.props;return e?u.createElement(e,this.state):null}return this.props.children}},exports.default=function(e){return new c(e)};
//# sourceMappingURL=bugsnag-browser-lite.cjs.production.min.js.map

@@ -1,203 +0,2 @@

import jsonStringify from 'safe-json-stringify';
import ErrorStackParser from 'error-stack-parser';
const notifyUrl = "https://notify.bugsnag.com";
let config = {
notifyUrl
};
const _pad = n => n < 10 ? `0${n}` : n; // Date#toISOString
function isoDate() {
// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
const d = new Date();
return d.getUTCFullYear() + "-" + _pad(d.getUTCMonth() + 1) + "-" + _pad(d.getUTCDate()) + "T" + _pad(d.getUTCHours()) + ":" + _pad(d.getUTCMinutes()) + ":" + _pad(d.getUTCSeconds()) + "." + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + "Z";
} // const REPORT_FILTER_PATHS = [
// "events.[].app",
// "events.[].metaData",
// "events.[].user",
// "events.[].breadcrumbs",
// "events.[].request",
// "events.[].device",
// ];
function prepareReportJson(report) {
let payload = jsonStringify(report, null, null);
if (payload.length > 10e5) {
delete report.events[0].metaData;
report.events[0].metaData = {
notifier: `WARNING!
Serialized payload was ${payload.length / 10e5}MB (limit = 1MB)
metaData was removed`
};
payload = jsonStringify(report, null, null);
if (payload.length > 10e5) throw new Error("payload exceeded 1MB limit");
}
return payload;
}
function sendReport(report, cb = () => {}) {
if (typeof XMLHttpRequest !== "undefined") {
try {
const url = config.notifyUrl;
const req = new XMLHttpRequest();
req.onreadystatechange = function () {
if (req.readyState === XMLHttpRequest.DONE) cb();
};
req.open("POST", url);
req.setRequestHeader("Content-Type", "application/json");
req.setRequestHeader("Bugsnag-Api-Key", config.apiKey);
req.setRequestHeader("Bugsnag-Payload-Version", "5");
req.setRequestHeader("Bugsnag-Sent-At", isoDate());
req.send(prepareReportJson(report));
} catch (e) {
console.error(e);
}
} else {
console.error("Bugsnag logger: Could not find XMLHttpRequest");
}
}
function hasStack(error) {
return !!error && (!!error.stack || !!error.stacktrace || !!error["opera#sourceloc"]) && typeof (error.stack || error.stacktrace || error["opera#sourceloc"]) === "string" && error.stack !== `${error.name}: ${error.message}`;
}
function normaliseFunctionName(name) {
return /^global code$/i.test(name) ? "global code" : name;
} // takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)
// and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)
function formatStackframe(frame) {
const f = {
file: frame.fileName,
method: normaliseFunctionName(frame.functionName),
lineNumber: frame.lineNumber,
columnNumber: frame.columnNumber
}; // Some instances result in no file:
// - calling notify() from chrome's terminal results in no file/method.
// - non-error exception thrown from global code in FF
// This adds one.
if (f.lineNumber > -1 && !f.file && !f.method) {
f.file = "global code";
}
return f;
}
function getStacktrace(error) {
if (hasStack(error)) {
return ErrorStackParser.parse(error).map(formatStackframe);
}
return [];
}
function getOsName() {
let osName = "Unknown OS";
if (navigator.appVersion.indexOf("Win") != -1) osName = "Windows";
if (navigator.appVersion.indexOf("Mac") != -1) osName = "MacOS";
if (navigator.appVersion.indexOf("X11") != -1) osName = "UNIX";
if (navigator.appVersion.indexOf("Linux") != -1) osName = "Linux";
return osName;
}
function detectDeviceInfo() {
const nav = navigator;
const nAgt = navigator.userAgent;
let browserName = navigator.appName;
let browserVersion = "" + parseFloat(navigator.appVersion);
let nameOffset, verOffset, ix; // In Opera, the true version is after "Opera" or after "Version"
if ((verOffset = nAgt.indexOf("Opera")) != -1) {
browserName = "Opera";
browserVersion = nAgt.substring(verOffset + 6);
if ((verOffset = nAgt.indexOf("Version")) != -1) browserVersion = nAgt.substring(verOffset + 8);
} // In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset = nAgt.indexOf("MSIE")) != -1) {
browserName = "Microsoft Internet Explorer";
browserVersion = nAgt.substring(verOffset + 5);
} // In Chrome, the true version is after "Chrome"
else if ((verOffset = nAgt.indexOf("Chrome")) != -1) {
browserName = "Chrome";
browserVersion = nAgt.substring(verOffset + 7);
} // In Safari, the true version is after "Safari" or after "Version"
else if ((verOffset = nAgt.indexOf("Safari")) != -1) {
browserName = "Safari";
browserVersion = nAgt.substring(verOffset + 7);
if ((verOffset = nAgt.indexOf("Version")) != -1) browserVersion = nAgt.substring(verOffset + 8);
} // In Firefox, the true version is after "Firefox"
else if ((verOffset = nAgt.indexOf("Firefox")) != -1) {
browserName = "Firefox";
browserVersion = nAgt.substring(verOffset + 8);
} // In most other browsers, "name/version" is at the end of userAgent
else if ((nameOffset = nAgt.lastIndexOf(" ") + 1) < (verOffset = nAgt.lastIndexOf("/"))) {
browserName = nAgt.substring(nameOffset, verOffset);
browserVersion = nAgt.substring(verOffset + 1);
if (browserName.toLowerCase() == browserName.toUpperCase()) {
browserName = navigator.appName;
}
} // trim the browserVersion string at semicolon/space if present
if ((ix = browserVersion.indexOf(";")) != -1) browserVersion = browserVersion.substring(0, ix);
if ((ix = browserVersion.indexOf(" ")) != -1) browserVersion = browserVersion.substring(0, ix);
return {
language: nav.language,
userAgent: nav.userAgent,
time: isoDate(),
osName: getOsName(),
browserName,
browserVersion
};
} // Javascript Error object contains a `name` property which gives the type of
// error. E.g. SyntaxError, TypeError, RangeError, EvalError
// User can create their own custom error too and give it a custom name
function prepareBugsnagReport(config, error, opts) {
return {
apiKey: config.apiKey,
payloadVersion: 5,
notifier: {
name: "saltside web",
version: "1.0.0",
url: "https://saltside.se/"
},
events: [{
exceptions: [{
errorClass: error.name || "[no errorr name]",
message: error.message || "[no errror message]",
stacktrace: getStacktrace(error)
}],
device: detectDeviceInfo(),
app: {
releaseStage: "development"
},
metaData: opts ? opts.metaData : undefined,
user: opts ? opts.user : undefined
}]
};
}
function notify(error, opts) {
sendReport(prepareBugsnagReport(config, error, opts));
}
const bugsnagClient = {
notify
};
function bugsnag(apiKey) {
config.apiKey = apiKey;
return bugsnagClient;
}
export { bugsnag, getStacktrace, hasStack, isoDate, notifyUrl, prepareBugsnagReport };
function e(){const e=new Date;return e.getUTCFullYear()+"-"+l(e.getUTCMonth()+1)+"-"+l(e.getUTCDate())+"T"+l(e.getUTCHours())+":"+l(e.getUTCMinutes())+":"+l(e.getUTCSeconds())+"."+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}function t(e){const t={file:e.fileName,method:(r=e.functionName,void 0!==r&&/^global code$/i.test(r)?"global code":r),lineNumber:e.lineNumber,columnNumber:e.columnNumber};var r;return t.lineNumber&&t.lineNumber>-1&&!t.file&&!t.method&&(t.file="global code"),t}function r(e){return function(e){return!(!e||!e.stack&&!e.stacktrace&&!e["opera#sourceloc"]||"string"!=typeof(e.stack||e.stacktrace||e["opera#sourceloc"])||e.stack===`${e.name}: ${e.message}`)}(e)?i.parse(e).map(t):[]}function n(){let e="Unknown OS";return-1!=navigator.appVersion.indexOf("Win")&&(e="Windows"),-1!=navigator.appVersion.indexOf("Mac")&&(e="MacOS"),-1!=navigator.appVersion.indexOf("X11")&&(e="UNIX"),-1!=navigator.appVersion.indexOf("Linux")&&(e="Linux"),e}function o(){const t=navigator,r=navigator.userAgent;let o,a,i,s=navigator.appName,u=""+parseFloat(navigator.appVersion);return-1!=(a=r.indexOf("Opera"))?(s="Opera",u=r.substring(a+6),-1!=(a=r.indexOf("Version"))&&(u=r.substring(a+8))):-1!=(a=r.indexOf("MSIE"))?(s="Microsoft Internet Explorer",u=r.substring(a+5)):-1!=(a=r.indexOf("Chrome"))?(s="Chrome",u=r.substring(a+7)):-1!=(a=r.indexOf("Safari"))?(s="Safari",u=r.substring(a+7),-1!=(a=r.indexOf("Version"))&&(u=r.substring(a+8))):-1!=(a=r.indexOf("Firefox"))?(s="Firefox",u=r.substring(a+8)):(o=r.lastIndexOf(" ")+1)<(a=r.lastIndexOf("/"))&&(s=r.substring(o,a),u=r.substring(a+1),s.toLowerCase()==s.toUpperCase()&&(s=navigator.appName)),-1!=(i=u.indexOf(";"))&&(u=u.substring(0,i)),-1!=(i=u.indexOf(" "))&&(u=u.substring(0,i)),{language:t.language,userAgent:t.userAgent,time:e(),osName:n(),browserName:s,browserVersion:u}}import a from"safe-json-stringify";import i from"error-stack-parser";import{Component as s,createElement as u}from"react";const l=e=>e<10?"0"+e:e;class c{constructor(e){this.config={apiKey:e,notifyUrl:"https://notify.bugsnag.com"}}notify(t,n){!function(t,r,n=(()=>{})){if("undefined"!=typeof XMLHttpRequest)try{const o=t.notifyUrl,i=new XMLHttpRequest;i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&n()},i.open("POST",o),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("Bugsnag-Api-Key",t.apiKey||""),i.setRequestHeader("Bugsnag-Payload-Version","5"),i.setRequestHeader("Bugsnag-Sent-At",e()),i.send(function(e){let t=a(e,null);if(t.length>1e6&&(delete e.events[0].metaData,e.events[0].metaData={notifier:`WARNING!\nSerialized payload was ${t.length/1e6}MB (limit = 1MB)\nmetaData was removed`},t=a(e,null),t.length>1e6))throw Error("payload exceeded 1MB limit");return t}(r))}catch(e){console.error(e)}else console.error("Bugsnag logger: Could not find XMLHttpRequest")}(this.config,function(e,t,n){return{apiKey:e,payloadVersion:5,notifier:{name:"saltside web",version:"1.0.0",url:"https://saltside.se/"},events:[{exceptions:[{errorClass:t.name||"[no errorr name]",message:t.message||"[no errror message]",stacktrace:r(t)}],device:o(),app:{releaseStage:"development"},metaData:n?n.metaData:void 0,user:n?n.user:void 0}]}}(this.config.apiKey,t,n))}}class f extends s{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){const{bugsnagClient:r}=this.props;t&&t.componentStack&&(t.componentStack=(e=>{const t=e.split(/\s*\n\s*/g);let r="";for(let e=0,n=t.length;e<n;e++)t[e].length&&(r+=`${r.length?"\n":""}${t[e]}`);return r})(t.componentStack)),r.notify(e,{metaData:{react:t},severity:"error",unhandled:!0,severityReason:{type:"unhandledException"}})}render(){const{error:e}=this.state;if(e){const{FallbackComponent:e}=this.props;return e?u(e,this.state):null}return this.props.children}}export default function(e){return new c(e)}export{c as BugsnagClient,f as ErrorBoundary};
//# sourceMappingURL=bugsnag-browser-lite.esm.js.map
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('safe-json-stringify'), require('error-stack-parser')) :
typeof define === 'function' && define.amd ? define(['exports', 'safe-json-stringify', 'error-stack-parser'], factory) :
(global = global || self, factory(global['bugsnag-browser-lite'] = {}, global.jsonStringify, global.ErrorStackParser));
}(this, (function (exports, jsonStringify, ErrorStackParser) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('safe-json-stringify'), require('error-stack-parser'), require('react')) :
typeof define === 'function' && define.amd ? define(['exports', 'safe-json-stringify', 'error-stack-parser', 'react'], factory) :
(global = global || self, factory(global['bugsnag-browser-lite'] = {}, global.jsonStringify, global.ErrorStackParser, global.React));
}(this, (function (exports, jsonStringify, ErrorStackParser, React) { 'use strict';

@@ -10,7 +10,2 @@ jsonStringify = jsonStringify && Object.prototype.hasOwnProperty.call(jsonStringify, 'default') ? jsonStringify['default'] : jsonStringify;

const notifyUrl = "https://notify.bugsnag.com";
let config = {
notifyUrl
};
const _pad = n => n < 10 ? `0${n}` : n; // Date#toISOString

@@ -23,3 +18,4 @@

return d.getUTCFullYear() + "-" + _pad(d.getUTCMonth() + 1) + "-" + _pad(d.getUTCDate()) + "T" + _pad(d.getUTCHours()) + ":" + _pad(d.getUTCMinutes()) + ":" + _pad(d.getUTCSeconds()) + "." + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + "Z";
} // const REPORT_FILTER_PATHS = [
}
// "events.[].app",

@@ -34,3 +30,3 @@ // "events.[].metaData",

function prepareReportJson(report) {
let payload = jsonStringify(report, null, null);
let payload = jsonStringify(report, null);

@@ -44,3 +40,3 @@ if (payload.length > 10e5) {

};
payload = jsonStringify(report, null, null);
payload = jsonStringify(report, null);
if (payload.length > 10e5) throw new Error("payload exceeded 1MB limit");

@@ -52,3 +48,3 @@ }

function sendReport(report, cb = () => {}) {
function sendReport(config, report, cb = () => {}) {
if (typeof XMLHttpRequest !== "undefined") {

@@ -65,3 +61,3 @@ try {

req.setRequestHeader("Content-Type", "application/json");
req.setRequestHeader("Bugsnag-Api-Key", config.apiKey);
req.setRequestHeader("Bugsnag-Api-Key", config.apiKey || "");
req.setRequestHeader("Bugsnag-Payload-Version", "5");

@@ -83,3 +79,7 @@ req.setRequestHeader("Bugsnag-Sent-At", isoDate());

function normaliseFunctionName(name) {
return /^global code$/i.test(name) ? "global code" : name;
if (name !== undefined) {
return /^global code$/i.test(name) ? "global code" : name;
} else {
return name;
}
} // takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)

@@ -100,3 +100,3 @@ // and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)

if (f.lineNumber > -1 && !f.file && !f.method) {
if (f.lineNumber && f.lineNumber > -1 && !f.file && !f.method) {
f.file = "global code";

@@ -174,10 +174,10 @@ }

};
} // Javascript Error object contains a `name` property which gives the type of
}
// error. E.g. SyntaxError, TypeError, RangeError, EvalError
// User can create their own custom error too and give it a custom name
function prepareBugsnagReport(config, error, opts) {
function prepareBugsnagReport(apiKey, error, opts) {
return {
apiKey: config.apiKey,
apiKey,
payloadVersion: 5,

@@ -204,23 +204,100 @@ notifier: {

}
const notifyUrl = "https://notify.bugsnag.com";
class BugsnagClient {
constructor(apiKey) {
this.config = {
apiKey,
notifyUrl
};
}
function notify(error, opts) {
sendReport(prepareBugsnagReport(config, error, opts));
notify(error, opts) {
sendReport(this.config, prepareBugsnagReport(this.config.apiKey, error, opts));
}
}
const bugsnagClient = {
notify
const formatComponentStack = str => {
const lines = str.split(/\s*\n\s*/g);
let ret = "";
for (let line = 0, len = lines.length; line < len; line++) {
if (lines[line].length) ret += `${ret.length ? "\n" : ""}${lines[line]}`;
}
return ret;
};
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = {
error: null
};
}
static getDerivedStateFromError(error) {
// Update state so the next render will show the fallback UI.
return {
error
};
}
componentDidCatch(error, info) {
const {
bugsnagClient
} = this.props;
const handledState = {
severity: "error",
unhandled: true,
severityReason: {
type: "unhandledException"
}
};
if (info && info.componentStack) {
info.componentStack = formatComponentStack(info.componentStack);
}
bugsnagClient.notify(error, {
metaData: {
react: info
},
...handledState
});
}
render() {
const {
error
} = this.state;
if (error) {
const {
FallbackComponent
} = this.props;
if (FallbackComponent) {
return React.createElement(FallbackComponent, this.state);
}
return null;
}
return this.props.children;
}
}
// import { ErrorBoundary } from "./bugsnag_react";
function bugsnag(apiKey) {
config.apiKey = apiKey;
return bugsnagClient;
return new BugsnagClient(apiKey);
}
exports.bugsnag = bugsnag;
exports.getStacktrace = getStacktrace;
exports.hasStack = hasStack;
exports.isoDate = isoDate;
exports.notifyUrl = notifyUrl;
exports.prepareBugsnagReport = prepareBugsnagReport;
exports.BugsnagClient = BugsnagClient;
exports.ErrorBoundary = ErrorBoundary;
exports.default = bugsnag;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=bugsnag-browser-lite.umd.development.js.map

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("safe-json-stringify"),require("error-stack-parser")):"function"==typeof define&&define.amd?define(["exports","safe-json-stringify","error-stack-parser"],t):t((e=e||self)["bugsnag-browser-lite"]={},e.jsonStringify,e.ErrorStackParser)}(this,(function(e,t,n){"use strict";t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;let r={notifyUrl:"https://notify.bugsnag.com"};const a=e=>e<10?"0"+e:e;function s(){const e=new Date;return e.getUTCFullYear()+"-"+a(e.getUTCMonth()+1)+"-"+a(e.getUTCDate())+"T"+a(e.getUTCHours())+":"+a(e.getUTCMinutes())+":"+a(e.getUTCSeconds())+"."+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}function o(e){return!(!e||!e.stack&&!e.stacktrace&&!e["opera#sourceloc"]||"string"!=typeof(e.stack||e.stacktrace||e["opera#sourceloc"])||e.stack===`${e.name}: ${e.message}`)}function i(e){const t={file:e.fileName,method:(n=e.functionName,/^global code$/i.test(n)?"global code":n),lineNumber:e.lineNumber,columnNumber:e.columnNumber};var n;return t.lineNumber>-1&&!t.file&&!t.method&&(t.file="global code"),t}function u(e){return o(e)?n.parse(e).map(i):[]}function l(){let e="Unknown OS";return-1!=navigator.appVersion.indexOf("Win")&&(e="Windows"),-1!=navigator.appVersion.indexOf("Mac")&&(e="MacOS"),-1!=navigator.appVersion.indexOf("X11")&&(e="UNIX"),-1!=navigator.appVersion.indexOf("Linux")&&(e="Linux"),e}function f(){const e=navigator,t=navigator.userAgent;let n,r,a,o=navigator.appName,i=""+parseFloat(navigator.appVersion);return-1!=(r=t.indexOf("Opera"))?(o="Opera",i=t.substring(r+6),-1!=(r=t.indexOf("Version"))&&(i=t.substring(r+8))):-1!=(r=t.indexOf("MSIE"))?(o="Microsoft Internet Explorer",i=t.substring(r+5)):-1!=(r=t.indexOf("Chrome"))?(o="Chrome",i=t.substring(r+7)):-1!=(r=t.indexOf("Safari"))?(o="Safari",i=t.substring(r+7),-1!=(r=t.indexOf("Version"))&&(i=t.substring(r+8))):-1!=(r=t.indexOf("Firefox"))?(o="Firefox",i=t.substring(r+8)):(n=t.lastIndexOf(" ")+1)<(r=t.lastIndexOf("/"))&&(o=t.substring(n,r),i=t.substring(r+1),o.toLowerCase()==o.toUpperCase()&&(o=navigator.appName)),-1!=(a=i.indexOf(";"))&&(i=i.substring(0,a)),-1!=(a=i.indexOf(" "))&&(i=i.substring(0,a)),{language:e.language,userAgent:e.userAgent,time:s(),osName:l(),browserName:o,browserVersion:i}}function g(e,t,n){return{apiKey:e.apiKey,payloadVersion:5,notifier:{name:"saltside web",version:"1.0.0",url:"https://saltside.se/"},events:[{exceptions:[{errorClass:t.name||"[no errorr name]",message:t.message||"[no errror message]",stacktrace:u(t)}],device:f(),app:{releaseStage:"development"},metaData:n?n.metaData:void 0,user:n?n.user:void 0}]}}const c={notify:function(e,n){!function(e,n=(()=>{})){if("undefined"!=typeof XMLHttpRequest)try{const a=r.notifyUrl,o=new XMLHttpRequest;o.onreadystatechange=function(){o.readyState===XMLHttpRequest.DONE&&n()},o.open("POST",a),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Bugsnag-Api-Key",r.apiKey),o.setRequestHeader("Bugsnag-Payload-Version","5"),o.setRequestHeader("Bugsnag-Sent-At",s()),o.send(function(e){let n=t(e,null,null);if(n.length>1e6&&(delete e.events[0].metaData,e.events[0].metaData={notifier:`WARNING!\nSerialized payload was ${n.length/1e6}MB (limit = 1MB)\nmetaData was removed`},n=t(e,null,null),n.length>1e6))throw new Error("payload exceeded 1MB limit");return n}(e))}catch(e){console.error(e)}else console.error("Bugsnag logger: Could not find XMLHttpRequest")}(g(r,e,n))}};e.bugsnag=function(e){return r.apiKey=e,c},e.getStacktrace=u,e.hasStack=o,e.isoDate=s,e.notifyUrl="https://notify.bugsnag.com",e.prepareBugsnagReport=g}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("safe-json-stringify"),require("error-stack-parser"),require("react")):"function"==typeof define&&define.amd?define(["exports","safe-json-stringify","error-stack-parser","react"],t):t((e=e||self)["bugsnag-browser-lite"]={},e.jsonStringify,e.ErrorStackParser,e.React)}(this,(function(e,t,n,r){function o(){const e=new Date;return e.getUTCFullYear()+"-"+c(e.getUTCMonth()+1)+"-"+c(e.getUTCDate())+"T"+c(e.getUTCHours())+":"+c(e.getUTCMinutes())+":"+c(e.getUTCSeconds())+"."+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"}function a(e){const t={file:e.fileName,method:(n=e.functionName,void 0!==n&&/^global code$/i.test(n)?"global code":n),lineNumber:e.lineNumber,columnNumber:e.columnNumber};var n;return t.lineNumber&&t.lineNumber>-1&&!t.file&&!t.method&&(t.file="global code"),t}function i(e){return function(e){return!(!e||!e.stack&&!e.stacktrace&&!e["opera#sourceloc"]||"string"!=typeof(e.stack||e.stacktrace||e["opera#sourceloc"])||e.stack===`${e.name}: ${e.message}`)}(e)?n.parse(e).map(a):[]}function s(){let e="Unknown OS";return-1!=navigator.appVersion.indexOf("Win")&&(e="Windows"),-1!=navigator.appVersion.indexOf("Mac")&&(e="MacOS"),-1!=navigator.appVersion.indexOf("X11")&&(e="UNIX"),-1!=navigator.appVersion.indexOf("Linux")&&(e="Linux"),e}function u(){const e=navigator,t=navigator.userAgent;let n,r,a,i=navigator.appName,u=""+parseFloat(navigator.appVersion);return-1!=(r=t.indexOf("Opera"))?(i="Opera",u=t.substring(r+6),-1!=(r=t.indexOf("Version"))&&(u=t.substring(r+8))):-1!=(r=t.indexOf("MSIE"))?(i="Microsoft Internet Explorer",u=t.substring(r+5)):-1!=(r=t.indexOf("Chrome"))?(i="Chrome",u=t.substring(r+7)):-1!=(r=t.indexOf("Safari"))?(i="Safari",u=t.substring(r+7),-1!=(r=t.indexOf("Version"))&&(u=t.substring(r+8))):-1!=(r=t.indexOf("Firefox"))?(i="Firefox",u=t.substring(r+8)):(n=t.lastIndexOf(" ")+1)<(r=t.lastIndexOf("/"))&&(i=t.substring(n,r),u=t.substring(r+1),i.toLowerCase()==i.toUpperCase()&&(i=navigator.appName)),-1!=(a=u.indexOf(";"))&&(u=u.substring(0,a)),-1!=(a=u.indexOf(" "))&&(u=u.substring(0,a)),{language:e.language,userAgent:e.userAgent,time:o(),osName:s(),browserName:i,browserVersion:u}}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;const c=e=>e<10?"0"+e:e;class l{constructor(e){this.config={apiKey:e,notifyUrl:"https://notify.bugsnag.com"}}notify(e,n){!function(e,n,r=(()=>{})){if("undefined"!=typeof XMLHttpRequest)try{const a=e.notifyUrl,i=new XMLHttpRequest;i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&r()},i.open("POST",a),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("Bugsnag-Api-Key",e.apiKey||""),i.setRequestHeader("Bugsnag-Payload-Version","5"),i.setRequestHeader("Bugsnag-Sent-At",o()),i.send(function(e){let n=t(e,null);if(n.length>1e6&&(delete e.events[0].metaData,e.events[0].metaData={notifier:`WARNING!\nSerialized payload was ${n.length/1e6}MB (limit = 1MB)\nmetaData was removed`},n=t(e,null),n.length>1e6))throw Error("payload exceeded 1MB limit");return n}(n))}catch(e){console.error(e)}else console.error("Bugsnag logger: Could not find XMLHttpRequest")}(this.config,function(e,t,n){return{apiKey:e,payloadVersion:5,notifier:{name:"saltside web",version:"1.0.0",url:"https://saltside.se/"},events:[{exceptions:[{errorClass:t.name||"[no errorr name]",message:t.message||"[no errror message]",stacktrace:i(t)}],device:u(),app:{releaseStage:"development"},metaData:n?n.metaData:void 0,user:n?n.user:void 0}]}}(this.config.apiKey,e,n))}}e.BugsnagClient=l,e.ErrorBoundary=class extends r.Component{constructor(e){super(e),this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){const{bugsnagClient:n}=this.props;t&&t.componentStack&&(t.componentStack=(e=>{const t=e.split(/\s*\n\s*/g);let n="";for(let e=0,r=t.length;e<r;e++)t[e].length&&(n+=`${n.length?"\n":""}${t[e]}`);return n})(t.componentStack)),n.notify(e,{metaData:{react:t},severity:"error",unhandled:!0,severityReason:{type:"unhandledException"}})}render(){const{error:e}=this.state;if(e){const{FallbackComponent:e}=this.props;return e?r.createElement(e,this.state):null}return this.props.children}},e.default=function(e){return new l(e)},Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=bugsnag-browser-lite.umd.production.min.js.map
{
"name": "bugsnag-browser-lite",
"version": "1.1.1",
"version": "2.0.0",
"description": "Bugsnag error reporting on the browser",
"main": "./dist/index.js",
"main": "dist/index.js",
"module": "dist/bugsnag-browser-lite.esm.js",

@@ -11,3 +11,4 @@ "umd:main": "dist/bugsnag-browser-lite.umd.production.min.js",

"jsnext:main": "dist/bugsnag-browser-lite.esm.js",
"types": "./dist/index.d.ts",
"source": "src/bugsnag.ts",
"types": "./dist/bugsnag.d.ts",
"files": [

@@ -20,2 +21,15 @@ "dist"

},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{ts,tsx}": [
"tslint --fix",
"prettier --write",
"git add",
"npm run test -- --bail --passWithNoTests --findRelatedTests"
]
},
"keywords": [

@@ -37,5 +51,14 @@ "bugsnag",

"@babel/preset-typescript": "^7.9.0",
"@types/react": "^16.9.34",
"@types/react-dom": "^16.9.6",
"husky": "^4.2.5",
"jest": "^25.3.0",
"lint-staged": "^10.1.3",
"prettier": "^2.0.4",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"rimraf": "^3.0.2",
"rollup-plugin-terser": "^5.3.0",
"tsdx": "^0.13.1",
"tslint": "^6.1.1",
"typescript": "^3.8.3",

@@ -48,3 +71,7 @@ "xhr-mock": "^2.5.1"

"safe-json-stringify": "^1.2.0"
},
"peerDependencies": {
"react": "*",
"react-dom": "*"
}
}

@@ -17,3 +17,3 @@ bugsnag-browser-lite is a light weight replacement for [@bugsnag/js](https://github.com/bugsnag/bugsnag-js).

```
import { bugsnag } from 'bugsnag-browser-lite';
import bugsnag from 'bugsnag-browser-lite';

@@ -26,2 +26,14 @@ const bugsnagClient = bugsnag('your-bugsnag-api-key')

Catching and logging all unhandled exceptions in react.
```
import bugsnag, { ErrorBoundary } from 'bugsnag-browser-lite';
const bugsnagClient = bugsnag('your-bugsnag-api-key')
<ErrorBoundary bugsnagClient={bugsnagClient}> >
<YourApp />
</ErrorBoundary>
```
It's written in typescript and the types are published with the package.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet