UNPKG

hurt

Version:

HTTP and SPA routing using RFC 6570 URI templates

95 lines (77 loc) 7.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; exports.default = restify; exports.mixin = mixin; var _router = require('./router'); var _router2 = _interopRequireDefault(_router); var _events = require('./events'); var _url = require('./url'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 restify() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _ref$mixins = _ref.mixins, mixins = _ref$mixins === undefined ? restify.mixins : _ref$mixins, options = _objectWithoutProperties(_ref, ['mixins']); return create((0, _router2.default)(_extends({ mixins: mixins }, options)), options); } restify.mixins = [_events.mixin, _url.mixin]; function mixin(options) { return { get restify() { return create(this, options); } }; } function create(router) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return { name: options.name || 'HurtRouter', mounts: {}, versions: ['0.0.0'], types: [], on: router.on.bind(router), off: router.off.bind(router), emit: router.emit.bind(router), mount: function mount(options) { var name = options.name; var route = { name: name, method: options.method, spec: options, types: options.types || this.types, versions: options.versions || this.versions }; this.mounts[name] = route; router.use(options.path || options.url, function (req, next) { req.route = route; next(); }); return name; }, get: function get(name, req, callback) { var _this = this; router.route({ name: name }); router(req, function (err) { if (err) { callback(err); } else { callback(null, _this.mounts[name], req.params); } }); }, find: function find(req, res, callback) { router(req, function (err) { if (err) { callback(err); } else { callback(null, req.route, req.params); } }); } }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXN0aWZ5LmpzIl0sIm5hbWVzIjpbInJlc3RpZnkiLCJtaXhpbiIsIm1peGlucyIsIm9wdGlvbnMiLCJjcmVhdGUiLCJyb3V0ZXIiLCJuYW1lIiwibW91bnRzIiwidmVyc2lvbnMiLCJ0eXBlcyIsIm9uIiwiYmluZCIsIm9mZiIsImVtaXQiLCJtb3VudCIsInJvdXRlIiwibWV0aG9kIiwic3BlYyIsInVzZSIsInBhdGgiLCJ1cmwiLCJyZXEiLCJuZXh0IiwiZ2V0IiwiY2FsbGJhY2siLCJlcnIiLCJwYXJhbXMiLCJmaW5kIiwicmVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztrQkFJd0JBLE87UUFLUkMsSyxHQUFBQSxLOztBQVRoQjs7OztBQUNBOztBQUNBOzs7Ozs7QUFFZSxTQUFTRCxPQUFULEdBQStEO0FBQUEsaUZBQUosRUFBSTs7QUFBQSx5QkFBNUNFLE1BQTRDO0FBQUEsTUFBNUNBLE1BQTRDLCtCQUFuQ0YsUUFBUUUsTUFBMkI7QUFBQSxNQUFoQkMsT0FBZ0I7O0FBQzVFLFNBQU9DLE9BQU8saUNBQVNGLGNBQVQsSUFBb0JDLE9BQXBCLEVBQVAsRUFBdUNBLE9BQXZDLENBQVA7QUFDRDtBQUNESCxRQUFRRSxNQUFSLEdBQWlCLDJCQUFqQjs7QUFFTyxTQUFTRCxLQUFULENBQWVFLE9BQWYsRUFBd0I7QUFDN0IsU0FBTztBQUNMLFFBQUlILE9BQUosR0FBYztBQUNaLGFBQU9JLE9BQU8sSUFBUCxFQUFhRCxPQUFiLENBQVA7QUFDRDtBQUhJLEdBQVA7QUFLRDs7QUFFRCxTQUFTQyxNQUFULENBQWdCQyxNQUFoQixFQUFzQztBQUFBLE1BQWRGLE9BQWMsdUVBQUosRUFBSTs7QUFDcEMsU0FBTztBQUNMRyxVQUFNSCxRQUFRRyxJQUFSLElBQWdCLFlBRGpCO0FBRUxDLFlBQVEsRUFGSDtBQUdMQyxjQUFVLENBQUUsT0FBRixDQUhMO0FBSUxDLFdBQU8sRUFKRjtBQUtMQyxRQUFJTCxPQUFPSyxFQUFQLENBQVVDLElBQVYsQ0FBZU4sTUFBZixDQUxDO0FBTUxPLFNBQUtQLE9BQU9PLEdBQVAsQ0FBV0QsSUFBWCxDQUFnQk4sTUFBaEIsQ0FOQTtBQU9MUSxVQUFNUixPQUFPUSxJQUFQLENBQVlGLElBQVosQ0FBaUJOLE1BQWpCLENBUEQ7QUFRTFMsU0FSSyxpQkFRQ1gsT0FSRCxFQVFVO0FBQ2IsVUFBTUcsT0FBT0gsUUFBUUcsSUFBckI7QUFDQSxVQUFNUyxRQUFRO0FBQ1pULGtCQURZO0FBRVpVLGdCQUFRYixRQUFRYSxNQUZKO0FBR1pDLGNBQU1kLE9BSE07QUFJWk0sZUFBT04sUUFBUU0sS0FBUixJQUFpQixLQUFLQSxLQUpqQjtBQUtaRCxrQkFBVUwsUUFBUUssUUFBUixJQUFvQixLQUFLQTtBQUx2QixPQUFkOztBQVFBLFdBQUtELE1BQUwsQ0FBWUQsSUFBWixJQUFvQlMsS0FBcEI7QUFDQVYsYUFBT2EsR0FBUCxDQUFXZixRQUFRZ0IsSUFBUixJQUFnQmhCLFFBQVFpQixHQUFuQyxFQUF3QyxVQUFDQyxHQUFELEVBQU1DLElBQU4sRUFBZTtBQUNyREQsWUFBSU4sS0FBSixHQUFZQSxLQUFaO0FBQ0FPO0FBQ0QsT0FIRDs7QUFLQSxhQUFPaEIsSUFBUDtBQUNELEtBekJJO0FBMEJMaUIsT0ExQkssZUEwQkRqQixJQTFCQyxFQTBCS2UsR0ExQkwsRUEwQlVHLFFBMUJWLEVBMEJvQjtBQUFBOztBQUN2Qm5CLGFBQU9VLEtBQVAsQ0FBYSxFQUFFVCxVQUFGLEVBQWI7QUFDQUQsYUFBT2dCLEdBQVAsRUFBWSxlQUFPO0FBQ2pCLFlBQUlJLEdBQUosRUFBUztBQUNQRCxtQkFBU0MsR0FBVDtBQUNELFNBRkQsTUFHSztBQUNIRCxtQkFBUyxJQUFULEVBQWUsTUFBS2pCLE1BQUwsQ0FBWUQsSUFBWixDQUFmLEVBQWtDZSxJQUFJSyxNQUF0QztBQUNEO0FBQ0YsT0FQRDtBQVFELEtBcENJO0FBcUNMQyxRQXJDSyxnQkFxQ0FOLEdBckNBLEVBcUNLTyxHQXJDTCxFQXFDVUosUUFyQ1YsRUFxQ29CO0FBQ3ZCbkIsYUFBT2dCLEdBQVAsRUFBWSxlQUFPO0FBQ2pCLFlBQUlJLEdBQUosRUFBUztBQUNQRCxtQkFBU0MsR0FBVDtBQUNELFNBRkQsTUFHSztBQUNIRCxtQkFBUyxJQUFULEVBQWVILElBQUlOLEtBQW5CLEVBQTBCTSxJQUFJSyxNQUE5QjtBQUNEO0FBQ0YsT0FQRDtBQVFEO0FBOUNJLEdBQVA7QUFnREQiLCJmaWxlIjoicmVzdGlmeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHsgbWl4aW4gYXMgZXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHsgbWl4aW4gYXMgdXJsIH0gZnJvbSAnLi91cmwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXN0aWZ5KHsgbWl4aW5zID0gcmVzdGlmeS5taXhpbnMsIC4uLm9wdGlvbnMgfSA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGUocm91dGVyKHsgbWl4aW5zLCAuLi5vcHRpb25zIH0pLCBvcHRpb25zKTtcbn1cbnJlc3RpZnkubWl4aW5zID0gWyBldmVudHMsIHVybCBdO1xuXG5leHBvcnQgZnVuY3Rpb24gbWl4aW4ob3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIGdldCByZXN0aWZ5KCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlKHJvdXRlciwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogb3B0aW9ucy5uYW1lIHx8ICdIdXJ0Um91dGVyJyxcbiAgICBtb3VudHM6IHt9LFxuICAgIHZlcnNpb25zOiBbICcwLjAuMCcgXSxcbiAgICB0eXBlczogW10sXG4gICAgb246IHJvdXRlci5vbi5iaW5kKHJvdXRlciksXG4gICAgb2ZmOiByb3V0ZXIub2ZmLmJpbmQocm91dGVyKSxcbiAgICBlbWl0OiByb3V0ZXIuZW1pdC5iaW5kKHJvdXRlciksXG4gICAgbW91bnQob3B0aW9ucykge1xuICAgICAgY29uc3QgbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICAgIGNvbnN0IHJvdXRlID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxuICAgICAgICBzcGVjOiBvcHRpb25zLFxuICAgICAgICB0eXBlczogb3B0aW9ucy50eXBlcyB8fCB0aGlzLnR5cGVzLFxuICAgICAgICB2ZXJzaW9uczogb3B0aW9ucy52ZXJzaW9ucyB8fCB0aGlzLnZlcnNpb25zXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm1vdW50c1tuYW1lXSA9IHJvdXRlO1xuICAgICAgcm91dGVyLnVzZShvcHRpb25zLnBhdGggfHwgb3B0aW9ucy51cmwsIChyZXEsIG5leHQpID0+IHtcbiAgICAgICAgcmVxLnJvdXRlID0gcm91dGU7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9LFxuICAgIGdldChuYW1lLCByZXEsIGNhbGxiYWNrKSB7XG4gICAgICByb3V0ZXIucm91dGUoeyBuYW1lIH0pXG4gICAgICByb3V0ZXIocmVxLCBlcnIgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGlzLm1vdW50c1tuYW1lXSwgcmVxLnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZmluZChyZXEsIHJlcywgY2FsbGJhY2spIHtcbiAgICAgIHJvdXRlcihyZXEsIGVyciA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlcS5yb3V0ZSwgcmVxLnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuIl19