UNPKG

kequapp

Version:

A minimal, zero-magic Node web framework built on native APIs

39 lines (38 loc) 1.23 kB
import { getParts } from "./extract.js"; export default function warnDuplicates(routes, warn) { const found = []; for (let i = 0; i < routes.length; i++) { const partsi = getParts(routes[i].url); for (let j = 0; j < routes.length; j++) { if (i === j || found.includes(j)) continue; if (routes[i].method !== routes[j].method) continue; const partsj = getParts(routes[j].url); if (!isMatch(partsi, partsj)) continue; found.push(i); const a = partsi.join('/'); const b = partsj.join('/'); warn(`Duplicate route detected: ${routes[i].method} '/${a}' '/${b}'`); } } } function isMatch(aa, bb) { let aIsWild = false; let bIsWild = false; for (let i = 0; i < Math.max(aa.length, bb.length); i++) { const a = aa[i]; const b = bb[i]; if (a === '**') aIsWild = true; if (b === '**') bIsWild = true; if ((aIsWild || a?.startsWith(':')) && (bIsWild || b?.startsWith(':'))) continue; if (a === b) continue; return false; } return true; }