UNPKG

rui-weather-service-api

Version:

Weather API service with OpenWeatherMap integration - includes both standalone API and MCP server

66 lines 2.93 kB
import config from '../config/index.js'; /** * Formats temperature based on units */ export function formatTemperature(temperature) { const isMetric = config.units === 'metric'; const primaryTemp = `${temperature}°${isMetric ? 'C' : 'F'}`; // Add conversion for convenience const convertedTemp = isMetric ? `(${(temperature * 9 / 5 + 32).toFixed(1)}°F)` : `(${((temperature - 32) * 5 / 9).toFixed(1)}°C)`; return `${primaryTemp} ${convertedTemp}`; } /** * Formats wind speed based on units */ export function formatWindSpeed(speed) { const isMetric = config.units === 'metric'; return isMetric ? `${speed} m/s (${(speed * 2.237).toFixed(1)} mph)` : `${speed} mph (${(speed / 2.237).toFixed(1)} m/s)`; } /** * Formats current weather data as human-readable string */ export function formatCurrentWeather(weatherData) { const isMetric = config.units === 'metric'; return ` Current Weather for ${weatherData.location.name}, ${weatherData.location.country}: Temperature: ${formatTemperature(weatherData.temperature.current)} Feels like: ${weatherData.temperature.feelsLike}°${isMetric ? 'C' : 'F'} Conditions: ${weatherData.weather.description} Humidity: ${weatherData.details.humidity}% Wind: ${formatWindSpeed(weatherData.wind.speed)} Pressure: ${weatherData.details.pressure} hPa Visibility: ${weatherData.details.visibility} km Sunrise: ${weatherData.details.sunrise.toLocaleTimeString()} Sunset: ${weatherData.details.sunset.toLocaleTimeString()} Updated: ${weatherData.updatedAt.toLocaleString()} `.trim(); } /** * Formats forecast data as human-readable string */ export function formatForecast(forecastData) { const isMetric = config.units === 'metric'; let forecastInfo = `Weather Forecast for ${forecastData.city.name}, ${forecastData.city.country}:\n\n`; forecastData.forecasts.forEach(forecast => { const date = forecast.date.toLocaleDateString(); forecastInfo += `${date}:\n`; forecastInfo += ` Temperature: ${forecast.temperature.avg.toFixed(1)}°${isMetric ? 'C' : 'F'} (Low: ${forecast.temperature.min.toFixed(1)}°, High: ${forecast.temperature.max.toFixed(1)}°)\n`; forecastInfo += ` Conditions: ${forecast.weather.description}\n`; forecastInfo += ` Humidity: ${forecast.details.humidity}%\n`; forecastInfo += ` Wind: ${forecast.wind.speed} ${isMetric ? 'm/s' : 'mph'}\n\n`; }); return forecastInfo; } /** * Returns a condensed single-line forecast summary */ export function formatForecastSummary(forecastData) { const isMetric = config.units === 'metric'; const forecast = forecastData.forecasts[0]; return `${forecastData.city.name}: ${forecast.temperature.avg.toFixed(1)}°${isMetric ? 'C' : 'F'}, ${forecast.weather.description}, Wind: ${forecast.wind.speed} ${isMetric ? 'm/s' : 'mph'}`; } //# sourceMappingURL=weather-formatter.js.map