corequery-gtfs 0.6.0 → 0.8.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/dist/corequeryify/service-conversion-iterator.js +3 -1
- package/dist/corequeryify/service-conversion-iterator.js.map +1 -1
- package/dist/corequeryify/service-converter.d.ts +4 -1
- package/dist/corequeryify/service-converter.js +32 -39
- package/dist/corequeryify/service-converter.js.map +1 -1
- package/dist/data/gtfs-feed.d.ts +6 -2
- package/dist/data/gtfs-feed.js +25 -1
- package/dist/data/gtfs-feed.js.map +1 -1
- package/dist/data/gtfs-realtime-data.d.ts +9 -1
- package/dist/data/gtfs-realtime-data.js +24 -2
- package/dist/data/gtfs-realtime-data.js.map +1 -1
- package/dist/data/gtfs-realtime-transfer.d.ts +12 -0
- package/dist/data/gtfs-realtime-transfer.js +21 -0
- package/dist/data/gtfs-realtime-transfer.js.map +1 -0
- package/dist/data/gtfs-schedule-data.d.ts +14 -1
- package/dist/data/gtfs-schedule-data.js +27 -2
- package/dist/data/gtfs-schedule-data.js.map +1 -1
- package/dist/data/gtfs-scheduled-trip.d.ts +0 -6
- package/dist/data/gtfs-scheduled-trip.js +0 -14
- package/dist/data/gtfs-scheduled-trip.js.map +1 -1
- package/dist/data/gtfs-transfer-mapping.d.ts +15 -0
- package/dist/data/gtfs-transfer-mapping.js +45 -0
- package/dist/data/gtfs-transfer-mapping.js.map +1 -0
- package/dist/data/gtfs-transfer.d.ts +18 -0
- package/dist/data/gtfs-transfer.js +20 -0
- package/dist/data/gtfs-transfer.js.map +1 -0
- package/dist/data/raw/schedule-csvs.d.ts +0 -18
- package/dist/departures/departures-block-iterator.js +1 -0
- package/dist/departures/departures-block-iterator.js.map +1 -1
- package/dist/departures/departures-iterator.js +1 -7
- package/dist/departures/departures-iterator.js.map +1 -1
- package/dist/departures/filter-iterator.d.ts +11 -0
- package/dist/departures/filter-iterator.js +30 -0
- package/dist/departures/filter-iterator.js.map +1 -0
- package/dist/departures/realtime-departures-block-iterator.d.ts +1 -2
- package/dist/departures/realtime-departures-block-iterator.js +1 -16
- package/dist/departures/realtime-departures-block-iterator.js.map +1 -1
- package/dist/departures/scheduled-departures-block-iterator.d.ts +0 -1
- package/dist/departures/scheduled-departures-block-iterator.js +0 -25
- package/dist/departures/scheduled-departures-block-iterator.js.map +1 -1
- package/dist/gtfs-service-source.js +1 -0
- package/dist/gtfs-service-source.js.map +1 -1
- package/dist/parser/realtime/gtfs-realtime-data-parser.d.ts +2 -0
- package/dist/parser/realtime/gtfs-realtime-data-parser.js +24 -1
- package/dist/parser/realtime/gtfs-realtime-data-parser.js.map +1 -1
- package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js +7 -5
- package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js.map +1 -1
- package/dist/parser/schedule/gtfs-schedule-data-parser.js +2 -2
- package/dist/parser/schedule/gtfs-schedule-data-parser.js.map +1 -1
- package/dist/parser/schedule/{gtfs-transfer-connector.d.ts → gtfs-transfer-parser.d.ts} +7 -4
- package/dist/parser/schedule/{gtfs-transfer-connector.js → gtfs-transfer-parser.js} +40 -22
- package/dist/parser/schedule/gtfs-transfer-parser.js.map +1 -0
- package/dist/parser/schedule/gtfs-trip-parser.d.ts +8 -4
- package/dist/parser/schedule/gtfs-trip-parser.js +11 -9
- package/dist/parser/schedule/gtfs-trip-parser.js.map +1 -1
- package/package.json +1 -1
- package/dist/parser/schedule/gtfs-transfer-connector.js.map +0 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export class GtfsTransferMapping {
|
|
2
|
+
_byTripId;
|
|
3
|
+
constructor(_byTripId) {
|
|
4
|
+
this._byTripId = _byTripId;
|
|
5
|
+
}
|
|
6
|
+
static build(transfers, extractInvolvedTripIds) {
|
|
7
|
+
const byTripId = new Map();
|
|
8
|
+
for (const transfer of transfers) {
|
|
9
|
+
for (const tripId of extractInvolvedTripIds(transfer)) {
|
|
10
|
+
const transfersInvolvingTrip = byTripId.get(tripId) ?? [];
|
|
11
|
+
transfersInvolvingTrip.push(transfer);
|
|
12
|
+
byTripId.set(tripId, transfersInvolvingTrip);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return new GtfsTransferMapping(byTripId);
|
|
16
|
+
}
|
|
17
|
+
forTripId(tripId) {
|
|
18
|
+
return this._byTripId.get(tripId) ?? [];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class MutableGtfsTransferMapping {
|
|
22
|
+
_extractInvolvedTripIds;
|
|
23
|
+
_map;
|
|
24
|
+
_array;
|
|
25
|
+
constructor(_extractInvolvedTripIds) {
|
|
26
|
+
this._extractInvolvedTripIds = _extractInvolvedTripIds;
|
|
27
|
+
this._map = new Map();
|
|
28
|
+
this._array = [];
|
|
29
|
+
}
|
|
30
|
+
push(transfer) {
|
|
31
|
+
this._array.push(transfer);
|
|
32
|
+
for (const tripId of this._extractInvolvedTripIds(transfer)) {
|
|
33
|
+
const transfersInvolvingTrip = this._map.get(tripId) ?? [];
|
|
34
|
+
transfersInvolvingTrip.push(transfer);
|
|
35
|
+
this._map.set(tripId, transfersInvolvingTrip);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
forTripId(tripId) {
|
|
39
|
+
return this._map.get(tripId) ?? [];
|
|
40
|
+
}
|
|
41
|
+
toArray() {
|
|
42
|
+
return this._array;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=gtfs-transfer-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gtfs-transfer-mapping.js","sourceRoot":"","sources":["../../src/data/gtfs-transfer-mapping.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAmB;IACO;IAArC,YAAqC,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAAG,CAAC;IAEpE,MAAM,CAAC,KAAK,CACV,SAAuB,EACvB,sBAA0D;QAE1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QACxC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,KAAK,MAAM,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,MAAM,sBAAsB,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1D,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,0BAA0B;IAKlB;IAJF,IAAI,CAAmB;IACvB,MAAM,CAAM;IAE7B,YACmB,uBAEK;QAFL,4BAAuB,GAAvB,uBAAuB,CAElB;QAEtB,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,QAAW;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3D,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type GtfsTransfer = GtfsEntireVehicleFormsServiceTransfer;
|
|
2
|
+
type IGtfsTransfer = {
|
|
3
|
+
getInvolvedTripIds(): readonly string[];
|
|
4
|
+
equals(other: IGtfsTransfer): boolean;
|
|
5
|
+
};
|
|
6
|
+
type GtfsEntireVehicleFormsServiceTransferFields = {
|
|
7
|
+
fromTripId: string;
|
|
8
|
+
toTripId: string;
|
|
9
|
+
};
|
|
10
|
+
export declare class GtfsEntireVehicleFormsServiceTransfer implements IGtfsTransfer {
|
|
11
|
+
readonly fromTripId: string;
|
|
12
|
+
readonly toTripId: string;
|
|
13
|
+
constructor(fields: GtfsEntireVehicleFormsServiceTransferFields);
|
|
14
|
+
get type(): "entire-vehicle-forms-service";
|
|
15
|
+
getInvolvedTripIds(): readonly string[];
|
|
16
|
+
equals(other: IGtfsTransfer): boolean;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class GtfsEntireVehicleFormsServiceTransfer {
|
|
2
|
+
fromTripId;
|
|
3
|
+
toTripId;
|
|
4
|
+
constructor(fields) {
|
|
5
|
+
this.fromTripId = fields.fromTripId;
|
|
6
|
+
this.toTripId = fields.toTripId;
|
|
7
|
+
}
|
|
8
|
+
get type() {
|
|
9
|
+
return "entire-vehicle-forms-service";
|
|
10
|
+
}
|
|
11
|
+
getInvolvedTripIds() {
|
|
12
|
+
return [this.fromTripId, this.toTripId];
|
|
13
|
+
}
|
|
14
|
+
equals(other) {
|
|
15
|
+
if (!(other instanceof GtfsEntireVehicleFormsServiceTransfer))
|
|
16
|
+
return false;
|
|
17
|
+
return (this.fromTripId === other.fromTripId && this.toTripId === other.toTripId);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=gtfs-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gtfs-transfer.js","sourceRoot":"","sources":["../../src/data/gtfs-transfer.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,qCAAqC;IACvC,UAAU,CAAS;IACnB,QAAQ,CAAS;IAE1B,YAAY,MAAmD;QAC7D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,8BAAuC,CAAC;IACjD,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,IAAI,CAAC,CAAC,KAAK,YAAY,qCAAqC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5E,OAAO,CACL,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CACzE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
import type { GtfsStopTime } from "../gtfs-stop-time.js";
|
|
2
|
-
export type StopsCsvRow = {
|
|
3
|
-
readonly stop_id: string;
|
|
4
|
-
readonly stop_name: string;
|
|
5
|
-
readonly stop_lat: number;
|
|
6
|
-
readonly stop_lon: number;
|
|
7
|
-
readonly stop_url: string;
|
|
8
|
-
readonly parent_station: string;
|
|
9
|
-
readonly platform_code?: string;
|
|
10
|
-
};
|
|
11
|
-
type StopsCsv = readonly StopsCsvRow[];
|
|
12
|
-
export type RoutesCsvRow = {
|
|
13
|
-
readonly route_id: string;
|
|
14
|
-
readonly route_long_name: string;
|
|
15
|
-
};
|
|
16
|
-
type RoutesCsv = readonly RoutesCsvRow[];
|
|
17
2
|
export type TripsCsvRow = {
|
|
18
3
|
readonly route_id: string;
|
|
19
4
|
readonly service_id: string;
|
|
@@ -58,12 +43,9 @@ export type TransfersCsvRow = {
|
|
|
58
43
|
};
|
|
59
44
|
export type TransfersCsv = readonly TransfersCsvRow[];
|
|
60
45
|
export type GtfsFeedCsv = {
|
|
61
|
-
readonly stops: StopsCsv;
|
|
62
|
-
readonly routes: RoutesCsv;
|
|
63
46
|
readonly trips: TripsCsv;
|
|
64
47
|
readonly stopTimes: StopTimesCsv;
|
|
65
48
|
readonly calendar: CalendarCsv;
|
|
66
49
|
readonly calendarDates: CalendarDatesCsv;
|
|
67
50
|
readonly transfers: TransfersCsv;
|
|
68
51
|
};
|
|
69
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"departures-block-iterator.js","sourceRoot":"","sources":["../../src/departures/departures-block-iterator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"departures-block-iterator.js","sourceRoot":"","sources":["../../src/departures/departures-block-iterator.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,7 @@ export class DeparturesIteratorResult {
|
|
|
4
4
|
instant;
|
|
5
5
|
movement;
|
|
6
6
|
movementIndex;
|
|
7
|
-
constructor(
|
|
8
|
-
// TODO: Revisit which of these are actually being used. Consider that
|
|
9
|
-
// additional `peek` methods, e.g. `peekPositionId`, might be added in
|
|
10
|
-
// future for performance optimisation (just fetch the next service's
|
|
11
|
-
// platform number without building a full corequery service object), so
|
|
12
|
-
// removing things like `movement` is not necessarily a good idea.
|
|
13
|
-
trip, serviceDay, instant, movement, movementIndex) {
|
|
7
|
+
constructor(trip, serviceDay, instant, movement, movementIndex) {
|
|
14
8
|
this.trip = trip;
|
|
15
9
|
this.serviceDay = serviceDay;
|
|
16
10
|
this.instant = instant;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"departures-iterator.js","sourceRoot":"","sources":["../../src/departures/departures-iterator.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,wBAAwB;
|
|
1
|
+
{"version":3,"file":"departures-iterator.js","sourceRoot":"","sources":["../../src/departures/departures-iterator.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,wBAAwB;IAExB;IACA;IACA;IACA;IACA;IALX,YACW,IAAyC,EACzC,UAA8B,EAC9B,OAAyB,EACzB,QAAmC,EACnC,aAAqB;QAJrB,SAAI,GAAJ,IAAI,CAAqC;QACzC,eAAU,GAAV,UAAU,CAAoB;QAC9B,YAAO,GAAP,OAAO,CAAkB;QACzB,aAAQ,GAAR,QAAQ,CAA2B;QACnC,kBAAa,GAAb,aAAa,CAAQ;IAC7B,CAAC;CACL;AAED,MAAM,OAAgB,kBAAkB;CASvC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DeparturesIterationDirection } from "../corequery-types.js";
|
|
2
|
+
import { DeparturesIterator, DeparturesIteratorResult } from "./departures-iterator.js";
|
|
3
|
+
export declare class FilterIterator extends DeparturesIterator {
|
|
4
|
+
private readonly _iterator;
|
|
5
|
+
private readonly _predicate;
|
|
6
|
+
constructor(_iterator: DeparturesIterator, _predicate: (result: DeparturesIteratorResult) => boolean);
|
|
7
|
+
set(instant: Temporal.Instant, direction: DeparturesIterationDirection): void;
|
|
8
|
+
peek(): DeparturesIteratorResult | null;
|
|
9
|
+
take(): DeparturesIteratorResult;
|
|
10
|
+
private _takeUntilMatchesPredicate;
|
|
11
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DeparturesIterator, DeparturesIteratorResult, } from "./departures-iterator.js";
|
|
2
|
+
export class FilterIterator extends DeparturesIterator {
|
|
3
|
+
_iterator;
|
|
4
|
+
_predicate;
|
|
5
|
+
constructor(_iterator, _predicate) {
|
|
6
|
+
super();
|
|
7
|
+
this._iterator = _iterator;
|
|
8
|
+
this._predicate = _predicate;
|
|
9
|
+
}
|
|
10
|
+
set(instant, direction) {
|
|
11
|
+
this._iterator.set(instant, direction);
|
|
12
|
+
this._takeUntilMatchesPredicate();
|
|
13
|
+
}
|
|
14
|
+
peek() {
|
|
15
|
+
return this._iterator.peek();
|
|
16
|
+
}
|
|
17
|
+
take() {
|
|
18
|
+
const result = this._iterator.take();
|
|
19
|
+
this._takeUntilMatchesPredicate();
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
_takeUntilMatchesPredicate() {
|
|
23
|
+
let current = this._iterator.peek();
|
|
24
|
+
while (current != null && !this._predicate(current)) {
|
|
25
|
+
this._iterator.take();
|
|
26
|
+
current = this._iterator.peek();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=filter-iterator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-iterator.js","sourceRoot":"","sources":["../../src/departures/filter-iterator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IAEjC;IACA;IAFnB,YACmB,SAA6B,EAC7B,UAAyD;QAE1E,KAAK,EAAE,CAAC;QAHS,cAAS,GAAT,SAAS,CAAoB;QAC7B,eAAU,GAAV,UAAU,CAA+C;IAG5E,CAAC;IAEQ,GAAG,CACV,OAAyB,EACzB,SAAuC;QAEvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACpC,CAAC;IAEQ,IAAI;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAEQ,IAAI;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,0BAA0B;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -7,6 +7,5 @@ export declare class RealtimeDeparturesBlockIterator extends DeparturesBlockIter
|
|
|
7
7
|
constructor(block: RealtimeDeparturesBlock, _realtimeData: GtfsRealtimeData);
|
|
8
8
|
static tryBuild(stopId: number, realtimeData: GtfsRealtimeData): RealtimeDeparturesBlockIterator | null;
|
|
9
9
|
protected _convertEntryToResult(entry: RealtimeDeparturesBlockEntry): DeparturesIteratorResult;
|
|
10
|
-
protected _shouldSkipEntry(
|
|
11
|
-
private _isTripCancelled;
|
|
10
|
+
protected _shouldSkipEntry(_entry: RealtimeDeparturesBlockEntry): boolean;
|
|
12
11
|
}
|
|
@@ -16,23 +16,8 @@ export class RealtimeDeparturesBlockIterator extends DeparturesBlockIterator {
|
|
|
16
16
|
_convertEntryToResult(entry) {
|
|
17
17
|
return new DeparturesIteratorResult(entry.trip, entry.trip.serviceDay, entry.instant, entry.movement, entry.movementIndex);
|
|
18
18
|
}
|
|
19
|
-
_shouldSkipEntry(
|
|
20
|
-
const { movement, trip } = entry;
|
|
21
|
-
// Even users not filtering arrivals won't be interested to see the same
|
|
22
|
-
// trip listed twice at stations like Flinders Street or Town Hall, once for
|
|
23
|
-
// the arrival and then again for the departure of the continuing trip. We
|
|
24
|
-
// just need to be sure the continuing trip is actually running!
|
|
25
|
-
const isArrivalWhichContinues = movement.type === "terminating" &&
|
|
26
|
-
trip.scheduledTrip.nextTrip != null &&
|
|
27
|
-
trip.scheduledTrip.nextTrip.calendar.occursOn(trip.serviceDay) &&
|
|
28
|
-
!this._isTripCancelled(trip.scheduledTrip.nextTrip.gtfsTripId, entry.trip.serviceDay);
|
|
29
|
-
if (isArrivalWhichContinues)
|
|
30
|
-
return true;
|
|
19
|
+
_shouldSkipEntry(_entry) {
|
|
31
20
|
return false;
|
|
32
21
|
}
|
|
33
|
-
_isTripCancelled(tripId, serviceDay) {
|
|
34
|
-
const realtimeTrip = this._realtimeData.getForScheduledTrip(tripId, serviceDay);
|
|
35
|
-
return realtimeTrip?.isCancelled ?? false;
|
|
36
|
-
}
|
|
37
22
|
}
|
|
38
23
|
//# sourceMappingURL=realtime-departures-block-iterator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-departures-block-iterator.js","sourceRoot":"","sources":["../../src/departures/realtime-departures-block-iterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,uBAAuB,GAExB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,OAAO,+BAAgC,SAAQ,uBAGpD;IAGoB;IAFnB,YACE,KAA8B,EACb,aAA+B;QAEhD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAFX,kBAAa,GAAb,aAAa,CAAkB;IAGlD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAc,EAAE,YAA8B;QAC5D,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACrE,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAE/B,OAAO,IAAI,+BAA+B,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAEkB,qBAAqB,CACtC,KAAmC;QAEnC,OAAO,IAAI,wBAAwB,CACjC,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,CAAC,UAAU,EACrB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,CACpB,CAAC;IACJ,CAAC;IAEkB,gBAAgB,CACjC,
|
|
1
|
+
{"version":3,"file":"realtime-departures-block-iterator.js","sourceRoot":"","sources":["../../src/departures/realtime-departures-block-iterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,uBAAuB,GAExB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,OAAO,+BAAgC,SAAQ,uBAGpD;IAGoB;IAFnB,YACE,KAA8B,EACb,aAA+B;QAEhD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAFX,kBAAa,GAAb,aAAa,CAAkB;IAGlD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAc,EAAE,YAA8B;QAC5D,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACrE,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAE/B,OAAO,IAAI,+BAA+B,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAEkB,qBAAqB,CACtC,KAAmC;QAEnC,OAAO,IAAI,wBAAwB,CACjC,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,CAAC,UAAU,EACrB,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,CACpB,CAAC;IACJ,CAAC;IAEkB,gBAAgB,CACjC,MAAoC;QAEpC,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -8,5 +8,4 @@ export declare class ScheduledDeparturesBlockIterator extends DeparturesBlockIte
|
|
|
8
8
|
constructor(block: ScheduledDeparturesBlock, _realtimeData: GtfsRealtimeData);
|
|
9
9
|
protected _convertEntryToResult(entry: GtfsScheduledMovementsIndexEntry): DeparturesIteratorResult;
|
|
10
10
|
protected _shouldSkipEntry(entry: GtfsScheduledMovementsIndexEntry): boolean;
|
|
11
|
-
private _isTripCancelled;
|
|
12
11
|
}
|
|
@@ -24,32 +24,7 @@ export class ScheduledDeparturesBlockIterator extends DeparturesBlockIterator {
|
|
|
24
24
|
const isOverriddenByRealtimeTrip = realtimeTrip != null;
|
|
25
25
|
if (isOverriddenByRealtimeTrip)
|
|
26
26
|
return true;
|
|
27
|
-
// Even users not filtering arrivals won't be interested to see the same
|
|
28
|
-
// trip listed twice at stations like Flinders Street or Town Hall, once for
|
|
29
|
-
// the arrival and then again for the departure of the continuing trip. We
|
|
30
|
-
// just need to be sure the continuing trip is actually running!
|
|
31
|
-
//
|
|
32
|
-
// TODO: Realtime trips which connect to other trips must cause those
|
|
33
|
-
// scheduled trips to become realtime trips too, and realtime trips need to
|
|
34
|
-
// have their own `nextTrip` and `prevTrip` properties, otherwise fetching
|
|
35
|
-
// `nextTrip` here can lead to outdated info (the next trip might have been
|
|
36
|
-
// altered and no longer connects with this one). Alternatively, having
|
|
37
|
-
// `nextTrip` and `prevTrip` was a mistake, and we just only have trip IDs
|
|
38
|
-
// in their place, or maybe an entirely separate list of transfers which
|
|
39
|
-
// lives outside the trip (and supports other future transfer types).
|
|
40
|
-
//
|
|
41
|
-
// TODO: Wherever this logic ends up living, make sure it's tested.
|
|
42
|
-
const isArrivalWhichContinues = entry.movement.type === "terminating" &&
|
|
43
|
-
entry.trip.nextTrip != null &&
|
|
44
|
-
entry.trip.nextTrip.calendar.occursOn(this.block.serviceDay) &&
|
|
45
|
-
!this._isTripCancelled(entry.trip.nextTrip.gtfsTripId);
|
|
46
|
-
if (isArrivalWhichContinues)
|
|
47
|
-
return true;
|
|
48
27
|
return false;
|
|
49
28
|
}
|
|
50
|
-
_isTripCancelled(tripId) {
|
|
51
|
-
const realtimeTrip = this._realtimeData.getForScheduledTrip(tripId, this.block.serviceDay);
|
|
52
|
-
return realtimeTrip?.isCancelled ?? false;
|
|
53
|
-
}
|
|
54
29
|
}
|
|
55
30
|
//# sourceMappingURL=scheduled-departures-block-iterator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled-departures-block-iterator.js","sourceRoot":"","sources":["../../src/departures/scheduled-departures-block-iterator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,MAAM,OAAO,gCAAiC,SAAQ,uBAGrD;IAGoB;IAFnB,YACE,KAA+B,EACd,aAA+B;QAEhD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAFtB,kBAAa,GAAb,aAAa,CAAkB;IAGlD,CAAC;IAEkB,qBAAqB,CACtC,KAAuC;QAEvC,OAAO,IAAI,wBAAwB,CACjC,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,KAAK,CAAC,UAAU,EACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAChE,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,CACpB,CAAC;IACJ,CAAC;IAEkB,gBAAgB,CACjC,KAAuC;QAEvC,4EAA4E;QAC5E,6BAA6B;QAC7B,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5E,IAAI,cAAc;YAAE,OAAO,IAAI,CAAC;QAEhC,uEAAuE;QACvE,yEAAyE;QACzE,4EAA4E;QAC5E,SAAS;QACT,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CACzD,MAAM,EACN,IAAI,CAAC,KAAK,CAAC,UAAU,CACtB,CAAC;QACF,MAAM,0BAA0B,GAAG,YAAY,IAAI,IAAI,CAAC;QACxD,IAAI,0BAA0B;YAAE,OAAO,IAAI,CAAC;QAE5C,
|
|
1
|
+
{"version":3,"file":"scheduled-departures-block-iterator.js","sourceRoot":"","sources":["../../src/departures/scheduled-departures-block-iterator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,MAAM,OAAO,gCAAiC,SAAQ,uBAGrD;IAGoB;IAFnB,YACE,KAA+B,EACd,aAA+B;QAEhD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAFtB,kBAAa,GAAb,aAAa,CAAkB;IAGlD,CAAC;IAEkB,qBAAqB,CACtC,KAAuC;QAEvC,OAAO,IAAI,wBAAwB,CACjC,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,KAAK,CAAC,UAAU,EACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAChE,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,CACpB,CAAC;IACJ,CAAC;IAEkB,gBAAgB,CACjC,KAAuC;QAEvC,4EAA4E;QAC5E,6BAA6B;QAC7B,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5E,IAAI,cAAc;YAAE,OAAO,IAAI,CAAC;QAEhC,uEAAuE;QACvE,yEAAyE;QACzE,4EAA4E;QAC5E,SAAS;QACT,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CACzD,MAAM,EACN,IAAI,CAAC,KAAK,CAAC,UAAU,CACtB,CAAC;QACF,MAAM,0BAA0B,GAAG,YAAY,IAAI,IAAI,CAAC;QACxD,IAAI,0BAA0B;YAAE,OAAO,IAAI,CAAC;QAE5C,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -15,6 +15,7 @@ export class GtfsServiceSource {
|
|
|
15
15
|
this.departureIterationLimitHours = fields.departureIterationLimitHours;
|
|
16
16
|
this._converter = new ServiceConverter({
|
|
17
17
|
sourceId: fields.sourceId,
|
|
18
|
+
gtfsSystem: fields.gtfsSystem,
|
|
18
19
|
buildDeparture: fields.buildDeparture,
|
|
19
20
|
buildService: fields.buildService,
|
|
20
21
|
buildTags: fields.buildTags,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtfs-service-source.js","sourceRoot":"","sources":["../src/gtfs-service-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAalD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAuD1F,MAAM,OAAO,iBAAiB;IAUnB,QAAQ,CAAS;IACjB,UAAU,CAAa;IAEvB,4BAA4B,CAAgB;IAEpC,UAAU,CASzB;IAEF,YACE,MASC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEpC,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;QAExE,IAAI,CAAC,UAAU,GAAG,IAAI,gBAAgB,CASpC;YACA,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;YACvE,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;YAC/D,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;YACvE,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;YAC/D,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;SACtD,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,aAAqB;QAC9B,MAAM,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,EAAE,IAAI,IAAI;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CACjD,IAAI,EACJ,EAAE,CAAC,UAAU,EACb,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3B,CAAC;YACF,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,qBAAqB,CACnB,MAAc,EACd,OAAyB,EACzB,SAAuC;QAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAC3C,MAAM,EACN,IAAI,CAAC,4BAA4B,CAClC,CAAC;QACF,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEjC,OAAO,IAAI,yBAAyB,CASlC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"gtfs-service-source.js","sourceRoot":"","sources":["../src/gtfs-service-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,7 @@ export declare class GtfsRealtimeDataParser {
|
|
|
7
7
|
private readonly _tripUpdateParser;
|
|
8
8
|
constructor(timezone: string, onError: (error: GtfsRealtimeDataParsingError) => void);
|
|
9
9
|
parse(realtimeData: RealtimeDataJson, scheduleData: GtfsScheduleData, stopGtfsIdMapping: StopGtfsIdMapping): GtfsRealtimeData;
|
|
10
|
+
private _parseTripUpdates;
|
|
11
|
+
private _breakTransfers;
|
|
10
12
|
}
|
|
11
13
|
export type GtfsRealtimeDataParsingError = GtfsTripUpdateParsingError;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { GtfsRealtimeData } from "../../data/gtfs-realtime-data.js";
|
|
2
|
+
import { GtfsBrokenTransfer } from "../../data/gtfs-realtime-transfer.js";
|
|
3
|
+
import { MutableGtfsTransferMapping } from "../../data/gtfs-transfer-mapping.js";
|
|
2
4
|
import { GtfsTripUpdateParser, } from "./gtfs-trip-update-parser.js";
|
|
3
5
|
export class GtfsRealtimeDataParser {
|
|
4
6
|
_tripUpdateParser;
|
|
@@ -6,6 +8,11 @@ export class GtfsRealtimeDataParser {
|
|
|
6
8
|
this._tripUpdateParser = new GtfsTripUpdateParser(timezone, onError);
|
|
7
9
|
}
|
|
8
10
|
parse(realtimeData, scheduleData, stopGtfsIdMapping) {
|
|
11
|
+
const updatedTrips = this._parseTripUpdates(realtimeData, scheduleData, stopGtfsIdMapping);
|
|
12
|
+
const brokenTransfers = this._breakTransfers(updatedTrips, scheduleData);
|
|
13
|
+
return new GtfsRealtimeData(updatedTrips, brokenTransfers, []);
|
|
14
|
+
}
|
|
15
|
+
_parseTripUpdates(realtimeData, scheduleData, stopGtfsIdMapping) {
|
|
9
16
|
const updatedTrips = [];
|
|
10
17
|
for (const tripUpdates of realtimeData.tripUpdates) {
|
|
11
18
|
const result = this._tripUpdateParser.parse(tripUpdates, scheduleData, stopGtfsIdMapping);
|
|
@@ -13,7 +20,23 @@ export class GtfsRealtimeDataParser {
|
|
|
13
20
|
updatedTrips.push(result);
|
|
14
21
|
}
|
|
15
22
|
}
|
|
16
|
-
return
|
|
23
|
+
return updatedTrips;
|
|
24
|
+
}
|
|
25
|
+
_breakTransfers(updatedTrips, scheduleData) {
|
|
26
|
+
const brokenTransfers = new MutableGtfsTransferMapping((x) => x.transfer.getInvolvedTripIds());
|
|
27
|
+
for (const updatedTrip of updatedTrips) {
|
|
28
|
+
if (updatedTrip.isCancelled) {
|
|
29
|
+
const transfers = scheduleData.getTransfersForTrip(updatedTrip.gtfsTripId);
|
|
30
|
+
for (const transfer of transfers) {
|
|
31
|
+
const brokenTransfer = new GtfsBrokenTransfer(transfer, updatedTrip.serviceDay);
|
|
32
|
+
const existing = brokenTransfers.forTripId(updatedTrip.gtfsTripId);
|
|
33
|
+
if (!existing.some((x) => x.equals(brokenTransfer))) {
|
|
34
|
+
brokenTransfers.push(brokenTransfer);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return brokenTransfers.toArray();
|
|
17
40
|
}
|
|
18
41
|
}
|
|
19
42
|
//# sourceMappingURL=gtfs-realtime-data-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtfs-realtime-data-parser.js","sourceRoot":"","sources":["../../../src/parser/realtime/gtfs-realtime-data-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"gtfs-realtime-data-parser.js","sourceRoot":"","sources":["../../../src/parser/realtime/gtfs-realtime-data-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAIjF,OAAO,EACL,oBAAoB,GAErB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,OAAO,sBAAsB;IAChB,iBAAiB,CAAuB;IAEzD,YACE,QAAgB,EAChB,OAAsD;QAEtD,IAAI,CAAC,iBAAiB,GAAG,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CACH,YAA8B,EAC9B,YAA8B,EAC9B,iBAAoC;QAEpC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CACzC,YAAY,EACZ,YAAY,EACZ,iBAAiB,CAClB,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAEzE,OAAO,IAAI,gBAAgB,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAEO,iBAAiB,CACvB,YAA8B,EAC9B,YAA8B,EAC9B,iBAAoC;QAEpC,MAAM,YAAY,GAAsB,EAAE,CAAC;QAE3C,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CACzC,WAAW,EACX,YAAY,EACZ,iBAAiB,CAClB,CAAC;YAEF,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,eAAe,CACrB,YAA+B,EAC/B,YAA8B;QAE9B,MAAM,eAAe,GAAG,IAAI,0BAA0B,CACpD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CACvC,CAAC;QAEF,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,mBAAmB,CAChD,WAAW,CAAC,UAAU,CACvB,CAAC;gBAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,cAAc,GAAG,IAAI,kBAAkB,CAC3C,QAAQ,EACR,WAAW,CAAC,UAAU,CACvB,CAAC;oBACF,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;wBACpD,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -19,12 +19,14 @@ export class GtfsTripUpdateTripIdentifier {
|
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
21
|
const trip = scheduleData.getTrip(tripDescriptor.tripId);
|
|
22
|
-
// TODO: We filter out trips from replacement bus services, so if we ever
|
|
23
|
-
// got a trip update for a replacement bus it would trigger this error, but
|
|
24
|
-
// we should probably ignore that case.
|
|
25
22
|
if (trip == null) {
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
// We might have intentionally ignored some trips when parsing the
|
|
24
|
+
// schedule, e.g. replacement buses, so if a trip update is for one of
|
|
25
|
+
// those it's not really an error. We should ignore it here too.
|
|
26
|
+
if (!scheduleData.isTripIgnored(tripDescriptor.tripId)) {
|
|
27
|
+
const Err = TripDescriptorReferencesNonExistentTripIdError;
|
|
28
|
+
this._onError(new Err(tripDescriptor));
|
|
29
|
+
}
|
|
28
30
|
return null;
|
|
29
31
|
}
|
|
30
32
|
// It's unclear to me whether the startDate in GTFS-RT is meant to be the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtfs-trip-update-trip-identifier.js","sourceRoot":"","sources":["../../../src/parser/realtime/gtfs-trip-update-trip-identifier.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,4BAA4B;IAEpB;IADnB,YACmB,QAER;QAFQ,aAAQ,GAAR,QAAQ,CAEhB;IACR,CAAC;IAEJ,QAAQ,CAAC,cAAkC,EAAE,YAA8B;QACzE,2EAA2E;QAC3E,wEAAwE;QACxE,yEAAyE;QACzE,sBAAsB;QACtB,IAAI,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,sCAAsC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,cAAc,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,sCAAsC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEzD,
|
|
1
|
+
{"version":3,"file":"gtfs-trip-update-trip-identifier.js","sourceRoot":"","sources":["../../../src/parser/realtime/gtfs-trip-update-trip-identifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,8 @@ export class GtfsScheduleDataParser {
|
|
|
11
11
|
parse(csvs, lineGtfsIdMapping, stopGtfsIdMapping) {
|
|
12
12
|
const { calendar, calendarDates, trips, stopTimes, transfers } = csvs;
|
|
13
13
|
const parsedCalendars = this._calendarParser.parse(calendar, calendarDates);
|
|
14
|
-
const parsedTrips = this._tripParser.parse(trips, stopTimes, transfers, parsedCalendars, lineGtfsIdMapping, stopGtfsIdMapping);
|
|
15
|
-
return new GtfsScheduleData(parsedTrips, parsedCalendars);
|
|
14
|
+
const { parsedTrips, parsedTransfers, ignoredTripIds } = this._tripParser.parse(trips, stopTimes, transfers, parsedCalendars, lineGtfsIdMapping, stopGtfsIdMapping);
|
|
15
|
+
return new GtfsScheduleData(parsedTrips, parsedCalendars, parsedTransfers, ignoredTripIds);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=gtfs-schedule-data-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gtfs-schedule-data-parser.js","sourceRoot":"","sources":["../../../src/parser/schedule/gtfs-schedule-data-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACL,kBAAkB,GAEnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,GAEf,MAAM,uBAAuB,CAAC;AAO/B,MAAM,OAAO,sBAAsB;IAChB,eAAe,CAAqB;IACpC,WAAW,CAAiB;IAE7C,YACE,iBAAoC,EACpC,iBAAoC,EACpC,OAAkD;QAElD,IAAI,CAAC,eAAe,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CACnC,iBAAiB,EACjB,iBAAiB,EACjB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CACH,IAAiB,EACjB,iBAAoC,EACpC,iBAAoC;QAEpC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEtE,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAE5E,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"gtfs-schedule-data-parser.js","sourceRoot":"","sources":["../../../src/parser/schedule/gtfs-schedule-data-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACL,kBAAkB,GAEnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,GAEf,MAAM,uBAAuB,CAAC;AAO/B,MAAM,OAAO,sBAAsB;IAChB,eAAe,CAAqB;IACpC,WAAW,CAAiB;IAE7C,YACE,iBAAoC,EACpC,iBAAoC,EACpC,OAAkD;QAElD,IAAI,CAAC,eAAe,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CACnC,iBAAiB,EACjB,iBAAiB,EACjB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CACH,IAAiB,EACjB,iBAAoC,EACpC,iBAAoC;QAEpC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEtE,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAE5E,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,GACpD,IAAI,CAAC,WAAW,CAAC,KAAK,CACpB,KAAK,EACL,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;QAEJ,OAAO,IAAI,gBAAgB,CACzB,WAAW,EACX,eAAe,EACf,eAAe,EACf,cAAc,CACf,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { TransfersCsv, TransfersCsvRow } from "../../data/raw/schedule-csvs.js";
|
|
2
2
|
import { GtfsScheduledTrip } from "../../data/gtfs-scheduled-trip.js";
|
|
3
|
-
|
|
3
|
+
import { type GtfsTransfer } from "../../data/gtfs-transfer.js";
|
|
4
|
+
export declare class GtfsTransferParser {
|
|
4
5
|
private readonly _onError;
|
|
5
|
-
constructor(_onError: (error:
|
|
6
|
-
|
|
6
|
+
constructor(_onError: (error: GtfsTransferParsingError) => void);
|
|
7
|
+
parse(trips: readonly GtfsScheduledTrip[], transfers: TransfersCsv): readonly GtfsTransfer[];
|
|
8
|
+
private _isEntireVehicleAlreadyFormingNextService;
|
|
9
|
+
private _isEntireVehicleAlreadyFormedByPreviousService;
|
|
7
10
|
}
|
|
8
|
-
export type
|
|
11
|
+
export type GtfsTransferParsingError = TransferReferencesNonExistentTrip | TransferIsNotFromTerminusError | TransferIsNotToOriginError | TransferReferencesTripAlreadyConnectedError | TransferIsNotInSeatTransferError | TransferIsNotSameStopAndPositionError | TransferCrossesCalendarsError | TransferRequiresTimeTravelError;
|
|
9
12
|
export declare class TransferReferencesNonExistentTrip {
|
|
10
13
|
readonly transfer: TransfersCsvRow;
|
|
11
14
|
readonly field: "from_trip_id" | "to_trip_id";
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { GtfsScheduledTrip } from "../../data/gtfs-scheduled-trip.js";
|
|
2
|
+
import { GtfsEntireVehicleFormsServiceTransfer, } from "../../data/gtfs-transfer.js";
|
|
3
|
+
import { MutableGtfsTransferMapping } from "../../data/gtfs-transfer-mapping.js";
|
|
2
4
|
const TRANSFER_TYPE_IN_SEAT_TRANSFER = 4;
|
|
3
|
-
export class
|
|
5
|
+
export class GtfsTransferParser {
|
|
4
6
|
_onError;
|
|
5
7
|
constructor(_onError) {
|
|
6
8
|
this._onError = _onError;
|
|
7
9
|
}
|
|
8
|
-
|
|
10
|
+
parse(trips, transfers) {
|
|
9
11
|
const tripMap = new Map(trips.map((trip) => [trip.gtfsTripId, trip]));
|
|
12
|
+
const result = new MutableGtfsTransferMapping((x) => x.getInvolvedTripIds());
|
|
10
13
|
for (const transfer of transfers) {
|
|
11
14
|
const fromTrip = tripMap.get(transfer.from_trip_id);
|
|
12
15
|
const toTrip = tripMap.get(transfer.to_trip_id);
|
|
13
|
-
// TrainQuery only cares about "in-seat" transfers,
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
16
|
+
// Right now, TrainQuery Melbourne only cares about "in-seat" transfers,
|
|
17
|
+
// so we can show Metro Tunnel or City Loop services with their final
|
|
18
|
+
// destinations correctly. I'm just gonna ignore other transfer types for
|
|
19
|
+
// now, but it's not really an error. The reason I want to report them
|
|
20
|
+
// like errors is that PTV doesn't seem to currently publish other
|
|
21
|
+
// transfer types, and I'm curious to see if that changes one day (e.g.
|
|
22
|
+
// with V/Line's guaranteed coach connections, or coupling of trains at
|
|
23
|
+
// Ballarat).
|
|
21
24
|
if (transfer.transfer_type !== TRANSFER_TYPE_IN_SEAT_TRANSFER) {
|
|
22
25
|
this._onError(new TransferIsNotInSeatTransferError(transfer));
|
|
23
26
|
continue;
|
|
@@ -36,11 +39,13 @@ export class GtfsTransferConnector {
|
|
|
36
39
|
this._onError(new TransferIsNotSameStopAndPositionError(transfer));
|
|
37
40
|
continue;
|
|
38
41
|
}
|
|
39
|
-
// As alluded to above, I suspect one day V/Line might
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
42
|
+
// As alluded to above, I suspect one day V/Line might start considering
|
|
43
|
+
// their Maryborough shuttles as "in-seat" transfers because the trains
|
|
44
|
+
// couple at Ballarat. We don't handle it for now. I wonder how I'd even
|
|
45
|
+
// display that in CoreQuery? It'll either break the first two rules
|
|
46
|
+
// (ex-Maryborough train transfers to ex-Wendouree/Ararat), or the next
|
|
47
|
+
// two (ex-Wendouree/Ararat and ex-Maryborough train transfer to
|
|
48
|
+
// ex-Ballarat train).
|
|
44
49
|
if (fromTrip.termination.gtfsIdMetadata.id !== transfer.from_stop_id) {
|
|
45
50
|
this._onError(new TransferIsNotFromTerminusError(transfer, fromTrip));
|
|
46
51
|
continue;
|
|
@@ -49,12 +54,12 @@ export class GtfsTransferConnector {
|
|
|
49
54
|
this._onError(new TransferIsNotToOriginError(transfer, toTrip));
|
|
50
55
|
continue;
|
|
51
56
|
}
|
|
52
|
-
if (fromTrip
|
|
57
|
+
if (this._isEntireVehicleAlreadyFormingNextService(fromTrip, result)) {
|
|
53
58
|
const Err = TransferReferencesTripAlreadyConnectedError;
|
|
54
59
|
this._onError(new Err(transfer, fromTrip));
|
|
55
60
|
continue;
|
|
56
61
|
}
|
|
57
|
-
if (toTrip
|
|
62
|
+
if (this._isEntireVehicleAlreadyFormedByPreviousService(toTrip, result)) {
|
|
58
63
|
const Err = TransferReferencesTripAlreadyConnectedError;
|
|
59
64
|
this._onError(new Err(transfer, toTrip));
|
|
60
65
|
continue;
|
|
@@ -86,11 +91,24 @@ export class GtfsTransferConnector {
|
|
|
86
91
|
this._onError(new TransferRequiresTimeTravelError(transfer));
|
|
87
92
|
continue;
|
|
88
93
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
result.push(new GtfsEntireVehicleFormsServiceTransfer({
|
|
95
|
+
fromTripId: fromTrip.gtfsTripId,
|
|
96
|
+
toTripId: toTrip.gtfsTripId,
|
|
97
|
+
}));
|
|
92
98
|
}
|
|
93
|
-
return
|
|
99
|
+
return result.toArray();
|
|
100
|
+
}
|
|
101
|
+
_isEntireVehicleAlreadyFormingNextService(fromTrip, transfers) {
|
|
102
|
+
return transfers
|
|
103
|
+
.forTripId(fromTrip.gtfsTripId)
|
|
104
|
+
.some((t) => t.type === "entire-vehicle-forms-service" &&
|
|
105
|
+
t.fromTripId === fromTrip.gtfsTripId);
|
|
106
|
+
}
|
|
107
|
+
_isEntireVehicleAlreadyFormedByPreviousService(toTrip, transfers) {
|
|
108
|
+
return transfers
|
|
109
|
+
.forTripId(toTrip.gtfsTripId)
|
|
110
|
+
.some((t) => t.type === "entire-vehicle-forms-service" &&
|
|
111
|
+
t.toTripId === toTrip.gtfsTripId);
|
|
94
112
|
}
|
|
95
113
|
}
|
|
96
114
|
export class TransferReferencesNonExistentTrip {
|
|
@@ -157,4 +175,4 @@ export class TransferRequiresTimeTravelError {
|
|
|
157
175
|
this.transfer = transfer;
|
|
158
176
|
}
|
|
159
177
|
}
|
|
160
|
-
//# sourceMappingURL=gtfs-transfer-
|
|
178
|
+
//# sourceMappingURL=gtfs-transfer-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gtfs-transfer-parser.js","sourceRoot":"","sources":["../../../src/parser/schedule/gtfs-transfer-parser.ts"],"names":[],"mappings":"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"}
|