{"version":3,"file":"maptiler-client.cjs","sources":["../src/config.ts","../src/language.ts","../src/callFetch.ts","../src/defaults.ts","../src/services/ServiceError.ts","../src/services/geocoding.ts","../src/services/geolocation.ts","../src/services/coordinates.ts","../src/services/data.ts","../src/mapstyle.ts","../src/misc.ts","../src/services/staticMaps.ts","../src/services/math.ts","../node_modules/quick-lru/index.js","../src/tiledecoding.ts","../src/services/elevation.ts"],"sourcesContent":["import { BufferToPixelDataFunction } from \"./tiledecoding\";\n\nexport type FetchFunction = (\n  input: RequestInfo | URL,\n  init?: RequestInit,\n) => Promise<Response>;\n\nfunction tryGettingFetch() {\n  // this is browser, fetch exists\n  if (typeof self !== \"undefined\") {\n    return fetch.bind(self);\n  }\n\n  if (typeof global !== \"undefined\" && global.fetch) {\n    return global.fetch;\n  }\n\n  return null;\n}\n\n/**\n * The configuration object definition\n */\nclass ClientConfig {\n  /**\n   * MapTiler Cloud API key\n   */\n  private _apiKey = \"\";\n\n  /**\n   * The fetch function. To be set if in Node < 18, otherwise\n   * will be automatically resolved.\n   */\n  private _fetch: FetchFunction | null = tryGettingFetch();\n\n  /**\n   * Number of tiles to keep in cache\n   */\n  public tileCacheSize: number = 200;\n\n  public bufferToPixelData: BufferToPixelDataFunction | null;\n\n  /**\n   * Set the MapTiler Cloud API key\n   */\n  set apiKey(k: string) {\n    this._apiKey = k;\n  }\n\n  /**\n   * Get the MapTiler Cloud API key\n   */\n  get apiKey(): string {\n    return this._apiKey;\n  }\n\n  /**\n   * Set a the custom fetch function to replace the default one\n   */\n  set fetch(f: FetchFunction) {\n    this._fetch = f;\n  }\n\n  /**\n   * Get the fetch fucntion\n   */\n  get fetch(): FetchFunction | null {\n    return this._fetch;\n  }\n}\n\n/**\n * Configuration object\n */\nconst config = new ClientConfig();\n\nexport { ClientConfig, config };\n","export type LanguageInfo = {\n  /**\n   * Two-letter ISO code, such as `\"en\"` for English language.\n   * Can be `null` if the language is a flag to be evaluated at runtime,\n   * as it is the case for some \"modes\".\n   */\n  code: string | null;\n\n  /**\n   * The full OSM language flag, such as `\"name:en\"` for the English language.\n   * Can also be a non-OSM flag if the language needs to be evaluated at runtime, such as `\"auto\"`,\n   * as it is the case for some \"modes\".\n   */\n  flag: string;\n\n  /**\n   * English name of the language.\n   */\n  name: string;\n\n  /**\n   * Whether the language leverages only the latin charsets.\n   */\n  latin: boolean;\n\n  /**\n   * Some language descriptions corresponds to \"modes\" rather than to actual languages.\n   * For instance the \"visitor\" mode consists in displaying bilingual labels.\n   */\n  isMode: boolean;\n\n  /**\n   * Whether the language is compatible with the geocoding API\n   */\n  geocoding: boolean;\n};\n\n/**\n * List of \"non-ISO specific\" languages.\n */\nexport const NonISOLanguage = {\n  /**\n   * Language mode to display the labels in the end user's device language.\n   */\n  AUTO: {\n    code: null,\n    flag: \"auto\",\n    name: \"Auto\",\n    latin: false,\n    isMode: true,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * The OSM language using latin script. MapTiler discourages its use as a primary language setting due to the lack of actual linguistic specificity,\n   * though it can be an handy fallback. This is not to be confused with the \"Classical Latin\" language, which is available under the tag `.CLASSICAL_LATIN`.\n   */\n  LATIN: {\n    code: \"latin\",\n    flag: \"name:latin\",\n    name: \"Latin\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * The OSM language using non-latin script. MapTiler discourages its use as a primary language setting due to the lack of actual linguistic specificity,\n   * though it can be an handy fallback.\n   */\n  NON_LATIN: {\n    code: \"nonlatin\",\n    flag: \"name:nonlatin\",\n    name: \"Non Latin\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Using the local language generaly (but not always) means that every labels of a given region will use the dominant local language.\n   */\n  LOCAL: {\n    code: null,\n    flag: \"name\",\n    name: \"Local\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n} as const;\n\n/**\n * List of \"country specific\" languages.\n */\nexport const ISOLanguage = {\n  /**\n   * Albanian language\n   */\n  ALBANIAN: {\n    code: \"sq\",\n    flag: \"name:sq\",\n    name: \"Albanian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Amharic language\n   */\n  AMHARIC: {\n    code: \"am\",\n    flag: \"name:am\",\n    name: \"Amharic\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Arabic language (right-to-left script)\n   */\n  ARABIC: {\n    code: \"ar\",\n    flag: \"name:ar\",\n    name: \"Arabic\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Armenian language\n   */\n  ARMENIAN: {\n    code: \"hy\",\n    flag: \"name:hy\",\n    name: \"Armenian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Azerbaijani language\n   */\n  AZERBAIJANI: {\n    code: \"az\",\n    flag: \"name:az\",\n    name: \"Azerbaijani\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Basque language\n   */\n  BASQUE: {\n    code: \"eu\",\n    flag: \"name:eu\",\n    name: \"Basque\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Belarusian langauge\n   */\n  BELARUSIAN: {\n    code: \"be\",\n    flag: \"name:be\",\n    name: \"Belarusian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Bengali language\n   */\n  BENGALI: {\n    code: \"bn\",\n    flag: \"name:bn\",\n    name: \"Bengali\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Bosnian language\n   */\n  BOSNIAN: {\n    code: \"bs\",\n    flag: \"name:bs\",\n    name: \"Bosnian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Breton language\n   */\n  BRETON: {\n    code: \"br\",\n    flag: \"name:br\",\n    name: \"Breton\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Bulgarian language\n   */\n  BULGARIAN: {\n    code: \"bg\",\n    flag: \"bg\",\n    name: \"Bulgarian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Catalan language\n   */\n  CATALAN: {\n    code: \"ca\",\n    flag: \"name:ca\",\n    name: \"Catalan\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Chinese language\n   */\n  CHINESE: {\n    code: \"zh\",\n    flag: \"name:zh\",\n    name: \"Chinese\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Traditional Chinese language\n   */\n  TRADITIONAL_CHINESE: {\n    code: \"zh-Hant\",\n    flag: \"name:zh-Hant\",\n    name: \"Chinese (traditional)\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Simplified Chinese language\n   */\n  SIMPLIFIED_CHINESE: {\n    code: \"zh-Hans\",\n    flag: \"name:zh-Hans\",\n    name: \"Chinese (simplified)\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Corsican language\n   */\n  CORSICAN: {\n    code: \"co\",\n    flag: \"name:co\",\n    name: \"Corsican\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Croatian language\n   */\n  CROATIAN: {\n    code: \"hr\",\n    flag: \"name:hr\",\n    name: \"Croatian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Czech language\n   */\n  CZECH: {\n    code: \"cs\",\n    flag: \"name:cs\",\n    name: \"Czech\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Danish language\n   */\n  DANISH: {\n    code: \"da\",\n    flag: \"name:da\",\n    name: \"Danish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Dutch language\n   */\n  DUTCH: {\n    code: \"nl\",\n    flag: \"name:nl\",\n    name: \"Dutch\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * German language\n   */\n  GERMAN: {\n    code: \"de\",\n    flag: \"name:de\",\n    name: \"German\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Greek language\n   */\n  GREEK: {\n    code: \"el\",\n    flag: \"name:el\",\n    name: \"Greek\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * English language\n   */\n  ENGLISH: {\n    code: \"en\",\n    flag: \"name:en\",\n    name: \"English\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Esperanto language\n   */\n  ESPERANTO: {\n    code: \"eo\",\n    flag: \"name:eo\",\n    name: \"Esperanto\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Estonian language\n   */\n  ESTONIAN: {\n    code: \"et\",\n    flag: \"name:et\",\n    name: \"Estonian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Finnish language\n   */\n  FINNISH: {\n    code: \"fi\",\n    flag: \"name:fi\",\n    name: \"Finnish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * French language\n   */\n  FRENCH: {\n    code: \"fr\",\n    flag: \"name:fr\",\n    name: \"French\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Frisian language\n   */\n  FRISIAN: {\n    code: \"fy\",\n    flag: \"name:fy\",\n    name: \"Frisian (West)\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Georgian language\n   */\n  GEORGIAN: {\n    code: \"ka\",\n    flag: \"name:ka\",\n    name: \"Georgian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Hebrew language (right-to-left non-latin script)\n   */\n  HEBREW: {\n    code: \"he\",\n    flag: \"name:he\",\n    name: \"Hebrew\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Hindi language\n   */\n  HINDI: {\n    code: \"hi\",\n    flag: \"name:hi\",\n    name: \"Hindi\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Hungarian language\n   */\n  HUNGARIAN: {\n    code: \"hu\",\n    flag: \"name:hu\",\n    name: \"Hungarian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Icelandic language\n   */\n  ICELANDIC: {\n    code: \"is\",\n    flag: \"name:is\",\n    name: \"Icelandic\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Indonesian language\n   */\n  INDONESIAN: {\n    code: \"id\",\n    flag: \"name:id\",\n    name: \"Indonesian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Irish language\n   */\n  IRISH: {\n    code: \"ga\",\n    flag: \"name:ga\",\n    name: \"Irish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Italian language\n   */\n  ITALIAN: {\n    code: \"it\",\n    flag: \"name:it\",\n    name: \"Italian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language\n   */\n  JAPANESE: {\n    code: \"ja\",\n    flag: \"name:ja\",\n    name: \"Japanese\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language in Hiragana form\n   */\n  JAPANESE_HIRAGANA: {\n    code: \"ja-Hira\",\n    flag: \"name:ja-Hira\",\n    name: \"Japanese Hiragana form\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language (latin script)\n   */\n  JAPANESE_2018: {\n    code: \"ja-Latn\",\n    flag: \"name:ja-Latn\",\n    name: \"Japanese (Latin 2018)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Japanese language in Kana form (non-latin script)\n   */\n  JAPANESE_KANA: {\n    code: \"ja_kana\",\n    flag: \"name:ja_kana\",\n    name: \"Japanese (Kana)\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Japanse language, romanized (latin script)\n   */\n  JAPANESE_LATIN: {\n    code: \"ja_rm\",\n    flag: \"name:ja_rm\",\n    name: \"Japanese (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Kannada language\n   */\n  KANNADA: {\n    code: \"kn\",\n    flag: \"name:kn\",\n    name: \"Kannada\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Kazakh language\n   */\n  KAZAKH: {\n    code: \"kk\",\n    flag: \"name:kk\",\n    name: \"Kazakh\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Korean language\n   */\n  KOREAN: {\n    code: \"ko\",\n    flag: \"name:ko\",\n    name: \"Korean\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Korean language (latin script)\n   */\n  KOREAN_LATIN: {\n    code: \"ko-Latn\",\n    flag: \"name:ko-Latn\",\n    name: \"Korean (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Kurdish language\n   */\n  KURDISH: {\n    code: \"ku\",\n    flag: \"name:ku\",\n    name: \"Kurdish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Classical Latin language\n   */\n  CLASSICAL_LATIN: {\n    code: \"la\",\n    flag: \"name:la\",\n    name: \"Latin\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Latvian language\n   */\n  LATVIAN: {\n    code: \"lv\",\n    flag: \"name:lv\",\n    name: \"Latvian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Lithuanian language\n   */\n  LITHUANIAN: {\n    code: \"lt\",\n    flag: \"name:lt\",\n    name: \"Lithuanian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Luxembourgish language\n   */\n  LUXEMBOURGISH: {\n    code: \"lb\",\n    flag: \"name:lb\",\n    name: \"Luxembourgish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Macedonian language\n   */\n  MACEDONIAN: {\n    code: \"mk\",\n    flag: \"name:mk\",\n    name: \"Macedonian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Malayalm language\n   */\n  MALAYALAM: {\n    code: \"ml\",\n    flag: \"name:ml\",\n    name: \"Malayalam\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Maltese language\n   */\n  MALTESE: {\n    code: \"mt\",\n    flag: \"name:mt\",\n    name: \"Maltese\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Norwegian language\n   */\n  NORWEGIAN: {\n    code: \"no\",\n    flag: \"name:no\",\n    name: \"Norwegian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Occitan language\n   */\n  OCCITAN: {\n    code: \"oc\",\n    flag: \"name:oc\",\n    name: \"Occitan\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Persian language\n   */\n  PERSIAN: {\n    code: \"fa\",\n    flag: \"name:fa\",\n    name: \"Persian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Polish language\n   */\n  POLISH: {\n    code: \"pl\",\n    flag: \"name:pl\",\n    name: \"Polish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Portuguese language\n   */\n  PORTUGUESE: {\n    code: \"pt\",\n    flag: \"name:pt\",\n    name: \"Portuguese\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Punjabi language\n   */\n  PUNJABI: {\n    code: \"pa\",\n    flag: \"name:pa\",\n    name: \"Punjabi\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Western Punjabi language\n   */\n  WESTERN_PUNJABI: {\n    code: \"pnb\",\n    flag: \"name:pnb\",\n    name: \"Western Punjabi\",\n    latin: false,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Romanian language\n   */\n  ROMANIAN: {\n    code: \"ro\",\n    flag: \"name:ro\",\n    name: \"Romanian\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Romansh language\n   */\n  ROMANSH: {\n    code: \"rm\",\n    flag: \"name:rm\",\n    name: \"Romansh\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Russian language\n   */\n  RUSSIAN: {\n    code: \"ru\",\n    flag: \"name:ru\",\n    name: \"Russian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Serbian language (cyrillic script)\n   */\n  SERBIAN_CYRILLIC: {\n    code: \"sr\",\n    flag: \"name:sr\",\n    name: \"Serbian (Cyrillic script)\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Serbian language (latin script)\n   */\n  SERBIAN_LATIN: {\n    code: \"sr-Latn\",\n    flag: \"name:sr-Latn\",\n    name: \"Serbian (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: false,\n  } as LanguageInfo,\n\n  /**\n   * Scottish Gaelic language\n   */\n  SCOTTISH_GAELIC: {\n    code: \"gd\",\n    flag: \"name:gd\",\n    name: \"Scottish Gaelic\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Slovak language\n   */\n  SLOVAK: {\n    code: \"sk\",\n    flag: \"name:sk\",\n    name: \"Slovak\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Slovene language\n   */\n  SLOVENE: {\n    code: \"sl\",\n    flag: \"name:sl\",\n    name: \"Slovene\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Spanish language\n   */\n  SPANISH: {\n    code: \"es\",\n    flag: \"name:es\",\n    name: \"Spanish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Swedish language\n   */\n  SWEDISH: {\n    code: \"sv\",\n    flag: \"name:sv\",\n    name: \"Swedish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Tamil language\n   */\n  TAMIL: {\n    code: \"ta\",\n    flag: \"name:ta\",\n    name: \"Tamil\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Telugu language\n   */\n  TELUGU: {\n    code: \"te\",\n    flag: \"name:te\",\n    name: \"Telugu\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Thai language\n   */\n  THAI: {\n    code: \"th\",\n    flag: \"name:th\",\n    name: \"Thai\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Turkish language\n   */\n  TURKISH: {\n    code: \"tr\",\n    flag: \"name:tr\",\n    name: \"Turkish\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Ukrainian language\n   */\n  UKRAINIAN: {\n    code: \"uk\",\n    flag: \"name:uk\",\n    name: \"Ukrainian\",\n    latin: false,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Vietnamese language (latin script)\n   */\n  VIETNAMESE: {\n    code: \"vi\",\n    flag: \"name:vi\",\n    name: \"Vietnamese (Latin script)\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n\n  /**\n   * Welsh language\n   */\n  WELSH: {\n    code: \"cy\",\n    flag: \"name:cy\",\n    name: \"Welsh\",\n    latin: true,\n    isMode: false,\n    geocoding: true,\n  } as LanguageInfo,\n} as const;\n\n/**\n * The complete list of languages\n */\nexport const Language = {\n  ...NonISOLanguage,\n  ...ISOLanguage,\n} as const;\n\n/**\n * Get language infos from a provided language key, the key being the no-whitespace capital name.\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n * Returns `null` if not found.\n */\nexport function getLanguageInfoFromKey(\n  languageKey: string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  if (languageKey in languageDictionary) {\n    return languageKey[languageKey];\n  }\n  return null;\n}\n\n/**\n * Get the language info from a provided 2-character iso code.\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n * Returns `null` if not found.\n */\nexport function getLanguageInfoFromCode(\n  languageCode: string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  for (const lang of Object.values(languageDictionary)) {\n    if (lang.code === languageCode) {\n      return lang;\n    }\n  }\n  return null;\n}\n\n/**\n * Get the language info from a language flag (e.g. `\"name:en\"`).\n * This is also handy to check is a given language flag is a supported language.\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n * Returns `null` if not found.\n */\nexport function getLanguageInfoFromFlag(\n  languageFlag: string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  for (const lang of Object.values(languageDictionary)) {\n    if (lang.flag === languageFlag) {\n      return lang;\n    }\n  }\n  return null;\n}\n\n/**\n * Get the default language of the device, as a LanguageInfo object.\n */\nexport function getAutoLanguage(): LanguageInfo {\n  if (typeof navigator === \"undefined\") {\n    const code = Intl.DateTimeFormat().resolvedOptions().locale.split(\"-\")[0];\n    const langInfo = getLanguageInfoFromCode(code);\n    return langInfo ?? Language.ENGLISH;\n  }\n\n  const canditatelangs = Array.from(\n    new Set(navigator.languages.map((l) => l.split(\"-\")[0])),\n  )\n    .map((code) => getLanguageInfoFromCode(code))\n    .filter((li) => li);\n\n  return canditatelangs[0] ?? Language.ENGLISH;\n}\n\nexport function isLanguageInfo(obj: unknown): obj is LanguageInfo {\n  return (\n    obj !== null &&\n    typeof obj === \"object\" &&\n    \"code\" in obj &&\n    \"flag\" in obj &&\n    \"name\" in obj &&\n    \"latin\" in obj &&\n    \"isMode\" in obj &&\n    \"geocoding\" in obj &&\n    (typeof obj.code === \"string\" || obj.code === null) &&\n    typeof obj.flag === \"string\" &&\n    typeof obj.name === \"string\" &&\n    typeof obj.latin === \"boolean\" &&\n    typeof obj.isMode === \"boolean\" &&\n    typeof obj.geocoding === \"boolean\"\n  );\n}\n\n/**\n * By default, the language dictionary to look into is the one defined in this library, but another one could be provided\n */\nexport function toLanguageInfo(\n  lang: LanguageInfo | string,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): LanguageInfo | null {\n  // Could be directly an object of type LanguageInfo\n  if (isLanguageInfo(lang)) {\n    // Yet we want to make sure the provided languageInfo obj is not corrupted or incomplete,\n    // so we ask for the equivalent original:\n    return getLanguageInfoFromFlag(lang.flag, languageDictionary); // possibly returns null, which is fine.\n  }\n\n  // If it's not even a string, then it does not represent a language\n  if (typeof lang !== \"string\") {\n    return null;\n  }\n\n  return (\n    getLanguageInfoFromKey(lang, languageDictionary) ||\n    getLanguageInfoFromCode(lang, languageDictionary) ||\n    getLanguageInfoFromFlag(lang, languageDictionary) ||\n    null\n  );\n}\n\n/**\n * Tells if two languages are the same, even though possibly provided under different forms.\n * Note: this is not comparing object references, but values.\n */\nexport function areSameLanguages(\n  langA: string | LanguageInfo,\n  langB: string | LanguageInfo,\n  languageDictionary: { [k: string]: LanguageInfo } = Language,\n): boolean {\n  const langAObj = toLanguageInfo(langA, languageDictionary);\n  const langBObj = toLanguageInfo(langB, languageDictionary);\n\n  return langAObj && langBObj && langAObj.flag === langBObj.flag;\n}\n","import { config } from \"./config\";\n\nexport async function callFetch(resource, options = {}) {\n  if (config.fetch === null) {\n    throw new Error(\n      \"The fetch function was not found. If on NodeJS < 18 please specify the fetch function with config.fetch\",\n    );\n  }\n\n  //  Control if URL contains the api key\n  if (new URL(resource).searchParams.get(\"key\").trim() === \"\") {\n    throw new Error(\n      \"The MapTiler Cloud API key is missing. Set it in `config.apiKey` or get one for free at https://maptiler.com\",\n    );\n  }\n\n  return config.fetch(resource, options);\n}\n","/**\n * Some default settings for the SDK\n */\nconst defaults = {\n  maptilerApiURL: \"https://api.maptiler.com/\",\n  mapStyle: \"streets-v2\",\n};\n\nObject.freeze(defaults);\n\nexport { defaults };\n","/**\n * A ServiceError is an Error that includes the HTTP response details\n */\nexport class ServiceError extends Error {\n  constructor(\n    public res: Response,\n    customMessage = \"\",\n  ) {\n    super(\n      `Call to enpoint ${res.url} failed with the status code ${res.status}. ${customMessage}`,\n    );\n  }\n}\n","import type { BBox, Feature, Geometry, Position } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\n\nimport {\n  type LanguageInfo,\n  getAutoLanguage,\n  getLanguageInfoFromCode,\n  isLanguageInfo,\n  Language,\n  getLanguageInfoFromFlag,\n} from \"../language\";\n\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  400: \"Query too long / Invalid parameters\",\n  403: \"Key is missing, invalid or restricted\",\n};\n\nexport type LanguageGeocodingOptions = {\n  /**\n   * Prefer results in specific language. It’s possible to specify multiple values.\n   */\n  language?: string | Array<string> | LanguageInfo | Array<LanguageInfo>;\n};\n\nexport type GeocodingPlaceType =\n  | \"continental_marine\"\n  | \"country\"\n  | \"major_landform\"\n  | \"region\"\n  | \"subregion\"\n  | \"county\"\n  | \"joint_municipality\"\n  | \"joint_submunicipality\"\n  | \"municipality\"\n  | \"municipal_district\"\n  | \"locality\"\n  | \"neighbourhood\"\n  | \"place\"\n  | \"postal_code\"\n  | \"address\"\n  | \"road\"\n  | \"poi\";\n\nexport type CommonForwardAndReverseGeocodingOptions =\n  LanguageGeocodingOptions & {\n    /**\n     * Custom MapTiler Cloud API key to use instead of the one in global `config`.\n     */\n    apiKey?: string;\n\n    /**\n     * Maximum number of results to show. Must be between 1 and 10.\n     * For reverse geocoding with multiple `types` this must not be set or must be set to 1.\n     * Default is 5 for forward and 1 for reverse geocoding.\n     */\n    limit?: number;\n\n    /**\n     * Features of specified types to query.\n     * If not specified, feature of all available types except `poi` and `major_landform` will be queried (`types = [\"poi\", \"major_landform\"]`, `excludeTypes = true`).\n     * In case of reverse geocoding if just a single type is specified, then multiple nearby features of the single type can be returned,\n     * otherwise single feature for every specified type (or default types) can be returned.\n     */\n    types?: GeocodingPlaceType[];\n\n    /**\n     * Set to `true` to use all available feature types except those mentioned in `types`. Default value is `false` if `types` is specified.\n     */\n    excludeTypes?: boolean;\n  };\n\nexport type GeocodingOptions = CommonForwardAndReverseGeocodingOptions & {\n  /**\n   * Only search for results in the specified area.\n   */\n  bbox?: BBox;\n\n  /**\n   * Prefer results close to a specific location.\n   */\n  proximity?: Position | \"ip\";\n\n  /**\n   * Limit search to specific country/countries specified as list of Alpha-2 ISO 3166-1 codes.\n   */\n  country?: string[];\n\n  /**\n   * Set to `false` to disable fuzzy (typo-tolerant) search. Default is `true`.\n   */\n  fuzzyMatch?: boolean;\n\n  /**\n   * Set to `true` to use autocomplete, `false` to disable it. Default is `true`.\n   */\n  autocomplete?: boolean;\n};\n\nexport type ReverseGeocodingOptions = CommonForwardAndReverseGeocodingOptions;\n\nexport type ByIdGeocodingOptions = LanguageGeocodingOptions & {\n  apiKey?: string;\n};\n\nexport type Coordinates = Position;\n\ntype FeatureProperties = {\n  /**\n   * External reference of the feature used for debugging purposes\n   */\n  ref: string;\n\n  /**\n   * ISO 3166-1 alpha-2 country code of the feature\n   */\n  country_code: string;\n\n  /**\n   * (experimental) Kind of the feature\n   */\n  kind?:\n    | \"road\"\n    | \"road_relation\"\n    | \"admin_area\"\n    | \"place\"\n    | \"street\"\n    | \"virtual_street\";\n\n  /**\n   * (experimental) Value of place=* tag from OpenStreetMap feature if kind=place\n   */\n  \"osm:place_type\"?: string;\n\n  /**\n   * (experimental) Feature tags from OpenStreetMap. Only available for `poi` type.\n   */\n  \"osm:tags\"?: Record<string, string>;\n\n  /**\n   * Array of POI categories. Only available for `poi` type.\n   */\n  categories?: string[];\n\n  /**\n   * Wikidata identifier.\n   */\n  wikidata?: string;\n};\n\ntype FeatureBase = {\n  /**\n   * Unique feature ID\n   */\n  id: string;\n\n  /**\n   * Localized feature name\n   */\n  text: string;\n\n  /**\n   * Query's primary ISO 639-1 language code\n   */\n  language?: string;\n\n  /**\n   * A string analogous to the `text` field that matches the query in the requested language.\n   * This field is only returned when multiple languages are requested using the `language` parameter, and will be present for each requested language.\n   */\n  [text: `text_${string}`]: string;\n\n  /**\n   * A ISO 639-1 query's fallback language code.\n   * This field is only returned when multiple languages are requested using the `language` parameter, and will be present for each requested language.\n   */\n  [language: `language_${string}`]: string;\n};\n\nexport type FeatureHierarchy = FeatureProperties & FeatureBase;\n\nexport type GeocodingFeature = Feature<Geometry, FeatureProperties> &\n  FeatureBase & {\n    /**\n     * Bounding box of the original feature as [w, s, e, n] array\n     */\n    bbox: BBox;\n\n    /**\n     * A [lon, lat] array of the original feature centeroid\n     */\n    center: Coordinates;\n\n    /**\n     * Formatted (including the hierarchy) and localized feature full name\n     */\n    place_name: string;\n\n    /**\n     * A string analogous to the `place_name` field that matches the query in the requested language.\n     * This field is only returned when multiple languages are requested using the `language` parameter, and will be present for each requested language.\n     */\n    [key: `place_name_${string}`]: string;\n\n    /**\n     * An array of feature types describing the feature.\n     * Currently each feature has only single type but this may change in the future.\n     */\n    place_type: GeocodingPlaceType[];\n\n    /**\n     * Localized type of the place name, matches `place_type` property\n     */\n    place_type_name: string[];\n\n    /**\n     * Feature hierarchy\n     */\n    context?: Array<FeatureHierarchy>;\n\n    /**\n     * Address number, if applicable\n     */\n    address?: string;\n\n    /**\n     * Indicates how well the returned feature matches the user's query on a scale from 0 to 1.\n     * 0 means the result does not match the query text at all, while 1 means the result fully matches the query text.\n     * You can use the relevance property to remove results that don't fully match the query.\n     */\n    relevance: number;\n\n    /**\n     * A string analogous to the `text` field that more closely matches the query than results in the specified language.\n     * For example, querying _Praha, Czechia_ with language set to English (`en`) might return a feature with the `text` _Prague_ and the `matching_text` _Praha_.\n     */\n    matching_text?: string;\n\n    /**\n     * A string analogous to the `place_name` field that more closely matches the query than results in the specified language.\n     * For example, querying _Praha, Czechia_ with language set to English (`en`) might return a feature with the `place_name` _Prague, Czechia_ and a `matching_place_name` of _Praha, Czechia_.\n     */\n    matching_place_name?: string;\n  };\n\nexport type GeocodingSearchResult = {\n  type: \"FeatureCollection\";\n\n  /**\n   * Array of features found\n   */\n  features: Array<GeocodingFeature>;\n\n  /**\n   * Tokenized search query\n   */\n  query: Array<string>;\n\n  /**\n   * Attribution of the result\n   */\n  attribution: string;\n};\n\nfunction addLanguageGeocodingOptions(\n  searchParams: URLSearchParams,\n  options: LanguageGeocodingOptions,\n) {\n  const { language } = options;\n\n  if (language === undefined) {\n    return;\n  }\n\n  // Making it an array of language codes\n  const languageCodes = (Array.isArray(language) ? language : [language])\n    .map((elem) => toValidGeocodingLanguageCode(elem))\n    .filter((elem) => elem); // removing the nulls\n\n  const languages = Array.from(new Set(languageCodes)).join(\",\");\n\n  searchParams.set(\"language\", languages);\n}\n\nfunction toValidGeocodingLanguageCode(\n  lang: string | LanguageInfo,\n): string | null {\n  const langInfo =\n    lang === Language.AUTO.flag\n      ? getAutoLanguage()\n      : typeof lang === \"string\"\n      ? getLanguageInfoFromCode(lang)\n      : isLanguageInfo(lang)\n      ? lang.flag === Language.AUTO.flag\n        ? getAutoLanguage()\n        : getLanguageInfoFromFlag(lang.flag)\n      : null;\n\n  return langInfo?.geocoding ? langInfo.code : null;\n}\n\nfunction addCommonForwardAndReverseGeocodingOptions(\n  searchParams: URLSearchParams,\n  options: CommonForwardAndReverseGeocodingOptions,\n) {\n  const { apiKey, limit, types, excludeTypes } = options;\n\n  searchParams.set(\"key\", apiKey ?? config.apiKey);\n\n  if (limit !== undefined) {\n    searchParams.set(\"limit\", String(limit));\n  }\n\n  if (types !== undefined) {\n    searchParams.set(\"types\", types.join(\",\"));\n  }\n\n  if (excludeTypes !== undefined) {\n    searchParams.set(\"excludeTypes\", String(excludeTypes));\n  }\n\n  addLanguageGeocodingOptions(searchParams, options);\n}\n\nfunction addForwardGeocodingOptions(\n  searchParams: URLSearchParams,\n  options: GeocodingOptions,\n) {\n  addCommonForwardAndReverseGeocodingOptions(searchParams, options);\n\n  const { bbox, proximity, country, fuzzyMatch, autocomplete } = options;\n\n  if (bbox !== undefined) {\n    searchParams.set(\"bbox\", bbox.join(\",\"));\n  }\n\n  if (proximity !== undefined) {\n    searchParams.set(\n      \"proximity\",\n      proximity === \"ip\" ? proximity : proximity.join(\",\"),\n    );\n  }\n\n  if (country !== undefined) {\n    searchParams.set(\"country\", country.join(\",\"));\n  }\n\n  if (fuzzyMatch !== undefined) {\n    searchParams.set(\"fuzzyMatch\", fuzzyMatch ? \"true\" : \"false\");\n  }\n\n  if (autocomplete !== undefined) {\n    searchParams.set(\"autocomplete\", autocomplete ? \"true\" : \"false\");\n  }\n}\n\n/**\n * Performs a forward geocoding query to MapTiler API.\n * Providing a human readable place name (of a city, country, street, etc.), the function returns\n * a list of candidate locations including longitude and latitude.\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#search-by-name-forward\n *\n * @param query\n * @param options\n * @returns\n */\nasync function forward(\n  query: string,\n  options: GeocodingOptions = {},\n): Promise<GeocodingSearchResult> {\n  if (typeof query !== \"string\" || query.trim().length === 0) {\n    throw new Error(\"The query must be a non-empty string\");\n  }\n\n  const endpoint = new URL(\n    `geocoding/${encodeURIComponent(query)}.json`,\n    defaults.maptilerApiURL,\n  );\n\n  addForwardGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  return await res.json();\n}\n\n/**\n * Perform a reverse geocoding query to MapTiler API.\n * Providing a longitude and latitude, this function returns a set of human readable information about this place (country, city, street, etc.)\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#search-by-coordinates-reverse\n *\n * @param position\n * @param options\n * @returns\n */\nasync function reverse(\n  position: Position,\n  options: ReverseGeocodingOptions = {},\n): Promise<GeocodingSearchResult> {\n  if (!Array.isArray(position) || position.length < 2) {\n    throw new Error(\"The position must be an array of form [lng, lat].\");\n  }\n\n  const endpoint = new URL(\n    `geocoding/${position[0]},${position[1]}.json`,\n    defaults.maptilerApiURL,\n  );\n\n  addCommonForwardAndReverseGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  return await res.json();\n}\n\n/**\n * Perform a geocoding query to MapTiler API to obtain fature by its ID.\n * Providing a feature ID, this function returns a feature which includes its full geometry.\n * Note that the feature ID is not stable and it changes when the database is re-indexed.\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#search-by-feature-id\n *\n * @param id\n * @param options\n * @returns\n */\nasync function byId(\n  id: string,\n  options: ByIdGeocodingOptions = {},\n): Promise<GeocodingSearchResult> {\n  const endpoint = new URL(`geocoding/${id}.json`, defaults.maptilerApiURL);\n\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  addLanguageGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  return await res.json();\n}\n\n/**\n * Perform a batch geocoding query to MapTiler API.\n * Provide multiple queries in the array. Each query can be forward, reverse or by feature ID.\n *\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geocoding/#batch-geocoding\n *\n * @param queries\n * @param options\n * @returns\n */\nasync function batch(\n  queries: string[],\n  options: GeocodingOptions = {},\n): Promise<GeocodingSearchResult[]> {\n  if (!queries.length) {\n    return [];\n  }\n\n  const joinedQuery = queries\n    .map((query) => encodeURIComponent(query))\n    .join(\";\");\n\n  const endpoint = new URL(\n    `geocoding/${joinedQuery}.json`,\n    defaults.maptilerApiURL,\n  );\n\n  addForwardGeocodingOptions(endpoint.searchParams, options);\n\n  const res = await callFetch(endpoint.toString());\n\n  if (!res.ok) {\n    throw new ServiceError(res, customMessages[res.status] ?? \"\");\n  }\n\n  const obj = await res.json();\n\n  return queries.length === 1 ? [obj] : obj;\n}\n\n/**\n * The **geocoding** namespace contains asynchronous functions to call the [MapTiler Geocoding API](https://docs.maptiler.com/cloud/api/geocoding/).\n * The **Geocoding API** provides ways to get geographic coordinates from a human-readable search query of a place (forward geocoding)\n * and to get the location details (country, city, street, etc.) from a geographic coordinate (reverse geocoding);\n */\nconst geocoding = {\n  forward,\n  reverse,\n  byId,\n  batch,\n};\n\nexport { geocoding };\n","import { BBox } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\n/**\n * Options that can be provided to get user data.\n */\nexport type GeolocationInfoOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n};\n\nexport type GeolocationResult = {\n  /**\n   * Name of the country\n   * Example: Switzerland\n   */\n  country?: string;\n\n  /**\n   * Two-letter code of the country ISO 3166-1 alpha-2 codes\n   * Example: CH\n   */\n  country_code?: string;\n\n  /**\n   * Bounds of the country in WGS84 degrees [west, south, east, north].\n   * Example: [5.95538,45.818852,10.490936,47.809357]\n   */\n  country_bounds?: BBox;\n\n  /**\n   * Official country languages in ISO 639-1 format. ISO 639-1 codes\n   * Example: [\"de\",\"fr\",\"it\"]\n   */\n  country_languages?: Array<string>;\n\n  /**\n   * Name of the continent\n   * Example: Europe\n   */\n  continent?: string;\n\n  /**\n   * Two-letter code of the continent\n   * Example: EU\n   */\n  continent_code?: string;\n\n  /**\n   * Indicated whether the country is part of the European Union.\n   */\n  eu?: boolean;\n\n  /**\n   * Name of the city\n   * Example: Zurich\n   */\n  city?: string;\n\n  /**\n   * Latitude of the location\n   * Example: 47.36667\n   */\n  latitude?: number;\n\n  /**\n   * Longitude of the location\n   * Example: 8.55\n   */\n  longitude?: number;\n\n  /**\n   * Postal code\n   * Example: 8000\n   */\n  postal?: string;\n\n  /**\n   * If known, the ISO 3166-2 name for the first level region. ISO 3166-2 codes\n   * Example: Zurich\n   */\n  region?: string;\n\n  /**\n   * If known, the ISO 3166-2 code for the first level region. ISO 3166-2 codes\n   * Example: ZH\n   */\n  region_code?: string;\n\n  /**\n   * Name of the timezone\n   * Example: Europe/Zurich\n   */\n  timezone?: string;\n};\n\n/**\n * Looks up geolocation details from IP address using MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/geolocation/#ip-geolocation\n * @returns\n */\nasync function info(\n  options: GeolocationInfoOptions = {},\n): Promise<GeolocationResult> {\n  const endpoint = new URL(`geolocation/ip.json`, defaults.maptilerApiURL);\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n  const urlWithParams = endpoint.toString();\n\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj as GeolocationResult;\n}\n\n/**\n * The **geolocation** namespace contains an asynchronous function to call the [MapTiler Geolocation API](https://docs.maptiler.com/cloud/api/geolocation/).\n * The **Geolocation API** provides a way to retrieve the IP address as well as geographic informations of a machine performing the query (most likely: a user)\n */\nconst geolocation = {\n  info,\n};\n\nexport { geolocation };\n","import { BBox, Position } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\nexport type CoordinatesSearchOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Maximum number of results returned (default: 10)\n   */\n  limit?: number;\n\n  /**\n   *  Show detailed transformations for each CRS (default: false)\n   */\n  transformations?: boolean;\n\n  /**\n   * Show exports in WKT and Proj4 notations (default: false)\n   */\n  exports?: boolean;\n};\n\nexport type CoordinateId = {\n  authority: string;\n  code: BigInteger;\n};\n\nexport type CoordinateExport = {\n  proj4: string;\n  wkt: string;\n};\n\nexport type CoordinateGrid = {\n  path: string;\n};\n\nexport type CoordinateTransformation = {\n  id: CoordinateId;\n  name: string;\n  reversible: boolean;\n  usable: boolean;\n  deprecated: boolean;\n  grids: Array<CoordinateGrid>;\n  accuracy?: number;\n  area?: string;\n  bbox?: BBox;\n  target_crs?: CoordinateId;\n  unit?: string;\n};\n\nexport type CoordinateSearch = {\n  id: CoordinateId;\n\n  name: string;\n\n  kind: string;\n\n  deprecated: boolean;\n\n  transformations?: Array<CoordinateTransformation | number>;\n\n  accuracy?: number;\n\n  unit?: string;\n\n  area?: string;\n\n  /**\n   * Bounding box of the resource in [min_lon, min_lat, max_lon, max_lat] order.\n   */\n  bbox?: BBox;\n\n  /**\n   * Most suitable transformation for this CRS.\n   */\n  default_transformation?: DefaultTransformation;\n\n  exports: CoordinateExport;\n};\n\nexport type DefaultTransformation = {\n  authority: string;\n  code: number;\n};\n\nexport type CoordinateSearchResult = {\n  /**\n   * The coordinate search results\n   */\n  results: Array<CoordinateSearch>;\n\n  /**\n   * The number of results\n   */\n  total: number;\n};\n\n/**\n * Search information about coordinate systems using MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/coordinates/#search-coordinate-systems\n * @param query Can be any kind of CRS by name or code\n * @param options\n * @returns\n */\nasync function search(\n  query: string,\n  options: CoordinatesSearchOptions = {},\n): Promise<CoordinateSearchResult> {\n  if (typeof query !== \"string\" || query.trim().length === 0) {\n    throw new Error(\"The query must be a non-empty string\");\n  }\n\n  const endpoint = new URL(\n    `coordinates/search/${query}.json`,\n    defaults.maptilerApiURL,\n  );\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  if (\"limit\" in options) {\n    endpoint.searchParams.set(\"limit\", options.limit.toString());\n  }\n\n  if (\"transformations\" in options) {\n    endpoint.searchParams.set(\n      \"transformations\",\n      options.transformations.toString(),\n    );\n  }\n\n  if (\"exports\" in options) {\n    endpoint.searchParams.set(\"exports\", options.exports.toString());\n  }\n\n  const urlWithParams = endpoint.toString();\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj as CoordinateSearchResult;\n}\n\nexport type XYZ = {\n  x?: number;\n  y?: number;\n  z?: number;\n};\n\nexport type CoordinateTransformResult = {\n  results: Array<XYZ>;\n\n  /**\n   * Transformations are selected using given ops parameter.\n   * If no parameter is given, auto strategy is used.\n   * If given, it may try to use a listed transformation,\n   * then fallback to towgs84 patching, and finally boundcrs.\n   */\n  transformer_selection_strategy: string;\n};\n\n/**\n * Options that can be provided when transforming a coordinate from one CRS to another.\n */\nexport type CoordinatesTransformOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Source coordinate reference system (default: 4326)\n   */\n  sourceCrs?: number;\n\n  /**\n   * Target coordinate reference system (default: 4326)\n   */\n  targetCrs?: number;\n\n  /**\n   * List of codes of operations\n   */\n  operations?: number | Array<number>;\n};\n\n/**\n * Transforms coordinates from a source reference system to a target reference system using MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/coordinates/#transform-coordinates\n * @param positions\n * @param options\n * @returns\n */\nasync function transform(\n  positions: Position | Array<Position>,\n  options: CoordinatesTransformOptions = {},\n): Promise<CoordinateTransformResult> {\n  const coordinatesStr = (Array.isArray(positions[0]) ? positions : [positions])\n    .map((coord) => `${coord[0]},${coord[1]}`)\n    .join(\";\");\n\n  const endpoint = new URL(\n    `coordinates/transform/${coordinatesStr}.json`,\n    defaults.maptilerApiURL,\n  );\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  if (\"sourceCrs\" in options) {\n    endpoint.searchParams.set(\"s_srs\", options.sourceCrs.toString());\n  }\n\n  if (\"targetCrs\" in options) {\n    endpoint.searchParams.set(\"t_srs\", options.targetCrs.toString());\n  }\n\n  if (\"operations\" in options) {\n    endpoint.searchParams.set(\n      \"ops\",\n      (Array.isArray(options.operations)\n        ? options.operations\n        : [options.operations]\n      ).join(\"|\"),\n    );\n  }\n\n  const urlWithParams = endpoint.toString();\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj as CoordinateTransformResult;\n}\n\n/**\n * The **coordinate** namespace contains asynchronous functions to call the [MapTiler Coordinate API](https://docs.maptiler.com/cloud/api/coordinates/).\n * The goal of the **Coordinate API* is query information about spatial coordinate reference system (CRS) as well as to transform coordinates from one CRS to another.\n */\nconst coordinates = {\n  search,\n  transform,\n};\n\nexport { coordinates };\n","import { FeatureCollection } from \"geojson\";\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\n/**\n * Options that can be provided to get user data.\n */\nexport type GetDataOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n};\n\n/**\n * Get user data and returns it as GeoJSON using the MapTiler API.\n * Learn more on the MapTiler API reference page: https://docs.maptiler.com/cloud/api/data/#geojson\n * @param dataId\n * @returns\n */\nasync function get(\n  dataId: string,\n  options: GetDataOptions = {},\n): Promise<FeatureCollection> {\n  if (typeof dataId !== \"string\" || dataId.trim().length === 0) {\n    throw new Error(\"The data ID must be a non-empty string\");\n  }\n\n  const endpoint = new URL(\n    `data/${encodeURIComponent(dataId)}/features.json`,\n    defaults.maptilerApiURL,\n  );\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n  const urlWithParams = endpoint.toString();\n\n  const res = await callFetch(urlWithParams);\n\n  if (!res.ok) {\n    throw new ServiceError(\n      res,\n      res.status in customMessages ? customMessages[res.status] : \"\",\n    );\n  }\n\n  const obj = await res.json();\n  return obj;\n}\n\n/**\n * The **data** namespace contains an asynchronous function to call the [MapTiler Data API](https://docs.maptiler.com/cloud/api/data/).\n * The **Data API** provides a way to retrieve user data in GeoJSON format.\n */\nconst data = {\n  get,\n};\n\nexport { data };\n","/**\n * Expand the map style provided as argument of the Map constructor\n * @param style\n * @returns\n */\nexport function expandMapStyle(style): string {\n  // testing if the style provided is of form \"maptiler://some-style\"\n  const maptilerDomainRegex = /^maptiler:\\/\\/(.*)/;\n  let match;\n  const trimmed = style.trim();\n  let expandedStyle;\n\n  // The style was possibly already given as expanded URL\n  if (trimmed.startsWith(\"http://\") || trimmed.startsWith(\"https://\")) {\n    expandedStyle = trimmed;\n  } else if ((match = maptilerDomainRegex.exec(trimmed)) !== null) {\n    expandedStyle = `https://api.maptiler.com/maps/${match[1]}/style.json`;\n  } else {\n    // The style could also possibly just be the name of the style without any URI style\n    expandedStyle = `https://api.maptiler.com/maps/${trimmed}/style.json`;\n  }\n\n  return expandedStyle;\n}\n\n/**\n * Type for object containing style details\n */\nexport type MapStylePreset = {\n  referenceStyleID: string;\n  name: string;\n  description: string;\n  variants: Array<{\n    id: string;\n    name: string;\n    variantType: string;\n    description: string;\n    imageURL: string;\n  }>;\n};\n\n/**\n * An instance of MapStyleVariant contains information about a style to use that belong to a reference style\n */\nexport class MapStyleVariant {\n  constructor(\n    /**\n     * Human-friendly name\n     */\n    private name: string,\n\n    /**\n     * Variant name the variant is addressed to from its reference style: `MapStyle.REFERNCE_STYLE_NAME.VARIANT_TYPE`\n     */\n    private variantType: string,\n\n    /**\n     * MapTiler Cloud id\n     */\n    private id: string,\n\n    /**\n     * Reference map style, used to retrieve sibling variants\n     */\n    private referenceStyle: ReferenceMapStyle,\n\n    /**\n     * Human-friendly description\n     */\n    private description: string,\n\n    /**\n     * URL to an image describing the style variant\n     */\n    private imageURL: string,\n  ) {}\n\n  /**\n   * Get the human-friendly name\n   * @returns\n   */\n  getName(): string {\n    return this.name;\n  }\n\n  getFullName(): string {\n    return `${this.referenceStyle.getName()} ${this.name}`;\n  }\n\n  /**\n   * Get the variant type (eg. \"DEFAULT\", \"DARK\", \"PASTEL\", etc.)\n   * @returns\n   */\n  getType(): string {\n    return this.variantType;\n  }\n\n  /**\n   * Get the MapTiler Cloud id\n   * @returns\n   */\n  getId(): string {\n    return this.id;\n  }\n\n  /**\n   * Get the human-friendly description\n   */\n  getDescription(): string {\n    return this.description;\n  }\n\n  /**\n   * Get the reference style this variant belongs to\n   * @returns\n   */\n  getReferenceStyle(): ReferenceMapStyle {\n    return this.referenceStyle;\n  }\n\n  /**\n   * Check if a variant of a given type exists for _this_ variants\n   * (eg. if this is a \"DARK\", then we can check if there is a \"LIGHT\" variant of it)\n   * @param variantType\n   * @returns\n   */\n  hasVariant(variantType: string): boolean {\n    return this.referenceStyle.hasVariant(variantType);\n  }\n\n  /**\n   * Retrieve the variant of a given type. If not found, will return the \"DEFAULT\" variant.\n   * (eg. _this_ \"DARK\" variant does not have any \"PASTEL\" variant, then the \"DEFAULT\" is returned)\n   * @param variantType\n   * @returns\n   */\n  getVariant(variantType: string): MapStyleVariant {\n    return this.referenceStyle.getVariant(variantType);\n  }\n\n  /**\n   * Get all the variants for _this_ variants, except _this_ current one\n   * @returns\n   */\n  getVariants(): Array<MapStyleVariant> {\n    return this.referenceStyle.getVariants().filter((v) => v !== this);\n  }\n\n  /**\n   * Get the image URL that represent _this_ variant\n   * @returns\n   */\n  getImageURL(): string {\n    return this.imageURL;\n  }\n\n  /**\n   * Get the style as usable by MapLibre, a string (URL) or a plain style description (StyleSpecification)\n   * @returns\n   */\n  getExpandedStyleURL(): string {\n    return expandMapStyle(this.getId());\n  }\n}\n\n/**\n * An instance of reference style contains a list of StyleVariants ordered by relevance\n */\nexport class ReferenceMapStyle {\n  /**\n   * Variants that belong to this reference style, key being the reference type\n   */\n  private variants: { [key: string]: MapStyleVariant } = {};\n\n  /**\n   * Variants that belong to this reference style, ordered by relevance\n   */\n  private orderedVariants: Array<MapStyleVariant> = [];\n\n  constructor(\n    /**\n     * Human-friendly name of this reference style\n     */\n    private name: string,\n\n    /**\n     * ID of this reference style\n     */\n    private id: string,\n  ) {}\n\n  /**\n   * Get the human-friendly name of this reference style\n   * @returns\n   */\n  getName(): string {\n    return this.name;\n  }\n\n  /**\n   * Get the id of _this_ reference style\n   * @returns\n   */\n  getId(): string {\n    return this.id;\n  }\n\n  /**\n   * Add a variant to _this_ reference style\n   * @param v\n   */\n  addVariant(v: MapStyleVariant) {\n    this.variants[v.getType()] = v;\n    this.orderedVariants.push(v);\n  }\n\n  /**\n   * Check if a given variant type exists for this reference style\n   * @param variantType\n   * @returns\n   */\n  hasVariant(variantType: string): boolean {\n    return variantType in this.variants;\n  }\n\n  /**\n   * Get a given variant. If the given type of variant does not exist for this reference style,\n   * then the most relevant default variant is returned instead\n   * @param variantType\n   * @returns\n   */\n  getVariant(variantType: string): MapStyleVariant {\n    return variantType in this.variants\n      ? this.variants[variantType]\n      : this.orderedVariants[0];\n  }\n\n  /**\n   * Get the list of variants for this reference style\n   * @returns\n   */\n  getVariants(): Array<MapStyleVariant> {\n    return Object.values(this.variants);\n  }\n\n  /**\n   * Get the defualt variant for this reference style\n   * @returns\n   */\n  getDefaultVariant(): MapStyleVariant {\n    return this.orderedVariants[0];\n  }\n}\n\n/**\n * All the styles and variants maintained by MapTiler.\n */\nexport type MapStyleType = {\n  /**\n   * Suitable for navigation, with high level of detail on urban areas, plenty of POIs and 3D buildings\n   */\n  STREETS: ReferenceMapStyle & {\n    /**\n     * Suitable for navigation, with high level of detail on urban areas, plenty of POIs and 3D buildings.\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     * Suitable for navigation, with high level of detail on urban areas, plenty of POIs and 3D buildings, in dark mode.\n     */\n    DARK: MapStyleVariant;\n    /**\n     * Suitable for navigation, with high level of detail on urban areas, plenty of POIs and 3D buildings, in light mode.\n     */\n    LIGHT: MapStyleVariant;\n    /**\n     * Suitable for navigation, with high level of detail on urban areas, plenty of POIs and 3D buildings, in blue night mode.\n     */\n    NIGHT: MapStyleVariant;\n    /**\n     * Suitable for navigation, with high level of detail on urban areas, plenty of POIs and 3D buildings, with a pastel color palette.\n     */\n    PASTEL: MapStyleVariant;\n  };\n\n  /**\n   * Suitable for outdoor activities. With elevation isolines and hillshading.\n   */\n  OUTDOOR: ReferenceMapStyle & {\n    /**\n     * Suitable for outdoor activities. With elevation isolines and hillshading.\n     */\n    DEFAULT: MapStyleVariant;\n\n    /**\n     * Suitable for outdoor activities. With elevation isolines and hillshading, in dark mode.\n     */\n    DARK: MapStyleVariant;\n  };\n\n  /**\n   * Suitabe for winter outdoor activities. With ski tracks, elevation isolines and hillshading.\n   */\n  WINTER: ReferenceMapStyle & {\n    /**\n     * Suitabe for winter outdoor activities. With ski tracks, elevation isolines and hillshading.\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     * Suitabe for winter outdoor activities. With ski tracks, elevation isolines and hillshading, in dark mode.\n     */\n    DARK: MapStyleVariant;\n  };\n\n  /**\n   * High resolution imagery only, without any label.\n   */\n  SATELLITE: ReferenceMapStyle & {\n    /**\n     * High resolution imagery only, without any label.\n     */\n    DEFAULT: MapStyleVariant;\n  };\n\n  /**\n   * High resolution imagery with labels, political borders and roads.\n   */\n  HYBRID: ReferenceMapStyle & {\n    /**\n     * High resolution imagery with labels, political borders and roads.\n     */\n    DEFAULT: MapStyleVariant;\n  };\n\n  /**\n   * A minimalist street-oriented style without POI\n   */\n  BASIC: ReferenceMapStyle & {\n    /**\n     * A minimalist street-oriented style without POI\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     * A minimalist street-oriented style without POI, in dark mode\n     */\n    DARK: MapStyleVariant;\n    /**\n     * A minimalist street-oriented style without POI, in light mode\n     */\n    LIGHT: MapStyleVariant;\n  };\n\n  /**\n   * A bright street-oriented style, a nice alternative to `streets`\n   */\n  BRIGHT: ReferenceMapStyle & {\n    /**\n     * A bright street-oriented style, a nice alternative to `streets`\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     * A bright street-oriented style, a nice alternative to `streets`, in dark mode\n     */\n    DARK: MapStyleVariant;\n    /**\n     * A bright street-oriented style, a nice alternative to `streets`, in light mode\n     */\n    LIGHT: MapStyleVariant;\n    /**\n     * A bright street-oriented style, a nice alternative to `streets`, with a soft pastel color palette\n     */\n    PASTEL: MapStyleVariant;\n  };\n\n  /**\n   * Classic OpenStreetMap style\n   */\n  OPENSTREETMAP: ReferenceMapStyle & {\n    DEFAULT: MapStyleVariant;\n  };\n\n  /**\n   * A nice high-contrast, yet less saturated alternative to the `outdoor` style, with hillshading, 3D buildings and fairly high street details\n   */\n  TOPO: ReferenceMapStyle & {\n    /**\n     * A nice high-contrast, yet less saturated alternative to the `outdoor` style, with hillshading, 3D buildings and fairly high street details\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     * A nice high-contrast, yet less saturated alternative to the `outdoor` style, with hillshading, 3D buildings and fairly high street details, in dark mode\n     */\n    DARK: MapStyleVariant;\n    /**\n     * A nice high-contrast, and high saturation alternative to the `outdoor` style, with hillshading, 3D buildings and fairly high street details\n     */\n    SHINY: MapStyleVariant;\n    /**\n     * A nice low-contrast, alternative to the `outdoor` style, with hillshading, 3D buildings and fairly high street details, using a soft pastel color palette\n     */\n    PASTEL: MapStyleVariant;\n\n    /**\n     * A nice very high-contrast, yet less saturated alternative to the `outdoor` style, with hillshading, 3D buildings and fairly high street details\n     */\n    TOPOGRAPHIQUE: MapStyleVariant;\n  };\n\n  /**\n   * A nice alternative to `streets` with a soft color palette\n   */\n  VOYAGER: ReferenceMapStyle & {\n    /**\n     * A nice alternative to `streets` with a soft color palette\n     *\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     * A nice alternative to `streets`, in very dark mode\n     */\n    DARK: MapStyleVariant;\n    /**\n     * A nice alternative to `streets`, in light mode\n     */\n    LIGHT: MapStyleVariant;\n    /**\n     * A nice alternative to `streets` with a soft sepia color palette and vintage look\n     */\n    VINTAGE: MapStyleVariant;\n  };\n\n  /**\n   * A bold very high contrast black and white (no gray!) style for the city\n   */\n  TONER: ReferenceMapStyle & {\n    /**\n     * A bold very high contrast black and white (no gray!) style for the city\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     * A bold very high contrast black and white (no gray!) style for the city, without any label\n     */\n    BACKGROUND: MapStyleVariant;\n    /**\n     * A bold very high contrast, yet faded, style for the city\n     */\n    LITE: MapStyleVariant;\n    /**\n     * A bold very high contrast black and white (no gray!) style for the city, with no building, only roads!\n     */\n    LINES: MapStyleVariant;\n  };\n\n  /**\n   * Minimalist style, perfect for data visualization\n   */\n  DATAVIZ: ReferenceMapStyle & {\n    /**\n     *  Minimalist style, perfect for data visualization\n     */\n    DEFAULT: MapStyleVariant;\n\n    /**\n     *  Minimalist style, perfect for data visualization in dark mode\n     */\n    DARK: MapStyleVariant;\n\n    /**\n     *  Minimalist style, perfect for data visualization in light mode\n     */\n    LIGHT: MapStyleVariant;\n  };\n\n  /**\n   * Explore deep see trenches and mountains, with isolines and depth labels\n   */\n  OCEAN: ReferenceMapStyle & {\n    /**\n     * Explore deep see trenches and mountains, with isolines and depth labels\n     */\n    DEFAULT: MapStyleVariant;\n  };\n\n  /**\n   * Neutral greyscale style with hillshading suitable for colorful terrain-aware visualization\n   */\n  BACKDROP: ReferenceMapStyle & {\n    /**\n     *  Neutral greyscale style with hillshading suitable for colorful terrain-aware visualization\n     */\n    DEFAULT: MapStyleVariant;\n\n    /**\n     *  Dark greyscale style with hillshading suitable for colorful terrain-aware visualization\n     */\n    DARK: MapStyleVariant;\n\n    /**\n     *  Light greyscale style with hillshading suitable for colorful terrain-aware visualization\n     */\n    LIGHT: MapStyleVariant;\n  };\n\n  LANDSCAPE: ReferenceMapStyle & {\n    /**\n     *  Light terrain map for data overlays and visualisations\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     *  Dark terrain map for data overlays and visualisations\n     */\n    DARK: MapStyleVariant;\n    /**\n     *  Vivid terrain map for data overlays and visualisations\n     */\n    VIVID: MapStyleVariant;\n  };\n  /**\n   *  Watercolor map for creative use\n   */\n  AQUARELLE: ReferenceMapStyle & {\n    /**\n     *  Watercolor map for creative use\n     */\n    DEFAULT: MapStyleVariant;\n    /**\n     *  Dark watercolor map for creative use\n     */\n    DARK: MapStyleVariant;\n    /**\n     *  Vivid watercolor map for creative use\n     */\n    VIVID: MapStyleVariant;\n  };\n};\n\nexport const mapStylePresetList: Array<MapStylePreset> = [\n  {\n    referenceStyleID: \"STREETS\",\n    name: \"Streets\",\n    description: \"\",\n    variants: [\n      {\n        id: \"streets-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"streets-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"streets-v2-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"streets-v2-night\",\n        name: \"Night\",\n        variantType: \"NIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"streets-v2-pastel\",\n        name: \"Pastel\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"OUTDOOR\",\n    name: \"Outdoor\",\n    description: \"\",\n    variants: [\n      {\n        id: \"outdoor-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"outdoor-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"WINTER\",\n    name: \"Winter\",\n    description: \"\",\n    variants: [\n      {\n        id: \"winter-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"winter-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"SATELLITE\",\n    name: \"Satellite\",\n    description: \"\",\n    variants: [\n      {\n        id: \"satellite\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"HYBRID\",\n    name: \"Hybrid\",\n    description: \"\",\n    variants: [\n      {\n        id: \"hybrid\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"BASIC\",\n    name: \"Basic\",\n    description: \"\",\n    variants: [\n      {\n        id: \"basic-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"basic-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"basic-v2-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"BRIGHT\",\n    name: \"Bright\",\n    description: \"\",\n    variants: [\n      {\n        id: \"bright-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"bright-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"bright-v2-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"bright-v2-pastel\",\n        name: \"Pastel\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"OPENSTREETMAP\",\n    name: \"OpenStreetMap\",\n    description: \"\",\n    variants: [\n      {\n        id: \"openstreetmap\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"TOPO\",\n    name: \"Topo\",\n    description: \"\",\n    variants: [\n      {\n        id: \"topo-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"topo-v2-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"topo-v2-shiny\",\n        name: \"Shiny\",\n        variantType: \"SHINY\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"topo-v2-pastel\",\n        name: \"Pastel\",\n        variantType: \"PASTEL\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"topo-v2-topographique\",\n        name: \"Topographique\",\n        variantType: \"TOPOGRAPHIQUE\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"VOYAGER\",\n    name: \"Voyager\",\n    description: \"\",\n    variants: [\n      {\n        id: \"voyager-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"voyager-v2-darkmatter\",\n        name: \"Darkmatter\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"voyager-v2-positron\",\n        name: \"Positron\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"voyager-v2-vintage\",\n        name: \"Vintage\",\n        variantType: \"VINTAGE\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"TONER\",\n    name: \"Toner\",\n    description: \"\",\n    variants: [\n      {\n        id: \"toner-v2\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"toner-v2-background\",\n        name: \"Background\",\n        variantType: \"BACKGROUND\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"toner-v2-lite\",\n        name: \"Lite\",\n        variantType: \"LITE\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"toner-v2-lines\",\n        name: \"Lines\",\n        variantType: \"LINES\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"DATAVIZ\",\n    name: \"Dataviz\",\n    description: \"\",\n    variants: [\n      {\n        id: \"dataviz\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"dataviz-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"dataviz-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"BACKDROP\",\n    name: \"Backdrop\",\n    description: \"\",\n    variants: [\n      {\n        id: \"backdrop\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"backdrop-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"backdrop-light\",\n        name: \"Light\",\n        variantType: \"LIGHT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n\n  {\n    referenceStyleID: \"OCEAN\",\n    name: \"Ocean\",\n    description: \"\",\n    variants: [\n      {\n        id: \"ocean\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"AQUARELLE\",\n    name: \"Aquarelle\",\n    description: \"Watercolor map for creative use\",\n    variants: [\n      {\n        id: \"aquarelle\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"aquarelle-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"aquarelle-vivid\",\n        name: \"Vivid\",\n        variantType: \"VIVID\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n  {\n    referenceStyleID: \"LANDSCAPE\",\n    name: \"Landscape\",\n    description: \"Terrain map for data overlays and visualisations\",\n    variants: [\n      {\n        id: \"landscape\",\n        name: \"Default\",\n        variantType: \"DEFAULT\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"landscape-dark\",\n        name: \"Dark\",\n        variantType: \"DARK\",\n        description: \"\",\n        imageURL: \"\",\n      },\n      {\n        id: \"landscape-vivid\",\n        name: \"Vivid\",\n        variantType: \"VIVID\",\n        description: \"\",\n        imageURL: \"\",\n      },\n    ],\n  },\n];\n\nfunction makeReferenceStyleProxy(referenceStyle: ReferenceMapStyle) {\n  return new Proxy(referenceStyle, {\n    get(target, prop, receiver) {\n      if (target.hasVariant(prop as string)) {\n        return target.getVariant(prop as string);\n      }\n\n      // This variant does not exist for this style, but since it's full uppercase\n      // we guess that the dev tries to access a style variant. So instead of\n      // returning the default (STREETS.DEFAULT), we return the non-variant of the current style\n      if (prop.toString().toUpperCase() === (prop as string)) {\n        return referenceStyle.getDefaultVariant();\n      }\n\n      return Reflect.get(target, prop, receiver);\n    },\n  });\n}\n\nfunction buildMapStyles(): MapStyleType {\n  const mapStyle = {};\n\n  for (let i = 0; i < mapStylePresetList.length; i += 1) {\n    const refStyleInfo = mapStylePresetList[i];\n\n    const refStyle = makeReferenceStyleProxy(\n      new ReferenceMapStyle(refStyleInfo.name, refStyleInfo.referenceStyleID),\n    );\n\n    for (let j = 0; j < refStyleInfo.variants.length; j += 1) {\n      const variantInfo = refStyleInfo.variants[j];\n      const variant = new MapStyleVariant(\n        variantInfo.name, // name\n        variantInfo.variantType, // variantType\n        variantInfo.id, // id\n        refStyle, // referenceStyle\n        variantInfo.description,\n        variantInfo.imageURL, // imageURL\n      );\n\n      refStyle.addVariant(variant);\n    }\n    mapStyle[refStyleInfo.referenceStyleID] = refStyle;\n  }\n  return mapStyle as MapStyleType;\n}\n\nexport function styleToStyle(\n  style: string | ReferenceMapStyle | MapStyleVariant | null | undefined,\n): string {\n  if (!style) {\n    return MapStyle[mapStylePresetList[0].referenceStyleID]\n      .getDefaultVariant()\n      .getId();\n  }\n\n  // If the provided style is a shorthand (eg. \"streets-v2\") then we make sure it's trimmed and lowercase\n  if (typeof style === \"string\" || style instanceof String) {\n    return style.trim().toLowerCase();\n  }\n\n  if (style instanceof MapStyleVariant) {\n    return style.getId();\n  }\n\n  if (style instanceof ReferenceMapStyle) {\n    return style.getDefaultVariant().getId();\n  }\n}\n\n/**\n * Contains all the reference map style created by MapTiler team as well as all the variants.\n * For example, `MapStyle.STREETS` and the variants:\n * - `MapStyle.STREETS.DARK`\n * - `MapStyle.STREETS.LIGHT`\n * - `MapStyle.STREETS.PASTEL`\n *\n */\nexport const MapStyle: MapStyleType = buildMapStyles();\n","import {\n  GeoJsonObject,\n  GeometryObject,\n  LineString,\n  MultiLineString,\n  Feature,\n  FeatureCollection,\n  Position,\n} from \"geojson\";\n\n/**\n * From a generic GeoJSON object extract thepossibly nested LineString and MultiLineString features\n * it contains. The result is a flat array made of LineString and MultiLineString.\n */\nfunction extractLineStrings(\n  geoJson: GeoJsonObject,\n): Array<LineString | MultiLineString> {\n  const lineStrings: Array<LineString | MultiLineString> = [];\n\n  function extractFromGeometry(geometry: GeometryObject) {\n    if (geometry.type === \"LineString\" || geometry.type === \"MultiLineString\") {\n      lineStrings.push(geometry as LineString | MultiLineString);\n    }\n  }\n\n  function extractFromFeature(feature: Feature) {\n    if (feature.geometry) {\n      extractFromGeometry(feature.geometry);\n    }\n  }\n\n  function extractFromFeatureCollection(collection: FeatureCollection) {\n    for (const feature of collection.features) {\n      if (feature.type === \"Feature\") {\n        extractFromFeature(feature);\n      } else if (feature.type === \"FeatureCollection\") {\n        extractFromFeatureCollection(feature as unknown as FeatureCollection); // had to add unknown\n      }\n    }\n  }\n\n  if (geoJson.type === \"Feature\") {\n    extractFromFeature(geoJson as Feature);\n  } else if (geoJson.type === \"FeatureCollection\") {\n    extractFromFeatureCollection(geoJson as FeatureCollection);\n  } else {\n    // It's a single geometry\n    extractFromGeometry(geoJson as GeometryObject);\n  }\n\n  return lineStrings;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p: Position, p1: Position, p2: Position): number {\n  let x = p1[0],\n    y = p1[1],\n    dx = p2[0] - x,\n    dy = p2[1] - y;\n\n  if (dx !== 0 || dy !== 0) {\n    const t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n    if (t > 1) {\n      x = p2[0];\n      y = p2[1];\n    } else if (t > 0) {\n      x += dx * t;\n      y += dy * t;\n    }\n  }\n\n  dx = p[0] - x;\n  dy = p[1] - y;\n\n  return dx * dx + dy * dy;\n}\n\nfunction simplifyDPStep(\n  points: Array<Position>,\n  first: number,\n  last: number,\n  sqTolerance: number,\n  simplified: Array<Position>,\n) {\n  let maxSqDist = sqTolerance,\n    index;\n\n  for (let i = first + 1; i < last; i++) {\n    const sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n    if (sqDist > maxSqDist) {\n      index = i;\n      maxSqDist = sqDist;\n    }\n  }\n\n  if (maxSqDist > sqTolerance) {\n    if (index - first > 1) {\n      simplifyDPStep(points, first, index, sqTolerance, simplified);\n    }\n    simplified.push(points[index]);\n\n    if (last - index > 1) {\n      simplifyDPStep(points, index, last, sqTolerance, simplified);\n    }\n  }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(\n  points: Array<Position>,\n  sqTolerance: number,\n): Array<Position> {\n  const last = points.length - 1;\n  const simplified = [points[0]];\n  simplifyDPStep(points, 0, last, sqTolerance, simplified);\n  simplified.push(points[last]);\n  return simplified;\n}\n\n/**\n * Simplify a path made of a list of GeoJSON Positions, with a tolerance.\n */\nfunction simplify(points: Array<Position>, tolerance: number): Array<Position> {\n  if (points.length <= 2) {\n    return points;\n  }\n\n  const sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n  const simplePoints = simplifyDouglasPeucker(points, sqTolerance);\n  return simplePoints;\n}\n\nexport const misc = {\n  extractLineStrings,\n  simplify,\n};\n","import { BBox, Position } from \"geojson\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { MapStyleVariant, ReferenceMapStyle, styleToStyle } from \"../mapstyle\";\nimport { misc } from \"../misc\";\n\n/**\n * Base set of options that can be provided to all the types of static maps\n */\nexport type StaticMapBaseOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Style of the map (not full style URL). Example: \"winter\", \"streets-v2\".\n   * Default: `\"streets-v2\"`\n   */\n  style?: string | ReferenceMapStyle | MapStyleVariant;\n\n  /**\n   * Double the size of the static map image to support hiDPI/Retina monitors.\n   * Default: `false`\n   */\n  hiDPI?: boolean;\n\n  /**\n   * Image format.\n   * Default: `\"png\"`\n   */\n  format?: \"png\" | \"jpg\" | \"webp\";\n\n  /**\n   * Width of the output image. Maximum value: `2048`.\n   * Default: `1024`\n   */\n  width?: number;\n\n  /**\n   * Height of the output image. Maximum value: `2048`.\n   * Default: `1024`\n   */\n  height?: number;\n\n  /**\n   * Placement of the attribution. Can also be set to `false` to not show attribution.\n   * Default: `\"bottomright\"`\n   */\n  attribution?: \"bottomright\" | \"bottomleft\" | \"topleft\" | \"topright\" | false;\n\n  /**\n   * A marker or list of markers to show on the map\n   * Default: none provided\n   */\n  markers?: StaticMapMarker | Array<StaticMapMarker>;\n\n  /**\n   * URL of the marker image. Applies only if one or multiple markers positions are provided.\n   * Default: none provided\n   */\n  markerIcon?: string;\n\n  /**\n   * Position of the marker regarding its coordinates. Applies only:\n   * - with a custom icon provided with `markerIcon`\n   * - if one or multiple markers positions are provided.\n   * Default: `\"bottom\"`\n   */\n  markerAnchor?:\n    | \"top\"\n    | \"left\"\n    | \"bottom\"\n    | \"right\"\n    | \"center\"\n    | \"topleft\"\n    | \"bottomleft\"\n    | \"topright\"\n    | \"bottomright\";\n\n  /**\n   * Draw a path or polygon on top of the map. If the path is too long it will be simplified, yet remaining accurate.\n   * Default: none provided\n   */\n  path?: Array<Position>;\n\n  /**\n   * Color of the path line. The color must be CSS compatible.\n   * Examples:\n   * - long form hex without transparency `\"#FF0000\"` (red)\n   * - short form hex without transparency `\"#F00\"` (red)\n   * - long form hex with transparency `\"#FF000008\"` (red, half opacity)\n   * - short form hex with transparency `\"#F008\"` (red, half opacity)\n   * - CSS color shorthands: `\"red\"`, `\"chartreuse\"`, etc.\n   * - decimal RGB values without transparency: `\"rgb(128, 100, 255)\"`\n   * - decimal RGB values with transparency: `\"rgb(128, 100, 255, 0.5)\"`\n   * Default: `\"blue\"`\n   */\n  pathStrokeColor?: string;\n\n  /**\n   * Color of the filling, also works if the polygon is not closed. The color must be CSS compatible.\n   * Examples:\n   * - long form hex without transparency `\"#FF0000\"` (red)\n   * - short form hex without transparency `\"#F00\"` (red)\n   * - long form hex with transparency `\"#FF000008\"` (red, half opacity)\n   * - short form hex with transparency `\"#F008\"` (red, half opacity)\n   * - CSS color shorthands: `\"red\"`, `\"chartreuse\"`, etc.\n   * - decimal RGB values without transparency: `\"rgb(128, 100, 255)\"`\n   * - decimal RGB values with transparency: `\"rgb(128, 100, 255, 0.5)\"`\n   * Default: none (transparent filling)\n   */\n  pathFillColor?: string;\n\n  /**\n   * Width of the path line in pixel. It can be floating point precision (ex: `0.5`)\n   * Default: `1` if `hiDPI` is `false` and `2` if `hiDPI` is `true`.\n   */\n  pathWidth?: number;\n};\n\n/**\n * Options that can be provided to centered static maps\n */\nexport type CenteredStaticMapOptions = StaticMapBaseOptions;\n\n/**\n * Options that can be provided to bounded static maps\n */\nexport type BoundedStaticMapOptions = StaticMapBaseOptions & {\n  /**\n   * Extra space added around the regio of interest, in percentage.\n   * Default: `0.1` (for 10%)\n   */\n  padding?: number;\n};\n\n/**\n * Options that can be provided to automatic static maps\n */\nexport type AutomaticStaticMapOptions = BoundedStaticMapOptions;\n\n/**\n * Definition of a maker to show on a static map\n */\nexport type StaticMapMarker = [\n  /**\n   * Longitude of the marker\n   */\n  number,\n  /**\n   * latitude of the marker\n   */\n  number,\n  /**\n   * Color of the marker with CSS syntax. Applies only if a custom `markerIcon` is not provided.\n   */\n  string,\n];\n\nfunction staticMapMarkerToString(\n  marker: StaticMapMarker,\n  includeColor = true,\n): string {\n  let str = `${marker[0]},${marker[1]}`;\n\n  if (marker.length === 3 && includeColor) {\n    str += `,${marker[2]}`;\n  }\n\n  return str;\n}\n\nfunction simplifyAndStringify(path: Array<Position>, maxNbChar = 3000): string {\n  let str = path.map((point) => point.join(\",\")).join(\"|\");\n  let tolerance = 0.000005;\n  const toleranceStep = 0.00001;\n\n  while (str.length > maxNbChar) {\n    const simplerPath = misc.simplify(path, tolerance);\n    // str = simplerPath.map(point => point.join(',')).join('|');\n    str = simplerPath.map((point) => `${point[0]},${point[1]}`).join(\"|\");\n    tolerance += toleranceStep;\n  }\n\n  return str;\n}\n\n/**\n * Construct the URL for a static map centered on one point.\n * Note: this function does not fetch the binary content of the image since\n * the purpose of a static map is generally to have its URL as a `src` property of a <img/> element.\n * If a path is provided and is too long, it will be simplified in an accurate way.\n * @param center\n * @param zoom\n * @param options\n * @returns\n */\nfunction centered(\n  center: Position,\n  zoom: number,\n  options: CenteredStaticMapOptions = {},\n): string {\n  const style = styleToStyle(options.style);\n  const scale = options.hiDPI ? \"@2x\" : \"\";\n  const format = options.format ?? \"png\";\n  let width = ~~(options.width ?? 1024);\n  let height = ~~(options.height ?? 1024);\n\n  if (options.hiDPI) {\n    width = ~~(width / 2);\n    height = ~~(height / 2);\n  }\n\n  const endpoint = new URL(\n    `maps/${encodeURIComponent(style)}/static/${center[0]},${\n      center[1]\n    },${zoom}/${width}x${height}${scale}.${format}`,\n    defaults.maptilerApiURL,\n  );\n\n  if (\"attribution\" in options) {\n    endpoint.searchParams.set(\"attribution\", options.attribution.toString());\n  }\n\n  if (\"markers\" in options) {\n    let markerStr = \"\";\n\n    const hasIcon = \"markerIcon\" in options;\n\n    if (hasIcon) {\n      markerStr += `icon:${options.markerIcon}|`;\n    }\n\n    if (hasIcon && \"markerAnchor\" in options) {\n      markerStr += `anchor:${options.markerAnchor}|`;\n    }\n\n    if (hasIcon && options.hiDPI) {\n      markerStr += `scale:2|`;\n    }\n\n    const markerList = Array.isArray(options.markers[0])\n      ? options.markers\n      : [options.markers];\n    markerStr += markerList\n      .map((m) => staticMapMarkerToString(m, !hasIcon))\n      .join(\"|\");\n    endpoint.searchParams.set(\"markers\", markerStr);\n  }\n\n  if (\"path\" in options) {\n    let pathStr = \"\";\n\n    pathStr += `fill:${options.pathFillColor ?? \"none\"}|`;\n\n    if (\"pathStrokeColor\" in options) {\n      pathStr += `stroke:${options.pathStrokeColor}|`;\n    }\n\n    if (\"pathWidth\" in options) {\n      const pathWidth = options.pathWidth / (options.hiDPI ? 2 : 1);\n      pathStr += `width:${pathWidth.toString()}|`;\n    }\n\n    pathStr += simplifyAndStringify(options.path);\n    endpoint.searchParams.set(\"path\", pathStr);\n  }\n\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  return endpoint.toString();\n}\n\n/**\n * Construct the URL for a static map using a bounding box\n * Note: this function does not fetch the binary content of the image since\n * the purpose of a static map is generally to have its URL as a `src` property of a <img/> element.\n * If a path is provided and is too long, it will be simplified in an accurate way.\n * @param boundingBox\n * @param options\n * @returns\n */\nfunction bounded(\n  boundingBox: BBox,\n  options: BoundedStaticMapOptions = {},\n): string {\n  const style = styleToStyle(options.style);\n  const scale = options.hiDPI ? \"@2x\" : \"\";\n  const format = options.format ?? \"png\";\n  let width = ~~(options.width ?? 1024);\n  let height = ~~(options.height ?? 1024);\n\n  if (options.hiDPI) {\n    width = ~~(width / 2);\n    height = ~~(height / 2);\n  }\n\n  const endpoint = new URL(\n    `maps/${encodeURIComponent(style)}/static/${boundingBox[0]},${\n      boundingBox[1]\n    },${boundingBox[2]},${boundingBox[3]}/${width}x${height}${scale}.${format}`,\n    defaults.maptilerApiURL,\n  );\n\n  if (\"attribution\" in options) {\n    endpoint.searchParams.set(\"attribution\", options.attribution.toString());\n  }\n\n  if (\"padding\" in options) {\n    endpoint.searchParams.set(\"padding\", options.padding.toString());\n  }\n\n  if (\"markers\" in options) {\n    let markerStr = \"\";\n\n    const hasIcon = \"markerIcon\" in options;\n\n    if (hasIcon) {\n      markerStr += `icon:${options.markerIcon}|`;\n    }\n\n    if (hasIcon && \"markerAnchor\" in options) {\n      markerStr += `anchor:${options.markerAnchor}|`;\n    }\n\n    if (hasIcon && options.hiDPI) {\n      markerStr += `scale:2|`;\n    }\n\n    const markerList = Array.isArray(options.markers[0])\n      ? options.markers\n      : [options.markers];\n    markerStr += markerList\n      .map((m) => staticMapMarkerToString(m, !hasIcon))\n      .join(\"|\");\n    endpoint.searchParams.set(\"markers\", markerStr);\n  }\n\n  if (\"path\" in options) {\n    let pathStr = \"\";\n\n    pathStr += `fill:${options.pathFillColor ?? \"none\"}|`;\n\n    if (\"pathStrokeColor\" in options) {\n      pathStr += `stroke:${options.pathStrokeColor}|`;\n    }\n\n    if (\"pathWidth\" in options) {\n      const pathWidth = options.pathWidth / (options.hiDPI ? 2 : 1);\n      pathStr += `width:${pathWidth.toString()}|`;\n    }\n\n    pathStr += simplifyAndStringify(options.path);\n    endpoint.searchParams.set(\"path\", pathStr);\n  }\n\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  return endpoint.toString();\n}\n\n/**\n * Construct the URL for a static map automatically fitted around the provided path or markers.\n * Note: this function does not fetch the binary content of the image since\n * the purpose of a static map is generally to have its URL as a `src` property of a <img/> element.\n * If a path is provided and is too long, it will be simplified in an accurate way.\n * @param options\n * @returns\n */\nfunction automatic(options: AutomaticStaticMapOptions = {}): string {\n  if (!(\"markers\" in options) && !(\"path\" in options)) {\n    throw new Error(\n      \"Automatic static maps require markers and/or path to be created.\",\n    );\n  }\n\n  const style = styleToStyle(options.style);\n  const scale = options.hiDPI ? \"@2x\" : \"\";\n  const format = options.format ?? \"png\";\n  let width = ~~(options.width ?? 1024);\n  let height = ~~(options.height ?? 1024);\n\n  if (options.hiDPI) {\n    width = ~~(width / 2);\n    height = ~~(height / 2);\n  }\n\n  const endpoint = new URL(\n    `maps/${encodeURIComponent(\n      style,\n    )}/static/auto/${width}x${height}${scale}.${format}`,\n    defaults.maptilerApiURL,\n  );\n\n  if (\"attribution\" in options) {\n    endpoint.searchParams.set(\"attribution\", options.attribution.toString());\n  }\n\n  if (\"padding\" in options) {\n    endpoint.searchParams.set(\"padding\", options.padding.toString());\n  }\n\n  if (\"markers\" in options) {\n    let markerStr = \"\";\n\n    const hasIcon = \"markerIcon\" in options;\n\n    if (hasIcon) {\n      markerStr += `icon:${options.markerIcon}|`;\n    }\n\n    if (hasIcon && \"markerAnchor\" in options) {\n      markerStr += `anchor:${options.markerAnchor}|`;\n    }\n\n    if (hasIcon && options.hiDPI) {\n      markerStr += `scale:2|`;\n    }\n\n    const markerList = Array.isArray(options.markers[0])\n      ? options.markers\n      : [options.markers];\n    markerStr += markerList\n      .map((m) => staticMapMarkerToString(m, !hasIcon))\n      .join(\"|\");\n    endpoint.searchParams.set(\"markers\", markerStr);\n  }\n\n  if (\"path\" in options) {\n    let pathStr = \"\";\n\n    pathStr += `fill:${options.pathFillColor ?? \"none\"}|`;\n\n    if (\"pathStrokeColor\" in options) {\n      pathStr += `stroke:${options.pathStrokeColor}|`;\n    }\n\n    if (\"pathWidth\" in options) {\n      const pathWidth = options.pathWidth / (options.hiDPI ? 2 : 1);\n      pathStr += `width:${pathWidth.toString()}|`;\n    }\n\n    pathStr += simplifyAndStringify(options.path);\n    endpoint.searchParams.set(\"path\", pathStr);\n  }\n\n  endpoint.searchParams.set(\"key\", options.apiKey ?? config.apiKey);\n\n  return endpoint.toString();\n}\n\n/**\n * The **staticMaps** namespace contains an synchronous function build image URL of static map, as specified by the [MapTiler Static Map API](https://docs.maptiler.com/cloud/api/static-maps/).\n * The URL of static maps can then be used within a `<img />` markup element, as the `src` property value.\n */\nconst staticMaps = {\n  centered,\n  bounded,\n  automatic,\n};\n\nexport { staticMaps };\n","import { Position } from \"geojson\";\n\n/**\n * Average radius of Earth in meters\n */\nconst EARTH_RADIUS = 6371008.8;\n\n/**\n * Average circumfrence of Earth in meters\n */\nconst EARTH_CIRCUMFERENCE = 2 * Math.PI * EARTH_RADIUS;\n\n/**\n * Convert a wgs84 longitude to web Mercator X (west-east axis), where westmost X is 0 and eastmost X is 1.\n */\nfunction longitudeToMercatorX(lng: number): number {\n  return (180 + lng) / 360;\n}\n\n/**\n * Convert a wgs84 latitude to web Mercator Y (north-south axis), where northmost Y is 0 and southmost Y is 1.\n */\nfunction latitudeToMercatorY(lat: number): number {\n  return (\n    (180 -\n      (180 / Math.PI) *\n        Math.log(Math.tan(Math.PI / 4 + (lat * Math.PI) / 360))) /\n    360\n  );\n}\n\n/**\n * Convert a wgs84 position into a web Mercator position where north-west is [0, 0] and south-east is [1, 1]\n */\nfunction wgs84ToMercator(position: Position): Position {\n  const wrappedPos = wrapWgs84(position);\n  return [\n    longitudeToMercatorX(wrappedPos[0]),\n    latitudeToMercatorY(wrappedPos[1]),\n  ];\n}\n\n/**\n * Converts a mercator X (west-east axis in [0, 1]) to wgs84 longitude\n */\nfunction mercatorXToLongitude(x: number): number {\n  return x * 360 - 180;\n}\n\n/**\n * Converts a mercator Y (north-south axis in [0, 1]) to wgs84 latitude\n */\nfunction mercatorYToLatitude(y: number): number {\n  const y2 = 180 - y * 360;\n  return (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n}\n\n/**\n * Converts a web Mercator position where north-west is [0, 0] and south-east is [1, 1] into a wgs84\n */\nfunction mercatorToWgs84(position: Position): Position {\n  return [mercatorXToLongitude(position[0]), mercatorYToLatitude(position[1])];\n}\n\n/**\n * Gives the distance in meters between two positions using the Haversine Formula.\n */\nfunction haversineDistanceWgs84(from: Position, to: Position): number {\n  const rad = Math.PI / 180;\n  const lat1 = from[1] * rad;\n  const lat2 = to[1] * rad;\n  const a =\n    Math.sin(lat1) * Math.sin(lat2) +\n    Math.cos(lat1) * Math.cos(lat2) * Math.cos((to[0] - from[0]) * rad);\n\n  const maxMeters = EARTH_RADIUS * Math.acos(Math.min(a, 1));\n  return maxMeters;\n}\n\n/**\n * Compute the cumulated distance for each position of an array of positions.\n * For I positions, there are I-1 distance, hence the distance at i corresponds\n * to the distance from the (i-1)th position to ith\n */\nfunction haversineCumulatedDistanceWgs84(positions: Position[]): number[] {\n  const cumulatedDistance = Array(positions.length);\n  cumulatedDistance[0] = 0;\n  const l = cumulatedDistance.length;\n\n  for (let i = 1; i < l; i++) {\n    cumulatedDistance[i] =\n      haversineDistanceWgs84(positions[i - 1], positions[i]) +\n      cumulatedDistance[i - 1];\n  }\n  return cumulatedDistance;\n}\n\n/**\n * Returns a position that has longitude in [-180, 180]\n */\nfunction wrapWgs84(position: Position): Position {\n  const lng = position[0];\n  const lat = position[1];\n\n  const d = 360;\n  const w = ((((lng + 180) % d) + d) % d) - 180;\n  const wrapLong = w === -180 ? 180 : w;\n\n  return [wrapLong, lat];\n}\n\n/*\n * The circumference at a line of latitude in meters.\n */\nexport function circumferenceAtLatitude(latitude: number) {\n  return EARTH_CIRCUMFERENCE * Math.cos((latitude * Math.PI) / 180);\n}\n\n/**\n * From a given mercator coordinate and a zoom level, computes the tile index\n */\nfunction mercatorToTileIndex(\n  /**\n   * Mercator coordinates (north-west is [0, 0], sourth-east is [1, 1])\n   */\n  position: Position,\n  /**\n   * Zoom level\n   */\n  zoom: number,\n  /**\n   * Returns integer tile indices if `true` or floating-point values if `false`\n   */\n  strict: boolean = true,\n): Position {\n  const numberOfTilePerAxis = 2 ** zoom;\n\n  const fIndex: Position = [\n    position[0] * numberOfTilePerAxis,\n    position[1] * numberOfTilePerAxis,\n  ];\n\n  return strict ? [~~fIndex[0], ~~fIndex[1]] : fIndex;\n}\n\n/**\n * From a given wgs84 coordinate and a zoom level, computes the tile index\n */\nfunction wgs84ToTileIndex(\n  /**\n   * Wgs84 coordinates\n   */\n  position: Position,\n  /**\n   * Zoom level\n   */\n  zoom: number,\n  /**\n   * Returns integer tile indices if `true` or floating-point values if `false`\n   */\n  strict: boolean = true,\n): Position {\n  const merc = wgs84ToMercator(position);\n  return mercatorToTileIndex(merc, zoom, strict);\n}\n\n/**\n * Converts a degree angle into a radian angle\n */\nfunction toRadians(degrees: number): number {\n  return (degrees * Math.PI) / 180;\n}\n\n/**\n * Converts a radian angle to a degree angle\n */\nfunction toDegrees(radians: number): number {\n  return (radians * 180) / Math.PI;\n}\n\n/**\n * Compute an intermediate point between two reference points using the Haversine formula.\n * If ratio is `0`, the returned position is pos1.\n * If ratio is `1`, the returned position is pos2.\n * If ratio is `0.5`, the returned position is halfway pos1 pos2 in distance.\n */\nfunction haversineIntermediateWgs84(\n  pos1: Position,\n  pos2: Position,\n  ratio: number,\n): Position {\n  const d = haversineDistanceWgs84(pos1, pos2);\n  const λ1 = toRadians(pos1[0]);\n  const φ1 = toRadians(pos1[1]);\n  const λ2 = toRadians(pos2[0]);\n  const φ2 = toRadians(pos2[1]);\n\n  const δ = d / EARTH_RADIUS; // Angular distance in radians\n  const a = Math.sin((1 - ratio) * δ) / Math.sin(δ);\n  const b = Math.sin(ratio * δ) / Math.sin(δ);\n  const x = a * Math.cos(φ1) * Math.cos(λ1) + b * Math.cos(φ2) * Math.cos(λ2);\n  const y = a * Math.cos(φ1) * Math.sin(λ1) + b * Math.cos(φ2) * Math.sin(λ2);\n  const z = a * Math.sin(φ1) + b * Math.sin(φ2);\n\n  const φ3 = Math.atan2(z, Math.sqrt(x * x + y * y));\n  const λ3 = Math.atan2(y, x);\n\n  return [toDegrees(λ3), toDegrees(φ3)];\n}\n\nexport const math = {\n  EARTH_RADIUS,\n  EARTH_CIRCUMFERENCE,\n  longitudeToMercatorX,\n  latitudeToMercatorY,\n  wgs84ToMercator,\n  mercatorXToLongitude,\n  mercatorYToLatitude,\n  mercatorToWgs84,\n  haversineDistanceWgs84,\n  wrapWgs84,\n  circumferenceAtLatitude,\n  mercatorToTileIndex,\n  wgs84ToTileIndex,\n  toRadians,\n  toDegrees,\n  haversineIntermediateWgs84,\n  haversineCumulatedDistanceWgs84,\n};\n","export default class QuickLRU extends Map {\n\t#size = 0;\n\t#cache = new Map();\n\t#oldCache = new Map();\n\t#maxSize;\n\t#maxAge;\n\t#onEviction;\n\n\tconstructor(options = {}) {\n\t\tsuper();\n\n\t\tif (!(options.maxSize && options.maxSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tif (typeof options.maxAge === 'number' && options.maxAge === 0) {\n\t\t\tthrow new TypeError('`maxAge` must be a number greater than 0');\n\t\t}\n\n\t\tthis.#maxSize = options.maxSize;\n\t\tthis.#maxAge = options.maxAge || Number.POSITIVE_INFINITY;\n\t\tthis.#onEviction = options.onEviction;\n\t}\n\n\t// For tests.\n\tget __oldCache() {\n\t\treturn this.#oldCache;\n\t}\n\n\t#emitEvictions(cache) {\n\t\tif (typeof this.#onEviction !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [key, item] of cache) {\n\t\t\tthis.#onEviction(key, item.value);\n\t\t}\n\t}\n\n\t#deleteIfExpired(key, item) {\n\t\tif (typeof item.expiry === 'number' && item.expiry <= Date.now()) {\n\t\t\tif (typeof this.#onEviction === 'function') {\n\t\t\t\tthis.#onEviction(key, item.value);\n\t\t\t}\n\n\t\t\treturn this.delete(key);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#getOrDeleteIfExpired(key, item) {\n\t\tconst deleted = this.#deleteIfExpired(key, item);\n\t\tif (deleted === false) {\n\t\t\treturn item.value;\n\t\t}\n\t}\n\n\t#getItemValue(key, item) {\n\t\treturn item.expiry ? this.#getOrDeleteIfExpired(key, item) : item.value;\n\t}\n\n\t#peek(key, cache) {\n\t\tconst item = cache.get(key);\n\n\t\treturn this.#getItemValue(key, item);\n\t}\n\n\t#set(key, value) {\n\t\tthis.#cache.set(key, value);\n\t\tthis.#size++;\n\n\t\tif (this.#size >= this.#maxSize) {\n\t\t\tthis.#size = 0;\n\t\t\tthis.#emitEvictions(this.#oldCache);\n\t\t\tthis.#oldCache = this.#cache;\n\t\t\tthis.#cache = new Map();\n\t\t}\n\t}\n\n\t#moveToRecent(key, item) {\n\t\tthis.#oldCache.delete(key);\n\t\tthis.#set(key, item);\n\t}\n\n\t* #entriesAscending() {\n\t\tfor (const item of this.#oldCache) {\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield item;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const item of this.#cache) {\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\tget(key) {\n\t\tif (this.#cache.has(key)) {\n\t\t\tconst item = this.#cache.get(key);\n\t\t\treturn this.#getItemValue(key, item);\n\t\t}\n\n\t\tif (this.#oldCache.has(key)) {\n\t\t\tconst item = this.#oldCache.get(key);\n\t\t\tif (this.#deleteIfExpired(key, item) === false) {\n\t\t\t\tthis.#moveToRecent(key, item);\n\t\t\t\treturn item.value;\n\t\t\t}\n\t\t}\n\t}\n\n\tset(key, value, {maxAge = this.#maxAge} = {}) {\n\t\tconst expiry = typeof maxAge === 'number' && maxAge !== Number.POSITIVE_INFINITY\n\t\t\t? (Date.now() + maxAge)\n\t\t\t: undefined;\n\n\t\tif (this.#cache.has(key)) {\n\t\t\tthis.#cache.set(key, {\n\t\t\t\tvalue,\n\t\t\t\texpiry,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.#set(key, {value, expiry});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\thas(key) {\n\t\tif (this.#cache.has(key)) {\n\t\t\treturn !this.#deleteIfExpired(key, this.#cache.get(key));\n\t\t}\n\n\t\tif (this.#oldCache.has(key)) {\n\t\t\treturn !this.#deleteIfExpired(key, this.#oldCache.get(key));\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpeek(key) {\n\t\tif (this.#cache.has(key)) {\n\t\t\treturn this.#peek(key, this.#cache);\n\t\t}\n\n\t\tif (this.#oldCache.has(key)) {\n\t\t\treturn this.#peek(key, this.#oldCache);\n\t\t}\n\t}\n\n\tdelete(key) {\n\t\tconst deleted = this.#cache.delete(key);\n\t\tif (deleted) {\n\t\t\tthis.#size--;\n\t\t}\n\n\t\treturn this.#oldCache.delete(key) || deleted;\n\t}\n\n\tclear() {\n\t\tthis.#cache.clear();\n\t\tthis.#oldCache.clear();\n\t\tthis.#size = 0;\n\t}\n\n\tresize(newSize) {\n\t\tif (!(newSize && newSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tconst items = [...this.#entriesAscending()];\n\t\tconst removeCount = items.length - newSize;\n\t\tif (removeCount < 0) {\n\t\t\tthis.#cache = new Map(items);\n\t\t\tthis.#oldCache = new Map();\n\t\t\tthis.#size = items.length;\n\t\t} else {\n\t\t\tif (removeCount > 0) {\n\t\t\t\tthis.#emitEvictions(items.slice(0, removeCount));\n\t\t\t}\n\n\t\t\tthis.#oldCache = new Map(items.slice(removeCount));\n\t\t\tthis.#cache = new Map();\n\t\t\tthis.#size = 0;\n\t\t}\n\n\t\tthis.#maxSize = newSize;\n\t}\n\n\t* keys() {\n\t\tfor (const [key] of this) {\n\t\t\tyield key;\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const [, value] of this) {\n\t\t\tyield value;\n\t\t}\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const item of this.#cache) {\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield [key, value.value];\n\t\t\t}\n\t\t}\n\n\t\tfor (const item of this.#oldCache) {\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield [key, value.value];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t* entriesDescending() {\n\t\tlet items = [...this.#cache];\n\t\tfor (let i = items.length - 1; i >= 0; --i) {\n\t\t\tconst item = items[i];\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield [key, value.value];\n\t\t\t}\n\t\t}\n\n\t\titems = [...this.#oldCache];\n\t\tfor (let i = items.length - 1; i >= 0; --i) {\n\t\t\tconst item = items[i];\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield [key, value.value];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t* entriesAscending() {\n\t\tfor (const [key, value] of this.#entriesAscending()) {\n\t\t\tyield [key, value.value];\n\t\t}\n\t}\n\n\tget size() {\n\t\tif (!this.#size) {\n\t\t\treturn this.#oldCache.size;\n\t\t}\n\n\t\tlet oldCacheSize = 0;\n\t\tfor (const key of this.#oldCache.keys()) {\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\toldCacheSize++;\n\t\t\t}\n\t\t}\n\n\t\treturn Math.min(this.#size + oldCacheSize, this.#maxSize);\n\t}\n\n\tget maxSize() {\n\t\treturn this.#maxSize;\n\t}\n\n\tentries() {\n\t\treturn this.entriesAscending();\n\t}\n\n\tforEach(callbackFunction, thisArgument = this) {\n\t\tfor (const [key, value] of this.entriesAscending()) {\n\t\t\tcallbackFunction.call(thisArgument, value, key, this);\n\t\t}\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn JSON.stringify([...this.entriesAscending()]);\n\t}\n}\n","import QuickLRU from \"quick-lru\";\nimport { config } from \"./config\";\n\n/**\n * Informations about an image\n */\nexport type PixelData = {\n  /**\n   * The array of pixels as RGBRGB or RGBARGBA in a row-major order\n   */\n  pixels: Uint8ClampedArray | Uint8Array;\n  /**\n   * Width of the image in number of pixels\n   */\n  width: number;\n  /**\n   * Height of the image in number of pixels\n   */\n  height: number;\n  /**\n   * Number of components per pixel (3 if image is RGB, 4 if image is RGBA)\n   */\n  components: number;\n};\n\n/**\n * Type for the function that decodes an image file ArrayBuffer into valid pixel data\n */\nexport type BufferToPixelDataFunction = (ArrayBuffer) => Promise<PixelData>;\n\n/**\n * Main properties necessary from a TileJSON\n */\nexport type TileJSON = {\n  scale: string;\n  format: string;\n  maxzoom: number;\n  minzoom: number;\n  profile: string;\n  description: string;\n  attribution: string;\n  bounds: [number, number, number, number];\n  center: [number, number, number];\n\n  /**\n   * TileJSON version\n   */\n  tilejson: string;\n  name: string;\n  crs: string;\n  crs_wkt: string;\n  extent: [number, number, number, number];\n  tiles: string[];\n};\n\n// The LRU cache for storing tile PixelData\nlet tileCache = null;\n\n/**\n * Singleton-like function to access the tile cache\n */\nexport function getTileCache(): QuickLRU<string, PixelData> {\n  if (!tileCache) {\n    tileCache = new QuickLRU({ maxSize: config.tileCacheSize });\n  }\n  return tileCache;\n}\n\n/**\n * Browser function to decode an image file buffer into valid pixel data\n */\nexport async function bufferToPixelDataBrowser(\n  buff: ArrayBuffer,\n): Promise<PixelData> {\n  const blob = new Blob([buff]);\n  const imageBitmap = await createImageBitmap(blob);\n\n  const canvas = document.createElement(\"canvas\");\n  const ctx = canvas.getContext(\"2d\");\n  canvas.width = imageBitmap.width;\n  canvas.height = imageBitmap.height;\n  ctx.drawImage(imageBitmap, 0, 0);\n\n  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n  return {\n    pixels: imageData.data,\n    width: canvas.width,\n    height: canvas.height,\n    components: imageData.data.length / (canvas.width * canvas.height),\n  };\n}\n\nexport function getBufferToPixelDataParser(): BufferToPixelDataFunction {\n  if (config.bufferToPixelData) {\n    return config.bufferToPixelData;\n  }\n\n  if (typeof window !== \"undefined\") {\n    return bufferToPixelDataBrowser;\n  }\n\n  throw new Error(\n    \"An image file buffer to pixel data parser is necessary. Specify it in `config.bufferToPixelData`\",\n  );\n}\n","import { LineString, MultiLineString, Position } from \"geojson\";\n\nimport { callFetch } from \"../callFetch\";\nimport { config } from \"../config\";\nimport { defaults } from \"../defaults\";\nimport { ServiceError } from \"./ServiceError\";\nimport { math } from \"./math\";\nimport {\n  TileJSON,\n  getBufferToPixelDataParser,\n  getTileCache,\n} from \"../tiledecoding\";\n\nconst terrainTileJsonURL = \"tiles/terrain-rgb-v2/tiles.json\";\nlet terrainTileJson: TileJSON = null;\n\nexport type ElevationAtOptions = {\n  /**\n   * Custom MapTiler Cloud API key to use instead of the one in global `config`\n   */\n  apiKey?: string;\n\n  /**\n   * Zoom level to use for the terrain RGB tileset.\n   * If not provided, the highest zoom level will be used\n   */\n  zoom?: number;\n};\n\n/**\n * Options for batch elevation lookup\n */\nexport type ElevationBatchOptions = ElevationAtOptions & {\n  /**\n   * If provided, a median kernel of the given size will smooth the elevation\n   * to reduce very small local variations\n   */\n  smoothingKernelSize?: number;\n};\n\nconst customMessages = {\n  403: \"Key is missing, invalid or restricted\",\n};\n\nasync function fetchTerrainTileJson(apiKey: string): Promise<TileJSON> {\n  const endpoint = new URL(terrainTileJsonURL, defaults.maptilerApiURL);\n  endpoint.searchParams.set(\"key\", apiKey);\n  const urlWithParams = endpoint.toString();\n\n  const res = await callFetch(urlWithParams);\n  if (res.ok) {\n    terrainTileJson = (await res.json()) as TileJSON;\n    return terrainTileJson;\n  } else {\n    if (!res.ok) {\n      throw new ServiceError(res, customMessages[res.status] ?? \"\");\n    }\n  }\n}\n\n/**\n * Get the elevation at a given position.\n * The returned position is of form [longitude, latitude, altitude]\n */\nasync function at(\n  /**\n   * Wgs84 position as [longitude, latitude]\n   */\n  position: Position,\n  /**\n   * Options\n   */\n  options: ElevationAtOptions = {},\n): Promise<Position> {\n  const apiKey = options.apiKey ?? config.apiKey;\n\n  if (!terrainTileJson) {\n    await fetchTerrainTileJson(apiKey);\n  }\n\n  const maxZoom = terrainTileJson.maxzoom;\n  let zoom = ~~(options.zoom ?? maxZoom);\n  if (zoom > maxZoom || zoom < 0) {\n    zoom = maxZoom;\n  }\n  const tileIndex = math.wgs84ToTileIndex(position, zoom, false);\n\n  const tileX = ~~tileIndex[0];\n  const tileY = ~~tileIndex[1];\n\n  if (!terrainTileJson.tiles.length) {\n    throw new Error(\"Terrain tileJSON tile list is empty.\");\n  }\n\n  const tileID = `terrain_${zoom.toString()}_${tileX.toString()}_${tileY.toString()}`;\n  let tilePixelData;\n\n  const cache = getTileCache();\n\n  if (cache.has(tileID)) {\n    tilePixelData = cache.get(tileID);\n  } else {\n    const tileURL = terrainTileJson.tiles[0]\n      .replace(\"{x}\", tileX.toString())\n      .replace(\"{y}\", tileY.toString())\n      .replace(\"{z}\", zoom.toString());\n\n    const tileRes = await callFetch(tileURL);\n\n    if (!tileRes.ok) {\n      throw new ServiceError(tileRes, customMessages[tileRes.status] ?? \"\");\n    }\n\n    const tileBuff = await tileRes.arrayBuffer();\n    const tileParser = getBufferToPixelDataParser();\n    tilePixelData = await tileParser(tileBuff);\n    cache.set(tileID, tilePixelData);\n  }\n\n  const pixelX = ~~(tilePixelData.width * (tileIndex[0] % 1));\n  const pixelY = ~~(tilePixelData.height * (tileIndex[1] % 1));\n  const pixelDataIndex =\n    (pixelY * tilePixelData.width + pixelX) * tilePixelData.components;\n  const R = tilePixelData.pixels[pixelDataIndex];\n  const G = tilePixelData.pixels[pixelDataIndex + 1];\n  const B = tilePixelData.pixels[pixelDataIndex + 2];\n  const elevation = -10000 + (R * 256 * 256 + G * 256 + B) * 0.1;\n\n  return [position[0], position[1], elevation];\n}\n\n/**\n * Perform a batch elevation request\n */\nasync function batch(\n  /**\n   * Wgs84 positions as [[lng0, lat0], [lng1, lat1], [lng2, lat2], ...]\n   */\n  positions: Position[],\n  /**\n   * Options\n   */\n  options: ElevationBatchOptions = {},\n): Promise<Position[]> {\n  const apiKey = options.apiKey ?? config.apiKey;\n\n  if (!terrainTileJson) {\n    await fetchTerrainTileJson(apiKey);\n  }\n\n  // Better throw about not bein able to parse tiles before fetching them\n  const tileParser = getBufferToPixelDataParser();\n  const tileURLSchema = terrainTileJson.tiles[0];\n  const cache = getTileCache();\n\n  const maxZoom = terrainTileJson.maxzoom;\n  let zoom = ~~(options.zoom ?? maxZoom);\n  if (zoom > maxZoom || zoom < 0) {\n    zoom = maxZoom;\n  }\n  const tileIndicesFloats = positions.map((position) =>\n    math.wgs84ToTileIndex(position, zoom, false),\n  );\n  const tileIndicesInteger = tileIndicesFloats.map((index) => [\n    ~~index[0],\n    ~~index[1],\n  ]);\n  const tileIDs = tileIndicesInteger.map(\n    (index) =>\n      `terrain_${zoom.toString()}_${index[0].toString()}_${index[1].toString()}`,\n  );\n\n  // unique tiles to fetch (excluding those already in cache and the doublons)\n  const uniqueTilesToFetch = Array.from(\n    new Set(tileIDs.filter((tileID) => !cache.has(tileID))),\n  ).map((tileID) => tileID.split(\"_\").slice(1));\n  const tileURLs = uniqueTilesToFetch.map((zxy) =>\n    tileURLSchema\n      .replace(\"{x}\", zxy[1].toString())\n      .replace(\"{y}\", zxy[2].toString())\n      .replace(\"{z}\", zxy[0].toString()),\n  );\n  const promisesFetchTiles = tileURLs.map((url) => callFetch(url));\n  const resTiles = await Promise.allSettled(promisesFetchTiles);\n  const fulfilledRes = resTiles\n    .map((el: PromiseSettledResult<Response>) =>\n      el.status === \"fulfilled\" ? el.value : null,\n    )\n    .filter((res) => res);\n  const fulfilledRButNotOkRes = fulfilledRes.filter((res) => !res.ok);\n\n  if (fulfilledRes.length !== promisesFetchTiles.length) {\n    throw new Error(\"Some tiles could not be fetched.\");\n  }\n\n  if (fulfilledRButNotOkRes.length) {\n    throw new ServiceError(\n      fulfilledRButNotOkRes[0],\n      customMessages[fulfilledRButNotOkRes[0].status] ?? \"\",\n    );\n  }\n\n  const tileArrayBuffers = await Promise.all(\n    fulfilledRes.map((res) => res.arrayBuffer()),\n  );\n\n  // It is possible that the tile is missing\n  if (!tileArrayBuffers.every((buff) => buff.byteLength > 0)) {\n    throw new Error(\"Some tiles are not available.\");\n  }\n\n  const tilePixelDatas = await Promise.all(\n    tileArrayBuffers.map((buff) => tileParser(buff)),\n  );\n\n  // Adding to cache\n  tilePixelDatas.forEach((tilePixelData, i) => {\n    const zxy = uniqueTilesToFetch[i];\n    const tileID = `terrain_${zxy[0].toString()}_${zxy[1].toString()}_${zxy[2].toString()}`;\n    cache.set(tileID, tilePixelData);\n  });\n\n  const elevatedPositions = positions.map((position, i) => {\n    const tileID = tileIDs[i];\n    const tileIndexFloat = tileIndicesFloats[i];\n    const tilePixelData = cache.get(tileID);\n\n    // const pixelX = ~~(tilePixelData.width * (tileIndexFloat[0] % 1));\n    // const pixelY = ~~(tilePixelData.height * (tileIndexFloat[1] % 1));\n\n    const pixelX = Math.min(\n      Math.round(tilePixelData.width * (tileIndexFloat[0] % 1)),\n      tilePixelData.width - 1,\n    );\n    const pixelY = Math.min(\n      Math.round(tilePixelData.height * (tileIndexFloat[1] % 1)),\n      tilePixelData.height - 1,\n    );\n\n    const pixelDataIndex =\n      (pixelY * tilePixelData.width + pixelX) * tilePixelData.components;\n    const R = tilePixelData.pixels[pixelDataIndex];\n    const G = tilePixelData.pixels[pixelDataIndex + 1];\n    const B = tilePixelData.pixels[pixelDataIndex + 2];\n    const elevation = -10000 + (R * 256 * 256 + G * 256 + B) * 0.1;\n\n    return [position[0], position[1], ~~(elevation * 1000) / 1000];\n  });\n\n  // Smoothing\n  if (options.smoothingKernelSize) {\n    // make sure the kernel is of an odd size\n    const kernelSize = ~~(options.smoothingKernelSize / 2) * 2 + 1;\n    const elevations: number[] = elevatedPositions.map((pos) => pos[2]);\n    const kernelSpan = ~~(kernelSize / 2);\n\n    for (let i = kernelSpan; i < elevations.length - kernelSpan - 1; i += 1) {\n      let sum = 0;\n      for (let j = 0; j < kernelSize; j += 1) {\n        const elev = elevations[i - kernelSpan + j];\n        sum += elev;\n      }\n      sum /= kernelSize;\n      elevatedPositions[i][2] = sum;\n    }\n  }\n\n  return elevatedPositions;\n}\n\n/**\n * Creates a clone of a GeoJSON LineString (deep copy with structuredClone) that contains the computed elevation\n * as the third element of each position array ([lng, lat, alt])\n */\nasync function fromLineString(\n  /**\n   * A GeoJSON LineStriung feature\n   */\n  ls: LineString,\n  /**\n   * Options\n   */\n  options: ElevationBatchOptions = {},\n): Promise<LineString> {\n  if (ls.type !== \"LineString\") {\n    throw new Error(\"The provided object is not a GeoJSON LineString\");\n  }\n\n  const clone = structuredClone(ls) as LineString;\n  const elevatedPositions = await batch(clone.coordinates, options);\n  clone.coordinates = elevatedPositions;\n\n  return clone;\n}\n\n/**\n * Creates a clone of a MultiLineString (deep copy with structuredClone) that contains the computed elevation\n * as the third element of each position array ([lng, lat, alt])\n */\nasync function fromMultiLineString(\n  /**\n   * A GeoJSON LineStriung feature\n   */\n  ls: MultiLineString,\n  /**\n   * Options\n   */\n  options: ElevationBatchOptions = {},\n): Promise<MultiLineString> {\n  if (ls.type !== \"MultiLineString\") {\n    throw new Error(\"The provided object is not a GeoJSON MultiLineString\");\n  }\n\n  const clone = structuredClone(ls) as MultiLineString;\n  const multiLengths = clone.coordinates.map((poss) => poss.length);\n\n  // This is equivalent to a batch of batch, so we makes the multilinestring a unique\n  // line string to prevent batch to fetch multiple times the same tile\n  const flattenPositions = clone.coordinates.flat();\n  const flattenPositionsElevated = await batch(flattenPositions, options);\n\n  // And then chopping back into a multi line string\n  const result: Position[][] = [];\n  let index = 0;\n  for (const length of multiLengths) {\n    result.push(flattenPositionsElevated.slice(index, index + length));\n    index += length;\n  }\n\n  clone.coordinates = result;\n  return clone;\n}\n\nexport const elevation = {\n  at,\n  batch,\n  fromLineString,\n  fromMultiLineString,\n};\n"],"names":["customMessages","batch","elevation"],"mappings":"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","x_google_ignoreList":[13]}