@tomtom-org/maps-sdk 0.46.9 → 0.46.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/map/package.json CHANGED
@@ -23,6 +23,7 @@
23
23
  "@microsoft/api-extractor": "catalog:",
24
24
  "@types/geojson": "catalog:",
25
25
  "@types/lodash-es": "catalog:",
26
+ "@types/node": "catalog:",
26
27
  "@vitest/coverage-v8": "catalog:",
27
28
  "jsdom": "catalog:",
28
29
  "rimraf": "catalog:",
@@ -42,7 +43,6 @@
42
43
  "maplibre-gl": "catalog:"
43
44
  },
44
45
  "dependencies": {
45
- "@turf/bearing": "^7.3.4",
46
46
  "core": "workspace:*"
47
47
  }
48
48
  }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@tomtom-org/maps-sdk",
3
3
  "author": "TomTom International B.V.",
4
4
  "license": "See in LICENSE.txt",
5
- "version": "0.46.9",
5
+ "version": "0.46.11",
6
6
  "description": "TomTom Maps for JavaScript",
7
7
  "keywords": [
8
8
  "tomtom",
@@ -18,7 +18,7 @@
18
18
  "nodejs"
19
19
  ],
20
20
  "devDependencies": {
21
- "@biomejs/biome": "^2.4.8",
21
+ "@biomejs/biome": "^2.4.10",
22
22
  "@size-limit/file": "^11.2.0",
23
23
  "@size-limit/preset-app": "^11.2.0",
24
24
  "size-limit": "^11.2.0",
@@ -27,8 +27,8 @@
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@turf/turf": "^7.3.4",
30
- "lodash-es": "^4.17.23",
31
- "maplibre-gl": "^5.21.1",
30
+ "lodash-es": "^4.18.1",
31
+ "maplibre-gl": "^5.22.0",
32
32
  "zod": "^4.3.6"
33
33
  },
34
34
  "size-limit": [
@@ -1,4 +1,5 @@
1
1
  import { AddressProperties } from '@tomtom-org/maps-sdk/core';
2
+ import { AreaAnalyticsMetricKey } from '@tomtom-org/maps-sdk/core';
2
3
  import { Avoidable } from '@tomtom-org/maps-sdk/core';
3
4
  import { ChargingPark } from '@tomtom-org/maps-sdk/core';
4
5
  import { ChargingParkWithAvailability } from '@tomtom-org/maps-sdk/core';
@@ -143,7 +144,7 @@ declare type AddressRangesAPI = {
143
144
  *
144
145
  * @ignore (exposed via 'search')
145
146
  */
146
- declare const alongRouteSearch: (params: AlongRouteSearchParams, customTemplate?: Partial<AlongRouteSearchTemplate>) => Promise<AlongRouteSearchResponse>;
147
+ export declare const alongRouteSearch: (params: AlongRouteSearchParams, customTemplate?: Partial<AlongRouteSearchTemplate>) => Promise<AlongRouteSearchResponse>;
147
148
 
148
149
  /**
149
150
  * Parameters for searching places along a route.
@@ -345,20 +346,6 @@ declare type AreaAnalyticsCollectionPropertiesAPI = {
345
346
  frcs: number[];
346
347
  };
347
348
 
348
- /**
349
- * A traffic metric that can be requested in an area analytics report.
350
- *
351
- * @group Traffic
352
- */
353
- export declare type AreaAnalyticsDataType = (typeof areaAnalyticsDataTypes)[number];
354
-
355
- /**
356
- * Valid data-type identifiers for area analytics requests.
357
- *
358
- * @group Traffic
359
- */
360
- export declare const areaAnalyticsDataTypes: readonly ["NETWORK_LENGTH", "CONGESTION_LEVEL", "FREE_FLOW_SPEED", "TRAVEL_TIME", "SPEED"];
361
-
362
349
  /**
363
350
  * A date value accepted by Traffic Area Analytics — either a `Date` object or
364
351
  * an ISO `'YYYY-MM-DD'` string.
@@ -5585,6 +5572,8 @@ declare const loadTypes: readonly ["USHazmatClass1", "USHazmatClass2", "USHazmat
5585
5572
  */
5586
5573
  export declare type MaxNumberOfAlternatives = 0 | 1 | 2 | 3 | 4 | 5;
5587
5574
 
5575
+ /* Excluded from this release type: metricKeyToApiDataType */
5576
+
5588
5577
  /**
5589
5578
  * @ignore
5590
5579
  * Abbreviated metric fields as returned by the Area Analytics API.
@@ -5787,8 +5776,14 @@ export declare type ParseResponseError<T = DefaultAPIResponseErrorBody> = (apiEr
5787
5776
  declare const parseRevGeoResponse: (apiResponse: ReverseGeocodingResponseAPI, params: ReverseGeocodingParams) => ReverseGeocodingResponse;
5788
5777
 
5789
5778
  /**
5790
- * Default method for parsing a Traffic Area Analytics API response.
5791
- * @param apiResponse The raw Area Analytics API response.
5779
+ * Parses a raw Traffic Area Analytics API response into the SDK representation.
5780
+ *
5781
+ * In addition to renaming abbreviated metric fields and converting date strings
5782
+ * to `Date` objects, this function computes data-driven min/max ranges from
5783
+ * all tile entries across every feature and attaches them to
5784
+ * `result.properties.ranges`.
5785
+ *
5786
+ * @param apiResponse - The raw Area Analytics API response.
5792
5787
  */
5793
5788
  declare const parseTrafficAreaAnalyticsResponse: (apiResponse: AreaAnalyticsResponseAPI) => TrafficAreaAnalytics;
5794
5789
 
@@ -7636,14 +7631,14 @@ export declare type TimeZoneRequest = 'iana';
7636
7631
  * - `baseData`: overall aggregated metrics for the full analysis period
7637
7632
  * - `timedData`: time-series breakdown at yearly / monthly / weekly / daily / hourly granularity
7638
7633
  * - `tiledData`: per-tile heatmap metrics (when available)
7639
- * - `anomalies`: detected traffic anomalies keyed by data type
7634
+ * - `anomalies`: detected traffic anomalies keyed by camelCase metric key (e.g. `anomalies.speed`)
7640
7635
  *
7641
- * **Available metrics (`dataTypes`):**
7642
- * - `SPEED` — average speed on the road network (km/h)
7643
- * - `FREE_FLOW_SPEED` — average speed under uncongested conditions (km/h)
7644
- * - `CONGESTION_LEVEL` — percentage increase in travel time above free-flow
7645
- * - `TRAVEL_TIME` — average travel time per 10 km (minutes)
7646
- * - `NETWORK_LENGTH` — total length of road segments with data (meters)
7636
+ * **Available metrics (`metrics`):**
7637
+ * - `speed` — average speed on the road network (km/h)
7638
+ * - `freeFlowSpeed` — average speed under uncongested conditions (km/h)
7639
+ * - `congestionLevel` — percentage increase in travel time above free-flow
7640
+ * - `travelTime` — average travel time per 10 km (minutes)
7641
+ * - `networkLength` — total length of road segments with data (meters)
7647
7642
  *
7648
7643
  * @param params - Traffic Area Analytics parameters
7649
7644
  * @param customTemplate - Advanced customization for request/response handling
@@ -7658,7 +7653,7 @@ export declare type TimeZoneRequest = 'iana';
7658
7653
  * endDate: new Date('2024-08-06'),
7659
7654
  * functionalRoadClasses: ['MOTORWAY', 'MAJOR_ROAD', 'OTHER_MAJOR_ROAD', 'SECONDARY_ROAD', 'LOCAL_CONNECTING_ROAD', 'LOCAL_ROAD_HIGH_IMPORTANCE'],
7660
7655
  * hours: [7, 8, 9, 17, 18],
7661
- * dataTypes: ['SPEED', 'CONGESTION_LEVEL'],
7656
+ * metrics: ['speed', 'congestionLevel'],
7662
7657
  * geometry: {
7663
7658
  * type: 'Polygon',
7664
7659
  * coordinates: [
@@ -7681,7 +7676,7 @@ export declare type TimeZoneRequest = 'iana';
7681
7676
  * endDate: new Date('2024-08-07'),
7682
7677
  * functionalRoadClasses: 'all',
7683
7678
  * hours: 'all',
7684
- * dataTypes: ['SPEED', 'FREE_FLOW_SPEED', 'CONGESTION_LEVEL', 'TRAVEL_TIME', 'NETWORK_LENGTH'],
7679
+ * metrics: ['speed', 'freeFlowSpeed', 'congestionLevel', 'travelTime', 'networkLength'],
7685
7680
  * geometry: {
7686
7681
  * type: 'Polygon',
7687
7682
  * coordinates: [[[4.89, 52.37], [4.91, 52.37], [4.91, 52.39], [4.89, 52.39], [4.89, 52.37]]]
@@ -7708,14 +7703,15 @@ declare type TrafficAreaAnalyticsBaseParams = {
7708
7703
  */
7709
7704
  name?: string;
7710
7705
  /**
7711
- * Traffic metrics to include in the analysis.
7706
+ * Traffic metrics to include in the analysis, or `'all'` to include every metric.
7712
7707
  *
7713
7708
  * @remarks
7714
- * At least one data type must be provided.
7709
+ * At least one metric must be provided, or pass `'all'` as a shorthand for all five metrics.
7715
7710
  *
7716
- * @example ['SPEED', 'CONGESTION_LEVEL', 'FREE_FLOW_SPEED']
7711
+ * @example ['speed', 'congestionLevel', 'freeFlowSpeed']
7712
+ * @example 'all'
7717
7713
  */
7718
- dataTypes: AreaAnalyticsDataType[];
7714
+ metrics: AreaAnalyticsMetricKey[] | 'all';
7719
7715
  /**
7720
7716
  * Functional road classes to include in the analysis, or `'all'` to include every class.
7721
7717
  *
@@ -7816,7 +7812,7 @@ export declare type TrafficAreaAnalyticsDays = {
7816
7812
  * startDate: '2024-08-01',
7817
7813
  * functionalRoadClasses: ['MOTORWAY', 'MAJOR_ROAD', 'OTHER_MAJOR_ROAD', 'SECONDARY_ROAD', 'LOCAL_CONNECTING_ROAD', 'LOCAL_ROAD_HIGH_IMPORTANCE'],
7818
7814
  * hours: [7, 8, 9, 17, 18],
7819
- * dataTypes: ['SPEED', 'CONGESTION_LEVEL'],
7815
+ * metrics: ['speed', 'congestionLevel'],
7820
7816
  * geometry: {
7821
7817
  * type: 'Polygon',
7822
7818
  * coordinates: [[[4.896128, 52.382402], [4.875701, 52.368459], [4.923611, 52.36341], [4.896128, 52.382402]]]
@@ -7831,7 +7827,7 @@ export declare type TrafficAreaAnalyticsDays = {
7831
7827
  * days: ['2024-08-05', '2024-08-12', '2024-08-19', '2024-08-26'],
7832
7828
  * functionalRoadClasses: ['MOTORWAY', 'MAJOR_ROAD', 'OTHER_MAJOR_ROAD'],
7833
7829
  * hours: [8, 9, 17, 18],
7834
- * dataTypes: ['SPEED'],
7830
+ * metrics: ['speed'],
7835
7831
  * geometry: polygon
7836
7832
  * });
7837
7833
  * ```
@@ -1,2 +1,2 @@
1
- import{avoidableTypes as e,bboxFromCoordsArray as t,bboxFromGeoJSON as n,bboxOnlyIfWithArea as a,currentTypes as r,generateId as o,generateTomTomHeaders as i,getPosition as s,getPositionStrict as c,getRoutePlanningLocationType as p,iconToTrafficIncidentCategory as u,indexedMagnitudes as l,inputSectionTypes as d,inputSectionTypesWithGuidance as m,mergeFromGlobal as g,plugTypes as y,poiCategories as h,poiCategoriesToID as f,poiIDsToCategories as b,toPointGeometry as T,trafficIncidentCategories as R,trafficIncidentToIconCategory as S,views as v}from"@tomtom-org/maps-sdk/core";import{z as C}from"zod";import{isNil as P,omit as I}from"lodash-es";var x=/* @__PURE__ */function(e){return e[e.TOO_MANY_REQUESTS=429]="TOO_MANY_REQUESTS",e[e.FORBIDDEN=403]="FORBIDDEN",e}({}),w=class e extends Error{constructor(t,n,a){super(t),this.service=n,this.issues=a,Error.captureStackTrace&&Error.captureStackTrace(this,e)}},A={[x.TOO_MANY_REQUESTS]:"Too Many Requests: The API Key is over QPS (Queries per second)",[x.FORBIDDEN]:"Request failed with status code 403"},L=class extends w{constructor(e,t,n){super(e,t),this.status=n,this.status&&A[this.status]&&(this.message=A[this.status])}},D=(e,t)=>{const{data:n,message:a,status:r}=e;return new L(n?.error||n?.errorText||a,t,r)},M=(e,t,n)=>{if(e.status){const a=e;return n?n(a,t):D(a,t)}return new w(e.message,t)},E=(e,t)=>new w(e.message,t,e.issues),O=C.object({apiKey:C.string().optional(),commonBaseURL:C.string().optional(),customServiceBaseURL:C.string().optional(),language:C.string().optional()}),F=class extends Error{constructor(e){super(e.issues.map(e=>`${e.path.length>0?`${e.path.join(".")}: `:""}${e.message}`).join("; ")),this.issues=e.issues}},k=async(e,t,n)=>{const a=t.getAPIVersion?.(e),r=g({...e,...a&&{apiVersion:a}});if(void 0===e.validateRequest||e.validateRequest)try{((e,t)=>{const n=(t?.schema?O.extend(t.schema.shape):O).superRefine((e,n)=>{if("commonBaseURL"in e||"customServiceBaseURL"in e||n.addIssue({code:"custom",message:"commonBaseURL or customServiceBaseURL is required"}),t?.refinements?.length)for(const a of t.refinements)a.check(e)||n.addIssue({code:"custom",message:a.message})}).safeParse(e);if(!n.success)throw new F(n.error)})(r,t.requestValidation)}catch(c){throw E(c,n)}const o=t.buildRequest(r),s=i(r);e.onAPIRequest?.(o);try{const n=await t.sendRequest(o,s);return e.onAPIResponse?.(o,n),t.parseResponse(await n.data,r)}catch(c){throw e.onAPIResponse?.(o,c),M(c,n,t.parseResponseError)}},U=class e extends Error{constructor(t,n,a){super(n??`HTTP Error ${t}`),this.name="FetchError",this.status=t,this.data=a,Error.captureStackTrace&&Error.captureStackTrace(this,e)}},W=async e=>{if(e.ok)return{data:await e.json(),status:e.status};let t,n;const a=e.headers.get("content-type");throw e.bodyUsed?t=e.statusText:a?.includes("application/json")?(n=await e.json(),t=n?.errorText??n?.message??n?.detailedError?.message):a?.includes("text/xml")&&(n=await e.text(),t=e.statusText),new U(e.status,t,n)},j=async(e,t)=>W(await fetch(e,{headers:t})),B=async(e,t)=>W(await fetch(e.url,{method:"POST",body:JSON.stringify(e.data),headers:{...t,"Content-Type":"application/json"}})),q=async(e,t)=>{const n=e.method;if("GET"===n)return j(e.url,t);if("POST"===n)return B(e,t);throw new Error(`Unsupported HTTP method received: ${n}`)},H=C.array(C.array(C.number())),N=C.object({type:C.enum(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","Circle"]),coordinates:C.union([C.array(C.number()),H,C.array(C.array(C.array(C.number()))),C.array(C.array(C.array(C.array(C.number()))))]),radius:C.optional(C.number()),radiusMeters:C.optional(C.number()),bbox:C.optional(C.array(C.number()))}).check(C.refine(e=>"Circle"!==e.type||Boolean(e.radius),'type: "Circle" must have radius property')),K=C.object({type:C.literal("Feature"),geometry:N,id:C.optional(C.union([C.string(),C.number()])),properties:C.any(),bbox:C.optional(C.array(C.number()))}),V=C.object({type:C.literal("FeatureCollection"),features:C.array(K),id:C.optional(C.union([C.string(),C.number()])),properties:C.any(),bbox:C.optional(C.array(C.number()))}),$=C.union([C.tuple([C.number().min(-180).max(180),C.number().min(-90).max(90)]),C.tuple([C.number().min(-180).max(180),C.number().min(-90).max(90),C.number()]),C.object({type:C.literal("Point"),coordinates:C.array(C.number())}),K]),_=C.union([C.array(C.number()).refine(e=>4===e.length,{message:"BBox must have 4 elements"}),C.array(C.number()).refine(e=>6===e.length,{message:"BBox must have 6 elements"})]),G=C.union([N,K,V]),z=C.union([_,G,C.array(G)]),Y=C.object({query:C.string()}),Z=C.object({position:$.optional(),limit:C.number().max(100).optional(),radiusMeters:C.number().optional(),countries:C.array(C.string()).optional(),resultType:C.array(C.string()).optional()}),J=Y.extend(Z.shape),Q=(e,t)=>{e.append("apiVersion",String(t.apiVersion)),e.append("key",t.apiKey),t.language&&e.append("language",t.language)},X=(e,t,n)=>{for(const a of n||[])e.append(t,a)},ee=(e,t,n)=>{Array.isArray(n)&&n.length>0&&e.append(t,n.join(","))},te=(e,t,n)=>{!P(n)&&e.append(t,String(n))},ne=(e,t)=>{const n=s(t);n&&(e.append("lat",String(n[1])),e.append("lon",String(n[0])))},ae=(e,t)=>{const n=e.searchParams;Q(n,t),te(n,"limit",t.limit),ne(n,"position"in t?t.position:void 0),ee(n,"fuelSet",t.fuelTypes),ee(n,"idxSet",t.indexes),ee(n,"brandSet",t.poiBrands),t.poiCategories&&ee(n,"categorySet",t.poiCategories.map(e=>f[e])),ee(n,"connectorSet",t.connectors),ee(n,"mapcodes",t.mapcodes),ee(n,"extendedPostalCodesFor",t.extendedPostalCodesFor),te(n,"minPowerKW",t.minPowerKW),te(n,"maxPowerKW",t.maxPowerKW),te(n,"view",t.view),te(n,"openingHours",t.openingHours),te(n,"timeZone",t.timeZone),te(n,"relatedPois",t.relatedPois),ee(n,"entityTypeSet",t.geographyTypes)},re=e=>{const t=new URL(`${n=e,n.customServiceBaseURL||`${n.commonBaseURL}/maps/orbis/places/autocomplete/${n.query}.json`}`);var n;const a=t.searchParams;return e.language=e.language??"en-GB",Q(a,e),te(a,"limit",e.limit),ne(a,e.position),ee(a,"countrySet",e.countries),te(a,"radius",e.radiusMeters),ee(a,"resultSet",e.resultType),t},oe=e=>{const t=e.split(",");return[Number(t[1]),Number(t[0])]},ie=e=>`${e[1]},${e[0]}`,se=e=>{let t,n;return void 0!==e.topLeftPoint?(t=[e.topLeftPoint.lon,e.btmRightPoint.lat],n=[e.btmRightPoint.lon,e.topLeftPoint.lat]):(t=oe(e.southWest),n=oe(e.northEast)),[t[0],t[1],n[0],n[1]]},ce=e=>[e.lon,e.lat],pe=e=>{const{position:t,...n}=e.context.geoBias||{};return{context:{...e.context,geoBias:{...t&&{position:ce(t)},radiusMeters:n.radius}},results:(a=e.results,a.map(e=>({segments:e.segments.map(e=>{if((e=>"category"===e.type)(e)){const{id:t,...n}=e;return{...n,category:b[Number(t)]}}return e})})))};var a},ue={requestValidation:{schema:J},buildRequest:re,sendRequest:j,parseResponse:pe},le=async(e,t)=>k(e,{...ue,...t},"Autocomplete"),de=C.object({query:C.string().optional(),position:$.optional(),limit:C.number().max(100).optional(),extendedPostalCodesFor:C.array(C.string()).optional(),mapcodes:C.array(C.string()).optional(),view:C.enum(v).optional(),geographyTypes:C.array(C.string()).optional()}),me=C.object({indexes:C.array(C.string()).optional(),poiCategories:C.array(C.enum(h)).optional(),poiBrands:C.array(C.string()).optional(),connectors:C.array(C.string()).optional(),fuelTypes:C.array(C.string()).optional(),openingHours:C.string().optional(),timeZone:C.string().optional(),relatedPois:C.string().optional(),minPowerKW:C.number().optional(),maxPowerKW:C.number().optional(),minFuzzyLevel:C.number().optional(),maxFuzzyLevel:C.number().optional()}),ge=de.extend(me.shape),ye=C.object({type:C.literal("LineString"),coordinates:H}),he=C.object({type:C.literal("Feature"),geometry:ye}),fe=H,be=C.union([ye,he,fe]),Te=C.object({route:be,maxDetourTimeSeconds:C.number().int().positive()}),Re=C.object({sortBy:C.enum(["detourTime","detourOffset"]).optional()}),Se=ge.extend({...Te.shape,...Re.shape}),ve=e=>{const t=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/searchAlongRoute/${e.query??""}.json`)(e));ae(t,e);const n=t.searchParams;return n.append("maxDetourTime",String(e.maxDetourTimeSeconds)),te(n,"sortBy",e.sortBy),te(n,"spreadingMode","plan"),{url:t,data:{route:{points:(a=e.route,Array.isArray(a)?{type:"LineString",coordinates:a}:"Feature"===a.type?a.geometry:a).coordinates.map(e=>({lat:e[1],lon:e[0]}))}}};var a},Ce=e=>{const t={count:0,statusCounts:{}};for(const n of e)for(const e of n.chargingPoints)t.count++,t.statusCounts[e.status]=(t.statusCounts[e.status]||0)+1;return t},Pe=(e,t)=>e.type===t.type&&e.ratedPowerKW===t.ratedPowerKW,Ie=(e,t,n)=>{if(e)for(const a of e){const e=n.find(e=>Pe(a,e.connector));if(e){if(e.count++,t){const n=e.statusCounts;e.statusCounts[t]=(n[t]||0)+1}}else n.push({connector:a,count:1,statusCounts:t?{[t]:1}:{}})}},xe=e=>{const t=[];return((e,t)=>{if(e)for(const n of e){const e=t.find(e=>Pe(n,e.connector));e?e.count++:t.push({connector:n,count:1})}})(e,t),t},we=e=>{const t=[];for(const n of e)for(const e of n.chargingPoints)Ie(e.connectors,e.status,t);return t},Ae=e=>e<12?"slow":e<50?"regular":e<150?"fast":"ultra-fast",Le=e=>{const{year:t,month:n,day:a}=(e=>{const t=e.split("-");return{year:Number.parseInt(t[0]),month:Number.parseInt(t[1]),day:Number.parseInt(t[2])}})(e.date);return{dateYYYYMMDD:e.date,year:t,month:n,day:a,hour:e.hour,minute:e.minute,date:new Date(t,n-1,a,e.hour,e.minute)}},De=e=>1===e.length&&0===e[0].start.hour&&0===e[0].end.hour,Me=e=>{const t=e.timeRanges.map(e=>({start:Le(e.startTime),end:Le(e.endTime)}));return{mode:e.mode,timeRanges:t,alwaysOpenThisPeriod:De(t)}},Ee=e=>{const{position:t,entryPoints:n,poi:a,id:r,dist:o,boundingBox:i,chargingPark:s,...c}=e,p=s?.connectors?.map(e=>({...I(e,"connectorType"),type:e.connectorType,chargingSpeed:Ae(e.ratedPowerKW)}));return{type:"Feature",geometry:T(ce(t)),...i&&{bbox:se(i)},id:r,properties:{...I(c,"viewport"),...o&&{distance:o},...n?.length&&{entryPoints:n.map(e=>({...e,position:ce(e.position)}))},...p?.length&&{chargingPark:{...s,connectors:xe(p)}},...a&&{poi:{name:a.name,categories:(a.categorySet?.map(e=>b[e.id])??[]).filter(e=>!!e),localizedCategories:a.categories??[],...a.phone&&{phone:a.phone},...a.brands&&{brands:a.brands.map(e=>e.name)},...a.url&&{url:a.url},...a.openingHours&&{openingHours:Me(a.openingHours)},...a.timeZone&&{timeZone:a.timeZone}}}}}},Oe=e=>{const{geoBias:t,...n}=e;return{...t&&{geoBias:ce(t)},...n}},Fe=e=>{const t=e.results.map(Ee),r=a(n(t));return{type:"FeatureCollection",properties:{...Oe(e.summary)},features:t,...r&&{bbox:r}}},ke={requestValidation:{schema:Se},buildRequest:ve,sendRequest:B,parseResponse:Fe},Ue=async(e,t)=>k(e,{...ke,...t},"AlongRouteSearch"),We={alongRouteSearch:Ue,buildAlongRouteSearchRequest:ve,parseAlongRouteSearchResponse:Fe,alongRouteSearchTemplate:ke},je={autocompleteSearch:le,buildAutocompleteSearchRequest:re,parseAutocompleteSearchResponse:pe,autocompleteSearchTemplate:ue},Be=O.extend({id:C.string()}),qe=["fast","short","efficient","thrilling"],He=e=>{const t=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/ev/id`)(e)),n=t.searchParams;return Q(n,e),n.append("id",e.id),t},Ne=e=>{const t=e.results?.[0];return t?{id:t.id,accessType:t.accessType,chargingStations:(n=t.chargingStations,n.map(e=>({...e,chargingPoints:e.chargingPoints.map(e=>({...e,connectors:e.connectors?.map(e=>({...e,chargingSpeed:Ae(e.ratedPowerKW)}))}))}))),chargingPointAvailability:Ce(t.chargingStations),connectorAvailabilities:we(t.chargingStations),...t.openingHours&&{openingHours:Me(t.openingHours)}}:void 0;var n},Ke={requestValidation:{schema:Be},buildRequest:He,sendRequest:j,parseResponse:Ne,parseResponseError:(e,t)=>new L(e.data?.detailedError?.message??e.message,t,e.status)},Ve={buildEVChargingStationsAvailabilityRequest:He,parseEVChargingStationsAvailabilityResponse:Ne,evChargingStationsAvailabilityTemplate:Ke},$e=C.object({typeahead:C.boolean().optional(),offset:C.number().max(1900).optional(),radiusMeters:C.number().optional(),boundingBox:z.optional(),countries:C.array(C.string()).optional()}),_e=O.extend(de.shape).extend($e.shape).extend({query:C.string()}),Ge=e=>e?Array.isArray(e)?e.join(","):"string"==typeof e?e:String(e):"",ze=(e,t)=>{const n=e.length;if(n<=t)return e;const a=[];let r;const o=Math.ceil(n/t);for(r=0;r<n;r+=o)a.push(e[r]);return t>1&&r>=n-o&&(a.length<t?a.push(e[n-1]):a[a.length-1]=e[n-1]),a},Ye=e=>{const t=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/geocode`)(e)}/${e.query}.json`),a=t.searchParams;Q(a,e),e.typeahead&&a.append("typeahead",String(e.typeahead)),!P(e.limit)&&a.append("limit",String(e.limit)),!P(e.offset)&&a.append("ofs",String(e.offset)),ne(a,e.position),e.countries&&a.append("countrySet",Ge(e.countries)),!P(e.radiusMeters)&&a.append("radius",String(e.radiusMeters));const r=e.boundingBox&&n(e.boundingBox);return r&&(a.append("topLeft",Ge([r[3],r[0]])),a.append("btmRight",Ge([r[1],r[2]]))),e.extendedPostalCodesFor&&a.append("extendedPostalCodesFor",Ge(e.extendedPostalCodesFor)),e.mapcodes&&a.append("mapcodes",Ge(e.mapcodes)),e.view&&a.append("view",e.view),e.geographyTypes&&a.append("entityTypeSet",Ge(e.geographyTypes)),t},Ze=e=>{const{position:t,boundingBox:n,dist:a,entryPoints:r,addressRanges:o,entityType:i,id:s,...c}=e;return{type:"Feature",geometry:T(ce(t)),...n&&{bbox:se(n)},id:s,properties:{...I(c,"viewport"),...a&&{distance:a},...i&&{geographyType:i.split(",")},...r&&{entryPoints:r.map(e=>({...e,position:ce(e.position)}))},...o&&{addressRanges:{...o,from:ce(o.from),to:ce(o.to)}}}}},Je=e=>{const t=e.results.map(Ze),r=a(n(t));return{type:"FeatureCollection",features:t,...r&&{bbox:r}}},Qe={requestValidation:{schema:_e},buildRequest:Ye,sendRequest:j,parseResponse:Je},Xe={buildGeocodingRequest:Ye,parseGeocodingResponse:Je,geocodingTemplate:Qe},et=C.object({geometries:C.union([V,C.array(C.union([C.string(),K])).min(1).max(20)])}),tt=C.object({zoom:C.number().min(0).max(22).optional()}),nt=et.extend(tt.shape),at=e=>e.map(e=>e.properties.dataSources?.geometry?.id).filter(e=>e),rt=e=>{const t=new URL((e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/additionalData.json`)(e)),n=t.searchParams;return n.append("apiVersion",String(e.apiVersion)),n.append("key",e.apiKey),((e,t)=>{let n;n=Array.isArray(t)?"string"==typeof t[0]?t:at(t):at(t.features),e.append("geometries",Ge(n))})(n,e.geometries),te(n,"geometriesZoom",e.zoom),t},ot=e=>{const t=e.additionalData.flatMap(e=>e.geometryData?.features.map(e=>({...e,id:e.id??o(),bbox:n(e.geometry)}))).filter(e=>e);return{type:"FeatureCollection",bbox:n(t),features:t}},it={requestValidation:{schema:nt},buildRequest:rt,sendRequest:j,parseResponse:ot},st={buildGeometryDataRequest:rt,parseGeometryDataResponse:ot,geometryDataTemplate:it},ct=C.object({geometries:C.array(C.union([V,N]))}),pt=ge.extend(ct.shape),ut=e=>{switch(e.type){case"Circle":return[{type:"CIRCLE",radius:e.radius,position:ie(e.coordinates)}];case"Polygon":return[{type:"POLYGON",vertices:ze(e.coordinates[0],50).map(e=>ie(e))}];case"MultiPolygon":return e.coordinates.length>50?(e=>{let n=/* @__PURE__ */new Map;return e.coordinates.forEach(e=>{const a=t(e[0]);if(a){const t=Math.abs((a[2]-a[0])*(a[3]-a[1]));n.set(e,t)}}),n=new Map([...n.entries()].sort((e,t)=>t[1]-e[1]).splice(0,50)),[...n.keys()]})(e).flatMap(e=>ut({type:"Polygon",coordinates:e})):e.coordinates.flatMap(e=>ut({type:"Polygon",coordinates:e}));case"FeatureCollection":return e.features.flatMap(e=>ut(e.geometry));default:throw new Error(`Type ${e.type} is not supported`)}},lt=e=>{const t=new URL(`${n=e,n.customServiceBaseURL??`${n.commonBaseURL}/maps/orbis/places/geometrySearch/${n.query??""}.json`}`);var n;return ae(t,e),{url:t,data:{geometryList:e.geometries.flatMap(ut)}}},dt=e=>{const t=e.results.map(Ee),r=a(n(t));return{type:"FeatureCollection",properties:{...Oe(e.summary)},features:t,...r&&{bbox:r}}},mt={requestValidation:{schema:pt},buildRequest:lt,sendRequest:B,parseResponse:dt},gt=async(e,t)=>k(e,{...mt,...t},"GeometrySearch"),yt={geometrySearch:gt,buildGeometrySearchRequest:lt,parseGeometrySearchResponse:dt,geometrySearchTemplate:mt},ht=C.object({entityId:C.string()}),ft=C.object({mapcodes:C.array(C.string()).optional(),view:C.enum(v).optional(),openingHours:C.string().optional(),timeZone:C.string().optional(),relatedPois:C.string().optional()}),bt=ht.extend(ft.shape),Tt=e=>{const t=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/place.json`)(e)}`),n=t.searchParams;return Q(n,e),te(n,"entityId",e.entityId),ee(n,"mapcodes",e.mapcodes),te(n,"view",e.view),te(n,"openingHours",e.openingHours),te(n,"timeZone",e.timeZone),te(n,"relatedPois",e.relatedPois),t},Rt=e=>e.results?.length?Ee(e.results[0]):void 0,St={requestValidation:{schema:bt},buildRequest:Tt,sendRequest:j,parseResponse:Rt},vt={buildPlaceByIdRequest:Tt,parsePlaceByIdResponse:Rt,placeByIdTemplate:St},Ct=(e,t)=>{const{data:n,message:a,status:r}=e;return new L(n?.error?.description??n?.detailedError?.message??a,t,r)},Pt=C.number().positive(),It=C.number().min(0),xt=C.number().min(0).max(100),wt=Pt.optional(),At=It.optional(),Lt=C.number().min(0).max(1).optional(),Dt=C.object({speedKMH:C.number(),consumptionUnitsPer100KM:C.number()}),Mt={efficiency:C.object({acceleration:Lt,deceleration:Lt,uphill:Lt,downhill:Lt}).optional()},Et=C.array(Dt).min(1).max(25),Ot=C.object({...Mt,speedsToConsumptionsLiters:Et,auxiliaryPowerInLitersPerHour:At,fuelEnergyDensityInMJoulesPerLiter:C.number().min(1).optional()}),Ft=C.object({...Mt,speedsToConsumptionsKWH:Et,auxiliaryPowerInkW:At,consumptionInKWHPerKMAltitudeGain:C.number().max(500).optional(),recuperationInKWHPerKMAltitudeLoss:At}),kt=C.object({currentType:C.enum(r),plugTypes:C.array(C.enum(y)).min(1),efficiency:Lt,baseLoadInkW:At,maxPowerInkW:At,maxVoltageInV:At,maxCurrentInA:At,voltageRange:C.object({minVoltageInV:At,maxVoltageInV:C.number().optional()}).optional()}),Ut=C.object({stateOfChargeInkWh:It,maxPowerInkW:Pt}),Wt=C.object({maxChargeKWH:Pt,batteryCurve:C.array(Ut).max(20).optional(),chargingConnectors:C.array(kt).min(1).optional(),chargingTimeOffsetInSec:At}),jt=C.object({consumption:Ot}),Bt=C.object({consumption:Ft,charging:Wt.optional()}),qt=C.object({lengthMeters:wt,widthMeters:wt,heightMeters:wt,weightKG:wt,axleWeightKG:wt}).optional(),Ht=C.object({variantId:C.string()}),Nt=C.object({dimensions:qt,engine:C.union([jt,Bt]).optional()}),Kt=C.union([Ht,Nt]).optional(),Vt=C.object({heading:C.number().min(0).max(360).optional()}),$t=Vt.extend({currentFuelInLiters:It}),_t=Vt.extend({currentChargePCT:xt}),Gt=Vt.extend({currentChargeInkWh:It}),zt=C.union([_t,Gt]),Yt=C.object({minChargeAtDestinationPCT:xt,minChargeAtChargingStopsPCT:C.number().min(0).max(50)}),Zt=C.object({minChargeAtDestinationInkWh:It,minChargeAtChargingStopsInkWh:It}),Jt=C.union([Yt,Zt]),Qt=C.object({chargingPreferences:Jt.optional()}),Xt={model:Kt,restrictions:C.object({loadTypes:C.array(C.enum(["USHazmatClass1","USHazmatClass2","USHazmatClass3","USHazmatClass4","USHazmatClass5","USHazmatClass6","USHazmatClass7","USHazmatClass8","USHazmatClass9","otherHazmatExplosive","otherHazmatGeneral","otherHazmatHarmfulToWater"])).optional(),maxSpeedKMH:C.number().min(0).max(250).optional(),adrCode:C.enum(["B","C","D","E"]).optional(),commercial:C.boolean().optional()}).optional()},en=C.object({...Xt,engineType:C.undefined(),state:Vt.optional(),preferences:C.object({}).optional()}),tn=C.object({...Xt,engineType:C.literal("combustion"),state:$t.optional(),preferences:C.object({}).optional()}),nn=C.object({...Xt,engineType:C.literal("electric"),state:zt.optional(),preferences:Qt.optional()}),an=C.union([C.discriminatedUnion("engineType",[tn,nn]),en]),rn=C.object({costModel:C.object({avoid:C.array(C.enum(e)).optional(),traffic:C.enum(["live","historical"]).optional(),routeType:C.enum(qe).optional(),avoidAreas:C.array(z).max(10).optional(),thrillingParams:C.object({hilliness:C.enum(["low","normal","high"]).optional(),windingness:C.enum(["low","normal","high"]).optional()}).optional()}).optional(),travelMode:C.string().optional(),vehicle:an.optional(),when:C.object({option:C.enum(["departAt","arriveBy"]),date:C.date()}).optional()}),on=["timeMinutes","remainingChargeCPT","spentChargePCT","spentFuelLiters","distanceKM"],sn=C.object({origin:$,budget:C.object({type:C.enum(on),value:C.number().min(0)})}),cn=C.object({maxFerryLengthMeters:C.number().min(0).optional(),smoothing:C.enum(["none","weak","strong"]).optional()}),pn=rn.extend(sn.extend(cn.shape).shape),un=e=>e.map(e=>`${e.speedKMH},${e.consumptionUnitsPer100KM}`).join(":"),ln=(e,t,n)=>{((e,t)=>{t&&(!P(t.acceleration)&&e.append("accelerationEfficiency",String(t.acceleration)),!P(t.deceleration)&&e.append("decelerationEfficiency",String(t.deceleration)),!P(t.uphill)&&e.append("uphillEfficiency",String(t.uphill)),!P(t.downhill)&&e.append("downhillEfficiency",String(t.downhill)))})(e,n.consumption.efficiency),"electric"===t?(((e,t)=>{t.speedsToConsumptionsKWH&&e.append("constantSpeedConsumptionInkWhPerHundredkm",un(t.speedsToConsumptionsKWH)),!P(t.auxiliaryPowerInkW)&&e.append("auxiliaryPowerInkW",String(t.auxiliaryPowerInkW)),!P(t.consumptionInKWHPerKMAltitudeGain)&&e.append("consumptionInkWhPerkmAltitudeGain",String(t.consumptionInKWHPerKMAltitudeGain)),!P(t.recuperationInKWHPerKMAltitudeLoss)&&e.append("recuperationInkWhPerkmAltitudeLoss",String(t.recuperationInKWHPerKMAltitudeLoss))})(e,n.consumption),((e,t)=>{const n=t.charging;n?.maxChargeKWH&&e.append("maxChargeInkWh",String(n.maxChargeKWH))})(e,n)):((e,t)=>{const n=t.consumption;n.speedsToConsumptionsLiters&&e.append("constantSpeedConsumptionInLitersPerHundredkm",un(n.speedsToConsumptionsLiters)),!P(n.auxiliaryPowerInLitersPerHour)&&e.append("auxiliaryPowerInLitersPerHour",String(n.auxiliaryPowerInLitersPerHour)),!P(n.fuelEnergyDensityInMJoulesPerLiter)&&e.append("fuelEnergyDensityInMJoulesPerLiter",String(n.fuelEnergyDensityInMJoulesPerLiter))})(e,n)},dn=(e,t)=>{t.model&&("variantId"in t.model?e.append("vehicleModelId",t.model.variantId):(((e,t)=>{t&&(t.lengthMeters&&e.append("vehicleLength",String(t.lengthMeters)),t.heightMeters&&e.append("vehicleHeight",String(t.heightMeters)),t.widthMeters&&e.append("vehicleWidth",String(t.widthMeters)),t.weightKG&&e.append("vehicleWeight",String(t.weightKG)),t.axleWeightKG&&e.append("vehicleAxleWeight",String(t.axleWeightKG)))})(e,t.model.dimensions),t.model.engine&&ln(e,"engineType"in t?t.engineType:void 0,t.model.engine)))},mn=(e,t)=>{t&&("electric"===t.engineType&&e.append("vehicleEngineType","electric"),dn(e,t),((e,t)=>{if(t.state&&(t.state.heading&&e.append("vehicleHeading",String(t.state.heading)),"engineType"in t))if("combustion"===t.engineType){const n=t.state;n.currentFuelInLiters&&e.append("currentFuelInLiters",String(n.currentFuelInLiters))}else if("electric"===t.engineType){const n=t.state,a=n,r=n;if(a.currentChargeInkWh)e.append("currentChargeInkWh",String(a.currentChargeInkWh));else if(r.currentChargePCT&&t.model&&"engine"in t.model&&t.model.engine){const n=t.model.engine.charging?.maxChargeKWH;n&&e.append("currentChargeInkWh",String(n*r.currentChargePCT/100))}}})(e,t),((e,t)=>{if(t.preferences&&"engineType"in t&&"electric"===t.engineType){const n=t.preferences;if(n.chargingPreferences){const a=n.chargingPreferences,r=a,o=a;if(r.minChargeAtChargingStopsInkWh||r.minChargeAtDestinationInkWh)e.append("minChargeAtDestinationInkWh",String(r.minChargeAtDestinationInkWh)),e.append("minChargeAtChargingStopsInkWh",String(r.minChargeAtChargingStopsInkWh));else if((o.minChargeAtChargingStopsPCT||o.minChargeAtDestinationPCT)&&t.model&&"engine"in t.model&&t.model.engine){const n=t.model.engine.charging?.maxChargeKWH;n&&(e.append("minChargeAtDestinationInkWh",String(n*o.minChargeAtDestinationPCT/100)),e.append("minChargeAtChargingStopsInkWh",String(n*o.minChargeAtChargingStopsPCT/100)))}}}})(e,t),((e,t)=>{const n=t.restrictions;n&&(X(e,"vehicleLoadType",n.loadTypes),n.adrCode&&e.append("vehicleAdrTunnelRestrictionCode",n.adrCode),n.commercial&&e.append("vehicleCommercial",String(n.commercial)),n.maxSpeedKMH&&e.append("vehicleMaxSpeed",String(n.maxSpeedKMH)))})(e,t))},gn=(e,t)=>{const n=t.costModel;X(e,"avoid",n?.avoid),te(e,"traffic",n?.traffic),((e,t)=>{if(t?.date){const n=t.date.toISOString();"departAt"===t.option?e.append("departAt",n):"arriveBy"===t.option&&e.append("arriveAt",n)}})(e,t.when),te(e,"routeType",n?.routeType),te(e,"travelMode",t.travelMode),mn(e,t.vehicle)},yn=e=>{const t=e.vehicle;if(t?.model&&"engine"in t.model)return t.model.engine?.charging?.maxChargeKWH},hn=(e,t)=>{const n=t.budget;switch(n.type){case"timeMinutes":e.append("timeBudgetInSec",(60*n.value).toString());break;case"distanceKM":e.append("distanceBudgetInMeters",(1e3*n.value).toString());break;case"spentFuelLiters":e.append("fuelBudgetInLiters",n.value.toString());break;case"spentChargePCT":{const a=yn(t);null!=a&&e.append("energyBudgetInkWh",(a*n.value/100).toString());break}case"remainingChargeCPT":{const a=(e=>{const t=e.vehicle;if(!t?.state)return;const n=t.state;if(null!=n.currentChargePCT){const t=yn(e);if(null!=t)return t*n.currentChargePCT/100}})(t),r=yn(t);if(null!=r&&null!=a){const t=r*n.value/100;e.append("energyBudgetInkWh",Math.max(0,a-t).toString())}break}default:e.append(n.type,n.value.toString())}},fn=e=>{const t=(e=>{const t=c(e.origin);return`${t[1]},${t[0]}`})(e),n=new URL(((e,t)=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/routing/calculateReachableRange/${t}/json`)(e,t)),a=n.searchParams;return Q(a,e),a.delete("language"),gn(a,e),hn(a,e),te(a,"maxFerryLengthInMeters",e.maxFerryLengthMeters),te(a,"smoothing",e.smoothing??"strong"),{method:"GET",url:n}},bn=(e,t)=>{const a={type:"Polygon",coordinates:[e.reachableRange.boundary.map(e=>[e.longitude,e.latitude])]};return{type:"Feature",geometry:a,bbox:n(a),properties:t}},Tn={requestValidation:{schema:pn},buildRequest:fn,sendRequest:q,parseResponse:bn,parseResponseError:Ct,getAPIVersion:()=>2},Rn={buildReachableRangeRequest:fn,parseReachableRangeResponse:bn,reachableRangeTemplate:Tn},Sn=e=>{const t=c(e.position),n=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/reverseGeocode`)(e)}/${t[1]},${t[0]}.json`),a=n.searchParams;return Q(a,e),e.allowFreeformNewline&&a.append("allowFreeformNewline",String(e.allowFreeformNewline)),e.geographyType&&a.append("entityType",Ge(e.geographyType)),!P(e.heading)&&a.append("heading",String(e.heading)),e.mapcodes&&a.append("mapcodes",Ge(e.mapcodes)),e.number&&a.append("number",e.number),!P(e.radiusMeters)&&a.append("radius",String(e.radiusMeters)),e.returnSpeedLimit&&a.append("returnSpeedLimit",String(e.returnSpeedLimit)),e.returnRoadUse&&a.append("returnRoadUse",String(e.returnRoadUse)),e.roadUses&&a.append("roadUse",JSON.stringify(e.roadUses)),n},vn=(e,t)=>{const n=e.addresses[0],{boundingBox:a,sideOfStreet:r,offsetPosition:i,...s}=n?.address||{};return{type:"Feature",geometry:T(c(t.position)),...a&&{bbox:se(a)},id:o(),...n&&{properties:{type:n?.entityType?"Geography":s.streetNumber?"Point Address":"Street",address:s,...n.dataSources&&{dataSources:n.dataSources},...n.mapcodes&&{mapcodes:n.mapcodes},...r&&{sideOfStreet:r},...i&&{offsetPosition:oe(i)},originalPosition:oe(n.position)}}}},Cn=C.object({position:$}),Pn=C.object({allowFreeformNewline:C.boolean().optional(),geographyType:C.array(C.string()).optional(),heading:C.number().min(-360).max(360).optional(),mapcodes:C.array(C.string()).optional(),number:C.string().optional(),radiusMeters:C.number().optional(),returnMatchType:C.boolean().optional(),returnRoadUse:C.boolean().optional(),returnSpeedLimit:C.boolean().optional(),roadUses:C.array(C.string()).optional(),view:C.enum(v).optional()}),In={requestValidation:{schema:Cn.extend(Pn.shape)},buildRequest:Sn,sendRequest:j,parseResponse:vn},xn={buildRevGeoRequest:Sn,parseRevGeoResponse:vn,reverseGeocodingTemplate:In},wn=C.union([$,N]),An=C.union([H,K]),Ln=C.object({locations:C.array(C.union([wn,An])).min(1)}),Dn=C.object({computeAdditionalTravelTimeFor:C.enum(["none","all"]).optional(),vehicleHeading:C.number().min(0).max(359.5).optional(),maxAlternatives:C.number().min(0).max(5).optional(),sectionTypes:C.array(C.enum(m)).optional()}),Mn=rn.extend(Ln.extend(Dn.shape).shape),En=e=>(e.vehicle?.preferences)?.chargingPreferences,On=e=>Array.isArray(e)?e:e.geometry.coordinates,Fn=(e,t,n)=>((e,t)=>e.map(e=>{const n=ie(c(e,{useEntryPoint:t})),a=(e=>e.properties||null)(e)?.radiusMeters;return a?`circle(${n},${a})`:n}).join(":"))(t.includes("path")?((e,t,n)=>{let a;const r=e[0];a="path"===t[0]?On(r)[0]:c(r,{useEntryPoint:n});const o=e[e.length-1];let i;if("path"===t[t.length-1]){const e=On(o);i=e[e.length-1]}else i=c(o,{useEntryPoint:n});return[a,i]})(e,t,n):e,n),kn=e=>({latitude:e[1],longitude:e[0]}),Un=(e,t,n)=>{const a=[],r=[];return e.forEach((o,i)=>{"path"===t[i]?((e,t,n,a,r)=>{const o=a.length;for(const i of On(e))a.push(kn(i));Array.isArray(e)||(e.properties.sections.leg.forEach((e,n)=>{(t>0||n>0)&&r.push({supportingPointIndex:o+e.startPointIndex,waypointSourceType:"USER_DEFINED"})}),t<n.length-1&&r.push({supportingPointIndex:o+e.geometry.coordinates.length-1,waypointSourceType:"USER_DEFINED"}))})(o,i,e,a,r):((e,t,n,a,r,o)=>{a.push(kn(c(e,{useEntryPoint:o}))),t>0&&t<n.length-1&&r.push({supportingPointIndex:a.length-1,waypointSourceType:"USER_DEFINED"})})(o,i,e,a,r,n)}),{supportingPoints:a,...r.length&&{pointWaypoints:r}}},Wn=e=>({rectangles:e.map(e=>{const t=n(e);if(!t)throw new Error("Could not derive a bounding box from an avoidAreas rectangle");const[a,r,o,i]=t;return{southWestCorner:{latitude:r,longitude:a},northEastCorner:{latitude:i,longitude:o}}})}),jn=e=>{const t=e.locations.map(p),n=e.useEntryPoints??"main-when-available",a=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/routing/${En(e)?"calculateLongDistanceEVRoute":"calculateRoute"}`)(e)}/${Fn(e.locations,t,n)}/json`),r=a.searchParams;Q(r,e),"language"in e||r.append("language","en-GB"),gn(r,e),te(r,"computeTravelTimeFor",e.computeAdditionalTravelTimeFor),((e,t)=>{if(t?.guidance){const n=t.guidance;e.append("instructionsType",n.type),e.append("guidanceVersion",String(n.version??2)),e.append("instructionPhonetics",n.phonetics??"IPA"),e.append("language",t.language??"en-US")}})(r,e),!P(e.maxAlternatives)&&r.append("maxAlternatives",String(e.maxAlternatives)),((e,t,n)=>{X(e,"sectionType",(t??(n?m:d)).map(e=>"vehicleRestricted"===e?"travelMode":e))})(r,e.sectionTypes,!!e.guidance?.type);for(const i of e.extendedRouteRepresentations??["distance","travelTime"])r.append("extendedRouteRepresentation",i);const o=((e,t,n)=>{const a=t.includes("path"),r=!!En(e),o=e.costModel?.avoidAreas;if(!a&&!r&&!o)return null;const i=(e.vehicle?.model)?.engine?.charging;return{...a&&Un(e.locations,t,n),...r&&i&&{chargingParameters:I(i,"maxChargeKWH")},...o?.length&&{avoidAreas:Wn(o)}}})(e,t,n);return o?{method:"POST",url:a,data:o}:{method:"GET",url:a}},Bn=e=>{switch(e){case"Direct_Current":return"DC";case"Alternating_Current_1_Phase":return"AC1";case"Alternating_Current_3_Phase":return"AC3";default:return}},qn=(e,t)=>{const n=e.chargingConnectionInfo,a=e.chargingParkLocation,r=[a.coordinate.longitude,a.coordinate.latitude],o=[a.street,a.houseNumber].filter(Boolean),i=o.length>0?o.join(", "):"";return{type:"Feature",id:e.chargingParkId,geometry:{type:"Point",coordinates:r},properties:{...I(e,["chargingConnectionInfo","chargingParkLocation"]),type:"POI",address:{freeformAddress:i,...a.street&&{streetName:a.street},...a.houseNumber&&{streetNumber:a.houseNumber},...a.city&&{municipality:a.city},...a.region&&{countrySubdivision:a.region},...a.postalCode&&{postalCode:a.postalCode},...a.country&&{country:a.country}},...n&&{chargingConnectionInfo:{plugType:n.chargingPlugType,currentInA:n.chargingCurrentInA,voltageInV:n.chargingVoltageInV,chargingPowerInkW:n.chargingPowerInkW,currentType:Bn(n.chargingCurrentType),chargingSpeed:Ae(n.chargingPowerInkW)}},...t&&{targetChargeInPCT:100*e.targetChargeInkWh/t},...e.chargingParkPowerInkW&&{chargingParkSpeed:Ae(e.chargingParkPowerInkW)}}}},Hn=(e,t)=>{const n=(t?.vehicle?.model)?.engine?.charging?.maxChargeKWH;return{lengthInMeters:e.lengthInMeters,historicTrafficTravelTimeInSeconds:e.historicTrafficTravelTimeInSeconds,liveTrafficIncidentsTravelTimeInSeconds:e.liveTrafficIncidentsTravelTimeInSeconds,noTrafficTravelTimeInSeconds:e.noTrafficTravelTimeInSeconds,trafficDelayInSeconds:e.trafficDelayInSeconds,trafficLengthInMeters:e.trafficLengthInMeters,travelTimeInSeconds:e.travelTimeInSeconds,departureTime:new Date(e.departureTime),arrivalTime:new Date(e.arrivalTime),deviationDistanceInMeters:e.deviationDistance,fuelConsumptionInLiters:e.fuelConsumptionInLiters,...e.deviationPoint&&{deviationPoint:[e.deviationPoint.longitude,e.deviationPoint.latitude]},totalChargingTimeInSeconds:e.totalChargingTimeInSeconds,batteryConsumptionInkWh:e.batteryConsumptionInkWh,...n&&e.batteryConsumptionInkWh&&{batteryConsumptionInPCT:100*e.batteryConsumptionInkWh/n},remainingChargeAtArrivalInkWh:e.remainingChargeAtArrivalInkWh,...n&&e.remainingChargeAtArrivalInkWh&&{remainingChargeAtArrivalInPCT:100*e.remainingChargeAtArrivalInkWh/n},...e.chargingInformationAtEndOfLeg&&{chargingInformationAtEndOfLeg:qn(e.chargingInformationAtEndOfLeg,n)}}},Nn=(e,t)=>e.reduce((e,n,a)=>{const r=0===a?0:e[a-1]?.endPointIndex;let i;return P(r)||(i=0===r?n.points?.length>0?n.points.length-1:0:r+n.points?.length),e.push({...!P(r)&&{startPointIndex:r},...i&&{endPointIndex:i},summary:Hn(n.summary,t),id:o()}),e},[]),Kn=e=>({id:o(),startPointIndex:e.startPointIndex,endPointIndex:e.endPointIndex}),Vn=e=>({...Kn(e),index:e.importantRoadStretchIndex,streetName:e.streetName?.text,roadNumbers:e.roadNumbers?.map(e=>e.text)}),$n=e=>({...Kn(e),countryCodeISO3:e.countryCode}),_n=e=>"other"===e.travelMode?Kn(e):null,Gn=e=>{if(e.tec?.causes?.length)return e.tec.causes.map(e=>(e=>{switch(e){case 1:return"jam";case 2:return"accident";case 3:return"roadworks";case 4:return"narrow-lanes";case 5:return"road-closed";case 9:return"danger";case 11:return"animals-on-road";case 13:return"broken-down-vehicle";case 16:return"lane-closed";case 17:return"wind";case 18:return"fog";case 19:return"rain";case 22:return"frost";case 23:return"flooding";default:return"other"}})(e.mainCauseCode));switch(e.simpleCategory){case"JAM":return["jam"];case"ROAD_WORK":return["roadworks"];case"ROAD_CLOSURE":return["road-closed"];default:return["other"]}},zn=e=>({...Kn(e),delayInSeconds:e.delayInSeconds,effectiveSpeedInKmh:e.effectiveSpeedInKmh,categories:Gn(e),magnitudeOfDelay:l[e.magnitudeOfDelay],tec:e.tec}),Yn=e=>({...Kn(e),lanes:e.lanes,laneSeparators:e.laneSeparators,properties:e.properties}),Zn=e=>({...Kn(e),maxSpeedLimitInKmh:e.maxSpeedLimitInKmh}),Jn=e=>({...Kn(e),roadShieldReferences:e.roadShieldReferences}),Qn=(e,t)=>(t[e]||(t[e]=[]),t[e]),Xn=e=>{switch(e.sectionType){case"CAR_TRAIN":return{sectionType:"carTrain",mappingFunction:Kn};case"COUNTRY":return{sectionType:"country",mappingFunction:$n};case"FERRY":return{sectionType:"ferry",mappingFunction:Kn};case"MOTORWAY":return{sectionType:"motorway",mappingFunction:Kn};case"PEDESTRIAN":return{sectionType:"pedestrian",mappingFunction:Kn};case"TOLL_VIGNETTE":return{sectionType:"tollVignette",mappingFunction:$n};case"TOLL":return{sectionType:"toll",mappingFunction:Kn};case"TRAFFIC":return{sectionType:"traffic",mappingFunction:zn};case"TRAVEL_MODE":return{sectionType:"vehicleRestricted",mappingFunction:_n};case"TUNNEL":return{sectionType:"tunnel",mappingFunction:Kn};case"UNPAVED":return{sectionType:"unpaved",mappingFunction:Kn};case"URBAN":return{sectionType:"urban",mappingFunction:Kn};case"CARPOOL":return{sectionType:"carpool",mappingFunction:Kn};case"LOW_EMISSION_ZONE":return{sectionType:"lowEmissionZone",mappingFunction:Kn};case"LANES":return{sectionType:"lanes",mappingFunction:Yn};case"SPEED_LIMIT":return{sectionType:"speedLimit",mappingFunction:Zn};case"ROAD_SHIELDS":return{sectionType:"roadShields",mappingFunction:Jn};case"IMPORTANT_ROAD_STRETCH":return{sectionType:"importantRoadStretch",mappingFunction:Vn}}},ea=(e,t)=>{const n={leg:Nn(e.legs,t)};return((e,t)=>{if(Array.isArray(e))for(const n of e){const e=Xn(n),a=e?.mappingFunction(n);a&&Qn(e.sectionType,t).push(a)}})(e.sections,n),n},ta=1e-4,na=(e,t)=>Math.abs(e[0]-t[0])<ta&&Math.abs(e[1]-t[1])<ta,aa=(e,t)=>{const n=[];let a=0;for(const r of e.instructions){const e=[r.maneuverPoint.longitude,r.maneuverPoint.latitude];for(let n=a;n<t.length;n++){if(na(t[n],e)){a=n;break}if(n===t.length-1)break}n.push({...r,maneuverPoint:e,pathPointIndex:a,routePath:r.routePath.map(e=>({...e,point:[e.point.longitude,e.point.latitude]}))})}return{instructions:n}},ra=(e,t)=>{const a=e.routes.map((e,a)=>((e,t,a)=>{const r={type:"LineString",coordinates:e.legs.flatMap(e=>e.points?.map(e=>[e.longitude,e.latitude]))};return{type:"Feature",geometry:r,id:o(),bbox:n(r),properties:{index:t,summary:Hn(e.summary,a),sections:ea(e,a),...e.guidance&&{guidance:aa(e.guidance,r.coordinates)},...e.progress&&{progress:e.progress}}}})(e,a,t)),r=n(a);return{type:"FeatureCollection",...r&&{bbox:r},features:a}},oa={requestValidation:{schema:Mn,refinements:[{check:e=>!!e.locations.map(p).includes("path")||e.locations.length>=2,message:"When passing waypoints only: at least 2 must be defined. If passing also paths, at least one path must be defined"}]},buildRequest:jn,sendRequest:q,parseResponse:ra,parseResponseError:Ct,getAPIVersion:()=>2},ia={buildCalculateRouteRequest:jn,parseCalculateRouteResponse:ra,calculateRouteTemplate:oa},sa=["MOTORWAY","MAJOR_ROAD","OTHER_MAJOR_ROAD","SECONDARY_ROAD","LOCAL_CONNECTING_ROAD","LOCAL_ROAD_HIGH_IMPORTANCE","LOCAL_ROAD","LOCAL_ROAD_MINOR_IMPORTANCE","OTHER_ROAD"],ca=e=>e instanceof Date?e.toISOString().slice(0,10):e,pa=Array.from({length:24},(e,t)=>t),ua=e=>sa.indexOf(e),la=e=>{const t=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/areaanalytics/reports/lite`)(e));Q(t.searchParams,e);const n=e=>{const t=/* @__PURE__ */new Date;return t.setDate(t.getDate()-e),t},a=Array.isArray(e.days)?{days:e.days.map(ca)}:{startDate:ca(e.startDate??n(3)),endDate:ca(e.endDate??n(2))};return{method:"POST",url:t,data:{name:e.name??`Maps SDK JS Area Analytics Report ${/* @__PURE__ */(new Date).toISOString()}`,...a,dataTypes:e.dataTypes,frcs:"all"===e.functionalRoadClasses?sa.map((e,t)=>t):e.functionalRoadClasses.map(ua),hours:"all"===e.hours?pa:e.hours,features:[{type:"Feature",geometry:e.geometry}]}}},da=e=>({...void 0!==e.v&&{speed:e.v},...void 0!==e.fv&&{freeFlowSpeed:e.fv},...void 0!==e.c&&{congestionLevel:e.c},...void 0!==e.t&&{travelTime:e.t},...void 0!==e.l&&{networkLength:e.l}}),ma=e=>({...void 0!==e.date&&{date:new Date(e.date)},...void 0!==e.year&&{year:e.year},...void 0!==e.month&&{month:e.month},...void 0!==e.week&&{week:e.week},...void 0!==e.hour&&{hour:e.hour},...void 0!==e.day&&{day:e.day},...da(e)}),ga=(e,t)=>{const n=new Date(e);return n.setDate(n.getDate()+t),n},ya=(e,t)=>e.map((e,n)=>{const a=ma(e);return void 0===a.date&&(a.date=ga(t,Math.floor(n/24))),void 0===a.hour&&(a.hour=n%24),a}),ha=(e,t)=>e.map((e,n)=>{const a=ma(e);return void 0===a.date&&(a.date=ga(t,n)),a}),fa=e=>({tileCentre:[e.lon,e.lat],...da(e)}),ba=e=>({startDate:new Date(e.startDate),endDate:new Date(e.endDate),labels:e.labels}),Ta=(e,t)=>{return{...e.yearly&&{yearly:e.yearly.map(ma)},...e.monthly&&{monthly:e.monthly.map(ma)},...e.weekly&&{weekly:e.weekly.map(ma)},...e.daily&&{daily:ha(e.daily,t)},...e.hourly&&{hourly:ya(e.hourly,t)},...e.average&&{average:(n=e.average,n.map((e,t)=>{const n=ma(e);return void 0===n.day&&(n.day=Math.floor(t/24)+1),void 0===n.hour&&(n.hour=t%24),n}))}};var n},Ra=e=>{const t={};for(const[n,a]of Object.entries(e))t[n]=a.map(ba);return t},Sa=(e,t)=>({name:e.name,timezone:e.timezone,level:e.level,baseData:da(e.baseData),timedData:Ta(e.timedData,t),...e.tiledData&&{tiledData:{tiles:e.tiledData.tiles.map(fa)}},...e.anomalies&&{anomalies:Ra(e.anomalies)}}),va=e=>{const t=new Date(e.properties.startDate);return{type:"FeatureCollection",properties:{startDate:t,endDate:new Date(e.properties.endDate),dataTypes:e.properties.dataTypes,heatmap:e.properties.heatmap,frcs:e.properties.frcs},features:e.features.map(e=>((e,t)=>({type:e.type,id:e.id,geometry:e.geometry,properties:Sa(e.properties,t)}))(e,t))}},Ca=C.union([C.date(),C.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Date must be in 'YYYY-MM-DD' format")]),Pa=C.union([C.object({type:C.literal("Polygon"),coordinates:C.array(C.array(C.array(C.number()))).min(1)}),C.object({type:C.literal("MultiPolygon"),coordinates:C.array(C.array(C.array(C.array(C.number())))).min(1)})]),Ia=e=>e instanceof Date?e:new Date(e),xa=e=>{const t=/* @__PURE__ */new Date,n=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate());return(e=>{const t=Ia(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())})(e)<=n-1728e5},wa={requestValidation:{schema:O.extend({name:C.string().optional(),startDate:Ca.optional(),endDate:Ca.optional(),days:C.array(Ca).min(1).optional(),dataTypes:C.array(C.enum(["NETWORK_LENGTH","CONGESTION_LEVEL","FREE_FLOW_SPEED","TRAVEL_TIME","SPEED"])).min(1),functionalRoadClasses:C.union([C.array(C.enum([...sa])).min(1),C.literal("all")]),hours:C.union([C.array(C.number().int().min(0).max(23)).min(1),C.literal("all")]),geometry:Pa}).refine(e=>{const t=void 0!==e.days,n=void 0!==e.startDate;if(t&&n)return!1;if(!t&&!n)return!1;if(void 0!==e.startDate){const t=((void 0!==e.endDate?Ia(e.endDate):/* @__PURE__ */new Date).getTime()-Ia(e.startDate).getTime())/864e5;return t>=1&&t<=31}return!0},{message:"Provide either startDate (with optional endDate, at least 1 day apart and within 31 days) or days — but not both"}).refine(e=>void 0!==e.days?e.days.every(xa):xa(e.endDate??/* @__PURE__ */new Date),{message:"Dates must be at least 2 days before today"})},buildRequest:la,sendRequest:q,parseResponse:va},Aa={buildTrafficAreaAnalyticsRequest:la,parseTrafficAreaAnalyticsResponse:va,trafficAreaAnalyticsTemplate:wa},La=e=>{const t=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/traffic/incidentDetails`)(e)),a=t.searchParams;if(Q(a,e),((e,t)=>{te(e,"fields","{incidents{type,geometry{type,coordinates},properties{id,iconCategory,magnitudeOfDelay,events{description,code,iconCategory},startTime,endTime,from,to,length,delay,roadNumbers,timeValidity,probabilityOfOccurrence,numberOfReports,lastReportTime,tmc{countryCode,tableNumber,tableVersion,direction,points{location,offset}}}}}"),te(e,"t",t.trafficModelId),ee(e,"categoryFilter",t.categoryFilter?.map(S)),ee(e,"timeValidityFilter",t.timeValidityFilter)})(a,e),"bbox"in e&&e.bbox){const r=n(e.bbox);return r&&a.append("bbox",r.join(",")),{method:"GET",url:t}}const{ids:r}=e;return r.length>5?{method:"POST",url:t,data:{ids:r}}:(a.append("ids",r.join(",")),{method:"GET",url:t})},Da=e=>({description:e.description,code:e.code,category:u(e.iconCategory)}),Ma=e=>{const t=e.properties;return{type:"Feature",geometry:e.geometry,properties:{id:t.id,category:u(t.iconCategory),magnitudeOfDelay:l[t.magnitudeOfDelay]??"unknown",events:(t.events??[]).map(Da),...t.startTime&&{startTime:new Date(t.startTime)},...t.endTime&&{endTime:new Date(t.endTime)},...t.from&&{from:t.from},...t.to&&{to:t.to},...void 0!==t.length&&{lengthInMeters:t.length},...void 0!==t.delay&&{delayInSeconds:t.delay},...t.roadNumbers&&{roadNumbers:t.roadNumbers},timeValidity:t.timeValidity,...t.probabilityOfOccurrence&&{probabilityOfOccurrence:t.probabilityOfOccurrence},...void 0!==t.numberOfReports&&{numberOfReports:t.numberOfReports},...t.lastReportTime&&{lastReportTime:new Date(t.lastReportTime)},...t.tmc&&{tmc:(n=t.tmc,{countryCode:n.countryCode,tableNumber:n.tableNumber,tableVersion:n.tableVersion,direction:n.direction,points:(n.points??[]).map(e=>({location:e.location,...void 0!==e.offset&&{offset:e.offset}}))})}}};var n},Ea=e=>({type:"FeatureCollection",features:(e.incidents??[]).filter(e=>null!==e).map(Ma)}),Oa={requestValidation:{schema:O.extend({bbox:z.optional(),ids:C.array(C.string()).optional(),trafficModelId:C.string().optional(),categoryFilter:C.array(C.enum([...R])).optional(),timeValidityFilter:C.array(C.enum(["present","future"])).optional()}).refine(e=>!(e.bbox&&e.ids),{message:"Provide either bbox or ids, not both"})},buildRequest:La,sendRequest:q,parseResponse:Ea},Fa={alongRouteSearch:We,reverseGeocode:xn,geocode:Xe,geometryData:st,geometrySearch:yt,calculateRoute:ia,reachableRange:Rn,evChargingStationsAvailability:Ve,trafficAreaAnalytics:Aa,trafficIncidentDetails:{buildTrafficIncidentDetailsRequest:La,parseTrafficIncidentDetailsResponse:Ea,trafficIncidentDetailsTemplate:Oa},placeByID:vt,autocompleteSearch:je},ka=async(e,t)=>k(e,{...Ke,...t},"EVChargingStationsAvailability"),Ua=async e=>{const t=e.properties.dataSources?.chargingAvailability?.id;if(t)try{const n=await ka({id:t}),a=e.properties.poi;return n?{...e,properties:{...e.properties,...a&&{poi:{...a,openingHours:n.openingHours}},chargingPark:{...e.properties.chargingPark,availability:n}}}:void 0}catch(n){return void console.error(n)}};async function Wa(e,t){const a=[];for(const n of e.features){const e=await Ua(n);e?a.push(e):t?.excludeIfAvailabilityUnknown||a.push(n)}return{...e,features:a,bbox:n(a)}}var ja=e=>Boolean(e&&"availability"in e&&e.availability),Ba=async(e,t)=>k(e,{...Qe,...t},"Geocode"),qa=async e=>{const t=await Ba({query:e,limit:1});if(!t.features[0])throw new Error(`geocodeOne: no results found for "${e}"`);return t.features[0]};async function Ha(e,t){const n=await k(e,{...it,...t},"GeometryData");return Array.isArray(e.geometries)||"FeatureCollection"!==e.geometries.type?n:((e,t)=>{const n=e.features.reduce((e,t)=>{const n=t.properties.dataSources?.geometry?.id;return n&&(e[n]={...t.properties,placeCoordinates:t.geometry.coordinates}),e},{}),a=t.features.map(e=>e.id&&n[e.id]?{...e,properties:n[e.id]}:e);return{type:"FeatureCollection",bbox:t.bbox,features:a}})(e.geometries,n)}var Na=async(e,t)=>k(e,{...St,...t},"PlaceById"),Ka=/* @__PURE__ */new Map,Va=/* @__PURE__ */new Map,$a="en-GB",_a=e=>e??$a,Ga=e=>e.toLowerCase().replaceAll(/[\s\-_,]+/g,""),za=e=>{const t={};for(const n of e){const e=[n.name,...n.synonyms].map(Ga);for(const a of e)t[a]=n}return t},Ya=O.extend({filters:C.array(C.string()).optional()}),Za=e=>{const t=b[e.id];return t?{code:t,name:e.name,childCategoryCodes:e.childCategoryIds.map(e=>b[e]).filter(e=>!!e),synonyms:e.synonyms}:(console.error(`Received unknown POI category ID ${e.id} (${e.name}). This category will be skipped and unavailable for filtering.`),null)},Ja={requestValidation:{schema:Ya},buildRequest:e=>{const t=e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/poiCategories.json`,n=new URL(t);return Q(n.searchParams,e),n},getAPIVersion:()=>1,sendRequest:j,parseResponse:e=>({poiCategories:e.poiCategories.map(Za).filter(e=>null!==e)})},Qa=(e,t)=>{const n=(e=>Va.get(e??$a)??{})(e),a=/* @__PURE__ */new Map;for(const r of t){const e=Ga(r);for(const[t,r]of Object.entries(n))t.includes(e)&&r&&a.set(r.code,r)}for(const r of a.values())for(const e of r.childCategoryCodes)a.delete(e);return[...a.values()]},Xa=async(e={})=>{const{language:t}=g(e);let n=(e=>Ka.get(_a(e)))(t);return n||(n=(await k(e,Ja,"POICategories")).poiCategories,((e,t)=>{const n=_a(e);Ka.set(n,t),Va.set(n,za(t))})(t,n)),e.filters?.length?{poiCategories:Qa(t,e.filters)}:{poiCategories:n}},er=async(e={})=>{const{poiCategories:t}=await Xa(e);return t.map(e=>e.code)},tr=async(e,t)=>k(e,{...Tn,...t},"Reachable Range"),nr=async(e,t,a)=>{const r=[];for(const n of e){t?.signal?.throwIfAborted();try{r.push(await tr(n,a))}catch(i){if(!(i instanceof L)||403===i.status||429===i.status)throw i}}const o=n(r);return{type:"FeatureCollection",...o&&{bbox:o},features:r}},ar=async(e,t)=>k(e,{...In,...t},"ReverseGeocode"),rr=async(e,t)=>k(e,{...oa,...t},"Routing"),or=C.object({minFuzzyLevel:C.number().min(1).max(4).optional(),maxFuzzyLevel:C.number().min(1).max(4).optional()}),ir=ge.extend($e.extend(or.shape).shape),sr=e=>{let t;switch(e.type){case"COORDINATE":t={...e,details:{position:ce(e.details)}};break;case"NEARBY":t={...e,details:{position:ce({lon:e.details.lon,lat:e.details.lat}),text:e.details.text,query:e.details.query}};break;case"BOOKMARK":case"W3W":t=e}return t},cr={requestValidation:{schema:ir},buildRequest:e=>{const t=new URL(`${(e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/search/${e.query??""}.json`)(e)}`);ae(t,e);const a=t.searchParams;te(a,"typeahead",e.typeahead),te(a,"ofs",e.offset),ee(a,"countrySet",e.countries),te(a,"radius",e.radiusMeters);const r=e.boundingBox&&n(e.boundingBox);return r&&(a.append("topLeft",Ge([r[3],r[0]])),a.append("btmRight",Ge([r[1],r[2]]))),te(a,"minFuzzyLevel",e.minFuzzyLevel),te(a,"maxFuzzyLevel",e.maxFuzzyLevel),t},sendRequest:j,parseResponse:e=>{const t=e.results.map(Ee),r=a(n(t));return{type:"FeatureCollection",properties:{...Oe(e.summary),queryIntent:e.summary.queryIntent.map(sr)},features:t,...r&&{bbox:r}}}},pr=async(e,t)=>"route"in e?Ue(e,t):"geometries"in e?gt(e,t):(async(e,t)=>k(e,{...cr,...t},"FuzzySearch"))(e,t),ur=async e=>{const t=await pr({query:e,limit:1});if(!t.features[0])throw new Error(`searchOne: no results found for "${e}"`);return t.features[0]},lr=async(e,t)=>k(e,{...wa,...t},"TrafficAreaAnalytics"),dr=async(e,t)=>k(e,{...Oa,...t},"TrafficIncidentDetails");export{A as APIErrorCode,w as SDKError,L as SDKServiceError,le as autocompleteSearch,on as budgetTypes,M as buildResponseError,E as buildValidationError,tr as calculateReachableRange,nr as calculateReachableRanges,rr as calculateRoute,Fa as customizeService,ka as evChargingStationsAvailability,Ba as geocode,qa as geocodeOne,Ha as geometryData,Xa as getPOICategories,er as getPOICategoryCodes,Ua as getPlaceWithEVAvailability,Wa as getPlacesWithEVAvailability,ja as hasChargingAvailability,D as parseDefaultResponseError,Na as placeById,ar as reverseGeocode,qe as routeTypes,pr as search,ur as searchOne,lr as trafficAreaAnalytics,dr as trafficIncidentDetails};
1
+ import{areaAnalyticsMetricKeys as e,avoidableTypes as t,bboxFromCoordsArray as n,bboxFromGeoJSON as a,bboxOnlyIfWithArea as r,currentTypes as o,generateId as i,generateTomTomHeaders as s,getPosition as c,getPositionStrict as p,getRoutePlanningLocationType as u,iconToTrafficIncidentCategory as l,indexedMagnitudes as d,inputSectionTypes as m,inputSectionTypesWithGuidance as g,mergeFromGlobal as y,plugTypes as h,poiCategories as f,poiCategoriesToID as b,poiIDsToCategories as T,toPointGeometry as R,trafficIncidentCategories as S,trafficIncidentToIconCategory as v,views as C}from"@tomtom-org/maps-sdk/core";import{z as P}from"zod";import{isNil as I,omit as x}from"lodash-es";var w=/* @__PURE__ */function(e){return e[e.TOO_MANY_REQUESTS=429]="TOO_MANY_REQUESTS",e[e.FORBIDDEN=403]="FORBIDDEN",e}({}),A=class e extends Error{constructor(t,n,a){super(t),this.service=n,this.issues=a,Error.captureStackTrace&&Error.captureStackTrace(this,e)}},L={[w.TOO_MANY_REQUESTS]:"Too Many Requests: The API Key is over QPS (Queries per second)",[w.FORBIDDEN]:"Request failed with status code 403"},D=class extends A{constructor(e,t,n){super(e,t),this.status=n,this.status&&L[this.status]&&(this.message=L[this.status])}},E=(e,t)=>{const{data:n,message:a,status:r}=e;return new D(n?.error||n?.errorText||a,t,r)},M=(e,t,n)=>{if(e.status){const a=e;return n?n(a,t):E(a,t)}return new A(e.message,t)},O=(e,t)=>new A(e.message,t,e.issues),F=P.object({apiKey:P.string().optional(),commonBaseURL:P.string().optional(),customServiceBaseURL:P.string().optional(),language:P.string().optional()}),k=class extends Error{constructor(e){super(e.issues.map(e=>`${e.path.length>0?`${e.path.join(".")}: `:""}${e.message}`).join("; ")),this.issues=e.issues}},U=async(e,t,n)=>{const a=t.getAPIVersion?.(e),r=y({...e,...a&&{apiVersion:a}});if(void 0===e.validateRequest||e.validateRequest)try{((e,t)=>{const n=(t?.schema?F.extend(t.schema.shape):F).superRefine((e,n)=>{if("commonBaseURL"in e||"customServiceBaseURL"in e||n.addIssue({code:"custom",message:"commonBaseURL or customServiceBaseURL is required"}),t?.refinements?.length)for(const a of t.refinements)a.check(e)||n.addIssue({code:"custom",message:a.message})}).safeParse(e);if(!n.success)throw new k(n.error)})(r,t.requestValidation)}catch(c){throw O(c,n)}const o=t.buildRequest(r),i=s(r);e.onAPIRequest?.(o);try{const n=await t.sendRequest(o,i);return e.onAPIResponse?.(o,n),t.parseResponse(await n.data,r)}catch(c){throw e.onAPIResponse?.(o,c),M(c,n,t.parseResponseError)}},W=class e extends Error{constructor(t,n,a){super(n??`HTTP Error ${t}`),this.name="FetchError",this.status=t,this.data=a,Error.captureStackTrace&&Error.captureStackTrace(this,e)}},j=async e=>{if(e.ok)return{data:await e.json(),status:e.status};let t,n;const a=e.headers.get("content-type");throw e.bodyUsed?t=e.statusText:a?.includes("application/json")?(n=await e.json(),t=n?.errorText??n?.message??n?.detailedError?.message):a?.includes("text/xml")&&(n=await e.text(),t=e.statusText),new W(e.status,t,n)},B=async(e,t)=>j(await fetch(e,{headers:t})),q=async(e,t)=>j(await fetch(e.url,{method:"POST",body:JSON.stringify(e.data),headers:{...t,"Content-Type":"application/json"}})),H=async(e,t)=>{const n=e.method;if("GET"===n)return B(e.url,t);if("POST"===n)return q(e,t);throw new Error(`Unsupported HTTP method received: ${n}`)},N=P.array(P.array(P.number())),K=P.object({type:P.enum(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","Circle"]),coordinates:P.union([P.array(P.number()),N,P.array(P.array(P.array(P.number()))),P.array(P.array(P.array(P.array(P.number()))))]),radius:P.optional(P.number()),radiusMeters:P.optional(P.number()),bbox:P.optional(P.array(P.number()))}).check(P.refine(e=>"Circle"!==e.type||Boolean(e.radius),'type: "Circle" must have radius property')),V=P.object({type:P.literal("Feature"),geometry:K,id:P.optional(P.union([P.string(),P.number()])),properties:P.any(),bbox:P.optional(P.array(P.number()))}),_=P.object({type:P.literal("FeatureCollection"),features:P.array(V),id:P.optional(P.union([P.string(),P.number()])),properties:P.any(),bbox:P.optional(P.array(P.number()))}),$=P.union([P.tuple([P.number().min(-180).max(180),P.number().min(-90).max(90)]),P.tuple([P.number().min(-180).max(180),P.number().min(-90).max(90),P.number()]),P.object({type:P.literal("Point"),coordinates:P.array(P.number())}),V]),G=P.union([P.array(P.number()).refine(e=>4===e.length,{message:"BBox must have 4 elements"}),P.array(P.number()).refine(e=>6===e.length,{message:"BBox must have 6 elements"})]),z=P.union([K,V,_]),Y=P.union([G,z,P.array(z)]),Z=P.object({query:P.string().optional(),position:$.optional(),limit:P.number().max(100).optional(),extendedPostalCodesFor:P.array(P.string()).optional(),mapcodes:P.array(P.string()).optional(),view:P.enum(C).optional(),geographyTypes:P.array(P.string()).optional()}),J=P.object({indexes:P.array(P.string()).optional(),poiCategories:P.array(P.enum(f)).optional(),poiBrands:P.array(P.string()).optional(),connectors:P.array(P.string()).optional(),fuelTypes:P.array(P.string()).optional(),openingHours:P.string().optional(),timeZone:P.string().optional(),relatedPois:P.string().optional(),minPowerKW:P.number().optional(),maxPowerKW:P.number().optional(),minFuzzyLevel:P.number().optional(),maxFuzzyLevel:P.number().optional()}),Q=Z.extend(J.shape),X=P.object({type:P.literal("LineString"),coordinates:N}),ee=P.object({type:P.literal("Feature"),geometry:X}),te=N,ne=P.union([X,ee,te]),ae=P.object({route:ne,maxDetourTimeSeconds:P.number().int().positive()}),re=P.object({sortBy:P.enum(["detourTime","detourOffset"]).optional()}),oe=Q.extend({...ae.shape,...re.shape}),ie=(e,t)=>{e.append("apiVersion",String(t.apiVersion)),e.append("key",t.apiKey),t.language&&e.append("language",t.language)},se=(e,t,n)=>{for(const a of n||[])e.append(t,a)},ce=(e,t,n)=>{Array.isArray(n)&&n.length>0&&e.append(t,n.join(","))},pe=(e,t,n)=>{!I(n)&&e.append(t,String(n))},ue=(e,t)=>{const n=c(t);n&&(e.append("lat",String(n[1])),e.append("lon",String(n[0])))},le=(e,t)=>{const n=e.searchParams;ie(n,t),pe(n,"limit",t.limit),ue(n,"position"in t?t.position:void 0),ce(n,"fuelSet",t.fuelTypes),ce(n,"idxSet",t.indexes),ce(n,"brandSet",t.poiBrands),t.poiCategories&&ce(n,"categorySet",t.poiCategories.map(e=>b[e])),ce(n,"connectorSet",t.connectors),ce(n,"mapcodes",t.mapcodes),ce(n,"extendedPostalCodesFor",t.extendedPostalCodesFor),pe(n,"minPowerKW",t.minPowerKW),pe(n,"maxPowerKW",t.maxPowerKW),pe(n,"view",t.view),pe(n,"openingHours",t.openingHours),pe(n,"timeZone",t.timeZone),pe(n,"relatedPois",t.relatedPois),ce(n,"entityTypeSet",t.geographyTypes)},de=e=>{const t=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/searchAlongRoute/${e.query??""}.json`)(e));le(t,e);const n=t.searchParams;return n.append("maxDetourTime",String(e.maxDetourTimeSeconds)),pe(n,"sortBy",e.sortBy),pe(n,"spreadingMode","plan"),{url:t,data:{route:{points:(a=e.route,Array.isArray(a)?{type:"LineString",coordinates:a}:"Feature"===a.type?a.geometry:a).coordinates.map(e=>({lat:e[1],lon:e[0]}))}}};var a},me=e=>{const t={count:0,statusCounts:{}};for(const n of e)for(const e of n.chargingPoints)t.count++,t.statusCounts[e.status]=(t.statusCounts[e.status]||0)+1;return t},ge=(e,t)=>e.type===t.type&&e.ratedPowerKW===t.ratedPowerKW,ye=(e,t,n)=>{if(e)for(const a of e){const e=n.find(e=>ge(a,e.connector));if(e){if(e.count++,t){const n=e.statusCounts;e.statusCounts[t]=(n[t]||0)+1}}else n.push({connector:a,count:1,statusCounts:t?{[t]:1}:{}})}},he=e=>{const t=[];return((e,t)=>{if(e)for(const n of e){const e=t.find(e=>ge(n,e.connector));e?e.count++:t.push({connector:n,count:1})}})(e,t),t},fe=e=>{const t=[];for(const n of e)for(const e of n.chargingPoints)ye(e.connectors,e.status,t);return t},be=e=>e<12?"slow":e<50?"regular":e<150?"fast":"ultra-fast",Te=e=>{const t=e.split(",");return[Number(t[1]),Number(t[0])]},Re=e=>`${e[1]},${e[0]}`,Se=e=>{let t,n;return void 0!==e.topLeftPoint?(t=[e.topLeftPoint.lon,e.btmRightPoint.lat],n=[e.btmRightPoint.lon,e.topLeftPoint.lat]):(t=Te(e.southWest),n=Te(e.northEast)),[t[0],t[1],n[0],n[1]]},ve=e=>[e.lon,e.lat],Ce=e=>{const{year:t,month:n,day:a}=(e=>{const t=e.split("-");return{year:Number.parseInt(t[0]),month:Number.parseInt(t[1]),day:Number.parseInt(t[2])}})(e.date);return{dateYYYYMMDD:e.date,year:t,month:n,day:a,hour:e.hour,minute:e.minute,date:new Date(t,n-1,a,e.hour,e.minute)}},Pe=e=>1===e.length&&0===e[0].start.hour&&0===e[0].end.hour,Ie=e=>{const t=e.timeRanges.map(e=>({start:Ce(e.startTime),end:Ce(e.endTime)}));return{mode:e.mode,timeRanges:t,alwaysOpenThisPeriod:Pe(t)}},xe=e=>{const{position:t,entryPoints:n,poi:a,id:r,dist:o,boundingBox:i,chargingPark:s,...c}=e,p=s?.connectors?.map(e=>({...x(e,"connectorType"),type:e.connectorType,chargingSpeed:be(e.ratedPowerKW)}));return{type:"Feature",geometry:R(ve(t)),...i&&{bbox:Se(i)},id:r,properties:{...x(c,"viewport"),...o&&{distance:o},...n?.length&&{entryPoints:n.map(e=>({...e,position:ve(e.position)}))},...p?.length&&{chargingPark:{...s,connectors:he(p)}},...a&&{poi:{name:a.name,categories:(a.categorySet?.map(e=>T[e.id])??[]).filter(e=>!!e),localizedCategories:a.categories??[],...a.phone&&{phone:a.phone},...a.brands&&{brands:a.brands.map(e=>e.name)},...a.url&&{url:a.url},...a.openingHours&&{openingHours:Ie(a.openingHours)},...a.timeZone&&{timeZone:a.timeZone}}}}}},we=e=>{const{geoBias:t,...n}=e;return{...t&&{geoBias:ve(t)},...n}},Ae=e=>{const t=e.results.map(xe),n=r(a(t));return{type:"FeatureCollection",properties:{...we(e.summary)},features:t,...n&&{bbox:n}}},Le={requestValidation:{schema:oe},buildRequest:de,sendRequest:q,parseResponse:Ae},De=async(e,t)=>U(e,{...Le,...t},"AlongRouteSearch"),Ee=P.object({query:P.string()}),Me=P.object({position:$.optional(),limit:P.number().max(100).optional(),radiusMeters:P.number().optional(),countries:P.array(P.string()).optional(),resultType:P.array(P.string()).optional()}),Oe=Ee.extend(Me.shape),Fe=e=>{const t=new URL(`${n=e,n.customServiceBaseURL||`${n.commonBaseURL}/maps/orbis/places/autocomplete/${n.query}.json`}`);var n;const a=t.searchParams;return e.language=e.language??"en-GB",ie(a,e),pe(a,"limit",e.limit),ue(a,e.position),ce(a,"countrySet",e.countries),pe(a,"radius",e.radiusMeters),ce(a,"resultSet",e.resultType),t},ke=e=>{const{position:t,...n}=e.context.geoBias||{};return{context:{...e.context,geoBias:{...t&&{position:ve(t)},radiusMeters:n.radius}},results:(a=e.results,a.map(e=>({segments:e.segments.map(e=>{if((e=>"category"===e.type)(e)){const{id:t,...n}=e;return{...n,category:T[Number(t)]}}return e})})))};var a},Ue={requestValidation:{schema:Oe},buildRequest:Fe,sendRequest:B,parseResponse:ke},We=async(e,t)=>U(e,{...Ue,...t},"Autocomplete"),je={alongRouteSearch:De,buildAlongRouteSearchRequest:de,parseAlongRouteSearchResponse:Ae,alongRouteSearchTemplate:Le},Be={autocompleteSearch:We,buildAutocompleteSearchRequest:Fe,parseAutocompleteSearchResponse:ke,autocompleteSearchTemplate:Ue},qe=F.extend({id:P.string()}),He=["fast","short","efficient","thrilling"],Ne=e=>{const t=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/ev/id`)(e)),n=t.searchParams;return ie(n,e),n.append("id",e.id),t},Ke=e=>{const t=e.results?.[0];return t?{id:t.id,accessType:t.accessType,chargingStations:(n=t.chargingStations,n.map(e=>({...e,chargingPoints:e.chargingPoints.map(e=>({...e,connectors:e.connectors?.map(e=>({...e,chargingSpeed:be(e.ratedPowerKW)}))}))}))),chargingPointAvailability:me(t.chargingStations),connectorAvailabilities:fe(t.chargingStations),...t.openingHours&&{openingHours:Ie(t.openingHours)}}:void 0;var n},Ve={requestValidation:{schema:qe},buildRequest:Ne,sendRequest:B,parseResponse:Ke,parseResponseError:(e,t)=>new D(e.data?.detailedError?.message??e.message,t,e.status)},_e={buildEVChargingStationsAvailabilityRequest:Ne,parseEVChargingStationsAvailabilityResponse:Ke,evChargingStationsAvailabilityTemplate:Ve},$e=P.object({typeahead:P.boolean().optional(),offset:P.number().max(1900).optional(),radiusMeters:P.number().optional(),boundingBox:Y.optional(),countries:P.array(P.string()).optional()}),Ge=F.extend(Z.shape).extend($e.shape).extend({query:P.string()}),ze=e=>e?Array.isArray(e)?e.join(","):"string"==typeof e?e:String(e):"",Ye=(e,t)=>{const n=e.length;if(n<=t)return e;const a=[];let r;const o=Math.ceil(n/t);for(r=0;r<n;r+=o)a.push(e[r]);return t>1&&r>=n-o&&(a.length<t?a.push(e[n-1]):a[a.length-1]=e[n-1]),a},Ze=e=>{const t=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/geocode`)(e)}/${e.query}.json`),n=t.searchParams;ie(n,e),e.typeahead&&n.append("typeahead",String(e.typeahead)),!I(e.limit)&&n.append("limit",String(e.limit)),!I(e.offset)&&n.append("ofs",String(e.offset)),ue(n,e.position),e.countries&&n.append("countrySet",ze(e.countries)),!I(e.radiusMeters)&&n.append("radius",String(e.radiusMeters));const r=e.boundingBox&&a(e.boundingBox);return r&&(n.append("topLeft",ze([r[3],r[0]])),n.append("btmRight",ze([r[1],r[2]]))),e.extendedPostalCodesFor&&n.append("extendedPostalCodesFor",ze(e.extendedPostalCodesFor)),e.mapcodes&&n.append("mapcodes",ze(e.mapcodes)),e.view&&n.append("view",e.view),e.geographyTypes&&n.append("entityTypeSet",ze(e.geographyTypes)),t},Je=e=>{const{position:t,boundingBox:n,dist:a,entryPoints:r,addressRanges:o,entityType:i,id:s,...c}=e;return{type:"Feature",geometry:R(ve(t)),...n&&{bbox:Se(n)},id:s,properties:{...x(c,"viewport"),...a&&{distance:a},...i&&{geographyType:i.split(",")},...r&&{entryPoints:r.map(e=>({...e,position:ve(e.position)}))},...o&&{addressRanges:{...o,from:ve(o.from),to:ve(o.to)}}}}},Qe=e=>{const t=e.results.map(Je),n=r(a(t));return{type:"FeatureCollection",features:t,...n&&{bbox:n}}},Xe={requestValidation:{schema:Ge},buildRequest:Ze,sendRequest:B,parseResponse:Qe},et={buildGeocodingRequest:Ze,parseGeocodingResponse:Qe,geocodingTemplate:Xe},tt=P.object({geometries:P.union([_,P.array(P.union([P.string(),V])).min(1).max(20)])}),nt=P.object({zoom:P.number().min(0).max(22).optional()}),at=tt.extend(nt.shape),rt=e=>e.map(e=>e.properties.dataSources?.geometry?.id).filter(e=>e),ot=e=>{const t=new URL((e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/additionalData.json`)(e)),n=t.searchParams;return n.append("apiVersion",String(e.apiVersion)),n.append("key",e.apiKey),((e,t)=>{let n;n=Array.isArray(t)?"string"==typeof t[0]?t:rt(t):rt(t.features),e.append("geometries",ze(n))})(n,e.geometries),pe(n,"geometriesZoom",e.zoom),t},it=e=>{const t=e.additionalData.flatMap(e=>e.geometryData?.features.map(e=>({...e,id:e.id??i(),bbox:a(e.geometry)}))).filter(e=>e);return{type:"FeatureCollection",bbox:a(t),features:t}},st={requestValidation:{schema:at},buildRequest:ot,sendRequest:B,parseResponse:it},ct={buildGeometryDataRequest:ot,parseGeometryDataResponse:it,geometryDataTemplate:st},pt=P.object({geometries:P.array(P.union([_,K]))}),ut=Q.extend(pt.shape),lt=e=>{switch(e.type){case"Circle":return[{type:"CIRCLE",radius:e.radius,position:Re(e.coordinates)}];case"Polygon":return[{type:"POLYGON",vertices:Ye(e.coordinates[0],50).map(e=>Re(e))}];case"MultiPolygon":return e.coordinates.length>50?(e=>{let t=/* @__PURE__ */new Map;return e.coordinates.forEach(e=>{const a=n(e[0]);if(a){const n=Math.abs((a[2]-a[0])*(a[3]-a[1]));t.set(e,n)}}),t=new Map([...t.entries()].sort((e,t)=>t[1]-e[1]).splice(0,50)),[...t.keys()]})(e).flatMap(e=>lt({type:"Polygon",coordinates:e})):e.coordinates.flatMap(e=>lt({type:"Polygon",coordinates:e}));case"FeatureCollection":return e.features.flatMap(e=>lt(e.geometry));default:throw new Error(`Type ${e.type} is not supported`)}},dt=e=>{const t=new URL(`${n=e,n.customServiceBaseURL??`${n.commonBaseURL}/maps/orbis/places/geometrySearch/${n.query??""}.json`}`);var n;return le(t,e),{url:t,data:{geometryList:e.geometries.flatMap(lt)}}},mt=e=>{const t=e.results.map(xe),n=r(a(t));return{type:"FeatureCollection",properties:{...we(e.summary)},features:t,...n&&{bbox:n}}},gt={requestValidation:{schema:ut},buildRequest:dt,sendRequest:q,parseResponse:mt},yt=async(e,t)=>U(e,{...gt,...t},"GeometrySearch"),ht={geometrySearch:yt,buildGeometrySearchRequest:dt,parseGeometrySearchResponse:mt,geometrySearchTemplate:gt},ft=P.object({entityId:P.string()}),bt=P.object({mapcodes:P.array(P.string()).optional(),view:P.enum(C).optional(),openingHours:P.string().optional(),timeZone:P.string().optional(),relatedPois:P.string().optional()}),Tt=ft.extend(bt.shape),Rt=e=>{const t=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/place.json`)(e)}`),n=t.searchParams;return ie(n,e),pe(n,"entityId",e.entityId),ce(n,"mapcodes",e.mapcodes),pe(n,"view",e.view),pe(n,"openingHours",e.openingHours),pe(n,"timeZone",e.timeZone),pe(n,"relatedPois",e.relatedPois),t},St=e=>e.results?.length?xe(e.results[0]):void 0,vt={requestValidation:{schema:Tt},buildRequest:Rt,sendRequest:B,parseResponse:St},Ct={buildPlaceByIdRequest:Rt,parsePlaceByIdResponse:St,placeByIdTemplate:vt},Pt=(e,t)=>{const{data:n,message:a,status:r}=e;return new D(n?.error?.description??n?.detailedError?.message??a,t,r)},It=P.number().positive(),xt=P.number().min(0),wt=P.number().min(0).max(100),At=It.optional(),Lt=xt.optional(),Dt=P.number().min(0).max(1).optional(),Et=P.object({speedKMH:P.number(),consumptionUnitsPer100KM:P.number()}),Mt={efficiency:P.object({acceleration:Dt,deceleration:Dt,uphill:Dt,downhill:Dt}).optional()},Ot=P.array(Et).min(1).max(25),Ft=P.object({...Mt,speedsToConsumptionsLiters:Ot,auxiliaryPowerInLitersPerHour:Lt,fuelEnergyDensityInMJoulesPerLiter:P.number().min(1).optional()}),kt=P.object({...Mt,speedsToConsumptionsKWH:Ot,auxiliaryPowerInkW:Lt,consumptionInKWHPerKMAltitudeGain:P.number().max(500).optional(),recuperationInKWHPerKMAltitudeLoss:Lt}),Ut=P.object({currentType:P.enum(o),plugTypes:P.array(P.enum(h)).min(1),efficiency:Dt,baseLoadInkW:Lt,maxPowerInkW:Lt,maxVoltageInV:Lt,maxCurrentInA:Lt,voltageRange:P.object({minVoltageInV:Lt,maxVoltageInV:P.number().optional()}).optional()}),Wt=P.object({stateOfChargeInkWh:xt,maxPowerInkW:It}),jt=P.object({maxChargeKWH:It,batteryCurve:P.array(Wt).max(20).optional(),chargingConnectors:P.array(Ut).min(1).optional(),chargingTimeOffsetInSec:Lt}),Bt=P.object({consumption:Ft}),qt=P.object({consumption:kt,charging:jt.optional()}),Ht=P.object({lengthMeters:At,widthMeters:At,heightMeters:At,weightKG:At,axleWeightKG:At}).optional(),Nt=P.object({variantId:P.string()}),Kt=P.object({dimensions:Ht,engine:P.union([Bt,qt]).optional()}),Vt=P.union([Nt,Kt]).optional(),_t=P.object({heading:P.number().min(0).max(360).optional()}),$t=_t.extend({currentFuelInLiters:xt}),Gt=_t.extend({currentChargePCT:wt}),zt=_t.extend({currentChargeInkWh:xt}),Yt=P.union([Gt,zt]),Zt=P.object({minChargeAtDestinationPCT:wt,minChargeAtChargingStopsPCT:P.number().min(0).max(50)}),Jt=P.object({minChargeAtDestinationInkWh:xt,minChargeAtChargingStopsInkWh:xt}),Qt=P.union([Zt,Jt]),Xt=P.object({chargingPreferences:Qt.optional()}),en={model:Vt,restrictions:P.object({loadTypes:P.array(P.enum(["USHazmatClass1","USHazmatClass2","USHazmatClass3","USHazmatClass4","USHazmatClass5","USHazmatClass6","USHazmatClass7","USHazmatClass8","USHazmatClass9","otherHazmatExplosive","otherHazmatGeneral","otherHazmatHarmfulToWater"])).optional(),maxSpeedKMH:P.number().min(0).max(250).optional(),adrCode:P.enum(["B","C","D","E"]).optional(),commercial:P.boolean().optional()}).optional()},tn=P.object({...en,engineType:P.undefined(),state:_t.optional(),preferences:P.object({}).optional()}),nn=P.object({...en,engineType:P.literal("combustion"),state:$t.optional(),preferences:P.object({}).optional()}),an=P.object({...en,engineType:P.literal("electric"),state:Yt.optional(),preferences:Xt.optional()}),rn=P.union([P.discriminatedUnion("engineType",[nn,an]),tn]),on=P.object({costModel:P.object({avoid:P.array(P.enum(t)).optional(),traffic:P.enum(["live","historical"]).optional(),routeType:P.enum(He).optional(),avoidAreas:P.array(Y).max(10).optional(),thrillingParams:P.object({hilliness:P.enum(["low","normal","high"]).optional(),windingness:P.enum(["low","normal","high"]).optional()}).optional()}).optional(),travelMode:P.string().optional(),vehicle:rn.optional(),when:P.object({option:P.enum(["departAt","arriveBy"]),date:P.date()}).optional()}),sn=["timeMinutes","remainingChargeCPT","spentChargePCT","spentFuelLiters","distanceKM"],cn=P.object({origin:$,budget:P.object({type:P.enum(sn),value:P.number().min(0)})}),pn=P.object({maxFerryLengthMeters:P.number().min(0).optional(),smoothing:P.enum(["none","weak","strong"]).optional()}),un=on.extend(cn.extend(pn.shape).shape),ln=e=>e.map(e=>`${e.speedKMH},${e.consumptionUnitsPer100KM}`).join(":"),dn=(e,t,n)=>{((e,t)=>{t&&(!I(t.acceleration)&&e.append("accelerationEfficiency",String(t.acceleration)),!I(t.deceleration)&&e.append("decelerationEfficiency",String(t.deceleration)),!I(t.uphill)&&e.append("uphillEfficiency",String(t.uphill)),!I(t.downhill)&&e.append("downhillEfficiency",String(t.downhill)))})(e,n.consumption.efficiency),"electric"===t?(((e,t)=>{t.speedsToConsumptionsKWH&&e.append("constantSpeedConsumptionInkWhPerHundredkm",ln(t.speedsToConsumptionsKWH)),!I(t.auxiliaryPowerInkW)&&e.append("auxiliaryPowerInkW",String(t.auxiliaryPowerInkW)),!I(t.consumptionInKWHPerKMAltitudeGain)&&e.append("consumptionInkWhPerkmAltitudeGain",String(t.consumptionInKWHPerKMAltitudeGain)),!I(t.recuperationInKWHPerKMAltitudeLoss)&&e.append("recuperationInkWhPerkmAltitudeLoss",String(t.recuperationInKWHPerKMAltitudeLoss))})(e,n.consumption),((e,t)=>{const n=t.charging;n?.maxChargeKWH&&e.append("maxChargeInkWh",String(n.maxChargeKWH))})(e,n)):((e,t)=>{const n=t.consumption;n.speedsToConsumptionsLiters&&e.append("constantSpeedConsumptionInLitersPerHundredkm",ln(n.speedsToConsumptionsLiters)),!I(n.auxiliaryPowerInLitersPerHour)&&e.append("auxiliaryPowerInLitersPerHour",String(n.auxiliaryPowerInLitersPerHour)),!I(n.fuelEnergyDensityInMJoulesPerLiter)&&e.append("fuelEnergyDensityInMJoulesPerLiter",String(n.fuelEnergyDensityInMJoulesPerLiter))})(e,n)},mn=(e,t)=>{t.model&&("variantId"in t.model?e.append("vehicleModelId",t.model.variantId):(((e,t)=>{t&&(t.lengthMeters&&e.append("vehicleLength",String(t.lengthMeters)),t.heightMeters&&e.append("vehicleHeight",String(t.heightMeters)),t.widthMeters&&e.append("vehicleWidth",String(t.widthMeters)),t.weightKG&&e.append("vehicleWeight",String(t.weightKG)),t.axleWeightKG&&e.append("vehicleAxleWeight",String(t.axleWeightKG)))})(e,t.model.dimensions),t.model.engine&&dn(e,"engineType"in t?t.engineType:void 0,t.model.engine)))},gn=(e,t)=>{t&&("electric"===t.engineType&&e.append("vehicleEngineType","electric"),mn(e,t),((e,t)=>{if(t.state&&(t.state.heading&&e.append("vehicleHeading",String(t.state.heading)),"engineType"in t))if("combustion"===t.engineType){const n=t.state;n.currentFuelInLiters&&e.append("currentFuelInLiters",String(n.currentFuelInLiters))}else if("electric"===t.engineType){const n=t.state,a=n,r=n;if(a.currentChargeInkWh)e.append("currentChargeInkWh",String(a.currentChargeInkWh));else if(r.currentChargePCT&&t.model&&"engine"in t.model&&t.model.engine){const n=t.model.engine.charging?.maxChargeKWH;n&&e.append("currentChargeInkWh",String(n*r.currentChargePCT/100))}}})(e,t),((e,t)=>{if(t.preferences&&"engineType"in t&&"electric"===t.engineType){const n=t.preferences;if(n.chargingPreferences){const a=n.chargingPreferences,r=a,o=a;if(r.minChargeAtChargingStopsInkWh||r.minChargeAtDestinationInkWh)e.append("minChargeAtDestinationInkWh",String(r.minChargeAtDestinationInkWh)),e.append("minChargeAtChargingStopsInkWh",String(r.minChargeAtChargingStopsInkWh));else if((o.minChargeAtChargingStopsPCT||o.minChargeAtDestinationPCT)&&t.model&&"engine"in t.model&&t.model.engine){const n=t.model.engine.charging?.maxChargeKWH;n&&(e.append("minChargeAtDestinationInkWh",String(n*o.minChargeAtDestinationPCT/100)),e.append("minChargeAtChargingStopsInkWh",String(n*o.minChargeAtChargingStopsPCT/100)))}}}})(e,t),((e,t)=>{const n=t.restrictions;n&&(se(e,"vehicleLoadType",n.loadTypes),n.adrCode&&e.append("vehicleAdrTunnelRestrictionCode",n.adrCode),n.commercial&&e.append("vehicleCommercial",String(n.commercial)),n.maxSpeedKMH&&e.append("vehicleMaxSpeed",String(n.maxSpeedKMH)))})(e,t))},yn=(e,t)=>{const n=t.costModel;se(e,"avoid",n?.avoid),pe(e,"traffic",n?.traffic),((e,t)=>{if(t?.date){const n=t.date.toISOString();"departAt"===t.option?e.append("departAt",n):"arriveBy"===t.option&&e.append("arriveAt",n)}})(e,t.when),pe(e,"routeType",n?.routeType),pe(e,"travelMode",t.travelMode),gn(e,t.vehicle)},hn=e=>{const t=e.vehicle;if(t?.model&&"engine"in t.model)return t.model.engine?.charging?.maxChargeKWH},fn=(e,t)=>{const n=t.budget;switch(n.type){case"timeMinutes":e.append("timeBudgetInSec",(60*n.value).toString());break;case"distanceKM":e.append("distanceBudgetInMeters",(1e3*n.value).toString());break;case"spentFuelLiters":e.append("fuelBudgetInLiters",n.value.toString());break;case"spentChargePCT":{const a=hn(t);null!=a&&e.append("energyBudgetInkWh",(a*n.value/100).toString());break}case"remainingChargeCPT":{const a=(e=>{const t=e.vehicle;if(!t?.state)return;const n=t.state;if(null!=n.currentChargePCT){const t=hn(e);if(null!=t)return t*n.currentChargePCT/100}})(t),r=hn(t);if(null!=r&&null!=a){const t=r*n.value/100;e.append("energyBudgetInkWh",Math.max(0,a-t).toString())}break}default:e.append(n.type,n.value.toString())}},bn=e=>{const t=(e=>{const t=p(e.origin);return`${t[1]},${t[0]}`})(e),n=new URL(((e,t)=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/routing/calculateReachableRange/${t}/json`)(e,t)),a=n.searchParams;return ie(a,e),a.delete("language"),yn(a,e),fn(a,e),pe(a,"maxFerryLengthInMeters",e.maxFerryLengthMeters),pe(a,"smoothing",e.smoothing??"strong"),{method:"GET",url:n}},Tn=(e,t)=>{const n={type:"Polygon",coordinates:[e.reachableRange.boundary.map(e=>[e.longitude,e.latitude])]};return{type:"Feature",geometry:n,bbox:a(n),properties:t}},Rn={requestValidation:{schema:un},buildRequest:bn,sendRequest:H,parseResponse:Tn,parseResponseError:Pt,getAPIVersion:()=>2},Sn={buildReachableRangeRequest:bn,parseReachableRangeResponse:Tn,reachableRangeTemplate:Rn},vn=e=>{const t=p(e.position),n=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/reverseGeocode`)(e)}/${t[1]},${t[0]}.json`),a=n.searchParams;return ie(a,e),e.allowFreeformNewline&&a.append("allowFreeformNewline",String(e.allowFreeformNewline)),e.geographyType&&a.append("entityType",ze(e.geographyType)),!I(e.heading)&&a.append("heading",String(e.heading)),e.mapcodes&&a.append("mapcodes",ze(e.mapcodes)),e.number&&a.append("number",e.number),!I(e.radiusMeters)&&a.append("radius",String(e.radiusMeters)),e.returnSpeedLimit&&a.append("returnSpeedLimit",String(e.returnSpeedLimit)),e.returnRoadUse&&a.append("returnRoadUse",String(e.returnRoadUse)),e.roadUses&&a.append("roadUse",JSON.stringify(e.roadUses)),n},Cn=(e,t)=>{const n=e.addresses[0],{boundingBox:a,sideOfStreet:r,offsetPosition:o,...s}=n?.address||{};return{type:"Feature",geometry:R(p(t.position)),...a&&{bbox:Se(a)},id:i(),...n&&{properties:{type:n?.entityType?"Geography":s.streetNumber?"Point Address":"Street",address:s,...n.dataSources&&{dataSources:n.dataSources},...n.mapcodes&&{mapcodes:n.mapcodes},...r&&{sideOfStreet:r},...o&&{offsetPosition:Te(o)},originalPosition:Te(n.position)}}}},Pn=P.object({position:$}),In=P.object({allowFreeformNewline:P.boolean().optional(),geographyType:P.array(P.string()).optional(),heading:P.number().min(-360).max(360).optional(),mapcodes:P.array(P.string()).optional(),number:P.string().optional(),radiusMeters:P.number().optional(),returnMatchType:P.boolean().optional(),returnRoadUse:P.boolean().optional(),returnSpeedLimit:P.boolean().optional(),roadUses:P.array(P.string()).optional(),view:P.enum(C).optional()}),xn={requestValidation:{schema:Pn.extend(In.shape)},buildRequest:vn,sendRequest:B,parseResponse:Cn},wn={buildRevGeoRequest:vn,parseRevGeoResponse:Cn,reverseGeocodingTemplate:xn},An=P.union([$,K]),Ln=P.union([N,V]),Dn=P.object({locations:P.array(P.union([An,Ln])).min(1)}),En=P.object({computeAdditionalTravelTimeFor:P.enum(["none","all"]).optional(),vehicleHeading:P.number().min(0).max(359.5).optional(),maxAlternatives:P.number().min(0).max(5).optional(),sectionTypes:P.array(P.enum(g)).optional()}),Mn=on.extend(Dn.extend(En.shape).shape),On=e=>(e.vehicle?.preferences)?.chargingPreferences,Fn=e=>Array.isArray(e)?e:e.geometry.coordinates,kn=(e,t,n)=>((e,t)=>e.map(e=>{const n=Re(p(e,{useEntryPoint:t})),a=(e=>e.properties||null)(e)?.radiusMeters;return a?`circle(${n},${a})`:n}).join(":"))(t.includes("path")?((e,t,n)=>{let a;const r=e[0];a="path"===t[0]?Fn(r)[0]:p(r,{useEntryPoint:n});const o=e[e.length-1];let i;if("path"===t[t.length-1]){const e=Fn(o);i=e[e.length-1]}else i=p(o,{useEntryPoint:n});return[a,i]})(e,t,n):e,n),Un=e=>({latitude:e[1],longitude:e[0]}),Wn=(e,t,n)=>{const a=[],r=[];return e.forEach((o,i)=>{"path"===t[i]?((e,t,n,a,r)=>{const o=a.length;for(const i of Fn(e))a.push(Un(i));Array.isArray(e)||(e.properties.sections.leg.forEach((e,n)=>{(t>0||n>0)&&r.push({supportingPointIndex:o+e.startPointIndex,waypointSourceType:"USER_DEFINED"})}),t<n.length-1&&r.push({supportingPointIndex:o+e.geometry.coordinates.length-1,waypointSourceType:"USER_DEFINED"}))})(o,i,e,a,r):((e,t,n,a,r,o)=>{a.push(Un(p(e,{useEntryPoint:o}))),t>0&&t<n.length-1&&r.push({supportingPointIndex:a.length-1,waypointSourceType:"USER_DEFINED"})})(o,i,e,a,r,n)}),{supportingPoints:a,...r.length&&{pointWaypoints:r}}},jn=e=>({rectangles:e.map(e=>{const t=a(e);if(!t)throw new Error("Could not derive a bounding box from an avoidAreas rectangle");const[n,r,o,i]=t;return{southWestCorner:{latitude:r,longitude:n},northEastCorner:{latitude:i,longitude:o}}})}),Bn=e=>{const t=e.locations.map(u),n=e.useEntryPoints??"main-when-available",a=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/routing/${On(e)?"calculateLongDistanceEVRoute":"calculateRoute"}`)(e)}/${kn(e.locations,t,n)}/json`),r=a.searchParams;ie(r,e),"language"in e||r.append("language","en-GB"),yn(r,e),pe(r,"computeTravelTimeFor",e.computeAdditionalTravelTimeFor),((e,t)=>{if(t?.guidance){const n=t.guidance;e.append("instructionsType",n.type),e.append("guidanceVersion",String(n.version??2)),e.append("instructionPhonetics",n.phonetics??"IPA"),e.append("language",t.language??"en-US")}})(r,e),!I(e.maxAlternatives)&&r.append("maxAlternatives",String(e.maxAlternatives)),((e,t,n)=>{se(e,"sectionType",(t??(n?g:m)).map(e=>"vehicleRestricted"===e?"travelMode":e))})(r,e.sectionTypes,!!e.guidance?.type);for(const i of e.extendedRouteRepresentations??["distance","travelTime"])r.append("extendedRouteRepresentation",i);const o=((e,t,n)=>{const a=t.includes("path"),r=!!On(e),o=e.costModel?.avoidAreas;if(!a&&!r&&!o)return null;const i=(e.vehicle?.model)?.engine?.charging;return{...a&&Wn(e.locations,t,n),...r&&i&&{chargingParameters:x(i,"maxChargeKWH")},...o?.length&&{avoidAreas:jn(o)}}})(e,t,n);return o?{method:"POST",url:a,data:o}:{method:"GET",url:a}},qn=e=>{switch(e){case"Direct_Current":return"DC";case"Alternating_Current_1_Phase":return"AC1";case"Alternating_Current_3_Phase":return"AC3";default:return}},Hn=(e,t)=>{const n=e.chargingConnectionInfo,a=e.chargingParkLocation,r=[a.coordinate.longitude,a.coordinate.latitude],o=[a.street,a.houseNumber].filter(Boolean),i=o.length>0?o.join(", "):"";return{type:"Feature",id:e.chargingParkId,geometry:{type:"Point",coordinates:r},properties:{...x(e,["chargingConnectionInfo","chargingParkLocation"]),type:"POI",address:{freeformAddress:i,...a.street&&{streetName:a.street},...a.houseNumber&&{streetNumber:a.houseNumber},...a.city&&{municipality:a.city},...a.region&&{countrySubdivision:a.region},...a.postalCode&&{postalCode:a.postalCode},...a.country&&{country:a.country}},...n&&{chargingConnectionInfo:{plugType:n.chargingPlugType,currentInA:n.chargingCurrentInA,voltageInV:n.chargingVoltageInV,chargingPowerInkW:n.chargingPowerInkW,currentType:qn(n.chargingCurrentType),chargingSpeed:be(n.chargingPowerInkW)}},...t&&{targetChargeInPCT:100*e.targetChargeInkWh/t},...e.chargingParkPowerInkW&&{chargingParkSpeed:be(e.chargingParkPowerInkW)}}}},Nn=(e,t)=>{const n=(t?.vehicle?.model)?.engine?.charging?.maxChargeKWH;return{lengthInMeters:e.lengthInMeters,historicTrafficTravelTimeInSeconds:e.historicTrafficTravelTimeInSeconds,liveTrafficIncidentsTravelTimeInSeconds:e.liveTrafficIncidentsTravelTimeInSeconds,noTrafficTravelTimeInSeconds:e.noTrafficTravelTimeInSeconds,trafficDelayInSeconds:e.trafficDelayInSeconds,trafficLengthInMeters:e.trafficLengthInMeters,travelTimeInSeconds:e.travelTimeInSeconds,departureTime:new Date(e.departureTime),arrivalTime:new Date(e.arrivalTime),deviationDistanceInMeters:e.deviationDistance,fuelConsumptionInLiters:e.fuelConsumptionInLiters,...e.deviationPoint&&{deviationPoint:[e.deviationPoint.longitude,e.deviationPoint.latitude]},totalChargingTimeInSeconds:e.totalChargingTimeInSeconds,batteryConsumptionInkWh:e.batteryConsumptionInkWh,...n&&e.batteryConsumptionInkWh&&{batteryConsumptionInPCT:100*e.batteryConsumptionInkWh/n},remainingChargeAtArrivalInkWh:e.remainingChargeAtArrivalInkWh,...n&&e.remainingChargeAtArrivalInkWh&&{remainingChargeAtArrivalInPCT:100*e.remainingChargeAtArrivalInkWh/n},...e.chargingInformationAtEndOfLeg&&{chargingInformationAtEndOfLeg:Hn(e.chargingInformationAtEndOfLeg,n)}}},Kn=(e,t)=>e.reduce((e,n,a)=>{const r=0===a?0:e[a-1]?.endPointIndex;let o;return I(r)||(o=0===r?n.points?.length>0?n.points.length-1:0:r+n.points?.length),e.push({...!I(r)&&{startPointIndex:r},...o&&{endPointIndex:o},summary:Nn(n.summary,t),id:i()}),e},[]),Vn=e=>({id:i(),startPointIndex:e.startPointIndex,endPointIndex:e.endPointIndex}),_n=e=>({...Vn(e),index:e.importantRoadStretchIndex,streetName:e.streetName?.text,roadNumbers:e.roadNumbers?.map(e=>e.text)}),$n=e=>({...Vn(e),countryCodeISO3:e.countryCode}),Gn=e=>"other"===e.travelMode?Vn(e):null,zn=e=>{if(e.tec?.causes?.length)return e.tec.causes.map(e=>(e=>{switch(e){case 1:return"jam";case 2:return"accident";case 3:return"roadworks";case 4:return"narrow-lanes";case 5:return"road-closed";case 9:return"danger";case 11:return"animals-on-road";case 13:return"broken-down-vehicle";case 16:return"lane-closed";case 17:return"wind";case 18:return"fog";case 19:return"rain";case 22:return"frost";case 23:return"flooding";default:return"other"}})(e.mainCauseCode));switch(e.simpleCategory){case"JAM":return["jam"];case"ROAD_WORK":return["roadworks"];case"ROAD_CLOSURE":return["road-closed"];default:return["other"]}},Yn=e=>({...Vn(e),delayInSeconds:e.delayInSeconds,effectiveSpeedInKmh:e.effectiveSpeedInKmh,categories:zn(e),magnitudeOfDelay:d[e.magnitudeOfDelay],tec:e.tec}),Zn=e=>({...Vn(e),lanes:e.lanes,laneSeparators:e.laneSeparators,properties:e.properties}),Jn=e=>({...Vn(e),maxSpeedLimitInKmh:e.maxSpeedLimitInKmh}),Qn=e=>({...Vn(e),roadShieldReferences:e.roadShieldReferences}),Xn=(e,t)=>(t[e]||(t[e]=[]),t[e]),ea=e=>{switch(e.sectionType){case"CAR_TRAIN":return{sectionType:"carTrain",mappingFunction:Vn};case"COUNTRY":return{sectionType:"country",mappingFunction:$n};case"FERRY":return{sectionType:"ferry",mappingFunction:Vn};case"MOTORWAY":return{sectionType:"motorway",mappingFunction:Vn};case"PEDESTRIAN":return{sectionType:"pedestrian",mappingFunction:Vn};case"TOLL_VIGNETTE":return{sectionType:"tollVignette",mappingFunction:$n};case"TOLL":return{sectionType:"toll",mappingFunction:Vn};case"TRAFFIC":return{sectionType:"traffic",mappingFunction:Yn};case"TRAVEL_MODE":return{sectionType:"vehicleRestricted",mappingFunction:Gn};case"TUNNEL":return{sectionType:"tunnel",mappingFunction:Vn};case"UNPAVED":return{sectionType:"unpaved",mappingFunction:Vn};case"URBAN":return{sectionType:"urban",mappingFunction:Vn};case"CARPOOL":return{sectionType:"carpool",mappingFunction:Vn};case"LOW_EMISSION_ZONE":return{sectionType:"lowEmissionZone",mappingFunction:Vn};case"LANES":return{sectionType:"lanes",mappingFunction:Zn};case"SPEED_LIMIT":return{sectionType:"speedLimit",mappingFunction:Jn};case"ROAD_SHIELDS":return{sectionType:"roadShields",mappingFunction:Qn};case"IMPORTANT_ROAD_STRETCH":return{sectionType:"importantRoadStretch",mappingFunction:_n}}},ta=(e,t)=>{const n={leg:Kn(e.legs,t)};return((e,t)=>{if(Array.isArray(e))for(const n of e){const e=ea(n),a=e?.mappingFunction(n);a&&Xn(e.sectionType,t).push(a)}})(e.sections,n),n},na=1e-4,aa=(e,t)=>Math.abs(e[0]-t[0])<na&&Math.abs(e[1]-t[1])<na,ra=(e,t)=>{const n=[];let a=0;for(const r of e.instructions){const e=[r.maneuverPoint.longitude,r.maneuverPoint.latitude];for(let n=a;n<t.length;n++){if(aa(t[n],e)){a=n;break}if(n===t.length-1)break}n.push({...r,maneuverPoint:e,pathPointIndex:a,routePath:r.routePath.map(e=>({...e,point:[e.point.longitude,e.point.latitude]}))})}return{instructions:n}},oa=(e,t)=>{const n=e.routes.map((e,n)=>((e,t,n)=>{const r={type:"LineString",coordinates:e.legs.flatMap(e=>e.points?.map(e=>[e.longitude,e.latitude]))};return{type:"Feature",geometry:r,id:i(),bbox:a(r),properties:{index:t,summary:Nn(e.summary,n),sections:ta(e,n),...e.guidance&&{guidance:ra(e.guidance,r.coordinates)},...e.progress&&{progress:e.progress}}}})(e,n,t)),r=a(n);return{type:"FeatureCollection",...r&&{bbox:r},features:n}},ia={requestValidation:{schema:Mn,refinements:[{check:e=>!!e.locations.map(u).includes("path")||e.locations.length>=2,message:"When passing waypoints only: at least 2 must be defined. If passing also paths, at least one path must be defined"}]},buildRequest:Bn,sendRequest:H,parseResponse:oa,parseResponseError:Pt,getAPIVersion:()=>2},sa={buildCalculateRouteRequest:Bn,parseCalculateRouteResponse:oa,calculateRouteTemplate:ia},ca=["MOTORWAY","MAJOR_ROAD","OTHER_MAJOR_ROAD","SECONDARY_ROAD","LOCAL_CONNECTING_ROAD","LOCAL_ROAD_HIGH_IMPORTANCE","LOCAL_ROAD","LOCAL_ROAD_MINOR_IMPORTANCE","OTHER_ROAD"],pa={speed:"SPEED",freeFlowSpeed:"FREE_FLOW_SPEED",congestionLevel:"CONGESTION_LEVEL",travelTime:"TRAVEL_TIME",networkLength:"NETWORK_LENGTH"},ua=e=>e instanceof Date?e.toISOString().slice(0,10):e,la=Array.from({length:24},(e,t)=>t),da=e=>ca.indexOf(e),ma=t=>{const n=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/areaanalytics/reports/lite`)(t));ie(n.searchParams,t);const a=e=>{const t=/* @__PURE__ */new Date;return t.setDate(t.getDate()-e),t},r=Array.isArray(t.days)?{days:t.days.map(ua)}:{startDate:ua(t.startDate??a(3)),endDate:ua(t.endDate??a(2))};return{method:"POST",url:n,data:{name:t.name??`Maps SDK JS Area Analytics Report ${/* @__PURE__ */(new Date).toISOString()}`,...r,dataTypes:"all"===t.metrics?e.map(e=>pa[e]):t.metrics.map(e=>pa[e]),frcs:"all"===t.functionalRoadClasses?ca.map((e,t)=>t):t.functionalRoadClasses.map(da),hours:"all"===t.hours?la:t.hours,features:[{type:"Feature",geometry:t.geometry}]}}},ga=e=>({...void 0!==e.v&&{speed:e.v},...void 0!==e.fv&&{freeFlowSpeed:e.fv},...void 0!==e.c&&{congestionLevel:e.c},...void 0!==e.t&&{travelTime:e.t},...void 0!==e.l&&{networkLength:e.l}}),ya=e=>({...void 0!==e.date&&{date:new Date(e.date)},...void 0!==e.year&&{year:e.year},...void 0!==e.month&&{month:e.month},...void 0!==e.week&&{week:e.week},...void 0!==e.hour&&{hour:e.hour},...void 0!==e.day&&{day:e.day},...ga(e)}),ha=(e,t)=>{const n=new Date(e);return n.setDate(n.getDate()+t),n},fa=(e,t)=>e.map((e,n)=>{const a=ya(e);return void 0===a.date&&(a.date=ha(t,Math.floor(n/24))),void 0===a.hour&&(a.hour=n%24),a}),ba=(e,t)=>e.map((e,n)=>{const a=ya(e);return void 0===a.date&&(a.date=ha(t,n)),a}),Ta=e=>({tileCentre:[e.lon,e.lat],...ga(e)}),Ra=e=>({startDate:new Date(e.startDate),endDate:new Date(e.endDate),labels:e.labels}),Sa=(e,t)=>{return{...e.yearly&&{yearly:e.yearly.map(ya)},...e.monthly&&{monthly:e.monthly.map(ya)},...e.weekly&&{weekly:e.weekly.map(ya)},...e.daily&&{daily:ba(e.daily,t)},...e.hourly&&{hourly:fa(e.hourly,t)},...e.average&&{average:(n=e.average,n.map((e,t)=>{const n=ya(e);return void 0===n.day&&(n.day=Math.floor(t/24)+1),void 0===n.hour&&(n.hour=t%24),n}))}};var n},va={SPEED:"speed",FREE_FLOW_SPEED:"freeFlowSpeed",CONGESTION_LEVEL:"congestionLevel",TRAVEL_TIME:"travelTime",NETWORK_LENGTH:"networkLength"},Ca=e=>{const t={};for(const[n,a]of Object.entries(e)){const e=va[n];e&&(t[e]=a.map(Ra))}return t},Pa=(e,t)=>({name:e.name,timezone:e.timezone,level:e.level,baseData:ga(e.baseData),timedData:Sa(e.timedData,t),...e.tiledData&&{tiledData:{tiles:e.tiledData.tiles.map(Ta)}},...e.anomalies&&{anomalies:Ca(e.anomalies)}}),Ia=t=>{const n=t.flatMap(e=>e.properties.tiledData?.tiles??[]),a={};for(const r of e){const e=n.map(e=>e[r]).filter(e=>null!=e);e.length>0&&(a[r]={min:Math.min(...e),max:Math.max(...e)})}return a},xa=e=>{const t=new Date(e.properties.startDate),n=e.features.map(e=>((e,t)=>({type:e.type,id:e.id,geometry:e.geometry,properties:Pa(e.properties,t),bbox:a(e.geometry)}))(e,t));return{type:"FeatureCollection",properties:{startDate:t,endDate:new Date(e.properties.endDate),metrics:e.properties.dataTypes.map(e=>va[e]).filter(e=>void 0!==e),heatmap:e.properties.heatmap,frcs:e.properties.frcs,ranges:Ia(n)},features:n}},wa=P.union([P.date(),P.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Date must be in 'YYYY-MM-DD' format")]),Aa=P.union([P.object({type:P.literal("Polygon"),coordinates:P.array(P.array(P.array(P.number()))).min(1)}),P.object({type:P.literal("MultiPolygon"),coordinates:P.array(P.array(P.array(P.array(P.number())))).min(1)})]),La=e=>e instanceof Date?e:new Date(e),Da=e=>{const t=/* @__PURE__ */new Date,n=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate());return(e=>{const t=La(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())})(e)<=n-1728e5},Ea={requestValidation:{schema:F.extend({name:P.string().optional(),startDate:wa.optional(),endDate:wa.optional(),days:P.array(wa).min(1).optional(),metrics:P.union([P.array(P.enum([...e])).min(1),P.literal("all")]),functionalRoadClasses:P.union([P.array(P.enum([...ca])).min(1),P.literal("all")]),hours:P.union([P.array(P.number().int().min(0).max(23)).min(1),P.literal("all")]),geometry:Aa}).refine(e=>{const t=void 0!==e.days,n=void 0!==e.startDate;if(t&&n)return!1;if(!t&&!n)return!1;if(void 0!==e.startDate){const t=((void 0!==e.endDate?La(e.endDate):/* @__PURE__ */new Date).getTime()-La(e.startDate).getTime())/864e5;return t>=1&&t<=31}return!0},{message:"Provide either startDate (with optional endDate, at least 1 day apart and within 31 days) or days — but not both"}).refine(e=>void 0!==e.days?e.days.every(Da):Da(e.endDate??/* @__PURE__ */new Date),{message:"Dates must be at least 2 days before today"})},buildRequest:ma,sendRequest:H,parseResponse:xa},Ma={buildTrafficAreaAnalyticsRequest:ma,parseTrafficAreaAnalyticsResponse:xa,trafficAreaAnalyticsTemplate:Ea},Oa=e=>{const t=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/traffic/incidentDetails`)(e)),n=t.searchParams;if(ie(n,e),((e,t)=>{pe(e,"fields","{incidents{type,geometry{type,coordinates},properties{id,iconCategory,magnitudeOfDelay,events{description,code,iconCategory},startTime,endTime,from,to,length,delay,roadNumbers,timeValidity,probabilityOfOccurrence,numberOfReports,lastReportTime,tmc{countryCode,tableNumber,tableVersion,direction,points{location,offset}}}}}"),pe(e,"t",t.trafficModelId),ce(e,"categoryFilter",t.categoryFilter?.map(v)),ce(e,"timeValidityFilter",t.timeValidityFilter)})(n,e),"bbox"in e&&e.bbox){const r=a(e.bbox);return r&&n.append("bbox",r.join(",")),{method:"GET",url:t}}const{ids:r}=e;return r.length>5?{method:"POST",url:t,data:{ids:r}}:(n.append("ids",r.join(",")),{method:"GET",url:t})},Fa=e=>({description:e.description,code:e.code,category:l(e.iconCategory)}),ka=e=>{const t=e.properties;return{type:"Feature",geometry:e.geometry,properties:{id:t.id,category:l(t.iconCategory),magnitudeOfDelay:d[t.magnitudeOfDelay]??"unknown",events:(t.events??[]).map(Fa),...t.startTime&&{startTime:new Date(t.startTime)},...t.endTime&&{endTime:new Date(t.endTime)},...t.from&&{from:t.from},...t.to&&{to:t.to},...void 0!==t.length&&{lengthInMeters:t.length},...void 0!==t.delay&&{delayInSeconds:t.delay},...t.roadNumbers&&{roadNumbers:t.roadNumbers},timeValidity:t.timeValidity,...t.probabilityOfOccurrence&&{probabilityOfOccurrence:t.probabilityOfOccurrence},...void 0!==t.numberOfReports&&{numberOfReports:t.numberOfReports},...t.lastReportTime&&{lastReportTime:new Date(t.lastReportTime)},...t.tmc&&{tmc:(n=t.tmc,{countryCode:n.countryCode,tableNumber:n.tableNumber,tableVersion:n.tableVersion,direction:n.direction,points:(n.points??[]).map(e=>({location:e.location,...void 0!==e.offset&&{offset:e.offset}}))})}}};var n},Ua=e=>({type:"FeatureCollection",features:(e.incidents??[]).filter(e=>null!==e).map(ka)}),Wa={requestValidation:{schema:F.extend({bbox:Y.optional(),ids:P.array(P.string()).optional(),trafficModelId:P.string().optional(),categoryFilter:P.array(P.enum([...S])).optional(),timeValidityFilter:P.array(P.enum(["present","future"])).optional()}).refine(e=>!(e.bbox&&e.ids),{message:"Provide either bbox or ids, not both"})},buildRequest:Oa,sendRequest:H,parseResponse:Ua},ja={alongRouteSearch:je,reverseGeocode:wn,geocode:et,geometryData:ct,geometrySearch:ht,calculateRoute:sa,reachableRange:Sn,evChargingStationsAvailability:_e,trafficAreaAnalytics:Ma,trafficIncidentDetails:{buildTrafficIncidentDetailsRequest:Oa,parseTrafficIncidentDetailsResponse:Ua,trafficIncidentDetailsTemplate:Wa},placeByID:Ct,autocompleteSearch:Be},Ba=async(e,t)=>U(e,{...Ve,...t},"EVChargingStationsAvailability"),qa=async e=>{const t=e.properties.dataSources?.chargingAvailability?.id;if(t)try{const n=await Ba({id:t}),a=e.properties.poi;return n?{...e,properties:{...e.properties,...a&&{poi:{...a,openingHours:n.openingHours}},chargingPark:{...e.properties.chargingPark,availability:n}}}:void 0}catch(n){return void console.error(n)}};async function Ha(e,t){const n=[];for(const a of e.features){const e=await qa(a);e?n.push(e):t?.excludeIfAvailabilityUnknown||n.push(a)}return{...e,features:n,bbox:a(n)}}var Na=e=>Boolean(e&&"availability"in e&&e.availability),Ka=async(e,t)=>U(e,{...Xe,...t},"Geocode"),Va=async e=>{const t=await Ka({query:e,limit:1});if(!t.features[0])throw new Error(`geocodeOne: no results found for "${e}"`);return t.features[0]};async function _a(e,t){const n=await U(e,{...st,...t},"GeometryData");return Array.isArray(e.geometries)||"FeatureCollection"!==e.geometries.type?n:((e,t)=>{const n=e.features.reduce((e,t)=>{const n=t.properties.dataSources?.geometry?.id;return n&&(e[n]={...t.properties,placeCoordinates:t.geometry.coordinates}),e},{}),a=t.features.map(e=>e.id&&n[e.id]?{...e,properties:n[e.id]}:e);return{type:"FeatureCollection",bbox:t.bbox,features:a}})(e.geometries,n)}var $a=async(e,t)=>U(e,{...vt,...t},"PlaceById"),Ga=/* @__PURE__ */new Map,za=/* @__PURE__ */new Map,Ya="en-GB",Za=e=>e??Ya,Ja=e=>e.toLowerCase().replaceAll(/[\s\-_,]+/g,""),Qa=e=>{const t={};for(const n of e){const e=[n.name,...n.synonyms].map(Ja);for(const a of e)t[a]=n}return t},Xa=F.extend({filters:P.array(P.string()).optional()}),er=e=>{const t=T[e.id];return t?{code:t,name:e.name,childCategoryCodes:e.childCategoryIds.map(e=>T[e]).filter(e=>!!e),synonyms:e.synonyms}:(console.error(`Received unknown POI category ID ${e.id} (${e.name}). This category will be skipped and unavailable for filtering.`),null)},tr={requestValidation:{schema:Xa},buildRequest:e=>{const t=e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/poiCategories.json`,n=new URL(t);return ie(n.searchParams,e),n},getAPIVersion:()=>1,sendRequest:B,parseResponse:e=>({poiCategories:e.poiCategories.map(er).filter(e=>null!==e)})},nr=(e,t)=>{const n=(e=>za.get(e??Ya)??{})(e),a=/* @__PURE__ */new Map;for(const r of t){const e=Ja(r);for(const[t,r]of Object.entries(n))t.includes(e)&&r&&a.set(r.code,r)}for(const r of a.values())for(const e of r.childCategoryCodes)a.delete(e);return[...a.values()]},ar=async(e={})=>{const{language:t}=y(e);let n=(e=>Ga.get(Za(e)))(t);return n||(n=(await U(e,tr,"POICategories")).poiCategories,((e,t)=>{const n=Za(e);Ga.set(n,t),za.set(n,Qa(t))})(t,n)),e.filters?.length?{poiCategories:nr(t,e.filters)}:{poiCategories:n}},rr=async(e={})=>{const{poiCategories:t}=await ar(e);return t.map(e=>e.code)},or=async(e,t)=>U(e,{...Rn,...t},"Reachable Range"),ir=async(e,t,n)=>{const r=[];for(const a of e){t?.signal?.throwIfAborted();try{r.push(await or(a,n))}catch(i){if(!(i instanceof D)||403===i.status||429===i.status)throw i}}const o=a(r);return{type:"FeatureCollection",...o&&{bbox:o},features:r}},sr=async(e,t)=>U(e,{...xn,...t},"ReverseGeocode"),cr=async(e,t)=>U(e,{...ia,...t},"Routing"),pr=P.object({minFuzzyLevel:P.number().min(1).max(4).optional(),maxFuzzyLevel:P.number().min(1).max(4).optional()}),ur=Q.extend($e.extend(pr.shape).shape),lr=e=>{let t;switch(e.type){case"COORDINATE":t={...e,details:{position:ve(e.details)}};break;case"NEARBY":t={...e,details:{position:ve({lon:e.details.lon,lat:e.details.lat}),text:e.details.text,query:e.details.query}};break;case"BOOKMARK":case"W3W":t=e}return t},dr={requestValidation:{schema:ur},buildRequest:e=>{const t=new URL(`${(e=>e.customServiceBaseURL??`${e.commonBaseURL}/maps/orbis/places/search/${e.query??""}.json`)(e)}`);le(t,e);const n=t.searchParams;pe(n,"typeahead",e.typeahead),pe(n,"ofs",e.offset),ce(n,"countrySet",e.countries),pe(n,"radius",e.radiusMeters);const r=e.boundingBox&&a(e.boundingBox);return r&&(n.append("topLeft",ze([r[3],r[0]])),n.append("btmRight",ze([r[1],r[2]]))),pe(n,"minFuzzyLevel",e.minFuzzyLevel),pe(n,"maxFuzzyLevel",e.maxFuzzyLevel),t},sendRequest:B,parseResponse:e=>{const t=e.results.map(xe),n=r(a(t));return{type:"FeatureCollection",properties:{...we(e.summary),queryIntent:e.summary.queryIntent.map(lr)},features:t,...n&&{bbox:n}}}},mr=async(e,t)=>"route"in e?De(e,t):"geometries"in e?yt(e,t):(async(e,t)=>U(e,{...dr,...t},"FuzzySearch"))(e,t),gr=async e=>{const t=await mr({query:e,limit:1});if(!t.features[0])throw new Error(`searchOne: no results found for "${e}"`);return t.features[0]},yr=async(e,t)=>U(e,{...Ea,...t},"TrafficAreaAnalytics"),hr=async(e,t)=>U(e,{...Wa,...t},"TrafficIncidentDetails");export{L as APIErrorCode,A as SDKError,D as SDKServiceError,De as alongRouteSearch,We as autocompleteSearch,sn as budgetTypes,M as buildResponseError,O as buildValidationError,or as calculateReachableRange,ir as calculateReachableRanges,cr as calculateRoute,ja as customizeService,Ba as evChargingStationsAvailability,Ka as geocode,Va as geocodeOne,_a as geometryData,ar as getPOICategories,rr as getPOICategoryCodes,qa as getPlaceWithEVAvailability,Ha as getPlacesWithEVAvailability,Na as hasChargingAvailability,E as parseDefaultResponseError,$a as placeById,sr as reverseGeocode,He as routeTypes,mr as search,gr as searchOne,yr as trafficAreaAnalytics,hr as trafficIncidentDetails};
2
2
  //# sourceMappingURL=services.es.js.map