@maptiler/client
Version:
Javascript & Typescript wrapper to MapTiler Cloud API
2 lines (1 loc) • 31 kB
JavaScript
import we from"quick-lru";function De(){return typeof self<"u"?fetch.bind(self):typeof global<"u"&&global.fetch?global.fetch:null}class q{constructor(){this._apiKey="",this._fetch=De(),this.tileCacheSize=200}set apiKey(n){this._apiKey=n}get apiKey(){return this._apiKey}set fetch(n){this._fetch=n}get fetch(){return this._fetch}}const m=new q,Y={AUTO:{code:null,flag:"auto",name:"Auto",latin:!1,isMode:!0,geocoding:!0},LATIN:{code:"latin",flag:"name:latin",name:"Latin",latin:!0,isMode:!1,geocoding:!1},NON_LATIN:{code:"nonlatin",flag:"name:nonlatin",name:"Non Latin",latin:!1,isMode:!1,geocoding:!1},LOCAL:{code:null,flag:"name",name:"Local",latin:!0,isMode:!1,geocoding:!1}},Z={ALBANIAN:{code:"sq",flag:"name:sq",name:"Albanian",latin:!0,isMode:!1,geocoding:!0},AMHARIC:{code:"am",flag:"name:am",name:"Amharic",latin:!1,isMode:!1,geocoding:!0},ARABIC:{code:"ar",flag:"name:ar",name:"Arabic",latin:!1,isMode:!1,geocoding:!0},ARMENIAN:{code:"hy",flag:"name:hy",name:"Armenian",latin:!1,isMode:!1,geocoding:!0},AZERBAIJANI:{code:"az",flag:"name:az",name:"Azerbaijani",latin:!0,isMode:!1,geocoding:!0},BASQUE:{code:"eu",flag:"name:eu",name:"Basque",latin:!0,isMode:!1,geocoding:!0},BELARUSIAN:{code:"be",flag:"name:be",name:"Belarusian",latin:!1,isMode:!1,geocoding:!0},BENGALI:{code:"bn",flag:"name:bn",name:"Bengali",latin:!0,isMode:!1,geocoding:!0},BOSNIAN:{code:"bs",flag:"name:bs",name:"Bosnian",latin:!0,isMode:!1,geocoding:!0},BRETON:{code:"br",flag:"name:br",name:"Breton",latin:!0,isMode:!1,geocoding:!0},BULGARIAN:{code:"bg",flag:"bg",name:"Bulgarian",latin:!1,isMode:!1,geocoding:!0},CATALAN:{code:"ca",flag:"name:ca",name:"Catalan",latin:!0,isMode:!1,geocoding:!0},CHINESE:{code:"zh",flag:"name:zh",name:"Chinese",latin:!1,isMode:!1,geocoding:!0},TRADITIONAL_CHINESE:{code:"zh-Hant",flag:"name:zh-Hant",name:"Chinese (traditional)",latin:!1,isMode:!1,geocoding:!1},SIMPLIFIED_CHINESE:{code:"zh-Hans",flag:"name:zh-Hans",name:"Chinese (simplified)",latin:!1,isMode:!1,geocoding:!1},CORSICAN:{code:"co",flag:"name:co",name:"Corsican",latin:!0,isMode:!1,geocoding:!0},CROATIAN:{code:"hr",flag:"name:hr",name:"Croatian",latin:!0,isMode:!1,geocoding:!0},CZECH:{code:"cs",flag:"name:cs",name:"Czech",latin:!0,isMode:!1,geocoding:!0},DANISH:{code:"da",flag:"name:da",name:"Danish",latin:!0,isMode:!1,geocoding:!0},DUTCH:{code:"nl",flag:"name:nl",name:"Dutch",latin:!0,isMode:!1,geocoding:!0},GERMAN:{code:"de",flag:"name:de",name:"German",latin:!0,isMode:!1,geocoding:!0},GREEK:{code:"el",flag:"name:el",name:"Greek",latin:!1,isMode:!1,geocoding:!0},ENGLISH:{code:"en",flag:"name:en",name:"English",latin:!0,isMode:!1,geocoding:!0},ESPERANTO:{code:"eo",flag:"name:eo",name:"Esperanto",latin:!0,isMode:!1,geocoding:!0},ESTONIAN:{code:"et",flag:"name:et",name:"Estonian",latin:!0,isMode:!1,geocoding:!0},FINNISH:{code:"fi",flag:"name:fi",name:"Finnish",latin:!0,isMode:!1,geocoding:!0},FRENCH:{code:"fr",flag:"name:fr",name:"French",latin:!0,isMode:!1,geocoding:!0},FRISIAN:{code:"fy",flag:"name:fy",name:"Frisian (West)",latin:!0,isMode:!1,geocoding:!0},GEORGIAN:{code:"ka",flag:"name:ka",name:"Georgian",latin:!1,isMode:!1,geocoding:!0},HEBREW:{code:"he",flag:"name:he",name:"Hebrew",latin:!1,isMode:!1,geocoding:!0},HINDI:{code:"hi",flag:"name:hi",name:"Hindi",latin:!1,isMode:!1,geocoding:!0},HUNGARIAN:{code:"hu",flag:"name:hu",name:"Hungarian",latin:!0,isMode:!1,geocoding:!0},ICELANDIC:{code:"is",flag:"name:is",name:"Icelandic",latin:!0,isMode:!1,geocoding:!0},INDONESIAN:{code:"id",flag:"name:id",name:"Indonesian",latin:!0,isMode:!1,geocoding:!0},IRISH:{code:"ga",flag:"name:ga",name:"Irish",latin:!0,isMode:!1,geocoding:!0},ITALIAN:{code:"it",flag:"name:it",name:"Italian",latin:!0,isMode:!1,geocoding:!0},JAPANESE:{code:"ja",flag:"name:ja",name:"Japanese",latin:!1,isMode:!1,geocoding:!0},JAPANESE_HIRAGANA:{code:"ja-Hira",flag:"name:ja-Hira",name:"Japanese Hiragana form",latin:!1,isMode:!1,geocoding:!1},JAPANESE_2018:{code:"ja-Latn",flag:"name:ja-Latn",name:"Japanese (Latin 2018)",latin:!0,isMode:!1,geocoding:!1},JAPANESE_KANA:{code:"ja_kana",flag:"name:ja_kana",name:"Japanese (Kana)",latin:!1,isMode:!1,geocoding:!1},JAPANESE_LATIN:{code:"ja_rm",flag:"name:ja_rm",name:"Japanese (Latin script)",latin:!0,isMode:!1,geocoding:!1},KANNADA:{code:"kn",flag:"name:kn",name:"Kannada",latin:!0,isMode:!1,geocoding:!0},KAZAKH:{code:"kk",flag:"name:kk",name:"Kazakh",latin:!1,isMode:!1,geocoding:!0},KOREAN:{code:"ko",flag:"name:ko",name:"Korean",latin:!1,isMode:!1,geocoding:!0},KOREAN_LATIN:{code:"ko-Latn",flag:"name:ko-Latn",name:"Korean (Latin script)",latin:!0,isMode:!1,geocoding:!1},KURDISH:{code:"ku",flag:"name:ku",name:"Kurdish",latin:!0,isMode:!1,geocoding:!0},CLASSICAL_LATIN:{code:"la",flag:"name:la",name:"Latin",latin:!0,isMode:!1,geocoding:!0},LATVIAN:{code:"lv",flag:"name:lv",name:"Latvian",latin:!0,isMode:!1,geocoding:!0},LITHUANIAN:{code:"lt",flag:"name:lt",name:"Lithuanian",latin:!0,isMode:!1,geocoding:!0},LUXEMBOURGISH:{code:"lb",flag:"name:lb",name:"Luxembourgish",latin:!0,isMode:!1,geocoding:!0},MACEDONIAN:{code:"mk",flag:"name:mk",name:"Macedonian",latin:!1,isMode:!1,geocoding:!0},MALAYALAM:{code:"ml",flag:"name:ml",name:"Malayalam",latin:!1,isMode:!1,geocoding:!0},MALTESE:{code:"mt",flag:"name:mt",name:"Maltese",latin:!0,isMode:!1,geocoding:!0},NORWEGIAN:{code:"no",flag:"name:no",name:"Norwegian",latin:!0,isMode:!1,geocoding:!0},OCCITAN:{code:"oc",flag:"name:oc",name:"Occitan",latin:!0,isMode:!1,geocoding:!0},PERSIAN:{code:"fa",flag:"name:fa",name:"Persian",latin:!1,isMode:!1,geocoding:!0},POLISH:{code:"pl",flag:"name:pl",name:"Polish",latin:!0,isMode:!1,geocoding:!0},PORTUGUESE:{code:"pt",flag:"name:pt",name:"Portuguese",latin:!0,isMode:!1,geocoding:!0},PUNJABI:{code:"pa",flag:"name:pa",name:"Punjabi",latin:!1,isMode:!1,geocoding:!0},WESTERN_PUNJABI:{code:"pnb",flag:"name:pnb",name:"Western Punjabi",latin:!1,isMode:!1,geocoding:!1},ROMANIAN:{code:"ro",flag:"name:ro",name:"Romanian",latin:!0,isMode:!1,geocoding:!0},ROMANSH:{code:"rm",flag:"name:rm",name:"Romansh",latin:!0,isMode:!1,geocoding:!0},RUSSIAN:{code:"ru",flag:"name:ru",name:"Russian",latin:!1,isMode:!1,geocoding:!0},SERBIAN_CYRILLIC:{code:"sr",flag:"name:sr",name:"Serbian (Cyrillic script)",latin:!1,isMode:!1,geocoding:!0},SERBIAN_LATIN:{code:"sr-Latn",flag:"name:sr-Latn",name:"Serbian (Latin script)",latin:!0,isMode:!1,geocoding:!1},SCOTTISH_GAELIC:{code:"gd",flag:"name:gd",name:"Scottish Gaelic",latin:!0,isMode:!1,geocoding:!0},SLOVAK:{code:"sk",flag:"name:sk",name:"Slovak",latin:!0,isMode:!1,geocoding:!0},SLOVENE:{code:"sl",flag:"name:sl",name:"Slovene",latin:!0,isMode:!1,geocoding:!0},SPANISH:{code:"es",flag:"name:es",name:"Spanish",latin:!0,isMode:!1,geocoding:!0},SWEDISH:{code:"sv",flag:"name:sv",name:"Swedish",latin:!0,isMode:!1,geocoding:!0},TAMIL:{code:"ta",flag:"name:ta",name:"Tamil",latin:!1,isMode:!1,geocoding:!0},TELUGU:{code:"te",flag:"name:te",name:"Telugu",latin:!1,isMode:!1,geocoding:!0},THAI:{code:"th",flag:"name:th",name:"Thai",latin:!1,isMode:!1,geocoding:!0},TURKISH:{code:"tr",flag:"name:tr",name:"Turkish",latin:!0,isMode:!1,geocoding:!0},UKRAINIAN:{code:"uk",flag:"name:uk",name:"Ukrainian",latin:!1,isMode:!1,geocoding:!0},VIETNAMESE:{code:"vi",flag:"name:vi",name:"Vietnamese (Latin script)",latin:!0,isMode:!1,geocoding:!0},WELSH:{code:"cy",flag:"name:cy",name:"Welsh",latin:!0,isMode:!1,geocoding:!0}},A={...Y,...Z};function Q(e,n=A){return e in n?e[e]:null}function T(e,n=A){for(const a of Object.values(n))if(a.code===e)return a;return null}function D(e,n=A){for(const a of Object.values(n))if(a.flag===e)return a;return null}function K(){if(typeof navigator>"u"){const e=Intl.DateTimeFormat().resolvedOptions().locale.split("-")[0];return T(e)??A.ENGLISH}return Array.from(new Set(navigator.languages.map(e=>e.split("-")[0]))).map(e=>T(e)).filter(e=>e)[0]??A.ENGLISH}function j(e){return e!==null&&typeof e=="object"&&"code"in e&&"flag"in e&&"name"in e&&"latin"in e&&"isMode"in e&&"geocoding"in e&&(typeof e.code=="string"||e.code===null)&&typeof e.flag=="string"&&typeof e.name=="string"&&typeof e.latin=="boolean"&&typeof e.isMode=="boolean"&&typeof e.geocoding=="boolean"}function O(e,n=A){return j(e)?D(e.flag,n):typeof e!="string"?null:Q(e,n)||T(e,n)||D(e,n)||null}function Ue(e,n,a=A){const t=O(e,a),o=O(n,a);return t&&o&&t.flag===o.flag}async function f(e,n={}){if(m.fetch===null)throw new Error("The fetch function was not found. If on NodeJS < 18 please specify the fetch function with config.fetch");if(new URL(e).searchParams.get("key").trim()==="")throw new Error("The MapTiler Cloud API key is missing. Set it in `config.apiKey` or get one for free at https://maptiler.com");return m.fetch(e,n)}const p={maptilerApiURL:"https://api.maptiler.com/",mapStyle:"streets-v2"};Object.freeze(p);class h extends Error{constructor(n,a=""){super(`Call to enpoint ${n.url} failed with the status code ${n.status}. ${a}`),this.res=n}}const U={400:"Query too long / Invalid parameters",403:"Key is missing, invalid or restricted"};function X(e,n){const{language:a}=n;if(a===void 0)return;const t=(Array.isArray(a)?a:[a]).map(i=>Ee(i)).filter(i=>i),o=Array.from(new Set(t)).join(",");e.set("language",o)}function Ee(e){const n=e===A.AUTO.flag?K():typeof e=="string"?T(e):j(e)?e.flag===A.AUTO.flag?K():D(e.flag):null;return n?.geocoding?n.code:null}function ee(e,n){const{apiKey:a,limit:t,types:o,excludeTypes:i}=n;e.set("key",a??m.apiKey),t!==void 0&&e.set("limit",String(t)),o!==void 0&&e.set("types",o.join(",")),i!==void 0&&e.set("excludeTypes",String(i)),X(e,n)}function ne(e,n){ee(e,n);const{bbox:a,proximity:t,country:o,fuzzyMatch:i,autocomplete:r}=n;a!==void 0&&e.set("bbox",a.join(",")),t!==void 0&&e.set("proximity",t==="ip"?t:t.join(",")),o!==void 0&&e.set("country",o.join(",")),i!==void 0&&e.set("fuzzyMatch",i?"true":"false"),r!==void 0&&e.set("autocomplete",r?"true":"false")}async function ke(e,n={}){if(typeof e!="string"||e.trim().length===0)throw new Error("The query must be a non-empty string");const a=new URL(`geocoding/${encodeURIComponent(e)}.json`,p.maptilerApiURL);ne(a.searchParams,n);const t=await f(a.toString());if(!t.ok)throw new h(t,U[t.status]??"");return await t.json()}async function Pe(e,n={}){if(!Array.isArray(e)||e.length<2)throw new Error("The position must be an array of form [lng, lat].");const a=new URL(`geocoding/${e[0]},${e[1]}.json`,p.maptilerApiURL);ee(a.searchParams,n);const t=await f(a.toString());if(!t.ok)throw new h(t,U[t.status]??"");return await t.json()}async function Ne(e,n={}){const a=new URL(`geocoding/${e}.json`,p.maptilerApiURL);a.searchParams.set("key",n.apiKey??m.apiKey),X(a.searchParams,n);const t=await f(a.toString());if(!t.ok)throw new h(t,U[t.status]??"");return await t.json()}async function $e(e,n={}){if(!e.length)return[];const a=e.map(r=>encodeURIComponent(r)).join(";"),t=new URL(`geocoding/${a}.json`,p.maptilerApiURL);ne(t.searchParams,n);const o=await f(t.toString());if(!o.ok)throw new h(o,U[o.status]??"");const i=await o.json();return e.length===1?[i]:i}const be={forward:ke,reverse:Pe,byId:Ne,batch:$e},ae={403:"Key is missing, invalid or restricted"};async function Ce(e={}){const n=new URL("geolocation/ip.json",p.maptilerApiURL);n.searchParams.set("key",e.apiKey??m.apiKey),"elevation"in e&&n.searchParams.set("elevation",e.elevation?"true":"false");const a=n.toString(),t=await f(a);if(!t.ok)throw new h(t,t.status in ae?ae[t.status]:"");return await t.json()}const Ke={info:Ce},E={403:"Key is missing, invalid or restricted"};async function je(e,n={}){if(typeof e!="string"||e.trim().length===0)throw new Error("The query must be a non-empty string");const a=new URL(`coordinates/search/${e}.json`,p.maptilerApiURL);a.searchParams.set("key",n.apiKey??m.apiKey),"limit"in n&&a.searchParams.set("limit",n.limit.toString()),"transformations"in n&&a.searchParams.set("transformations",n.transformations.toString()),"exports"in n&&a.searchParams.set("exports",n.exports.toString());const t=a.toString(),o=await f(t);if(!o.ok)throw new h(o,o.status in E?E[o.status]:"");return await o.json()}async function Oe(e,n={}){const a=(Array.isArray(e[0])?e:[e]).map(r=>`${r[0]},${r[1]}`).join(";"),t=new URL(`coordinates/transform/${a}.json`,p.maptilerApiURL);t.searchParams.set("key",n.apiKey??m.apiKey),"sourceCrs"in n&&t.searchParams.set("s_srs",n.sourceCrs.toString()),"targetCrs"in n&&t.searchParams.set("t_srs",n.targetCrs.toString()),"operations"in n&&t.searchParams.set("ops",(Array.isArray(n.operations)?n.operations:[n.operations]).join("|"));const o=t.toString(),i=await f(o);if(!i.ok)throw new h(i,i.status in E?E[i.status]:"");return await i.json()}const He={search:je,transform:Oe},te={403:"Key is missing, invalid or restricted"};async function xe(e,n={}){if(typeof e!="string"||e.trim().length===0)throw new Error("The data ID must be a non-empty string");const a=new URL(`data/${encodeURIComponent(e)}/features.json`,p.maptilerApiURL);a.searchParams.set("key",n.apiKey??m.apiKey);const t=a.toString(),o=await f(t);if(!o.ok)throw new h(o,o.status in te?te[o.status]:"");return await o.json()}const Fe={get:xe};function ie(e){const n=/^maptiler:\/\/(.*)/;let a;const t=e.trim();let o;return t.startsWith("http://")||t.startsWith("https://")?o=t:(a=n.exec(t))!==null?o=`https://api.maptiler.com/maps/${a[1]}/style.json`:o=`https://api.maptiler.com/maps/${t}/style.json`,o}class H{constructor(n,a,t,o,i,r,s=!1){this.name=n,this.variantType=a,this.id=t,this.referenceStyle=o,this.description=i,this.imageURL=r,this.deprecated=s}getName(){return this.name}getFullName(){return`${this.referenceStyle.getName()} ${this.name}`}getType(){return this.variantType}getId(){return this.id}getDescription(){return this.description}getReferenceStyle(){return this.referenceStyle}hasVariant(n){return this.referenceStyle.hasVariant(n)}getVariant(n){const a=this.referenceStyle.getVariant(n);return this.warnIfDeprecated(a),a}getVariants(){return this.referenceStyle.getVariants().filter(n=>n!==this).map(n=>(this.warnIfDeprecated(n),n))}getImageURL(){return this.imageURL}getExpandedStyleURL(){return ie(this.getId())}warnIfDeprecated(n=this){if(!n.deprecated)return n;const a=n.getFullName();return console.warn(`Style "${a}" is deprecated and will be removed in a future version.`),n}}class x{constructor(n,a){this.name=n,this.id=a,this.variants={},this.orderedVariants=[]}getName(){return this.name}getId(){return this.id}addVariant(n){this.variants[n.getType()]=n,this.orderedVariants.push(n)}hasVariant(n){return n in this.variants}getVariant(n){return n in this.variants?this.variants[n]:this.orderedVariants[0]}getVariants(){return Object.values(this.variants)}getDefaultVariant(){return this.orderedVariants[0].warnIfDeprecated()}}const k=[{referenceStyleID:"STREETS",name:"Streets",description:"",variants:[{id:"streets-v2",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"streets-v2-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"streets-v2-light",name:"Light",variantType:"LIGHT",description:"",imageURL:""},{id:"streets-v2-night",name:"Night",variantType:"NIGHT",description:"",imageURL:""},{id:"streets-v2-pastel",name:"Pastel",variantType:"PASTEL",description:"",imageURL:""}]},{referenceStyleID:"OUTDOOR",name:"Outdoor",description:"",variants:[{id:"outdoor-v2",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"outdoor-v2-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""}]},{referenceStyleID:"WINTER",name:"Winter",description:"",variants:[{id:"winter-v2",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"winter-v2-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""}]},{referenceStyleID:"SATELLITE",name:"Satellite",description:"",variants:[{id:"satellite",name:"Default",variantType:"DEFAULT",description:"",imageURL:""}]},{referenceStyleID:"HYBRID",name:"Hybrid",description:"",variants:[{id:"hybrid",name:"Default",variantType:"DEFAULT",description:"",imageURL:""}]},{referenceStyleID:"BASIC",name:"Basic",description:"",variants:[{id:"basic-v2",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"basic-v2-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"basic-v2-light",name:"Light",variantType:"LIGHT",description:"",imageURL:""}]},{referenceStyleID:"BRIGHT",name:"Bright",description:"",variants:[{id:"bright-v2",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"bright-v2-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"bright-v2-light",name:"Light",variantType:"LIGHT",description:"",imageURL:""},{id:"bright-v2-pastel",name:"Pastel",variantType:"PASTEL",description:"",imageURL:""}]},{referenceStyleID:"OPENSTREETMAP",name:"OpenStreetMap",description:"",variants:[{id:"openstreetmap",name:"Default",variantType:"DEFAULT",description:"",imageURL:""}]},{referenceStyleID:"TOPO",name:"Topo",description:"",variants:[{id:"topo-v2",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"topo-v2-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"topo-v2-shiny",name:"Shiny",deprecated:!0,variantType:"SHINY",description:"",imageURL:""},{id:"topo-v2-pastel",name:"Pastel",variantType:"PASTEL",description:"",imageURL:""},{id:"topo-v2-topographique",name:"Topographique",variantType:"TOPOGRAPHIQUE",description:"",imageURL:""}]},{referenceStyleID:"VOYAGER",name:"Voyager",description:"",variants:[{id:"voyager-v2",name:"Default",deprecated:!0,variantType:"DEFAULT",description:"",imageURL:""},{id:"voyager-v2-darkmatter",name:"Darkmatter",deprecated:!0,variantType:"DARK",description:"",imageURL:""},{id:"voyager-v2-positron",name:"Positron",deprecated:!0,variantType:"LIGHT",description:"",imageURL:""},{id:"voyager-v2-vintage",name:"Vintage",deprecated:!0,variantType:"VINTAGE",description:"",imageURL:""}]},{referenceStyleID:"TONER",name:"Toner",description:"",variants:[{id:"toner-v2",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"toner-v2-background",name:"Background",variantType:"BACKGROUND",deprecated:!0,description:"",imageURL:""},{id:"toner-v2-lite",name:"Lite",variantType:"LITE",description:"",imageURL:""},{id:"toner-v2-lines",name:"Lines",variantType:"LINES",deprecated:!0,description:"",imageURL:""}]},{referenceStyleID:"DATAVIZ",name:"Dataviz",description:"",variants:[{id:"dataviz",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"dataviz-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"dataviz-light",name:"Light",variantType:"LIGHT",description:"",imageURL:""}]},{referenceStyleID:"BACKDROP",name:"Backdrop",description:"",variants:[{id:"backdrop",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"backdrop-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"backdrop-light",name:"Light",variantType:"LIGHT",description:"",imageURL:""}]},{referenceStyleID:"OCEAN",name:"Ocean",description:"",variants:[{id:"ocean",name:"Default",variantType:"DEFAULT",description:"",imageURL:""}]},{referenceStyleID:"AQUARELLE",name:"Aquarelle",description:"Watercolor map for creative use",variants:[{id:"aquarelle",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"aquarelle-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"aquarelle-vivid",name:"Vivid",variantType:"VIVID",description:"",imageURL:""}]},{referenceStyleID:"LANDSCAPE",name:"Landscape",description:"Terrain map for data overlays and visualisations",variants:[{id:"landscape",name:"Default",variantType:"DEFAULT",description:"",imageURL:""},{id:"landscape-dark",name:"Dark",variantType:"DARK",description:"",imageURL:""},{id:"landscape-vivid",name:"Vivid",variantType:"VIVID",description:"",imageURL:""}]}];function Ve(e){return new Proxy(e,{get(n,a,t){return n.hasVariant(a)?n.getVariant(a):a.toString().toUpperCase()===a?e.getDefaultVariant():Reflect.get(n,a,t)}})}function Be(){const e={};for(let n=0;n<k.length;n+=1){const a=k[n],t=Ve(new x(a.name,a.referenceStyleID));for(let o=0;o<a.variants.length;o+=1){const i=a.variants[o],r=new H(i.name,i.variantType,i.id,t,i.description,i.imageURL,i.deprecated);t.addVariant(r)}e[a.referenceStyleID]=t}return e}function P(e){if(!e)return oe[k[0].referenceStyleID].getDefaultVariant().getId();if(typeof e=="string"||e instanceof String)return e.trim().toLowerCase();if(e instanceof H)return e.getId();if(e instanceof x)return e.getDefaultVariant().getId()}const oe=Be();function Ge(e){const n=[];function a(i){(i.type==="LineString"||i.type==="MultiLineString")&&n.push(i)}function t(i){i.geometry&&a(i.geometry)}function o(i){for(const r of i.features)r.type==="Feature"?t(r):r.type==="FeatureCollection"&&o(r)}return e.type==="Feature"?t(e):e.type==="FeatureCollection"?o(e):a(e),n}function _e(e,n,a){let t=n[0],o=n[1],i=a[0]-t,r=a[1]-o;if(i!==0||r!==0){const s=((e[0]-t)*i+(e[1]-o)*r)/(i*i+r*r);s>1?(t=a[0],o=a[1]):s>0&&(t+=i*s,o+=r*s)}return i=e[0]-t,r=e[1]-o,i*i+r*r}function F(e,n,a,t,o){let i=t,r;for(let s=n+1;s<a;s++){const c=_e(e[s],e[n],e[a]);c>i&&(r=s,i=c)}i>t&&(r-n>1&&F(e,n,r,t,o),o.push(e[r]),a-r>1&&F(e,r,a,t,o))}function ze(e,n){const a=e.length-1,t=[e[0]];return F(e,0,a,n,t),t.push(e[a]),t}function We(e,n){if(e.length<=2)return e;const a=n!==void 0?n*n:1;return ze(e,a)}const re={extractLineStrings:Ge,simplify:We};function V(e,n=!0){let a=`${e[0]},${e[1]}`;return e.length===3&&n&&(a+=`,${e[2]}`),a}function B(e,n=3e3){let a=e.map(i=>i.join(",")).join("|"),t=5e-6;const o=1e-5;for(;a.length>n;)a=re.simplify(e,t).map(i=>`${i[0]},${i[1]}`).join("|"),t+=o;return a}function Je(e,n,a={}){const t=P(a.style),o=a.hiDPI?"@2x":"",i=a.format??"png";let r=~~(a.width??1024),s=~~(a.height??1024);a.hiDPI&&(r=~~(r/2),s=~~(s/2));const c=new URL(`maps/${encodeURIComponent(t)}/static/${e[0]},${e[1]},${n}/${r}x${s}${o}.${i}`,p.maptilerApiURL);if("attribution"in a&&c.searchParams.set("attribution",a.attribution.toString()),"markers"in a){let d="";const g="markerIcon"in a;g&&(d+=`icon:${a.markerIcon}|`),g&&"markerAnchor"in a&&(d+=`anchor:${a.markerAnchor}|`),g&&a.hiDPI&&(d+="scale:2|");const u=Array.isArray(a.markers[0])?a.markers:[a.markers];d+=u.map(L=>V(L,!g)).join("|"),c.searchParams.set("markers",d)}if("path"in a){let d="";if(d+=`fill:${a.pathFillColor??"none"}|`,"pathStrokeColor"in a&&(d+=`stroke:${a.pathStrokeColor}|`),"pathWidth"in a){const g=a.pathWidth/(a.hiDPI?2:1);d+=`width:${g.toString()}|`}d+=B(a.path),c.searchParams.set("path",d)}return c.searchParams.set("key",a.apiKey??m.apiKey),c.toString()}function qe(e,n={}){const a=P(n.style),t=n.hiDPI?"@2x":"",o=n.format??"png";let i=~~(n.width??1024),r=~~(n.height??1024);n.hiDPI&&(i=~~(i/2),r=~~(r/2));const s=new URL(`maps/${encodeURIComponent(a)}/static/${e[0]},${e[1]},${e[2]},${e[3]}/${i}x${r}${t}.${o}`,p.maptilerApiURL);if("attribution"in n&&s.searchParams.set("attribution",n.attribution.toString()),"padding"in n&&s.searchParams.set("padding",n.padding.toString()),"markers"in n){let c="";const d="markerIcon"in n;d&&(c+=`icon:${n.markerIcon}|`),d&&"markerAnchor"in n&&(c+=`anchor:${n.markerAnchor}|`),d&&n.hiDPI&&(c+="scale:2|");const g=Array.isArray(n.markers[0])?n.markers:[n.markers];c+=g.map(u=>V(u,!d)).join("|"),s.searchParams.set("markers",c)}if("path"in n){let c="";if(c+=`fill:${n.pathFillColor??"none"}|`,"pathStrokeColor"in n&&(c+=`stroke:${n.pathStrokeColor}|`),"pathWidth"in n){const d=n.pathWidth/(n.hiDPI?2:1);c+=`width:${d.toString()}|`}c+=B(n.path),s.searchParams.set("path",c)}return s.searchParams.set("key",n.apiKey??m.apiKey),s.toString()}function Ye(e={}){if(!("markers"in e)&&!("path"in e))throw new Error("Automatic static maps require markers and/or path to be created.");const n=P(e.style),a=e.hiDPI?"@2x":"",t=e.format??"png";let o=~~(e.width??1024),i=~~(e.height??1024);e.hiDPI&&(o=~~(o/2),i=~~(i/2));const r=new URL(`maps/${encodeURIComponent(n)}/static/auto/${o}x${i}${a}.${t}`,p.maptilerApiURL);if("attribution"in e&&r.searchParams.set("attribution",e.attribution.toString()),"padding"in e&&r.searchParams.set("padding",e.padding.toString()),"markers"in e){let s="";const c="markerIcon"in e;c&&(s+=`icon:${e.markerIcon}|`),c&&"markerAnchor"in e&&(s+=`anchor:${e.markerAnchor}|`),c&&e.hiDPI&&(s+="scale:2|");const d=Array.isArray(e.markers[0])?e.markers:[e.markers];s+=d.map(g=>V(g,!c)).join("|"),r.searchParams.set("markers",s)}if("path"in e){let s="";if(s+=`fill:${e.pathFillColor??"none"}|`,"pathStrokeColor"in e&&(s+=`stroke:${e.pathStrokeColor}|`),"pathWidth"in e){const c=e.pathWidth/(e.hiDPI?2:1);s+=`width:${c.toString()}|`}s+=B(e.path),r.searchParams.set("path",s)}return r.searchParams.set("key",e.apiKey??m.apiKey),r.toString()}const Ze={centered:Je,bounded:qe,automatic:Ye},N=63710088e-1,se=2*Math.PI*N;function ce(e){return(180+e)/360}function le(e){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+e*Math.PI/360)))/360}function de(e){const n=pe(e);return[ce(n[0]),le(n[1])]}function ge(e){return e*360-180}function me(e){const n=180-e*360;return 360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90}function Qe(e){return[ge(e[0]),me(e[1])]}function G(e,n){const a=Math.PI/180,t=e[1]*a,o=n[1]*a,i=Math.sin(t)*Math.sin(o)+Math.cos(t)*Math.cos(o)*Math.cos((n[0]-e[0])*a);return N*Math.acos(Math.min(i,1))}function Xe(e){const n=Array(e.length);n[0]=0;const a=n.length;for(let t=1;t<a;t++)n[t]=G(e[t-1],e[t])+n[t-1];return n}function pe(e){const n=e[0],a=e[1],t=360,o=((n+180)%t+t)%t-180;return[o===-180?180:o,a]}function fe(e){return se*Math.cos(e*Math.PI/180)}function he(e,n,a=!0){const t=2**n,o=[e[0]*t,e[1]*t];return a?[~~o[0],~~o[1]]:o}function en(e,n,a=!0){const t=de(e);return he(t,n,a)}function M(e){return e*Math.PI/180}function _(e){return e*180/Math.PI}function nn(e,n,a){const t=G(e,n),o=M(e[0]),i=M(e[1]),r=M(n[0]),s=M(n[1]),c=t/N,d=Math.sin((1-a)*c)/Math.sin(c),g=Math.sin(a*c)/Math.sin(c),u=d*Math.cos(i)*Math.cos(o)+g*Math.cos(s)*Math.cos(r),L=d*Math.cos(i)*Math.sin(o)+g*Math.cos(s)*Math.sin(r),v=d*Math.sin(i)+g*Math.sin(s),R=Math.atan2(v,Math.sqrt(u*u+L*L)),l=Math.atan2(L,u);return[_(l),_(R)]}const ue={EARTH_RADIUS:N,EARTH_CIRCUMFERENCE:se,longitudeToMercatorX:ce,latitudeToMercatorY:le,wgs84ToMercator:de,mercatorXToLongitude:ge,mercatorYToLatitude:me,mercatorToWgs84:Qe,haversineDistanceWgs84:G,wrapWgs84:pe,circumferenceAtLatitude:fe,mercatorToTileIndex:he,wgs84ToTileIndex:en,toRadians:M,toDegrees:_,haversineIntermediateWgs84:nn,haversineCumulatedDistanceWgs84:Xe};let z=null;function ye(){return z||(z=new we({maxSize:m.tileCacheSize})),z}async function Ae(e){const n=new Blob([e]),a=await createImageBitmap(n),t=document.createElement("canvas"),o=t.getContext("2d");t.width=a.width,t.height=a.height,o.drawImage(a,0,0);const i=o.getImageData(0,0,t.width,t.height);return{pixels:i.data,width:t.width,height:t.height,components:i.data.length/(t.width*t.height)}}function Le(){if(m.bufferToPixelData)return m.bufferToPixelData;if(typeof window<"u")return Ae;throw new Error("An image file buffer to pixel data parser is necessary. Specify it in `config.bufferToPixelData`")}function W(){return!!m.bufferToPixelData||typeof window<"u"}const an="terrain-rgb-v2",J=50,tn=1e3;let $=null;const Ie={403:"Key is missing, invalid or restricted"};async function on(e,n){e.length>tn&&console.warn("Computing elevation for complex geometries is discouraged - simplify the geometry before proceeding");const a=Math.ceil(e.length/J),t=Array.from({length:a},()=>null).map((i,r)=>{const s=r*J,c=e.slice(s,s+J).map(g=>g.join(",")).join(";"),d=new URL(`elevation/${c}.json`,p.maptilerApiURL);return d.searchParams.set("key",n),f(d.toString())}),o=await Promise.allSettled(t);return(await Promise.all(o.map(async i=>{if(i.status==="rejected")throw new Error(`Some segments could not be fetched, error: ${i.reason}`);if(!i.value.ok)throw new Error(`Some segments could not be fetched, response: ${i.value.status} ${await i.value.text()}, url: ${i.value.url}`);return i.value.json()}))).flat()}async function rn(e,n,a){if(!$){const l=new URL(`tiles/${an}/tiles.json`,p.maptilerApiURL);l.searchParams.set("key",n);const S=l.toString(),y=await f(S);if(y.ok)$=await y.json();else throw new h(y,Ie[y.status]??"")}const t=Le(),o=$.tiles[0],i=ye(),r=$.maxzoom;let s=~~(a??r);(s>r||s<0)&&(s=r);const c=e.map(l=>ue.wgs84ToTileIndex(l,s,!1)),d=c.map(l=>[~~l[0],~~l[1]]).map(l=>`terrain_${s.toString()}_${l[0].toString()}_${l[1].toString()}`),g=Array.from(new Set(d.filter(l=>!i.has(l)))).map(l=>l.split("_").slice(1)),u=g.map(l=>o.replace("{x}",l[1].toString()).replace("{y}",l[2].toString()).replace("{z}",l[0].toString())).map(l=>f(l)),L=(await Promise.allSettled(u)).map(l=>l.status==="fulfilled"?l.value:null).filter(l=>l),v=L.filter(l=>!l.ok);if(L.length!==u.length)throw new Error("Some tiles could not be fetched.");if(v.length)throw new h(v[0],Ie[v[0].status]??"");const R=await Promise.all(L.map(l=>l.arrayBuffer()));if(!R.every(l=>l.byteLength>0))throw new Error("Some tiles are not available.");return(await Promise.all(R.map(l=>t(l)))).forEach((l,S)=>{const y=g[S],w=`terrain_${y[0].toString()}_${y[1].toString()}_${y[2].toString()}`;i.set(w,l)}),e.map((l,S)=>{const y=d[S],w=c[S],I=i.get(y),Se=Math.min(Math.round(I.width*(w[0]%1)),I.width-1),C=(Math.min(Math.round(I.height*(w[1]%1)),I.height-1)*I.width+Se)*I.components,ve=I.pixels[C],Te=I.pixels[C+1],Me=I.pixels[C+2],Re=-1e4+(ve*256*256+Te*256+Me)*.1;return[l[0],l[1],~~(Re*1e3)/1e3]})}async function sn(e,n={}){return(await b([e],n))[0]}async function b(e,n={}){if(e.length===0)return[];const a=n.apiKey??m.apiKey,t=n.computeOn==="client"?await rn(e,a,n.zoom):await on(e,a);if(n.smoothingKernelSize){const o=~~(n.smoothingKernelSize/2)*2+1,i=t.map(s=>s[2]),r=~~(o/2);for(let s=r;s<i.length-r-1;s+=1){let c=0;for(let d=0;d<o;d+=1){const g=i[s-r+d];c+=g}c/=o,t[s][2]=c}}return t}async function cn(e,n={}){if(e.type!=="LineString")throw new Error("The provided object is not a GeoJSON LineString");n.computeOn??(n.computeOn=W()?"client":"server");const a=structuredClone(e),t=await b(a.coordinates,n);return a.coordinates=t,a}async function ln(e,n={}){if(e.type!=="MultiLineString")throw new Error("The provided object is not a GeoJSON MultiLineString");n.computeOn??(n.computeOn=W()?"client":"server");const a=structuredClone(e),t=a.coordinates.map(c=>c.length),o=a.coordinates.flat(),i=await b(o,n),r=[];let s=0;for(const c of t)r.push(i.slice(s,s+c)),s+=c;return a.coordinates=r,a}const dn={at:sn,batch:b,fromLineString:cn,fromMultiLineString:ln};export{q as ClientConfig,Z as ISOLanguage,A as Language,oe as MapStyle,H as MapStyleVariant,Y as NonISOLanguage,x as ReferenceMapStyle,h as ServiceError,Ue as areSameLanguages,Ae as bufferToPixelDataBrowser,W as canParsePixelData,fe as circumferenceAtLatitude,m as config,He as coordinates,Fe as data,dn as elevation,ie as expandMapStyle,be as geocoding,Ke as geolocation,K as getAutoLanguage,Le as getBufferToPixelDataParser,T as getLanguageInfoFromCode,D as getLanguageInfoFromFlag,Q as getLanguageInfoFromKey,ye as getTileCache,j as isLanguageInfo,k as mapStylePresetList,ue as math,re as misc,Ze as staticMaps,P as styleToStyle,O as toLanguageInfo};