@opentripplanner/core-utils 14.3.1 → 14.3.3
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 +1 -0
- package/esm/itinerary.js +13 -16
- package/esm/itinerary.js.map +1 -1
- package/lib/index.js +36 -23
- package/lib/index.js.map +1 -1
- package/lib/itinerary.d.ts +6 -8
- package/lib/itinerary.d.ts.map +1 -1
- package/lib/itinerary.js +620 -540
- package/lib/itinerary.js.map +1 -1
- package/lib/map.js +51 -38
- package/lib/map.js.map +1 -1
- package/lib/query-gen.js +141 -128
- package/lib/query-gen.js.map +1 -1
- package/lib/route.js +261 -225
- package/lib/route.js.map +1 -1
- package/lib/storage.js +31 -22
- package/lib/storage.js.map +1 -1
- package/lib/suspense.js +17 -5
- package/lib/suspense.js.map +1 -1
- package/lib/time.js +58 -33
- package/lib/time.js.map +1 -1
- package/lib/ui.js +39 -31
- package/lib/ui.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/itinerary.ts +34 -21
- package/src/itinerary.ts +21 -17
- package/tsconfig.tsbuildinfo +1 -1
package/lib/query-gen.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TRANSIT_SUBMODES_AND_TRANSIT = exports.TRANSIT_SUBMODES = exports.SIMPLIFICATIONS = void 0;
|
|
7
|
+
exports.extractAdditionalModes = extractAdditionalModes;
|
|
8
|
+
exports.generateCombinations = generateCombinations;
|
|
9
|
+
exports.generateOtp2Query = generateOtp2Query;
|
|
10
|
+
var _graphql = require("graphql");
|
|
11
|
+
var DefaultPlanQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "Plan" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "arriveBy" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "banned" } }, type: { kind: "NamedType", name: { kind: "Name", value: "InputBanned" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "bikeReluctance" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "carReluctance" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "date" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "fromPlace" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "modes" } }, type: { kind: "ListType", type: { kind: "NamedType", name: { kind: "Name", value: "TransportMode" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "numItineraries" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Int" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "time" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "toPlace" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "unpreferred" } }, type: { kind: "NamedType", name: { kind: "Name", value: "InputUnpreferred" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "walkReluctance" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "walkSpeed" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "wheelchair" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "plan" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "arriveBy" }, value: { kind: "Variable", name: { kind: "Name", value: "arriveBy" } } }, { kind: "Argument", name: { kind: "Name", value: "banned" }, value: { kind: "Variable", name: { kind: "Name", value: "banned" } } }, { kind: "Argument", name: { kind: "Name", value: "bikeReluctance" }, value: { kind: "Variable", name: { kind: "Name", value: "bikeReluctance" } } }, { kind: "Argument", name: { kind: "Name", value: "carReluctance" }, value: { kind: "Variable", name: { kind: "Name", value: "carReluctance" } } }, { kind: "Argument", name: { kind: "Name", value: "date" }, value: { kind: "Variable", name: { kind: "Name", value: "date" } } }, { kind: "Argument", name: { kind: "Name", value: "fromPlace" }, value: { kind: "Variable", name: { kind: "Name", value: "fromPlace" } } }, { kind: "Argument", name: { kind: "Name", value: "locale" }, value: { kind: "StringValue", value: "en", block: false } }, { kind: "Argument", name: { kind: "Name", value: "numItineraries" }, value: { kind: "Variable", name: { kind: "Name", value: "numItineraries" } } }, { kind: "Argument", name: { kind: "Name", value: "time" }, value: { kind: "Variable", name: { kind: "Name", value: "time" } } }, { kind: "Argument", name: { kind: "Name", value: "toPlace" }, value: { kind: "Variable", name: { kind: "Name", value: "toPlace" } } }, { kind: "Argument", name: { kind: "Name", value: "transportModes" }, value: { kind: "Variable", name: { kind: "Name", value: "modes" } } }, { kind: "Argument", name: { kind: "Name", value: "unpreferred" }, value: { kind: "Variable", name: { kind: "Name", value: "unpreferred" } } }, { kind: "Argument", name: { kind: "Name", value: "walkReluctance" }, value: { kind: "Variable", name: { kind: "Name", value: "walkReluctance" } } }, { kind: "Argument", name: { kind: "Name", value: "walkSpeed" }, value: { kind: "Variable", name: { kind: "Name", value: "walkSpeed" } } }, { kind: "Argument", name: { kind: "Name", value: "wheelchair" }, value: { kind: "Variable", name: { kind: "Name", value: "wheelchair" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "itineraries" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "accessibilityScore" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "duration" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "endTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "legs" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "accessibilityScore" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "agency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "id" }, name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "timezone" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "url" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "arrivalDelay" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "departureDelay" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "distance" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "dropOffBookingInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "contactInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "bookingUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "infoUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "phoneNumber" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "earliestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "latestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "message" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "dropoffType" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "duration" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "endTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "fareProducts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "product" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "__typename" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "medium" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "riderCategory" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }] } }, { kind: "InlineFragment", typeCondition: { kind: "NamedType", name: { kind: "Name", value: "DefaultFareProduct" } }, directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "price" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "amount" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "currency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "digits" }, arguments: [], directives: [] }] } }] } }] } }, { kind: "InlineFragment", typeCondition: { kind: "NamedType", name: { kind: "Name", value: "DependentFareProduct" } }, directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "dependencies" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "price" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "amount" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "currency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }, { kind: "Field", name: { kind: "Name", value: "from" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rentalVehicle" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "network" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "vertexType" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "headsign" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "interlineWithPreviousLeg" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "intermediateStops" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "locationType" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "stopCode" }, name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "stopId" }, name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "legGeometry" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "length" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "points" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "mode" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "pickupBookingInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "contactInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "bookingUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "infoUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "phoneNumber" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "earliestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "latestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "message" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "pickupType" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "realTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "realtimeState" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rentedBike" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rideHailingEstimate" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "arrival" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "maxPrice" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "amount" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "currency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "minPrice" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "amount" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "currency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "provider" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "route" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "color" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "id" }, name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "longName" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "shortName" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "textColor" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "type" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "startTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "steps" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "absoluteDirection" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "area" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "distance" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "elevationProfile" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "distance" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "elevation" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "relativeDirection" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "stayOn" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "streetName" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stopCalls" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "stopLocation" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "__typename" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "to" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rentalVehicle" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "network" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "vertexType" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "transitLeg" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "trip" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "arrivalStoptime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stopPosition" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "departureStoptime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stopPosition" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "startTime" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "transfers" }, name: { kind: "Name", value: "numberOfTransfers" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "waitingTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "walkTime" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "routingErrors" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "description" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "inputField" }, arguments: [], directives: [] }] } }] } }] } }], loc: { start: 0, end: 5788, source: { body: "query Plan(\n $arriveBy: Boolean\n $banned: InputBanned\n $bikeReluctance: Float\n $carReluctance: Float\n $date: String\n $fromPlace: String!\n $modes: [TransportMode]\n $numItineraries: Int\n $time: String\n $toPlace: String!\n $unpreferred: InputUnpreferred\n $walkReluctance: Float\n $walkSpeed: Float\n $wheelchair: Boolean\n) {\n plan(\n arriveBy: $arriveBy\n banned: $banned\n bikeReluctance: $bikeReluctance\n carReluctance: $carReluctance\n date: $date\n fromPlace: $fromPlace\n # Currently only supporting EN locale, used for times and text\n locale: \"en\"\n numItineraries: $numItineraries\n time: $time\n toPlace: $toPlace\n transportModes: $modes\n unpreferred: $unpreferred\n walkReluctance: $walkReluctance\n walkSpeed: $walkSpeed\n wheelchair: $wheelchair\n ) {\n itineraries {\n accessibilityScore\n duration\n endTime\n legs {\n accessibilityScore\n agency {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n gtfsId\n id: gtfsId\n name\n timezone\n url\n }\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n arrivalDelay\n departureDelay\n distance\n dropOffBookingInfo {\n contactInfo {\n bookingUrl\n infoUrl\n phoneNumber\n }\n earliestBookingTime {\n daysPrior\n time\n }\n latestBookingTime {\n daysPrior\n time\n }\n message\n }\n dropoffType\n duration\n endTime\n fareProducts {\n id\n product {\n __typename\n id\n medium {\n id\n name\n }\n name\n riderCategory {\n id\n name\n }\n ... on DefaultFareProduct {\n price {\n amount\n currency {\n code\n digits\n }\n }\n }\n ... on DependentFareProduct {\n dependencies {\n id\n }\n price {\n amount\n currency {\n code\n }\n }\n }\n }\n }\n from {\n lat\n lon\n name\n rentalVehicle {\n id\n network\n }\n stop {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n code\n gtfsId\n id\n lat\n lon\n }\n vertexType\n }\n headsign\n id\n interlineWithPreviousLeg\n intermediateStops {\n lat\n locationType\n lon\n name\n stopCode: code\n stopId: id\n }\n legGeometry {\n length\n points\n }\n mode\n pickupBookingInfo {\n contactInfo {\n bookingUrl\n infoUrl\n phoneNumber\n }\n earliestBookingTime {\n daysPrior\n time\n }\n latestBookingTime {\n daysPrior\n time\n }\n message\n }\n pickupType\n realTime\n realtimeState\n rentedBike\n rideHailingEstimate {\n arrival\n maxPrice {\n amount\n currency {\n code\n }\n }\n minPrice {\n amount\n currency {\n code\n }\n }\n provider {\n id\n }\n }\n route {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n color\n gtfsId\n id: gtfsId\n longName\n shortName\n textColor\n type\n }\n startTime\n steps {\n absoluteDirection\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n area\n distance\n elevationProfile {\n distance\n elevation\n }\n lat\n lon\n relativeDirection\n stayOn\n streetName\n }\n stopCalls {\n stopLocation {\n __typename\n }\n }\n to {\n lat\n lon\n name\n rentalVehicle {\n id\n network\n }\n stop {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n code\n gtfsId\n id\n lat\n lon\n }\n vertexType\n }\n transitLeg\n trip {\n arrivalStoptime {\n stop {\n gtfsId\n id\n }\n stopPosition\n }\n departureStoptime {\n stop {\n gtfsId\n id\n }\n stopPosition\n }\n gtfsId\n id\n }\n }\n startTime\n transfers: numberOfTransfers\n waitingTime\n walkTime\n }\n routingErrors {\n code\n description\n inputField\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
|
|
3
12
|
/**
|
|
4
13
|
* Mode Settings can contain additional modes to add to the query,
|
|
5
14
|
* this function extracts those additional modes from the settings
|
|
@@ -7,31 +16,29 @@ import DefaultPlanQuery from "./planQuery.graphql";
|
|
|
7
16
|
* @param modeSettings List of mode settings with values populated
|
|
8
17
|
* @returns Additional transport modes to add to query
|
|
9
18
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
return prev;
|
|
33
|
-
}, []);
|
|
19
|
+
function extractAdditionalModes(modeSettings, enabledModes) {
|
|
20
|
+
return modeSettings.reduce((prev, cur) => {
|
|
21
|
+
// First, ensure that the mode associated with this setting is even enabled
|
|
22
|
+
if (!enabledModes.map(m => m.mode).includes(cur.applicableMode)) {
|
|
23
|
+
return prev;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// In checkboxes, mode must be enabled and have a transport mode in it
|
|
27
|
+
if ((cur.type === "CHECKBOX" || cur.type === "SUBMODE") && cur.addTransportMode && cur.value) {
|
|
28
|
+
const newTransportModes = Array.isArray(cur.addTransportMode) ? cur.addTransportMode : [cur.addTransportMode];
|
|
29
|
+
return [...prev, ...newTransportModes];
|
|
30
|
+
}
|
|
31
|
+
if (cur.type === "DROPDOWN") {
|
|
32
|
+
var _cur$options$find;
|
|
33
|
+
const transportMode = (_cur$options$find = cur.options.find(o => o.value === cur.value)) === null || _cur$options$find === void 0 ? void 0 : _cur$options$find.addTransportMode;
|
|
34
|
+
if (transportMode) {
|
|
35
|
+
return [...prev, transportMode];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return prev;
|
|
39
|
+
}, []);
|
|
34
40
|
}
|
|
41
|
+
|
|
35
42
|
/**
|
|
36
43
|
* Generates every possible mathematical subset of the input TransportModes.
|
|
37
44
|
* Uses code from:
|
|
@@ -40,133 +47,139 @@ export function extractAdditionalModes(modeSettings, enabledModes) {
|
|
|
40
47
|
* @returns 2D array representing every possible subset of transport modes from input
|
|
41
48
|
*/
|
|
42
49
|
function combinations(array) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
50
|
+
if (!array) return [];
|
|
51
|
+
return (
|
|
52
|
+
// eslint-disable-next-line no-bitwise
|
|
53
|
+
new Array(1 << array.length).fill(null)
|
|
46
54
|
// eslint-disable-next-line no-bitwise
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// eslint-disable-next-line no-bitwise
|
|
50
|
-
.map((e1, i) => array.filter((e2, j) => i & (1 << j))));
|
|
55
|
+
.map((e1, i) => array.filter((e2, j) => i & 1 << j))
|
|
56
|
+
);
|
|
51
57
|
}
|
|
58
|
+
|
|
52
59
|
/**
|
|
53
60
|
* This constant maps all the transport mode to a broader mode type,
|
|
54
61
|
* which is used to determine the valid combinations of modes used in query generation.
|
|
55
62
|
*/
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
const SIMPLIFICATIONS = exports.SIMPLIFICATIONS = {
|
|
64
|
+
AIRPLANE: "TRANSIT",
|
|
65
|
+
BICYCLE: "PERSONAL",
|
|
66
|
+
BUS: "TRANSIT",
|
|
67
|
+
CABLE_CAR: "TRANSIT",
|
|
68
|
+
CAR: "CAR",
|
|
69
|
+
FERRY: "TRANSIT",
|
|
70
|
+
FLEX: "SHARED",
|
|
71
|
+
// TODO: this allows FLEX+WALK. Is this reasonable?
|
|
72
|
+
FUNICULAR: "TRANSIT",
|
|
73
|
+
GONDOLA: "TRANSIT",
|
|
74
|
+
RAIL: "TRANSIT",
|
|
75
|
+
MONORAIL: "TRANSIT",
|
|
76
|
+
SCOOTER: "PERSONAL",
|
|
77
|
+
SUBWAY: "TRANSIT",
|
|
78
|
+
TROLLEYBUS: "TRANSIT",
|
|
79
|
+
TRAM: "TRANSIT",
|
|
80
|
+
TRANSIT: "TRANSIT",
|
|
81
|
+
WALK: "WALK"
|
|
74
82
|
};
|
|
83
|
+
|
|
75
84
|
// Inclusion of "TRANSIT" alone automatically implies "WALK" in OTP
|
|
76
|
-
const VALID_COMBOS = [
|
|
77
|
-
["WALK"],
|
|
78
|
-
["PERSONAL"],
|
|
79
|
-
["TRANSIT", "SHARED"],
|
|
80
|
-
["WALK", "SHARED"],
|
|
81
|
-
["TRANSIT"],
|
|
82
|
-
["TRANSIT", "PERSONAL"],
|
|
83
|
-
["TRANSIT", "CAR"]
|
|
84
|
-
];
|
|
85
|
+
const VALID_COMBOS = [["WALK"], ["PERSONAL"], ["TRANSIT", "SHARED"], ["WALK", "SHARED"], ["TRANSIT"], ["TRANSIT", "PERSONAL"], ["TRANSIT", "CAR"]];
|
|
85
86
|
const BANNED_TOGETHER = ["SCOOTER", "BICYCLE", "CAR"];
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
const TRANSIT_SUBMODES = exports.TRANSIT_SUBMODES = Object.keys(SIMPLIFICATIONS).filter(mode => SIMPLIFICATIONS[mode] === "TRANSIT" && mode !== "TRANSIT");
|
|
88
|
+
const TRANSIT_SUBMODES_AND_TRANSIT = exports.TRANSIT_SUBMODES_AND_TRANSIT = Object.keys(SIMPLIFICATIONS).filter(mode => SIMPLIFICATIONS[mode] === "TRANSIT");
|
|
88
89
|
function isCombinationValid(combo, queryTransitSubmodes) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (combo.reduce((prev, cur) => {
|
|
100
|
-
if (queryTransitSubmodes.includes(cur.mode)) {
|
|
101
|
-
return prev - 1;
|
|
102
|
-
}
|
|
103
|
-
return prev;
|
|
104
|
-
}, queryTransitSubmodes.length) !== 0) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
// Continue to the other checks
|
|
90
|
+
if (combo.length === 0) return false;
|
|
91
|
+
|
|
92
|
+
// All current qualifiers currently simplify to "SHARED"
|
|
93
|
+
const simplifiedModes = Array.from(new Set(combo.map(c => c.qualifier ? "SHARED" : SIMPLIFICATIONS[c.mode])));
|
|
94
|
+
|
|
95
|
+
// Ensure that if we have one transit mode, then we include ALL transit modes
|
|
96
|
+
if (simplifiedModes.includes("TRANSIT")) {
|
|
97
|
+
// Don't allow TRANSIT along with any other submodes
|
|
98
|
+
if (queryTransitSubmodes.length && combo.find(c => c.mode === "TRANSIT")) {
|
|
99
|
+
return false;
|
|
108
100
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
return
|
|
101
|
+
if (combo.reduce((prev, cur) => {
|
|
102
|
+
if (queryTransitSubmodes.includes(cur.mode)) {
|
|
103
|
+
return prev - 1;
|
|
104
|
+
}
|
|
105
|
+
return prev;
|
|
106
|
+
}, queryTransitSubmodes.length) !== 0) {
|
|
107
|
+
return false;
|
|
112
108
|
}
|
|
113
|
-
|
|
114
|
-
|
|
109
|
+
// Continue to the other checks
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// OTP doesn't support multiple non-walk modes
|
|
113
|
+
if (BANNED_TOGETHER.filter(m => combo.find(c => c.mode === m)).length > 1) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return !!VALID_COMBOS.find(vc => simplifiedModes.length === vc.length && vc.every(m => simplifiedModes.includes(m)));
|
|
115
117
|
}
|
|
118
|
+
|
|
116
119
|
/**
|
|
117
120
|
* Generates a list of queries for OTP to get a comprehensive
|
|
118
121
|
* set of results based on the modes input.
|
|
119
122
|
* @param params OTP Query Params
|
|
120
123
|
* @returns Set of parameters to generate queries
|
|
121
124
|
*/
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return combinations(completeModeList)
|
|
132
|
-
.filter(combo => isCombinationValid(combo, queryTransitSubmodes))
|
|
133
|
-
.map(combo => ({ ...params, modes: combo }));
|
|
125
|
+
function generateCombinations(params) {
|
|
126
|
+
const completeModeList = [...extractAdditionalModes(params.modeSettings, params.modes), ...params.modes];
|
|
127
|
+
|
|
128
|
+
// List of the transit *submodes* that are included in the input params
|
|
129
|
+
const queryTransitSubmodes = completeModeList.filter(mode => TRANSIT_SUBMODES.includes(mode.mode)).map(mode => mode.mode);
|
|
130
|
+
return combinations(completeModeList).filter(combo => isCombinationValid(combo, queryTransitSubmodes)).map(combo => ({
|
|
131
|
+
...params,
|
|
132
|
+
modes: combo
|
|
133
|
+
}));
|
|
134
134
|
}
|
|
135
|
+
|
|
135
136
|
/**
|
|
136
137
|
* Generates a query for OTP GraphQL API based on parameters.
|
|
137
138
|
* @param param0 OTP2 Parameters for the query
|
|
138
139
|
* @param planQuery Override the default query for OTP
|
|
139
140
|
* @returns A fully formed query+variables ready to be sent to GraphQL backend
|
|
140
141
|
*/
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
142
|
+
function generateOtp2Query(otpQueryParams, planQuery = DefaultPlanQuery) {
|
|
143
|
+
const {
|
|
144
|
+
from,
|
|
145
|
+
modeSettings,
|
|
146
|
+
to,
|
|
147
|
+
...otherOtpQueryParams
|
|
148
|
+
} = otpQueryParams;
|
|
149
|
+
|
|
150
|
+
// This extracts the values from the mode settings to key value pairs
|
|
151
|
+
const modeSettingValues = modeSettings.reduce((prev, cur) => {
|
|
152
|
+
if (cur.type === "SLIDER" && cur.inverseKey) {
|
|
153
|
+
prev[cur.inverseKey] = cur.high - cur.value + cur.low;
|
|
154
|
+
}
|
|
155
|
+
prev[cur.key] = cur.value;
|
|
156
|
+
|
|
157
|
+
// If we assign a value on true, return the value (or null) instead of a boolean.
|
|
158
|
+
if (cur.type === "CHECKBOX" && cur.truthValue) {
|
|
159
|
+
var _cur$falseValue;
|
|
160
|
+
prev[cur.key] = cur.value === true ? cur.truthValue : (_cur$falseValue = cur.falseValue) !== null && _cur$falseValue !== void 0 ? _cur$falseValue : null;
|
|
161
|
+
}
|
|
162
|
+
return prev;
|
|
163
|
+
}, {});
|
|
164
|
+
const {
|
|
165
|
+
bikeReluctance,
|
|
166
|
+
carReluctance,
|
|
167
|
+
walkReluctance,
|
|
168
|
+
walkSpeed,
|
|
169
|
+
wheelchair
|
|
170
|
+
} = modeSettingValues;
|
|
171
|
+
return {
|
|
172
|
+
query: (0, _graphql.print)(planQuery),
|
|
173
|
+
variables: {
|
|
174
|
+
...otherOtpQueryParams,
|
|
175
|
+
bikeReluctance,
|
|
176
|
+
carReluctance,
|
|
177
|
+
fromPlace: `${from.name}::${from.lat},${from.lon}`,
|
|
178
|
+
toPlace: `${to.name}::${to.lat},${to.lon}`,
|
|
179
|
+
walkReluctance,
|
|
180
|
+
walkSpeed,
|
|
181
|
+
wheelchair
|
|
182
|
+
}
|
|
183
|
+
};
|
|
171
184
|
}
|
|
172
185
|
//# sourceMappingURL=query-gen.js.map
|
package/lib/query-gen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-gen.js","sourceRoot":"","sources":["../src/query-gen.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-gen.js","names":["_graphql","require","DefaultPlanQuery","kind","definitions","operation","name","value","variableDefinitions","variable","type","directives","selectionSet","selections","arguments","block","alias","typeCondition","loc","start","end","source","body","locationOffset","line","column","extractAdditionalModes","modeSettings","enabledModes","reduce","prev","cur","map","m","mode","includes","applicableMode","addTransportMode","newTransportModes","Array","isArray","_cur$options$find","transportMode","options","find","o","combinations","array","length","fill","e1","i","filter","e2","j","SIMPLIFICATIONS","exports","AIRPLANE","BICYCLE","BUS","CABLE_CAR","CAR","FERRY","FLEX","FUNICULAR","GONDOLA","RAIL","MONORAIL","SCOOTER","SUBWAY","TROLLEYBUS","TRAM","TRANSIT","WALK","VALID_COMBOS","BANNED_TOGETHER","TRANSIT_SUBMODES","Object","keys","TRANSIT_SUBMODES_AND_TRANSIT","isCombinationValid","combo","queryTransitSubmodes","simplifiedModes","from","Set","c","qualifier","vc","every","generateCombinations","params","completeModeList","modes","generateOtp2Query","otpQueryParams","planQuery","to","otherOtpQueryParams","modeSettingValues","inverseKey","high","low","key","truthValue","_cur$falseValue","falseValue","bikeReluctance","carReluctance","walkReluctance","walkSpeed","wheelchair","query","print","variables","fromPlace","lat","lon","toPlace"],"sources":["../src/query-gen.ts"],"sourcesContent":["import { LonLatOutput } from \"@conveyal/lonlat\";\nimport { print } from \"graphql\";\nimport {\n ModeSetting,\n ModeSettingValues,\n TransportMode\n} from \"@opentripplanner/types\";\n\nimport DefaultPlanQuery from \"./planQuery.graphql\";\n\ntype InputBanned = {\n routes?: string;\n agencies?: string;\n trips?: string;\n stops?: string;\n stopsHard?: string;\n};\n\ntype InputPreferred = {\n routes?: string;\n agencies?: string;\n unpreferredCost?: string;\n};\n\ntype OTPQueryParams = {\n arriveBy: boolean;\n date?: string;\n from: LonLatOutput & { name?: string };\n modes: TransportMode[];\n modeSettings: ModeSetting[];\n time?: string;\n numItineraries?: number;\n to: LonLatOutput & { name?: string };\n banned?: InputBanned;\n preferred?: InputPreferred;\n unpreferred?: InputPreferred;\n};\n\ntype GraphQLQuery = {\n query: string;\n variables: Record<string, unknown>;\n};\n\n/**\n * Mode Settings can contain additional modes to add to the query,\n * this function extracts those additional modes from the settings\n * and returns them in an array.\n * @param modeSettings List of mode settings with values populated\n * @returns Additional transport modes to add to query\n */\nexport function extractAdditionalModes(\n modeSettings: ModeSetting[],\n enabledModes: TransportMode[]\n): TransportMode[] {\n return modeSettings.reduce<TransportMode[]>((prev, cur) => {\n // First, ensure that the mode associated with this setting is even enabled\n if (!enabledModes.map(m => m.mode).includes(cur.applicableMode)) {\n return prev;\n }\n\n // In checkboxes, mode must be enabled and have a transport mode in it\n if (\n (cur.type === \"CHECKBOX\" || cur.type === \"SUBMODE\") &&\n cur.addTransportMode &&\n cur.value\n ) {\n const newTransportModes = Array.isArray(cur.addTransportMode)\n ? cur.addTransportMode\n : [cur.addTransportMode];\n return [...prev, ...newTransportModes];\n }\n if (cur.type === \"DROPDOWN\") {\n const transportMode = cur.options.find(o => o.value === cur.value)\n ?.addTransportMode;\n if (transportMode) {\n return [...prev, transportMode];\n }\n }\n return prev;\n }, []);\n}\n\n/**\n * Generates every possible mathematical subset of the input TransportModes.\n * Uses code from:\n * https://stackoverflow.com/questions/5752002/find-all-possible-subset-combos-in-an-array\n * @param array Array of input transport modes\n * @returns 2D array representing every possible subset of transport modes from input\n */\nfunction combinations(array: TransportMode[]): TransportMode[][] {\n if (!array) return [];\n return (\n // eslint-disable-next-line no-bitwise\n new Array(1 << array.length)\n .fill(null)\n // eslint-disable-next-line no-bitwise\n .map((e1, i) => array.filter((e2, j) => i & (1 << j)))\n );\n}\n\n/**\n * This constant maps all the transport mode to a broader mode type,\n * which is used to determine the valid combinations of modes used in query generation.\n */\nexport const SIMPLIFICATIONS = {\n AIRPLANE: \"TRANSIT\",\n BICYCLE: \"PERSONAL\",\n BUS: \"TRANSIT\",\n CABLE_CAR: \"TRANSIT\",\n CAR: \"CAR\",\n FERRY: \"TRANSIT\",\n FLEX: \"SHARED\", // TODO: this allows FLEX+WALK. Is this reasonable?\n FUNICULAR: \"TRANSIT\",\n GONDOLA: \"TRANSIT\",\n RAIL: \"TRANSIT\",\n MONORAIL: \"TRANSIT\",\n SCOOTER: \"PERSONAL\",\n SUBWAY: \"TRANSIT\",\n TROLLEYBUS: \"TRANSIT\",\n TRAM: \"TRANSIT\",\n TRANSIT: \"TRANSIT\",\n WALK: \"WALK\"\n};\n\n// Inclusion of \"TRANSIT\" alone automatically implies \"WALK\" in OTP\nconst VALID_COMBOS = [\n [\"WALK\"],\n [\"PERSONAL\"],\n [\"TRANSIT\", \"SHARED\"],\n [\"WALK\", \"SHARED\"],\n [\"TRANSIT\"],\n [\"TRANSIT\", \"PERSONAL\"],\n [\"TRANSIT\", \"CAR\"]\n];\n\nconst BANNED_TOGETHER = [\"SCOOTER\", \"BICYCLE\", \"CAR\"];\n\nexport const TRANSIT_SUBMODES = Object.keys(SIMPLIFICATIONS).filter(\n mode => SIMPLIFICATIONS[mode] === \"TRANSIT\" && mode !== \"TRANSIT\"\n);\nexport const TRANSIT_SUBMODES_AND_TRANSIT = Object.keys(SIMPLIFICATIONS).filter(\n mode => SIMPLIFICATIONS[mode] === \"TRANSIT\"\n);\n\nfunction isCombinationValid(\n combo: TransportMode[],\n queryTransitSubmodes: string[]\n): boolean {\n if (combo.length === 0) return false;\n\n // All current qualifiers currently simplify to \"SHARED\"\n const simplifiedModes = Array.from(\n new Set(combo.map(c => (c.qualifier ? \"SHARED\" : SIMPLIFICATIONS[c.mode])))\n );\n\n // Ensure that if we have one transit mode, then we include ALL transit modes\n if (simplifiedModes.includes(\"TRANSIT\")) {\n // Don't allow TRANSIT along with any other submodes\n if (queryTransitSubmodes.length && combo.find(c => c.mode === \"TRANSIT\")) {\n return false;\n }\n\n if (\n combo.reduce((prev, cur) => {\n if (queryTransitSubmodes.includes(cur.mode)) {\n return prev - 1;\n }\n return prev;\n }, queryTransitSubmodes.length) !== 0\n ) {\n return false;\n }\n // Continue to the other checks\n }\n\n // OTP doesn't support multiple non-walk modes\n if (BANNED_TOGETHER.filter(m => combo.find(c => c.mode === m)).length > 1) {\n return false;\n }\n\n return !!VALID_COMBOS.find(\n vc =>\n simplifiedModes.length === vc.length &&\n vc.every(m => simplifiedModes.includes(m))\n );\n}\n\n/**\n * Generates a list of queries for OTP to get a comprehensive\n * set of results based on the modes input.\n * @param params OTP Query Params\n * @returns Set of parameters to generate queries\n */\nexport function generateCombinations(params: OTPQueryParams): OTPQueryParams[] {\n const completeModeList = [\n ...extractAdditionalModes(params.modeSettings, params.modes),\n ...params.modes\n ];\n\n // List of the transit *submodes* that are included in the input params\n const queryTransitSubmodes = completeModeList\n .filter(mode => TRANSIT_SUBMODES.includes(mode.mode))\n .map(mode => mode.mode);\n\n return combinations(completeModeList)\n .filter(combo => isCombinationValid(combo, queryTransitSubmodes))\n .map(combo => ({ ...params, modes: combo }));\n}\n\n/**\n * Generates a query for OTP GraphQL API based on parameters.\n * @param param0 OTP2 Parameters for the query\n * @param planQuery Override the default query for OTP\n * @returns A fully formed query+variables ready to be sent to GraphQL backend\n */\nexport function generateOtp2Query(\n otpQueryParams: OTPQueryParams,\n planQuery = DefaultPlanQuery\n): GraphQLQuery {\n const { from, modeSettings, to, ...otherOtpQueryParams } = otpQueryParams;\n\n // This extracts the values from the mode settings to key value pairs\n const modeSettingValues = modeSettings.reduce((prev, cur) => {\n if (cur.type === \"SLIDER\" && cur.inverseKey) {\n prev[cur.inverseKey] = cur.high - cur.value + cur.low;\n }\n prev[cur.key] = cur.value;\n\n // If we assign a value on true, return the value (or null) instead of a boolean.\n if (cur.type === \"CHECKBOX\" && cur.truthValue) {\n prev[cur.key] =\n cur.value === true ? cur.truthValue : cur.falseValue ?? null;\n }\n return prev;\n }, {}) as ModeSettingValues;\n\n const {\n bikeReluctance,\n carReluctance,\n walkReluctance,\n walkSpeed,\n wheelchair\n } = modeSettingValues;\n\n return {\n query: print(planQuery),\n variables: {\n ...otherOtpQueryParams,\n bikeReluctance,\n carReluctance,\n fromPlace: `${from.name}::${from.lat},${from.lon}`,\n toPlace: `${to.name}::${to.lat},${to.lon}`,\n walkReluctance,\n walkSpeed,\n wheelchair\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|