Merge pull request #225 from lbryio/redux-persist

Redux persist
This commit is contained in:
Jeremy Kauffman 2017-06-15 10:13:31 -04:00 committed by GitHub
commit 98782bbe2a
7 changed files with 387 additions and 200 deletions

View file

@ -11,6 +11,7 @@ import { selectResolvingUris } from "selectors/content";
import { selectCostInfoForUri } from "selectors/cost_info"; import { selectCostInfoForUri } from "selectors/cost_info";
import { doOpenModal } from "actions/app"; import { doOpenModal } from "actions/app";
import { doClaimEligiblePurchaseRewards } from "actions/rewards"; import { doClaimEligiblePurchaseRewards } from "actions/rewards";
import batchActions from "util/batchActions";
export function doResolveUri(uri) { export function doResolveUri(uri) {
return function(dispatch, getState) { return function(dispatch, getState) {
@ -63,20 +64,29 @@ export function doFetchFeaturedUris() {
const success = ({ Categories, Uris }) => { const success = ({ Categories, Uris }) => {
let featuredUris = {}; let featuredUris = {};
const actions = [];
Categories.forEach(category => { Categories.forEach(category => {
if (Uris[category] && Uris[category].length) { if (Uris[category] && Uris[category].length) {
featuredUris[category] = Uris[category]; const uris = Uris[category];
featuredUris[category] = uris;
uris.forEach(uri => {
actions.push(doResolveUri(uri));
});
} }
}); });
dispatch({ actions.push({
type: types.FETCH_FEATURED_CONTENT_COMPLETED, type: types.FETCH_FEATURED_CONTENT_COMPLETED,
data: { data: {
categories: Categories, categories: Categories,
uris: featuredUris, uris: featuredUris,
success: true,
}, },
}); });
dispatch(batchActions(...actions));
}; };
const failure = () => { const failure = () => {

View file

@ -98,7 +98,9 @@ export function doDeleteFile(outpoint, deleteFromComputer) {
export function doFetchFileInfosAndPublishedClaims() { export function doFetchFileInfosAndPublishedClaims() {
return function(dispatch, getState) { return function(dispatch, getState) {
const state = getState(); const state = getState(),
isClaimListMinePending = selectClaimListMineIsPending(state),
isFileInfoListPending = selectFileListIsPending(state);
dispatch(doFetchClaimListMine()); dispatch(doFetchClaimListMine());
dispatch(doFileList()); dispatch(doFileList());

View file

@ -4,6 +4,7 @@ import lighthouse from "lighthouse";
import { doResolveUri } from "actions/content"; import { doResolveUri } from "actions/content";
import { doNavigate, doHistoryPush } from "actions/app"; import { doNavigate, doHistoryPush } from "actions/app";
import { selectCurrentPage } from "selectors/app"; import { selectCurrentPage } from "selectors/app";
import batchActions from "util/batchActions";
export function doSearch(query) { export function doSearch(query) {
return function(dispatch, getState) { return function(dispatch, getState) {
@ -25,22 +26,26 @@ export function doSearch(query) {
dispatch(doNavigate("search", { query: query })); dispatch(doNavigate("search", { query: query }));
} else { } else {
lighthouse.search(query).then(results => { lighthouse.search(query).then(results => {
const actions = [];
results.forEach(result => { results.forEach(result => {
const uri = lbryuri.build({ const uri = lbryuri.build({
channelName: result.channel_name, channelName: result.channel_name,
contentName: result.name, contentName: result.name,
claimId: result.channel_id || result.claim_id, claimId: result.channel_id || result.claim_id,
}); });
dispatch(doResolveUri(uri)); actions.push(doResolveUri(uri));
}); });
dispatch({ actions.push({
type: types.SEARCH_COMPLETED, type: types.SEARCH_COMPLETED,
data: { data: {
query, query,
results, results,
}, },
}); });
dispatch(batchActions(...actions));
}); });
} }
}; };

View file

@ -6,15 +6,13 @@ import FilePage from "page/filePage";
class ShowPage extends React.PureComponent { class ShowPage extends React.PureComponent {
componentWillMount() { componentWillMount() {
this.resolve(this.props); const { isResolvingUri, resolveUri, uri } = this.props;
if (!isResolvingUri) resolveUri(uri);
} }
componentWillReceiveProps(nextProps) { componentWillReceiveProps(nextProps) {
this.resolve(nextProps); const { isResolvingUri, resolveUri, claim, uri } = this.props;
}
resolve(props) {
const { isResolvingUri, resolveUri, claim, uri } = props;
if (!isResolvingUri && claim === undefined && uri) { if (!isResolvingUri && claim === undefined && uri) {
resolveUri(uri); resolveUri(uri);
@ -26,7 +24,7 @@ class ShowPage extends React.PureComponent {
let innerContent = ""; let innerContent = "";
if (isResolvingUri || !claim) { if (isResolvingUri && !claim) {
innerContent = ( innerContent = (
<section className="card"> <section className="card">
<div className="card__inner"> <div className="card__inner">
@ -44,7 +42,7 @@ class ShowPage extends React.PureComponent {
</div> </div>
</section> </section>
); );
} else if (claim.name.length && claim.name[0] === "@") { } else if (claim && claim.name.length && claim.name[0] === "@") {
innerContent = <ChannelPage uri={uri} />; innerContent = <ChannelPage uri={uri} />;
} else if (claim) { } else if (claim) {
innerContent = <FilePage uri={uri} />; innerContent = <FilePage uri={uri} />;

View file

@ -1,22 +1,28 @@
const redux = require('redux'); import { createLogger } from "redux-logger";
const thunk = require('redux-thunk').default; import appReducer from "reducers/app";
import availabilityReducer from "reducers/availability";
import claimsReducer from "reducers/claims";
import contentReducer from "reducers/content";
import costInfoReducer from "reducers/cost_info";
import fileInfoReducer from "reducers/file_info";
import rewardsReducer from "reducers/rewards";
import searchReducer from "reducers/search";
import settingsReducer from "reducers/settings";
import userReducer from "reducers/user";
import walletReducer from "reducers/wallet";
import { persistStore, autoRehydrate } from "redux-persist";
import createCompressor from "redux-persist-transform-compress";
import createFilter from "redux-persist-transform-filter";
import { REHYDRATE } from "redux-persist/constants";
import createActionBuffer from "redux-action-buffer";
const localForage = require("localforage");
const redux = require("redux");
const thunk = require("redux-thunk").default;
const env = ENV; const env = ENV;
import { createLogger } from 'redux-logger';
import appReducer from 'reducers/app';
import availabilityReducer from 'reducers/availability';
import claimsReducer from 'reducers/claims';
import contentReducer from 'reducers/content';
import costInfoReducer from 'reducers/cost_info';
import fileInfoReducer from 'reducers/file_info';
import rewardsReducer from 'reducers/rewards';
import searchReducer from 'reducers/search';
import settingsReducer from 'reducers/settings';
import walletReducer from 'reducers/wallet';
import userReducer from 'reducers/user';
function isFunction(object) { function isFunction(object) {
return typeof object === 'function'; return typeof object === "function";
} }
function isNotFunction(object) { function isNotFunction(object) {
@ -25,7 +31,7 @@ function isNotFunction(object) {
function createBulkThunkMiddleware() { function createBulkThunkMiddleware() {
return ({ dispatch, getState }) => next => action => { return ({ dispatch, getState }) => next => action => {
if (action.type === 'BATCH_ACTIONS') { if (action.type === "BATCH_ACTIONS") {
action.actions action.actions
.filter(isFunction) .filter(isFunction)
.map(actionFn => actionFn(dispatch, getState)); .map(actionFn => actionFn(dispatch, getState));
@ -37,7 +43,7 @@ function createBulkThunkMiddleware() {
function enableBatching(reducer) { function enableBatching(reducer) {
return function batchingReducer(state, action) { return function batchingReducer(state, action) {
switch (action.type) { switch (action.type) {
case 'BATCH_ACTIONS': case "BATCH_ACTIONS":
return action.actions return action.actions
.filter(isNotFunction) .filter(isNotFunction)
.reduce(batchingReducer, state); .reduce(batchingReducer, state);
@ -64,17 +70,36 @@ const reducers = redux.combineReducers({
const bulkThunk = createBulkThunkMiddleware(); const bulkThunk = createBulkThunkMiddleware();
const middleware = [thunk, bulkThunk]; const middleware = [thunk, bulkThunk];
if (env === 'development') { if (env === "development") {
const logger = createLogger({ const logger = createLogger({
collapsed: true collapsed: true,
}); });
middleware.push(logger); middleware.push(logger);
} }
middleware.push(createActionBuffer(REHYDRATE));
const createStoreWithMiddleware = redux.compose( const createStoreWithMiddleware = redux.compose(
autoRehydrate(),
redux.applyMiddleware(...middleware) redux.applyMiddleware(...middleware)
)(redux.createStore); )(redux.createStore);
const reduxStore = createStoreWithMiddleware(enableBatching(reducers)); const reduxStore = createStoreWithMiddleware(enableBatching(reducers));
const compressor = createCompressor();
const saveClaimsFilter = createFilter("claims", [
"byId",
"claimsByUri",
"myClaims",
]);
const persistOptions = {
whitelist: ["claims"],
// Order is important. Needs to be compressed last or other transforms can't
// read the data
transforms: [saveClaimsFilter, compressor],
debounce: 1000,
storage: localForage,
};
persistStore(reduxStore, persistOptions);
export default reduxStore; export default reduxStore;

426
ui/package-lock.json generated
View file

@ -15,10 +15,9 @@
"dev": true "dev": true
}, },
"acorn": { "acorn": {
"version": "5.0.3", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
"integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=", "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
"dev": true
}, },
"acorn-dynamic-import": { "acorn-dynamic-import": {
"version": "2.0.2", "version": "2.0.2",
@ -201,6 +200,11 @@
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
"integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
}, },
"ast-types": {
"version": "0.8.15",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz",
"integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI="
},
"async": { "async": {
"version": "2.4.1", "version": "2.4.1",
"resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz", "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz",
@ -666,6 +670,11 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
}, },
"base62": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
"integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ="
},
"base64-js": { "base64-js": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
@ -1312,6 +1321,11 @@
"integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
"dev": true "dev": true
}, },
"es3ify": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz",
"integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E="
},
"es5-ext": { "es5-ext": {
"version": "0.10.23", "version": "0.10.23",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz",
@ -1507,17 +1521,29 @@
} }
} }
}, },
"esmangle-evaluator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz",
"integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY="
},
"espree": { "espree": {
"version": "3.4.3", "version": "3.4.3",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz",
"integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=",
"dev": true,
"dependencies": {
"acorn": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
"integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=",
"dev": true "dev": true
}
}
}, },
"esprima": { "esprima-fb": {
"version": "3.1.3", "version": "3001.1.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE="
"dev": true
}, },
"esquery": { "esquery": {
"version": "1.0.0", "version": "1.0.0",
@ -1650,6 +1676,18 @@
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
"integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA="
}, },
"falafel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
"integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
}
}
},
"fast-levenshtein": { "fast-levenshtein": {
"version": "2.0.6", "version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
@ -1746,8 +1784,7 @@
"foreach": { "foreach": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
"dev": true
}, },
"forever-agent": { "forever-agent": {
"version": "0.6.1", "version": "0.6.1",
@ -1787,9 +1824,9 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
}, },
"fsevents": { "fsevents": {
"version": "1.1.1", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz",
"integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=", "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==",
"optional": true, "optional": true,
"dependencies": { "dependencies": {
"abbrev": { "abbrev": {
@ -1797,22 +1834,22 @@
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"ajv": {
"version": "4.11.8",
"bundled": true,
"optional": true
},
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true "bundled": true
}, },
"ansi-styles": {
"version": "2.2.1",
"bundled": true,
"optional": true
},
"aproba": { "aproba": {
"version": "1.1.1", "version": "1.1.1",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"are-we-there-yet": { "are-we-there-yet": {
"version": "1.1.2", "version": "1.1.4",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -1859,7 +1896,7 @@
"bundled": true "bundled": true
}, },
"brace-expansion": { "brace-expansion": {
"version": "1.1.6", "version": "1.1.7",
"bundled": true "bundled": true
}, },
"buffer-shims": { "buffer-shims": {
@ -1867,12 +1904,12 @@
"bundled": true "bundled": true
}, },
"caseless": { "caseless": {
"version": "0.11.0", "version": "0.12.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"chalk": { "co": {
"version": "1.1.3", "version": "4.6.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -1884,11 +1921,6 @@
"version": "1.0.5", "version": "1.0.5",
"bundled": true "bundled": true
}, },
"commander": {
"version": "2.9.0",
"bundled": true,
"optional": true
},
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"bundled": true "bundled": true
@ -1919,12 +1951,12 @@
} }
}, },
"debug": { "debug": {
"version": "2.2.0", "version": "2.6.8",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"deep-extend": { "deep-extend": {
"version": "0.4.1", "version": "0.4.2",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -1942,13 +1974,8 @@
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"escape-string-regexp": {
"version": "1.0.5",
"bundled": true,
"optional": true
},
"extend": { "extend": {
"version": "3.0.0", "version": "3.0.1",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -1962,7 +1989,7 @@
"optional": true "optional": true
}, },
"form-data": { "form-data": {
"version": "2.1.2", "version": "2.1.4",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -1971,7 +1998,7 @@
"bundled": true "bundled": true
}, },
"fstream": { "fstream": {
"version": "1.0.10", "version": "1.0.11",
"bundled": true "bundled": true
}, },
"fstream-ignore": { "fstream-ignore": {
@ -1980,22 +2007,12 @@
"optional": true "optional": true
}, },
"gauge": { "gauge": {
"version": "2.7.3", "version": "2.7.4",
"bundled": true,
"optional": true
},
"generate-function": {
"version": "2.0.0",
"bundled": true,
"optional": true
},
"generate-object-property": {
"version": "1.2.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"getpass": { "getpass": {
"version": "0.1.6", "version": "0.1.7",
"bundled": true, "bundled": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
@ -2007,25 +2024,20 @@
} }
}, },
"glob": { "glob": {
"version": "7.1.1", "version": "7.1.2",
"bundled": true "bundled": true
}, },
"graceful-fs": { "graceful-fs": {
"version": "4.1.11", "version": "4.1.11",
"bundled": true "bundled": true
}, },
"graceful-readlink": { "har-schema": {
"version": "1.0.1", "version": "1.0.5",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"har-validator": { "har-validator": {
"version": "2.0.6", "version": "4.2.1",
"bundled": true,
"optional": true
},
"has-ansi": {
"version": "2.0.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -2065,16 +2077,6 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true "bundled": true
}, },
"is-my-json-valid": {
"version": "2.15.0",
"bundled": true,
"optional": true
},
"is-property": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"is-typedarray": { "is-typedarray": {
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
@ -2104,31 +2106,43 @@
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"json-stable-stringify": {
"version": "1.0.1",
"bundled": true,
"optional": true
},
"json-stringify-safe": { "json-stringify-safe": {
"version": "5.0.1", "version": "5.0.1",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"jsonpointer": { "jsonify": {
"version": "4.0.1", "version": "0.0.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"jsprim": { "jsprim": {
"version": "1.3.1", "version": "1.4.0",
"bundled": true,
"optional": true,
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}
}
}, },
"mime-db": { "mime-db": {
"version": "1.26.0", "version": "1.27.0",
"bundled": true "bundled": true
}, },
"mime-types": { "mime-types": {
"version": "2.1.14", "version": "2.1.15",
"bundled": true "bundled": true
}, },
"minimatch": { "minimatch": {
"version": "3.0.3", "version": "3.0.4",
"bundled": true "bundled": true
}, },
"minimist": { "minimist": {
@ -2140,22 +2154,22 @@
"bundled": true "bundled": true
}, },
"ms": { "ms": {
"version": "0.7.1", "version": "2.0.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"node-pre-gyp": { "node-pre-gyp": {
"version": "0.6.33", "version": "0.6.36",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"nopt": { "nopt": {
"version": "3.0.6", "version": "4.0.1",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"npmlog": { "npmlog": {
"version": "4.0.2", "version": "4.1.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -2177,17 +2191,27 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true "bundled": true
}, },
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"osenv": {
"version": "0.1.4",
"bundled": true,
"optional": true
},
"path-is-absolute": { "path-is-absolute": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true "bundled": true
}, },
"pinkie": { "performance-now": {
"version": "2.0.4", "version": "0.2.0",
"bundled": true,
"optional": true
},
"pinkie-promise": {
"version": "2.0.1",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -2201,12 +2225,12 @@
"optional": true "optional": true
}, },
"qs": { "qs": {
"version": "6.3.1", "version": "6.4.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"rc": { "rc": {
"version": "1.1.7", "version": "1.2.1",
"bundled": true, "bundled": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
@ -2218,17 +2242,20 @@
} }
}, },
"readable-stream": { "readable-stream": {
"version": "2.2.2", "version": "2.2.9",
"bundled": true, "bundled": true
"optional": true
}, },
"request": { "request": {
"version": "2.79.0", "version": "2.81.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"rimraf": { "rimraf": {
"version": "2.5.4", "version": "2.6.1",
"bundled": true
},
"safe-buffer": {
"version": "5.0.1",
"bundled": true "bundled": true
}, },
"semver": { "semver": {
@ -2252,7 +2279,7 @@
"optional": true "optional": true
}, },
"sshpk": { "sshpk": {
"version": "1.10.2", "version": "1.13.0",
"bundled": true, "bundled": true,
"optional": true, "optional": true,
"dependencies": { "dependencies": {
@ -2264,7 +2291,7 @@
} }
}, },
"string_decoder": { "string_decoder": {
"version": "0.10.31", "version": "1.0.1",
"bundled": true "bundled": true
}, },
"string-width": { "string-width": {
@ -2285,39 +2312,22 @@
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"supports-color": {
"version": "2.0.0",
"bundled": true,
"optional": true
},
"tar": { "tar": {
"version": "2.2.1", "version": "2.2.1",
"bundled": true "bundled": true
}, },
"tar-pack": { "tar-pack": {
"version": "3.3.0", "version": "3.4.0",
"bundled": true,
"optional": true,
"dependencies": {
"once": {
"version": "1.3.3",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"readable-stream": {
"version": "2.1.5",
"bundled": true,
"optional": true
}
}
},
"tough-cookie": { "tough-cookie": {
"version": "2.3.2", "version": "2.3.2",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"tunnel-agent": { "tunnel-agent": {
"version": "0.4.3", "version": "0.6.0",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
@ -2346,18 +2356,13 @@
"optional": true "optional": true
}, },
"wide-align": { "wide-align": {
"version": "1.1.0", "version": "1.1.2",
"bundled": true, "bundled": true,
"optional": true "optional": true
}, },
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true "bundled": true
},
"xtend": {
"version": "4.0.1",
"bundled": true,
"optional": true
} }
} }
}, },
@ -2626,9 +2631,9 @@
} }
}, },
"iconv-lite": { "iconv-lite": {
"version": "0.4.17", "version": "0.4.18",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
"integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0=" "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA=="
}, },
"ieee754": { "ieee754": {
"version": "1.1.8", "version": "1.1.8",
@ -2642,6 +2647,11 @@
"integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=",
"dev": true "dev": true
}, },
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"imurmurhash": { "imurmurhash": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@ -2674,6 +2684,11 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
}, },
"inline-process-browser": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz",
"integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI="
},
"inquirer": { "inquirer": {
"version": "0.12.0", "version": "0.12.0",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
@ -2903,7 +2918,15 @@
"version": "3.8.4", "version": "3.8.4",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz",
"integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=",
"dev": true,
"dependencies": {
"esprima": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
"dev": true "dev": true
}
}
}, },
"jsbn": { "jsbn": {
"version": "0.1.1", "version": "0.1.1",
@ -2976,6 +2999,18 @@
} }
} }
}, },
"jstransform": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz",
"integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=",
"dependencies": {
"source-map": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
"integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE="
}
}
},
"jsx-ast-utils": { "jsx-ast-utils": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
@ -3004,6 +3039,11 @@
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true "dev": true
}, },
"lie": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz",
"integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o="
},
"lint-staged": { "lint-staged": {
"version": "3.6.1", "version": "3.6.1",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-3.6.1.tgz", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-3.6.1.tgz",
@ -3065,6 +3105,11 @@
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
"dev": true "dev": true
}, },
"localforage": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.5.0.tgz",
"integrity": "sha1-a5lOGbVmEfqF3zmS3zl6xKtm6BU="
},
"locate-path": { "locate-path": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
@ -3159,6 +3204,16 @@
"integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
"dev": true "dev": true
}, },
"lodash.forin": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.forin/-/lodash.forin-4.4.0.tgz",
"integrity": "sha1-XT8grlZAEfvog4H32YlJyclRlzE="
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.isarguments": { "lodash.isarguments": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
@ -3171,12 +3226,32 @@
"integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
"dev": true "dev": true
}, },
"lodash.isempty": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
"integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4="
},
"lodash.keys": { "lodash.keys": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
"dev": true "dev": true
}, },
"lodash.pickby": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz",
"integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8="
},
"lodash.set": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
"integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
},
"lodash.unset": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/lodash.unset/-/lodash.unset-4.5.2.tgz",
"integrity": "sha1-Nw0dPoW3Kn4bDN8tJyEhMG8j5O0="
},
"log-symbols": { "log-symbols": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
@ -3210,6 +3285,11 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
"integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==" "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew=="
}, },
"lz-string": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
"integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY="
},
"map-obj": { "map-obj": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
@ -3487,8 +3567,7 @@
"object-keys": { "object-keys": {
"version": "1.0.11", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
"dev": true
}, },
"object.assign": { "object.assign": {
"version": "4.0.4", "version": "4.0.4",
@ -3922,19 +4001,19 @@
"integrity": "sha1-0xzLFJmuIjwNIdFIVlCqSg03TOA=" "integrity": "sha1-0xzLFJmuIjwNIdFIVlCqSg03TOA="
}, },
"react": { "react": {
"version": "15.5.4", "version": "15.6.0",
"resolved": "https://registry.npmjs.org/react/-/react-15.5.4.tgz", "resolved": "https://registry.npmjs.org/react/-/react-15.6.0.tgz",
"integrity": "sha1-+oPrAVBqsjfNwcjDsc6o3gEr8Ec=" "integrity": "sha1-wjKZtI4w7TAlCM6J4aAskZ+Ca84="
}, },
"react-dom": { "react-dom": {
"version": "15.5.4", "version": "15.6.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.5.4.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.0.tgz",
"integrity": "sha1-ugwoeG/VLtfk8hNf4CiNRirvk9o=" "integrity": "sha1-i8I8sMgOcGNVt2yp+M5Hz3vfttE="
}, },
"react-modal": { "react-modal": {
"version": "1.9.2", "version": "1.9.4",
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-1.9.2.tgz", "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-1.9.4.tgz",
"integrity": "sha512-4FG4SsYdJ9ncLYIP17Q8HEWRXbEsd+lHkG3vJd+koqXdPDMzP+2KZFjrkMOVvLyvXYSpgVTqEqeLFnkJ2x8+Ig==" "integrity": "sha512-ourtHswaEA/KyeI20AsCOSWTC23WF3z0b1C3qzQtA5UhBOdwQ2sEK2OPJGN8u7iFGJ83etmk605aeF/i4tGVEQ=="
}, },
"react-redux": { "react-redux": {
"version": "5.0.5", "version": "5.0.5",
@ -3967,6 +4046,18 @@
"integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
"dev": true "dev": true
}, },
"recast": {
"version": "0.10.43",
"resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz",
"integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=",
"dependencies": {
"esprima-fb": {
"version": "15001.1001.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
"integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk="
}
}
},
"rechoir": { "rechoir": {
"version": "0.6.2", "version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@ -3997,11 +4088,31 @@
"resolved": "https://registry.npmjs.org/redux/-/redux-3.6.0.tgz", "resolved": "https://registry.npmjs.org/redux/-/redux-3.6.0.tgz",
"integrity": "sha1-iHwrPQub2G7KK+cFccJ2VMGeGI0=" "integrity": "sha1-iHwrPQub2G7KK+cFccJ2VMGeGI0="
}, },
"redux-action-buffer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/redux-action-buffer/-/redux-action-buffer-1.1.0.tgz",
"integrity": "sha1-nGkqtlMrBC0NQ6nwGkitoSD8lBo="
},
"redux-logger": { "redux-logger": {
"version": "3.0.6", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz",
"integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=" "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8="
}, },
"redux-persist": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.8.0.tgz",
"integrity": "sha1-F/2ZiUm97vknXkz2CtW74cc2dfw="
},
"redux-persist-transform-compress": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/redux-persist-transform-compress/-/redux-persist-transform-compress-4.2.0.tgz",
"integrity": "sha1-UInimd9xMIePykX5f/6CiIugJpA="
},
"redux-persist-transform-filter": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/redux-persist-transform-filter/-/redux-persist-transform-filter-0.0.10.tgz",
"integrity": "sha1-mjsQbOiTnSy79SEsdH7Rd//xQoA="
},
"redux-thunk": { "redux-thunk": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz",
@ -4523,8 +4634,29 @@
"through": { "through": {
"version": "2.3.8", "version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
"dev": true },
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw="
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
}, },
"timers-browserify": { "timers-browserify": {
"version": "2.0.2", "version": "2.0.2",
@ -4604,9 +4736,9 @@
"integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs=" "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs="
}, },
"uglify-js": { "uglify-js": {
"version": "2.8.28", "version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha512-WqKNbmNJKzIdIEQu/U2ytgGBbhCy2PVks94GoetczOAJ/zCgVu2CuO7gguI5KPFGPtUtI1dmPQl6h0D4cPzypA==", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"camelcase": { "camelcase": {
@ -4652,6 +4784,11 @@
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
"dev": true "dev": true
}, },
"unreachable-branch-transform": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz",
"integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo="
},
"url": { "url": {
"version": "0.11.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@ -4765,6 +4902,12 @@
"integrity": "sha1-LgRX8KuxrF3zqxBsacZy8jZ4Xwc=", "integrity": "sha1-LgRX8KuxrF3zqxBsacZy8jZ4Xwc=",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"acorn": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
"integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=",
"dev": true
},
"camelcase": { "camelcase": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
@ -5090,8 +5233,7 @@
"xtend": { "xtend": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
"dev": true
}, },
"y18n": { "y18n": {
"version": "3.2.1", "version": "3.2.1",

View file

@ -26,6 +26,7 @@
"babel-preset-react": "^6.11.1", "babel-preset-react": "^6.11.1",
"from2": "^2.3.0", "from2": "^2.3.0",
"jshashes": "^1.0.6", "jshashes": "^1.0.6",
"localforage": "^1.5.0",
"node-sass": "^3.8.0", "node-sass": "^3.8.0",
"rc-progress": "^2.0.6", "rc-progress": "^2.0.6",
"react": "^15.4.0", "react": "^15.4.0",
@ -33,7 +34,11 @@
"react-modal": "^1.5.2", "react-modal": "^1.5.2",
"react-redux": "^5.0.3", "react-redux": "^5.0.3",
"redux": "^3.6.0", "redux": "^3.6.0",
"redux-action-buffer": "^1.1.0",
"redux-logger": "^3.0.1", "redux-logger": "^3.0.1",
"redux-persist": "^4.8.0",
"redux-persist-transform-compress": "^4.2.0",
"redux-persist-transform-filter": "0.0.10",
"redux-thunk": "^2.2.0", "redux-thunk": "^2.2.0",
"render-media": "^2.10.0", "render-media": "^2.10.0",
"reselect": "^3.0.0", "reselect": "^3.0.0",