7876f82871
* 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
45 lines
992 B
JavaScript
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
|
|
})
|