yahoi
Version:
Yet Another Highly Opinionated Isomorphic Framework
114 lines (90 loc) • 3.44 kB
JavaScript
;
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;