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.
49 lines
1.7 KiB
49 lines
1.7 KiB
2 years ago
|
"use strict";
|
||
|
|
||
|
exports.__esModule = true;
|
||
|
exports.default = createMigrate;
|
||
|
|
||
|
var _constants = require("./constants");
|
||
|
|
||
|
function createMigrate(migrations, config) {
|
||
|
var _ref = config || {},
|
||
|
debug = _ref.debug;
|
||
|
|
||
|
return function (state, currentVersion) {
|
||
|
if (!state) {
|
||
|
if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist: no inbound state, skipping migration');
|
||
|
return Promise.resolve(undefined);
|
||
|
}
|
||
|
|
||
|
var inboundVersion = state._persist && state._persist.version !== undefined ? state._persist.version : _constants.DEFAULT_VERSION;
|
||
|
|
||
|
if (inboundVersion === currentVersion) {
|
||
|
if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist: versions match, noop migration');
|
||
|
return Promise.resolve(state);
|
||
|
}
|
||
|
|
||
|
if (inboundVersion > currentVersion) {
|
||
|
if (process.env.NODE_ENV !== 'production') console.error('redux-persist: downgrading version is not supported');
|
||
|
return Promise.resolve(state);
|
||
|
}
|
||
|
|
||
|
var migrationKeys = Object.keys(migrations).map(function (ver) {
|
||
|
return parseInt(ver);
|
||
|
}).filter(function (key) {
|
||
|
return currentVersion >= key && key > inboundVersion;
|
||
|
}).sort(function (a, b) {
|
||
|
return a - b;
|
||
|
});
|
||
|
if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist: migrationKeys', migrationKeys);
|
||
|
|
||
|
try {
|
||
|
var migratedState = migrationKeys.reduce(function (state, versionKey) {
|
||
|
if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist: running migration for versionKey', versionKey);
|
||
|
return migrations[versionKey](state);
|
||
|
}, state);
|
||
|
return Promise.resolve(migratedState);
|
||
|
} catch (err) {
|
||
|
return Promise.reject(err);
|
||
|
}
|
||
|
};
|
||
|
}
|