From d5b13a330f3028ab9c08fa677c53e6e995f96e3c Mon Sep 17 00:00:00 2001 From: dfrownfelter Date: Mon, 26 Dec 2016 21:41:10 -0800 Subject: [PATCH 1/4] Update variables to ES6 --- src/applyMiddleware.js | 8 +++---- src/bindActionCreators.js | 10 ++++----- src/combineReducers.js | 46 +++++++++++++++++++-------------------- src/createStore.js | 26 +++++++++++----------- 4 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/applyMiddleware.js b/src/applyMiddleware.js index 65114cb28b..3cf08841b6 100644 --- a/src/applyMiddleware.js +++ b/src/applyMiddleware.js @@ -18,11 +18,11 @@ import compose from './compose' */ export default function applyMiddleware(...middlewares) { return (createStore) => (reducer, preloadedState, enhancer) => { - var store = createStore(reducer, preloadedState, enhancer) - var dispatch = store.dispatch - var chain = [] + const store = createStore(reducer, preloadedState, enhancer) + let dispatch = store.dispatch + let chain = [] - var middlewareAPI = { + const middlewareAPI = { getState: store.getState, dispatch: (action) => dispatch(action) } diff --git a/src/bindActionCreators.js b/src/bindActionCreators.js index e70e270fd4..9b0cc061eb 100644 --- a/src/bindActionCreators.js +++ b/src/bindActionCreators.js @@ -35,11 +35,11 @@ export default function bindActionCreators(actionCreators, dispatch) { ) } - var keys = Object.keys(actionCreators) - var boundActionCreators = {} - for (var i = 0; i < keys.length; i++) { - var key = keys[i] - var actionCreator = actionCreators[key] + const keys = Object.keys(actionCreators) + const boundActionCreators = {} + for (let i = 0; i < keys.length; i++) { + const key = keys[i] + const actionCreator = actionCreators[key] if (typeof actionCreator === 'function') { boundActionCreators[key] = bindActionCreator(actionCreator, dispatch) } diff --git a/src/combineReducers.js b/src/combineReducers.js index e8a6de7455..4d70489d06 100644 --- a/src/combineReducers.js +++ b/src/combineReducers.js @@ -2,11 +2,11 @@ import { ActionTypes } from './createStore' import isPlainObject from 'lodash/isPlainObject' import warning from './utils/warning' -var NODE_ENV = typeof process !== 'undefined' ? process.env.NODE_ENV : 'development' +const NODE_ENV = typeof process !== 'undefined' ? process.env.NODE_ENV : 'development' function getUndefinedStateErrorMessage(key, action) { - var actionType = action && action.type - var actionName = actionType && `"${actionType.toString()}"` || 'an action' + const actionType = action && action.type + const actionName = actionType && `"${actionType.toString()}"` || 'an action' return ( `Given action ${actionName}, reducer "${key}" returned undefined. ` + @@ -15,8 +15,8 @@ function getUndefinedStateErrorMessage(key, action) { } function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) { - var reducerKeys = Object.keys(reducers) - var argumentName = action && action.type === ActionTypes.INIT ? + const reducerKeys = Object.keys(reducers) + const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer' @@ -36,7 +36,7 @@ function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, une ) } - var unexpectedKeys = Object.keys(inputState).filter(key => + const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key] ) @@ -57,8 +57,8 @@ function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, une function assertReducerSanity(reducers) { Object.keys(reducers).forEach(key => { - var reducer = reducers[key] - var initialState = reducer(undefined, { type: ActionTypes.INIT }) + const reducer = reducers[key] + const initialState = reducer(undefined, { type: ActionTypes.INIT }) if (typeof initialState === 'undefined') { throw new Error( @@ -69,7 +69,7 @@ function assertReducerSanity(reducers) { ) } - var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.') + const type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.') if (typeof reducer(undefined, { type }) === 'undefined') { throw new Error( `Reducer "${key}" returned undefined when probed with a random type. ` + @@ -100,10 +100,10 @@ function assertReducerSanity(reducers) { * passed object, and builds a state object with the same shape. */ export default function combineReducers(reducers) { - var reducerKeys = Object.keys(reducers) - var finalReducers = {} - for (var i = 0; i < reducerKeys.length; i++) { - var key = reducerKeys[i] + const reducerKeys = Object.keys(reducers) + const finalReducers = {} + for (let i = 0; i < reducerKeys.length; i++) { + const key = reducerKeys[i] if (NODE_ENV !== 'production') { if (typeof reducers[key] === 'undefined') { @@ -115,7 +115,7 @@ export default function combineReducers(reducers) { finalReducers[key] = reducers[key] } } - var finalReducerKeys = Object.keys(finalReducers) + const finalReducerKeys = Object.keys(finalReducers) if (NODE_ENV !== 'production') { var unexpectedKeyCache = {} @@ -134,21 +134,21 @@ export default function combineReducers(reducers) { } if (NODE_ENV !== 'production') { - var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache) + const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache) if (warningMessage) { warning(warningMessage) } } - var hasChanged = false - var nextState = {} - for (var i = 0; i < finalReducerKeys.length; i++) { - var key = finalReducerKeys[i] - var reducer = finalReducers[key] - var previousStateForKey = state[key] - var nextStateForKey = reducer(previousStateForKey, action) + let hasChanged = false + const nextState = {} + for (let i = 0; i < finalReducerKeys.length; i++) { + const key = finalReducerKeys[i] + const reducer = finalReducers[key] + const previousStateForKey = state[key] + const nextStateForKey = reducer(previousStateForKey, action) if (typeof nextStateForKey === 'undefined') { - var errorMessage = getUndefinedStateErrorMessage(key, action) + const errorMessage = getUndefinedStateErrorMessage(key, action) throw new Error(errorMessage) } nextState[key] = nextStateForKey diff --git a/src/createStore.js b/src/createStore.js index b914fafd29..2712201921 100644 --- a/src/createStore.js +++ b/src/createStore.js @@ -7,7 +7,7 @@ import $$observable from 'symbol-observable' * If the current state is undefined, you must return the initial state. * Do not reference these action types directly in your code. */ -export var ActionTypes = { +export const ActionTypes = { INIT: '@@redux/INIT' } @@ -54,11 +54,11 @@ export default function createStore(reducer, preloadedState, enhancer) { throw new Error('Expected the reducer to be a function.') } - var currentReducer = reducer - var currentState = preloadedState - var currentListeners = [] - var nextListeners = currentListeners - var isDispatching = false + let currentReducer = reducer + let currentState = preloadedState + let currentListeners = [] + let nextListeners = currentListeners + let isDispatching = false function ensureCanMutateNextListeners() { if (nextListeners === currentListeners) { @@ -103,7 +103,7 @@ export default function createStore(reducer, preloadedState, enhancer) { throw new Error('Expected listener to be a function.') } - var isSubscribed = true + let isSubscribed = true ensureCanMutateNextListeners() nextListeners.push(listener) @@ -116,7 +116,7 @@ export default function createStore(reducer, preloadedState, enhancer) { isSubscribed = false ensureCanMutateNextListeners() - var index = nextListeners.indexOf(listener) + const index = nextListeners.indexOf(listener) nextListeners.splice(index, 1) } } @@ -172,9 +172,9 @@ export default function createStore(reducer, preloadedState, enhancer) { isDispatching = false } - var listeners = currentListeners = nextListeners - for (var i = 0; i < listeners.length; i++) { - var listener = listeners[i] + const listeners = currentListeners = nextListeners + for (let i = 0; i < listeners.length; i++) { + const listener = listeners[i] listener() } @@ -207,7 +207,7 @@ export default function createStore(reducer, preloadedState, enhancer) { * https://github.com/zenparsing/es-observable */ function observable() { - var outerSubscribe = subscribe + const outerSubscribe = subscribe return { /** * The minimal observable subscription method. @@ -229,7 +229,7 @@ export default function createStore(reducer, preloadedState, enhancer) { } observeState() - var unsubscribe = outerSubscribe(observeState) + const unsubscribe = outerSubscribe(observeState) return { unsubscribe } }, From 057e80445eca53e67c2e5596b50e7471d2c996b6 Mon Sep 17 00:00:00 2001 From: dfrownfelter Date: Tue, 27 Dec 2016 13:57:37 -0800 Subject: [PATCH 2/4] Fix var for sanityError --- src/combineReducers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/combineReducers.js b/src/combineReducers.js index 4d70489d06..fe8d42ea8c 100644 --- a/src/combineReducers.js +++ b/src/combineReducers.js @@ -121,7 +121,7 @@ export default function combineReducers(reducers) { var unexpectedKeyCache = {} } - var sanityError + let sanityError try { assertReducerSanity(finalReducers) } catch (e) { From 34d899732abc2fb5a8c45c61c44a9dcfb5bf4aa9 Mon Sep 17 00:00:00 2001 From: dfrownfelter Date: Tue, 27 Dec 2016 14:46:06 -0800 Subject: [PATCH 3/4] Fix var unexpectedKeyCache --- src/combineReducers.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/combineReducers.js b/src/combineReducers.js index fe8d42ea8c..8aa733bac1 100644 --- a/src/combineReducers.js +++ b/src/combineReducers.js @@ -117,8 +117,9 @@ export default function combineReducers(reducers) { } const finalReducerKeys = Object.keys(finalReducers) + let unexpectedKeyCache if (NODE_ENV !== 'production') { - var unexpectedKeyCache = {} + unexpectedKeyCache = {} } let sanityError From 7a6b05815f9c201914e94c84f4a698ad68c4be67 Mon Sep 17 00:00:00 2001 From: dfrownfelter Date: Tue, 27 Dec 2016 22:54:30 -0800 Subject: [PATCH 4/4] Add eslint rules --- .eslintrc | 4 ++-- build/use-lodash-es.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.eslintrc b/.eslintrc index 99c5dbda67..78b049d256 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,8 +2,8 @@ "extends": "rackt", "rules": { "valid-jsdoc": 2, - // Disable until Flow supports let and const - "no-var": 0, + "no-var": 2, + "prefer-const": 2, "react/jsx-uses-react": 1, "react/jsx-no-undef": 2, "react/wrap-multilines": 2 diff --git a/build/use-lodash-es.js b/build/use-lodash-es.js index ba4f2f52e6..86d0601ce4 100644 --- a/build/use-lodash-es.js +++ b/build/use-lodash-es.js @@ -2,7 +2,7 @@ module.exports = function () { return { visitor: { ImportDeclaration(path) { - var source = path.node.source + const source = path.node.source source.value = source.value.replace(/^lodash($|\/)/, 'lodash-es$1') } }