@mapbox/mcp-server 0.2.0-issue.11.2 → 0.2.1-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -82
- package/dist/index.js +0 -0
- package/dist/tools/MapboxApiBasedTool.d.ts +0 -7
- package/dist/tools/MapboxApiBasedTool.d.ts.map +1 -1
- package/dist/tools/MapboxApiBasedTool.js +2 -24
- package/dist/tools/MapboxApiBasedTool.js.map +1 -1
- package/dist/tools/category-search-tool/CategorySearchTool.d.ts +6 -55
- package/dist/tools/category-search-tool/CategorySearchTool.d.ts.map +1 -1
- package/dist/tools/category-search-tool/CategorySearchTool.js +19 -47
- package/dist/tools/category-search-tool/CategorySearchTool.js.map +1 -1
- package/dist/tools/category-search-tool/CategorySearchTool.test.js +10 -90
- package/dist/tools/category-search-tool/CategorySearchTool.test.js.map +1 -1
- package/dist/tools/directions-tool/DirectionsTool.d.ts +14 -4
- package/dist/tools/directions-tool/DirectionsTool.d.ts.map +1 -1
- package/dist/tools/directions-tool/DirectionsTool.js +55 -31
- package/dist/tools/directions-tool/DirectionsTool.js.map +1 -1
- package/dist/tools/directions-tool/DirectionsTool.test.js +160 -115
- package/dist/tools/directions-tool/DirectionsTool.test.js.map +1 -1
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts +9 -55
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.d.ts.map +1 -1
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.js +21 -44
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.js.map +1 -1
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js +10 -90
- package/dist/tools/forward-geocode-tool/ForwardGeocodeTool.test.js.map +1 -1
- package/dist/tools/isochrone-tool/IsochroneTool.d.ts +3 -18
- package/dist/tools/isochrone-tool/IsochroneTool.d.ts.map +1 -1
- package/dist/tools/isochrone-tool/IsochroneTool.js +3 -6
- package/dist/tools/isochrone-tool/IsochroneTool.js.map +1 -1
- package/dist/tools/isochrone-tool/IsochroneTool.test.js +7 -8
- package/dist/tools/isochrone-tool/IsochroneTool.test.js.map +1 -1
- package/dist/tools/matrix-tool/MatrixTool.d.ts +3 -18
- package/dist/tools/matrix-tool/MatrixTool.d.ts.map +1 -1
- package/dist/tools/matrix-tool/MatrixTool.js +6 -6
- package/dist/tools/matrix-tool/MatrixTool.js.map +1 -1
- package/dist/tools/matrix-tool/MatrixTool.test.js +115 -128
- package/dist/tools/matrix-tool/MatrixTool.test.js.map +1 -1
- package/dist/tools/poi-search-tool/PoiSearchTool.d.ts +9 -73
- package/dist/tools/poi-search-tool/PoiSearchTool.d.ts.map +1 -1
- package/dist/tools/poi-search-tool/PoiSearchTool.js +22 -53
- package/dist/tools/poi-search-tool/PoiSearchTool.js.map +1 -1
- package/dist/tools/poi-search-tool/PoiSearchTool.test.js +10 -90
- package/dist/tools/poi-search-tool/PoiSearchTool.test.js.map +1 -1
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts +2 -5
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.d.ts.map +1 -1
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.js +3 -13
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.js.map +1 -1
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js +7 -70
- package/dist/tools/reverse-geocode-tool/ReverseGeocodeTool.test.js.map +1 -1
- package/dist/tools/static-map-image-tool/StaticMapImageTool.d.ts +6 -36
- package/dist/tools/static-map-image-tool/StaticMapImageTool.d.ts.map +1 -1
- package/dist/tools/static-map-image-tool/StaticMapImageTool.js +9 -12
- package/dist/tools/static-map-image-tool/StaticMapImageTool.js.map +1 -1
- package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js +47 -48
- package/dist/tools/static-map-image-tool/StaticMapImageTool.test.js.map +1 -1
- package/dist/utils/requestUtils.d.ts.map +1 -1
- package/dist/utils/requestUtils.js +2 -31
- package/dist/utils/requestUtils.js.map +1 -1
- package/dist/utils/requestUtils.test-helpers.d.ts.map +1 -1
- package/dist/utils/requestUtils.test-helpers.js +1 -5
- package/dist/utils/requestUtils.test-helpers.js.map +1 -1
- package/dist/version.json +4 -4
- package/package.json +2 -2
- package/dist/tools/MapboxApiBasedTool.test.d.ts +0 -2
- package/dist/tools/MapboxApiBasedTool.test.d.ts.map +0 -1
- package/dist/tools/MapboxApiBasedTool.test.js +0 -143
- package/dist/tools/MapboxApiBasedTool.test.js.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.d.ts +0 -11
- package/dist/tools/directions-tool/cleanResponseData.d.ts.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.js +0 -175
- package/dist/tools/directions-tool/cleanResponseData.js.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.test.d.ts +0 -2
- package/dist/tools/directions-tool/cleanResponseData.test.d.ts.map +0 -1
- package/dist/tools/directions-tool/cleanResponseData.test.js +0 -295
- package/dist/tools/directions-tool/cleanResponseData.test.js.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.d.ts +0 -8
- package/dist/tools/directions-tool/formatIsoDateTime.d.ts.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.js +0 -17
- package/dist/tools/directions-tool/formatIsoDateTime.js.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.test.d.ts +0 -2
- package/dist/tools/directions-tool/formatIsoDateTime.test.d.ts.map +0 -1
- package/dist/tools/directions-tool/formatIsoDateTime.test.js +0 -26
- package/dist/tools/directions-tool/formatIsoDateTime.test.js.map +0 -1
- package/dist/utils/requestUtils.test.d.ts +0 -2
- package/dist/utils/requestUtils.test.d.ts.map +0 -1
- package/dist/utils/requestUtils.test.js +0 -115
- package/dist/utils/requestUtils.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cleanResponseData.d.ts","sourceRoot":"","sources":["../../../src/tools/directions-tool/cleanResponseData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,EAC5C,IAAI,EAAE,GAAG,GACR,GAAG,CA4ML"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cleans up the API response to reduce token count while preserving useful data.
|
|
3
|
-
*
|
|
4
|
-
* @param input The original input parameters used for the request
|
|
5
|
-
* @param data The raw response data from the Mapbox Directions API
|
|
6
|
-
* @returns Cleaned data with reduced token count
|
|
7
|
-
*/
|
|
8
|
-
export function cleanResponseData(input, data) {
|
|
9
|
-
// Remove unnecessary keys to reduce token count
|
|
10
|
-
if ('uuid' in data) {
|
|
11
|
-
delete data.uuid;
|
|
12
|
-
}
|
|
13
|
-
if ('code' in data) {
|
|
14
|
-
delete data.code;
|
|
15
|
-
}
|
|
16
|
-
if ('waypoints' in data) {
|
|
17
|
-
// rename each waypoint's location to `snap_location` and distance to `snap_distance`
|
|
18
|
-
// this is not really necessary, but hopefully agents will find this more obvious that we have snapping
|
|
19
|
-
data.waypoints = data.waypoints.map((waypoint) => {
|
|
20
|
-
const updatedWaypoint = { ...waypoint };
|
|
21
|
-
if ('location' in updatedWaypoint) {
|
|
22
|
-
updatedWaypoint.snap_location = updatedWaypoint.location;
|
|
23
|
-
delete updatedWaypoint.location;
|
|
24
|
-
}
|
|
25
|
-
if ('distance' in updatedWaypoint) {
|
|
26
|
-
updatedWaypoint.snap_distance = Math.round(updatedWaypoint.distance);
|
|
27
|
-
delete updatedWaypoint.distance;
|
|
28
|
-
}
|
|
29
|
-
return updatedWaypoint;
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
if (!('routes' in data)) {
|
|
33
|
-
// lets return early because there is nothing more we could do here
|
|
34
|
-
return data;
|
|
35
|
-
}
|
|
36
|
-
data.routes.forEach((route) => {
|
|
37
|
-
// Round duration and distance to integers if they exist
|
|
38
|
-
if (route.duration !== undefined) {
|
|
39
|
-
route.duration = Math.round(route.duration);
|
|
40
|
-
}
|
|
41
|
-
if (route.distance !== undefined) {
|
|
42
|
-
route.distance = Math.round(route.distance);
|
|
43
|
-
}
|
|
44
|
-
delete route.weight_name;
|
|
45
|
-
delete route.weight;
|
|
46
|
-
// Handle the case where geometry is not included (when geometries='none')
|
|
47
|
-
if (input.geometries === 'none' && route.geometry) {
|
|
48
|
-
delete route.geometry;
|
|
49
|
-
}
|
|
50
|
-
route.leg_summaries = route.legs.map((leg) => leg.summary);
|
|
51
|
-
// Collect all unique admins across all legs of this route
|
|
52
|
-
const routeUniqueIsoCodes = new Set();
|
|
53
|
-
// Collect all unique notification messages across all legs of this route
|
|
54
|
-
const routeUniqueNotificationMessages = new Set();
|
|
55
|
-
// Collect all incidents across all legs of this route
|
|
56
|
-
const routeIncidents = [];
|
|
57
|
-
// Collect voice instruction announcements from all steps
|
|
58
|
-
const routeAnnouncements = [];
|
|
59
|
-
let totalDistanceWeightedSpeed = 0; // Sum of (speed × distance) for each segment
|
|
60
|
-
let sumDistanceMeters = 0;
|
|
61
|
-
// Object to track distance by congestion type
|
|
62
|
-
const congestionTypeToDistance = {
|
|
63
|
-
severe: 0,
|
|
64
|
-
heavy: 0,
|
|
65
|
-
moderate: 0,
|
|
66
|
-
low: 0
|
|
67
|
-
};
|
|
68
|
-
route.legs.forEach((leg) => {
|
|
69
|
-
if (leg.annotation && leg.annotation.speed && leg.annotation.distance) {
|
|
70
|
-
leg.annotation.speed.forEach((speed, index) => {
|
|
71
|
-
const speedValue = parseFloat(String(speed));
|
|
72
|
-
const distance = parseFloat(String(leg.annotation.distance[index]));
|
|
73
|
-
// Calculate the weighted speed (speed * distance)
|
|
74
|
-
totalDistanceWeightedSpeed += speedValue * distance;
|
|
75
|
-
sumDistanceMeters += distance;
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
if (leg.annotation &&
|
|
79
|
-
leg.annotation.congestion &&
|
|
80
|
-
leg.annotation.distance) {
|
|
81
|
-
// iterate every congestion string in leg.annotation.congestion
|
|
82
|
-
// each string is one of `severe, heavy, moderate, low, unknown`
|
|
83
|
-
// keep track of total distance by type of congestion
|
|
84
|
-
leg.annotation.congestion.forEach((congestion, index) => {
|
|
85
|
-
const distance = parseFloat(String(leg.annotation.distance[index]));
|
|
86
|
-
if (congestion === 'severe' ||
|
|
87
|
-
congestion === 'heavy' ||
|
|
88
|
-
congestion === 'moderate' ||
|
|
89
|
-
congestion === 'low') {
|
|
90
|
-
congestionTypeToDistance[congestion] += distance;
|
|
91
|
-
}
|
|
92
|
-
// Skip 'unknown' congestion type
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
if (leg.admins && Array.isArray(leg.admins)) {
|
|
96
|
-
// Extract unique ISO codes from this leg
|
|
97
|
-
leg.admins.forEach((admin) => {
|
|
98
|
-
if (admin.iso_3166_1_alpha3) {
|
|
99
|
-
routeUniqueIsoCodes.add(admin.iso_3166_1_alpha3);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
// Process notifications if they exist
|
|
104
|
-
if (leg.notifications && Array.isArray(leg.notifications)) {
|
|
105
|
-
// Extract unique notification messages from this leg
|
|
106
|
-
leg.notifications.forEach((notification) => {
|
|
107
|
-
if (notification.details && notification.details.message) {
|
|
108
|
-
routeUniqueNotificationMessages.add(notification.details.message);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
// Process incidents if they exist
|
|
113
|
-
if (leg.incidents && Array.isArray(leg.incidents)) {
|
|
114
|
-
leg.incidents.forEach((incident) => {
|
|
115
|
-
// Extract only the specified fields for each incident
|
|
116
|
-
routeIncidents.push({
|
|
117
|
-
type: incident.type,
|
|
118
|
-
end_time: incident.end_time,
|
|
119
|
-
long_description: incident.long_description,
|
|
120
|
-
impact: incident.impact,
|
|
121
|
-
affected_road_names: incident.affected_road_names,
|
|
122
|
-
length: incident.length
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
// Process steps if they exist to collect voice instructions
|
|
127
|
-
if (leg.steps && Array.isArray(leg.steps)) {
|
|
128
|
-
leg.steps.forEach((step) => {
|
|
129
|
-
if (step.voiceInstructions && Array.isArray(step.voiceInstructions)) {
|
|
130
|
-
step.voiceInstructions.forEach((instruction) => {
|
|
131
|
-
if (instruction.announcement) {
|
|
132
|
-
routeAnnouncements.push(instruction.announcement);
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}); // Add all unique admins as a new property on the route
|
|
139
|
-
route.intersecting_admins = Array.from(routeUniqueIsoCodes);
|
|
140
|
-
// Add all unique notification messages as a new property on the route
|
|
141
|
-
route.notifications_summary = Array.from(routeUniqueNotificationMessages);
|
|
142
|
-
// Add all incidents with the specified fields as a new property on the route
|
|
143
|
-
route.incidents_summary = routeIncidents;
|
|
144
|
-
// Add voice instruction announcements only if there are 1 to 10 of them
|
|
145
|
-
// If there are more than 10, it's just too many, and if there is 0 then we don't have them.
|
|
146
|
-
if (routeAnnouncements.length >= 1 && routeAnnouncements.length <= 10) {
|
|
147
|
-
route.instructions = routeAnnouncements;
|
|
148
|
-
}
|
|
149
|
-
route.num_legs = route.legs.length;
|
|
150
|
-
// Add congestion distance information to route
|
|
151
|
-
route.congestion_information = {
|
|
152
|
-
length_low: Math.round(congestionTypeToDistance.low),
|
|
153
|
-
length_moderate: Math.round(congestionTypeToDistance.moderate),
|
|
154
|
-
length_heavy: Math.round(congestionTypeToDistance.heavy),
|
|
155
|
-
length_severe: Math.round(congestionTypeToDistance.severe)
|
|
156
|
-
};
|
|
157
|
-
// Calculate and add average speed in km/h
|
|
158
|
-
if (sumDistanceMeters > 0 && totalDistanceWeightedSpeed > 0) {
|
|
159
|
-
// Calculate distance-weighted average speed
|
|
160
|
-
const averageMetersPerSecond = totalDistanceWeightedSpeed / sumDistanceMeters;
|
|
161
|
-
// Convert m/s to km/h (multiply by 3.6) and round to integer
|
|
162
|
-
route.average_speed_kph = Math.round(averageMetersPerSecond * 3.6);
|
|
163
|
-
}
|
|
164
|
-
if (route.duration_typical) {
|
|
165
|
-
route.duration_under_typical_traffic_conditions = Math.round(route.duration_typical);
|
|
166
|
-
delete route.duration_typical;
|
|
167
|
-
}
|
|
168
|
-
if (route.weight_typical) {
|
|
169
|
-
delete route.weight_typical;
|
|
170
|
-
}
|
|
171
|
-
delete route.legs;
|
|
172
|
-
});
|
|
173
|
-
return data;
|
|
174
|
-
}
|
|
175
|
-
//# sourceMappingURL=cleanResponseData.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cleanResponseData.js","sourceRoot":"","sources":["../../../src/tools/directions-tool/cleanResponseData.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cleanResponseData.test.d.ts","sourceRoot":"","sources":["../../../src/tools/directions-tool/cleanResponseData.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import { cleanResponseData } from './cleanResponseData.js';
|
|
2
|
-
describe('cleanResponseData', () => {
|
|
3
|
-
// Create a complete mock input that satisfies the DirectionsInputSchema
|
|
4
|
-
const mockInput = {
|
|
5
|
-
coordinates: [
|
|
6
|
-
[0, 0],
|
|
7
|
-
[1, 1]
|
|
8
|
-
], // Use a proper tuple type
|
|
9
|
-
routing_profile: 'driving-traffic',
|
|
10
|
-
geometries: 'none',
|
|
11
|
-
alternatives: false
|
|
12
|
-
};
|
|
13
|
-
it('should remove unnecessary keys', () => {
|
|
14
|
-
const mockData = {
|
|
15
|
-
uuid: '12345',
|
|
16
|
-
code: 'Ok',
|
|
17
|
-
routes: []
|
|
18
|
-
};
|
|
19
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
20
|
-
expect(result.uuid).toBeUndefined();
|
|
21
|
-
expect(result.code).toBeUndefined();
|
|
22
|
-
});
|
|
23
|
-
it('should rename waypoint location and distance properties', () => {
|
|
24
|
-
const mockData = {
|
|
25
|
-
waypoints: [
|
|
26
|
-
{
|
|
27
|
-
name: 'Test',
|
|
28
|
-
location: [-73.989, 40.733],
|
|
29
|
-
distance: 10.5
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
routes: []
|
|
33
|
-
};
|
|
34
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
35
|
-
expect(result.waypoints[0].location).toBeUndefined();
|
|
36
|
-
expect(result.waypoints[0].snap_location).toEqual([-73.989, 40.733]);
|
|
37
|
-
expect(result.waypoints[0].distance).toBeUndefined();
|
|
38
|
-
expect(result.waypoints[0].snap_distance).toBe(11); // Rounded from 10.5
|
|
39
|
-
});
|
|
40
|
-
it('should round duration and distance', () => {
|
|
41
|
-
const mockData = {
|
|
42
|
-
routes: [
|
|
43
|
-
{
|
|
44
|
-
duration: 1234.56,
|
|
45
|
-
distance: 5678.91,
|
|
46
|
-
legs: []
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
};
|
|
50
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
51
|
-
expect(result.routes[0].duration).toBe(1235);
|
|
52
|
-
expect(result.routes[0].distance).toBe(5679);
|
|
53
|
-
});
|
|
54
|
-
it('should delete geometry when geometries is set to none', () => {
|
|
55
|
-
const mockData = {
|
|
56
|
-
routes: [
|
|
57
|
-
{
|
|
58
|
-
geometry: 'someGeometryData',
|
|
59
|
-
legs: []
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
};
|
|
63
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
64
|
-
expect(result.routes[0].geometry).toBeUndefined();
|
|
65
|
-
});
|
|
66
|
-
it('should keep geometry when geometries is not none', () => {
|
|
67
|
-
const mockData = {
|
|
68
|
-
routes: [
|
|
69
|
-
{
|
|
70
|
-
geometry: 'someGeometryData',
|
|
71
|
-
legs: []
|
|
72
|
-
}
|
|
73
|
-
]
|
|
74
|
-
};
|
|
75
|
-
// Override just the geometries property for this test
|
|
76
|
-
const geojsonInput = {
|
|
77
|
-
...mockInput,
|
|
78
|
-
geometries: 'geojson'
|
|
79
|
-
};
|
|
80
|
-
const result = cleanResponseData(geojsonInput, mockData);
|
|
81
|
-
expect(result.routes[0].geometry).toBe('someGeometryData');
|
|
82
|
-
});
|
|
83
|
-
it('should process route data correctly', () => {
|
|
84
|
-
const mockData = {
|
|
85
|
-
routes: [
|
|
86
|
-
{
|
|
87
|
-
duration: 1200,
|
|
88
|
-
distance: 5000,
|
|
89
|
-
weight_name: 'routingWeight',
|
|
90
|
-
weight: 1500,
|
|
91
|
-
duration_typical: 1300,
|
|
92
|
-
weight_typical: 1600,
|
|
93
|
-
legs: [
|
|
94
|
-
{
|
|
95
|
-
summary: 'First leg summary',
|
|
96
|
-
admins: [{ iso_3166_1_alpha3: 'USA' }],
|
|
97
|
-
steps: []
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
summary: 'Second leg summary',
|
|
101
|
-
admins: [{ iso_3166_1_alpha3: 'CAN' }],
|
|
102
|
-
steps: []
|
|
103
|
-
}
|
|
104
|
-
]
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
|
-
};
|
|
108
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
109
|
-
// Check if data is properly processed
|
|
110
|
-
expect(result.routes[0].weight_name).toBeUndefined();
|
|
111
|
-
expect(result.routes[0].weight).toBeUndefined();
|
|
112
|
-
expect(result.routes[0].leg_summaries).toEqual([
|
|
113
|
-
'First leg summary',
|
|
114
|
-
'Second leg summary'
|
|
115
|
-
]);
|
|
116
|
-
expect(result.routes[0].duration_typical).toBeUndefined();
|
|
117
|
-
expect(result.routes[0].duration_under_typical_traffic_conditions).toBe(1300);
|
|
118
|
-
expect(result.routes[0].weight_typical).toBeUndefined();
|
|
119
|
-
expect(result.routes[0].intersecting_admins).toEqual(['USA', 'CAN']);
|
|
120
|
-
expect(result.routes[0].num_legs).toBe(2);
|
|
121
|
-
expect(result.routes[0].legs).toBeUndefined();
|
|
122
|
-
});
|
|
123
|
-
it('should handle notifications and collect unique messages', () => {
|
|
124
|
-
const mockData = {
|
|
125
|
-
routes: [
|
|
126
|
-
{
|
|
127
|
-
legs: [
|
|
128
|
-
{
|
|
129
|
-
notifications: [
|
|
130
|
-
{ details: { message: 'Traffic ahead' } },
|
|
131
|
-
{ details: { message: 'Road closure' } }
|
|
132
|
-
],
|
|
133
|
-
summary: 'Leg 1'
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
notifications: [
|
|
137
|
-
{ details: { message: 'Traffic ahead' } },
|
|
138
|
-
{ details: { message: 'Construction zone' } }
|
|
139
|
-
],
|
|
140
|
-
summary: 'Leg 2'
|
|
141
|
-
}
|
|
142
|
-
]
|
|
143
|
-
}
|
|
144
|
-
]
|
|
145
|
-
};
|
|
146
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
147
|
-
expect(result.routes[0].notifications_summary).toEqual([
|
|
148
|
-
'Traffic ahead',
|
|
149
|
-
'Road closure',
|
|
150
|
-
'Construction zone'
|
|
151
|
-
]);
|
|
152
|
-
});
|
|
153
|
-
it('should process incidents information', () => {
|
|
154
|
-
const mockData = {
|
|
155
|
-
routes: [
|
|
156
|
-
{
|
|
157
|
-
legs: [
|
|
158
|
-
{
|
|
159
|
-
incidents: [
|
|
160
|
-
{
|
|
161
|
-
type: 'accident',
|
|
162
|
-
end_time: '2023-05-01T12:00:00Z',
|
|
163
|
-
long_description: 'Multiple vehicle collision',
|
|
164
|
-
impact: 'severe',
|
|
165
|
-
affected_road_names: ['Main St'],
|
|
166
|
-
length: 500,
|
|
167
|
-
extra_field: 'should not be included'
|
|
168
|
-
}
|
|
169
|
-
],
|
|
170
|
-
summary: 'Leg with incident'
|
|
171
|
-
}
|
|
172
|
-
]
|
|
173
|
-
}
|
|
174
|
-
]
|
|
175
|
-
};
|
|
176
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
177
|
-
expect(result.routes[0].incidents_summary).toHaveLength(1);
|
|
178
|
-
expect(result.routes[0].incidents_summary[0]).toEqual({
|
|
179
|
-
type: 'accident',
|
|
180
|
-
end_time: '2023-05-01T12:00:00Z',
|
|
181
|
-
long_description: 'Multiple vehicle collision',
|
|
182
|
-
impact: 'severe',
|
|
183
|
-
affected_road_names: ['Main St'],
|
|
184
|
-
length: 500
|
|
185
|
-
});
|
|
186
|
-
expect(result.routes[0].incidents_summary[0].extra_field).toBeUndefined();
|
|
187
|
-
});
|
|
188
|
-
it('should collect voice instructions when within limits', () => {
|
|
189
|
-
const mockData = {
|
|
190
|
-
routes: [
|
|
191
|
-
{
|
|
192
|
-
legs: [
|
|
193
|
-
{
|
|
194
|
-
steps: [
|
|
195
|
-
{
|
|
196
|
-
voiceInstructions: [
|
|
197
|
-
{ announcement: 'Turn right in 100 meters' },
|
|
198
|
-
{ announcement: 'Turn right now' }
|
|
199
|
-
]
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
voiceInstructions: [
|
|
203
|
-
{ announcement: 'Continue straight for 500 meters' }
|
|
204
|
-
]
|
|
205
|
-
}
|
|
206
|
-
],
|
|
207
|
-
summary: 'Leg with voice instructions'
|
|
208
|
-
}
|
|
209
|
-
]
|
|
210
|
-
}
|
|
211
|
-
]
|
|
212
|
-
};
|
|
213
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
214
|
-
expect(result.routes[0].instructions).toEqual([
|
|
215
|
-
'Turn right in 100 meters',
|
|
216
|
-
'Turn right now',
|
|
217
|
-
'Continue straight for 500 meters'
|
|
218
|
-
]);
|
|
219
|
-
});
|
|
220
|
-
it('should not include instructions when there are too many', () => {
|
|
221
|
-
const mockData = {
|
|
222
|
-
routes: [
|
|
223
|
-
{
|
|
224
|
-
legs: [
|
|
225
|
-
{
|
|
226
|
-
steps: Array(6)
|
|
227
|
-
.fill(0)
|
|
228
|
-
.map(() => ({
|
|
229
|
-
voiceInstructions: [
|
|
230
|
-
{ announcement: 'Instruction 1' },
|
|
231
|
-
{ announcement: 'Instruction 2' }
|
|
232
|
-
]
|
|
233
|
-
})),
|
|
234
|
-
summary: 'Leg with many instructions'
|
|
235
|
-
}
|
|
236
|
-
]
|
|
237
|
-
}
|
|
238
|
-
]
|
|
239
|
-
};
|
|
240
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
241
|
-
// With 6 steps and 2 instructions each, we'd have 12 instructions total
|
|
242
|
-
// The function should exclude them since it's > 10
|
|
243
|
-
expect(result.routes[0].instructions).toBeUndefined();
|
|
244
|
-
});
|
|
245
|
-
it('should calculate congestion information correctly', () => {
|
|
246
|
-
const mockData = {
|
|
247
|
-
routes: [
|
|
248
|
-
{
|
|
249
|
-
legs: [
|
|
250
|
-
{
|
|
251
|
-
annotation: {
|
|
252
|
-
congestion: ['severe', 'heavy', 'moderate', 'low', 'unknown'],
|
|
253
|
-
distance: [100, 200, 300, 400, 500]
|
|
254
|
-
},
|
|
255
|
-
summary: 'Leg with congestion'
|
|
256
|
-
}
|
|
257
|
-
]
|
|
258
|
-
}
|
|
259
|
-
]
|
|
260
|
-
};
|
|
261
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
262
|
-
expect(result.routes[0].congestion_information).toEqual({
|
|
263
|
-
length_severe: 100,
|
|
264
|
-
length_heavy: 200,
|
|
265
|
-
length_moderate: 300,
|
|
266
|
-
length_low: 400
|
|
267
|
-
});
|
|
268
|
-
// Note: 'unknown' congestion type is skipped
|
|
269
|
-
});
|
|
270
|
-
it('should calculate average speed correctly', () => {
|
|
271
|
-
const mockData = {
|
|
272
|
-
routes: [
|
|
273
|
-
{
|
|
274
|
-
legs: [
|
|
275
|
-
{
|
|
276
|
-
annotation: {
|
|
277
|
-
speed: [10, 20, 30], // m/s
|
|
278
|
-
distance: [100, 200, 300] // meters
|
|
279
|
-
},
|
|
280
|
-
summary: 'Leg with speed data'
|
|
281
|
-
}
|
|
282
|
-
]
|
|
283
|
-
}
|
|
284
|
-
]
|
|
285
|
-
};
|
|
286
|
-
const result = cleanResponseData(mockInput, mockData);
|
|
287
|
-
// Calculation:
|
|
288
|
-
// Weighted sum = 10*100 + 20*200 + 30*300 = 1000 + 4000 + 9000 = 14000
|
|
289
|
-
// Total distance = 100 + 200 + 300 = 600
|
|
290
|
-
// Average m/s = 14000/600 = 23.33
|
|
291
|
-
// Average km/h = 23.33 * 3.6 = 84 (rounded)
|
|
292
|
-
expect(result.routes[0].average_speed_kph).toBe(84);
|
|
293
|
-
});
|
|
294
|
-
});
|
|
295
|
-
//# sourceMappingURL=cleanResponseData.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cleanResponseData.test.js","sourceRoot":"","sources":["../../../src/tools/directions-tool/cleanResponseData.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper function to format ISO datetime strings according to Mapbox API requirements.
|
|
3
|
-
* It converts the format YYYY-MM-DDThh:mm:ss (with seconds but no timezone) to
|
|
4
|
-
* YYYY-MM-DDThh:mm (no seconds, no timezone) by removing the seconds part.
|
|
5
|
-
* Other valid formats are left unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export declare const formatIsoDateTime: (dateTime: string) => string;
|
|
8
|
-
//# sourceMappingURL=formatIsoDateTime.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatIsoDateTime.d.ts","sourceRoot":"","sources":["../../../src/tools/directions-tool/formatIsoDateTime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,KAAG,MAWpD,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper function to format ISO datetime strings according to Mapbox API requirements.
|
|
3
|
-
* It converts the format YYYY-MM-DDThh:mm:ss (with seconds but no timezone) to
|
|
4
|
-
* YYYY-MM-DDThh:mm (no seconds, no timezone) by removing the seconds part.
|
|
5
|
-
* Other valid formats are left unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export const formatIsoDateTime = (dateTime) => {
|
|
8
|
-
// Regex for matching YYYY-MM-DDThh:mm:ss format (with seconds but no timezone)
|
|
9
|
-
const dateWithSecondsNoTz = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/;
|
|
10
|
-
if (dateWithSecondsNoTz.test(dateTime)) {
|
|
11
|
-
// Extract up to the minutes part only, dropping the seconds
|
|
12
|
-
return dateTime.substring(0, dateTime.lastIndexOf(':'));
|
|
13
|
-
}
|
|
14
|
-
// Return unchanged if it's already in a valid format
|
|
15
|
-
return dateTime;
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=formatIsoDateTime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatIsoDateTime.js","sourceRoot":"","sources":["../../../src/tools/directions-tool/formatIsoDateTime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC5D,+EAA+E;IAC/E,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;IAEpE,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,4DAA4D;QAC5D,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,qDAAqD;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatIsoDateTime.test.d.ts","sourceRoot":"","sources":["../../../src/tools/directions-tool/formatIsoDateTime.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { formatIsoDateTime } from './formatIsoDateTime';
|
|
2
|
-
describe('formatIsoDateTime', () => {
|
|
3
|
-
it('converts YYYY-MM-DDThh:mm:ss to YYYY-MM-DDThh:mm by removing seconds', () => {
|
|
4
|
-
const input = '2025-06-05T10:30:45';
|
|
5
|
-
const expected = '2025-06-05T10:30';
|
|
6
|
-
expect(formatIsoDateTime(input)).toBe(expected);
|
|
7
|
-
});
|
|
8
|
-
it('leaves YYYY-MM-DDThh:mm:ssZ format unchanged', () => {
|
|
9
|
-
const input = '2025-06-05T10:30:45Z';
|
|
10
|
-
expect(formatIsoDateTime(input)).toBe(input);
|
|
11
|
-
});
|
|
12
|
-
it('leaves YYYY-MM-DDThh:mm:ss±hh:mm format unchanged', () => {
|
|
13
|
-
const input = '2025-06-05T10:30:45+02:00';
|
|
14
|
-
expect(formatIsoDateTime(input)).toBe(input);
|
|
15
|
-
});
|
|
16
|
-
it('leaves YYYY-MM-DDThh:mm format unchanged', () => {
|
|
17
|
-
const input = '2025-06-05T10:30';
|
|
18
|
-
expect(formatIsoDateTime(input)).toBe(input);
|
|
19
|
-
});
|
|
20
|
-
it('handles edge cases with zeros in seconds', () => {
|
|
21
|
-
const input = '2025-06-05T10:30:00';
|
|
22
|
-
const expected = '2025-06-05T10:30';
|
|
23
|
-
expect(formatIsoDateTime(input)).toBe(expected);
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
//# sourceMappingURL=formatIsoDateTime.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatIsoDateTime.test.js","sourceRoot":"","sources":["../../../src/tools/directions-tool/formatIsoDateTime.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAEpC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAG,sBAAsB,CAAC;QAErC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,KAAK,GAAG,2BAA2B,CAAC;QAE1C,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAEjC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC;QACpC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QAEpC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requestUtils.test.d.ts","sourceRoot":"","sources":["../../src/utils/requestUtils.test.ts"],"names":[],"mappings":""}
|