@mharj/openweathermap 0.0.8 → 0.1.0
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 +14 -21
- package/dist/index.d.ts +14 -21
- package/dist/index.js +17 -14
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +26 -51
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
import { IOption, IResult } from '@luolapeikko/result-option';
|
|
2
3
|
import { IAsyncCache } from '@luolapeikko/cache-types';
|
|
3
|
-
import {
|
|
4
|
+
import { Loadable } from '@luolapeikko/ts-common';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* @internal
|
|
@@ -516,16 +517,6 @@ declare const CountryCodeList: readonly ["af", "ax", "al", "dz", "as", "ad", "ao
|
|
|
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"]>;
|
|
517
518
|
type CountryCode = z.infer<typeof CountryCodeSchema>;
|
|
518
519
|
|
|
519
|
-
/**
|
|
520
|
-
* Generic argument which can be value, Promise of value, function which returns value or Promise of value.
|
|
521
|
-
* @example
|
|
522
|
-
* function solveLoadable(value: Loadable<string>): string | Promise<string> {
|
|
523
|
-
* return typeof value === 'function' ? value() : value;
|
|
524
|
-
* }
|
|
525
|
-
*/
|
|
526
|
-
type Loadable<T> = T | Promise<T> | (() => T) | (() => Promise<T>);
|
|
527
|
-
declare function solveLoadable(value: Loadable<string>): string | Promise<string>;
|
|
528
|
-
|
|
529
520
|
/**
|
|
530
521
|
* Interface for OpenWeatherMap API v2 implementation.
|
|
531
522
|
*/
|
|
@@ -538,16 +529,17 @@ interface IOpenWeatherV2 {
|
|
|
538
529
|
* @default {lang: 'en', units: 'standard'} in API
|
|
539
530
|
* @example
|
|
540
531
|
* {lang: 'fi', units: 'metric'}
|
|
532
|
+
* @since v0.0.1
|
|
541
533
|
*/
|
|
542
534
|
type OpenWeatherV2CommonOptions = {
|
|
543
535
|
/**
|
|
544
536
|
* Language code
|
|
545
537
|
*/
|
|
546
|
-
lang
|
|
538
|
+
lang: LangCode;
|
|
547
539
|
/**
|
|
548
540
|
* Weather units
|
|
549
541
|
*/
|
|
550
|
-
units
|
|
542
|
+
units: 'standard' | 'metric' | 'imperial';
|
|
551
543
|
};
|
|
552
544
|
/**
|
|
553
545
|
* Open Weather V2 API
|
|
@@ -571,6 +563,7 @@ type OpenWeatherV2CommonOptions = {
|
|
|
571
563
|
* } else {
|
|
572
564
|
* const err: DOMException | TypeError = data.err();
|
|
573
565
|
* }
|
|
566
|
+
* @since v0.0.1
|
|
574
567
|
*/
|
|
575
568
|
declare class OpenWeatherV2 {
|
|
576
569
|
private cache;
|
|
@@ -587,7 +580,7 @@ declare class OpenWeatherV2 {
|
|
|
587
580
|
/**
|
|
588
581
|
* get weather by Id
|
|
589
582
|
* @param {number} id - Weather station ID
|
|
590
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
583
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
591
584
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
592
585
|
* @example
|
|
593
586
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});
|
|
@@ -597,12 +590,12 @@ declare class OpenWeatherV2 {
|
|
|
597
590
|
* const error: DOMException | TypeError = result.err();
|
|
598
591
|
* }
|
|
599
592
|
*/
|
|
600
|
-
getWeatherById(id: number,
|
|
593
|
+
getWeatherById(id: number, currentOpts?: Partial<OpenWeatherV2CommonOptions>): Promise<IResult<WeatherDataV2, DOMException | TypeError>>;
|
|
601
594
|
/**
|
|
602
595
|
* get weather with city name and optional country code
|
|
603
596
|
* @param {string} city - City name
|
|
604
597
|
* @param {countryCode=} countryCode - Optional Country code
|
|
605
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
598
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
606
599
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
607
600
|
* @example
|
|
608
601
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});
|
|
@@ -612,12 +605,12 @@ declare class OpenWeatherV2 {
|
|
|
612
605
|
* const error: DOMException | TypeError = result.err();
|
|
613
606
|
* }
|
|
614
607
|
*/
|
|
615
|
-
getWeatherByCity(city: string, countryCode?: CountryCode,
|
|
608
|
+
getWeatherByCity(city: string, countryCode?: CountryCode, currentOpts?: Partial<OpenWeatherV2CommonOptions>): Promise<IResult<WeatherDataV2, DOMException | TypeError>>;
|
|
616
609
|
/**
|
|
617
610
|
* get weather with latitude and longitude with Result
|
|
618
611
|
* @param {number} lat - Latitude
|
|
619
612
|
* @param {number} lon - Longitude
|
|
620
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
613
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
621
614
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
622
615
|
* @example
|
|
623
616
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});
|
|
@@ -627,13 +620,13 @@ declare class OpenWeatherV2 {
|
|
|
627
620
|
* const error: DOMException | TypeError = result.err();
|
|
628
621
|
* }
|
|
629
622
|
*/
|
|
630
|
-
getWeatherByLatLon(lat: number, lon: number,
|
|
623
|
+
getWeatherByLatLon(lat: number, lon: number, currentOpts?: Partial<OpenWeatherV2CommonOptions>): Promise<IResult<WeatherDataV2, DOMException | TypeError>>;
|
|
631
624
|
private buildBaseParams;
|
|
632
625
|
/**
|
|
633
626
|
* build base cache key
|
|
634
627
|
* @param main - main cache key prefix
|
|
635
628
|
* @param opts - OpenWeatherV2CommonOptions
|
|
636
|
-
* @returns {
|
|
629
|
+
* @returns {string} cache key
|
|
637
630
|
*/
|
|
638
631
|
private buildBaseCacheKey;
|
|
639
632
|
private handleFetch;
|
|
@@ -645,4 +638,4 @@ declare class OpenWeatherV2 {
|
|
|
645
638
|
*/
|
|
646
639
|
declare function fetchErrorWrapper(err: unknown): DOMException | TypeError;
|
|
647
640
|
|
|
648
|
-
export { type CountryCode, CountryCodeList, CountryCodeSchema, type DayIcon, type IOpenWeatherV2, type Icon, type LangCode, type
|
|
641
|
+
export { type CountryCode, CountryCodeList, CountryCodeSchema, type DayIcon, type IOpenWeatherV2, type Icon, type LangCode, type NightIcon, OpenWeatherV2, type OpenWeatherV2CommonOptions, type WeatherDataV2, type WeatherDescription, type WeatherGroup, type WeatherID, assertWeatherDataV2, fetchErrorWrapper, getWeatherV2Description, iconSchema, isWeatherDataV2, langCodeSchema, langCodes, weatherDataV2Schema, weatherIdGroup, weatherIdSchema };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
import { IOption, IResult } from '@luolapeikko/result-option';
|
|
2
3
|
import { IAsyncCache } from '@luolapeikko/cache-types';
|
|
3
|
-
import {
|
|
4
|
+
import { Loadable } from '@luolapeikko/ts-common';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* @internal
|
|
@@ -516,16 +517,6 @@ declare const CountryCodeList: readonly ["af", "ax", "al", "dz", "as", "ad", "ao
|
|
|
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"]>;
|
|
517
518
|
type CountryCode = z.infer<typeof CountryCodeSchema>;
|
|
518
519
|
|
|
519
|
-
/**
|
|
520
|
-
* Generic argument which can be value, Promise of value, function which returns value or Promise of value.
|
|
521
|
-
* @example
|
|
522
|
-
* function solveLoadable(value: Loadable<string>): string | Promise<string> {
|
|
523
|
-
* return typeof value === 'function' ? value() : value;
|
|
524
|
-
* }
|
|
525
|
-
*/
|
|
526
|
-
type Loadable<T> = T | Promise<T> | (() => T) | (() => Promise<T>);
|
|
527
|
-
declare function solveLoadable(value: Loadable<string>): string | Promise<string>;
|
|
528
|
-
|
|
529
520
|
/**
|
|
530
521
|
* Interface for OpenWeatherMap API v2 implementation.
|
|
531
522
|
*/
|
|
@@ -538,16 +529,17 @@ interface IOpenWeatherV2 {
|
|
|
538
529
|
* @default {lang: 'en', units: 'standard'} in API
|
|
539
530
|
* @example
|
|
540
531
|
* {lang: 'fi', units: 'metric'}
|
|
532
|
+
* @since v0.0.1
|
|
541
533
|
*/
|
|
542
534
|
type OpenWeatherV2CommonOptions = {
|
|
543
535
|
/**
|
|
544
536
|
* Language code
|
|
545
537
|
*/
|
|
546
|
-
lang
|
|
538
|
+
lang: LangCode;
|
|
547
539
|
/**
|
|
548
540
|
* Weather units
|
|
549
541
|
*/
|
|
550
|
-
units
|
|
542
|
+
units: 'standard' | 'metric' | 'imperial';
|
|
551
543
|
};
|
|
552
544
|
/**
|
|
553
545
|
* Open Weather V2 API
|
|
@@ -571,6 +563,7 @@ type OpenWeatherV2CommonOptions = {
|
|
|
571
563
|
* } else {
|
|
572
564
|
* const err: DOMException | TypeError = data.err();
|
|
573
565
|
* }
|
|
566
|
+
* @since v0.0.1
|
|
574
567
|
*/
|
|
575
568
|
declare class OpenWeatherV2 {
|
|
576
569
|
private cache;
|
|
@@ -587,7 +580,7 @@ declare class OpenWeatherV2 {
|
|
|
587
580
|
/**
|
|
588
581
|
* get weather by Id
|
|
589
582
|
* @param {number} id - Weather station ID
|
|
590
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
583
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
591
584
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
592
585
|
* @example
|
|
593
586
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});
|
|
@@ -597,12 +590,12 @@ declare class OpenWeatherV2 {
|
|
|
597
590
|
* const error: DOMException | TypeError = result.err();
|
|
598
591
|
* }
|
|
599
592
|
*/
|
|
600
|
-
getWeatherById(id: number,
|
|
593
|
+
getWeatherById(id: number, currentOpts?: Partial<OpenWeatherV2CommonOptions>): Promise<IResult<WeatherDataV2, DOMException | TypeError>>;
|
|
601
594
|
/**
|
|
602
595
|
* get weather with city name and optional country code
|
|
603
596
|
* @param {string} city - City name
|
|
604
597
|
* @param {countryCode=} countryCode - Optional Country code
|
|
605
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
598
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
606
599
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
607
600
|
* @example
|
|
608
601
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});
|
|
@@ -612,12 +605,12 @@ declare class OpenWeatherV2 {
|
|
|
612
605
|
* const error: DOMException | TypeError = result.err();
|
|
613
606
|
* }
|
|
614
607
|
*/
|
|
615
|
-
getWeatherByCity(city: string, countryCode?: CountryCode,
|
|
608
|
+
getWeatherByCity(city: string, countryCode?: CountryCode, currentOpts?: Partial<OpenWeatherV2CommonOptions>): Promise<IResult<WeatherDataV2, DOMException | TypeError>>;
|
|
616
609
|
/**
|
|
617
610
|
* get weather with latitude and longitude with Result
|
|
618
611
|
* @param {number} lat - Latitude
|
|
619
612
|
* @param {number} lon - Longitude
|
|
620
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
613
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
621
614
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
622
615
|
* @example
|
|
623
616
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});
|
|
@@ -627,13 +620,13 @@ declare class OpenWeatherV2 {
|
|
|
627
620
|
* const error: DOMException | TypeError = result.err();
|
|
628
621
|
* }
|
|
629
622
|
*/
|
|
630
|
-
getWeatherByLatLon(lat: number, lon: number,
|
|
623
|
+
getWeatherByLatLon(lat: number, lon: number, currentOpts?: Partial<OpenWeatherV2CommonOptions>): Promise<IResult<WeatherDataV2, DOMException | TypeError>>;
|
|
631
624
|
private buildBaseParams;
|
|
632
625
|
/**
|
|
633
626
|
* build base cache key
|
|
634
627
|
* @param main - main cache key prefix
|
|
635
628
|
* @param opts - OpenWeatherV2CommonOptions
|
|
636
|
-
* @returns {
|
|
629
|
+
* @returns {string} cache key
|
|
637
630
|
*/
|
|
638
631
|
private buildBaseCacheKey;
|
|
639
632
|
private handleFetch;
|
|
@@ -645,4 +638,4 @@ declare class OpenWeatherV2 {
|
|
|
645
638
|
*/
|
|
646
639
|
declare function fetchErrorWrapper(err: unknown): DOMException | TypeError;
|
|
647
640
|
|
|
648
|
-
export { type CountryCode, CountryCodeList, CountryCodeSchema, type DayIcon, type IOpenWeatherV2, type Icon, type LangCode, type
|
|
641
|
+
export { type CountryCode, CountryCodeList, CountryCodeSchema, type DayIcon, type IOpenWeatherV2, type Icon, type LangCode, type NightIcon, OpenWeatherV2, type OpenWeatherV2CommonOptions, type WeatherDataV2, type WeatherDescription, type WeatherGroup, type WeatherID, assertWeatherDataV2, fetchErrorWrapper, getWeatherV2Description, iconSchema, isWeatherDataV2, langCodeSchema, langCodes, weatherDataV2Schema, weatherIdGroup, weatherIdSchema };
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,6 @@ __export(src_exports, {
|
|
|
30
30
|
isWeatherDataV2: () => isWeatherDataV2,
|
|
31
31
|
langCodeSchema: () => langCodeSchema,
|
|
32
32
|
langCodes: () => langCodes,
|
|
33
|
-
solveLoadable: () => solveLoadable,
|
|
34
33
|
weatherDataV2Schema: () => weatherDataV2Schema,
|
|
35
34
|
weatherIdGroup: () => weatherIdGroup,
|
|
36
35
|
weatherIdSchema: () => weatherIdSchema
|
|
@@ -714,11 +713,6 @@ var CountryCodeList = [
|
|
|
714
713
|
];
|
|
715
714
|
var CountryCodeSchema = import_zod5.z.enum(CountryCodeList);
|
|
716
715
|
|
|
717
|
-
// src/types/index.ts
|
|
718
|
-
function solveLoadable(value) {
|
|
719
|
-
return typeof value === "function" ? value() : value;
|
|
720
|
-
}
|
|
721
|
-
|
|
722
716
|
// src/OpenWeatherV2.ts
|
|
723
717
|
var import_result_option2 = require("@luolapeikko/result-option");
|
|
724
718
|
|
|
@@ -746,6 +740,13 @@ function isJson(response) {
|
|
|
746
740
|
function isOpenWeatherError(data) {
|
|
747
741
|
return typeof data === "object" && data !== null && "cod" in data && "message" in data;
|
|
748
742
|
}
|
|
743
|
+
var defaultCommonOptions = {
|
|
744
|
+
lang: "en",
|
|
745
|
+
units: "standard"
|
|
746
|
+
};
|
|
747
|
+
function buildOpts(opts) {
|
|
748
|
+
return Object.assign({}, defaultCommonOptions, opts);
|
|
749
|
+
}
|
|
749
750
|
var basePath = "https://api.openweathermap.org/data/2.5/weather";
|
|
750
751
|
function buildUrl(params) {
|
|
751
752
|
return `${basePath}?${params.toString()}`;
|
|
@@ -803,7 +804,7 @@ var OpenWeatherV2 = class {
|
|
|
803
804
|
/**
|
|
804
805
|
* get weather by Id
|
|
805
806
|
* @param {number} id - Weather station ID
|
|
806
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
807
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
807
808
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
808
809
|
* @example
|
|
809
810
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});
|
|
@@ -813,8 +814,9 @@ var OpenWeatherV2 = class {
|
|
|
813
814
|
* const error: DOMException | TypeError = result.err();
|
|
814
815
|
* }
|
|
815
816
|
*/
|
|
816
|
-
async getWeatherById(id,
|
|
817
|
+
async getWeatherById(id, currentOpts = {}) {
|
|
817
818
|
try {
|
|
819
|
+
const opts = buildOpts(currentOpts);
|
|
818
820
|
const cacheKey = this.buildBaseCacheKey(`id:${id}`, opts);
|
|
819
821
|
let cacheEntry = this.cache && await this.cache.get(cacheKey);
|
|
820
822
|
if (!cacheEntry) {
|
|
@@ -831,7 +833,7 @@ var OpenWeatherV2 = class {
|
|
|
831
833
|
* get weather with city name and optional country code
|
|
832
834
|
* @param {string} city - City name
|
|
833
835
|
* @param {countryCode=} countryCode - Optional Country code
|
|
834
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
836
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
835
837
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
836
838
|
* @example
|
|
837
839
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});
|
|
@@ -841,8 +843,9 @@ var OpenWeatherV2 = class {
|
|
|
841
843
|
* const error: DOMException | TypeError = result.err();
|
|
842
844
|
* }
|
|
843
845
|
*/
|
|
844
|
-
async getWeatherByCity(city, countryCode,
|
|
846
|
+
async getWeatherByCity(city, countryCode, currentOpts = {}) {
|
|
845
847
|
try {
|
|
848
|
+
const opts = buildOpts(currentOpts);
|
|
846
849
|
const cacheKey = this.buildBaseCacheKey(`q:${city}:${countryCode}`, opts);
|
|
847
850
|
let cacheEntry = this.cache && await this.cache.get(cacheKey);
|
|
848
851
|
if (!cacheEntry) {
|
|
@@ -859,7 +862,7 @@ var OpenWeatherV2 = class {
|
|
|
859
862
|
* get weather with latitude and longitude with Result
|
|
860
863
|
* @param {number} lat - Latitude
|
|
861
864
|
* @param {number} lon - Longitude
|
|
862
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
865
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
863
866
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
864
867
|
* @example
|
|
865
868
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});
|
|
@@ -869,8 +872,9 @@ var OpenWeatherV2 = class {
|
|
|
869
872
|
* const error: DOMException | TypeError = result.err();
|
|
870
873
|
* }
|
|
871
874
|
*/
|
|
872
|
-
async getWeatherByLatLon(lat, lon,
|
|
875
|
+
async getWeatherByLatLon(lat, lon, currentOpts = {}) {
|
|
873
876
|
try {
|
|
877
|
+
const opts = buildOpts(currentOpts);
|
|
874
878
|
const cacheKey = this.buildBaseCacheKey(`latlon:${lat}:${lon}`, opts);
|
|
875
879
|
let cacheEntry = this.cache && await this.cache.get(cacheKey);
|
|
876
880
|
if (!cacheEntry) {
|
|
@@ -894,7 +898,7 @@ var OpenWeatherV2 = class {
|
|
|
894
898
|
* build base cache key
|
|
895
899
|
* @param main - main cache key prefix
|
|
896
900
|
* @param opts - OpenWeatherV2CommonOptions
|
|
897
|
-
* @returns {
|
|
901
|
+
* @returns {string} cache key
|
|
898
902
|
*/
|
|
899
903
|
buildBaseCacheKey(main, { lang, units }) {
|
|
900
904
|
return `${main}:${lang}:${units}`;
|
|
@@ -931,7 +935,6 @@ var OpenWeatherV2 = class {
|
|
|
931
935
|
isWeatherDataV2,
|
|
932
936
|
langCodeSchema,
|
|
933
937
|
langCodes,
|
|
934
|
-
solveLoadable,
|
|
935
938
|
weatherDataV2Schema,
|
|
936
939
|
weatherIdGroup,
|
|
937
940
|
weatherIdSchema
|
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/types/index.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","export * from './v2';\nexport * from './ISO3166-Countries';\n\n/**\n * Generic argument which can be value, Promise of value, function which returns value or Promise of value.\n * @example\n * function solveLoadable(value: Loadable<string>): string | Promise<string> {\n * return typeof value === 'function' ? value() : value;\n * }\n */\nexport type Loadable<T> = T | Promise<T> | (() => T) | (() => Promise<T>);\n\nexport function solveLoadable(value: Loadable<string>): string | Promise<string> {\n\treturn typeof value === 'function' ? value() : value;\n}\n","import {assertWeatherDataV2, type CountryCode, type LangCode, type Loadable, 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';\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 */\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 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 * 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 */\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=} opts - 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, opts: OpenWeatherV2CommonOptions = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\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=} opts - 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\topts: OpenWeatherV2CommonOptions = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\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=} opts - 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(lat: number, lon: number, opts: OpenWeatherV2CommonOptions = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\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 {CacheKey}\n\t */\n\tprivate buildBaseCacheKey(main: string, {lang, units}: OpenWeatherV2CommonOptions): string {\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;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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AA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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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/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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -675,11 +675,6 @@ var CountryCodeList = [
|
|
|
675
675
|
];
|
|
676
676
|
var CountryCodeSchema = z5.enum(CountryCodeList);
|
|
677
677
|
|
|
678
|
-
// src/types/index.ts
|
|
679
|
-
function solveLoadable(value) {
|
|
680
|
-
return typeof value === "function" ? value() : value;
|
|
681
|
-
}
|
|
682
|
-
|
|
683
678
|
// src/OpenWeatherV2.ts
|
|
684
679
|
import { Err, Ok, safeAsyncResult, safeAsyncResultBuilder } from "@luolapeikko/result-option";
|
|
685
680
|
|
|
@@ -707,6 +702,13 @@ function isJson(response) {
|
|
|
707
702
|
function isOpenWeatherError(data) {
|
|
708
703
|
return typeof data === "object" && data !== null && "cod" in data && "message" in data;
|
|
709
704
|
}
|
|
705
|
+
var defaultCommonOptions = {
|
|
706
|
+
lang: "en",
|
|
707
|
+
units: "standard"
|
|
708
|
+
};
|
|
709
|
+
function buildOpts(opts) {
|
|
710
|
+
return Object.assign({}, defaultCommonOptions, opts);
|
|
711
|
+
}
|
|
710
712
|
var basePath = "https://api.openweathermap.org/data/2.5/weather";
|
|
711
713
|
function buildUrl(params) {
|
|
712
714
|
return `${basePath}?${params.toString()}`;
|
|
@@ -764,7 +766,7 @@ var OpenWeatherV2 = class {
|
|
|
764
766
|
/**
|
|
765
767
|
* get weather by Id
|
|
766
768
|
* @param {number} id - Weather station ID
|
|
767
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
769
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
768
770
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
769
771
|
* @example
|
|
770
772
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherResultById(id: 564, {lang: 'fi'});
|
|
@@ -774,8 +776,9 @@ var OpenWeatherV2 = class {
|
|
|
774
776
|
* const error: DOMException | TypeError = result.err();
|
|
775
777
|
* }
|
|
776
778
|
*/
|
|
777
|
-
async getWeatherById(id,
|
|
779
|
+
async getWeatherById(id, currentOpts = {}) {
|
|
778
780
|
try {
|
|
781
|
+
const opts = buildOpts(currentOpts);
|
|
779
782
|
const cacheKey = this.buildBaseCacheKey(`id:${id}`, opts);
|
|
780
783
|
let cacheEntry = this.cache && await this.cache.get(cacheKey);
|
|
781
784
|
if (!cacheEntry) {
|
|
@@ -792,7 +795,7 @@ var OpenWeatherV2 = class {
|
|
|
792
795
|
* get weather with city name and optional country code
|
|
793
796
|
* @param {string} city - City name
|
|
794
797
|
* @param {countryCode=} countryCode - Optional Country code
|
|
795
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
798
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
796
799
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
797
800
|
* @example
|
|
798
801
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByCity('Helsinki', 'fi', {lang: 'fi'});
|
|
@@ -802,8 +805,9 @@ var OpenWeatherV2 = class {
|
|
|
802
805
|
* const error: DOMException | TypeError = result.err();
|
|
803
806
|
* }
|
|
804
807
|
*/
|
|
805
|
-
async getWeatherByCity(city, countryCode,
|
|
808
|
+
async getWeatherByCity(city, countryCode, currentOpts = {}) {
|
|
806
809
|
try {
|
|
810
|
+
const opts = buildOpts(currentOpts);
|
|
807
811
|
const cacheKey = this.buildBaseCacheKey(`q:${city}:${countryCode}`, opts);
|
|
808
812
|
let cacheEntry = this.cache && await this.cache.get(cacheKey);
|
|
809
813
|
if (!cacheEntry) {
|
|
@@ -820,7 +824,7 @@ var OpenWeatherV2 = class {
|
|
|
820
824
|
* get weather with latitude and longitude with Result
|
|
821
825
|
* @param {number} lat - Latitude
|
|
822
826
|
* @param {number} lon - Longitude
|
|
823
|
-
* @param {OpenWeatherV2CommonOptions=}
|
|
827
|
+
* @param {OpenWeatherV2CommonOptions=} currentOpts - Common options, example ```{lang: 'fi', units: 'metric'}```, defaults ```{lang: 'en', units: 'standard'}```
|
|
824
828
|
* @return {Promise<Result<WeatherDataV2, DOMException | TypeError>>} Weather data Result Promise
|
|
825
829
|
* @example
|
|
826
830
|
* const result: Result<WeatherDataV2, DOMException | TypeError> = await weather.getWeatherByLatLon(60.1699, 24.9384, {lang: 'fi'});
|
|
@@ -830,8 +834,9 @@ var OpenWeatherV2 = class {
|
|
|
830
834
|
* const error: DOMException | TypeError = result.err();
|
|
831
835
|
* }
|
|
832
836
|
*/
|
|
833
|
-
async getWeatherByLatLon(lat, lon,
|
|
837
|
+
async getWeatherByLatLon(lat, lon, currentOpts = {}) {
|
|
834
838
|
try {
|
|
839
|
+
const opts = buildOpts(currentOpts);
|
|
835
840
|
const cacheKey = this.buildBaseCacheKey(`latlon:${lat}:${lon}`, opts);
|
|
836
841
|
let cacheEntry = this.cache && await this.cache.get(cacheKey);
|
|
837
842
|
if (!cacheEntry) {
|
|
@@ -855,7 +860,7 @@ var OpenWeatherV2 = class {
|
|
|
855
860
|
* build base cache key
|
|
856
861
|
* @param main - main cache key prefix
|
|
857
862
|
* @param opts - OpenWeatherV2CommonOptions
|
|
858
|
-
* @returns {
|
|
863
|
+
* @returns {string} cache key
|
|
859
864
|
*/
|
|
860
865
|
buildBaseCacheKey(main, { lang, units }) {
|
|
861
866
|
return `${main}:${lang}:${units}`;
|
|
@@ -891,7 +896,6 @@ export {
|
|
|
891
896
|
isWeatherDataV2,
|
|
892
897
|
langCodeSchema,
|
|
893
898
|
langCodes,
|
|
894
|
-
solveLoadable,
|
|
895
899
|
weatherDataV2Schema,
|
|
896
900
|
weatherIdGroup,
|
|
897
901
|
weatherIdSchema
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/v2/Icon.ts","../src/types/v2/weatherIdGroup.ts","../src/types/v2/index.ts","../src/types/v2/Language.ts","../src/types/ISO3166-Countries.ts","../src/types/index.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","export * from './v2';\nexport * from './ISO3166-Countries';\n\n/**\n * Generic argument which can be value, Promise of value, function which returns value or Promise of value.\n * @example\n * function solveLoadable(value: Loadable<string>): string | Promise<string> {\n * return typeof value === 'function' ? value() : value;\n * }\n */\nexport type Loadable<T> = T | Promise<T> | (() => T) | (() => Promise<T>);\n\nexport function solveLoadable(value: Loadable<string>): string | Promise<string> {\n\treturn typeof value === 'function' ? value() : value;\n}\n","import {assertWeatherDataV2, type CountryCode, type LangCode, type Loadable, 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';\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 */\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 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 * 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 */\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=} opts - 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, opts: OpenWeatherV2CommonOptions = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\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=} opts - 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\topts: OpenWeatherV2CommonOptions = {},\n\t): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\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=} opts - 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(lat: number, lon: number, opts: OpenWeatherV2CommonOptions = {}): Promise<IResult<WeatherDataV2, DOMException | TypeError>> {\n\t\ttry {\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 {CacheKey}\n\t */\n\tprivate buildBaseCacheKey(main: string, {lang, units}: OpenWeatherV2CommonOptions): string {\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/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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mharj/openweathermap",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Open Weather API Client",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -12,46 +12,9 @@
|
|
|
12
12
|
"import": "./dist/index.mjs"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"doc": "typedoc",
|
|
17
|
-
"build": "tsup src/index.ts --sourcemap --format cjs,esm --dts --clean",
|
|
18
|
-
"prepublishOnly": "npm run build",
|
|
19
|
-
"test": "vitest test --run --no-isolate --coverage",
|
|
20
|
-
"coverage": "vitest test --run --no-isolate --reporter=dot --coverage --coverage.reporter=lcov",
|
|
21
|
-
"lint": "eslint . --ext .ts"
|
|
22
|
-
},
|
|
23
15
|
"files": [
|
|
24
16
|
"dist"
|
|
25
17
|
],
|
|
26
|
-
"mocha": {
|
|
27
|
-
"exit": true,
|
|
28
|
-
"extension": [
|
|
29
|
-
"ts",
|
|
30
|
-
"js"
|
|
31
|
-
],
|
|
32
|
-
"recursive": true,
|
|
33
|
-
"require": [
|
|
34
|
-
"ts-node/register",
|
|
35
|
-
"source-map-support/register"
|
|
36
|
-
],
|
|
37
|
-
"reporters": [
|
|
38
|
-
"spec",
|
|
39
|
-
"mocha-junit-reporter"
|
|
40
|
-
]
|
|
41
|
-
},
|
|
42
|
-
"nyc": {
|
|
43
|
-
"extension": [
|
|
44
|
-
".ts"
|
|
45
|
-
],
|
|
46
|
-
"include": [
|
|
47
|
-
"src"
|
|
48
|
-
],
|
|
49
|
-
"reporter": [
|
|
50
|
-
"text",
|
|
51
|
-
"html"
|
|
52
|
-
],
|
|
53
|
-
"all": true
|
|
54
|
-
},
|
|
55
18
|
"repository": {
|
|
56
19
|
"type": "git",
|
|
57
20
|
"url": "git+https://github.com/mharj/ts-openweather.git"
|
|
@@ -67,19 +30,17 @@
|
|
|
67
30
|
"url": "https://github.com/mharj/ts-openweather/issues"
|
|
68
31
|
},
|
|
69
32
|
"homepage": "https://github.com/mharj/ts-openweather#readme",
|
|
70
|
-
"dependencies": {
|
|
71
|
-
"@luolapeikko/cache-types": "^0.0.7",
|
|
72
|
-
"@luolapeikko/result-option": "^1.0.3",
|
|
73
|
-
"zod": "^3.23.8"
|
|
74
|
-
},
|
|
75
33
|
"devDependencies": {
|
|
76
34
|
"@avanio/expire-cache": "^0.6.3",
|
|
77
|
-
"@
|
|
78
|
-
"@
|
|
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",
|
|
79
40
|
"@types/node": "^18.19.64",
|
|
80
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
81
|
-
"@typescript-eslint/parser": "^8.
|
|
82
|
-
"@vitest/coverage-v8": "^2.1.
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^8.15.0",
|
|
42
|
+
"@typescript-eslint/parser": "^8.15.0",
|
|
43
|
+
"@vitest/coverage-v8": "^2.1.5",
|
|
83
44
|
"c8": "^10.1.2",
|
|
84
45
|
"eslint": "^8.57.1",
|
|
85
46
|
"eslint-config-prettier": "^9.1.0",
|
|
@@ -93,7 +54,21 @@
|
|
|
93
54
|
"tsup": "^8.3.5",
|
|
94
55
|
"typedoc": "^0.26.11",
|
|
95
56
|
"typedoc-plugin-zod": "^1.2.1",
|
|
96
|
-
"vite": "^5.4.
|
|
97
|
-
"vitest": "^2.1.4"
|
|
57
|
+
"vite": "^5.4.11",
|
|
58
|
+
"vitest": "^2.1.4",
|
|
59
|
+
"zod": "^3.23.8"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"@luolapeikko/cache-types": "^0.0",
|
|
63
|
+
"@luolapeikko/result-option": "^1",
|
|
64
|
+
"@luolapeikko/ts-common": "^0.0 || ^0.1 || ^0.2",
|
|
65
|
+
"zod": "^3"
|
|
66
|
+
},
|
|
67
|
+
"scripts": {
|
|
68
|
+
"doc": "typedoc",
|
|
69
|
+
"build": "tsup src/index.ts --sourcemap --format cjs,esm --dts --clean",
|
|
70
|
+
"test": "vitest test --run --no-isolate --coverage",
|
|
71
|
+
"coverage": "vitest test --run --no-isolate --reporter=dot --coverage --coverage.reporter=lcov",
|
|
72
|
+
"lint": "eslint . --ext .ts"
|
|
98
73
|
}
|
|
99
|
-
}
|
|
74
|
+
}
|