code: function Router(options) {
      options = options || {};
  
      if (!options.routeNameFormat || typeof options.routeNameFormat !== 'string') {
          options.routeNameFormat = '{method}{Name}_{version}';
      }
  
      RouterI.call(this, options);
  
      if (typeof this.options.url !== 'string') {
          throw new TypeError('`url` option must be a string');
      }
  
      var basePath = this.App.config.get('basePath');
      basePath = (basePath && basePath + '/') || '';
      this.options.url = this.$normalizeUrl(basePath + this.options.url);
  
      /**
       * Router specific {@link Route} constructor
       * @name Router#Route
       * @instance
       * @type {Function}
       */
      this.Route = function RouterRoute() {
          Route.apply(this, arguments);
      };
      this.Route.prototype = Object.create(Route.prototype);
      this.Route.prototype.constructor = this.Route;
      this.Route.prototype.Router = this;
  }
docs: emitted with each {@link Router#buildRoute} method call.
  
  @event Router#build-route
  @property {Route} route
   
  Holds {@link Route} definition objects which have common part of a url path
  
  @param {Object} options
  @param {String} [options.routeNameFormat] - will be used to format route UID string. Should contain placeholders: `{method}` & `{name}` `{version}`
  @param {String} [options.version] - will be part of route path
  @param {String} options.url - relative endpoint
  
  @emits Router#build-route
  @extends RouterInterface
  @constructor