@mharj/openweathermap 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +19 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +30 -26
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { IOption, IResult } from '@luolapeikko/result-option';
|
|
3
1
|
import { IAsyncCache } from '@luolapeikko/cache-types';
|
|
2
|
+
import { IOption, IResult } from '@luolapeikko/result-option';
|
|
4
3
|
import { Loadable } from '@luolapeikko/ts-common';
|
|
4
|
+
import { z } from 'zod';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @internal
|
|
@@ -510,13 +510,6 @@ type WeatherDataV2 = z.infer<typeof weatherDataV2Schema>;
|
|
|
510
510
|
declare function isWeatherDataV2(data: unknown): data is WeatherDataV2;
|
|
511
511
|
declare function assertWeatherDataV2(data: unknown): asserts data is WeatherDataV2;
|
|
512
512
|
|
|
513
|
-
declare const CountryCodeList: readonly ["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"];
|
|
514
|
-
/**
|
|
515
|
-
* @internal
|
|
516
|
-
*/
|
|
517
|
-
declare const CountryCodeSchema: z.ZodEnum<["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"]>;
|
|
518
|
-
type CountryCode = z.infer<typeof CountryCodeSchema>;
|
|
519
|
-
|
|
520
513
|
/**
|
|
521
514
|
* Interface for OpenWeatherMap API v2 implementation.
|
|
522
515
|
*/
|
|
@@ -524,6 +517,13 @@ interface IOpenWeatherV2 {
|
|
|
524
517
|
dataWeatherApi: (params: URLSearchParams) => Promise<IResult<WeatherDataV2, SyntaxError | TypeError>>;
|
|
525
518
|
}
|
|
526
519
|
|
|
520
|
+
declare const CountryCodeList: readonly ["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"];
|
|
521
|
+
/**
|
|
522
|
+
* @internal
|
|
523
|
+
*/
|
|
524
|
+
declare const CountryCodeSchema: z.ZodEnum<["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"]>;
|
|
525
|
+
type CountryCode = z.infer<typeof CountryCodeSchema>;
|
|
526
|
+
|
|
527
527
|
/**
|
|
528
528
|
* Open Weather V2 API Common Options
|
|
529
529
|
* @default {lang: 'en', units: 'standard'} in API
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { IOption, IResult } from '@luolapeikko/result-option';
|
|
3
1
|
import { IAsyncCache } from '@luolapeikko/cache-types';
|
|
2
|
+
import { IOption, IResult } from '@luolapeikko/result-option';
|
|
4
3
|
import { Loadable } from '@luolapeikko/ts-common';
|
|
4
|
+
import { z } from 'zod';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @internal
|
|
@@ -510,13 +510,6 @@ type WeatherDataV2 = z.infer<typeof weatherDataV2Schema>;
|
|
|
510
510
|
declare function isWeatherDataV2(data: unknown): data is WeatherDataV2;
|
|
511
511
|
declare function assertWeatherDataV2(data: unknown): asserts data is WeatherDataV2;
|
|
512
512
|
|
|
513
|
-
declare const CountryCodeList: readonly ["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"];
|
|
514
|
-
/**
|
|
515
|
-
* @internal
|
|
516
|
-
*/
|
|
517
|
-
declare const CountryCodeSchema: z.ZodEnum<["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"]>;
|
|
518
|
-
type CountryCode = z.infer<typeof CountryCodeSchema>;
|
|
519
|
-
|
|
520
513
|
/**
|
|
521
514
|
* Interface for OpenWeatherMap API v2 implementation.
|
|
522
515
|
*/
|
|
@@ -524,6 +517,13 @@ interface IOpenWeatherV2 {
|
|
|
524
517
|
dataWeatherApi: (params: URLSearchParams) => Promise<IResult<WeatherDataV2, SyntaxError | TypeError>>;
|
|
525
518
|
}
|
|
526
519
|
|
|
520
|
+
declare const CountryCodeList: readonly ["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"];
|
|
521
|
+
/**
|
|
522
|
+
* @internal
|
|
523
|
+
*/
|
|
524
|
+
declare const CountryCodeSchema: z.ZodEnum<["af", "ax", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "au", "at", "az", "bs", "bh", "bd", "bb", "by", "be", "bz", "bj", "bm", "bt", "bo", "bq", "ba", "bw", "bv", "br", "io", "bn", "bg", "bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cl", "cn", "cx", "cc", "co", "km", "cg", "cd", "ck", "cr", "ci", "hr", "cu", "cw", "cy", "cz", "dk", "dj", "dm", "do", "ec", "eg", "sv", "gq", "er", "ee", "et", "fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", "gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "in", "id", "ir", "iq", "ie", "im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", "ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", "mx", "fm", "md", "mc", "mn", "me", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "nc", "nz", "ni", "ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", "pt", "pr", "qa", "re", "ro", "ru", "rw", "bl", "sh", "kn", "lc", "mf", "pm", "vc", "ws", "sm", "st", "sa", "sn", "rs", "sc", "sl", "sg", "sx", "sk", "si", "sb", "so", "za", "gs", "ss", "es", "lk", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", "tj", "tz", "th", "tl", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "us", "um", "uy", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "zm", "zw"]>;
|
|
525
|
+
type CountryCode = z.infer<typeof CountryCodeSchema>;
|
|
526
|
+
|
|
527
527
|
/**
|
|
528
528
|
* Open Weather V2 API Common Options
|
|
529
529
|
* @default {lang: 'en', units: 'standard'} in API
|
package/dist/index.js
CHANGED
|
@@ -18,8 +18,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
20
|
// src/index.ts
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
23
|
CountryCodeList: () => CountryCodeList,
|
|
24
24
|
CountryCodeSchema: () => CountryCodeSchema,
|
|
25
25
|
OpenWeatherV2: () => OpenWeatherV2,
|
|
@@ -34,7 +34,22 @@ __export(src_exports, {
|
|
|
34
34
|
weatherIdGroup: () => weatherIdGroup,
|
|
35
35
|
weatherIdSchema: () => weatherIdSchema
|
|
36
36
|
});
|
|
37
|
-
module.exports = __toCommonJS(
|
|
37
|
+
module.exports = __toCommonJS(index_exports);
|
|
38
|
+
|
|
39
|
+
// src/OpenWeatherV2.ts
|
|
40
|
+
var import_result_option2 = require("@luolapeikko/result-option");
|
|
41
|
+
|
|
42
|
+
// src/lib/fetchUtils.ts
|
|
43
|
+
function fetchErrorWrapper(err) {
|
|
44
|
+
if (err instanceof DOMException || err instanceof TypeError) {
|
|
45
|
+
return err;
|
|
46
|
+
} else {
|
|
47
|
+
return new TypeError(`Unknown error: ${String(err)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// src/types/v2/index.ts
|
|
52
|
+
var import_zod4 = require("zod");
|
|
38
53
|
|
|
39
54
|
// src/types/v2/Icon.ts
|
|
40
55
|
var import_zod = require("zod");
|
|
@@ -337,9 +352,6 @@ function getWeatherV2Description(id) {
|
|
|
337
352
|
return (0, import_result_option.undefinedOptionWrap)(weatherIdGroup.find((x) => x.id === id)?.description);
|
|
338
353
|
}
|
|
339
354
|
|
|
340
|
-
// src/types/v2/index.ts
|
|
341
|
-
var import_zod4 = require("zod");
|
|
342
|
-
|
|
343
355
|
// src/types/v2/Language.ts
|
|
344
356
|
var import_zod3 = require("zod");
|
|
345
357
|
var langCodes = [
|
|
@@ -713,18 +725,6 @@ var CountryCodeList = [
|
|
|
713
725
|
];
|
|
714
726
|
var CountryCodeSchema = import_zod5.z.enum(CountryCodeList);
|
|
715
727
|
|
|
716
|
-
// src/OpenWeatherV2.ts
|
|
717
|
-
var import_result_option2 = require("@luolapeikko/result-option");
|
|
718
|
-
|
|
719
|
-
// src/lib/fetchUtils.ts
|
|
720
|
-
function fetchErrorWrapper(err) {
|
|
721
|
-
if (err instanceof DOMException || err instanceof TypeError) {
|
|
722
|
-
return err;
|
|
723
|
-
} else {
|
|
724
|
-
return new TypeError(`Unknown error: ${String(err)}`);
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
|
|
728
728
|
// src/OpenWeatherV2.ts
|
|
729
729
|
var fetchResult = (0, import_result_option2.safeAsyncResultBuilder)(fetch);
|
|
730
730
|
function toParams(data) {
|
|
@@ -735,7 +735,7 @@ function toParams(data) {
|
|
|
735
735
|
}
|
|
736
736
|
function isJson(response) {
|
|
737
737
|
const contentType = response.headers.get("content-type");
|
|
738
|
-
return contentType
|
|
738
|
+
return contentType?.startsWith("application/json") ?? false;
|
|
739
739
|
}
|
|
740
740
|
function isOpenWeatherError(data) {
|
|
741
741
|
return typeof data === "object" && data !== null && "cod" in data && "message" in data;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/v2/Icon.ts","../src/types/v2/weatherIdGroup.ts","../src/types/v2/index.ts","../src/types/v2/Language.ts","../src/types/ISO3166-Countries.ts","../src/OpenWeatherV2.ts","../src/lib/fetchUtils.ts"],"sourcesContent":["export * from './OpenWeatherV2';\nexport * from './types';\nexport * from './lib';\nexport * from './interfaces';\n","import {z} from 'zod';\nconst dayIconList = ['01d', '02d', '03d', '04d', '09d', '10d', '11d', '13d', '50d'] as const;\n\n/**\n * @internal\n */\nconst dayIconListSchema = z.enum(dayIconList);\n\nexport type DayIcon = z.infer<typeof dayIconListSchema>;\n\nconst nightIconList = ['01n', '02n', '03n', '04n', '09n', '10n', '11n', '13n', '50n'] as const;\n\n/**\n * @internal\n */\nconst nightIconListSchema = z.enum(nightIconList);\nexport type NightIcon = z.infer<typeof nightIconListSchema>;\n\n/**\n * @internal\n */\nexport const iconSchema = z.union([dayIconListSchema, nightIconListSchema]);\n\nexport type Icon = z.infer<typeof iconSchema>;\n","import {type IOption, undefinedOptionWrap} from '@luolapeikko/result-option';\nimport {z} from 'zod';\n\n/**\n * This is a list of weather ids, groups and descriptions from OpenWeatherMap API\n */\nexport const weatherIdGroup = [\n\t{\n\t\tid: 200,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_rain',\n\t},\n\t{\n\t\tid: 201,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_rain',\n\t},\n\t{\n\t\tid: 202,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_rain',\n\t},\n\t{\n\t\tid: 210,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'light_thunderstorm',\n\t},\n\t{\n\t\tid: 211,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm',\n\t},\n\t{\n\t\tid: 212,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'heavy_thunderstorm',\n\t},\n\t{\n\t\tid: 221,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'ragged_thunderstorm',\n\t},\n\t{\n\t\tid: 230,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_drizzle',\n\t},\n\t{\n\t\tid: 231,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_drizzle',\n\t},\n\t{\n\t\tid: 232,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_drizzle',\n\t},\n\t{\n\t\tid: 300,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle',\n\t},\n\t{\n\t\tid: 301,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle',\n\t},\n\t{\n\t\tid: 302,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle',\n\t},\n\t{\n\t\tid: 310,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 311,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle_rain',\n\t},\n\t{\n\t\tid: 312,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 313,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 314,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 321,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_drizzle',\n\t},\n\t{\n\t\tid: 500,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_rain',\n\t},\n\t{\n\t\tid: 501,\n\t\tgroup: 'rain',\n\t\tdescription: 'moderate_rain',\n\t},\n\t{\n\t\tid: 502,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_rain',\n\t},\n\t{\n\t\tid: 503,\n\t\tgroup: 'rain',\n\t\tdescription: 'very_heavy_rain',\n\t},\n\t{\n\t\tid: 504,\n\t\tgroup: 'rain',\n\t\tdescription: 'extreme_rain',\n\t},\n\t{\n\t\tid: 511,\n\t\tgroup: 'rain',\n\t\tdescription: 'freezing_rain',\n\t},\n\t{\n\t\tid: 520,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 521,\n\t\tgroup: 'rain',\n\t\tdescription: 'shower_rain',\n\t},\n\t{\n\t\tid: 522,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 531,\n\t\tgroup: 'rain',\n\t\tdescription: 'ragged_shower_rain',\n\t},\n\t{\n\t\tid: 600,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_snow',\n\t},\n\t{\n\t\tid: 601,\n\t\tgroup: 'snow',\n\t\tdescription: 'snow',\n\t},\n\t{\n\t\tid: 602,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_snow',\n\t},\n\t{\n\t\tid: 611,\n\t\tgroup: 'snow',\n\t\tdescription: 'sleet',\n\t},\n\t{\n\t\tid: 612,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_sleet',\n\t},\n\t{\n\t\tid: 613,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_sleet',\n\t},\n\t{\n\t\tid: 615,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_rain_and_snow',\n\t},\n\t{\n\t\tid: 616,\n\t\tgroup: 'snow',\n\t\tdescription: 'rain_and_snow',\n\t},\n\t{\n\t\tid: 620,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_snow',\n\t},\n\t{\n\t\tid: 621,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_snow',\n\t},\n\t{\n\t\tid: 622,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_shower_snow',\n\t},\n\t{\n\t\tid: 701,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'mist',\n\t},\n\t{\n\t\tid: 711,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'smoke',\n\t},\n\t{\n\t\tid: 721,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'haze',\n\t},\n\t{\n\t\tid: 731,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand_dust_whirls',\n\t},\n\t{\n\t\tid: 741,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'fog',\n\t},\n\t{\n\t\tid: 751,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand',\n\t},\n\t{\n\t\tid: 761,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'dust',\n\t},\n\t{\n\t\tid: 762,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'volcanic_ash',\n\t},\n\t{\n\t\tid: 771,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'squalls',\n\t},\n\t{\n\t\tid: 781,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'tornado',\n\t},\n\t{\n\t\tid: 800,\n\t\tgroup: 'clear',\n\t\tdescription: 'clear_sky',\n\t},\n\t{\n\t\tid: 801,\n\t\tgroup: 'clouds',\n\t\tdescription: 'few_clouds_11-25_percent',\n\t},\n\t{\n\t\tid: 802,\n\t\tgroup: 'clouds',\n\t\tdescription: 'scattered_clouds_25-50_percent',\n\t},\n\t{\n\t\tid: 803,\n\t\tgroup: 'clouds',\n\t\tdescription: 'broken_clouds_51-84_percent',\n\t},\n\t{\n\t\tid: 804,\n\t\tgroup: 'clouds',\n\t\tdescription: 'overcast_clouds_85-100_percent',\n\t},\n] as const;\n\nexport type WeatherID = (typeof weatherIdGroup)[number]['id'];\n\n/**\n * WeatherGroup: \"clouds\" | \"rain\" | \"snow\" | \"thunderstorm\" | \"drizzle\" | \"atmosphere\" | \"clear\"\n */\nexport type WeatherGroup = (typeof weatherIdGroup)[number]['group'];\n\n/**\n * List for weather description key types from OpenWeatherMap API based on weather id.\n *\n * This list of keys can be used to translate weather id to human readable description with different languages.\n * @example\n * const i18Weather: Record<WeatherDescription, string> = {\n * clear_sky: 'Clear sky',\n * ...\n * }\n */\nexport type WeatherDescription = (typeof weatherIdGroup)[number]['description'];\n\n/**\n * Weather id schema\n * @internal\n */\nexport const weatherIdSchema = z.custom<WeatherID>((val) => {\n\tif (typeof val !== 'number') {\n\t\treturn {message: 'Expected a number', success: false};\n\t}\n\tif (!weatherIdGroup.find((x) => x.id === val)) {\n\t\treturn {message: 'Expected a valid weather id', success: false};\n\t}\n\treturn val;\n});\n\n/**\n * get weather description key from weather id\n * @param id - weather id\n * @returns {Option<WeatherDescription>} option for weather description key\n * @example\n * const weatherComponent = ({data}) => {\n * const key = getWeatherV2Description(data.weather[0]?.id).unwrapOr('unknown');\n * return (\n * <div>\n * {t(`weather:${key}`}\n * </div>\n * );\n * }\n */\nexport function getWeatherV2Description(id: WeatherID | undefined): IOption<WeatherDescription> {\n\treturn undefinedOptionWrap(weatherIdGroup.find((x) => x.id === id)?.description);\n}\n","import {iconSchema} from './Icon';\nimport {weatherIdSchema} from './weatherIdGroup';\nimport {z} from 'zod';\nexport * from './Icon';\nexport * from './Language';\nexport * from './weatherIdGroup';\n\nconst coordSchema = z.object({\n\tlon: z.number(),\n\tlat: z.number(),\n});\n\nconst weatherSchema = z.object({\n\tdescription: z.string(),\n\ticon: iconSchema,\n\tid: weatherIdSchema,\n\tmain: z.string(),\n});\n\nconst mainSchema = z.object({\n\tgrnd_level: z.number().optional(),\n\thumidity: z.number(),\n\tpressure: z.number(),\n\tsea_level: z.number().optional(),\n\ttemp: z.number(),\n\ttemp_max: z.number(),\n\ttemp_min: z.number(),\n});\n\nconst windSchema = z.object({\n\tspeed: z.number(),\n\tdeg: z.number(),\n});\n\nconst rainSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst snowSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst sysSchema = z.object({\n\tcountry: z.string(),\n\tid: z.number().optional(),\n\tmessage: z.number().optional(),\n\tsunrise: z.number(),\n\tsunset: z.number(),\n\ttype: z.number().optional(),\n});\n\n/**\n * @internal\n */\nexport const weatherDataV2Schema = z.object({\n\tbase: z.string(),\n\tclouds: z.object({\n\t\tall: z.number(),\n\t}),\n\tcod: z.number(),\n\tcoord: coordSchema,\n\tdt: z.number(),\n\tid: z.number(),\n\tmain: mainSchema,\n\tname: z.string(),\n\train: rainSchema.optional(),\n\tsnow: snowSchema.optional(),\n\tsys: sysSchema,\n\ttimezone: z.number(),\n\tvisibility: z.number(),\n\tweather: z.array(weatherSchema),\n\twind: windSchema,\n});\n\nexport type WeatherDataV2 = z.infer<typeof weatherDataV2Schema>;\n\nexport function isWeatherDataV2(data: unknown): data is WeatherDataV2 {\n\treturn weatherDataV2Schema.safeParse(data).success;\n}\n\nexport function assertWeatherDataV2(data: unknown): asserts data is WeatherDataV2 {\n\tweatherDataV2Schema.parse(data);\n}\n","import {z} from 'zod';\nexport const langCodes = [\n\t'af',\n\t'al',\n\t'ar',\n\t'az',\n\t'bg',\n\t'ca',\n\t'cz',\n\t'da',\n\t'de',\n\t'el',\n\t'en',\n\t'eu',\n\t'fa',\n\t'fi',\n\t'fr',\n\t'gl',\n\t'he',\n\t'hi',\n\t'hr',\n\t'hu',\n\t'id',\n\t'it',\n\t'ja',\n\t'kr',\n\t'la',\n\t'lt',\n\t'mk',\n\t'no',\n\t'nl',\n\t'pl',\n\t'pt',\n\t'pt',\n\t'ro',\n\t'ru',\n\t'sv',\n\t'sk',\n\t'sl',\n\t'sp',\n\t'sr',\n\t'th',\n\t'tr',\n\t'ua',\n\t'vi',\n\t'zh_cn',\n\t'zh_tw',\n\t'zu',\n] as const;\nexport const langCodeSchema = z.enum(langCodes);\nexport type LangCode = z.infer<typeof langCodeSchema>;\n","import {z} from 'zod';\n\nexport const CountryCodeList = [\n\t'af',\n\t'ax',\n\t'al',\n\t'dz',\n\t'as',\n\t'ad',\n\t'ao',\n\t'ai',\n\t'aq',\n\t'ag',\n\t'ar',\n\t'am',\n\t'aw',\n\t'au',\n\t'at',\n\t'az',\n\t'bs',\n\t'bh',\n\t'bd',\n\t'bb',\n\t'by',\n\t'be',\n\t'bz',\n\t'bj',\n\t'bm',\n\t'bt',\n\t'bo',\n\t'bq',\n\t'ba',\n\t'bw',\n\t'bv',\n\t'br',\n\t'io',\n\t'bn',\n\t'bg',\n\t'bf',\n\t'bi',\n\t'kh',\n\t'cm',\n\t'ca',\n\t'cv',\n\t'ky',\n\t'cf',\n\t'td',\n\t'cl',\n\t'cn',\n\t'cx',\n\t'cc',\n\t'co',\n\t'km',\n\t'cg',\n\t'cd',\n\t'ck',\n\t'cr',\n\t'ci',\n\t'hr',\n\t'cu',\n\t'cw',\n\t'cy',\n\t'cz',\n\t'dk',\n\t'dj',\n\t'dm',\n\t'do',\n\t'ec',\n\t'eg',\n\t'sv',\n\t'gq',\n\t'er',\n\t'ee',\n\t'et',\n\t'fk',\n\t'fo',\n\t'fj',\n\t'fi',\n\t'fr',\n\t'gf',\n\t'pf',\n\t'tf',\n\t'ga',\n\t'gm',\n\t'ge',\n\t'de',\n\t'gh',\n\t'gi',\n\t'gr',\n\t'gl',\n\t'gd',\n\t'gp',\n\t'gu',\n\t'gt',\n\t'gg',\n\t'gn',\n\t'gw',\n\t'gy',\n\t'ht',\n\t'hm',\n\t'va',\n\t'hn',\n\t'hk',\n\t'hu',\n\t'is',\n\t'in',\n\t'id',\n\t'ir',\n\t'iq',\n\t'ie',\n\t'im',\n\t'il',\n\t'it',\n\t'jm',\n\t'jp',\n\t'je',\n\t'jo',\n\t'kz',\n\t'ke',\n\t'ki',\n\t'kp',\n\t'kr',\n\t'kw',\n\t'kg',\n\t'la',\n\t'lv',\n\t'lb',\n\t'ls',\n\t'lr',\n\t'ly',\n\t'li',\n\t'lt',\n\t'lu',\n\t'mo',\n\t'mk',\n\t'mg',\n\t'mw',\n\t'my',\n\t'mv',\n\t'ml',\n\t'mt',\n\t'mh',\n\t'mq',\n\t'mr',\n\t'mu',\n\t'yt',\n\t'mx',\n\t'fm',\n\t'md',\n\t'mc',\n\t'mn',\n\t'me',\n\t'ms',\n\t'ma',\n\t'mz',\n\t'mm',\n\t'na',\n\t'nr',\n\t'np',\n\t'nl',\n\t'nc',\n\t'nz',\n\t'ni',\n\t'ne',\n\t'ng',\n\t'nu',\n\t'nf',\n\t'mp',\n\t'no',\n\t'om',\n\t'pk',\n\t'pw',\n\t'ps',\n\t'pa',\n\t'pg',\n\t'py',\n\t'pe',\n\t'ph',\n\t'pn',\n\t'pl',\n\t'pt',\n\t'pr',\n\t'qa',\n\t're',\n\t'ro',\n\t'ru',\n\t'rw',\n\t'bl',\n\t'sh',\n\t'kn',\n\t'lc',\n\t'mf',\n\t'pm',\n\t'vc',\n\t'ws',\n\t'sm',\n\t'st',\n\t'sa',\n\t'sn',\n\t'rs',\n\t'sc',\n\t'sl',\n\t'sg',\n\t'sx',\n\t'sk',\n\t'si',\n\t'sb',\n\t'so',\n\t'za',\n\t'gs',\n\t'ss',\n\t'es',\n\t'lk',\n\t'sd',\n\t'sr',\n\t'sj',\n\t'sz',\n\t'se',\n\t'ch',\n\t'sy',\n\t'tw',\n\t'tj',\n\t'tz',\n\t'th',\n\t'tl',\n\t'tg',\n\t'tk',\n\t'to',\n\t'tt',\n\t'tn',\n\t'tr',\n\t'tm',\n\t'tc',\n\t'tv',\n\t'ug',\n\t'ua',\n\t'ae',\n\t'gb',\n\t'us',\n\t'um',\n\t'uy',\n\t'uz',\n\t'vu',\n\t've',\n\t'vn',\n\t'vg',\n\t'vi',\n\t'wf',\n\t'eh',\n\t'ye',\n\t'zm',\n\t'zw',\n] as const;\n/**\n * @internal\n */\nexport const CountryCodeSchema = z.enum(CountryCodeList);\nexport type CountryCode = z.infer<typeof CountryCodeSchema>;\n","import {assertWeatherDataV2, type CountryCode, type LangCode, type WeatherDataV2} from './types';\nimport {Err, type IResult, Ok, safeAsyncResult, safeAsyncResultBuilder} from '@luolapeikko/result-option';\nimport {fetchErrorWrapper} from './lib/fetchUtils';\nimport {type IAsyncCache} from '@luolapeikko/cache-types';\nimport type {IOpenWeatherV2} from './interfaces/IOpenWeatherV2';\nimport {type Loadable} from '@luolapeikko/ts-common';\n\nconst fetchResult = safeAsyncResultBuilder<Parameters<typeof fetch>, Response, SyntaxError | TypeError>(fetch);\n\nfunction toParams(data: Record<string, string | number | boolean>): Record<string, string> {\n\treturn Object.entries(data).reduce<Record<string, string>>((acc, [key, value]) => {\n\t\tacc[key] = String(value);\n\t\treturn acc;\n\t}, {});\n}\n\nfunction isJson(response: Response): boolean {\n\tconst contentType = response.headers.get('content-type');\n\treturn (contentType && contentType.startsWith('application/json')) || false;\n}\n\nfunction isOpenWeatherError(data: unknown): data is {cod: string; message: string} {\n\treturn typeof data === 'object' && data !== null && 'cod' in data && 'message' in data;\n}\n\n/**\n * Open Weather V2 API Common Options\n * @default {lang: 'en', units: 'standard'} in API\n * @example\n * {lang: 'fi', units: 'metric'}\n * @since v0.0.1\n */\nexport type OpenWeatherV2CommonOptions = {\n\t/**\n\t * Language code\n\t */\n\tlang: LangCode;\n\t/**\n\t * Weather units\n\t */\n\tunits: 'standard' | 'metric' | 'imperial';\n};\n\nconst defaultCommonOptions = {\n\tlang: 'en',\n\tunits: 'standard',\n} satisfies OpenWeatherV2CommonOptions;\n\nfunction buildOpts(opts: Partial<OpenWeatherV2CommonOptions>): OpenWeatherV2CommonOptions {\n\treturn Object.assign({}, defaultCommonOptions, opts);\n}\n\nconst basePath = 'https://api.openweathermap.org/data/2.5/weather';\n\nfunction buildUrl(params: URLSearchParams): string {\n\treturn `${basePath}?${params.toString()}`;\n}\n\nfunction buildLogUrl(params: URLSearchParams): string {\n\tconst logParams = new URLSearchParams(params);\n\tlogParams.set('appid', '***');\n\treturn buildUrl(logParams);\n}\n\nconst defaultImplementation: IOpenWeatherV2 = {\n\tdataWeatherApi: async (params: URLSearchParams): Promise<IResult<WeatherDataV2, SyntaxError | TypeError>> => {\n\t\tconst logUrl = buildLogUrl(params);\n\t\tconst result = await fetchResult(buildUrl(params));\n\t\tif (!result.isOk) {\n\t\t\treturn Err(result.err());\n\t\t}\n\t\tconst res = result.ok();\n\t\tif (!res.ok) {\n\t\t\tif (isJson(res)) {\n\t\t\t\tconst data: unknown = await res.json();\n\t\t\t\tif (isOpenWeatherError(data)) {\n\t\t\t\t\treturn Err(new TypeError(`OpenWeatherV2 error: ${data.message} from ${logUrl}`));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 http error: ${res.status} ${res.statusText} from ${logUrl}`));\n\t\t}\n\t\tif (!isJson(res)) {\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 response is not json payload from ${logUrl}`));\n\t\t}\n\t\tconst jsonResult = await safeAsyncResult<unknown, SyntaxError>(res.json());\n\t\tif (!jsonResult.isOk) {\n\t\t\treturn Err(jsonResult.err());\n\t\t}\n\t\tconst data = jsonResult.ok();\n\t\tassertWeatherDataV2(data);\n\t\treturn Ok<WeatherDataV2, SyntaxError | TypeError>(data);\n\t},\n};\n\n/**\n * Cache key types\n * @since v0.1.0\n */\ntype CacheKey = `q:${string}:${string}` | `id:${number}` | `latlon:${number}:${number}`;\n\n/**\n * Open Weather V2 API\n * @example\n * const weather = new OpenWeatherV2('your-api-key');\n *\n * const cache = new ExpireCache<WeatherDataV2>(undefined, undefined, 900000); // data 15 minutes in cache\n * const weather = new OpenWeatherV2(() => Promise.resolve('your-api-key'), cache);\n *\n * const data: WeatherDataV2 = (await weather.getWeatherById(2643743)).unwrap(); // throws if error\n * const data: WeatherDataV2 | undefined = (await weather.getWeatherByCity('Helsinki', 'fi')).ok();\n *\n * const result: Result<WeatherDataV2> = await weather.getWeatherByLatLon(60.1699, 24.9384);\n * result.match({\n * Ok: (data: WeatherDataV2) => console.log(data),\n * Err: (err: DOMException | TypeError) => console.error(err),\n * });\n *\n * if(result.isOk) {\n * const data: WeatherDataV2 = data.ok();\n * } else {\n * const err: DOMException | TypeError = data.err();\n * }\n * @since v0.0.1\n */\nexport class OpenWeatherV2 {\n\tprivate cache: IAsyncCache<WeatherDataV2> | undefined;\n\tprivate loadableApiKey: Loadable<string>;\n\tprivate apiHandler: IOpenWeatherV2;\n\tprivate fetchPromiseMap = new Map<string, Promise<IResult<WeatherDataV2, DOMException | TypeError>>>();\n\t/**\n\t * OpenWeatherV2 constructor\n\t * @param {Loadable<string>} loadableApiKey - Loadable API key\n\t * @param {ICacheOrAsync<WeatherDataV2>=} cache - optional async cache implementation\n\t * @param {IOpenWeatherV2=} apiHandler - optional API handler implementation for mocking\n\t */\n\tconstructor(loadableApiKey: Loadable<string>, cache?: IAsyncCache<WeatherDataV2>, apiHandler: IOpenWeatherV2 = defaultImplementation) {\n\t\tthis.loadableApiKey = loadableApiKey;\n\t\tthis.cache = cache;\n\t\tthis.apiHandler = apiHandler;\n\t}\n\n\t/**\n\t * get weather by Id\n\t * @param {number} id - Weather station ID\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherById(id: number, currentOpts: Partial<OpenWeatherV2CommonOptions> = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`id:${id}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('id', String(id));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with city name and optional country code\n\t * @param {string} city - City name\n\t * @param {countryCode=} countryCode - Optional Country code\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByCity(\n\t\tcity: string,\n\t\tcountryCode?: CountryCode,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`q:${city}:${countryCode}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('q', countryCode ? `${city},${countryCode}` : city);\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with latitude and longitude with Result\n\t * @param {number} lat - Latitude\n\t * @param {number} lon - Longitude\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByLatLon(\n\t\tlat: number,\n\t\tlon: number,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`latlon:${lat}:${lon}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('lat', String(lat));\n\t\t\t\tparams.append('lon', String(lon));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\tprivate async buildBaseParams(options: OpenWeatherV2CommonOptions): Promise<URLSearchParams> {\n\t\tconst apiKey = await (typeof this.loadableApiKey === 'function' ? this.loadableApiKey() : this.loadableApiKey);\n\t\tconst params = new URLSearchParams(toParams(options));\n\t\tparams.append('appid', apiKey);\n\t\treturn params;\n\t}\n\n\t/**\n\t * build base cache key\n\t * @param main - main cache key prefix\n\t * @param opts - OpenWeatherV2CommonOptions\n\t * @returns {string} cache key\n\t */\n\tprivate buildBaseCacheKey(main: CacheKey, {lang, units}: OpenWeatherV2CommonOptions): `${CacheKey}:${LangCode}:${'standard' | 'metric' | 'imperial'}` {\n\t\treturn `${main}:${lang}:${units}`;\n\t}\n\n\tprivate async handleFetch(cacheKey: string, params: URLSearchParams, opts: OpenWeatherV2CommonOptions): Promise<WeatherDataV2> {\n\t\t// allow only one fetch per cacheKey until it is resolved\n\t\tlet promiseResult = this.fetchPromiseMap.get(cacheKey);\n\t\tif (!promiseResult) {\n\t\t\tpromiseResult = this.apiHandler.dataWeatherApi(params);\n\t\t\tthis.fetchPromiseMap.set(cacheKey, promiseResult);\n\t\t\tawait promiseResult;\n\t\t\tthis.fetchPromiseMap.delete(cacheKey); // clear promise from map\n\t\t}\n\t\tconst dataApiResult = await promiseResult;\n\t\tconst data: WeatherDataV2 = dataApiResult.unwrap();\n\t\tassertWeatherDataV2(data);\n\t\tif (this.cache) {\n\t\t\tawait this.cache.set(cacheKey, data);\n\t\t\tif (!cacheKey.startsWith('id:')) {\n\t\t\t\t// update id cache too\n\t\t\t\tawait this.cache.set(this.buildBaseCacheKey(`id:${data.id}`, opts), data);\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n}\n","/**\n * Ensures that the error is a DOMException or TypeError.\n * @internal\n */\nexport function fetchErrorWrapper(err: unknown): DOMException | TypeError {\n\tif (err instanceof DOMException || err instanceof TypeError) {\n\t\treturn err;\n\t} else {\n\t\treturn new TypeError(`Unknown error: ${String(err)}`);\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAgB;AAChB,IAAM,cAAc,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKlF,IAAM,oBAAoB,aAAE,KAAK,WAAW;AAI5C,IAAM,gBAAgB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKpF,IAAM,sBAAsB,aAAE,KAAK,aAAa;AAMzC,IAAM,aAAa,aAAE,MAAM,CAAC,mBAAmB,mBAAmB,CAAC;;;ACrB1E,2BAAgD;AAChD,IAAAA,cAAgB;AAKT,IAAM,iBAAiB;AAAA,EAC7B;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA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CA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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","names":["import_zod","import_zod","import_zod","import_zod","import_result_option","data"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/OpenWeatherV2.ts","../src/lib/fetchUtils.ts","../src/types/v2/index.ts","../src/types/v2/Icon.ts","../src/types/v2/weatherIdGroup.ts","../src/types/v2/Language.ts","../src/types/ISO3166-Countries.ts"],"sourcesContent":["export * from './OpenWeatherV2';\nexport * from './types';\nexport * from './lib';\nexport * from './interfaces';\n","import {type IAsyncCache} from '@luolapeikko/cache-types';\nimport {Err, type IResult, Ok, safeAsyncResult, safeAsyncResultBuilder} from '@luolapeikko/result-option';\nimport {type Loadable} from '@luolapeikko/ts-common';\nimport type {IOpenWeatherV2} from './interfaces/IOpenWeatherV2';\nimport {fetchErrorWrapper} from './lib/fetchUtils';\nimport {assertWeatherDataV2, type CountryCode, type LangCode, type WeatherDataV2} from './types';\n\nconst fetchResult = safeAsyncResultBuilder<Parameters<typeof fetch>, Response, SyntaxError | TypeError>(fetch);\n\nfunction toParams(data: Record<string, string | number | boolean>): Record<string, string> {\n\treturn Object.entries(data).reduce<Record<string, string>>((acc, [key, value]) => {\n\t\tacc[key] = String(value);\n\t\treturn acc;\n\t}, {});\n}\n\nfunction isJson(response: Response): boolean {\n\tconst contentType = response.headers.get('content-type');\n\treturn contentType?.startsWith('application/json') ?? false;\n}\n\nfunction isOpenWeatherError(data: unknown): data is {cod: string; message: string} {\n\treturn typeof data === 'object' && data !== null && 'cod' in data && 'message' in data;\n}\n\n/**\n * Open Weather V2 API Common Options\n * @default {lang: 'en', units: 'standard'} in API\n * @example\n * {lang: 'fi', units: 'metric'}\n * @since v0.0.1\n */\nexport type OpenWeatherV2CommonOptions = {\n\t/**\n\t * Language code\n\t */\n\tlang: LangCode;\n\t/**\n\t * Weather units\n\t */\n\tunits: 'standard' | 'metric' | 'imperial';\n};\n\nconst defaultCommonOptions = {\n\tlang: 'en',\n\tunits: 'standard',\n} satisfies OpenWeatherV2CommonOptions;\n\nfunction buildOpts(opts: Partial<OpenWeatherV2CommonOptions>): OpenWeatherV2CommonOptions {\n\treturn Object.assign({}, defaultCommonOptions, opts);\n}\n\nconst basePath = 'https://api.openweathermap.org/data/2.5/weather';\n\nfunction buildUrl(params: URLSearchParams): string {\n\treturn `${basePath}?${params.toString()}`;\n}\n\nfunction buildLogUrl(params: URLSearchParams): string {\n\tconst logParams = new URLSearchParams(params);\n\tlogParams.set('appid', '***');\n\treturn buildUrl(logParams);\n}\n\nconst defaultImplementation: IOpenWeatherV2 = {\n\tdataWeatherApi: async (params: URLSearchParams): Promise<IResult<WeatherDataV2, SyntaxError | TypeError>> => {\n\t\tconst logUrl = buildLogUrl(params);\n\t\tconst result = await fetchResult(buildUrl(params));\n\t\tif (!result.isOk) {\n\t\t\treturn Err(result.err());\n\t\t}\n\t\tconst res = result.ok();\n\t\tif (!res.ok) {\n\t\t\tif (isJson(res)) {\n\t\t\t\tconst data: unknown = await res.json();\n\t\t\t\tif (isOpenWeatherError(data)) {\n\t\t\t\t\treturn Err(new TypeError(`OpenWeatherV2 error: ${data.message} from ${logUrl}`));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 http error: ${res.status} ${res.statusText} from ${logUrl}`));\n\t\t}\n\t\tif (!isJson(res)) {\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 response is not json payload from ${logUrl}`));\n\t\t}\n\t\tconst jsonResult = await safeAsyncResult<unknown, SyntaxError>(res.json());\n\t\tif (!jsonResult.isOk) {\n\t\t\treturn Err(jsonResult.err());\n\t\t}\n\t\tconst data = jsonResult.ok();\n\t\tassertWeatherDataV2(data);\n\t\treturn Ok<WeatherDataV2, SyntaxError | TypeError>(data);\n\t},\n};\n\n/**\n * Cache key types\n * @since v0.1.0\n */\ntype CacheKey = `q:${string}:${string}` | `id:${number}` | `latlon:${number}:${number}`;\n\n/**\n * Open Weather V2 API\n * @example\n * const weather = new OpenWeatherV2('your-api-key');\n *\n * const cache = new ExpireCache<WeatherDataV2>(undefined, undefined, 900000); // data 15 minutes in cache\n * const weather = new OpenWeatherV2(() => Promise.resolve('your-api-key'), cache);\n *\n * const data: WeatherDataV2 = (await weather.getWeatherById(2643743)).unwrap(); // throws if error\n * const data: WeatherDataV2 | undefined = (await weather.getWeatherByCity('Helsinki', 'fi')).ok();\n *\n * const result: Result<WeatherDataV2> = await weather.getWeatherByLatLon(60.1699, 24.9384);\n * result.match({\n * Ok: (data: WeatherDataV2) => console.log(data),\n * Err: (err: DOMException | TypeError) => console.error(err),\n * });\n *\n * if(result.isOk) {\n * const data: WeatherDataV2 = data.ok();\n * } else {\n * const err: DOMException | TypeError = data.err();\n * }\n * @since v0.0.1\n */\nexport class OpenWeatherV2 {\n\tprivate cache: IAsyncCache<WeatherDataV2> | undefined;\n\tprivate loadableApiKey: Loadable<string>;\n\tprivate apiHandler: IOpenWeatherV2;\n\tprivate fetchPromiseMap = new Map<string, Promise<IResult<WeatherDataV2, DOMException | TypeError>>>();\n\t/**\n\t * OpenWeatherV2 constructor\n\t * @param {Loadable<string>} loadableApiKey - Loadable API key\n\t * @param {ICacheOrAsync<WeatherDataV2>=} cache - optional async cache implementation\n\t * @param {IOpenWeatherV2=} apiHandler - optional API handler implementation for mocking\n\t */\n\tconstructor(loadableApiKey: Loadable<string>, cache?: IAsyncCache<WeatherDataV2>, apiHandler: IOpenWeatherV2 = defaultImplementation) {\n\t\tthis.loadableApiKey = loadableApiKey;\n\t\tthis.cache = cache;\n\t\tthis.apiHandler = apiHandler;\n\t}\n\n\t/**\n\t * get weather by Id\n\t * @param {number} id - Weather station ID\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherById(id: number, currentOpts: Partial<OpenWeatherV2CommonOptions> = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`id:${id}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('id', String(id));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with city name and optional country code\n\t * @param {string} city - City name\n\t * @param {countryCode=} countryCode - Optional Country code\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByCity(\n\t\tcity: string,\n\t\tcountryCode?: CountryCode,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`q:${city}:${countryCode}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('q', countryCode ? `${city},${countryCode}` : city);\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with latitude and longitude with Result\n\t * @param {number} lat - Latitude\n\t * @param {number} lon - Longitude\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByLatLon(\n\t\tlat: number,\n\t\tlon: number,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`latlon:${lat}:${lon}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('lat', String(lat));\n\t\t\t\tparams.append('lon', String(lon));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\tprivate async buildBaseParams(options: OpenWeatherV2CommonOptions): Promise<URLSearchParams> {\n\t\tconst apiKey = await (typeof this.loadableApiKey === 'function' ? this.loadableApiKey() : this.loadableApiKey);\n\t\tconst params = new URLSearchParams(toParams(options));\n\t\tparams.append('appid', apiKey);\n\t\treturn params;\n\t}\n\n\t/**\n\t * build base cache key\n\t * @param main - main cache key prefix\n\t * @param opts - OpenWeatherV2CommonOptions\n\t * @returns {string} cache key\n\t */\n\tprivate buildBaseCacheKey(main: CacheKey, {lang, units}: OpenWeatherV2CommonOptions): `${CacheKey}:${LangCode}:${'standard' | 'metric' | 'imperial'}` {\n\t\treturn `${main}:${lang}:${units}`;\n\t}\n\n\tprivate async handleFetch(cacheKey: string, params: URLSearchParams, opts: OpenWeatherV2CommonOptions): Promise<WeatherDataV2> {\n\t\t// allow only one fetch per cacheKey until it is resolved\n\t\tlet promiseResult = this.fetchPromiseMap.get(cacheKey);\n\t\tif (!promiseResult) {\n\t\t\tpromiseResult = this.apiHandler.dataWeatherApi(params);\n\t\t\tthis.fetchPromiseMap.set(cacheKey, promiseResult);\n\t\t\tawait promiseResult;\n\t\t\tthis.fetchPromiseMap.delete(cacheKey); // clear promise from map\n\t\t}\n\t\tconst dataApiResult = await promiseResult;\n\t\tconst data: WeatherDataV2 = dataApiResult.unwrap();\n\t\tassertWeatherDataV2(data);\n\t\tif (this.cache) {\n\t\t\tawait this.cache.set(cacheKey, data);\n\t\t\tif (!cacheKey.startsWith('id:')) {\n\t\t\t\t// update id cache too\n\t\t\t\tawait this.cache.set(this.buildBaseCacheKey(`id:${data.id}`, opts), data);\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n}\n","/**\n * Ensures that the error is a DOMException or TypeError.\n * @internal\n */\nexport function fetchErrorWrapper(err: unknown): DOMException | TypeError {\n\tif (err instanceof DOMException || err instanceof TypeError) {\n\t\treturn err;\n\t} else {\n\t\treturn new TypeError(`Unknown error: ${String(err)}`);\n\t}\n}\n","import {z} from 'zod';\nimport {iconSchema} from './Icon';\nimport {weatherIdSchema} from './weatherIdGroup';\nexport * from './Icon';\nexport * from './Language';\nexport * from './weatherIdGroup';\n\nconst coordSchema = z.object({\n\tlon: z.number(),\n\tlat: z.number(),\n});\n\nconst weatherSchema = z.object({\n\tdescription: z.string(),\n\ticon: iconSchema,\n\tid: weatherIdSchema,\n\tmain: z.string(),\n});\n\nconst mainSchema = z.object({\n\tgrnd_level: z.number().optional(),\n\thumidity: z.number(),\n\tpressure: z.number(),\n\tsea_level: z.number().optional(),\n\ttemp: z.number(),\n\ttemp_max: z.number(),\n\ttemp_min: z.number(),\n});\n\nconst windSchema = z.object({\n\tspeed: z.number(),\n\tdeg: z.number(),\n});\n\nconst rainSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst snowSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst sysSchema = z.object({\n\tcountry: z.string(),\n\tid: z.number().optional(),\n\tmessage: z.number().optional(),\n\tsunrise: z.number(),\n\tsunset: z.number(),\n\ttype: z.number().optional(),\n});\n\n/**\n * @internal\n */\nexport const weatherDataV2Schema = z.object({\n\tbase: z.string(),\n\tclouds: z.object({\n\t\tall: z.number(),\n\t}),\n\tcod: z.number(),\n\tcoord: coordSchema,\n\tdt: z.number(),\n\tid: z.number(),\n\tmain: mainSchema,\n\tname: z.string(),\n\train: rainSchema.optional(),\n\tsnow: snowSchema.optional(),\n\tsys: sysSchema,\n\ttimezone: z.number(),\n\tvisibility: z.number(),\n\tweather: z.array(weatherSchema),\n\twind: windSchema,\n});\n\nexport type WeatherDataV2 = z.infer<typeof weatherDataV2Schema>;\n\nexport function isWeatherDataV2(data: unknown): data is WeatherDataV2 {\n\treturn weatherDataV2Schema.safeParse(data).success;\n}\n\nexport function assertWeatherDataV2(data: unknown): asserts data is WeatherDataV2 {\n\tweatherDataV2Schema.parse(data);\n}\n","import {z} from 'zod';\nconst dayIconList = ['01d', '02d', '03d', '04d', '09d', '10d', '11d', '13d', '50d'] as const;\n\n/**\n * @internal\n */\nconst dayIconListSchema = z.enum(dayIconList);\n\nexport type DayIcon = z.infer<typeof dayIconListSchema>;\n\nconst nightIconList = ['01n', '02n', '03n', '04n', '09n', '10n', '11n', '13n', '50n'] as const;\n\n/**\n * @internal\n */\nconst nightIconListSchema = z.enum(nightIconList);\nexport type NightIcon = z.infer<typeof nightIconListSchema>;\n\n/**\n * @internal\n */\nexport const iconSchema = z.union([dayIconListSchema, nightIconListSchema]);\n\nexport type Icon = z.infer<typeof iconSchema>;\n","import {type IOption, undefinedOptionWrap} from '@luolapeikko/result-option';\nimport {z} from 'zod';\n\n/**\n * This is a list of weather ids, groups and descriptions from OpenWeatherMap API\n */\nexport const weatherIdGroup = [\n\t{\n\t\tid: 200,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_rain',\n\t},\n\t{\n\t\tid: 201,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_rain',\n\t},\n\t{\n\t\tid: 202,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_rain',\n\t},\n\t{\n\t\tid: 210,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'light_thunderstorm',\n\t},\n\t{\n\t\tid: 211,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm',\n\t},\n\t{\n\t\tid: 212,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'heavy_thunderstorm',\n\t},\n\t{\n\t\tid: 221,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'ragged_thunderstorm',\n\t},\n\t{\n\t\tid: 230,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_drizzle',\n\t},\n\t{\n\t\tid: 231,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_drizzle',\n\t},\n\t{\n\t\tid: 232,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_drizzle',\n\t},\n\t{\n\t\tid: 300,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle',\n\t},\n\t{\n\t\tid: 301,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle',\n\t},\n\t{\n\t\tid: 302,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle',\n\t},\n\t{\n\t\tid: 310,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 311,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle_rain',\n\t},\n\t{\n\t\tid: 312,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 313,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 314,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 321,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_drizzle',\n\t},\n\t{\n\t\tid: 500,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_rain',\n\t},\n\t{\n\t\tid: 501,\n\t\tgroup: 'rain',\n\t\tdescription: 'moderate_rain',\n\t},\n\t{\n\t\tid: 502,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_rain',\n\t},\n\t{\n\t\tid: 503,\n\t\tgroup: 'rain',\n\t\tdescription: 'very_heavy_rain',\n\t},\n\t{\n\t\tid: 504,\n\t\tgroup: 'rain',\n\t\tdescription: 'extreme_rain',\n\t},\n\t{\n\t\tid: 511,\n\t\tgroup: 'rain',\n\t\tdescription: 'freezing_rain',\n\t},\n\t{\n\t\tid: 520,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 521,\n\t\tgroup: 'rain',\n\t\tdescription: 'shower_rain',\n\t},\n\t{\n\t\tid: 522,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 531,\n\t\tgroup: 'rain',\n\t\tdescription: 'ragged_shower_rain',\n\t},\n\t{\n\t\tid: 600,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_snow',\n\t},\n\t{\n\t\tid: 601,\n\t\tgroup: 'snow',\n\t\tdescription: 'snow',\n\t},\n\t{\n\t\tid: 602,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_snow',\n\t},\n\t{\n\t\tid: 611,\n\t\tgroup: 'snow',\n\t\tdescription: 'sleet',\n\t},\n\t{\n\t\tid: 612,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_sleet',\n\t},\n\t{\n\t\tid: 613,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_sleet',\n\t},\n\t{\n\t\tid: 615,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_rain_and_snow',\n\t},\n\t{\n\t\tid: 616,\n\t\tgroup: 'snow',\n\t\tdescription: 'rain_and_snow',\n\t},\n\t{\n\t\tid: 620,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_snow',\n\t},\n\t{\n\t\tid: 621,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_snow',\n\t},\n\t{\n\t\tid: 622,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_shower_snow',\n\t},\n\t{\n\t\tid: 701,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'mist',\n\t},\n\t{\n\t\tid: 711,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'smoke',\n\t},\n\t{\n\t\tid: 721,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'haze',\n\t},\n\t{\n\t\tid: 731,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand_dust_whirls',\n\t},\n\t{\n\t\tid: 741,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'fog',\n\t},\n\t{\n\t\tid: 751,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand',\n\t},\n\t{\n\t\tid: 761,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'dust',\n\t},\n\t{\n\t\tid: 762,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'volcanic_ash',\n\t},\n\t{\n\t\tid: 771,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'squalls',\n\t},\n\t{\n\t\tid: 781,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'tornado',\n\t},\n\t{\n\t\tid: 800,\n\t\tgroup: 'clear',\n\t\tdescription: 'clear_sky',\n\t},\n\t{\n\t\tid: 801,\n\t\tgroup: 'clouds',\n\t\tdescription: 'few_clouds_11-25_percent',\n\t},\n\t{\n\t\tid: 802,\n\t\tgroup: 'clouds',\n\t\tdescription: 'scattered_clouds_25-50_percent',\n\t},\n\t{\n\t\tid: 803,\n\t\tgroup: 'clouds',\n\t\tdescription: 'broken_clouds_51-84_percent',\n\t},\n\t{\n\t\tid: 804,\n\t\tgroup: 'clouds',\n\t\tdescription: 'overcast_clouds_85-100_percent',\n\t},\n] as const;\n\nexport type WeatherID = (typeof weatherIdGroup)[number]['id'];\n\n/**\n * WeatherGroup: \"clouds\" | \"rain\" | \"snow\" | \"thunderstorm\" | \"drizzle\" | \"atmosphere\" | \"clear\"\n */\nexport type WeatherGroup = (typeof weatherIdGroup)[number]['group'];\n\n/**\n * List for weather description key types from OpenWeatherMap API based on weather id.\n *\n * This list of keys can be used to translate weather id to human readable description with different languages.\n * @example\n * const i18Weather: Record<WeatherDescription, string> = {\n * clear_sky: 'Clear sky',\n * ...\n * }\n */\nexport type WeatherDescription = (typeof weatherIdGroup)[number]['description'];\n\n/**\n * Weather id schema\n * @internal\n */\nexport const weatherIdSchema = z.custom<WeatherID>((val) => {\n\tif (typeof val !== 'number') {\n\t\treturn {message: 'Expected a number', success: false};\n\t}\n\tif (!weatherIdGroup.find((x) => x.id === val)) {\n\t\treturn {message: 'Expected a valid weather id', success: false};\n\t}\n\treturn val;\n});\n\n/**\n * get weather description key from weather id\n * @param id - weather id\n * @returns {Option<WeatherDescription>} option for weather description key\n * @example\n * const weatherComponent = ({data}) => {\n * const key = getWeatherV2Description(data.weather[0]?.id).unwrapOr('unknown');\n * return (\n * <div>\n * {t(`weather:${key}`}\n * </div>\n * );\n * }\n */\nexport function getWeatherV2Description(id: WeatherID | undefined): IOption<WeatherDescription> {\n\treturn undefinedOptionWrap(weatherIdGroup.find((x) => x.id === id)?.description);\n}\n","import {z} from 'zod';\nexport const langCodes = [\n\t'af',\n\t'al',\n\t'ar',\n\t'az',\n\t'bg',\n\t'ca',\n\t'cz',\n\t'da',\n\t'de',\n\t'el',\n\t'en',\n\t'eu',\n\t'fa',\n\t'fi',\n\t'fr',\n\t'gl',\n\t'he',\n\t'hi',\n\t'hr',\n\t'hu',\n\t'id',\n\t'it',\n\t'ja',\n\t'kr',\n\t'la',\n\t'lt',\n\t'mk',\n\t'no',\n\t'nl',\n\t'pl',\n\t'pt',\n\t'pt',\n\t'ro',\n\t'ru',\n\t'sv',\n\t'sk',\n\t'sl',\n\t'sp',\n\t'sr',\n\t'th',\n\t'tr',\n\t'ua',\n\t'vi',\n\t'zh_cn',\n\t'zh_tw',\n\t'zu',\n] as const;\nexport const langCodeSchema = z.enum(langCodes);\nexport type LangCode = z.infer<typeof langCodeSchema>;\n","import {z} from 'zod';\n\nexport const CountryCodeList = [\n\t'af',\n\t'ax',\n\t'al',\n\t'dz',\n\t'as',\n\t'ad',\n\t'ao',\n\t'ai',\n\t'aq',\n\t'ag',\n\t'ar',\n\t'am',\n\t'aw',\n\t'au',\n\t'at',\n\t'az',\n\t'bs',\n\t'bh',\n\t'bd',\n\t'bb',\n\t'by',\n\t'be',\n\t'bz',\n\t'bj',\n\t'bm',\n\t'bt',\n\t'bo',\n\t'bq',\n\t'ba',\n\t'bw',\n\t'bv',\n\t'br',\n\t'io',\n\t'bn',\n\t'bg',\n\t'bf',\n\t'bi',\n\t'kh',\n\t'cm',\n\t'ca',\n\t'cv',\n\t'ky',\n\t'cf',\n\t'td',\n\t'cl',\n\t'cn',\n\t'cx',\n\t'cc',\n\t'co',\n\t'km',\n\t'cg',\n\t'cd',\n\t'ck',\n\t'cr',\n\t'ci',\n\t'hr',\n\t'cu',\n\t'cw',\n\t'cy',\n\t'cz',\n\t'dk',\n\t'dj',\n\t'dm',\n\t'do',\n\t'ec',\n\t'eg',\n\t'sv',\n\t'gq',\n\t'er',\n\t'ee',\n\t'et',\n\t'fk',\n\t'fo',\n\t'fj',\n\t'fi',\n\t'fr',\n\t'gf',\n\t'pf',\n\t'tf',\n\t'ga',\n\t'gm',\n\t'ge',\n\t'de',\n\t'gh',\n\t'gi',\n\t'gr',\n\t'gl',\n\t'gd',\n\t'gp',\n\t'gu',\n\t'gt',\n\t'gg',\n\t'gn',\n\t'gw',\n\t'gy',\n\t'ht',\n\t'hm',\n\t'va',\n\t'hn',\n\t'hk',\n\t'hu',\n\t'is',\n\t'in',\n\t'id',\n\t'ir',\n\t'iq',\n\t'ie',\n\t'im',\n\t'il',\n\t'it',\n\t'jm',\n\t'jp',\n\t'je',\n\t'jo',\n\t'kz',\n\t'ke',\n\t'ki',\n\t'kp',\n\t'kr',\n\t'kw',\n\t'kg',\n\t'la',\n\t'lv',\n\t'lb',\n\t'ls',\n\t'lr',\n\t'ly',\n\t'li',\n\t'lt',\n\t'lu',\n\t'mo',\n\t'mk',\n\t'mg',\n\t'mw',\n\t'my',\n\t'mv',\n\t'ml',\n\t'mt',\n\t'mh',\n\t'mq',\n\t'mr',\n\t'mu',\n\t'yt',\n\t'mx',\n\t'fm',\n\t'md',\n\t'mc',\n\t'mn',\n\t'me',\n\t'ms',\n\t'ma',\n\t'mz',\n\t'mm',\n\t'na',\n\t'nr',\n\t'np',\n\t'nl',\n\t'nc',\n\t'nz',\n\t'ni',\n\t'ne',\n\t'ng',\n\t'nu',\n\t'nf',\n\t'mp',\n\t'no',\n\t'om',\n\t'pk',\n\t'pw',\n\t'ps',\n\t'pa',\n\t'pg',\n\t'py',\n\t'pe',\n\t'ph',\n\t'pn',\n\t'pl',\n\t'pt',\n\t'pr',\n\t'qa',\n\t're',\n\t'ro',\n\t'ru',\n\t'rw',\n\t'bl',\n\t'sh',\n\t'kn',\n\t'lc',\n\t'mf',\n\t'pm',\n\t'vc',\n\t'ws',\n\t'sm',\n\t'st',\n\t'sa',\n\t'sn',\n\t'rs',\n\t'sc',\n\t'sl',\n\t'sg',\n\t'sx',\n\t'sk',\n\t'si',\n\t'sb',\n\t'so',\n\t'za',\n\t'gs',\n\t'ss',\n\t'es',\n\t'lk',\n\t'sd',\n\t'sr',\n\t'sj',\n\t'sz',\n\t'se',\n\t'ch',\n\t'sy',\n\t'tw',\n\t'tj',\n\t'tz',\n\t'th',\n\t'tl',\n\t'tg',\n\t'tk',\n\t'to',\n\t'tt',\n\t'tn',\n\t'tr',\n\t'tm',\n\t'tc',\n\t'tv',\n\t'ug',\n\t'ua',\n\t'ae',\n\t'gb',\n\t'us',\n\t'um',\n\t'uy',\n\t'uz',\n\t'vu',\n\t've',\n\t'vn',\n\t'vg',\n\t'vi',\n\t'wf',\n\t'eh',\n\t'ye',\n\t'zm',\n\t'zw',\n] as const;\n/**\n * @internal\n */\nexport const CountryCodeSchema = z.enum(CountryCodeList);\nexport type CountryCode = z.infer<typeof CountryCodeSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAAA,wBAA6E;;;ACGtE,SAAS,kBAAkB,KAAwC;AACzE,MAAI,eAAe,gBAAgB,eAAe,WAAW;AAC5D,WAAO;AAAA,EACR,OAAO;AACN,WAAO,IAAI,UAAU,kBAAkB,OAAO,GAAG,CAAC,EAAE;AAAA,EACrD;AACD;;;ACVA,IAAAC,cAAgB;;;ACAhB,iBAAgB;AAChB,IAAM,cAAc,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKlF,IAAM,oBAAoB,aAAE,KAAK,WAAW;AAI5C,IAAM,gBAAgB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKpF,IAAM,sBAAsB,aAAE,KAAK,aAAa;AAMzC,IAAM,aAAa,aAAE,MAAM,CAAC,mBAAmB,mBAAmB,CAAC;;;ACrB1E,2BAAgD;AAChD,IAAAC,cAAgB;AAKT,IAAM,iBAAiB;AAAA,EAC7B;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;A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;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA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","names":["import_result_option","import_zod","import_zod","import_zod","import_zod","data"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
// src/OpenWeatherV2.ts
|
|
2
|
+
import { Err, Ok, safeAsyncResult, safeAsyncResultBuilder } from "@luolapeikko/result-option";
|
|
3
|
+
|
|
4
|
+
// src/lib/fetchUtils.ts
|
|
5
|
+
function fetchErrorWrapper(err) {
|
|
6
|
+
if (err instanceof DOMException || err instanceof TypeError) {
|
|
7
|
+
return err;
|
|
8
|
+
} else {
|
|
9
|
+
return new TypeError(`Unknown error: ${String(err)}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// src/types/v2/index.ts
|
|
14
|
+
import { z as z4 } from "zod";
|
|
15
|
+
|
|
1
16
|
// src/types/v2/Icon.ts
|
|
2
17
|
import { z } from "zod";
|
|
3
18
|
var dayIconList = ["01d", "02d", "03d", "04d", "09d", "10d", "11d", "13d", "50d"];
|
|
@@ -299,9 +314,6 @@ function getWeatherV2Description(id) {
|
|
|
299
314
|
return undefinedOptionWrap(weatherIdGroup.find((x) => x.id === id)?.description);
|
|
300
315
|
}
|
|
301
316
|
|
|
302
|
-
// src/types/v2/index.ts
|
|
303
|
-
import { z as z4 } from "zod";
|
|
304
|
-
|
|
305
317
|
// src/types/v2/Language.ts
|
|
306
318
|
import { z as z3 } from "zod";
|
|
307
319
|
var langCodes = [
|
|
@@ -675,18 +687,6 @@ var CountryCodeList = [
|
|
|
675
687
|
];
|
|
676
688
|
var CountryCodeSchema = z5.enum(CountryCodeList);
|
|
677
689
|
|
|
678
|
-
// src/OpenWeatherV2.ts
|
|
679
|
-
import { Err, Ok, safeAsyncResult, safeAsyncResultBuilder } from "@luolapeikko/result-option";
|
|
680
|
-
|
|
681
|
-
// src/lib/fetchUtils.ts
|
|
682
|
-
function fetchErrorWrapper(err) {
|
|
683
|
-
if (err instanceof DOMException || err instanceof TypeError) {
|
|
684
|
-
return err;
|
|
685
|
-
} else {
|
|
686
|
-
return new TypeError(`Unknown error: ${String(err)}`);
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
|
|
690
690
|
// src/OpenWeatherV2.ts
|
|
691
691
|
var fetchResult = safeAsyncResultBuilder(fetch);
|
|
692
692
|
function toParams(data) {
|
|
@@ -697,7 +697,7 @@ function toParams(data) {
|
|
|
697
697
|
}
|
|
698
698
|
function isJson(response) {
|
|
699
699
|
const contentType = response.headers.get("content-type");
|
|
700
|
-
return contentType
|
|
700
|
+
return contentType?.startsWith("application/json") ?? false;
|
|
701
701
|
}
|
|
702
702
|
function isOpenWeatherError(data) {
|
|
703
703
|
return typeof data === "object" && data !== null && "cod" in data && "message" in data;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/v2/Icon.ts","../src/types/v2/weatherIdGroup.ts","../src/types/v2/index.ts","../src/types/v2/Language.ts","../src/types/ISO3166-Countries.ts","../src/OpenWeatherV2.ts","../src/lib/fetchUtils.ts"],"sourcesContent":["import {z} from 'zod';\nconst dayIconList = ['01d', '02d', '03d', '04d', '09d', '10d', '11d', '13d', '50d'] as const;\n\n/**\n * @internal\n */\nconst dayIconListSchema = z.enum(dayIconList);\n\nexport type DayIcon = z.infer<typeof dayIconListSchema>;\n\nconst nightIconList = ['01n', '02n', '03n', '04n', '09n', '10n', '11n', '13n', '50n'] as const;\n\n/**\n * @internal\n */\nconst nightIconListSchema = z.enum(nightIconList);\nexport type NightIcon = z.infer<typeof nightIconListSchema>;\n\n/**\n * @internal\n */\nexport const iconSchema = z.union([dayIconListSchema, nightIconListSchema]);\n\nexport type Icon = z.infer<typeof iconSchema>;\n","import {type IOption, undefinedOptionWrap} from '@luolapeikko/result-option';\nimport {z} from 'zod';\n\n/**\n * This is a list of weather ids, groups and descriptions from OpenWeatherMap API\n */\nexport const weatherIdGroup = [\n\t{\n\t\tid: 200,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_rain',\n\t},\n\t{\n\t\tid: 201,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_rain',\n\t},\n\t{\n\t\tid: 202,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_rain',\n\t},\n\t{\n\t\tid: 210,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'light_thunderstorm',\n\t},\n\t{\n\t\tid: 211,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm',\n\t},\n\t{\n\t\tid: 212,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'heavy_thunderstorm',\n\t},\n\t{\n\t\tid: 221,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'ragged_thunderstorm',\n\t},\n\t{\n\t\tid: 230,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_drizzle',\n\t},\n\t{\n\t\tid: 231,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_drizzle',\n\t},\n\t{\n\t\tid: 232,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_drizzle',\n\t},\n\t{\n\t\tid: 300,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle',\n\t},\n\t{\n\t\tid: 301,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle',\n\t},\n\t{\n\t\tid: 302,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle',\n\t},\n\t{\n\t\tid: 310,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 311,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle_rain',\n\t},\n\t{\n\t\tid: 312,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 313,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 314,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 321,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_drizzle',\n\t},\n\t{\n\t\tid: 500,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_rain',\n\t},\n\t{\n\t\tid: 501,\n\t\tgroup: 'rain',\n\t\tdescription: 'moderate_rain',\n\t},\n\t{\n\t\tid: 502,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_rain',\n\t},\n\t{\n\t\tid: 503,\n\t\tgroup: 'rain',\n\t\tdescription: 'very_heavy_rain',\n\t},\n\t{\n\t\tid: 504,\n\t\tgroup: 'rain',\n\t\tdescription: 'extreme_rain',\n\t},\n\t{\n\t\tid: 511,\n\t\tgroup: 'rain',\n\t\tdescription: 'freezing_rain',\n\t},\n\t{\n\t\tid: 520,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 521,\n\t\tgroup: 'rain',\n\t\tdescription: 'shower_rain',\n\t},\n\t{\n\t\tid: 522,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 531,\n\t\tgroup: 'rain',\n\t\tdescription: 'ragged_shower_rain',\n\t},\n\t{\n\t\tid: 600,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_snow',\n\t},\n\t{\n\t\tid: 601,\n\t\tgroup: 'snow',\n\t\tdescription: 'snow',\n\t},\n\t{\n\t\tid: 602,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_snow',\n\t},\n\t{\n\t\tid: 611,\n\t\tgroup: 'snow',\n\t\tdescription: 'sleet',\n\t},\n\t{\n\t\tid: 612,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_sleet',\n\t},\n\t{\n\t\tid: 613,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_sleet',\n\t},\n\t{\n\t\tid: 615,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_rain_and_snow',\n\t},\n\t{\n\t\tid: 616,\n\t\tgroup: 'snow',\n\t\tdescription: 'rain_and_snow',\n\t},\n\t{\n\t\tid: 620,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_snow',\n\t},\n\t{\n\t\tid: 621,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_snow',\n\t},\n\t{\n\t\tid: 622,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_shower_snow',\n\t},\n\t{\n\t\tid: 701,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'mist',\n\t},\n\t{\n\t\tid: 711,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'smoke',\n\t},\n\t{\n\t\tid: 721,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'haze',\n\t},\n\t{\n\t\tid: 731,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand_dust_whirls',\n\t},\n\t{\n\t\tid: 741,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'fog',\n\t},\n\t{\n\t\tid: 751,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand',\n\t},\n\t{\n\t\tid: 761,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'dust',\n\t},\n\t{\n\t\tid: 762,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'volcanic_ash',\n\t},\n\t{\n\t\tid: 771,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'squalls',\n\t},\n\t{\n\t\tid: 781,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'tornado',\n\t},\n\t{\n\t\tid: 800,\n\t\tgroup: 'clear',\n\t\tdescription: 'clear_sky',\n\t},\n\t{\n\t\tid: 801,\n\t\tgroup: 'clouds',\n\t\tdescription: 'few_clouds_11-25_percent',\n\t},\n\t{\n\t\tid: 802,\n\t\tgroup: 'clouds',\n\t\tdescription: 'scattered_clouds_25-50_percent',\n\t},\n\t{\n\t\tid: 803,\n\t\tgroup: 'clouds',\n\t\tdescription: 'broken_clouds_51-84_percent',\n\t},\n\t{\n\t\tid: 804,\n\t\tgroup: 'clouds',\n\t\tdescription: 'overcast_clouds_85-100_percent',\n\t},\n] as const;\n\nexport type WeatherID = (typeof weatherIdGroup)[number]['id'];\n\n/**\n * WeatherGroup: \"clouds\" | \"rain\" | \"snow\" | \"thunderstorm\" | \"drizzle\" | \"atmosphere\" | \"clear\"\n */\nexport type WeatherGroup = (typeof weatherIdGroup)[number]['group'];\n\n/**\n * List for weather description key types from OpenWeatherMap API based on weather id.\n *\n * This list of keys can be used to translate weather id to human readable description with different languages.\n * @example\n * const i18Weather: Record<WeatherDescription, string> = {\n * clear_sky: 'Clear sky',\n * ...\n * }\n */\nexport type WeatherDescription = (typeof weatherIdGroup)[number]['description'];\n\n/**\n * Weather id schema\n * @internal\n */\nexport const weatherIdSchema = z.custom<WeatherID>((val) => {\n\tif (typeof val !== 'number') {\n\t\treturn {message: 'Expected a number', success: false};\n\t}\n\tif (!weatherIdGroup.find((x) => x.id === val)) {\n\t\treturn {message: 'Expected a valid weather id', success: false};\n\t}\n\treturn val;\n});\n\n/**\n * get weather description key from weather id\n * @param id - weather id\n * @returns {Option<WeatherDescription>} option for weather description key\n * @example\n * const weatherComponent = ({data}) => {\n * const key = getWeatherV2Description(data.weather[0]?.id).unwrapOr('unknown');\n * return (\n * <div>\n * {t(`weather:${key}`}\n * </div>\n * );\n * }\n */\nexport function getWeatherV2Description(id: WeatherID | undefined): IOption<WeatherDescription> {\n\treturn undefinedOptionWrap(weatherIdGroup.find((x) => x.id === id)?.description);\n}\n","import {iconSchema} from './Icon';\nimport {weatherIdSchema} from './weatherIdGroup';\nimport {z} from 'zod';\nexport * from './Icon';\nexport * from './Language';\nexport * from './weatherIdGroup';\n\nconst coordSchema = z.object({\n\tlon: z.number(),\n\tlat: z.number(),\n});\n\nconst weatherSchema = z.object({\n\tdescription: z.string(),\n\ticon: iconSchema,\n\tid: weatherIdSchema,\n\tmain: z.string(),\n});\n\nconst mainSchema = z.object({\n\tgrnd_level: z.number().optional(),\n\thumidity: z.number(),\n\tpressure: z.number(),\n\tsea_level: z.number().optional(),\n\ttemp: z.number(),\n\ttemp_max: z.number(),\n\ttemp_min: z.number(),\n});\n\nconst windSchema = z.object({\n\tspeed: z.number(),\n\tdeg: z.number(),\n});\n\nconst rainSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst snowSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst sysSchema = z.object({\n\tcountry: z.string(),\n\tid: z.number().optional(),\n\tmessage: z.number().optional(),\n\tsunrise: z.number(),\n\tsunset: z.number(),\n\ttype: z.number().optional(),\n});\n\n/**\n * @internal\n */\nexport const weatherDataV2Schema = z.object({\n\tbase: z.string(),\n\tclouds: z.object({\n\t\tall: z.number(),\n\t}),\n\tcod: z.number(),\n\tcoord: coordSchema,\n\tdt: z.number(),\n\tid: z.number(),\n\tmain: mainSchema,\n\tname: z.string(),\n\train: rainSchema.optional(),\n\tsnow: snowSchema.optional(),\n\tsys: sysSchema,\n\ttimezone: z.number(),\n\tvisibility: z.number(),\n\tweather: z.array(weatherSchema),\n\twind: windSchema,\n});\n\nexport type WeatherDataV2 = z.infer<typeof weatherDataV2Schema>;\n\nexport function isWeatherDataV2(data: unknown): data is WeatherDataV2 {\n\treturn weatherDataV2Schema.safeParse(data).success;\n}\n\nexport function assertWeatherDataV2(data: unknown): asserts data is WeatherDataV2 {\n\tweatherDataV2Schema.parse(data);\n}\n","import {z} from 'zod';\nexport const langCodes = [\n\t'af',\n\t'al',\n\t'ar',\n\t'az',\n\t'bg',\n\t'ca',\n\t'cz',\n\t'da',\n\t'de',\n\t'el',\n\t'en',\n\t'eu',\n\t'fa',\n\t'fi',\n\t'fr',\n\t'gl',\n\t'he',\n\t'hi',\n\t'hr',\n\t'hu',\n\t'id',\n\t'it',\n\t'ja',\n\t'kr',\n\t'la',\n\t'lt',\n\t'mk',\n\t'no',\n\t'nl',\n\t'pl',\n\t'pt',\n\t'pt',\n\t'ro',\n\t'ru',\n\t'sv',\n\t'sk',\n\t'sl',\n\t'sp',\n\t'sr',\n\t'th',\n\t'tr',\n\t'ua',\n\t'vi',\n\t'zh_cn',\n\t'zh_tw',\n\t'zu',\n] as const;\nexport const langCodeSchema = z.enum(langCodes);\nexport type LangCode = z.infer<typeof langCodeSchema>;\n","import {z} from 'zod';\n\nexport const CountryCodeList = [\n\t'af',\n\t'ax',\n\t'al',\n\t'dz',\n\t'as',\n\t'ad',\n\t'ao',\n\t'ai',\n\t'aq',\n\t'ag',\n\t'ar',\n\t'am',\n\t'aw',\n\t'au',\n\t'at',\n\t'az',\n\t'bs',\n\t'bh',\n\t'bd',\n\t'bb',\n\t'by',\n\t'be',\n\t'bz',\n\t'bj',\n\t'bm',\n\t'bt',\n\t'bo',\n\t'bq',\n\t'ba',\n\t'bw',\n\t'bv',\n\t'br',\n\t'io',\n\t'bn',\n\t'bg',\n\t'bf',\n\t'bi',\n\t'kh',\n\t'cm',\n\t'ca',\n\t'cv',\n\t'ky',\n\t'cf',\n\t'td',\n\t'cl',\n\t'cn',\n\t'cx',\n\t'cc',\n\t'co',\n\t'km',\n\t'cg',\n\t'cd',\n\t'ck',\n\t'cr',\n\t'ci',\n\t'hr',\n\t'cu',\n\t'cw',\n\t'cy',\n\t'cz',\n\t'dk',\n\t'dj',\n\t'dm',\n\t'do',\n\t'ec',\n\t'eg',\n\t'sv',\n\t'gq',\n\t'er',\n\t'ee',\n\t'et',\n\t'fk',\n\t'fo',\n\t'fj',\n\t'fi',\n\t'fr',\n\t'gf',\n\t'pf',\n\t'tf',\n\t'ga',\n\t'gm',\n\t'ge',\n\t'de',\n\t'gh',\n\t'gi',\n\t'gr',\n\t'gl',\n\t'gd',\n\t'gp',\n\t'gu',\n\t'gt',\n\t'gg',\n\t'gn',\n\t'gw',\n\t'gy',\n\t'ht',\n\t'hm',\n\t'va',\n\t'hn',\n\t'hk',\n\t'hu',\n\t'is',\n\t'in',\n\t'id',\n\t'ir',\n\t'iq',\n\t'ie',\n\t'im',\n\t'il',\n\t'it',\n\t'jm',\n\t'jp',\n\t'je',\n\t'jo',\n\t'kz',\n\t'ke',\n\t'ki',\n\t'kp',\n\t'kr',\n\t'kw',\n\t'kg',\n\t'la',\n\t'lv',\n\t'lb',\n\t'ls',\n\t'lr',\n\t'ly',\n\t'li',\n\t'lt',\n\t'lu',\n\t'mo',\n\t'mk',\n\t'mg',\n\t'mw',\n\t'my',\n\t'mv',\n\t'ml',\n\t'mt',\n\t'mh',\n\t'mq',\n\t'mr',\n\t'mu',\n\t'yt',\n\t'mx',\n\t'fm',\n\t'md',\n\t'mc',\n\t'mn',\n\t'me',\n\t'ms',\n\t'ma',\n\t'mz',\n\t'mm',\n\t'na',\n\t'nr',\n\t'np',\n\t'nl',\n\t'nc',\n\t'nz',\n\t'ni',\n\t'ne',\n\t'ng',\n\t'nu',\n\t'nf',\n\t'mp',\n\t'no',\n\t'om',\n\t'pk',\n\t'pw',\n\t'ps',\n\t'pa',\n\t'pg',\n\t'py',\n\t'pe',\n\t'ph',\n\t'pn',\n\t'pl',\n\t'pt',\n\t'pr',\n\t'qa',\n\t're',\n\t'ro',\n\t'ru',\n\t'rw',\n\t'bl',\n\t'sh',\n\t'kn',\n\t'lc',\n\t'mf',\n\t'pm',\n\t'vc',\n\t'ws',\n\t'sm',\n\t'st',\n\t'sa',\n\t'sn',\n\t'rs',\n\t'sc',\n\t'sl',\n\t'sg',\n\t'sx',\n\t'sk',\n\t'si',\n\t'sb',\n\t'so',\n\t'za',\n\t'gs',\n\t'ss',\n\t'es',\n\t'lk',\n\t'sd',\n\t'sr',\n\t'sj',\n\t'sz',\n\t'se',\n\t'ch',\n\t'sy',\n\t'tw',\n\t'tj',\n\t'tz',\n\t'th',\n\t'tl',\n\t'tg',\n\t'tk',\n\t'to',\n\t'tt',\n\t'tn',\n\t'tr',\n\t'tm',\n\t'tc',\n\t'tv',\n\t'ug',\n\t'ua',\n\t'ae',\n\t'gb',\n\t'us',\n\t'um',\n\t'uy',\n\t'uz',\n\t'vu',\n\t've',\n\t'vn',\n\t'vg',\n\t'vi',\n\t'wf',\n\t'eh',\n\t'ye',\n\t'zm',\n\t'zw',\n] as const;\n/**\n * @internal\n */\nexport const CountryCodeSchema = z.enum(CountryCodeList);\nexport type CountryCode = z.infer<typeof CountryCodeSchema>;\n","import {assertWeatherDataV2, type CountryCode, type LangCode, type WeatherDataV2} from './types';\nimport {Err, type IResult, Ok, safeAsyncResult, safeAsyncResultBuilder} from '@luolapeikko/result-option';\nimport {fetchErrorWrapper} from './lib/fetchUtils';\nimport {type IAsyncCache} from '@luolapeikko/cache-types';\nimport type {IOpenWeatherV2} from './interfaces/IOpenWeatherV2';\nimport {type Loadable} from '@luolapeikko/ts-common';\n\nconst fetchResult = safeAsyncResultBuilder<Parameters<typeof fetch>, Response, SyntaxError | TypeError>(fetch);\n\nfunction toParams(data: Record<string, string | number | boolean>): Record<string, string> {\n\treturn Object.entries(data).reduce<Record<string, string>>((acc, [key, value]) => {\n\t\tacc[key] = String(value);\n\t\treturn acc;\n\t}, {});\n}\n\nfunction isJson(response: Response): boolean {\n\tconst contentType = response.headers.get('content-type');\n\treturn (contentType && contentType.startsWith('application/json')) || false;\n}\n\nfunction isOpenWeatherError(data: unknown): data is {cod: string; message: string} {\n\treturn typeof data === 'object' && data !== null && 'cod' in data && 'message' in data;\n}\n\n/**\n * Open Weather V2 API Common Options\n * @default {lang: 'en', units: 'standard'} in API\n * @example\n * {lang: 'fi', units: 'metric'}\n * @since v0.0.1\n */\nexport type OpenWeatherV2CommonOptions = {\n\t/**\n\t * Language code\n\t */\n\tlang: LangCode;\n\t/**\n\t * Weather units\n\t */\n\tunits: 'standard' | 'metric' | 'imperial';\n};\n\nconst defaultCommonOptions = {\n\tlang: 'en',\n\tunits: 'standard',\n} satisfies OpenWeatherV2CommonOptions;\n\nfunction buildOpts(opts: Partial<OpenWeatherV2CommonOptions>): OpenWeatherV2CommonOptions {\n\treturn Object.assign({}, defaultCommonOptions, opts);\n}\n\nconst basePath = 'https://api.openweathermap.org/data/2.5/weather';\n\nfunction buildUrl(params: URLSearchParams): string {\n\treturn `${basePath}?${params.toString()}`;\n}\n\nfunction buildLogUrl(params: URLSearchParams): string {\n\tconst logParams = new URLSearchParams(params);\n\tlogParams.set('appid', '***');\n\treturn buildUrl(logParams);\n}\n\nconst defaultImplementation: IOpenWeatherV2 = {\n\tdataWeatherApi: async (params: URLSearchParams): Promise<IResult<WeatherDataV2, SyntaxError | TypeError>> => {\n\t\tconst logUrl = buildLogUrl(params);\n\t\tconst result = await fetchResult(buildUrl(params));\n\t\tif (!result.isOk) {\n\t\t\treturn Err(result.err());\n\t\t}\n\t\tconst res = result.ok();\n\t\tif (!res.ok) {\n\t\t\tif (isJson(res)) {\n\t\t\t\tconst data: unknown = await res.json();\n\t\t\t\tif (isOpenWeatherError(data)) {\n\t\t\t\t\treturn Err(new TypeError(`OpenWeatherV2 error: ${data.message} from ${logUrl}`));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 http error: ${res.status} ${res.statusText} from ${logUrl}`));\n\t\t}\n\t\tif (!isJson(res)) {\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 response is not json payload from ${logUrl}`));\n\t\t}\n\t\tconst jsonResult = await safeAsyncResult<unknown, SyntaxError>(res.json());\n\t\tif (!jsonResult.isOk) {\n\t\t\treturn Err(jsonResult.err());\n\t\t}\n\t\tconst data = jsonResult.ok();\n\t\tassertWeatherDataV2(data);\n\t\treturn Ok<WeatherDataV2, SyntaxError | TypeError>(data);\n\t},\n};\n\n/**\n * Cache key types\n * @since v0.1.0\n */\ntype CacheKey = `q:${string}:${string}` | `id:${number}` | `latlon:${number}:${number}`;\n\n/**\n * Open Weather V2 API\n * @example\n * const weather = new OpenWeatherV2('your-api-key');\n *\n * const cache = new ExpireCache<WeatherDataV2>(undefined, undefined, 900000); // data 15 minutes in cache\n * const weather = new OpenWeatherV2(() => Promise.resolve('your-api-key'), cache);\n *\n * const data: WeatherDataV2 = (await weather.getWeatherById(2643743)).unwrap(); // throws if error\n * const data: WeatherDataV2 | undefined = (await weather.getWeatherByCity('Helsinki', 'fi')).ok();\n *\n * const result: Result<WeatherDataV2> = await weather.getWeatherByLatLon(60.1699, 24.9384);\n * result.match({\n * Ok: (data: WeatherDataV2) => console.log(data),\n * Err: (err: DOMException | TypeError) => console.error(err),\n * });\n *\n * if(result.isOk) {\n * const data: WeatherDataV2 = data.ok();\n * } else {\n * const err: DOMException | TypeError = data.err();\n * }\n * @since v0.0.1\n */\nexport class OpenWeatherV2 {\n\tprivate cache: IAsyncCache<WeatherDataV2> | undefined;\n\tprivate loadableApiKey: Loadable<string>;\n\tprivate apiHandler: IOpenWeatherV2;\n\tprivate fetchPromiseMap = new Map<string, Promise<IResult<WeatherDataV2, DOMException | TypeError>>>();\n\t/**\n\t * OpenWeatherV2 constructor\n\t * @param {Loadable<string>} loadableApiKey - Loadable API key\n\t * @param {ICacheOrAsync<WeatherDataV2>=} cache - optional async cache implementation\n\t * @param {IOpenWeatherV2=} apiHandler - optional API handler implementation for mocking\n\t */\n\tconstructor(loadableApiKey: Loadable<string>, cache?: IAsyncCache<WeatherDataV2>, apiHandler: IOpenWeatherV2 = defaultImplementation) {\n\t\tthis.loadableApiKey = loadableApiKey;\n\t\tthis.cache = cache;\n\t\tthis.apiHandler = apiHandler;\n\t}\n\n\t/**\n\t * get weather by Id\n\t * @param {number} id - Weather station ID\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherById(id: number, currentOpts: Partial<OpenWeatherV2CommonOptions> = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`id:${id}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('id', String(id));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with city name and optional country code\n\t * @param {string} city - City name\n\t * @param {countryCode=} countryCode - Optional Country code\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByCity(\n\t\tcity: string,\n\t\tcountryCode?: CountryCode,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`q:${city}:${countryCode}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('q', countryCode ? `${city},${countryCode}` : city);\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with latitude and longitude with Result\n\t * @param {number} lat - Latitude\n\t * @param {number} lon - Longitude\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByLatLon(\n\t\tlat: number,\n\t\tlon: number,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`latlon:${lat}:${lon}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('lat', String(lat));\n\t\t\t\tparams.append('lon', String(lon));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\tprivate async buildBaseParams(options: OpenWeatherV2CommonOptions): Promise<URLSearchParams> {\n\t\tconst apiKey = await (typeof this.loadableApiKey === 'function' ? this.loadableApiKey() : this.loadableApiKey);\n\t\tconst params = new URLSearchParams(toParams(options));\n\t\tparams.append('appid', apiKey);\n\t\treturn params;\n\t}\n\n\t/**\n\t * build base cache key\n\t * @param main - main cache key prefix\n\t * @param opts - OpenWeatherV2CommonOptions\n\t * @returns {string} cache key\n\t */\n\tprivate buildBaseCacheKey(main: CacheKey, {lang, units}: OpenWeatherV2CommonOptions): `${CacheKey}:${LangCode}:${'standard' | 'metric' | 'imperial'}` {\n\t\treturn `${main}:${lang}:${units}`;\n\t}\n\n\tprivate async handleFetch(cacheKey: string, params: URLSearchParams, opts: OpenWeatherV2CommonOptions): Promise<WeatherDataV2> {\n\t\t// allow only one fetch per cacheKey until it is resolved\n\t\tlet promiseResult = this.fetchPromiseMap.get(cacheKey);\n\t\tif (!promiseResult) {\n\t\t\tpromiseResult = this.apiHandler.dataWeatherApi(params);\n\t\t\tthis.fetchPromiseMap.set(cacheKey, promiseResult);\n\t\t\tawait promiseResult;\n\t\t\tthis.fetchPromiseMap.delete(cacheKey); // clear promise from map\n\t\t}\n\t\tconst dataApiResult = await promiseResult;\n\t\tconst data: WeatherDataV2 = dataApiResult.unwrap();\n\t\tassertWeatherDataV2(data);\n\t\tif (this.cache) {\n\t\t\tawait this.cache.set(cacheKey, data);\n\t\t\tif (!cacheKey.startsWith('id:')) {\n\t\t\t\t// update id cache too\n\t\t\t\tawait this.cache.set(this.buildBaseCacheKey(`id:${data.id}`, opts), data);\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n}\n","/**\n * Ensures that the error is a DOMException or TypeError.\n * @internal\n */\nexport function fetchErrorWrapper(err: unknown): DOMException | TypeError {\n\tif (err instanceof DOMException || err instanceof TypeError) {\n\t\treturn err;\n\t} else {\n\t\treturn new TypeError(`Unknown error: ${String(err)}`);\n\t}\n}\n"],"mappings":";AAAA,SAAQ,SAAQ;AAChB,IAAM,cAAc,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKlF,IAAM,oBAAoB,EAAE,KAAK,WAAW;AAI5C,IAAM,gBAAgB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKpF,IAAM,sBAAsB,EAAE,KAAK,aAAa;AAMzC,IAAM,aAAa,EAAE,MAAM,CAAC,mBAAmB,mBAAmB,CAAC;;;ACrB1E,SAAsB,2BAA0B;AAChD,SAAQ,KAAAA,UAAQ;AAKT,IAAM,iBAAiB;AAAA,EAC7B;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IA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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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","names":["z","z","z","z","z","data"]}
|
|
1
|
+
{"version":3,"sources":["../src/OpenWeatherV2.ts","../src/lib/fetchUtils.ts","../src/types/v2/index.ts","../src/types/v2/Icon.ts","../src/types/v2/weatherIdGroup.ts","../src/types/v2/Language.ts","../src/types/ISO3166-Countries.ts"],"sourcesContent":["import {type IAsyncCache} from '@luolapeikko/cache-types';\nimport {Err, type IResult, Ok, safeAsyncResult, safeAsyncResultBuilder} from '@luolapeikko/result-option';\nimport {type Loadable} from '@luolapeikko/ts-common';\nimport type {IOpenWeatherV2} from './interfaces/IOpenWeatherV2';\nimport {fetchErrorWrapper} from './lib/fetchUtils';\nimport {assertWeatherDataV2, type CountryCode, type LangCode, type WeatherDataV2} from './types';\n\nconst fetchResult = safeAsyncResultBuilder<Parameters<typeof fetch>, Response, SyntaxError | TypeError>(fetch);\n\nfunction toParams(data: Record<string, string | number | boolean>): Record<string, string> {\n\treturn Object.entries(data).reduce<Record<string, string>>((acc, [key, value]) => {\n\t\tacc[key] = String(value);\n\t\treturn acc;\n\t}, {});\n}\n\nfunction isJson(response: Response): boolean {\n\tconst contentType = response.headers.get('content-type');\n\treturn contentType?.startsWith('application/json') ?? false;\n}\n\nfunction isOpenWeatherError(data: unknown): data is {cod: string; message: string} {\n\treturn typeof data === 'object' && data !== null && 'cod' in data && 'message' in data;\n}\n\n/**\n * Open Weather V2 API Common Options\n * @default {lang: 'en', units: 'standard'} in API\n * @example\n * {lang: 'fi', units: 'metric'}\n * @since v0.0.1\n */\nexport type OpenWeatherV2CommonOptions = {\n\t/**\n\t * Language code\n\t */\n\tlang: LangCode;\n\t/**\n\t * Weather units\n\t */\n\tunits: 'standard' | 'metric' | 'imperial';\n};\n\nconst defaultCommonOptions = {\n\tlang: 'en',\n\tunits: 'standard',\n} satisfies OpenWeatherV2CommonOptions;\n\nfunction buildOpts(opts: Partial<OpenWeatherV2CommonOptions>): OpenWeatherV2CommonOptions {\n\treturn Object.assign({}, defaultCommonOptions, opts);\n}\n\nconst basePath = 'https://api.openweathermap.org/data/2.5/weather';\n\nfunction buildUrl(params: URLSearchParams): string {\n\treturn `${basePath}?${params.toString()}`;\n}\n\nfunction buildLogUrl(params: URLSearchParams): string {\n\tconst logParams = new URLSearchParams(params);\n\tlogParams.set('appid', '***');\n\treturn buildUrl(logParams);\n}\n\nconst defaultImplementation: IOpenWeatherV2 = {\n\tdataWeatherApi: async (params: URLSearchParams): Promise<IResult<WeatherDataV2, SyntaxError | TypeError>> => {\n\t\tconst logUrl = buildLogUrl(params);\n\t\tconst result = await fetchResult(buildUrl(params));\n\t\tif (!result.isOk) {\n\t\t\treturn Err(result.err());\n\t\t}\n\t\tconst res = result.ok();\n\t\tif (!res.ok) {\n\t\t\tif (isJson(res)) {\n\t\t\t\tconst data: unknown = await res.json();\n\t\t\t\tif (isOpenWeatherError(data)) {\n\t\t\t\t\treturn Err(new TypeError(`OpenWeatherV2 error: ${data.message} from ${logUrl}`));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 http error: ${res.status} ${res.statusText} from ${logUrl}`));\n\t\t}\n\t\tif (!isJson(res)) {\n\t\t\treturn Err(new TypeError(`OpenWeatherV2 response is not json payload from ${logUrl}`));\n\t\t}\n\t\tconst jsonResult = await safeAsyncResult<unknown, SyntaxError>(res.json());\n\t\tif (!jsonResult.isOk) {\n\t\t\treturn Err(jsonResult.err());\n\t\t}\n\t\tconst data = jsonResult.ok();\n\t\tassertWeatherDataV2(data);\n\t\treturn Ok<WeatherDataV2, SyntaxError | TypeError>(data);\n\t},\n};\n\n/**\n * Cache key types\n * @since v0.1.0\n */\ntype CacheKey = `q:${string}:${string}` | `id:${number}` | `latlon:${number}:${number}`;\n\n/**\n * Open Weather V2 API\n * @example\n * const weather = new OpenWeatherV2('your-api-key');\n *\n * const cache = new ExpireCache<WeatherDataV2>(undefined, undefined, 900000); // data 15 minutes in cache\n * const weather = new OpenWeatherV2(() => Promise.resolve('your-api-key'), cache);\n *\n * const data: WeatherDataV2 = (await weather.getWeatherById(2643743)).unwrap(); // throws if error\n * const data: WeatherDataV2 | undefined = (await weather.getWeatherByCity('Helsinki', 'fi')).ok();\n *\n * const result: Result<WeatherDataV2> = await weather.getWeatherByLatLon(60.1699, 24.9384);\n * result.match({\n * Ok: (data: WeatherDataV2) => console.log(data),\n * Err: (err: DOMException | TypeError) => console.error(err),\n * });\n *\n * if(result.isOk) {\n * const data: WeatherDataV2 = data.ok();\n * } else {\n * const err: DOMException | TypeError = data.err();\n * }\n * @since v0.0.1\n */\nexport class OpenWeatherV2 {\n\tprivate cache: IAsyncCache<WeatherDataV2> | undefined;\n\tprivate loadableApiKey: Loadable<string>;\n\tprivate apiHandler: IOpenWeatherV2;\n\tprivate fetchPromiseMap = new Map<string, Promise<IResult<WeatherDataV2, DOMException | TypeError>>>();\n\t/**\n\t * OpenWeatherV2 constructor\n\t * @param {Loadable<string>} loadableApiKey - Loadable API key\n\t * @param {ICacheOrAsync<WeatherDataV2>=} cache - optional async cache implementation\n\t * @param {IOpenWeatherV2=} apiHandler - optional API handler implementation for mocking\n\t */\n\tconstructor(loadableApiKey: Loadable<string>, cache?: IAsyncCache<WeatherDataV2>, apiHandler: IOpenWeatherV2 = defaultImplementation) {\n\t\tthis.loadableApiKey = loadableApiKey;\n\t\tthis.cache = cache;\n\t\tthis.apiHandler = apiHandler;\n\t}\n\n\t/**\n\t * get weather by Id\n\t * @param {number} id - Weather station ID\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherById(id: number, currentOpts: Partial<OpenWeatherV2CommonOptions> = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`id:${id}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('id', String(id));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with city name and optional country code\n\t * @param {string} city - City name\n\t * @param {countryCode=} countryCode - Optional Country code\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByCity(\n\t\tcity: string,\n\t\tcountryCode?: CountryCode,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`q:${city}:${countryCode}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('q', countryCode ? `${city},${countryCode}` : city);\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\t/**\n\t * get weather with latitude and longitude with Result\n\t * @param {number} lat - Latitude\n\t * @param {number} lon - Longitude\n\t * @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```\n\t * @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise\n\t * @example\n\t * const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});\n\t * if (result.isOk) {\n\t * const weatherData: WeatherDataV2 = result.ok();\n\t * } else {\n\t * const error: DOMException | TypeError = result.err();\n\t * }\n\t */\n\tpublic async getWeatherByLatLon(\n\t\tlat: number,\n\t\tlon: number,\n\t\tcurrentOpts: Partial<OpenWeatherV2CommonOptions> = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\n\t\t\tconst opts = buildOpts(currentOpts);\n\t\t\tconst cacheKey = this.buildBaseCacheKey(`latlon:${lat}:${lon}`, opts);\n\t\t\tlet cacheEntry = this.cache && (await this.cache.get(cacheKey));\n\t\t\tif (!cacheEntry) {\n\t\t\t\tconst params = await this.buildBaseParams(opts);\n\t\t\t\tparams.append('lat', String(lat));\n\t\t\t\tparams.append('lon', String(lon));\n\t\t\t\tcacheEntry = await this.handleFetch(cacheKey, params, opts);\n\t\t\t}\n\t\t\treturn Ok(cacheEntry);\n\t\t} catch (err) {\n\t\t\treturn Err(fetchErrorWrapper(err));\n\t\t}\n\t}\n\n\tprivate async buildBaseParams(options: OpenWeatherV2CommonOptions): Promise<URLSearchParams> {\n\t\tconst apiKey = await (typeof this.loadableApiKey === 'function' ? this.loadableApiKey() : this.loadableApiKey);\n\t\tconst params = new URLSearchParams(toParams(options));\n\t\tparams.append('appid', apiKey);\n\t\treturn params;\n\t}\n\n\t/**\n\t * build base cache key\n\t * @param main - main cache key prefix\n\t * @param opts - OpenWeatherV2CommonOptions\n\t * @returns {string} cache key\n\t */\n\tprivate buildBaseCacheKey(main: CacheKey, {lang, units}: OpenWeatherV2CommonOptions): `${CacheKey}:${LangCode}:${'standard' | 'metric' | 'imperial'}` {\n\t\treturn `${main}:${lang}:${units}`;\n\t}\n\n\tprivate async handleFetch(cacheKey: string, params: URLSearchParams, opts: OpenWeatherV2CommonOptions): Promise<WeatherDataV2> {\n\t\t// allow only one fetch per cacheKey until it is resolved\n\t\tlet promiseResult = this.fetchPromiseMap.get(cacheKey);\n\t\tif (!promiseResult) {\n\t\t\tpromiseResult = this.apiHandler.dataWeatherApi(params);\n\t\t\tthis.fetchPromiseMap.set(cacheKey, promiseResult);\n\t\t\tawait promiseResult;\n\t\t\tthis.fetchPromiseMap.delete(cacheKey); // clear promise from map\n\t\t}\n\t\tconst dataApiResult = await promiseResult;\n\t\tconst data: WeatherDataV2 = dataApiResult.unwrap();\n\t\tassertWeatherDataV2(data);\n\t\tif (this.cache) {\n\t\t\tawait this.cache.set(cacheKey, data);\n\t\t\tif (!cacheKey.startsWith('id:')) {\n\t\t\t\t// update id cache too\n\t\t\t\tawait this.cache.set(this.buildBaseCacheKey(`id:${data.id}`, opts), data);\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n}\n","/**\n * Ensures that the error is a DOMException or TypeError.\n * @internal\n */\nexport function fetchErrorWrapper(err: unknown): DOMException | TypeError {\n\tif (err instanceof DOMException || err instanceof TypeError) {\n\t\treturn err;\n\t} else {\n\t\treturn new TypeError(`Unknown error: ${String(err)}`);\n\t}\n}\n","import {z} from 'zod';\nimport {iconSchema} from './Icon';\nimport {weatherIdSchema} from './weatherIdGroup';\nexport * from './Icon';\nexport * from './Language';\nexport * from './weatherIdGroup';\n\nconst coordSchema = z.object({\n\tlon: z.number(),\n\tlat: z.number(),\n});\n\nconst weatherSchema = z.object({\n\tdescription: z.string(),\n\ticon: iconSchema,\n\tid: weatherIdSchema,\n\tmain: z.string(),\n});\n\nconst mainSchema = z.object({\n\tgrnd_level: z.number().optional(),\n\thumidity: z.number(),\n\tpressure: z.number(),\n\tsea_level: z.number().optional(),\n\ttemp: z.number(),\n\ttemp_max: z.number(),\n\ttemp_min: z.number(),\n});\n\nconst windSchema = z.object({\n\tspeed: z.number(),\n\tdeg: z.number(),\n});\n\nconst rainSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst snowSchema = z.object({\n\t'1h': z.number().optional(),\n\t'3h': z.number().optional(),\n});\n\nconst sysSchema = z.object({\n\tcountry: z.string(),\n\tid: z.number().optional(),\n\tmessage: z.number().optional(),\n\tsunrise: z.number(),\n\tsunset: z.number(),\n\ttype: z.number().optional(),\n});\n\n/**\n * @internal\n */\nexport const weatherDataV2Schema = z.object({\n\tbase: z.string(),\n\tclouds: z.object({\n\t\tall: z.number(),\n\t}),\n\tcod: z.number(),\n\tcoord: coordSchema,\n\tdt: z.number(),\n\tid: z.number(),\n\tmain: mainSchema,\n\tname: z.string(),\n\train: rainSchema.optional(),\n\tsnow: snowSchema.optional(),\n\tsys: sysSchema,\n\ttimezone: z.number(),\n\tvisibility: z.number(),\n\tweather: z.array(weatherSchema),\n\twind: windSchema,\n});\n\nexport type WeatherDataV2 = z.infer<typeof weatherDataV2Schema>;\n\nexport function isWeatherDataV2(data: unknown): data is WeatherDataV2 {\n\treturn weatherDataV2Schema.safeParse(data).success;\n}\n\nexport function assertWeatherDataV2(data: unknown): asserts data is WeatherDataV2 {\n\tweatherDataV2Schema.parse(data);\n}\n","import {z} from 'zod';\nconst dayIconList = ['01d', '02d', '03d', '04d', '09d', '10d', '11d', '13d', '50d'] as const;\n\n/**\n * @internal\n */\nconst dayIconListSchema = z.enum(dayIconList);\n\nexport type DayIcon = z.infer<typeof dayIconListSchema>;\n\nconst nightIconList = ['01n', '02n', '03n', '04n', '09n', '10n', '11n', '13n', '50n'] as const;\n\n/**\n * @internal\n */\nconst nightIconListSchema = z.enum(nightIconList);\nexport type NightIcon = z.infer<typeof nightIconListSchema>;\n\n/**\n * @internal\n */\nexport const iconSchema = z.union([dayIconListSchema, nightIconListSchema]);\n\nexport type Icon = z.infer<typeof iconSchema>;\n","import {type IOption, undefinedOptionWrap} from '@luolapeikko/result-option';\nimport {z} from 'zod';\n\n/**\n * This is a list of weather ids, groups and descriptions from OpenWeatherMap API\n */\nexport const weatherIdGroup = [\n\t{\n\t\tid: 200,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_rain',\n\t},\n\t{\n\t\tid: 201,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_rain',\n\t},\n\t{\n\t\tid: 202,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_rain',\n\t},\n\t{\n\t\tid: 210,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'light_thunderstorm',\n\t},\n\t{\n\t\tid: 211,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm',\n\t},\n\t{\n\t\tid: 212,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'heavy_thunderstorm',\n\t},\n\t{\n\t\tid: 221,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'ragged_thunderstorm',\n\t},\n\t{\n\t\tid: 230,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_light_drizzle',\n\t},\n\t{\n\t\tid: 231,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_drizzle',\n\t},\n\t{\n\t\tid: 232,\n\t\tgroup: 'thunderstorm',\n\t\tdescription: 'thunderstorm_with_heavy_drizzle',\n\t},\n\t{\n\t\tid: 300,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle',\n\t},\n\t{\n\t\tid: 301,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle',\n\t},\n\t{\n\t\tid: 302,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle',\n\t},\n\t{\n\t\tid: 310,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'light_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 311,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'drizzle_rain',\n\t},\n\t{\n\t\tid: 312,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_intensity_drizzle_rain',\n\t},\n\t{\n\t\tid: 313,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 314,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'heavy_shower_rain_and_drizzle',\n\t},\n\t{\n\t\tid: 321,\n\t\tgroup: 'drizzle',\n\t\tdescription: 'shower_drizzle',\n\t},\n\t{\n\t\tid: 500,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_rain',\n\t},\n\t{\n\t\tid: 501,\n\t\tgroup: 'rain',\n\t\tdescription: 'moderate_rain',\n\t},\n\t{\n\t\tid: 502,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_rain',\n\t},\n\t{\n\t\tid: 503,\n\t\tgroup: 'rain',\n\t\tdescription: 'very_heavy_rain',\n\t},\n\t{\n\t\tid: 504,\n\t\tgroup: 'rain',\n\t\tdescription: 'extreme_rain',\n\t},\n\t{\n\t\tid: 511,\n\t\tgroup: 'rain',\n\t\tdescription: 'freezing_rain',\n\t},\n\t{\n\t\tid: 520,\n\t\tgroup: 'rain',\n\t\tdescription: 'light_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 521,\n\t\tgroup: 'rain',\n\t\tdescription: 'shower_rain',\n\t},\n\t{\n\t\tid: 522,\n\t\tgroup: 'rain',\n\t\tdescription: 'heavy_intensity_shower_rain',\n\t},\n\t{\n\t\tid: 531,\n\t\tgroup: 'rain',\n\t\tdescription: 'ragged_shower_rain',\n\t},\n\t{\n\t\tid: 600,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_snow',\n\t},\n\t{\n\t\tid: 601,\n\t\tgroup: 'snow',\n\t\tdescription: 'snow',\n\t},\n\t{\n\t\tid: 602,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_snow',\n\t},\n\t{\n\t\tid: 611,\n\t\tgroup: 'snow',\n\t\tdescription: 'sleet',\n\t},\n\t{\n\t\tid: 612,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_sleet',\n\t},\n\t{\n\t\tid: 613,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_sleet',\n\t},\n\t{\n\t\tid: 615,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_rain_and_snow',\n\t},\n\t{\n\t\tid: 616,\n\t\tgroup: 'snow',\n\t\tdescription: 'rain_and_snow',\n\t},\n\t{\n\t\tid: 620,\n\t\tgroup: 'snow',\n\t\tdescription: 'light_shower_snow',\n\t},\n\t{\n\t\tid: 621,\n\t\tgroup: 'snow',\n\t\tdescription: 'shower_snow',\n\t},\n\t{\n\t\tid: 622,\n\t\tgroup: 'snow',\n\t\tdescription: 'heavy_shower_snow',\n\t},\n\t{\n\t\tid: 701,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'mist',\n\t},\n\t{\n\t\tid: 711,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'smoke',\n\t},\n\t{\n\t\tid: 721,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'haze',\n\t},\n\t{\n\t\tid: 731,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand_dust_whirls',\n\t},\n\t{\n\t\tid: 741,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'fog',\n\t},\n\t{\n\t\tid: 751,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'sand',\n\t},\n\t{\n\t\tid: 761,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'dust',\n\t},\n\t{\n\t\tid: 762,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'volcanic_ash',\n\t},\n\t{\n\t\tid: 771,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'squalls',\n\t},\n\t{\n\t\tid: 781,\n\t\tgroup: 'atmosphere',\n\t\tdescription: 'tornado',\n\t},\n\t{\n\t\tid: 800,\n\t\tgroup: 'clear',\n\t\tdescription: 'clear_sky',\n\t},\n\t{\n\t\tid: 801,\n\t\tgroup: 'clouds',\n\t\tdescription: 'few_clouds_11-25_percent',\n\t},\n\t{\n\t\tid: 802,\n\t\tgroup: 'clouds',\n\t\tdescription: 'scattered_clouds_25-50_percent',\n\t},\n\t{\n\t\tid: 803,\n\t\tgroup: 'clouds',\n\t\tdescription: 'broken_clouds_51-84_percent',\n\t},\n\t{\n\t\tid: 804,\n\t\tgroup: 'clouds',\n\t\tdescription: 'overcast_clouds_85-100_percent',\n\t},\n] as const;\n\nexport type WeatherID = (typeof weatherIdGroup)[number]['id'];\n\n/**\n * WeatherGroup: \"clouds\" | \"rain\" | \"snow\" | \"thunderstorm\" | \"drizzle\" | \"atmosphere\" | \"clear\"\n */\nexport type WeatherGroup = (typeof weatherIdGroup)[number]['group'];\n\n/**\n * List for weather description key types from OpenWeatherMap API based on weather id.\n *\n * This list of keys can be used to translate weather id to human readable description with different languages.\n * @example\n * const i18Weather: Record<WeatherDescription, string> = {\n * clear_sky: 'Clear sky',\n * ...\n * }\n */\nexport type WeatherDescription = (typeof weatherIdGroup)[number]['description'];\n\n/**\n * Weather id schema\n * @internal\n */\nexport const weatherIdSchema = z.custom<WeatherID>((val) => {\n\tif (typeof val !== 'number') {\n\t\treturn {message: 'Expected a number', success: false};\n\t}\n\tif (!weatherIdGroup.find((x) => x.id === val)) {\n\t\treturn {message: 'Expected a valid weather id', success: false};\n\t}\n\treturn val;\n});\n\n/**\n * get weather description key from weather id\n * @param id - weather id\n * @returns {Option<WeatherDescription>} option for weather description key\n * @example\n * const weatherComponent = ({data}) => {\n * const key = getWeatherV2Description(data.weather[0]?.id).unwrapOr('unknown');\n * return (\n * <div>\n * {t(`weather:${key}`}\n * </div>\n * );\n * }\n */\nexport function getWeatherV2Description(id: WeatherID | undefined): IOption<WeatherDescription> {\n\treturn undefinedOptionWrap(weatherIdGroup.find((x) => x.id === id)?.description);\n}\n","import {z} from 'zod';\nexport const langCodes = [\n\t'af',\n\t'al',\n\t'ar',\n\t'az',\n\t'bg',\n\t'ca',\n\t'cz',\n\t'da',\n\t'de',\n\t'el',\n\t'en',\n\t'eu',\n\t'fa',\n\t'fi',\n\t'fr',\n\t'gl',\n\t'he',\n\t'hi',\n\t'hr',\n\t'hu',\n\t'id',\n\t'it',\n\t'ja',\n\t'kr',\n\t'la',\n\t'lt',\n\t'mk',\n\t'no',\n\t'nl',\n\t'pl',\n\t'pt',\n\t'pt',\n\t'ro',\n\t'ru',\n\t'sv',\n\t'sk',\n\t'sl',\n\t'sp',\n\t'sr',\n\t'th',\n\t'tr',\n\t'ua',\n\t'vi',\n\t'zh_cn',\n\t'zh_tw',\n\t'zu',\n] as const;\nexport const langCodeSchema = z.enum(langCodes);\nexport type LangCode = z.infer<typeof langCodeSchema>;\n","import {z} from 'zod';\n\nexport const CountryCodeList = [\n\t'af',\n\t'ax',\n\t'al',\n\t'dz',\n\t'as',\n\t'ad',\n\t'ao',\n\t'ai',\n\t'aq',\n\t'ag',\n\t'ar',\n\t'am',\n\t'aw',\n\t'au',\n\t'at',\n\t'az',\n\t'bs',\n\t'bh',\n\t'bd',\n\t'bb',\n\t'by',\n\t'be',\n\t'bz',\n\t'bj',\n\t'bm',\n\t'bt',\n\t'bo',\n\t'bq',\n\t'ba',\n\t'bw',\n\t'bv',\n\t'br',\n\t'io',\n\t'bn',\n\t'bg',\n\t'bf',\n\t'bi',\n\t'kh',\n\t'cm',\n\t'ca',\n\t'cv',\n\t'ky',\n\t'cf',\n\t'td',\n\t'cl',\n\t'cn',\n\t'cx',\n\t'cc',\n\t'co',\n\t'km',\n\t'cg',\n\t'cd',\n\t'ck',\n\t'cr',\n\t'ci',\n\t'hr',\n\t'cu',\n\t'cw',\n\t'cy',\n\t'cz',\n\t'dk',\n\t'dj',\n\t'dm',\n\t'do',\n\t'ec',\n\t'eg',\n\t'sv',\n\t'gq',\n\t'er',\n\t'ee',\n\t'et',\n\t'fk',\n\t'fo',\n\t'fj',\n\t'fi',\n\t'fr',\n\t'gf',\n\t'pf',\n\t'tf',\n\t'ga',\n\t'gm',\n\t'ge',\n\t'de',\n\t'gh',\n\t'gi',\n\t'gr',\n\t'gl',\n\t'gd',\n\t'gp',\n\t'gu',\n\t'gt',\n\t'gg',\n\t'gn',\n\t'gw',\n\t'gy',\n\t'ht',\n\t'hm',\n\t'va',\n\t'hn',\n\t'hk',\n\t'hu',\n\t'is',\n\t'in',\n\t'id',\n\t'ir',\n\t'iq',\n\t'ie',\n\t'im',\n\t'il',\n\t'it',\n\t'jm',\n\t'jp',\n\t'je',\n\t'jo',\n\t'kz',\n\t'ke',\n\t'ki',\n\t'kp',\n\t'kr',\n\t'kw',\n\t'kg',\n\t'la',\n\t'lv',\n\t'lb',\n\t'ls',\n\t'lr',\n\t'ly',\n\t'li',\n\t'lt',\n\t'lu',\n\t'mo',\n\t'mk',\n\t'mg',\n\t'mw',\n\t'my',\n\t'mv',\n\t'ml',\n\t'mt',\n\t'mh',\n\t'mq',\n\t'mr',\n\t'mu',\n\t'yt',\n\t'mx',\n\t'fm',\n\t'md',\n\t'mc',\n\t'mn',\n\t'me',\n\t'ms',\n\t'ma',\n\t'mz',\n\t'mm',\n\t'na',\n\t'nr',\n\t'np',\n\t'nl',\n\t'nc',\n\t'nz',\n\t'ni',\n\t'ne',\n\t'ng',\n\t'nu',\n\t'nf',\n\t'mp',\n\t'no',\n\t'om',\n\t'pk',\n\t'pw',\n\t'ps',\n\t'pa',\n\t'pg',\n\t'py',\n\t'pe',\n\t'ph',\n\t'pn',\n\t'pl',\n\t'pt',\n\t'pr',\n\t'qa',\n\t're',\n\t'ro',\n\t'ru',\n\t'rw',\n\t'bl',\n\t'sh',\n\t'kn',\n\t'lc',\n\t'mf',\n\t'pm',\n\t'vc',\n\t'ws',\n\t'sm',\n\t'st',\n\t'sa',\n\t'sn',\n\t'rs',\n\t'sc',\n\t'sl',\n\t'sg',\n\t'sx',\n\t'sk',\n\t'si',\n\t'sb',\n\t'so',\n\t'za',\n\t'gs',\n\t'ss',\n\t'es',\n\t'lk',\n\t'sd',\n\t'sr',\n\t'sj',\n\t'sz',\n\t'se',\n\t'ch',\n\t'sy',\n\t'tw',\n\t'tj',\n\t'tz',\n\t'th',\n\t'tl',\n\t'tg',\n\t'tk',\n\t'to',\n\t'tt',\n\t'tn',\n\t'tr',\n\t'tm',\n\t'tc',\n\t'tv',\n\t'ug',\n\t'ua',\n\t'ae',\n\t'gb',\n\t'us',\n\t'um',\n\t'uy',\n\t'uz',\n\t'vu',\n\t've',\n\t'vn',\n\t'vg',\n\t'vi',\n\t'wf',\n\t'eh',\n\t'ye',\n\t'zm',\n\t'zw',\n] as const;\n/**\n * @internal\n */\nexport const CountryCodeSchema = z.enum(CountryCodeList);\nexport type CountryCode = z.infer<typeof CountryCodeSchema>;\n"],"mappings":";AACA,SAAQ,KAAmB,IAAI,iBAAiB,8BAA6B;;;ACGtE,SAAS,kBAAkB,KAAwC;AACzE,MAAI,eAAe,gBAAgB,eAAe,WAAW;AAC5D,WAAO;AAAA,EACR,OAAO;AACN,WAAO,IAAI,UAAU,kBAAkB,OAAO,GAAG,CAAC,EAAE;AAAA,EACrD;AACD;;;ACVA,SAAQ,KAAAA,UAAQ;;;ACAhB,SAAQ,SAAQ;AAChB,IAAM,cAAc,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKlF,IAAM,oBAAoB,EAAE,KAAK,WAAW;AAI5C,IAAM,gBAAgB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAKpF,IAAM,sBAAsB,EAAE,KAAK,aAAa;AAMzC,IAAM,aAAa,EAAE,MAAM,CAAC,mBAAmB,mBAAmB,CAAC;;;ACrB1E,SAAsB,2BAA0B;AAChD,SAAQ,KAAAC,UAAQ;AAKT,IAAM,iBAAiB;AAAA,EAC7B;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACd;AAAA,EAC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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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","names":["z","z","z","z","z","data"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mharj/openweathermap",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Open Weather API Client",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -31,37 +31,41 @@
|
|
|
31
31
|
},
|
|
32
32
|
"homepage": "https://github.com/mharj/ts-openweather#readme",
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@avanio/expire-cache": "^0.6.
|
|
35
|
-
"@
|
|
36
|
-
"@
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
40
|
-
"@
|
|
41
|
-
"@
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
-
"
|
|
45
|
-
"eslint": "^8.
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"eslint
|
|
49
|
-
"eslint-
|
|
50
|
-
"eslint-
|
|
51
|
-
"
|
|
34
|
+
"@avanio/expire-cache": "^0.6.7",
|
|
35
|
+
"@avanio/logger-like": "^0.2.11",
|
|
36
|
+
"@cspell/eslint-plugin": "^8.17.5",
|
|
37
|
+
"@eslint/js": "^9.22.0",
|
|
38
|
+
"@luolapeikko/cache-types": "^0.0.8",
|
|
39
|
+
"@luolapeikko/result-option": "^1.0.5",
|
|
40
|
+
"@luolapeikko/ts-common": "^0.3.3",
|
|
41
|
+
"@stylistic/eslint-plugin": "^4.2.0",
|
|
42
|
+
"@stylistic/eslint-plugin-ts": "^4.2.0",
|
|
43
|
+
"@types/node": "^22.13.10",
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "^8.26.1",
|
|
45
|
+
"@typescript-eslint/parser": "^8.26.1",
|
|
46
|
+
"@vitest/coverage-v8": "^3.0.8",
|
|
47
|
+
"c8": "^10.1.3",
|
|
48
|
+
"eslint": "^9.22.0",
|
|
49
|
+
"eslint-config-prettier": "^10.1.1",
|
|
50
|
+
"eslint-import-resolver-typescript": "^3.8.6",
|
|
51
|
+
"eslint-plugin-import": "^2.31.0",
|
|
52
|
+
"eslint-plugin-prettier": "^5.2.3",
|
|
53
|
+
"eslint-plugin-sonarjs": "^3.0.2",
|
|
54
|
+
"prettier": "^3.5.3",
|
|
52
55
|
"source-map-support": "^0.5.21",
|
|
53
56
|
"tslib": "^2.8.1",
|
|
54
|
-
"tsup": "^8.
|
|
55
|
-
"typedoc": "^0.
|
|
56
|
-
"typedoc-plugin-zod": "^1.
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
57
|
+
"tsup": "^8.4.0",
|
|
58
|
+
"typedoc": "^0.27.9",
|
|
59
|
+
"typedoc-plugin-zod": "^1.4.0",
|
|
60
|
+
"typescript-eslint": "^8.26.1",
|
|
61
|
+
"vite": "^6.2.1",
|
|
62
|
+
"vitest": "^3.0.8",
|
|
63
|
+
"zod": "^3.24.2"
|
|
60
64
|
},
|
|
61
65
|
"peerDependencies": {
|
|
62
66
|
"@luolapeikko/cache-types": "^0.0",
|
|
63
67
|
"@luolapeikko/result-option": "^1",
|
|
64
|
-
"@luolapeikko/ts-common": "
|
|
68
|
+
"@luolapeikko/ts-common": ">= 0.0.1",
|
|
65
69
|
"zod": "^3"
|
|
66
70
|
},
|
|
67
71
|
"scripts": {
|