UNPKG

hurt

Version:

HTTP and SPA routing using RFC 6570 URI templates

80 lines (59 loc) 5.21 kB
'use strict'; 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