import type { Route, RouteStops, Stop } from '../types'; export const routeNumberKey = (number: string) => number.trim().replace(/^№\s*/, '').normalize('NFKC').toLocaleUpperCase('ru'); export function groupRoutes(routes: Route[]) { const groups = new Map(); for (const route of routes) { const key = routeNumberKey(route.number); const group = groups.get(key) ?? { key, number: route.number, routes: [] }; if (!group.routes.some(value => value.id === route.id)) group.routes.push(route); groups.set(key, group); } return [...groups.values()].sort((a, b) => a.key.localeCompare(b.key, 'ru', { numeric: true })); } export function stopsForRoutes(catalog: Stop[], routes: RouteStops[]): Stop[] { const stops = new Map(); const known = new Map(catalog.map(stop => [stop.id, stop])); for (const route of routes) for (const stop of route.stops) { if (!stops.has(stop.id)) stops.set(stop.id, { ...stop, ...known.get(stop.id) }); } return [...stops.values()]; }