JSFiddle - React, Tailwind, and code Playground

by amindunited

JavaScript

const ex = new DOMException();
ex.code = 22;
ex.name = 'QuotaExceededError';

window.fakeStorage = {
	setItem: () => { throw ex },
	removeItem: () => { throw ex }
};
window.fakeStorage.length = 222;

const isSupported = (type = 'fakeStorage') => {
  // const type = 'sessionStorage'; // Use 'localStorage' for local Storage
  let storage;
  try {
    storage = window[type];
    let x = '__storage_test__';
    storage.setItem(x, x);
    storage.removeItem(x);
    return true;
  }
  catch(e) {

		console.log('Catch!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
    console.log('e instanceof DOMException', e instanceof DOMException);
    console.log('e.code', e.code);
    console.log('e.name', e.name);
    console.log('storage.length', storage.length);

    const result =  e instanceof DOMException && (
      // everything except Firefox
      e.code === 22 ||
      // Firefox
      e.code === 1014 ||
      // test name field too, because code might not be present
      // everything except Firefox
      e.name === 'QuotaExceededError' ||
      // Firefox
      e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
      // acknowledge QuotaExceededError only if there's something already stored
      (storage && storage.length !== 0);
 
    console.log('result ', result);
    return result;
  }
};

isSupported();