@tomtom-org/maps-sdk 0.47.0 → 0.47.2
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/CHANGELOG.md +20 -0
- package/core/dist/core.es.js +1 -1
- package/core/dist/core.es.js.map +1 -1
- package/core/dist/index.d.ts +113 -7
- package/map/dist/index.d.ts +533 -86
- package/map/dist/map.es.js +1 -1
- package/map/dist/map.es.js.map +1 -1
- package/package.json +1 -1
- package/services/dist/index.d.ts +292 -3
- package/services/dist/services.es.js +1 -1
- package/services/dist/services.es.js.map +1 -1
package/package.json
CHANGED
package/services/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AddressProperties } from '@tomtom-org/maps-sdk/core';
|
|
2
2
|
import { AreaAnalyticsMetricKey } from '@tomtom-org/maps-sdk/core';
|
|
3
3
|
import { Avoidable } from '@tomtom-org/maps-sdk/core';
|
|
4
|
+
import { BBox } from '@tomtom-org/maps-sdk/core';
|
|
4
5
|
import { ChargingPark } from '@tomtom-org/maps-sdk/core';
|
|
5
6
|
import { ChargingParkWithAvailability } from '@tomtom-org/maps-sdk/core';
|
|
6
7
|
import { ChargingStation } from '@tomtom-org/maps-sdk/core';
|
|
@@ -61,8 +62,8 @@ import { SideOfStreet } from '@tomtom-org/maps-sdk/core';
|
|
|
61
62
|
import { TimeZone } from '@tomtom-org/maps-sdk/core';
|
|
62
63
|
import { TomTomHeaders } from '@tomtom-org/maps-sdk/core';
|
|
63
64
|
import { TrafficAreaAnalytics } from '@tomtom-org/maps-sdk/core';
|
|
64
|
-
import { TrafficIncidentCategory } from '@tomtom-org/maps-sdk/core';
|
|
65
65
|
import { TrafficIncidentDetails } from '@tomtom-org/maps-sdk/core';
|
|
66
|
+
import { TrafficIncidentRequestCategory } from '@tomtom-org/maps-sdk/core';
|
|
66
67
|
import { TrafficIncidentTEC } from '@tomtom-org/maps-sdk/core';
|
|
67
68
|
import { TrafficIncidentTimeValidity } from '@tomtom-org/maps-sdk/core';
|
|
68
69
|
import { TravelMode } from '@tomtom-org/maps-sdk/core';
|
|
@@ -4048,6 +4049,283 @@ declare type ExplicitVehicleModel<E extends VehicleEngineType> = {
|
|
|
4048
4049
|
engine?: VehicleEngineModel<E>;
|
|
4049
4050
|
};
|
|
4050
4051
|
|
|
4052
|
+
/**
|
|
4053
|
+
* @ignore
|
|
4054
|
+
*/
|
|
4055
|
+
export declare type ExplorationBrandAPI = {
|
|
4056
|
+
id?: string;
|
|
4057
|
+
name: string;
|
|
4058
|
+
};
|
|
4059
|
+
|
|
4060
|
+
/**
|
|
4061
|
+
* @ignore
|
|
4062
|
+
*/
|
|
4063
|
+
export declare type ExplorationChargingParkAPI = {
|
|
4064
|
+
stationId?: string;
|
|
4065
|
+
connectors?: {
|
|
4066
|
+
id: string;
|
|
4067
|
+
}[];
|
|
4068
|
+
};
|
|
4069
|
+
|
|
4070
|
+
/**
|
|
4071
|
+
* @ignore
|
|
4072
|
+
*/
|
|
4073
|
+
export declare type ExplorationClassificationAPI = {
|
|
4074
|
+
code: string;
|
|
4075
|
+
name: string;
|
|
4076
|
+
};
|
|
4077
|
+
|
|
4078
|
+
/**
|
|
4079
|
+
* @ignore
|
|
4080
|
+
* Raw TomTom opening-hours payload. The API exposes the compact string form
|
|
4081
|
+
* (`raw`) plus the 24h flag; no parsed time ranges yet.
|
|
4082
|
+
*/
|
|
4083
|
+
export declare type ExplorationOpeningHoursAPI = {
|
|
4084
|
+
raw: string;
|
|
4085
|
+
is24h?: boolean;
|
|
4086
|
+
};
|
|
4087
|
+
|
|
4088
|
+
/**
|
|
4089
|
+
* @ignore
|
|
4090
|
+
* POI document fields nested under `poi` on each hit. The API strips
|
|
4091
|
+
* per-language name maps (`names`, `alternativeNames`) and the street
|
|
4092
|
+
* alternative-name map on the way out, so they are not modeled here.
|
|
4093
|
+
*/
|
|
4094
|
+
export declare type ExplorationPOIAPI = {
|
|
4095
|
+
name?: string;
|
|
4096
|
+
phone?: string;
|
|
4097
|
+
url?: string;
|
|
4098
|
+
brands?: ExplorationBrandAPI[];
|
|
4099
|
+
categorySet?: string[];
|
|
4100
|
+
classifications?: ExplorationClassificationAPI[];
|
|
4101
|
+
preferredCategoryId?: string;
|
|
4102
|
+
nearbyCategoryIds?: string[] | null;
|
|
4103
|
+
feature?: string;
|
|
4104
|
+
openingHours?: ExplorationOpeningHoursAPI;
|
|
4105
|
+
accessType?: string | null;
|
|
4106
|
+
outOfBusiness?: string | null;
|
|
4107
|
+
heavyVehicleCategories?: string[];
|
|
4108
|
+
timeZone?: TimeZone;
|
|
4109
|
+
};
|
|
4110
|
+
|
|
4111
|
+
/**
|
|
4112
|
+
* Record types the exploration search can return — POIs, standalone point
|
|
4113
|
+
* addresses, and street records. Matches the API's `types` filter vocabulary.
|
|
4114
|
+
*
|
|
4115
|
+
* @ignore
|
|
4116
|
+
* @experimental
|
|
4117
|
+
*/
|
|
4118
|
+
export declare type ExplorationRecordType = 'POI' | 'PointAddress' | 'Street';
|
|
4119
|
+
|
|
4120
|
+
/**
|
|
4121
|
+
* Search for places via the exploration places API.
|
|
4122
|
+
*
|
|
4123
|
+
* The exploration search service exposes the same input and output surface as
|
|
4124
|
+
* the existing {@link search} service, but targets the exploration places API
|
|
4125
|
+
* (POST `/places` with a JSON body) instead of the TomTom Search API.
|
|
4126
|
+
*
|
|
4127
|
+
* @remarks
|
|
4128
|
+
* Key features:
|
|
4129
|
+
* - **Fuzzy name match** via {@link ExplorationSearchParams.query}
|
|
4130
|
+
* - **Near filter** via `position` + `radiusMeters` (mapped to `near.coordinates` + `near.radius_km`)
|
|
4131
|
+
* - **Bounding box** via `boundingBox` (mapped to `bboxes`)
|
|
4132
|
+
* - **Geometries** via {@link ExplorationSearchParams.geometries} (Polygon,
|
|
4133
|
+
* MultiPolygon, Circle, or FeatureCollection — same shape as {@link geometrySearch})
|
|
4134
|
+
* - **Brand / category / country / municipalities** filters
|
|
4135
|
+
* - **Pagination** via `offset` / `limit` (mapped to `from` / `size`)
|
|
4136
|
+
*
|
|
4137
|
+
* @param params Exploration search parameters
|
|
4138
|
+
* @param customTemplate Advanced customization for request/response handling
|
|
4139
|
+
*
|
|
4140
|
+
* @returns Promise resolving to a collection of matching places, with the same
|
|
4141
|
+
* {@link SearchPlaceProps} shape used by the existing search service.
|
|
4142
|
+
*
|
|
4143
|
+
* @example
|
|
4144
|
+
* ```typescript
|
|
4145
|
+
* // Nearest restaurants to Dam Square
|
|
4146
|
+
* const results = await explorationSearch({
|
|
4147
|
+
* position: [4.9003, 52.3791],
|
|
4148
|
+
* radiusMeters: 5000,
|
|
4149
|
+
* poiCategories: ['RESTAURANT'],
|
|
4150
|
+
* limit: 10,
|
|
4151
|
+
* });
|
|
4152
|
+
*
|
|
4153
|
+
* // Inside a GeoJSON polygon
|
|
4154
|
+
* const inArea = await explorationSearch({
|
|
4155
|
+
* geometries: [{
|
|
4156
|
+
* type: 'Polygon',
|
|
4157
|
+
* coordinates: [[
|
|
4158
|
+
* [4.878, 52.364], [4.922, 52.364],
|
|
4159
|
+
* [4.922, 52.394], [4.878, 52.394],
|
|
4160
|
+
* [4.878, 52.364],
|
|
4161
|
+
* ]],
|
|
4162
|
+
* }],
|
|
4163
|
+
* poiCategories: ['RESTAURANT'],
|
|
4164
|
+
* });
|
|
4165
|
+
* ```
|
|
4166
|
+
*
|
|
4167
|
+
* @ignore
|
|
4168
|
+
* @experimental
|
|
4169
|
+
*/
|
|
4170
|
+
export declare const explorationSearch: (params: ExplorationSearchParams, customTemplate?: Partial<ExplorationSearchTemplate>) => Promise<ExplorationSearchResponse>;
|
|
4171
|
+
|
|
4172
|
+
/**
|
|
4173
|
+
* Parameters for the exploration search service.
|
|
4174
|
+
*
|
|
4175
|
+
* Mirrors the input surface of the existing {@link search} service, with two
|
|
4176
|
+
* extra filters exposed by the exploration places API (`municipalities` and
|
|
4177
|
+
* `geometries`).
|
|
4178
|
+
*
|
|
4179
|
+
* @remarks
|
|
4180
|
+
* **Mapping to the places API body:**
|
|
4181
|
+
* - `query` → `q`
|
|
4182
|
+
* - `countries[0]` → `country`
|
|
4183
|
+
* - `poiBrands[0]` → `brand`
|
|
4184
|
+
* - `poiCategories` → `categories` (mapped to TomTom numeric category ids)
|
|
4185
|
+
* - `position` + `radiusMeters` → `near.coordinates` + `near.radius_km`
|
|
4186
|
+
* - `boundingBox` / `boundingBoxes` → `bboxes`
|
|
4187
|
+
* - `geometries` → `geometries` (Polygon/MultiPolygon passed through; Circle
|
|
4188
|
+
* buffered to a Polygon; FeatureCollection flattened to its features)
|
|
4189
|
+
* - `municipalities` → `municipalities`
|
|
4190
|
+
* - `offset` → `from`
|
|
4191
|
+
* - `limit` → `size`
|
|
4192
|
+
*
|
|
4193
|
+
* @ignore
|
|
4194
|
+
* @experimental
|
|
4195
|
+
*/
|
|
4196
|
+
export declare type ExplorationSearchParams = CommonSearchParams<ExplorationSearchRequestAPI, ExplorationSearchResponseAPI> & CommonGeocodeAndFuzzySearchParams & {
|
|
4197
|
+
/**
|
|
4198
|
+
* Geographic position to restrict results around.
|
|
4199
|
+
*
|
|
4200
|
+
* Combined with {@link radiusMeters} this maps to the API's `near` filter.
|
|
4201
|
+
* Accepts any {@link HasLngLat}-compatible value — a `[lon, lat]` tuple,
|
|
4202
|
+
* a GeoJSON `Point`, or a `Feature<Point>`.
|
|
4203
|
+
*/
|
|
4204
|
+
position?: HasLngLat;
|
|
4205
|
+
/**
|
|
4206
|
+
* Exact, case-sensitive municipality/city filters (e.g. `['Amsterdam', 'Utrecht']`).
|
|
4207
|
+
*/
|
|
4208
|
+
municipalities?: string[];
|
|
4209
|
+
/**
|
|
4210
|
+
* Additional bounding boxes to restrict results to.
|
|
4211
|
+
*
|
|
4212
|
+
* Merged with {@link boundingBox} and sent as the API's `bboxes` array.
|
|
4213
|
+
*/
|
|
4214
|
+
boundingBoxes?: HasBBox[];
|
|
4215
|
+
/**
|
|
4216
|
+
* Geometries to constrain results to. Accepts the same input shapes as
|
|
4217
|
+
* {@link GeometrySearchParams.geometries} — `Polygon`, `MultiPolygon`,
|
|
4218
|
+
* `Circle`, or `PolygonFeatures`. POIs whose position lies inside any
|
|
4219
|
+
* provided shape are returned.
|
|
4220
|
+
*
|
|
4221
|
+
* Circles are buffered into polygons before being sent to the API.
|
|
4222
|
+
*/
|
|
4223
|
+
geometries?: SearchGeometryInput[];
|
|
4224
|
+
/**
|
|
4225
|
+
* Restrict the response to specific record types. Defaults to all types.
|
|
4226
|
+
*
|
|
4227
|
+
* - `'POI'` — points of interest (businesses, landmarks, amenities)
|
|
4228
|
+
* - `'PointAddress'` — standalone street addresses with building numbers
|
|
4229
|
+
* - `'Street'` — street records (no building number)
|
|
4230
|
+
*
|
|
4231
|
+
* Example: `placeTypes: ['POI', 'PointAddress']` to exclude Street records.
|
|
4232
|
+
*/
|
|
4233
|
+
placeTypes?: ExplorationRecordType[];
|
|
4234
|
+
};
|
|
4235
|
+
|
|
4236
|
+
/**
|
|
4237
|
+
* @ignore
|
|
4238
|
+
*/
|
|
4239
|
+
export declare type ExplorationSearchPayloadAPI = {
|
|
4240
|
+
q?: string;
|
|
4241
|
+
country?: string;
|
|
4242
|
+
municipalities?: string[];
|
|
4243
|
+
brand?: string;
|
|
4244
|
+
categories?: string[];
|
|
4245
|
+
types?: ExplorationRecordType[];
|
|
4246
|
+
near?: NearAPI;
|
|
4247
|
+
bboxes?: BBox[];
|
|
4248
|
+
geometries?: (Polygon | MultiPolygon)[];
|
|
4249
|
+
from?: number;
|
|
4250
|
+
size?: number;
|
|
4251
|
+
};
|
|
4252
|
+
|
|
4253
|
+
/**
|
|
4254
|
+
* Exploration search request type.
|
|
4255
|
+
* @ignore
|
|
4256
|
+
*/
|
|
4257
|
+
export declare type ExplorationSearchRequestAPI = PostObject<ExplorationSearchPayloadAPI>;
|
|
4258
|
+
|
|
4259
|
+
/**
|
|
4260
|
+
* Response from the exploration search service.
|
|
4261
|
+
*
|
|
4262
|
+
* Matches the shape produced by {@link search} — a `FeatureCollection` of
|
|
4263
|
+
* place features with search-specific properties (`score`, `distance`) and a
|
|
4264
|
+
* {@link SearchSummary} on the collection.
|
|
4265
|
+
*
|
|
4266
|
+
* @ignore
|
|
4267
|
+
* @experimental
|
|
4268
|
+
*/
|
|
4269
|
+
export declare type ExplorationSearchResponse = Places<SearchPlaceProps, SearchSummary>;
|
|
4270
|
+
|
|
4271
|
+
/**
|
|
4272
|
+
* @ignore
|
|
4273
|
+
* Envelope response shape — `total` is capped at 10000 even when more records match.
|
|
4274
|
+
*/
|
|
4275
|
+
export declare type ExplorationSearchResponseAPI = {
|
|
4276
|
+
total: number;
|
|
4277
|
+
hits: ExplorationSearchResultAPI[];
|
|
4278
|
+
};
|
|
4279
|
+
|
|
4280
|
+
/**
|
|
4281
|
+
* @ignore
|
|
4282
|
+
* Hit shape shared across record types. API metadata (`id`, `score`,
|
|
4283
|
+
* `distance_m`, `address`, `position`) sits at the top level; POI document
|
|
4284
|
+
* fields are nested under `poi` on `type === 'POI'` hits. Positions are
|
|
4285
|
+
* GeoJSON `[lon, lat]` arrays (the API normalizes OpenSearch's `{lat, lon}`
|
|
4286
|
+
* storage form on the way out).
|
|
4287
|
+
*
|
|
4288
|
+
* Field presence by record type:
|
|
4289
|
+
* - `poi` — POI records only
|
|
4290
|
+
* - `viewport` — Street records only (envelope of the street extent)
|
|
4291
|
+
* - `address.entryPoint` — PointAddress records only
|
|
4292
|
+
*/
|
|
4293
|
+
export declare type ExplorationSearchResultAPI = {
|
|
4294
|
+
id: string;
|
|
4295
|
+
score?: number;
|
|
4296
|
+
distance_m?: number;
|
|
4297
|
+
type?: ExplorationRecordType;
|
|
4298
|
+
dataSource?: string;
|
|
4299
|
+
sourceId?: string;
|
|
4300
|
+
country_code?: string;
|
|
4301
|
+
aliasIds?: string[];
|
|
4302
|
+
address?: AddressProperties & {
|
|
4303
|
+
entryPoint?: string;
|
|
4304
|
+
};
|
|
4305
|
+
position: Position;
|
|
4306
|
+
viewport?: ExplorationViewportAPI;
|
|
4307
|
+
vehicleTypes?: string[];
|
|
4308
|
+
chargingPark?: ExplorationChargingParkAPI;
|
|
4309
|
+
placeId?: string;
|
|
4310
|
+
adminChainId?: string;
|
|
4311
|
+
poi?: ExplorationPOIAPI;
|
|
4312
|
+
};
|
|
4313
|
+
|
|
4314
|
+
/**
|
|
4315
|
+
* Exploration search service template type.
|
|
4316
|
+
* @ignore
|
|
4317
|
+
*/
|
|
4318
|
+
declare type ExplorationSearchTemplate = ServiceTemplate<ExplorationSearchParams, ExplorationSearchRequestAPI, ExplorationSearchResponseAPI, ExplorationSearchResponse>;
|
|
4319
|
+
|
|
4320
|
+
/**
|
|
4321
|
+
* @ignore
|
|
4322
|
+
* Envelope bounding box on Street records — two corner `[lon, lat]` positions.
|
|
4323
|
+
*/
|
|
4324
|
+
export declare type ExplorationViewportAPI = {
|
|
4325
|
+
type: 'envelope';
|
|
4326
|
+
coordinates: [Position, Position];
|
|
4327
|
+
};
|
|
4328
|
+
|
|
4051
4329
|
/**
|
|
4052
4330
|
* Extended route representation options.
|
|
4053
4331
|
*
|
|
@@ -5595,6 +5873,14 @@ declare type MomentAPI = {
|
|
|
5595
5873
|
minute: number;
|
|
5596
5874
|
};
|
|
5597
5875
|
|
|
5876
|
+
/**
|
|
5877
|
+
* @ignore
|
|
5878
|
+
*/
|
|
5879
|
+
export declare type NearAPI = {
|
|
5880
|
+
coordinates: Position;
|
|
5881
|
+
radius_km: number;
|
|
5882
|
+
};
|
|
5883
|
+
|
|
5598
5884
|
/**
|
|
5599
5885
|
* Intent indicating a proximity-based search.
|
|
5600
5886
|
*
|
|
@@ -7945,7 +8231,10 @@ declare type TrafficIncidentDetailsBaseParams = CommonServiceParams & {
|
|
|
7945
8231
|
* Filter results to specific incident categories.
|
|
7946
8232
|
*
|
|
7947
8233
|
* @remarks
|
|
7948
|
-
* Provide {@link
|
|
8234
|
+
* Provide {@link TrafficIncidentRequestCategory} values to include. When omitted,
|
|
8235
|
+
* all filterable categories are returned. `'animals-on-road'` and `'narrow-lanes'`
|
|
8236
|
+
* are intentionally not accepted here — the upstream API documents them as
|
|
8237
|
+
* response-only and rejects the whole filter when they appear.
|
|
7949
8238
|
*
|
|
7950
8239
|
* @example
|
|
7951
8240
|
* ```typescript
|
|
@@ -7953,7 +8242,7 @@ declare type TrafficIncidentDetailsBaseParams = CommonServiceParams & {
|
|
|
7953
8242
|
* categoryFilter: ['accident', 'road-closed']
|
|
7954
8243
|
* ```
|
|
7955
8244
|
*/
|
|
7956
|
-
categoryFilter?:
|
|
8245
|
+
categoryFilter?: TrafficIncidentRequestCategory[];
|
|
7957
8246
|
/**
|
|
7958
8247
|
* Filter incidents by their temporal validity.
|
|
7959
8248
|
*
|
|
@@ -1,2 +1,2 @@
|
|
|
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};
|
|
1
|
+
import{areaAnalyticsMetricKeys as e,avoidableTypes as t,bboxFromCoordsArray as n,bboxFromGeoJSON as r,bboxOnlyIfWithArea as a,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 R,toPointGeometry as T,trafficIncidentRequestCategories as v,trafficIncidentToIconCategory as S,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,r){super(t),this.service=n,this.issues=r,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])}},M=(e,t)=>{const{data:n,message:r,status:a}=e;return new D(n?.error||n?.errorText||r,t,a)},E=(e,t,n)=>{if(e.status){const r=e;return n?n(r,t):M(r,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 r=t.getAPIVersion?.(e),a=y({...e,...r&&{apiVersion:r}});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 r of t.refinements)r.check(e)||n.addIssue({code:"custom",message:r.message})}).safeParse(e);if(!n.success)throw new k(n.error)})(a,t.requestValidation)}catch(c){throw O(c,n)}const o=t.buildRequest(a),i=s(a);e.onAPIRequest?.(o);try{const n=await t.sendRequest(o,i);return e.onAPIResponse?.(o,n),t.parseResponse(await n.data,a)}catch(c){throw e.onAPIResponse?.(o,c),E(c,n,t.parseResponseError)}},B=class e extends Error{constructor(t,n,r){super(n??`HTTP Error ${t}`),this.name="FetchError",this.status=t,this.data=r,Error.captureStackTrace&&Error.captureStackTrace(this,e)}},j=async e=>{if(e.ok)return{data:await e.json(),status:e.status};let t,n;const r=e.headers.get("content-type");throw e.bodyUsed?t=e.statusText:r?.includes("application/json")?(n=await e.json(),t=n?.errorText??n?.message??n?.detailedError?.message):r?.includes("text/xml")&&(n=await e.text(),t=e.statusText),new B(e.status,t,n)},W=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"}})),N=async(e,t)=>{const n=e.method;if("GET"===n)return W(e.url,t);if("POST"===n)return q(e,t);throw new Error(`Unsupported HTTP method received: ${n}`)},H=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()),H,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:H}),ee=P.object({type:P.literal("Feature"),geometry:X}),te=H,ne=P.union([X,ee,te]),re=P.object({route:ne,maxDetourTimeSeconds:P.number().int().positive()}),ae=P.object({sortBy:P.enum(["detourTime","detourOffset"]).optional()}),oe=Q.extend({...re.shape,...ae.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 r of n||[])e.append(t,r)},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:(r=e.route,Array.isArray(r)?{type:"LineString",coordinates:r}:"Feature"===r.type?r.geometry:r).coordinates.map(e=>({lat:e[1],lon:e[0]}))}}};var r},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 r of e){const e=n.find(e=>ge(r,e.connector));if(e){if(e.count++,t){const n=e.statusCounts;e.statusCounts[t]=(n[t]||0)+1}}else n.push({connector:r,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",Re=e=>{const t=e.split(",");return[Number(t[1]),Number(t[0])]},Te=e=>`${e[1]},${e[0]}`,ve=e=>{let t,n;return void 0!==e.topLeftPoint?(t=[e.topLeftPoint.lon,e.btmRightPoint.lat],n=[e.btmRightPoint.lon,e.topLeftPoint.lat]):(t=Re(e.southWest),n=Re(e.northEast)),[t[0],t[1],n[0],n[1]]},Se=e=>[e.lon,e.lat],Ce=e=>{const{year:t,month:n,day:r}=(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:r,hour:e.hour,minute:e.minute,date:new Date(t,n-1,r,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:r,id:a,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:T(Se(t)),...i&&{bbox:ve(i)},id:a,properties:{...x(c,"viewport"),...o&&{distance:o},...n?.length&&{entryPoints:n.map(e=>({...e,position:Se(e.position)}))},...p?.length&&{chargingPark:{...s,connectors:he(p)}},...r&&{poi:{name:r.name,categories:(r.categorySet?.map(e=>R[e.id])??[]).filter(e=>!!e),localizedCategories:r.categories??[],...r.phone&&{phone:r.phone},...r.brands&&{brands:r.brands.map(e=>e.name)},...r.url&&{url:r.url},...r.openingHours&&{openingHours:Ie(r.openingHours)},...r.timeZone&&{timeZone:r.timeZone}}}}}},we=e=>{const{geoBias:t,...n}=e;return{...t&&{geoBias:Se(t)},...n}},Ae=e=>{const t=e.results.map(xe),n=a(r(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"),Me=P.object({query:P.string()}),Ee=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=Me.extend(Ee.shape),Fe=e=>{const t=new URL(`${n=e,n.customServiceBaseURL||`${n.commonBaseURL}/maps/orbis/places/autocomplete/${n.query}.json`}`);var n;const r=t.searchParams;return e.language=e.language??"en-GB",ie(r,e),pe(r,"limit",e.limit),ue(r,e.position),ce(r,"countrySet",e.countries),pe(r,"radius",e.radiusMeters),ce(r,"resultSet",e.resultType),t},ke=e=>{const{position:t,...n}=e.context.geoBias||{};return{context:{...e.context,geoBias:{...t&&{position:Se(t)},radiusMeters:n.radius}},results:(r=e.results,r.map(e=>({segments:e.segments.map(e=>{if((e=>"category"===e.type)(e)){const{id:t,...n}=e;return{...n,category:R[Number(t)]}}return e})})))};var r},Ue={requestValidation:{schema:Oe},buildRequest:Fe,sendRequest:W,parseResponse:ke},Be=async(e,t)=>U(e,{...Ue,...t},"Autocomplete"),je={alongRouteSearch:De,buildAlongRouteSearchRequest:de,parseAlongRouteSearchResponse:Ae,alongRouteSearchTemplate:Le},We={autocompleteSearch:Be,buildAutocompleteSearchRequest:Fe,parseAutocompleteSearchResponse:ke,autocompleteSearchTemplate:Ue},qe=F.extend({id:P.string()}),Ne=["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 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:He,sendRequest:W,parseResponse:Ke,parseResponseError:(e,t)=>new D(e.data?.detailedError?.message??e.message,t,e.status)},_e={buildEVChargingStationsAvailabilityRequest:He,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 r=[];let a;const o=Math.ceil(n/t);for(a=0;a<n;a+=o)r.push(e[a]);return t>1&&a>=n-o&&(r.length<t?r.push(e[n-1]):r[r.length-1]=e[n-1]),r},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 a=e.boundingBox&&r(e.boundingBox);return a&&(n.append("topLeft",ze([a[3],a[0]])),n.append("btmRight",ze([a[1],a[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:r,entryPoints:a,addressRanges:o,entityType:i,id:s,...c}=e;return{type:"Feature",geometry:T(Se(t)),...n&&{bbox:ve(n)},id:s,properties:{...x(c,"viewport"),...r&&{distance:r},...i&&{geographyType:i.split(",")},...a&&{entryPoints:a.map(e=>({...e,position:Se(e.position)}))},...o&&{addressRanges:{...o,from:Se(o.from),to:Se(o.to)}}}}},Qe=e=>{const t=e.results.map(Je),n=a(r(t));return{type:"FeatureCollection",features:t,...n&&{bbox:n}}},Xe={requestValidation:{schema:Ge},buildRequest:Ze,sendRequest:W,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()}),rt=tt.extend(nt.shape),at=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:at(t):at(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:r(e.geometry)}))).filter(e=>e);return{type:"FeatureCollection",bbox:r(t),features:t}},st={requestValidation:{schema:rt},buildRequest:ot,sendRequest:W,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:Te(e.coordinates)}];case"Polygon":return[{type:"POLYGON",vertices:Ye(e.coordinates[0],50).map(e=>Te(e))}];case"MultiPolygon":return e.coordinates.length>50?(e=>{let t=/* @__PURE__ */new Map;return e.coordinates.forEach(e=>{const r=n(e[0]);if(r){const n=Math.abs((r[2]-r[0])*(r[3]-r[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=a(r(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()}),Rt=ft.extend(bt.shape),Tt=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},vt=e=>e.results?.length?xe(e.results[0]):void 0,St={requestValidation:{schema:Rt},buildRequest:Tt,sendRequest:W,parseResponse:vt},Ct={buildPlaceByIdRequest:Tt,parsePlaceByIdResponse:vt,placeByIdTemplate:St},Pt=(e,t)=>{const{data:n,message:r,status:a}=e;return new D(n?.error?.description??n?.detailedError?.message??r,t,a)},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(),Mt=P.object({speedKMH:P.number(),consumptionUnitsPer100KM:P.number()}),Et={efficiency:P.object({acceleration:Dt,deceleration:Dt,uphill:Dt,downhill:Dt}).optional()},Ot=P.array(Mt).min(1).max(25),Ft=P.object({...Et,speedsToConsumptionsLiters:Ot,auxiliaryPowerInLitersPerHour:Lt,fuelEnergyDensityInMJoulesPerLiter:P.number().min(1).optional()}),kt=P.object({...Et,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()}),Bt=P.object({stateOfChargeInkWh:xt,maxPowerInkW:It}),jt=P.object({maxChargeKWH:It,batteryCurve:P.array(Bt).max(20).optional(),chargingConnectors:P.array(Ut).min(1).optional(),chargingTimeOffsetInSec:Lt}),Wt=P.object({consumption:Ft}),qt=P.object({consumption:kt,charging:jt.optional()}),Nt=P.object({lengthMeters:At,widthMeters:At,heightMeters:At,weightKG:At,axleWeightKG:At}).optional(),Ht=P.object({variantId:P.string()}),Kt=P.object({dimensions:Nt,engine:P.union([Wt,qt]).optional()}),Vt=P.union([Ht,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()}),rn=P.object({...en,engineType:P.literal("electric"),state:Yt.optional(),preferences:Xt.optional()}),an=P.union([P.discriminatedUnion("engineType",[nn,rn]),tn]),on=P.object({costModel:P.object({avoid:P.array(P.enum(t)).optional(),traffic:P.enum(["live","historical"]).optional(),routeType:P.enum(Ne).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:an.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,r=n,a=n;if(r.currentChargeInkWh)e.append("currentChargeInkWh",String(r.currentChargeInkWh));else if(a.currentChargePCT&&t.model&&"engine"in t.model&&t.model.engine){const n=t.model.engine.charging?.maxChargeKWH;n&&e.append("currentChargeInkWh",String(n*a.currentChargePCT/100))}}})(e,t),((e,t)=>{if(t.preferences&&"engineType"in t&&"electric"===t.engineType){const n=t.preferences;if(n.chargingPreferences){const r=n.chargingPreferences,a=r,o=r;if(a.minChargeAtChargingStopsInkWh||a.minChargeAtDestinationInkWh)e.append("minChargeAtDestinationInkWh",String(a.minChargeAtDestinationInkWh)),e.append("minChargeAtChargingStopsInkWh",String(a.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 r=hn(t);null!=r&&e.append("energyBudgetInkWh",(r*n.value/100).toString());break}case"remainingChargeCPT":{const r=(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),a=hn(t);if(null!=a&&null!=r){const t=a*n.value/100;e.append("energyBudgetInkWh",Math.max(0,r-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)),r=n.searchParams;return ie(r,e),r.delete("language"),yn(r,e),fn(r,e),pe(r,"maxFerryLengthInMeters",e.maxFerryLengthMeters),pe(r,"smoothing",e.smoothing??"strong"),{method:"GET",url:n}},Rn=(e,t)=>{const n={type:"Polygon",coordinates:[e.reachableRange.boundary.map(e=>[e.longitude,e.latitude])]};return{type:"Feature",geometry:n,bbox:r(n),properties:t}},Tn={requestValidation:{schema:un},buildRequest:bn,sendRequest:N,parseResponse:Rn,parseResponseError:Pt,getAPIVersion:()=>2},vn={buildReachableRangeRequest:bn,parseReachableRangeResponse:Rn,reachableRangeTemplate:Tn},Sn=e=>{const t=p(e.position),n=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/places/reverseGeocode`)(e)}/${t[1]},${t[0]}.json`),r=n.searchParams;return ie(r,e),e.allowFreeformNewline&&r.append("allowFreeformNewline",String(e.allowFreeformNewline)),e.geographyType&&r.append("entityType",ze(e.geographyType)),!I(e.heading)&&r.append("heading",String(e.heading)),e.mapcodes&&r.append("mapcodes",ze(e.mapcodes)),e.number&&r.append("number",e.number),!I(e.radiusMeters)&&r.append("radius",String(e.radiusMeters)),e.returnSpeedLimit&&r.append("returnSpeedLimit",String(e.returnSpeedLimit)),e.returnRoadUse&&r.append("returnRoadUse",String(e.returnRoadUse)),e.roadUses&&r.append("roadUse",JSON.stringify(e.roadUses)),n},Cn=(e,t)=>{const n=e.addresses[0],{boundingBox:r,sideOfStreet:a,offsetPosition:o,...s}=n?.address||{};return{type:"Feature",geometry:T(p(t.position)),...r&&{bbox:ve(r)},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},...a&&{sideOfStreet:a},...o&&{offsetPosition:Re(o)},originalPosition:Re(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:Sn,sendRequest:W,parseResponse:Cn},wn={buildRevGeoRequest:Sn,parseRevGeoResponse:Cn,reverseGeocodingTemplate:xn},An=P.union([$,K]),Ln=P.union([H,V]),Dn=P.object({locations:P.array(P.union([An,Ln])).min(1)}),Mn=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()}),En=on.extend(Dn.extend(Mn.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=Te(p(e,{useEntryPoint:t})),r=(e=>e.properties||null)(e)?.radiusMeters;return r?`circle(${n},${r})`:n}).join(":"))(t.includes("path")?((e,t,n)=>{let r;const a=e[0];r="path"===t[0]?Fn(a)[0]:p(a,{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[r,i]})(e,t,n):e,n),Un=e=>({latitude:e[1],longitude:e[0]}),Bn=(e,t,n)=>{const r=[],a=[];return e.forEach((o,i)=>{"path"===t[i]?((e,t,n,r,a)=>{const o=r.length;for(const i of Fn(e))r.push(Un(i));Array.isArray(e)||(e.properties.sections.leg.forEach((e,n)=>{(t>0||n>0)&&a.push({supportingPointIndex:o+e.startPointIndex,waypointSourceType:"USER_DEFINED"})}),t<n.length-1&&a.push({supportingPointIndex:o+e.geometry.coordinates.length-1,waypointSourceType:"USER_DEFINED"}))})(o,i,e,r,a):((e,t,n,r,a,o)=>{r.push(Un(p(e,{useEntryPoint:o}))),t>0&&t<n.length-1&&a.push({supportingPointIndex:r.length-1,waypointSourceType:"USER_DEFINED"})})(o,i,e,r,a,n)}),{supportingPoints:r,...a.length&&{pointWaypoints:a}}},jn=e=>({rectangles:e.map(e=>{const t=r(e);if(!t)throw new Error("Could not derive a bounding box from an avoidAreas rectangle");const[n,a,o,i]=t;return{southWestCorner:{latitude:a,longitude:n},northEastCorner:{latitude:i,longitude:o}}})}),Wn=e=>{const t=e.locations.map(u),n=e.useEntryPoints??"main-when-available",r=new URL(`${(e=>e.customServiceBaseURL||`${e.commonBaseURL}/maps/orbis/routing/${On(e)?"calculateLongDistanceEVRoute":"calculateRoute"}`)(e)}/${kn(e.locations,t,n)}/json`),a=r.searchParams;ie(a,e),"language"in e||a.append("language","en-GB"),yn(a,e),pe(a,"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")}})(a,e),!I(e.maxAlternatives)&&a.append("maxAlternatives",String(e.maxAlternatives)),((e,t,n)=>{se(e,"sectionType",(t??(n?g:m)).map(e=>"vehicleRestricted"===e?"travelMode":e))})(a,e.sectionTypes,!!e.guidance?.type);for(const i of e.extendedRouteRepresentations??["distance","travelTime"])a.append("extendedRouteRepresentation",i);const o=((e,t,n)=>{const r=t.includes("path"),a=!!On(e),o=e.costModel?.avoidAreas;if(!r&&!a&&!o)return null;const i=(e.vehicle?.model)?.engine?.charging;return{...r&&Bn(e.locations,t,n),...a&&i&&{chargingParameters:x(i,"maxChargeKWH")},...o?.length&&{avoidAreas:jn(o)}}})(e,t,n);return o?{method:"POST",url:r,data:o}:{method:"GET",url:r}},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}},Nn=(e,t)=>{const n=e.chargingConnectionInfo,r=e.chargingParkLocation,a=[r.coordinate.longitude,r.coordinate.latitude],o=[r.street,r.houseNumber].filter(Boolean),i=o.length>0?o.join(", "):"";return{type:"Feature",id:e.chargingParkId,geometry:{type:"Point",coordinates:a},properties:{...x(e,["chargingConnectionInfo","chargingParkLocation"]),type:"POI",address:{freeformAddress:i,...r.street&&{streetName:r.street},...r.houseNumber&&{streetNumber:r.houseNumber},...r.city&&{municipality:r.city},...r.region&&{countrySubdivision:r.region},...r.postalCode&&{postalCode:r.postalCode},...r.country&&{country:r.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)}}}},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:Nn(e.chargingInformationAtEndOfLeg,n)}}},Kn=(e,t)=>e.reduce((e,n,r)=>{const a=0===r?0:e[r-1]?.endPointIndex;let o;return I(a)||(o=0===a?n.points?.length>0?n.points.length-1:0:a+n.points?.length),e.push({...!I(a)&&{startPointIndex:a},...o&&{endPointIndex:o},summary:Hn(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]),er=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}}},tr=(e,t)=>{const n={leg:Kn(e.legs,t)};return((e,t)=>{if(Array.isArray(e))for(const n of e){const e=er(n),r=e?.mappingFunction(n);r&&Xn(e.sectionType,t).push(r)}})(e.sections,n),n},nr=1e-4,rr=(e,t)=>Math.abs(e[0]-t[0])<nr&&Math.abs(e[1]-t[1])<nr,ar=(e,t)=>{const n=[];let r=0;for(const a of e.instructions){const e=[a.maneuverPoint.longitude,a.maneuverPoint.latitude];for(let n=r;n<t.length;n++){if(rr(t[n],e)){r=n;break}if(n===t.length-1)break}n.push({...a,maneuverPoint:e,pathPointIndex:r,routePath:a.routePath.map(e=>({...e,point:[e.point.longitude,e.point.latitude]}))})}return{instructions:n}},or=(e,t)=>{const n=e.routes.map((e,n)=>((e,t,n)=>{const a={type:"LineString",coordinates:e.legs.flatMap(e=>e.points?.map(e=>[e.longitude,e.latitude]))};return{type:"Feature",geometry:a,id:i(),bbox:r(a),properties:{index:t,summary:Hn(e.summary,n),sections:tr(e,n),...e.guidance&&{guidance:ar(e.guidance,a.coordinates)},...e.progress&&{progress:e.progress}}}})(e,n,t)),a=r(n);return{type:"FeatureCollection",...a&&{bbox:a},features:n}},ir={requestValidation:{schema:En,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:Wn,sendRequest:N,parseResponse:or,parseResponseError:Pt,getAPIVersion:()=>2},sr={buildCalculateRouteRequest:Wn,parseCalculateRouteResponse:or,calculateRouteTemplate:ir},cr=["MOTORWAY","MAJOR_ROAD","OTHER_MAJOR_ROAD","SECONDARY_ROAD","LOCAL_CONNECTING_ROAD","LOCAL_ROAD_HIGH_IMPORTANCE","LOCAL_ROAD","LOCAL_ROAD_MINOR_IMPORTANCE","OTHER_ROAD"],pr={speed:"SPEED",freeFlowSpeed:"FREE_FLOW_SPEED",congestionLevel:"CONGESTION_LEVEL",travelTime:"TRAVEL_TIME",networkLength:"NETWORK_LENGTH"},ur=e=>e instanceof Date?e.toISOString().slice(0,10):e,lr=Array.from({length:24},(e,t)=>t),dr=e=>cr.indexOf(e),mr=t=>{const n=new URL((e=>e.customServiceBaseURL??`${e.commonBaseURL}/areaanalytics/reports/lite`)(t));ie(n.searchParams,t);const r=e=>{const t=/* @__PURE__ */new Date;return t.setDate(t.getDate()-e),t},a=Array.isArray(t.days)?{days:t.days.map(ur)}:{startDate:ur(t.startDate??r(3)),endDate:ur(t.endDate??r(2))};return{method:"POST",url:n,data:{name:t.name??`Maps SDK JS Area Analytics Report ${/* @__PURE__ */(new Date).toISOString()}`,...a,dataTypes:"all"===t.metrics?e.map(e=>pr[e]):t.metrics.map(e=>pr[e]),frcs:"all"===t.functionalRoadClasses?cr.map((e,t)=>t):t.functionalRoadClasses.map(dr),hours:"all"===t.hours?lr:t.hours,features:[{type:"Feature",geometry:t.geometry}]}}},gr=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}}),yr=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},...gr(e)}),hr=(e,t)=>{const n=new Date(e);return n.setDate(n.getDate()+t),n},fr=(e,t)=>e.map((e,n)=>{const r=yr(e);return void 0===r.date&&(r.date=hr(t,Math.floor(n/24))),void 0===r.hour&&(r.hour=n%24),r}),br=(e,t)=>e.map((e,n)=>{const r=yr(e);return void 0===r.date&&(r.date=hr(t,n)),r}),Rr=e=>({tileCentre:[e.lon,e.lat],...gr(e)}),Tr=e=>({startDate:new Date(e.startDate),endDate:new Date(e.endDate),labels:e.labels}),vr=(e,t)=>{return{...e.yearly&&{yearly:e.yearly.map(yr)},...e.monthly&&{monthly:e.monthly.map(yr)},...e.weekly&&{weekly:e.weekly.map(yr)},...e.daily&&{daily:br(e.daily,t)},...e.hourly&&{hourly:fr(e.hourly,t)},...e.average&&{average:(n=e.average,n.map((e,t)=>{const n=yr(e);return void 0===n.day&&(n.day=Math.floor(t/24)+1),void 0===n.hour&&(n.hour=t%24),n}))}};var n},Sr={SPEED:"speed",FREE_FLOW_SPEED:"freeFlowSpeed",CONGESTION_LEVEL:"congestionLevel",TRAVEL_TIME:"travelTime",NETWORK_LENGTH:"networkLength"},Cr=e=>{const t={};for(const[n,r]of Object.entries(e)){const e=Sr[n];e&&(t[e]=r.map(Tr))}return t},Pr=(e,t)=>({name:e.name,timezone:e.timezone,level:e.level,baseData:gr(e.baseData),timedData:vr(e.timedData,t),...e.tiledData&&{tiledData:{tiles:e.tiledData.tiles.map(Rr)}},...e.anomalies&&{anomalies:Cr(e.anomalies)}}),Ir=t=>{const n=t.flatMap(e=>e.properties.tiledData?.tiles??[]),r={};for(const a of e){const e=n.map(e=>e[a]).filter(e=>null!=e);e.length>0&&(r[a]={min:Math.min(...e),max:Math.max(...e)})}return r},xr=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:Pr(e.properties,t),bbox:r(e.geometry)}))(e,t));return{type:"FeatureCollection",properties:{startDate:t,endDate:new Date(e.properties.endDate),metrics:e.properties.dataTypes.map(e=>Sr[e]).filter(e=>void 0!==e),heatmap:e.properties.heatmap,frcs:e.properties.frcs,ranges:Ir(n)},features:n}},wr=P.union([P.date(),P.string().regex(/^\d{4}-\d{2}-\d{2}$/,"Date must be in 'YYYY-MM-DD' format")]),Ar=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)})]),Lr=e=>e instanceof Date?e:new Date(e),Dr=e=>{const t=/* @__PURE__ */new Date,n=Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate());return(e=>{const t=Lr(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())})(e)<=n-1728e5},Mr={requestValidation:{schema:F.extend({name:P.string().optional(),startDate:wr.optional(),endDate:wr.optional(),days:P.array(wr).min(1).optional(),metrics:P.union([P.array(P.enum([...e])).min(1),P.literal("all")]),functionalRoadClasses:P.union([P.array(P.enum([...cr])).min(1),P.literal("all")]),hours:P.union([P.array(P.number().int().min(0).max(23)).min(1),P.literal("all")]),geometry:Ar}).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?Lr(e.endDate):/* @__PURE__ */new Date).getTime()-Lr(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(Dr):Dr(e.endDate??/* @__PURE__ */new Date),{message:"Dates must be at least 2 days before today"})},buildRequest:mr,sendRequest:N,parseResponse:xr},Er={buildTrafficAreaAnalyticsRequest:mr,parseTrafficAreaAnalyticsResponse:xr,trafficAreaAnalyticsTemplate:Mr},Or=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(S)),ce(e,"timeValidityFilter",t.timeValidityFilter)})(n,e),"bbox"in e&&e.bbox){const a=r(e.bbox);return a&&n.append("bbox",a.join(",")),{method:"GET",url:t}}const{ids:a}=e;return a.length>5?{method:"POST",url:t,data:{ids:a}}:(n.append("ids",a.join(",")),{method:"GET",url:t})},Fr=e=>({description:e.description,code:e.code,category:l(e.iconCategory)}),kr=e=>{const t=e.properties;return{type:"Feature",id:t.id,geometry:e.geometry,properties:{id:t.id,category:l(t.iconCategory),magnitudeOfDelay:d[t.magnitudeOfDelay]??"unknown",events:(t.events??[]).map(Fr),...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},Ur=e=>({type:"FeatureCollection",features:(e.incidents??[]).filter(e=>null!==e).map(kr)}),Br={requestValidation:{schema:F.extend({bbox:Y.optional(),ids:P.array(P.string()).optional(),trafficModelId:P.string().optional(),categoryFilter:P.array(P.enum([...v])).optional(),timeValidityFilter:P.array(P.enum(["present","future"])).optional()}).refine(e=>!(e.bbox&&e.ids),{message:"Provide either bbox or ids, not both"})},buildRequest:Or,sendRequest:N,parseResponse:Ur},jr={alongRouteSearch:je,reverseGeocode:wn,geocode:et,geometryData:ct,geometrySearch:ht,calculateRoute:sr,reachableRange:vn,evChargingStationsAvailability:_e,trafficAreaAnalytics:Er,trafficIncidentDetails:{buildTrafficIncidentDetailsRequest:Or,parseTrafficIncidentDetailsResponse:Ur,trafficIncidentDetailsTemplate:Br},placeByID:Ct,autocompleteSearch:We},Wr=async(e,t)=>U(e,{...Ve,...t},"EVChargingStationsAvailability"),qr=async e=>{const t=e.properties.dataSources?.chargingAvailability?.id;if(t)try{const n=await Wr({id:t}),r=e.properties.poi;return n?{...e,properties:{...e.properties,...r&&{poi:{...r,openingHours:n.openingHours}},chargingPark:{...e.properties.chargingPark,availability:n}}}:void 0}catch(n){return void console.error(n)}};async function Nr(e,t){const n=[];for(const r of e.features){const e=await qr(r);e?n.push(e):t?.excludeIfAvailabilityUnknown||n.push(r)}return{...e,features:n,bbox:r(n)}}var Hr=e=>Boolean(e&&"availability"in e&&e.availability),Kr=P.array(P.number()).min(2),Vr=P.object({type:P.literal("Polygon"),coordinates:P.array(P.array(P.array(P.number()))),bbox:P.array(P.number()).optional()}),_r=P.object({type:P.literal("MultiPolygon"),coordinates:P.array(P.array(P.array(P.array(P.number())))),bbox:P.array(P.number()).optional()}),$r=P.object({type:P.literal("Circle"),coordinates:Kr,radius:P.number().positive()}),Gr=P.object({type:P.literal("FeatureCollection"),features:P.array(P.object({type:P.literal("Feature"),geometry:P.union([Vr,_r]),properties:P.any().optional()}))}),zr=P.union([Vr,_r,$r,Gr]),Yr=P.tuple([P.number(),P.number(),P.number(),P.number()]),Zr=P.object({bbox:Yr}),Jr=P.union([Yr,Zr]),Qr=P.enum(["POI","PointAddress","Street"]),Xr=P.object({municipalities:P.array(P.string()).optional(),boundingBoxes:P.array(Jr).optional(),geometries:P.array(zr).optional(),placeTypes:P.array(Qr).min(1).optional(),offset:P.number().int().min(0).max(1e4).optional(),limit:P.number().int().min(1).max(1e4).optional()}),ea=Q.extend($e.extend(Xr.shape).shape),ta=e=>{const[t,n]=e.coordinates,r=e.radius/6371e3*(180/Math.PI),a=r/Math.cos(n*Math.PI/180),o=[];for(let i=0;i<64;i++){const e=2*Math.PI*i/64;o.push([t+a*Math.cos(e),n+r*Math.sin(e)])}return o.push(o[0]),{type:"Polygon",coordinates:[o]}},na=e=>{switch(e.type){case"Polygon":case"MultiPolygon":return[e];case"Circle":return[ta(e)];case"FeatureCollection":return e.features.map(e=>e.geometry)}},ra=e=>(e=>{if(e.length<2)return e;const[t,n]=[e[0],e[e.length-1]];return t[0]===n[0]&&t[1]===n[1]?e:[...e,[...t]]})((e=>e.filter((t,n)=>0===n||t[0]!==e[n-1][0]||t[1]!==e[n-1][1]))(e)),aa=e=>"Polygon"===e.type?{...e,coordinates:e.coordinates.map(ra)}:{...e,coordinates:e.coordinates.map(e=>e.map(ra))},oa={POI:"POI",PointAddress:"Point Address",Street:"Street"},ia=e=>{const t=(e=>{const t=/* @__PURE__ */new Set;for(const n of e.categorySet??[])t.add(Number(n));return e.preferredCategoryId&&t.add(Number(e.preferredCategoryId)),[...t].filter(e=>Number.isFinite(e))})(e);t.sort((e,t)=>t-e);const n=/* @__PURE__ */new Set,r=[];for(const a of t){const e=R[a];e&&!n.has(e)&&(n.add(e),r.push(e))}return r},sa=e=>{const{id:t,position:n,address:r,score:a,distance_m:o,type:i,viewport:s}=e,c=oa[i??"POI"],p=(e=>{if(e?.name)return{name:e.name,categories:ia(e),localizedCategories:e.classifications?.map(e=>e.name)??[],...e.phone&&{phone:e.phone},...e.url&&{url:e.url},...e.brands?.length&&{brands:e.brands.map(e=>e.name)},...e.timeZone?.ianaId&&{timeZone:e.timeZone}}})(e.poi),u=(e=>{if(!e)return;const[[t,n],[r,a]]=e.coordinates;return[t,n,r,a]})(s);return{type:"Feature",id:t,geometry:T(n),...u&&{bbox:u},properties:{type:c,...r&&{address:r},...p&&{poi:p},...void 0!==a&&{score:a},...void 0!==o&&{distance:o}}}},ca=(e,t)=>{const n=!!c(t.position),r=n?c(t.position):null;return{query:t.query??"",queryType:n?"NEARBY":"NON_NEAR",queryTime:0,numResults:e.hits.length,offset:t.offset??0,totalResults:e.total,fuzzyLevel:0,...r&&{geoBias:r}}},pa={requestValidation:{schema:ea,refinements:[{check:e=>!!(e.position||e.boundingBox||e.boundingBoxes?.length||e.geometries?.length||e.municipalities?.length),message:"A geographic bias is required: provide one of position, boundingBox(es), geometries, or municipalities."}]},buildRequest:e=>{const t=new URL("/places",(e=>e.customServiceBaseURL??"https://search-places-poc.whitebush-bbe9c5f7.westeurope.azurecontainerapps.io")(e)),n=(e=>{const t=c(e.position);if(t)return{coordinates:t,radius_km:e.radiusMeters&&e.radiusMeters>0?e.radiusMeters/1e3:2}})(e),a=(e=>e.poiCategories?.length?e.poiCategories.map(e=>String(b[e])):void 0)(e),o=(e=>{const t=[...e.boundingBox?[e.boundingBox]:[],...e.boundingBoxes??[]].map(e=>r(e)).filter(e=>void 0!==e);return t.length?t:void 0})(e),i=(e=>{if(!e.geometries?.length)return;const t=e.geometries.flatMap(na).map(aa);return t.length?t:void 0})(e),s=(e=>e.municipalities?.length?e.municipalities:void 0)(e);return{url:t,data:{...e.query&&{q:e.query},...e.countries?.[0]&&{country:e.countries[0]},...s&&{municipalities:s},...e.poiBrands?.[0]&&{brand:e.poiBrands[0]},...a&&{categories:a},...e.placeTypes?.length&&{types:e.placeTypes},...n&&{near:n},...o&&{bboxes:o},...i&&{geometries:i},...void 0!==e.offset&&{from:e.offset},...void 0!==e.limit&&{size:e.limit}}}},sendRequest:q,parseResponse:(e,t)=>{const n=e.hits.map(sa),o=a(r(n));return{type:"FeatureCollection",properties:ca(e,t),features:n,...o&&{bbox:o}}}},ua=async(e,t)=>U(e,{...pa,...t},"ExplorationSearch"),la=async(e,t)=>U(e,{...Xe,...t},"Geocode"),da=async e=>{const t=await la({query:e,limit:1});if(!t.features[0])throw new Error(`geocodeOne: no results found for "${e}"`);return t.features[0]};async function ma(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},{}),r=t.features.map(e=>e.id&&n[e.id]?{...e,properties:n[e.id]}:e);return{type:"FeatureCollection",bbox:t.bbox,features:r}})(e.geometries,n)}var ga=async(e,t)=>U(e,{...St,...t},"PlaceById"),ya=/* @__PURE__ */new Map,ha=/* @__PURE__ */new Map,fa="en-GB",ba=e=>e??fa,Ra=e=>e.toLowerCase().replaceAll(/[\s\-_,]+/g,""),Ta=e=>{const t={};for(const n of e){const e=[n.name,...n.synonyms].map(Ra);for(const r of e)t[r]=n}return t},va=F.extend({filters:P.array(P.string()).optional()}),Sa=e=>{const t=R[e.id];return t?{code:t,name:e.name,childCategoryCodes:e.childCategoryIds.map(e=>R[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)},Ca={requestValidation:{schema:va},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:W,parseResponse:e=>({poiCategories:e.poiCategories.map(Sa).filter(e=>null!==e)})},Pa=(e,t)=>{const n=(e=>ha.get(e??fa)??{})(e),r=/* @__PURE__ */new Map;for(const a of t){const e=Ra(a);for(const[t,a]of Object.entries(n))t.includes(e)&&a&&r.set(a.code,a)}for(const a of r.values())for(const e of a.childCategoryCodes)r.delete(e);return[...r.values()]},Ia=async(e={})=>{const{language:t}=y(e);let n=(e=>ya.get(ba(e)))(t);return n||(n=(await U(e,Ca,"POICategories")).poiCategories,((e,t)=>{const n=ba(e);ya.set(n,t),ha.set(n,Ta(t))})(t,n)),e.filters?.length?{poiCategories:Pa(t,e.filters)}:{poiCategories:n}},xa=async(e={})=>{const{poiCategories:t}=await Ia(e);return t.map(e=>e.code)},wa=async(e,t)=>U(e,{...Tn,...t},"Reachable Range"),Aa=async(e,t,n)=>{const a=[];for(const r of e){t?.signal?.throwIfAborted();try{a.push(await wa(r,n))}catch(i){if(!(i instanceof D)||403===i.status||429===i.status)throw i}}const o=r(a);return{type:"FeatureCollection",...o&&{bbox:o},features:a}},La=async(e,t)=>U(e,{...xn,...t},"ReverseGeocode"),Da=async(e,t)=>U(e,{...ir,...t},"Routing"),Ma=P.object({minFuzzyLevel:P.number().min(1).max(4).optional(),maxFuzzyLevel:P.number().min(1).max(4).optional()}),Ea=Q.extend($e.extend(Ma.shape).shape),Oa=e=>{let t;switch(e.type){case"COORDINATE":t={...e,details:{position:Se(e.details)}};break;case"NEARBY":t={...e,details:{position:Se({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},Fa={requestValidation:{schema:Ea},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 a=e.boundingBox&&r(e.boundingBox);return a&&(n.append("topLeft",ze([a[3],a[0]])),n.append("btmRight",ze([a[1],a[2]]))),pe(n,"minFuzzyLevel",e.minFuzzyLevel),pe(n,"maxFuzzyLevel",e.maxFuzzyLevel),t},sendRequest:W,parseResponse:e=>{const t=e.results.map(xe),n=a(r(t));return{type:"FeatureCollection",properties:{...we(e.summary),queryIntent:e.summary.queryIntent.map(Oa)},features:t,...n&&{bbox:n}}}},ka=async(e,t)=>"route"in e?De(e,t):"geometries"in e?yt(e,t):(async(e,t)=>U(e,{...Fa,...t},"FuzzySearch"))(e,t),Ua=async e=>{const t=await ka({query:e,limit:1});if(!t.features[0])throw new Error(`searchOne: no results found for "${e}"`);return t.features[0]},Ba=async(e,t)=>U(e,{...Mr,...t},"TrafficAreaAnalytics"),ja=async(e,t)=>U(e,{...Br,...t},"TrafficIncidentDetails");export{L as APIErrorCode,A as SDKError,D as SDKServiceError,De as alongRouteSearch,Be as autocompleteSearch,sn as budgetTypes,E as buildResponseError,O as buildValidationError,wa as calculateReachableRange,Aa as calculateReachableRanges,Da as calculateRoute,jr as customizeService,Wr as evChargingStationsAvailability,ua as explorationSearch,la as geocode,da as geocodeOne,ma as geometryData,Ia as getPOICategories,xa as getPOICategoryCodes,qr as getPlaceWithEVAvailability,Nr as getPlacesWithEVAvailability,Hr as hasChargingAvailability,M as parseDefaultResponseError,ga as placeById,La as reverseGeocode,Ne as routeTypes,ka as search,Ua as searchOne,Ba as trafficAreaAnalytics,ja as trafficIncidentDetails};
|
|
2
2
|
//# sourceMappingURL=services.es.js.map
|