From f97bacae323ec0d51bd50a83fa65890fe1af8c2d Mon Sep 17 00:00:00 2001 From: Jimmy Jia Date: Tue, 9 Aug 2016 12:47:09 -0400 Subject: [PATCH] Warn on invalid middlewares --- .../__tests__/applyRouterMiddleware-test.js | 11 ++++++++++ modules/applyRouterMiddleware.js | 20 +++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/modules/__tests__/applyRouterMiddleware-test.js b/modules/__tests__/applyRouterMiddleware-test.js index 3382bfa0ca..f8bd41df08 100644 --- a/modules/__tests__/applyRouterMiddleware-test.js +++ b/modules/__tests__/applyRouterMiddleware-test.js @@ -5,6 +5,7 @@ import Router from '../Router' import Route from '../Route' import createMemoryHistory from '../createMemoryHistory' import applyMiddleware from '../applyRouterMiddleware' +import shouldWarn from './shouldWarn' const FOO_ROOT_CONTAINER_TEXT = 'FOO ROOT CONTAINER' const BAR_ROOT_CONTAINER_TEXT = 'BAR ROOT CONTAINER' @@ -141,4 +142,14 @@ describe('applyMiddleware', () => { }) }) + it('should warn on invalid middleware', () => { + shouldWarn('at index 0 does not appear to be a valid') + shouldWarn('at index 2 does not appear to be a valid') + + applyMiddleware( + {}, + { renderRouterContext: () => {} }, + {} + ) + }) }) diff --git a/modules/applyRouterMiddleware.js b/modules/applyRouterMiddleware.js index ab0001837d..eb52752c9e 100644 --- a/modules/applyRouterMiddleware.js +++ b/modules/applyRouterMiddleware.js @@ -1,9 +1,25 @@ import React, { createElement } from 'react' import RouterContext from './RouterContext' +import warning from './routerWarning' export default (...middlewares) => { - const withContext = middlewares.map(m => m.renderRouterContext).filter(f => f) - const withComponent = middlewares.map(m => m.renderRouteComponent).filter(f => f) + if (__DEV__) { + middlewares.forEach((middleware, index) => { + warning( + middleware.renderRouterContext || middleware.renderRouteComponent, + `The middleware specified at index ${index} does not appear to be ` + + 'a valid React Router middleware.' + ) + }) + } + + const withContext = middlewares + .map(middleware => middleware.renderRouterContext) + .filter(Boolean) + const withComponent = middlewares + .map(middleware => middleware.renderRouteComponent) + .filter(Boolean) + const makeCreateElement = (baseCreateElement = createElement) => ( (Component, props) => ( withComponent.reduceRight(