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.
 
 
 

50 lines
1.4 KiB

// @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
let deserialize
if (config.deserialize === false) {
deserialize = x => x
} else if (typeof config.deserialize === 'function') {
deserialize = config.deserialize
} else {
deserialize = 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)
}