@opentripplanner/core-utils 11.4.3-mobility-profile → 11.4.4
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/esm/bike-rental-itinerary.json +863 -0
- package/esm/config.json +54 -0
- package/esm/fare-products-itinerary.json +1299 -0
- package/esm/graphql.d.js +2 -0
- package/esm/graphql.d.js.map +1 -0
- package/esm/index.js +26 -0
- package/esm/index.js.map +1 -0
- package/esm/itinerary.js +688 -0
- package/esm/itinerary.js.map +1 -0
- package/esm/map.js +53 -0
- package/esm/map.js.map +1 -0
- package/esm/otpSchema.json +13373 -0
- package/esm/planQuery.graphql +281 -0
- package/esm/profile.js +172 -0
- package/esm/profile.js.map +1 -0
- package/esm/query-gen.js +233 -0
- package/esm/query-gen.js.map +1 -0
- package/esm/query-params.js +786 -0
- package/esm/query-params.js.map +1 -0
- package/esm/query.js +538 -0
- package/esm/query.js.map +1 -0
- package/esm/route.js +460 -0
- package/esm/route.js.map +1 -0
- package/esm/routes.json +107 -0
- package/esm/storage.js +46 -0
- package/esm/storage.js.map +1 -0
- package/esm/suspense.js +13 -0
- package/esm/suspense.js.map +1 -0
- package/esm/time.js +94 -0
- package/esm/time.js.map +1 -0
- package/esm/tnc-itinerary.json +1726 -0
- package/esm/ui.js +48 -0
- package/esm/ui.js.map +1 -0
- package/lib/otpSchema.json +0 -10
- package/lib/planQuery.graphql +0 -2
- package/lib/query-gen.d.ts +1 -2
- package/lib/query-gen.d.ts.map +1 -1
- package/lib/query-gen.js +1 -3
- package/lib/query-gen.js.map +1 -1
- package/package.json +3 -3
- package/src/otpSchema.json +0 -10
- package/src/planQuery.graphql +0 -2
- package/src/query-gen.ts +0 -3
- package/tsconfig.tsbuildinfo +1 -0
- package/lib/core-utils.story.d.ts +0 -21
- package/lib/core-utils.story.d.ts.map +0 -1
- package/lib/core-utils.story.js +0 -69
- package/lib/core-utils.story.js.map +0 -1
- /package/{lib → esm/__tests__/__mocks__}/bike-rental-itinerary.json +0 -0
- /package/{lib → esm/__tests__/__mocks__}/config.json +0 -0
- /package/{lib → esm/__tests__/__mocks__}/fare-products-itinerary.json +0 -0
- /package/{lib → esm/__tests__/__mocks__}/routes.json +0 -0
- /package/{lib → esm/__tests__/__mocks__}/tnc-itinerary.json +0 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
query Plan(
|
|
2
|
+
$arriveBy: Boolean
|
|
3
|
+
$banned: InputBanned
|
|
4
|
+
$bikeReluctance: Float
|
|
5
|
+
$carReluctance: Float
|
|
6
|
+
$date: String
|
|
7
|
+
$fromPlace: String!
|
|
8
|
+
$modes: [TransportMode]
|
|
9
|
+
$numItineraries: Int
|
|
10
|
+
$preferred: InputPreferred
|
|
11
|
+
$time: String
|
|
12
|
+
$toPlace: String!
|
|
13
|
+
$unpreferred: InputUnpreferred
|
|
14
|
+
$walkReluctance: Float
|
|
15
|
+
$walkSpeed: Float
|
|
16
|
+
$wheelchair: Boolean
|
|
17
|
+
) {
|
|
18
|
+
plan(
|
|
19
|
+
arriveBy: $arriveBy
|
|
20
|
+
banned: $banned
|
|
21
|
+
bikeReluctance: $bikeReluctance
|
|
22
|
+
carReluctance: $carReluctance
|
|
23
|
+
date: $date
|
|
24
|
+
fromPlace: $fromPlace
|
|
25
|
+
# Currently only supporting EN locale, used for times and text
|
|
26
|
+
locale: "en"
|
|
27
|
+
numItineraries: $numItineraries
|
|
28
|
+
preferred: $preferred
|
|
29
|
+
time: $time
|
|
30
|
+
toPlace: $toPlace
|
|
31
|
+
transportModes: $modes
|
|
32
|
+
unpreferred: $unpreferred
|
|
33
|
+
walkReluctance: $walkReluctance
|
|
34
|
+
walkSpeed: $walkSpeed
|
|
35
|
+
wheelchair: $wheelchair
|
|
36
|
+
) {
|
|
37
|
+
itineraries {
|
|
38
|
+
accessibilityScore
|
|
39
|
+
duration
|
|
40
|
+
endTime
|
|
41
|
+
legs {
|
|
42
|
+
accessibilityScore
|
|
43
|
+
agency {
|
|
44
|
+
alerts {
|
|
45
|
+
alertDescriptionText
|
|
46
|
+
alertHeaderText
|
|
47
|
+
alertUrl
|
|
48
|
+
effectiveStartDate
|
|
49
|
+
id
|
|
50
|
+
}
|
|
51
|
+
gtfsId
|
|
52
|
+
id: gtfsId
|
|
53
|
+
name
|
|
54
|
+
timezone
|
|
55
|
+
url
|
|
56
|
+
}
|
|
57
|
+
alerts {
|
|
58
|
+
alertDescriptionText
|
|
59
|
+
alertHeaderText
|
|
60
|
+
alertUrl
|
|
61
|
+
effectiveStartDate
|
|
62
|
+
id
|
|
63
|
+
}
|
|
64
|
+
arrivalDelay
|
|
65
|
+
departureDelay
|
|
66
|
+
distance
|
|
67
|
+
dropOffBookingInfo {
|
|
68
|
+
contactInfo {
|
|
69
|
+
bookingUrl
|
|
70
|
+
infoUrl
|
|
71
|
+
phoneNumber
|
|
72
|
+
}
|
|
73
|
+
earliestBookingTime {
|
|
74
|
+
daysPrior
|
|
75
|
+
time
|
|
76
|
+
}
|
|
77
|
+
latestBookingTime {
|
|
78
|
+
daysPrior
|
|
79
|
+
time
|
|
80
|
+
}
|
|
81
|
+
message
|
|
82
|
+
}
|
|
83
|
+
dropoffType
|
|
84
|
+
duration
|
|
85
|
+
endTime
|
|
86
|
+
fareProducts {
|
|
87
|
+
id
|
|
88
|
+
product {
|
|
89
|
+
__typename
|
|
90
|
+
id
|
|
91
|
+
medium {
|
|
92
|
+
id
|
|
93
|
+
name
|
|
94
|
+
}
|
|
95
|
+
name
|
|
96
|
+
riderCategory {
|
|
97
|
+
id
|
|
98
|
+
name
|
|
99
|
+
}
|
|
100
|
+
... on DefaultFareProduct {
|
|
101
|
+
price {
|
|
102
|
+
amount
|
|
103
|
+
currency {
|
|
104
|
+
code
|
|
105
|
+
digits
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
from {
|
|
112
|
+
lat
|
|
113
|
+
lon
|
|
114
|
+
name
|
|
115
|
+
rentalVehicle {
|
|
116
|
+
id
|
|
117
|
+
network
|
|
118
|
+
}
|
|
119
|
+
stop {
|
|
120
|
+
alerts {
|
|
121
|
+
alertDescriptionText
|
|
122
|
+
alertHeaderText
|
|
123
|
+
alertUrl
|
|
124
|
+
effectiveStartDate
|
|
125
|
+
id
|
|
126
|
+
}
|
|
127
|
+
code
|
|
128
|
+
gtfsId
|
|
129
|
+
id
|
|
130
|
+
lat
|
|
131
|
+
lon
|
|
132
|
+
}
|
|
133
|
+
vertexType
|
|
134
|
+
}
|
|
135
|
+
headsign
|
|
136
|
+
interlineWithPreviousLeg
|
|
137
|
+
intermediateStops {
|
|
138
|
+
lat
|
|
139
|
+
locationType
|
|
140
|
+
lon
|
|
141
|
+
name
|
|
142
|
+
stopCode: code
|
|
143
|
+
stopId: id
|
|
144
|
+
}
|
|
145
|
+
legGeometry {
|
|
146
|
+
length
|
|
147
|
+
points
|
|
148
|
+
}
|
|
149
|
+
mode
|
|
150
|
+
pickupBookingInfo {
|
|
151
|
+
contactInfo {
|
|
152
|
+
bookingUrl
|
|
153
|
+
infoUrl
|
|
154
|
+
phoneNumber
|
|
155
|
+
}
|
|
156
|
+
earliestBookingTime {
|
|
157
|
+
daysPrior
|
|
158
|
+
time
|
|
159
|
+
}
|
|
160
|
+
latestBookingTime {
|
|
161
|
+
daysPrior
|
|
162
|
+
time
|
|
163
|
+
}
|
|
164
|
+
message
|
|
165
|
+
}
|
|
166
|
+
pickupType
|
|
167
|
+
realTime
|
|
168
|
+
realtimeState
|
|
169
|
+
rentedBike
|
|
170
|
+
rideHailingEstimate {
|
|
171
|
+
arrival
|
|
172
|
+
maxPrice {
|
|
173
|
+
amount
|
|
174
|
+
currency {
|
|
175
|
+
code
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
minPrice {
|
|
179
|
+
amount
|
|
180
|
+
currency {
|
|
181
|
+
code
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
provider {
|
|
185
|
+
id
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
route {
|
|
189
|
+
alerts {
|
|
190
|
+
alertDescriptionText
|
|
191
|
+
alertHeaderText
|
|
192
|
+
alertUrl
|
|
193
|
+
effectiveStartDate
|
|
194
|
+
id
|
|
195
|
+
}
|
|
196
|
+
color
|
|
197
|
+
gtfsId
|
|
198
|
+
id: gtfsId
|
|
199
|
+
longName
|
|
200
|
+
shortName
|
|
201
|
+
textColor
|
|
202
|
+
type
|
|
203
|
+
}
|
|
204
|
+
startTime
|
|
205
|
+
steps {
|
|
206
|
+
absoluteDirection
|
|
207
|
+
alerts {
|
|
208
|
+
alertDescriptionText
|
|
209
|
+
alertHeaderText
|
|
210
|
+
alertUrl
|
|
211
|
+
effectiveStartDate
|
|
212
|
+
id
|
|
213
|
+
}
|
|
214
|
+
area
|
|
215
|
+
distance
|
|
216
|
+
elevationProfile {
|
|
217
|
+
distance
|
|
218
|
+
elevation
|
|
219
|
+
}
|
|
220
|
+
lat
|
|
221
|
+
lon
|
|
222
|
+
relativeDirection
|
|
223
|
+
stayOn
|
|
224
|
+
streetName
|
|
225
|
+
}
|
|
226
|
+
to {
|
|
227
|
+
lat
|
|
228
|
+
lon
|
|
229
|
+
name
|
|
230
|
+
rentalVehicle {
|
|
231
|
+
id
|
|
232
|
+
network
|
|
233
|
+
}
|
|
234
|
+
stop {
|
|
235
|
+
alerts {
|
|
236
|
+
alertDescriptionText
|
|
237
|
+
alertHeaderText
|
|
238
|
+
alertUrl
|
|
239
|
+
effectiveStartDate
|
|
240
|
+
id
|
|
241
|
+
}
|
|
242
|
+
code
|
|
243
|
+
gtfsId
|
|
244
|
+
id
|
|
245
|
+
lat
|
|
246
|
+
lon
|
|
247
|
+
}
|
|
248
|
+
vertexType
|
|
249
|
+
}
|
|
250
|
+
transitLeg
|
|
251
|
+
trip {
|
|
252
|
+
arrivalStoptime {
|
|
253
|
+
stop {
|
|
254
|
+
gtfsId
|
|
255
|
+
id
|
|
256
|
+
}
|
|
257
|
+
stopPosition
|
|
258
|
+
}
|
|
259
|
+
departureStoptime {
|
|
260
|
+
stop {
|
|
261
|
+
gtfsId
|
|
262
|
+
id
|
|
263
|
+
}
|
|
264
|
+
stopPosition
|
|
265
|
+
}
|
|
266
|
+
gtfsId
|
|
267
|
+
id
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
startTime
|
|
271
|
+
transfers: numberOfTransfers
|
|
272
|
+
waitingTime
|
|
273
|
+
walkTime
|
|
274
|
+
}
|
|
275
|
+
routingErrors {
|
|
276
|
+
code
|
|
277
|
+
description
|
|
278
|
+
inputField
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
package/esm/profile.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
export function filterProfileOptions(response) {
|
|
2
|
+
// Filter out similar options. TODO: handle on server?
|
|
3
|
+
var optStrs = [];
|
|
4
|
+
var filteredIndices = [];
|
|
5
|
+
var filteredProfile = response.otp.profile.filter(function (option, i) {
|
|
6
|
+
var optStr = option.access.map(function (a) {
|
|
7
|
+
return a.mode;
|
|
8
|
+
}).join("/");
|
|
9
|
+
|
|
10
|
+
if (option.transit) {
|
|
11
|
+
optStr += " to ".concat(option.transit.map(function (transit) {
|
|
12
|
+
return transit.routes.map(function (route) {
|
|
13
|
+
return route.id;
|
|
14
|
+
}).join("/");
|
|
15
|
+
}).join(","));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (optStrs.indexOf(optStr) !== -1) return false;
|
|
19
|
+
optStrs.push(optStr);
|
|
20
|
+
filteredIndices.push(i);
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
23
|
+
var filteredJourneys = response.otp.journeys.filter(function (journey, i) {
|
|
24
|
+
return filteredIndices.indexOf(i) !== -1;
|
|
25
|
+
});
|
|
26
|
+
response.otp.profile = filteredProfile;
|
|
27
|
+
response.otp.journeys = filteredJourneys;
|
|
28
|
+
return response;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function locationString(str) {
|
|
32
|
+
return str === null || str === void 0 ? void 0 : str.split(",")[0];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function accessToLeg(access, origin, destination) {
|
|
36
|
+
return {
|
|
37
|
+
mode: access.mode,
|
|
38
|
+
duration: access.time,
|
|
39
|
+
transitLeg: false,
|
|
40
|
+
from: {
|
|
41
|
+
name: locationString(origin)
|
|
42
|
+
},
|
|
43
|
+
to: {
|
|
44
|
+
name: locationString(destination)
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
} // helper functions for profileOptionsToItineraries:
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
function optionToItinerary(option, query) {
|
|
51
|
+
var itin = {
|
|
52
|
+
duration: option.time,
|
|
53
|
+
legs: [],
|
|
54
|
+
walkTime: 0,
|
|
55
|
+
waitingTime: 0
|
|
56
|
+
}; // access leg
|
|
57
|
+
|
|
58
|
+
if (option.access && option.access.length > 0) {
|
|
59
|
+
if (option.access[0].mode === "BICYCLE_RENT") {
|
|
60
|
+
var status = "WALK_ON";
|
|
61
|
+
var walkOnEdges = [];
|
|
62
|
+
var bikeEdges = [];
|
|
63
|
+
var walkOffEdges = [];
|
|
64
|
+
var onStationName;
|
|
65
|
+
var walkOnTime = 0;
|
|
66
|
+
var offStationName;
|
|
67
|
+
var walkOffTime = 0;
|
|
68
|
+
option.access[0].streetEdges.forEach(function (edge) {
|
|
69
|
+
// check if we're returning the bike
|
|
70
|
+
if (edge.bikeRentalOffStation) {
|
|
71
|
+
status = "WALK_OFF";
|
|
72
|
+
offStationName = edge.bikeRentalOffStation.name;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (status === "WALK_ON") {
|
|
76
|
+
walkOnEdges.push(edge);
|
|
77
|
+
walkOnTime += edge.distance;
|
|
78
|
+
} else if (status === "BIKE") {
|
|
79
|
+
bikeEdges.push(edge);
|
|
80
|
+
} else if (status === "WALK_OFF") {
|
|
81
|
+
walkOffEdges.push(edge);
|
|
82
|
+
walkOffTime += edge.distance;
|
|
83
|
+
} // check if we're picking up the bike
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
if (edge.bikeRentalOnStation) {
|
|
87
|
+
status = "BIKE";
|
|
88
|
+
onStationName = edge.bikeRentalOnStation.name;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
itin.walkTime += walkOnTime + walkOffTime; // create the 'on' walk leg
|
|
92
|
+
|
|
93
|
+
itin.legs.push({
|
|
94
|
+
mode: "WALK",
|
|
95
|
+
duration: walkOnTime,
|
|
96
|
+
transitLeg: false,
|
|
97
|
+
from: {
|
|
98
|
+
name: locationString(query && query.from.name)
|
|
99
|
+
},
|
|
100
|
+
to: {
|
|
101
|
+
name: onStationName
|
|
102
|
+
}
|
|
103
|
+
}); // create the bike leg
|
|
104
|
+
|
|
105
|
+
itin.legs.push({
|
|
106
|
+
mode: "BICYCLE_RENT",
|
|
107
|
+
duration: option.time - walkOnTime - walkOffTime,
|
|
108
|
+
transitLeg: false,
|
|
109
|
+
from: {
|
|
110
|
+
name: onStationName
|
|
111
|
+
},
|
|
112
|
+
to: {
|
|
113
|
+
name: offStationName
|
|
114
|
+
}
|
|
115
|
+
}); // create the 'off' walk leg
|
|
116
|
+
|
|
117
|
+
itin.legs.push({
|
|
118
|
+
mode: "WALK",
|
|
119
|
+
duration: walkOffTime,
|
|
120
|
+
transitLeg: false,
|
|
121
|
+
from: {
|
|
122
|
+
name: offStationName
|
|
123
|
+
},
|
|
124
|
+
to: {
|
|
125
|
+
name: locationString(query && query.to.name)
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
} else {
|
|
129
|
+
itin.legs.push(accessToLeg(option.access[0], query && query.from.name, option.transit ? null : query && query.to.name));
|
|
130
|
+
if (option.access[0].mode === "WALK") itin.walkTime += option.access[0].time;
|
|
131
|
+
}
|
|
132
|
+
} // transit legs
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
if (option.transit) {
|
|
136
|
+
option.transit.forEach(function (transit) {
|
|
137
|
+
itin.legs.push({
|
|
138
|
+
transitLeg: true,
|
|
139
|
+
mode: transit.mode,
|
|
140
|
+
from: {
|
|
141
|
+
name: transit.fromName
|
|
142
|
+
},
|
|
143
|
+
to: {
|
|
144
|
+
name: transit.toName
|
|
145
|
+
},
|
|
146
|
+
routes: transit.routes,
|
|
147
|
+
duration: transit.rideStats.avg,
|
|
148
|
+
averageWait: transit.waitStats.avg
|
|
149
|
+
});
|
|
150
|
+
itin.waitingTime += transit.waitStats.avg;
|
|
151
|
+
});
|
|
152
|
+
} // egress leg
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
if (option.egress && option.egress.length > 0) {
|
|
156
|
+
// find the origin name, for transit trips
|
|
157
|
+
var origin = option.transit ? option.transit[option.transit.length - 1].toName : null;
|
|
158
|
+
itin.legs.push(accessToLeg(option.egress[0], origin, query && query.to.name));
|
|
159
|
+
if (option.egress[0].mode === "WALK") itin.walkTime += option.egress[0].time;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return itin;
|
|
163
|
+
}
|
|
164
|
+
/** profileOptionsToItineraries * */
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
export function profileOptionsToItineraries(options, query) {
|
|
168
|
+
return options.map(function (option) {
|
|
169
|
+
return optionToItinerary(option, query);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/profile.js"],"names":["filterProfileOptions","response","optStrs","filteredIndices","filteredProfile","otp","profile","filter","option","i","optStr","access","map","a","mode","join","transit","routes","route","id","indexOf","push","filteredJourneys","journeys","journey","locationString","str","split","accessToLeg","origin","destination","duration","time","transitLeg","from","name","to","optionToItinerary","query","itin","legs","walkTime","waitingTime","length","status","walkOnEdges","bikeEdges","walkOffEdges","onStationName","walkOnTime","offStationName","walkOffTime","streetEdges","forEach","edge","bikeRentalOffStation","distance","bikeRentalOnStation","fromName","toName","rideStats","avg","averageWait","waitStats","egress","profileOptionsToItineraries","options"],"mappings":"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","sourcesContent":["export function filterProfileOptions(response) {\n // Filter out similar options. TODO: handle on server?\n const optStrs = [];\n const filteredIndices = [];\n\n const filteredProfile = response.otp.profile.filter((option, i) => {\n let optStr = option.access.map(a => a.mode).join(\"/\");\n if (option.transit) {\n optStr += ` to ${option.transit\n .map(transit => {\n return transit.routes.map(route => route.id).join(\"/\");\n })\n .join(\",\")}`;\n }\n if (optStrs.indexOf(optStr) !== -1) return false;\n optStrs.push(optStr);\n filteredIndices.push(i);\n return true;\n });\n\n const filteredJourneys = response.otp.journeys.filter(\n (journey, i) => filteredIndices.indexOf(i) !== -1\n );\n\n response.otp.profile = filteredProfile;\n response.otp.journeys = filteredJourneys;\n return response;\n}\n\nfunction locationString(str) {\n return str?.split(\",\")[0];\n}\n\nfunction accessToLeg(access, origin, destination) {\n return {\n mode: access.mode,\n duration: access.time,\n transitLeg: false,\n from: {\n name: locationString(origin)\n },\n to: {\n name: locationString(destination)\n }\n };\n}\n\n// helper functions for profileOptionsToItineraries:\n\nfunction optionToItinerary(option, query) {\n const itin = {\n duration: option.time,\n legs: [],\n walkTime: 0,\n waitingTime: 0\n };\n\n // access leg\n if (option.access && option.access.length > 0) {\n if (option.access[0].mode === \"BICYCLE_RENT\") {\n let status = \"WALK_ON\";\n const walkOnEdges = [];\n const bikeEdges = [];\n const walkOffEdges = [];\n let onStationName;\n let walkOnTime = 0;\n let offStationName;\n let walkOffTime = 0;\n option.access[0].streetEdges.forEach(edge => {\n // check if we're returning the bike\n if (edge.bikeRentalOffStation) {\n status = \"WALK_OFF\";\n offStationName = edge.bikeRentalOffStation.name;\n }\n\n if (status === \"WALK_ON\") {\n walkOnEdges.push(edge);\n walkOnTime += edge.distance;\n } else if (status === \"BIKE\") {\n bikeEdges.push(edge);\n } else if (status === \"WALK_OFF\") {\n walkOffEdges.push(edge);\n walkOffTime += edge.distance;\n }\n\n // check if we're picking up the bike\n if (edge.bikeRentalOnStation) {\n status = \"BIKE\";\n onStationName = edge.bikeRentalOnStation.name;\n }\n });\n\n itin.walkTime += walkOnTime + walkOffTime;\n\n // create the 'on' walk leg\n itin.legs.push({\n mode: \"WALK\",\n duration: walkOnTime,\n transitLeg: false,\n from: {\n name: locationString(query && query.from.name)\n },\n to: {\n name: onStationName\n }\n });\n\n // create the bike leg\n itin.legs.push({\n mode: \"BICYCLE_RENT\",\n duration: option.time - walkOnTime - walkOffTime,\n transitLeg: false,\n from: {\n name: onStationName\n },\n to: {\n name: offStationName\n }\n });\n\n // create the 'off' walk leg\n itin.legs.push({\n mode: \"WALK\",\n duration: walkOffTime,\n transitLeg: false,\n from: {\n name: offStationName\n },\n to: {\n name: locationString(query && query.to.name)\n }\n });\n } else {\n itin.legs.push(\n accessToLeg(\n option.access[0],\n query && query.from.name,\n option.transit ? null : query && query.to.name\n )\n );\n if (option.access[0].mode === \"WALK\")\n itin.walkTime += option.access[0].time;\n }\n }\n\n // transit legs\n if (option.transit) {\n option.transit.forEach(transit => {\n itin.legs.push({\n transitLeg: true,\n mode: transit.mode,\n from: {\n name: transit.fromName\n },\n to: {\n name: transit.toName\n },\n routes: transit.routes,\n duration: transit.rideStats.avg,\n averageWait: transit.waitStats.avg\n });\n itin.waitingTime += transit.waitStats.avg;\n });\n }\n\n // egress leg\n if (option.egress && option.egress.length > 0) {\n // find the origin name, for transit trips\n const origin = option.transit\n ? option.transit[option.transit.length - 1].toName\n : null;\n\n itin.legs.push(\n accessToLeg(option.egress[0], origin, query && query.to.name)\n );\n if (option.egress[0].mode === \"WALK\")\n itin.walkTime += option.egress[0].time;\n }\n\n return itin;\n}\n\n/** profileOptionsToItineraries * */\n\nexport function profileOptionsToItineraries(options, query) {\n return options.map(option => optionToItinerary(option, query));\n}\n"],"file":"profile.js"}
|