UNPKG

error-shelter

Version:

frontend error catch and storage utility for JS apps.

85 lines (66 loc) 2.15 kB
// errorShelter.js - Extends the native Error method and stores errors into localStorage obj // https://github.com/crobinson42/error-shelter // Cory Robinson (function () { var config = { nameSpace : 'errorShelter', //can be changed to fit app needs availableGlobal : true, // make the nameSpace available either GLOBAL.nameSpace || window.nameSpace }; if (!localStorage) { return console.warn('errorShelter.js - localStorage not supported.'); } var initializeEmptyStorage = function () { localStorage.setItem(config.nameSpace, JSON.stringify({errors:[]})); }; // check for existing errorShelter in storage and if non exists initialize empty if (!localStorage.getItem(config.nameSpace)) { initializeEmptyStorage(); } var nativeError = Error; var errorShelter = function() { // get navigator props, varies from browser to browser.. simple solution: var navigator = {}; for (var np in window.navigator) { navigator[np] = window.navigator[np]; } // invoke the Error var e = nativeError.apply(window,arguments); setErrorInStorage({ 'arguments' : arguments, 'message' : arguments[0], 'time' : generateTime(), 'browserInfo' : { 'navigator' : navigator, 'location' : location.origin + '' + location.pathname }, 'stack' : e.stack, 'options' : {} }); return e; }; // JSON.stringify the object and put back in localStorage var setErrorInStorage = function (err) { var storage = getStorage(); if (storage && storage.errors) { storage.errors.push(err); return localStorage.setItem([config.nameSpace], JSON.stringify(storage)); } }; // Returns the localStorage after JSON.parse var getStorage = function () { return JSON.parse(localStorage[config.nameSpace]); }; var generateTime = function () { return new Date().getTime(); }; // The available methods exposed for API consumption var publicApi = { getStorage : getStorage, emptyStorage : initializeEmptyStorage }; if (config.availableGlobal) { if (window) { window[config.nameSpace] = publicApi; } } window.Error = errorShelter; window.Error[config.nameSpace] = publicApi; })();