redux-persist
Version:
persist and rehydrate redux stores
44 lines (39 loc) • 1.25 kB
Flow
// @flow
import type { PersistConfig } from './types'
import { KEY_PREFIX } from './constants'
export default function getStoredState(
config: PersistConfig
): Promise<Object | void> {
const transforms = config.transforms || []
const storageKey = `${
config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX
}${config.key}`
const storage = config.storage
const debug = config.debug
const deserialize = config.serialize === false ? x => x : defaultDeserialize
return storage.getItem(storageKey).then(serialized => {
if (!serialized) return undefined
else {
try {
let state = {}
let rawState = deserialize(serialized)
Object.keys(rawState).forEach(key => {
state[key] = transforms.reduceRight((subState, transformer) => {
return transformer.out(subState, key, rawState)
}, deserialize(rawState[key]))
})
return state
} catch (err) {
if (process.env.NODE_ENV !== 'production' && debug)
console.log(
`redux-persist/getStoredState: Error restoring data ${serialized}`,
err
)
throw err
}
}
})
}
function defaultDeserialize(serial) {
return JSON.parse(serial)
}