mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-03 11:49:30 +08:00
28 lines
642 B
Text
28 lines
642 B
Text
/**
|
|
* @param {...import('types').Handle} handlers
|
|
* @returns {import('types').Handle}
|
|
*/
|
|
function sequence(...handlers) {
|
|
const length = handlers.length;
|
|
if (!length) return ({ event, resolve }) => resolve(event);
|
|
|
|
return ({ event, resolve }) => {
|
|
return apply_handle(0, event);
|
|
|
|
/**
|
|
* @param {number} i
|
|
* @param {import('types').RequestEvent} event
|
|
* @returns {import('types').MaybePromise<Response>}
|
|
*/
|
|
function apply_handle(i, event) {
|
|
const handle = handlers[i];
|
|
|
|
return handle({
|
|
event,
|
|
resolve: i < length - 1 ? (event) => apply_handle(i + 1, event) : resolve
|
|
});
|
|
}
|
|
};
|
|
}
|
|
|
|
export { sequence };
|