29 lines
951 B
JavaScript
29 lines
951 B
JavaScript
import {existsSync, mkdirSync, writeFileSync} from 'fs';
|
|
import * as path from 'node:path';
|
|
import {resolve, dirname} from 'path';
|
|
import {fileURLToPath} from 'url';
|
|
|
|
const DIR = resolve(dirname(fileURLToPath(import.meta.url)), '../data/icons');
|
|
|
|
export async function downloadIcon(icon, path) {
|
|
if(!existsSync(DIR)) mkdirSync(dirname(path), {recursive: true});
|
|
const res = await fetch(`https://openweathermap.org/img/wn/${icon}@2x.png`);
|
|
const buf = Buffer.from(await res.arrayBuffer());
|
|
writeFileSync(path, buf);
|
|
}
|
|
|
|
export async function fetchIcon(icon) {
|
|
const iconPath = path.join(DIR, icon + '.png');
|
|
if(!existsSync(DIR) || !existsSync(iconPath))
|
|
await downloadIcon(icon, iconPath);
|
|
return iconPath;
|
|
}
|
|
|
|
export function frostRisk(tempC, dewPointC, humidity) {
|
|
if (tempC > 4) return 'None'
|
|
if (tempC <= 0 && dewPointC <= 0) return 'High'
|
|
if (tempC <= 2 && humidity > 85) return 'Moderate'
|
|
if (tempC <= 4) return 'Low'
|
|
return 'None'
|
|
}
|