pinafore/routes/_utils/testStorage.js
Nolan Lawson 7876f82871
fix: build inline script using Rollup (#761)
* fix: build inline script using Rollup

This reduces code duplication and allows the theme engine to work the
same without modifying the code in two places. It does extra extra deps,
but I tried to keep them to a minimum.

* change code comment

* remove unnecessary constant
2018-12-08 11:21:54 -08:00

45 lines
992 B
JavaScript

// LocalStorage and IDB may be disabled in private mode, when "blocking cookies" in Safari,
// or other cases
import { thunk } from './thunk'
const testKey = '__test__'
export const testHasLocalStorageOnce = () => {
try {
localStorage.setItem(testKey, testKey)
if (!localStorage.length || localStorage.getItem(testKey) !== testKey) {
return false
}
localStorage.removeItem(testKey)
} catch (e) {
return false
}
return true
}
export const testHasLocalStorage = thunk(testHasLocalStorageOnce)
export const testHasIndexedDB = thunk(async () => {
if (typeof indexedDB === 'undefined') {
return false
}
try {
let idbFailed = await new Promise(resolve => {
let db = indexedDB.open(testKey)
db.onerror = () => resolve(true)
db.onsuccess = () => {
indexedDB.deleteDatabase(testKey)
resolve(false)
}
})
if (idbFailed) {
return false
}
} catch (e) {
return false
}
return true
})