import { type NextMiddleware, NextResponse } from "next/server" import type { MiddlewareMatcher } from "@/types/middleware" /* Middleware function to normalize date formats to support YYYY-MM-D and YYYY-MM-DD since the current web uses YYYY-MM-D in the URL as parameters (toDate and fromDate) */ const legacyDatePattern = /^([12]\d{3}-(0[1-9]|1[0-2])-([1-9]))$/ function normalizeDate(date: string): string { const datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/ if (datePattern.test(date)) { const [year, month, day] = date.split("-").map(Number) return `${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}` } return date } export const middleware: NextMiddleware = (request) => { const url = request.nextUrl.clone() const { searchParams } = url if ( legacyDatePattern.test(searchParams.get("fromdate")!) || legacyDatePattern.test(searchParams.get("todate")!) ) { const fromDate = searchParams.get("fromdate")! url.searchParams.set("fromdate", normalizeDate(fromDate)) const toDate = searchParams.get("todate")! url.searchParams.set("todate", normalizeDate(toDate)) return NextResponse.redirect(url) } else { const headers = new Headers(request.headers) headers.set("x-continue", "1") return NextResponse.next({ headers, }) } } export const matcher: MiddlewareMatcher = (request) => { const { searchParams } = request.nextUrl return searchParams.has("fromdate") || searchParams.has("todate") }