// // Imports // import { FritterContext } from "../classes/FritterContext.js"; import { FritterMiddlewareFunction } from "../types/FritterMiddlewareFunction.js"; // // Middleware // export type MiddlewareFritterContext = FritterContext & { currentPageNumber: number; getPagination: (totalPageCount: number) => T; }; export type CreateOptions = { getPageNumber?: (context: MiddlewareFritterContext) => number; getPagination?: (context: MiddlewareFritterContext, totalPageCount: number) => T; }; export type CreateResult = { getPageNumber: (context: MiddlewareFritterContext) => number; getPagination: (context: MiddlewareFritterContext, totalPageCount: number) => T; execute: FritterMiddlewareFunction>; }; export function create(options: CreateOptions = {}): CreateResult { const currentPageNumberMiddleware: CreateResult = { getPageNumber: options.getPageNumber ?? ((context) => { let currentPage = parseInt(context.fritterRequest.getSearchParams().get("page") ?? "1"); return isNaN(currentPage) ? 1 : currentPage; }), getPagination: options.getPagination ?? (() => null as T), execute: async (context, next) => { const currentPageNumber = currentPageNumberMiddleware.getPageNumber(context); context.currentPageNumber = currentPageNumber; context.getPagination = (totalPageCount) => currentPageNumberMiddleware.getPagination(context, totalPageCount); await next(); }, }; return currentPageNumberMiddleware; }