Skip to main content
Glama
formatters.ts3.58 kB
import type { Event } from '../api/types.js'; export function formatEventSummary(event: Event): string { const parts: string[] = []; parts.push(`[${event.severity}] ${event.headline}`); parts.push(`Type: ${event.event_type.replace(/_/g, ' ')}`); parts.push(`Status: ${event.status}`); if (event.description) { parts.push(`Details: ${event.description}`); } if (event.roads && event.roads.length > 0) { const roadInfo = event.roads.map(road => { let roadStr = road.name; if (road.from || road.to) { const fromTo = [road.from, road.to].filter(Boolean).join(' to '); if (fromTo) roadStr += ` (${fromTo})`; } if (road.direction) { roadStr += ` ${road.direction}`; } return roadStr; }).join(', '); parts.push(`Roads: ${roadInfo}`); } if (event.schedule?.intervals && event.schedule.intervals.length > 0) { parts.push(`Schedule: ${event.schedule.intervals.join(', ')}`); } if (event.updated) { parts.push(`Last Updated: ${new Date(event.updated).toLocaleString()}`); } return parts.join('\n'); } export function formatEventList(events: Event[]): string { if (events.length === 0) { return 'No events found.'; } const sortedEvents = [...events].sort((a, b) => { const severityOrder = { MAJOR: 0, MODERATE: 1, MINOR: 2, UNKNOWN: 3 }; return severityOrder[a.severity] - severityOrder[b.severity]; }); const lines: string[] = []; lines.push(`Found ${events.length} event(s):\n`); sortedEvents.forEach((event, index) => { lines.push(`${index + 1}. ${formatEventSummary(event)}`); lines.push(''); }); return lines.join('\n'); } export function formatClosureInfo(event: Event): string { const parts: string[] = []; parts.push(`[${event.severity}] ${event.headline}`); if (event.roads && event.roads.length > 0) { const roadInfo = event.roads.map(road => { let roadStr = `${road.name}`; if (road.from && road.to) { roadStr += ` from ${road.from} to ${road.to}`; } else if (road.from) { roadStr += ` from ${road.from}`; } else if (road.to) { roadStr += ` to ${road.to}`; } if (road.direction) { roadStr += ` (${road.direction})`; } return roadStr; }).join(', '); parts.push(`Location: ${roadInfo}`); } if (event.description) { parts.push(`Details: ${event.description}`); } if (event.schedule?.intervals && event.schedule.intervals.length > 0) { parts.push(`Duration: ${event.schedule.intervals.join(', ')}`); } else if (event.status === 'ACTIVE') { parts.push(`Duration: Ongoing (no end time specified)`); } if (event.updated) { parts.push(`Last Updated: ${new Date(event.updated).toLocaleString()}`); } return parts.join('\n'); } export function formatWeatherAlert(event: Event): string { const parts: string[] = []; parts.push(`[${event.severity}] ${event.headline}`); parts.push(`Type: ${event.event_type.replace(/_/g, ' ')}`); if (event.description) { parts.push(`Alert: ${event.description}`); } if (event.roads && event.roads.length > 0) { const affectedRoads = event.roads.map(r => r.name).join(', '); parts.push(`Affected Roads: ${affectedRoads}`); } if (event.areas && event.areas.length > 0) { const affectedAreas = event.areas.map(a => a.name).join(', '); parts.push(`Affected Areas: ${affectedAreas}`); } if (event.updated) { parts.push(`Last Updated: ${new Date(event.updated).toLocaleString()}`); } return parts.join('\n'); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/infil00p/DriveBC_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server