@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 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 src_exports = {};
22
- __export(src_exports, {
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(src_exports);
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 && contentType.startsWith("application/json") || false;
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 && contentType.startsWith("application/json") || false;
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;
@@ -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.0",
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.3",
35
- "@luolapeikko/cache-types": "^0.0.7",
36
- "@luolapeikko/result-option": "^1.0.3",
37
- "@luolapeikko/ts-common": "^0.2.4",
38
- "@stylistic/eslint-plugin": "^2.11.0",
39
- "@stylistic/eslint-plugin-ts": "^2.11.0",
40
- "@types/node": "^18.19.64",
41
- "@typescript-eslint/eslint-plugin": "^8.15.0",
42
- "@typescript-eslint/parser": "^8.15.0",
43
- "@vitest/coverage-v8": "^2.1.5",
44
- "c8": "^10.1.2",
45
- "eslint": "^8.57.1",
46
- "eslint-config-prettier": "^9.1.0",
47
- "eslint-config-standard": "^17.1.0",
48
- "eslint-plugin-deprecation": "^3.0.0",
49
- "eslint-plugin-prettier": "^5.2.1",
50
- "eslint-plugin-sonarjs": "^0.19.0",
51
- "prettier": "^3.3.3",
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.3.5",
55
- "typedoc": "^0.26.11",
56
- "typedoc-plugin-zod": "^1.2.1",
57
- "vite": "^5.4.11",
58
- "vitest": "^2.1.4",
59
- "zod": "^3.23.8"
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": "^0.0 || ^0.1 || ^0.2",
68
+ "@luolapeikko/ts-common": ">= 0.0.1",
65
69
  "zod": "^3"
66
70
  },
67
71
  "scripts": {