hurt
Version:
HTTP and SPA routing using RFC 6570 URI templates
80 lines (59 loc) • 5.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = router;
var _handler = require('./handler');
var _handler2 = _interopRequireDefault(_handler);
var _route = require('./route');
var _route2 = _interopRequireDefault(_route);
var _mixin2 = require('./mixin');
var _mixin3 = _interopRequireDefault(_mixin2);
var _util = require('./_util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function router() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _ref$mixins = _ref.mixins,
mixins = _ref$mixins === undefined ? router.mixins : _ref$mixins,
options = _objectWithoutProperties(_ref, ['mixins']);
var pre = [];
var stack = [];
var post = [];
var fn = (0, _route2.default)((0, _handler2.default)(stack));
(0, _route.unshift)(fn, (0, _handler2.default)(pre, fn));
(0, _route.push)(fn, (0, _handler2.default)(post, fn));
(0, _mixin3.default)(fn, {
pre: pre,
post: post,
route: _route2.default,
use: function use() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var route = this.route.apply(this, args);
var context = (0, _util.proxy)(this, 'route');
context.route = route;
stack.push(function () {
return context.route.apply(context, arguments);
});
return this;
},
mixin: function mixin() {
var _this = this;
for (var _len2 = arguments.length, mixins = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
mixins[_key2] = arguments[_key2];
}
mixins.forEach(function (m) {
return (0, _mixin3.default)(_this, m);
});
return this;
}
});
return fn.mixin.apply(fn, _toConsumableArray(mixins.map(function (mixin) {
return mixin(options);
})));
}
router.mixins = [];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yb3V0ZXIuanMiXSwibmFtZXMiOlsicm91dGVyIiwibWl4aW5zIiwib3B0aW9ucyIsInByZSIsInN0YWNrIiwicG9zdCIsImZuIiwicm91dGUiLCJ1c2UiLCJhcmdzIiwiY29udGV4dCIsInB1c2giLCJtaXhpbiIsImZvckVhY2giLCJtIiwibWFwIl0sIm1hcHBpbmdzIjoiOzs7OztrQkFLd0JBLE07O0FBTHhCOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVlLFNBQVNBLE1BQVQsR0FBNkQ7QUFBQSxpRkFBSixFQUFJOztBQUFBLHlCQUEzQ0MsTUFBMkM7QUFBQSxNQUEzQ0EsTUFBMkMsK0JBQWxDRCxPQUFPQyxNQUEyQjtBQUFBLE1BQWhCQyxPQUFnQjs7QUFDMUUsTUFBTUMsTUFBTSxFQUFaO0FBQ0EsTUFBTUMsUUFBUSxFQUFkO0FBQ0EsTUFBTUMsT0FBTyxFQUFiOztBQUVBLE1BQU1DLEtBQUsscUJBQ1QsdUJBQVFGLEtBQVIsQ0FEUyxDQUFYOztBQUlBLHNCQUFRRSxFQUFSLEVBQVksdUJBQVFILEdBQVIsRUFBYUcsRUFBYixDQUFaO0FBQ0EsbUJBQUtBLEVBQUwsRUFBUyx1QkFBUUQsSUFBUixFQUFjQyxFQUFkLENBQVQ7O0FBRUEsdUJBQU1BLEVBQU4sRUFBVTtBQUNSSCxZQURRO0FBRVJFLGNBRlE7QUFHUkUsMEJBSFE7QUFJUkMsT0FKUSxpQkFJSztBQUFBLHdDQUFOQyxJQUFNO0FBQU5BLFlBQU07QUFBQTs7QUFDWCxVQUFNRixRQUFRLEtBQUtBLEtBQUwsYUFBY0UsSUFBZCxDQUFkO0FBQ0EsVUFBTUMsVUFBVSxpQkFBTSxJQUFOLEVBQVksT0FBWixDQUFoQjtBQUNBQSxjQUFRSCxLQUFSLEdBQWdCQSxLQUFoQjtBQUNBSCxZQUFNTyxJQUFOLENBQVc7QUFBQSxlQUFhRCxRQUFRSCxLQUFSLDBCQUFiO0FBQUEsT0FBWDtBQUNBLGFBQU8sSUFBUDtBQUNELEtBVk87QUFXUkssU0FYUSxtQkFXUztBQUFBOztBQUFBLHlDQUFSWCxNQUFRO0FBQVJBLGNBQVE7QUFBQTs7QUFDZkEsYUFBT1ksT0FBUCxDQUFlO0FBQUEsZUFBSyw0QkFBWUMsQ0FBWixDQUFMO0FBQUEsT0FBZjtBQUNBLGFBQU8sSUFBUDtBQUNEO0FBZE8sR0FBVjs7QUFpQkEsU0FBT1IsR0FBR00sS0FBSCw4QkFBWVgsT0FBT2MsR0FBUCxDQUFXO0FBQUEsV0FBU0gsTUFBTVYsT0FBTixDQUFUO0FBQUEsR0FBWCxDQUFaLEVBQVA7QUFDRDtBQUNERixPQUFPQyxNQUFQLEdBQWdCLEVBQWhCIiwiZmlsZSI6InJvdXRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoYW5kbGVyIGZyb20gJy4vaGFuZGxlcic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIHJvdXRlLCB1bnNoaWZ0LCBwdXNoIH0gZnJvbSAnLi9yb3V0ZSc7XG5pbXBvcnQgbWl4aW4gZnJvbSAnLi9taXhpbic7XG5pbXBvcnQgeyBwcm94eSB9IGZyb20gJy4vX3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByb3V0ZXIoeyBtaXhpbnMgPSByb3V0ZXIubWl4aW5zLCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICBjb25zdCBwcmUgPSBbXTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgY29uc3QgcG9zdCA9IFtdO1xuXG4gIGNvbnN0IGZuID0gcm91dGUoXG4gICAgaGFuZGxlcihzdGFjaylcbiAgKTtcblxuICB1bnNoaWZ0KGZuLCBoYW5kbGVyKHByZSwgZm4pKTtcbiAgcHVzaChmbiwgaGFuZGxlcihwb3N0LCBmbikpO1xuXG4gIG1peGluKGZuLCB7XG4gICAgcHJlLFxuICAgIHBvc3QsXG4gICAgcm91dGUsXG4gICAgdXNlKC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5yb3V0ZSguLi5hcmdzKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBwcm94eSh0aGlzLCAncm91dGUnKTtcbiAgICAgIGNvbnRleHQucm91dGUgPSByb3V0ZTtcbiAgICAgIHN0YWNrLnB1c2goKC4uLmFyZ3MpID0+IGNvbnRleHQucm91dGUoLi4uYXJncykpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBtaXhpbiguLi5taXhpbnMpIHtcbiAgICAgIG1peGlucy5mb3JFYWNoKG0gPT4gbWl4aW4odGhpcywgbSkpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm4ubWl4aW4oLi4ubWl4aW5zLm1hcChtaXhpbiA9PiBtaXhpbihvcHRpb25zKSkpO1xufVxucm91dGVyLm1peGlucyA9IFtdO1xuIl19