{"version":3,"sources":["../src/locales/en.json","../src/locales/fr.json","../src/i18next.ts","../src/type.ts","../src/WeatherDescribe.ts"],"names":["dir","sentence","weather","i18next","fetchWeatherApi"],"mappings":"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","file":"index.cjs","sourcesContent":["{\n\t\"weather\": {\n\t\t\"code\": {\n\t\t\t\"0\": \"clear skies\",\n\t\t\t\"1\": \"mostly clear skies\",\n\t\t\t\"2\": \"partly cloudy skies\",\n\t\t\t\"3\": \"overcast skies\",\n\t\t\t\"45\": \"fog\",\n\t\t\t\"48\": \"freezing fog\",\n\t\t\t\"51\": \"light drizzle\",\n\t\t\t\"53\": \"moderate drizzle\",\n\t\t\t\"55\": \"heavy drizzle\",\n\t\t\t\"61\": \"light rain\",\n\t\t\t\"63\": \"moderate rain\",\n\t\t\t\"65\": \"heavy rain\",\n\t\t\t\"71\": \"light snowfall\",\n\t\t\t\"73\": \"moderate snowfall\",\n\t\t\t\"75\": \"heavy snowfall\",\n\t\t\t\"80\": \"light showers\",\n\t\t\t\"81\": \"moderate showers\",\n\t\t\t\"82\": \"heavy showers\",\n\t\t\t\"95\": \"a thunderstorm\",\n\t\t\t\"96\": \"a thunderstorm with small hail\",\n\t\t\t\"99\": \"a thunderstorm with heavy hail\"\n\t\t}\n\t},\n\t\"dir\": {\n\t\t\"N\": \"north\",\n\t\t\"NNE\": \"north-northeast\",\n\t\t\"NE\": \"northeast\",\n\t\t\"ENE\": \"east-northeast\",\n\t\t\"E\": \"east\",\n\t\t\"ESE\": \"east-southeast\",\n\t\t\"SE\": \"southeast\",\n\t\t\"SSE\": \"south-southeast\",\n\t\t\"S\": \"south\",\n\t\t\"SSW\": \"south-southwest\",\n\t\t\"SW\": \"southwest\",\n\t\t\"WSW\": \"west-southwest\",\n\t\t\"W\": \"west\",\n\t\t\"WNW\": \"west-northwest\",\n\t\t\"NW\": \"northwest\",\n\t\t\"NNW\": \"north-northwest\",\n\t\t\"short\": {\n\t\t\t\"N\": \"N\",\n\t\t\t\"NNE\": \"NNE\",\n\t\t\t\"NE\": \"NE\",\n\t\t\t\"ENE\": \"ENE\",\n\t\t\t\"E\": \"E\",\n\t\t\t\"ESE\": \"ESE\",\n\t\t\t\"SE\": \"SE\",\n\t\t\t\"SSE\": \"SSE\",\n\t\t\t\"S\": \"S\",\n\t\t\t\"SSW\": \"SSW\",\n\t\t\t\"SW\": \"SW\",\n\t\t\t\"WSW\": \"WSW\",\n\t\t\t\"W\": \"W\",\n\t\t\t\"WNW\": \"WNW\",\n\t\t\t\"NW\": \"NW\",\n\t\t\t\"NNW\": \"NNW\"\n\t\t}\n\t},\n\t\"sentence\": {\n\t\t\"head\": {\n\t\t\t\"no_city\": {\n\t\t\t\t\"long\": \"The forecast calls for {{cond}}, and it's currently {{temp}}°C.\",\n\t\t\t\t\"short\": \"\"\n\t\t\t},\n\t\t\t\"with_city\": {\n\t\t\t\t\"long\": \"In {{city}}, the forecast calls for {{cond}}, and it's currently {{temp}}°C.\",\n\t\t\t\t\"short\": \"{{city}}: \"\n\t\t\t}\n\t\t},\n\t\t\"city\": \"In {{city}}, \",\n\t\t\"cond\": \"{{cond}}\",\n\t\t\"feels\": \"It feels like {{feels}}°C.\",\n\t\t\"wind\": \"Winds are blowing from the {{dir}} at {{speed}} km/h{{gust}}.\",\n\t\t\"wind.dir\": \"{{dir}}\",\n\t\t\"wind.gust\": \" with gusts up to {{gust}} km/h\",\n\t\t\"precip.none\": \"No precipitation expected.\",\n\t\t\"precip.rain\": \"Rainfall of around {{mm}} mm.\",\n\t\t\"precip.snow\": \"Snow accumulation near {{cm}} cm.\",\n\t\t\"humidity\": {\n\t\t\t\"very_high\": \"The air is very humid, around {{pct}}%.\",\n\t\t\t\"high\": \"Humidity is about {{pct}}%.\",\n\t\t\t\"medium\": \"Moderate humidity, around {{pct}}%.\",\n\t\t\t\"low\": \"The air is dry, with humidity near {{pct}}%.\",\n\t\t\t\"very_low\": \"The air is particularly dry, only {{pct}}%.\"\n\t\t},\n\t\t\"clouds\": \"Cloud cover about {{pct}}%,\",\n\t\t\"visibility\": \"and visibility around {{km}} km.\",\n\t\t\"short\": \"{{city}}The forecast calls for {{cond}}, it's currently {{temp}}°C, with a wind of {{speed}} km/h ({{dir}}).\"\n\t}\n}\n","{\n\t\"weather\": {\n\t\t\"code\": {\n\t\t\t\"0\": \"un ciel dégagé\",\n\t\t\t\"1\": \"un temps majoritairement clair\",\n\t\t\t\"2\": \"un ciel partiellement nuageux\",\n\t\t\t\"3\": \"un ciel couvert\",\n\t\t\t\"45\": \"du brouillard\",\n\t\t\t\"48\": \"du brouillard givrant\",\n\t\t\t\"51\": \"de la bruine légère\",\n\t\t\t\"53\": \"de la bruine modérée\",\n\t\t\t\"55\": \"de la bruine dense\",\n\t\t\t\"61\": \"de la pluie légère\",\n\t\t\t\"63\": \"de la pluie modérée\",\n\t\t\t\"65\": \"de la pluie forte\",\n\t\t\t\"71\": \"des chutes de neige légères\",\n\t\t\t\"73\": \"des chutes de neige modérées\",\n\t\t\t\"75\": \"de fortes chutes de neige\",\n\t\t\t\"80\": \"des averses légères\",\n\t\t\t\"81\": \"des averses modérées\",\n\t\t\t\"82\": \"des averses fortes\",\n\t\t\t\"95\": \"un orage\",\n\t\t\t\"96\": \"un orage avec grêle légère\",\n\t\t\t\"99\": \"un orage avec forte grêle\"\n\t\t}\n\t},\n\t\"dir\": {\n\t\t\"N\": \"le nord\",\n\t\t\"NNE\": \"le nord-nord-est\",\n\t\t\"NE\": \"le nord-est\",\n\t\t\"ENE\": \"l'est-nord-est\",\n\t\t\"E\": \"l'est\",\n\t\t\"ESE\": \"l'est-sud-est\",\n\t\t\"SE\": \"le sud-est\",\n\t\t\"SSE\": \"le sud-sud-est\",\n\t\t\"S\": \"le sud\",\n\t\t\"SSW\": \"le sud-sud-ouest\",\n\t\t\"SW\": \"le sud-ouest\",\n\t\t\"WSW\": \"l'ouest-sud-ouest\",\n\t\t\"W\": \"l'ouest\",\n\t\t\"WNW\": \"l'ouest-nord-ouest\",\n\t\t\"NW\": \"le nord-ouest\",\n\t\t\"NNW\": \"le nord-nord-ouest\",\n\t\t\"short\": {\n\t\t\t\"N\": \"N\",\n\t\t\t\"NNE\": \"NNE\",\n\t\t\t\"NE\": \"NE\",\n\t\t\t\"ENE\": \"ENE\",\n\t\t\t\"E\": \"E\",\n\t\t\t\"ESE\": \"ESE\",\n\t\t\t\"SE\": \"SE\",\n\t\t\t\"SSE\": \"SSE\",\n\t\t\t\"S\": \"S\",\n\t\t\t\"SSW\": \"SSO\",\n\t\t\t\"SW\": \"SO\",\n\t\t\t\"WSW\": \"OSO\",\n\t\t\t\"W\": \"O\",\n\t\t\t\"WNW\": \"ONO\",\n\t\t\t\"NW\": \"NO\",\n\t\t\t\"NNW\": \"NNO\"\n\t\t}\n\t},\n\t\"sentence\": {\n\t\t\"head\": {\n\t\t\t\"no_city\": {\n\t\t\t\t\"long\": \"On a prévu {{cond}} et il fait actuellement {{temp}}°C.\",\n\t\t\t\t\"short\": \"\"\n\t\t\t},\n\t\t\t\"with_city\": {\n\t\t\t\t\"long\": \"À {{city}}, on a prévu {{cond}} et il fait actuellement {{temp}}°C.\",\n\t\t\t\t\"short\": \"{{city}} : \"\n\t\t\t}\n\t\t},\n\t\t\"city\": \"À {{city}}, \",\n\t\t\"cond\": \"{{cond}}\",\n\t\t\"feels\": \"La température ressentie est de {{feels}}°C.\",\n\t\t\"wind\": \"Le vent souffle depuis {{dir}} à {{speed}} km/h{{gust}}.\",\n\t\t\"wind.dir\": \"{{dir}}\",\n\t\t\"wind.gust\": \", avec des rafales pouvant atteindre {{gust}} km/h\",\n\t\t\"precip.none\": \"Aucune précipitation n'est attendue,\",\n\t\t\"precip.rain\": \"On attend environ {{mm}}mm de précipitions.\",\n\t\t\"precip.snow\": \"On attend {{cm}} cm de chutes de neige.\",\n\t\t\"humidity\": {\n\t\t\t\"very_high\": \"L’air est très humide, avec un taux d’environ {{pct}}%.\",\n\t\t\t\"high\": \"L’humidité de l’air est de {{pct}}%.\",\n\t\t\t\"medium\": \"L’humidité est modérée, à environ {{pct}}%.\",\n\t\t\t\"low\": \"L’air est sec, avec une humidité d’environ {{pct}}%.\",\n\t\t\t\"very_low\": \"L’air est particulièrement sec, à seulement {{pct}}%.\"\n\t\t},\n\t\t\"clouds\": \"La couverture nuageuse est d’environ {{pct}}%,\",\n\t\t\"visibility\": \"et la visibilité est estimée à {{km}} km.\",\n\t\t\"short\": \"{{city}}La température est de {{temp}}°C. Il est prévu {{cond}} avec un vent de {{speed}} km/h ({{dir}}).\"\n\t}\n}\n","import * as en from \"./locales/en.json\";\nimport * as fr from \"./locales/fr.json\";\n\nexport const resources = {\n\tfr: { translation: fr },\n\ten: { translation: en },\n};\n\nexport type Language = \"en\" | \"fr\";\n","import type { Language } from \"./i18next.ts\";\n\nexport type Weather = {\n\t/**\n\t * See Open Weather API documentation for details\n\t * https://open-meteo.com/en/docs\n\t */\n\ttemperature_2m?: number;\n\tapparent_temperature?: number;\n\tweathercode?: number;\n\twind_speed_10m?: number;\n\twind_direction_10m?: number;\n\twind_gusts_10m?: number;\n\tprecipitation?: number;\n\train?: number;\n\tshowers?: number;\n\tsnowfall?: number;\n\trelative_humidity_2m?: number;\n\tcloud_cover?: number;\n\tvisibility?: number;\n};\n\nexport const WEATHER_CODE_EMOJI: Record<number, string> = {\n\t0: \"☀️\", // Clear sky\n\t1: \"🌤️\", // Mainly clear\n\t2: \"⛅\", // Partly cloudy\n\t3: \"☁️\", // Overcast\n\t45: \"🌫️\", // Fog\n\t48: \"🌫️\", // Depositing rime fog\n\t51: \"🌦️\", // Drizzle: Light\n\t53: \"🌦️\", // Drizzle: Moderate\n\t55: \"🌧️\", // Drizzle: Dense intensity\n\t56: \"🌧️\", // Freezing Drizzle: Light\n\t57: \"🌧️\", // Freezing Drizzle: Dense intensity\n\t61: \"🌧️\", // Rain: Slight\n\t63: \"🌧️\", // Rain: Moderate\n\t65: \"🌧️\", // Rain: Heavy intensity\n\t66: \"🌨️\", // Freezing Rain: Light\n\t67: \"🌨️\", // Freezing Rain: Heavy intensity\n\t71: \"🌨️\", // Snow fall: Slight\n\t73: \"🌨️\", // Snow fall: Moderate\n\t75: \"🌨️\", // Snow fall: Heavy intensity\n\t77: \"❄️\", // Snow grains\n\t80: \"🌧️\", // Rain showers: Slight\n\t81: \"🌧️\", // Rain showers\n\t82: \"🌧️\", // Rain showers: Violent\n\t85: \"🌨️\", // Snow showers slight\n\t86: \"🌨️\", // Snow showers heavy\n\t95: \"⛈️\", // Thunderstorm: Slight or moderate\n\t96: \"⛈️\", // Thunderstorm with slight hail\n\t99: \"⛈️\", // Thunderstorm with heavy hail\n};\n\nexport interface WeatherDescribeOptions {\n\t/**\n\t * Langue for the weather description\n\t */\n\tlang?: Language;\n\t/**\n\t * Timezone for the weather data\n\t * @default auto\n\t */\n\ttimezone?: string;\n\t/**\n\t * Default city if no location is provided\n\t */\n\tdefaultCity?: string;\n\t/**\n\t * Cache duration in milliseconds for weather data\n\t * @default 0 (no caching)\n\t */\n\tcacheTtlMs?: number;\n}\n\nexport interface WeatherDescribeResult {\n\t/**\n\t * Emoji representing the current weather condition\n\t */\n\temoji: string;\n\t/**\n\t * Textual description of the current weather\n\t */\n\ttext: {\n\t\tlong: string;\n\t\tshort: string;\n\t};\n\t/**\n\t * Current weather data\n\t */\n\tcurrent: Weather;\n}\n\ntype APIOptions = {\n\t/**\n\t * Language for the text description\n\t */\n\tlang?: Language;\n};\n\nexport type ByCoordsOptions = APIOptions & {\n\t/**\n\t * City name for description context (e.g., \"Paris\" for coordinates in Paris)\n\t */\n\tcityName?: string;\n};\nexport type ByCityOptions = APIOptions & {\n\t/**\n\t * Optional country code to refine city search (e.g., \"US\" for United States)\n\t */\n\tcountryCode?: string;\n};\n","// WeatherNow.ts\n\nimport i18next from \"i18next\";\nimport { fetchWeatherApi } from \"openmeteo\";\nimport { type Language, resources } from \"./i18next.ts\";\nimport {\n\ttype ByCityOptions,\n\ttype ByCoordsOptions,\n\tWEATHER_CODE_EMOJI,\n\ttype Weather,\n\ttype WeatherDescribeOptions,\n\ttype WeatherDescribeResult,\n} from \"./type.ts\";\nimport \"uniformize\";\n\nexport class WeatherDescribe {\n\t/**\n\t * Lang usage  for descriptions.\n\t * @private\n\t * @default \"en\"\n\t */\n\tprivate lang: Language;\n\t/**\n\t * Timezone to use for fetching weather.\n\t * @private\n\t * @default \"auto\"\n\t */\n\tprivate timezone: string;\n\t/**\n\t * Default city name for byCity() if none provided.\n\t * @private\n\t */\n\tprivate readonly defaultCity?: string;\n\t/**\n\t * Cache TTL in milliseconds.\n\t * @private\n\t * @default 0 (no caching)\n\t */\n\tprivate readonly cacheTtl: number;\n\t/**\n\t * i18n initialized flag.\n\t * @private\n\t */\n\tprivate inited = false;\n\t/**\n\t * Cache for fetched weather data.\n\t * @private\n\t */\n\tprivate cache = new Map<\n\t\tstring,\n\t\t{\n\t\t\t/**\n\t\t\t * Timestamp of cache entry.\n\t\t\t */\n\t\t\tat: number;\n\t\t\t/**\n\t\t\t * Cached current weather data.\n\t\t\t */\n\t\t\tcur: Weather;\n\t\t}\n\t>();\n\n\t/**\n\t * Create a WeatherDescribe instance\n\t * Gets current weather and describes it in text and emoji.\n\t * @param opts {WeatherDescribeOptions} Options\n\t */\n\tconstructor(opts: WeatherDescribeOptions = {}) {\n\t\tthis.lang = opts.lang ?? \"en\";\n\t\tthis.timezone = opts.timezone ?? \"auto\";\n\t\tthis.defaultCity = opts.defaultCity;\n\t\tthis.cacheTtl = opts.cacheTtlMs ?? 0;\n\t}\n\n\t/**\n\t * Set language for descriptions\n\t * @param lang {Language} Language code\n\t */\n\tsetLanguage(lang: Language) {\n\t\tthis.lang = lang;\n\t}\n\n\t/**\n\t * Set timezone for fetching weather\n\t * @param tz {string} Timezone string\n\t */\n\tsetTimezone(tz: string) {\n\t\tthis.timezone = tz;\n\t}\n\n\t/**\n\t * Ensure i18n is initialized for the given language\n\t * @param lang {Language} Language code\n\t * @private\n\t */\n\tprivate async ensureI18n(lang: Language) {\n\t\tif (!this.inited) {\n\t\t\tawait i18next.init({\n\t\t\t\tlng: lang,\n\t\t\t\tfallbackLng: \"en\",\n\t\t\t\tresources,\n\t\t\t\tinterpolation: {\n\t\t\t\t\tescapeValue: false,\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.inited = true;\n\t\t} else {\n\t\t\tawait i18next.changeLanguage(lang);\n\t\t}\n\t}\n\n\t/**\n\t * Convert degrees to compass direction\n\t * @param deg {number} Degrees\n\t * @private\n\t * @returns {string | undefined} Compass direction\n\t */\n\tprivate toCompass(deg: number): string | undefined {\n\t\tconst d = [\n\t\t\t\"N\",\n\t\t\t\"NNE\",\n\t\t\t\"NE\",\n\t\t\t\"ENE\",\n\t\t\t\"E\",\n\t\t\t\"ESE\",\n\t\t\t\"SE\",\n\t\t\t\"SSE\",\n\t\t\t\"S\",\n\t\t\t\"SSW\",\n\t\t\t\"SW\",\n\t\t\t\"WSW\",\n\t\t\t\"W\",\n\t\t\t\"WNW\",\n\t\t\t\"NW\",\n\t\t\t\"NNW\",\n\t\t];\n\t\treturn d[Math.round((((deg % 360) + 360) % 360) / 22.5) % 16];\n\t}\n\n\t/**\n\t * Describe the current weather in text\n\t * @param current {Weather} Current weather data\n\t * @param city {string} Optional city name\n\t * @private\n\t * @returns {string} Description text\n\t */\n\tprivate describe(current: Weather, city?: string): string {\n\t\tconst t = i18next.t.bind(i18next);\n\t\tconst parts: string[] = [];\n\n\t\tconst cond =\n\t\t\ttypeof current.weathercode === \"number\"\n\t\t\t\t? t(`weather.code.${current.weathercode}`)\n\t\t\t\t: undefined;\n\n\t\tconst headKey = city ? \"sentence.head.with_city\" : \"sentence.head.no_city\";\n\n\t\tconst head = t(`${headKey}.long`, {\n\t\t\tcity: city?.toTitle(),\n\t\t\ttemp:\n\t\t\t\ttypeof current.temperature_2m === \"number\"\n\t\t\t\t\t? Math.round(current.temperature_2m)\n\t\t\t\t\t: undefined,\n\t\t\tcond: cond\n\t\t\t\t? t(\"sentence.cond\", { cond: cond.toLowerCase?.() ?? cond })\n\t\t\t\t: undefined,\n\t\t});\n\t\tparts.push(head);\n\n\t\tif (typeof current.apparent_temperature === \"number\")\n\t\t\tparts.push(\n\t\t\t\tt(\"sentence.feels\", {\n\t\t\t\t\tfeels: Math.round(current.apparent_temperature),\n\t\t\t\t}),\n\t\t\t);\n\n\t\tif (typeof current.wind_speed_10m === \"number\") {\n\t\t\tconst payload: Record<string, unknown> = {\n\t\t\t\tspeed: Math.round(current.wind_speed_10m * 10) / 10,\n\t\t\t};\n\t\t\tif (typeof current.wind_direction_10m === \"number\") {\n\t\t\t\tpayload.dir = t(\"sentence.wind.dir\", {\n\t\t\t\t\tdir: t(`dir.${this.toCompass(current.wind_direction_10m)}`),\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (typeof current.wind_gusts_10m === \"number\") {\n\t\t\t\tpayload.gust = t(\"sentence.wind.gust\", {\n\t\t\t\t\tgust: Math.round(current.wind_gusts_10m * 10) / 10,\n\t\t\t\t});\n\t\t\t}\n\t\t\tparts.push(t(\"sentence.wind\", payload));\n\t\t}\n\n\t\tconst snow = current.snowfall ?? 0;\n\t\tconst rain = (current.rain ?? 0) + (current.showers ?? 0);\n\t\tconst precip = current.precipitation ?? 0;\n\n\t\tif (snow > 0)\n\t\t\tparts.push(t(\"sentence.precip.snow\", { cm: Math.round(snow * 10) / 10 }));\n\t\telse if (rain > 0)\n\t\t\tparts.push(t(\"sentence.precip.rain\", { mm: Math.round(rain * 10) / 10 }));\n\t\telse if (precip > 0)\n\t\t\tparts.push(\n\t\t\t\tt(\"sentence.precip.rain\", { mm: Math.round(precip * 10) / 10 }),\n\t\t\t);\n\t\telse parts.push(t(\"sentence.precip.none\"));\n\n\t\tif (typeof current.relative_humidity_2m === \"number\") {\n\t\t\tconst pct = current.relative_humidity_2m;\n\t\t\tlet key: string;\n\n\t\t\tif (pct >= 85) key = \"humidity.very_high\";\n\t\t\telse if (pct >= 70) key = \"humidity.high\";\n\t\t\telse if (pct >= 45) key = \"humidity.medium\";\n\t\t\telse if (pct >= 25) key = \"humidity.low\";\n\t\t\telse key = \"humidity.very_low\";\n\n\t\t\tparts.push(t(`sentence.${key}`, { pct }));\n\t\t}\n\n\t\tif (typeof current.cloud_cover === \"number\")\n\t\t\tparts.push(t(\"sentence.clouds\", { pct: current.cloud_cover }));\n\n\t\tif (typeof current.visibility === \"number\")\n\t\t\tparts.push(\n\t\t\t\tt(\"sentence.visibility\", {\n\t\t\t\t\tkm: Math.round((current.visibility / 1000) * 10) / 10,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t// unescape éventuel du slash HTML\n\t\treturn parts.join(\" \").replaceAll(\"&#x2F;\", \"/\");\n\t}\n\n\t/**\n\t * Short description of current weather\n\t * @param current {Weather} Current weather data\n\t * @param city\n\t * @private\n\t * @returns {string} Short description\n\t * @example \"15°C, light rain, wind 10 km/h NE\"\n\t */\n\tprivate shortDescribe(current: Weather, city?: string): string {\n\t\tconst t = i18next.t.bind(i18next);\n\t\tconst temp =\n\t\t\ttypeof current.temperature_2m === \"number\"\n\t\t\t\t? Math.round(current.temperature_2m)\n\t\t\t\t: undefined;\n\t\tconst cond =\n\t\t\ttypeof current.weathercode === \"number\"\n\t\t\t\t? t(`weather.code.${current.weathercode}`)\n\t\t\t\t: undefined;\n\n\t\tconst condTest = cond ? (cond.toLowerCase?.() ?? cond) : undefined;\n\n\t\tconst dir =\n\t\t\ttypeof current.wind_direction_10m === \"number\"\n\t\t\t\t? t(`dir.short.${this.toCompass(current.wind_direction_10m)}`)\n\t\t\t\t: undefined;\n\n\t\tconst speed =\n\t\t\ttypeof current.wind_speed_10m === \"number\"\n\t\t\t\t? Math.round(current.wind_speed_10m * 10) / 10\n\t\t\t\t: undefined;\n\n\t\tconst cityKey = city ? \"sentence.head.with_city\" : \"sentence.head.no_city\";\n\n\t\treturn t(\"sentence.short\", {\n\t\t\tcity: t(`${cityKey}.short`, { city: city?.toTitle() }),\n\t\t\ttemp,\n\t\t\tcond: condTest,\n\t\t\tdir,\n\t\t\tspeed,\n\t\t});\n\t}\n\n\t/**\n\t * Fetch current weather data for given coordinates and language\n\t * @param lat {number}\n\t * @param lon {number}\n\t * @param lang {Language}\n\t * @private\n\t * @returns {Promise<Weather>} Current weather data\n\t */\n\tprivate async fetchCurrent(\n\t\tlat: number,\n\t\tlon: number,\n\t\tlang: Language,\n\t): Promise<Weather> {\n\t\tconst key = `${lat},${lon},${lang},${this.timezone}`;\n\t\tconst now = Date.now();\n\t\tconst cached = this.cache.get(key);\n\t\tif (cached && this.cacheTtl > 0 && now - cached.at < this.cacheTtl)\n\t\t\treturn cached.cur;\n\n\t\tconst currentVars =\n\t\t\t\"temperature_2m,apparent_temperature,weather_code,wind_speed_10m,\" +\n\t\t\t\"wind_direction_10m,wind_gusts_10m,precipitation,rain,showers,\" +\n\t\t\t\"snowfall,relative_humidity_2m,cloud_cover,visibility\";\n\n\t\tconst params = {\n\t\t\tlatitude: [lat],\n\t\t\tlongitude: [lon],\n\t\t\tcurrent: currentVars,\n\t\t\tlang,\n\t\t\ttimezone: this.timezone,\n\t\t};\n\n\t\tconst url = \"https://api.open-meteo.com/v1/forecast\";\n\t\tconst responses = await fetchWeatherApi(url, params);\n\t\tconst res = responses[0];\n\t\tif (!res) throw new Error(\"Open-Meteo: pas de réponse météo.\");\n\t\tconst cur = res.current();\n\t\tif (!cur) throw new Error(\"Open-Meteo: pas de bloc `current`.\");\n\n\t\tconst obj: Weather = {\n\t\t\ttemperature_2m: cur.variables(0)?.value(),\n\t\t\tapparent_temperature: cur.variables(1)?.value(),\n\t\t\tweathercode: cur.variables(2)?.value(),\n\t\t\twind_speed_10m: cur.variables(3)?.value(),\n\t\t\twind_direction_10m: cur.variables(4)?.value(),\n\t\t\twind_gusts_10m: cur.variables(5)?.value(),\n\t\t\tprecipitation: cur.variables(6)?.value(),\n\t\t\train: cur.variables(7)?.value(),\n\t\t\tshowers: cur.variables(8)?.value(),\n\t\t\tsnowfall: cur.variables(9)?.value(),\n\t\t\trelative_humidity_2m: cur.variables(10)?.value(),\n\t\t\tcloud_cover: cur.variables(11)?.value(),\n\t\t\tvisibility: cur.variables(12)?.value(),\n\t\t};\n\n\t\tif (this.cacheTtl > 0) this.cache.set(key, { at: now, cur: obj });\n\t\treturn obj;\n\t}\n\n\t/**\n\t * Get emoji for weather code\n\t * @param code {number}\n\t * @private\n\t * @returns {string} Emoji character\n\t */\n\tprivate emojiFromCode(code: number): string {\n\t\treturn WEATHER_CODE_EMOJI[code] ?? \"❔\";\n\t}\n\n\t/**\n\t * Get weather description by coordinates\n\t * @param lat {number} Latitude\n\t * @param lon {number} Longitude\n\t * @param opts { ByCoordsOptions } Optional parameters\n\t * @returns {Promise<WeatherDescribeResult>} Weather description\n\t */\n\tasync byCoords(\n\t\tlat: number,\n\t\tlon: number,\n\t\topts?: ByCoordsOptions,\n\t): Promise<WeatherDescribeResult> {\n\t\tconst lang = opts?.lang ?? this.lang;\n\t\tawait this.ensureI18n(lang);\n\t\tconst cur = await this.fetchCurrent(lat, lon, lang);\n\t\tconst text = {\n\t\t\tlong: this.describe(cur, opts?.cityName),\n\t\t\tshort: this.shortDescribe(cur, opts?.cityName),\n\t\t};\n\t\tconst emoji = this.emojiFromCode(Math.round(cur.weathercode ?? -1));\n\t\treturn { emoji, text, current: cur };\n\t}\n\n\t/**\n\t * Get weather description by city name\n\t * @param city {string} City name\n\t * @param opts {ByCityOptions} Optional parameters\n\t * @returns {Promise<WeatherDescribeResult>} Weather description\n\t */\n\tasync byCity(\n\t\tcity?: string,\n\t\topts?: ByCityOptions,\n\t): Promise<WeatherDescribeResult> {\n\t\tconst target = city ?? this.defaultCity;\n\t\tif (!target) throw new Error(\"Aucune ville fournie.\");\n\t\tconst lang = opts?.lang ?? this.lang;\n\n\t\t// géocodage public Open-Meteo\n\t\tconst geoUrl = new URL(\"https://geocoding-api.open-meteo.com/v1/search\");\n\t\tgeoUrl.searchParams.set(\n\t\t\t\"name\",\n\t\t\topts?.countryCode ? `${target}, ${opts.countryCode}` : target,\n\t\t);\n\t\tgeoUrl.searchParams.set(\"count\", \"1\");\n\t\tgeoUrl.searchParams.set(\"Language\", lang);\n\n\t\tconst g = await fetch(geoUrl);\n\t\tif (!g.ok)\n\t\t\tthrow new Error(`Geocoding error ${g.status}: ${await g.text()}`);\n\t\tconst gData = (await g.json()) as {\n\t\t\tresults?: Array<{ latitude: number; longitude: number; name?: string }>;\n\t\t};\n\t\tconst best = gData.results?.[0];\n\t\tif (!best) throw new Error(`Ville introuvable: ${target}`);\n\n\t\treturn this.byCoords(best.latitude, best.longitude, {\n\t\t\tlang,\n\t\t\tcityName: target,\n\t\t});\n\t}\n}\n"]}