| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /**
- * localStorage can throw browser exceptions, for example if it is full We don't
- * use localStorage for anything critical, so in that case just fail gracefully.
- */
- /**
- * Catch, log and otherwise ignore errors.
- *
- * @param {function} fn localStorage function to call
- * @param {string?} key Key passed to the localStorage function (if any)
- * @param {any?} value Value passed to the localStorage function (if any)
- */
- const callSafe = function (fn, key, value) {
- try {
- return fn(key, value)
- } catch (e) {
- console.error('localStorage exception', e)
- return null
- }
- }
- const getItem = function (key) {
- return JSON.parse(localStorage.getItem(key))
- }
- const setItem = function (key, value) {
- localStorage.setItem(key, JSON.stringify(value))
- }
- const clear = function () {
- localStorage.clear()
- }
- const removeItem = function (key) {
- return localStorage.removeItem(key)
- }
- const customLocalStorage = {
- getItem: key => callSafe(getItem, key),
- setItem: (key, value) => callSafe(setItem, key, value),
- clear: () => callSafe(clear),
- removeItem: key => callSafe(removeItem, key),
- }
- export default customLocalStorage
|