/** * Express Middleware for lazy-render-server */ import { Request, Response, NextFunction } from 'express'; import { validatePaginationParams, calculatePagination } from './index'; declare global { namespace Express { interface Request { pagination?: { page: number; limit: number; cursor?: string; sortBy?: string; sortOrder?: 'asc' | 'desc'; }; } } } /** * Express middleware for pagination */ export function paginationMiddleware( req: Request, res: Response, next: NextFunction ) { const { page, limit, cursor, sortBy, sortOrder } = req.query; const validated = validatePaginationParams({ page: parseInt(String(page)) || 1, limit: parseInt(String(limit)) || 50, cursor: String(cursor), sortBy: String(sortBy), sortOrder: sortOrder as 'asc' | 'desc' }); if (validated.errors.length > 0) { return res.status(400).json({ error: 'Invalid pagination parameters', details: validated.errors }); } req.pagination = { page: validated.page, limit: validated.limit, cursor: validated.cursor, sortBy: validated.sortBy, sortOrder: validated.sortOrder }; next(); } /** * Error handler for pagination errors */ export function paginationErrorHandler( err: any, req: Request, res: Response, next: NextFunction ) { if (err.type === 'pagination_error') { return res.status(400).json({ error: 'Pagination Error', message: err.message }); } next(err); } export default { paginationMiddleware, paginationErrorHandler };