feathers-openweathermap
Version:
A OpenWeatherMap Service for feathers.js applications
684 lines (683 loc) • 16.2 kB
TypeScript
import { FixedLengthArray } from "type-fest";
export interface OWMServiceOptions {
appid: string;
v: string;
lang: Lang;
mode: Mode;
units: Unit;
}
export interface WithAppId {
appid: string;
}
export interface WithV {
v: string;
}
export interface QueryByCityName {
q: string;
}
export interface QueryByCityId {
id: number;
}
export interface QueryByGeoCoordinates {
lat: Latitude;
lon: Longitude;
}
export interface QueryByZipCode {
zip: string;
}
export declare type QueryParams = QueryByCityId & QueryByCityName & QueryByGeoCoordinates & QueryByZipCode & WithAppId & WithLangModeUnits;
export interface WithLang {
lang: Lang;
}
export interface WithMode {
mode: Mode;
}
export interface WithUnits {
units: Unit;
}
export declare type WithLangModeUnits = WithLang & WithMode & WithUnits;
export interface ByCityName {
cityName: string;
stateCode?: string;
countryCode?: string;
}
export interface ByCityId {
cityId: number;
}
export interface ByGeoGraphicCoordinates {
lat: Latitude;
lon: Longitude;
}
export interface ByZipCode {
zipCode: string;
countryCode?: string;
}
export declare type Unit = "standard" | "metric" | "imperial";
export declare type Mode = "json" | "html" | "xml";
export declare type Kelvin = number;
export declare type Celsius = number;
export declare type Fahrenheit = number;
export declare type Longitude = number;
export declare type Latitude = number;
export declare type Lang = "af" | "al" | "ar" | "az" | "bg" | "ca" | "cz" | "da" | "de" | "el" | "en" | "eu" | "fa" | "fi" | "fr" | "gl" | "he" | "hi" | "hr" | "hu" | "id" | "it" | "ja" | "kr" | "la" | "lt" | "mk" | "no" | "nl" | "pl" | "pt" | "pt_br" | "ro" | "ru" | "sv, se" | "sk" | "sl" | "sp, es" | "sr" | "th" | "tr" | "ua, uk" | "vi" | "zh_cn" | "zh_tw" | "zu";
export declare type WeatherCondition = {
id: 200;
main: "Thunderstorm";
description: "thunderstorm with light rain";
icon: "11d" | "11n";
} | {
id: 201;
main: "Thunderstorm";
description: "thunderstorm with rain";
icon: "11d" | "11n";
} | {
id: 202;
main: "Thunderstorm";
description: "thunderstorm with heavy rain";
icon: "11d" | "11n";
} | {
id: 210;
main: "Thunderstorm";
description: "light thunderstorm";
icon: "11d" | "11n";
} | {
id: 211;
main: "Thunderstorm";
description: "thunderstorm";
icon: "11d" | "11n";
} | {
id: 212;
main: "Thunderstorm";
description: "heavy thunderstorm";
icon: "11d" | "11n";
} | {
id: 221;
main: "Thunderstorm";
description: "ragged thunderstorm";
icon: "11d" | "11n";
} | {
id: 230;
main: "Thunderstorm";
description: "thunderstorm with light drizzle";
icon: "11d" | "11n";
} | {
id: 231;
main: "Thunderstorm";
description: "thunderstorm with drizzle";
icon: "11d" | "11n";
} | {
id: 232;
main: "Thunderstorm";
description: "thunderstorm with heavy drizzle";
icon: "11d" | "11n";
} | {
id: 300;
main: "Drizzle";
description: "light intensity drizzle";
icon: "09d" | "09n";
} | {
id: 301;
main: "Drizzle";
description: "drizzle";
icon: "09d" | "09n";
} | {
id: 302;
main: "Drizzle";
description: "heavy intensity drizzle";
icon: "09d" | "09n";
} | {
id: 310;
main: "Drizzle";
description: "light intensity drizzle rain";
icon: "09d" | "09n";
} | {
id: 311;
main: "Drizzle";
description: "drizzle rain";
icon: "09d" | "09n";
} | {
id: 312;
main: "Drizzle";
description: "heavy intensity drizzle rain";
icon: "09d" | "09n";
} | {
id: 313;
main: "Drizzle";
description: "shower rain and drizzle";
icon: "09d" | "09n";
} | {
id: 314;
main: "Drizzle";
description: "heavy shower rain and drizzle";
icon: "09d" | "09n";
} | {
id: 321;
main: "Drizzle";
description: "shower drizzle";
icon: "09d" | "09n";
} | {
id: 500;
main: "Rain";
description: "light rain";
icon: "10d" | "10n";
} | {
id: 501;
main: "Rain";
description: "moderate rain";
icon: "10d" | "10n";
} | {
id: 502;
main: "Rain";
description: "heavy intensity rain";
icon: "10d" | "10n";
} | {
id: 503;
main: "Rain";
description: "very heavy rain";
icon: "10d" | "10n";
} | {
id: 504;
main: "Rain";
description: "extreme rain";
icon: "10d" | "10n";
} | {
id: 511;
main: "Rain";
description: "freezing rain";
icon: "13d" | "13n";
} | {
id: 520;
main: "Rain";
description: "light intensity shower rain";
icon: "09d" | "09n";
} | {
id: 521;
main: "Rain";
description: "shower rain";
icon: "09d" | "09n";
} | {
id: 522;
main: "Rain";
description: "heavy intensity shower rain";
icon: "09d" | "09n";
} | {
id: 531;
main: "Rain";
description: "ragged shower rain";
icon: "09d" | "09n";
} | {
id: 600;
main: "Snow";
description: "light snow";
icon: "13d" | "13n";
} | {
id: 601;
main: "Snow";
description: "Snow";
icon: "13d" | "13n";
} | {
id: 602;
main: "Snow";
description: "Heavy snow";
icon: "13d" | "13n";
} | {
id: 611;
main: "Snow";
description: "Sleet";
icon: "13d" | "13n";
} | {
id: 612;
main: "Snow";
description: "Light shower sleet";
icon: "13d" | "13n";
} | {
id: 613;
main: "Snow";
description: "Shower sleet";
icon: "13d" | "13n";
} | {
id: 615;
main: "Snow";
description: "Light rain and snow";
icon: "13d" | "13n";
} | {
id: 616;
main: "Snow";
description: "Rain and snow";
icon: "13d" | "13n";
} | {
id: 620;
main: "Snow";
description: "Light shower snow";
icon: "13d" | "13n";
} | {
id: 621;
main: "Snow";
description: "Shower snow";
icon: "13d" | "13n";
} | {
id: 622;
main: "Snow";
description: "Heavy shower snow";
icon: "13d" | "13n";
} | {
id: 701;
main: "Mist";
description: "mist";
icon: "50d" | "50n";
} | {
id: 711;
main: "Smoke";
description: "Smoke";
icon: "50d" | "50n";
} | {
id: 721;
main: "Haze";
description: "Haze";
icon: "50d" | "50n";
} | {
id: 731;
main: "Dust";
description: "sand/ dust whirls";
icon: "50d" | "50n";
} | {
id: 741;
main: "Fog";
description: "fog";
icon: "50d" | "50n";
} | {
id: 751;
main: "Sand";
description: "sand";
icon: "50d" | "50n";
} | {
id: 761;
main: "Dust";
description: "dust";
icon: "50d" | "50n";
} | {
id: 762;
main: "Ash";
description: "volcanic ash";
icon: "50d" | "50n";
} | {
id: 771;
main: "Squall";
description: "squalls";
icon: "50d" | "50n";
} | {
id: 781;
main: "Tornado";
description: "tornado";
icon: "50d" | "50n";
} | {
id: 800;
main: "Clear";
description: "clear sky";
icon: "01d" | "01n";
} | {
id: 801;
main: "Clouds";
description: "few clouds";
icon: "02d" | "02n";
} | {
id: 802;
main: "Clouds";
description: "scattered clouds";
icon: "03d" | "03n";
} | {
id: 803;
main: "Clouds";
description: "broken clouds";
icon: "04d" | "04n";
} | {
id: 804;
main: "Clouds";
description: "overcast clouds";
icon: "04d" | "04n";
};
export declare type Endpoint = "weather" | "forecast/hourly" | "onecall" | "forecast/daily" | "forecast/climate" | "forecast" | "air_pollution" | "air_pollution/forecast" | "air_pollution/history";
export declare type T = number;
export declare type AnyData = CurrentWeatherDataData | OneCallData | DailyForecast16DaysData | ClimaticForeCast30DaysData | FiveDay3HourForecastData | HourlyForecast4DaysData | AirPollutionCurrentData | AirPollutionForecastData | AirPollutionHistoricalData;
export declare type AnyResult = CurrentWeatherDataResult | OneCallResult | DailyForecast16DaysResult | ClimaticForeCast30DaysResult | FiveDay3HourForecastResult | HourlyForecast4DaysResult | AirPollutionResult;
export declare type CurrentWeatherDataData = (ByCityName | ByCityId | ByGeoGraphicCoordinates | ByZipCode) & Partial<WithAppId & WithV & WithLang & WithUnits>;
export interface CurrentWeatherDataResult {
base: string;
clouds: {
all: number;
};
cod: number;
coord: {
lon: Longitude;
lat: Latitude;
};
dt: number;
id: number;
main: {
temp: T;
feels_like: T;
temp_min: T;
temp_max: T;
pressure: number;
humidity: number;
};
name: string;
rain?: {
"1h"?: number;
"3h"?: number;
};
snow?: {
"1h"?: number;
"3h"?: number;
};
sys: {
type: number;
id: number;
message: number;
country: string;
sunrise: number;
sunset: number;
};
timezone: number;
visibility: number;
weather: [WeatherCondition];
wind: {
deg: number;
speed: number;
};
}
export declare type OneCallData = ByGeoGraphicCoordinates & {
exclude?: ("current" | "minutely" | "hourly" | "daily" | "alerts")[];
} & Partial<WithAppId & WithV & WithLangModeUnits>;
export interface OneCallResult {
current: OneCallResultCurrent;
daily: FixedLengthArray<OneCallResultDaily, 8>;
hourly: FixedLengthArray<OneCallResultHourly, 48>;
lat: Latitude;
lon: Longitude;
minutely: FixedLengthArray<OneCallResultMinutely, 61>;
timezone: string;
timezone_offset: number;
}
export interface OneCallResultCurrent {
clouds: number;
dew_point: number;
dt: number;
feels_like: number;
humidity: number;
pressure: number;
sunrise: number;
sunset: number;
temp: number;
uvi: number;
visibility: number;
weather: [WeatherCondition];
wind_deg: number;
wind_speed: number;
}
export interface OneCallResultDaily {
clouds: number;
dew_point: number;
dt: number;
feels_like: {
day: number;
eve: number;
morn: number;
night: number;
};
humidity: number;
moon_phase: number;
moonrise: number;
moonset: number;
pop: number;
pressure: number;
rain: number;
sunrise: number;
sunset: number;
temp: {
day: number;
eve: number;
max: number;
min: number;
morn: number;
night: number;
};
uvi: number;
weather: [WeatherCondition];
wind_deg: number;
wind_gust: number;
wind_speed: number;
}
export interface OneCallResultHourly {
clouds: number;
dew_point: number;
dt: number;
feels_like: number;
humidity: number;
pop: number;
pressure: number;
temp: number;
uvi: number;
visibility: number;
weather: [WeatherCondition];
wind_deg: number;
wind_gust: number;
wind_speed: number;
}
export interface OneCallResultMinutely {
dt: number;
precipitation: number;
}
export declare type FiveDay3HourForecastData = (ByCityName | ByCityId | ByGeoGraphicCoordinates | ByZipCode) & Partial<WithAppId & WithV & WithLangModeUnits> & {
cnt?: number;
};
export interface FiveDay3HourForecastResult {
cod: number;
message: number;
cnt: number;
list: {
dt: number;
main: {
temp: T;
feels_like: T;
temp_min: T;
temp_max: T;
pressure: number;
sea_level: number;
grnd_level: number;
humidity: number;
};
weather: [WeatherCondition];
clouds: {
all: number;
};
wind: {
speed: number;
deg: number;
gust: number;
};
visibility: number;
pop: number;
rain?: {
"3h": number;
};
snow?: {
"3h": number;
};
sys: {
pod: "d" | "n";
};
dt_txt: string;
}[];
city: {
id: number;
name: string;
coord: {
lat: Latitude;
lon: Longitude;
};
country: string;
timezone: number;
sunrise: number;
sunset: number;
};
}
export declare type HourlyForecast4DaysData = (ByCityName | ByCityId | ByGeoGraphicCoordinates | ByZipCode) & Partial<WithAppId & WithV & WithLangModeUnits> & {
cnt?: number;
};
export interface HourlyForecast4DaysResult {
cod: number;
message: number;
cnt: number;
list: {
dt: number;
main: {
temp: T;
feels_like: T;
temp_min: T;
temp_max: T;
pressure: number;
sea_level: number;
grnd_level: number;
humidity: number;
temp_kf: number;
};
weather: [WeatherCondition];
clouds: {
all: number;
};
wind: {
speed: number;
deg: number;
gust: number;
};
visibility: number;
pop: number;
sys: {
pod: string;
};
dt_txt: string;
}[];
city: {
id: number;
name: string;
coord: {
lat: Latitude;
lon: Longitude;
};
country: string;
timezone: number;
sunrise: number;
sunset: number;
};
}
export declare type DailyForecast16DaysData = (ByCityName | ByCityId | ByGeoGraphicCoordinates | ByZipCode) & Partial<WithAppId & WithV & WithLangModeUnits> & {
cnt?: number;
};
export interface DailyForecast16DaysResult {
city: {
id: number;
name: string;
coord: {
lat: Latitude;
lon: Longitude;
};
country: string;
population: number;
timezone: number;
};
cod: number;
message: number;
cnt: number;
list: {
dt: number;
sunrise: number;
sunset: number;
temp: {
day: T;
min: T;
max: T;
night: T;
eve: T;
morn: T;
};
feels_like: {
day: T;
night: T;
eve: T;
morn: T;
};
pressure: number;
humidity: number;
weather: [WeatherCondition];
speed: number;
deg: number;
gust: number;
clouds: number;
pop: number;
}[];
}
export declare type ClimaticForeCast30DaysData = (ByCityName | ByCityId | ByGeoGraphicCoordinates | ByZipCode) & Partial<WithAppId & WithV & WithLangModeUnits> & {
cnt?: number;
};
export interface ClimaticForeCast30DaysResult {
cod: number;
city: {
id: number;
name: string;
coord: {
lat: Latitude;
lon: Longitude;
};
country: string;
};
message: string;
list: {
dt: number;
sunrise: number;
sunset: number;
temp: {
day: T;
min: T;
max: T;
night: T;
eve: T;
morn: T;
};
pressure: number;
humidity: number;
weather: [WeatherCondition];
speed: number;
deg: number;
clouds: number;
rain: number;
}[];
}
export declare type AirPollutionCurrentData = ByGeoGraphicCoordinates & Partial<WithAppId & WithV>;
export declare type AirPollutionForecastData = ByGeoGraphicCoordinates & Partial<WithAppId & WithV>;
export declare type AirPollutionHistoricalData = ByGeoGraphicCoordinates & Partial<WithAppId & WithV> & {
start: number;
end: number;
};
export interface AirPollutionResult {
coord: [
number,
number
];
list: {
dt: number;
main: {
aqi: 1 | 2 | 3 | 4 | 5;
};
components: {
co: number;
no: number;
no2: number;
o3: number;
so2: number;
pm2_5: number;
pm10: number;
nh3: number;
};
}[];
}