hurt
Version:
HTTP and SPA routing using RFC 6570 URI templates
53 lines (46 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = handler;
/**
* Return a function to process the given list of callbacks,
* keeping the call stack flat in case `next` is called synchronously.
*
* @param {Array<Function>} stack
* @param {*} [context]
* @return {Function}
*/
function handler(stack, context) {
return function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var self = context || this;
var next = args.pop();
var index = 0;
var sync = true;
args.push(iter);
iter();
function iter(err) {
if (err) {
sync = true;
}
while (sync) {
sync = false;
if (err || index >= stack.length) {
next(err);
} else {
try {
stack[index++].apply(self, args);
} catch (e) {
sync = true;
err = e;
}
}
}
sync = true;
}
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLmpzIl0sIm5hbWVzIjpbImhhbmRsZXIiLCJzdGFjayIsImNvbnRleHQiLCJhcmdzIiwic2VsZiIsIm5leHQiLCJwb3AiLCJpbmRleCIsInN5bmMiLCJwdXNoIiwiaXRlciIsImVyciIsImxlbmd0aCIsImFwcGx5IiwiZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7a0JBUXdCQSxPO0FBUnhCOzs7Ozs7OztBQVFlLFNBQVNBLE9BQVQsQ0FBaUJDLEtBQWpCLEVBQXdCQyxPQUF4QixFQUFpQztBQUM5QyxTQUFPLFlBQW1CO0FBQUEsc0NBQU5DLElBQU07QUFBTkEsVUFBTTtBQUFBOztBQUN4QixRQUFNQyxPQUFPRixXQUFXLElBQXhCO0FBQ0EsUUFBTUcsT0FBT0YsS0FBS0csR0FBTCxFQUFiOztBQUVBLFFBQUlDLFFBQVEsQ0FBWjtBQUNBLFFBQUlDLE9BQU8sSUFBWDs7QUFFQUwsU0FBS00sSUFBTCxDQUFVQyxJQUFWO0FBQ0FBOztBQUVBLGFBQVNBLElBQVQsQ0FBY0MsR0FBZCxFQUFtQjtBQUNqQixVQUFJQSxHQUFKLEVBQVM7QUFDUEgsZUFBTyxJQUFQO0FBQ0Q7O0FBRUQsYUFBT0EsSUFBUCxFQUFhO0FBQ1hBLGVBQU8sS0FBUDtBQUNBLFlBQUlHLE9BQU9KLFNBQVNOLE1BQU1XLE1BQTFCLEVBQWtDO0FBQ2hDUCxlQUFLTSxHQUFMO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsY0FBSTtBQUNGVixrQkFBTU0sT0FBTixFQUFlTSxLQUFmLENBQXFCVCxJQUFyQixFQUEyQkQsSUFBM0I7QUFDRCxXQUZELENBR0EsT0FBT1csQ0FBUCxFQUFVO0FBQ1JOLG1CQUFPLElBQVA7QUFDQUcsa0JBQU1HLENBQU47QUFDRDtBQUNGO0FBQ0Y7O0FBRUROLGFBQU8sSUFBUDtBQUNEO0FBQ0YsR0FoQ0Q7QUFpQ0QiLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0dXJuIGEgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgZ2l2ZW4gbGlzdCBvZiBjYWxsYmFja3MsXG4gKiBrZWVwaW5nIHRoZSBjYWxsIHN0YWNrIGZsYXQgaW4gY2FzZSBgbmV4dGAgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxGdW5jdGlvbj59IHN0YWNrXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0XVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhbmRsZXIoc3RhY2ssIGNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY29uc3Qgc2VsZiA9IGNvbnRleHQgfHwgdGhpcztcbiAgICBjb25zdCBuZXh0ID0gYXJncy5wb3AoKTtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgbGV0IHN5bmMgPSB0cnVlO1xuXG4gICAgYXJncy5wdXNoKGl0ZXIpO1xuICAgIGl0ZXIoKTtcblxuICAgIGZ1bmN0aW9uIGl0ZXIoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHN5bmMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoc3luYykge1xuICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnIgfHwgaW5kZXggPj0gc3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgbmV4dChlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGFja1tpbmRleCsrXS5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3luYyA9IHRydWU7XG4gICAgfVxuICB9O1xufVxuIl19