validateRouteConfigMap.js 1.68 KB
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _invariant = require('../utils/invariant');

var _invariant2 = _interopRequireDefault(_invariant);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Make sure the config passed e.g. to StackRouter, TabRouter has
 * the correct format, and throw a clear error if it doesn't.
 */
function validateRouteConfigMap(routeConfigs) {
  var routeNames = Object.keys(routeConfigs);
  (0, _invariant2.default)(routeNames.length > 0, 'Please specify at least one route when configuring a navigator.');

  routeNames.forEach(function (routeName) {
    var routeConfig = routeConfigs[routeName];

    if (!routeConfig.screen && !routeConfig.getScreen) {
      throw new Error('Route \'' + routeName + '\' should declare a screen. ' + 'For example:\n\n' + "import MyScreen from './MyScreen';\n" + '...\n' + (routeName + ': {\n') + '  screen: MyScreen,\n' + '}');
    } else if (routeConfig.screen && routeConfig.getScreen) {
      throw new Error('Route \'' + routeName + '\' should declare a screen or ' + 'a getScreen, not both.');
    }

    if (routeConfig.screen && typeof routeConfig.screen !== 'function' && typeof routeConfig.screen !== 'string') {
      throw new Error('The component for route \'' + routeName + '\' must be a ' + 'React component. For example:\n\n' + "import MyScreen from './MyScreen';\n" + '...\n' + (routeName + ': {\n') + '  screen: MyScreen,\n' + '}\n\n' + 'You can also use a navigator:\n\n' + "import MyNavigator from './MyNavigator';\n" + '...\n' + (routeName + ': {\n') + '  screen: MyNavigator,\n' + '}');
    }
  });
}

exports.default = validateRouteConfigMap;