hurt
Version:
HTTP and SPA routing using RFC 6570 URI templates
95 lines (77 loc) • 7.52 kB
JavaScript
;
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