diff --git a/bin/validate-redirects.ts b/bin/validate-redirects.ts index 67a78c3292e95a0..674d92da5dc0317 100644 --- a/bin/validate-redirects.ts +++ b/bin/validate-redirects.ts @@ -7,6 +7,8 @@ async function main() { let numUrlsWithFragment = 0; let numDuplicateRedirects = 0; let numNonSlashedRedirects = 0; + let seenDynamicRedirects = false; + let numStaticRedirectsAfterDynamicRedirect = 0; const validEndings = ["/", "*", ".xml", ".md", ".json", ".html", ".pdf"]; @@ -17,6 +19,17 @@ async function main() { const [from, to] = line.split(" "); + if (from.includes("*")) { + seenDynamicRedirects = true; + } + + if (seenDynamicRedirects && !from.includes("*")) { + console.log( + `✘ Found static redirect after dynamic redirect:\n ${from}`, + ); + numStaticRedirectsAfterDynamicRedirect++; + } + if (from === to) { console.log(`✘ Found infinite redirect:\n ${from} -> ${to}`); numInfiniteRedirects++; @@ -49,7 +62,8 @@ async function main() { numInfiniteRedirects || numUrlsWithFragment || numDuplicateRedirects || - numNonSlashedRedirects + numNonSlashedRedirects || + numStaticRedirectsAfterDynamicRedirect ) { console.log("\nDetected errors:"); @@ -71,6 +85,12 @@ async function main() { ); } + if (numStaticRedirectsAfterDynamicRedirect > 0) { + console.log( + `- ${numStaticRedirectsAfterDynamicRedirect} static redirect(s) after dynamic redirect(s)`, + ); + } + console.log("\nPlease fix the errors above before merging :)"); process.exit(1); } else {