You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.0 KiB
44 lines
1.0 KiB
// @flow |
|
|
|
import type { Storage } from '../types' |
|
|
|
function noop() {} |
|
let noopStorage = { |
|
getItem: noop, |
|
setItem: noop, |
|
removeItem: noop, |
|
} |
|
|
|
function hasStorage(storageType) { |
|
if (typeof self !== 'object' || !(storageType in self)) { |
|
return false |
|
} |
|
|
|
try { |
|
let storage = self[storageType] |
|
const testKey = `redux-persist ${storageType} test` |
|
storage.setItem(testKey, 'test') |
|
storage.getItem(testKey) |
|
storage.removeItem(testKey) |
|
} catch (e) { |
|
if (process.env.NODE_ENV !== 'production') |
|
console.warn( |
|
`redux-persist ${storageType} test failed, persistence will be disabled.` |
|
) |
|
return false |
|
} |
|
return true |
|
} |
|
|
|
export default function getStorage(type: string): Storage { |
|
const storageType = `${type}Storage` |
|
if (hasStorage(storageType)) return self[storageType] |
|
else { |
|
if (process.env.NODE_ENV !== 'production') { |
|
console.error( |
|
`redux-persist failed to create sync storage. falling back to noop storage.` |
|
) |
|
} |
|
return noopStorage |
|
} |
|
}
|
|
|