UNPKG

yahoi

Version:

Yet Another Highly Opinionated Isomorphic Framework

114 lines (90 loc) 3.44 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _Route = require('./Route'); var _Route2 = _interopRequireDefault(_Route); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var path = require('path'); var Router = function () { function Router() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, Router); if (typeof options.app == 'undefined' || options.app == null) { throw Error('FATAL: No app reference defined for Router with prefix: ' + options.prefix); } this.app = options.app; this.routes = []; this.prefix = options.prefix || null; this.setAppReference = this.setAppReference.bind(this); } _createClass(Router, [{ key: 'setPrefix', value: function setPrefix(prefix) { this.prefix = prefix; } }, { key: 'getPrefix', value: function getPrefix() { return this.prefix; } }, { key: 'getRoutes', value: function getRoutes() { return this.routes; } }, { key: 'setAppReference', value: function setAppReference(app) { this.app = app; } }, { key: 'addRoute', value: function addRoute(routeOptions) { routeOptions.app = this.app; var routerPath = routeOptions.path; if (this.prefix) { routerPath = this.prefix + routerPath; } if (typeof routeOptions.router !== 'undefined') { routeOptions.prefix = routerPath; var _router = this.loadRouter(routeOptions.router, routeOptions); this.routes.push(_router); } else { routeOptions.path = routerPath; if (typeof this.app == 'undefined' || this.app == null) { throw Error('Attempting to create a new route without an app reference: ' + routerPath); } var route = new _Route2.default(routeOptions); this.routes.push(route); } } }, { key: 'loadRouter', value: function loadRouter(routerName, options) { var router = this.app.createRouter(routerName, options); router.setPrefix(this.path); return router; } }, { key: 'match', value: function match(req) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; for (var i = 0; i < this.routes.length; i++) { var route = this.routes[i]; var matchResult = route.match(req); if (matchResult) { return { route: matchResult.route, match: matchResult.match }; } } } }]); return Router; }(); exports.default = Router;