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.
Files changed (57) hide show
  1. package/dist/corequeryify/service-conversion-iterator.js +3 -1
  2. package/dist/corequeryify/service-conversion-iterator.js.map +1 -1
  3. package/dist/corequeryify/service-converter.d.ts +4 -1
  4. package/dist/corequeryify/service-converter.js +32 -39
  5. package/dist/corequeryify/service-converter.js.map +1 -1
  6. package/dist/data/gtfs-feed.d.ts +6 -2
  7. package/dist/data/gtfs-feed.js +25 -1
  8. package/dist/data/gtfs-feed.js.map +1 -1
  9. package/dist/data/gtfs-realtime-data.d.ts +9 -1
  10. package/dist/data/gtfs-realtime-data.js +24 -2
  11. package/dist/data/gtfs-realtime-data.js.map +1 -1
  12. package/dist/data/gtfs-realtime-transfer.d.ts +12 -0
  13. package/dist/data/gtfs-realtime-transfer.js +21 -0
  14. package/dist/data/gtfs-realtime-transfer.js.map +1 -0
  15. package/dist/data/gtfs-schedule-data.d.ts +14 -1
  16. package/dist/data/gtfs-schedule-data.js +27 -2
  17. package/dist/data/gtfs-schedule-data.js.map +1 -1
  18. package/dist/data/gtfs-scheduled-trip.d.ts +0 -6
  19. package/dist/data/gtfs-scheduled-trip.js +0 -14
  20. package/dist/data/gtfs-scheduled-trip.js.map +1 -1
  21. package/dist/data/gtfs-transfer-mapping.d.ts +15 -0
  22. package/dist/data/gtfs-transfer-mapping.js +45 -0
  23. package/dist/data/gtfs-transfer-mapping.js.map +1 -0
  24. package/dist/data/gtfs-transfer.d.ts +18 -0
  25. package/dist/data/gtfs-transfer.js +20 -0
  26. package/dist/data/gtfs-transfer.js.map +1 -0
  27. package/dist/data/raw/schedule-csvs.d.ts +0 -18
  28. package/dist/departures/departures-block-iterator.js +1 -0
  29. package/dist/departures/departures-block-iterator.js.map +1 -1
  30. package/dist/departures/departures-iterator.js +1 -7
  31. package/dist/departures/departures-iterator.js.map +1 -1
  32. package/dist/departures/filter-iterator.d.ts +11 -0
  33. package/dist/departures/filter-iterator.js +30 -0
  34. package/dist/departures/filter-iterator.js.map +1 -0
  35. package/dist/departures/realtime-departures-block-iterator.d.ts +1 -2
  36. package/dist/departures/realtime-departures-block-iterator.js +1 -16
  37. package/dist/departures/realtime-departures-block-iterator.js.map +1 -1
  38. package/dist/departures/scheduled-departures-block-iterator.d.ts +0 -1
  39. package/dist/departures/scheduled-departures-block-iterator.js +0 -25
  40. package/dist/departures/scheduled-departures-block-iterator.js.map +1 -1
  41. package/dist/gtfs-service-source.js +1 -0
  42. package/dist/gtfs-service-source.js.map +1 -1
  43. package/dist/parser/realtime/gtfs-realtime-data-parser.d.ts +2 -0
  44. package/dist/parser/realtime/gtfs-realtime-data-parser.js +24 -1
  45. package/dist/parser/realtime/gtfs-realtime-data-parser.js.map +1 -1
  46. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js +7 -5
  47. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js.map +1 -1
  48. package/dist/parser/schedule/gtfs-schedule-data-parser.js +2 -2
  49. package/dist/parser/schedule/gtfs-schedule-data-parser.js.map +1 -1
  50. package/dist/parser/schedule/{gtfs-transfer-connector.d.ts → gtfs-transfer-parser.d.ts} +7 -4
  51. package/dist/parser/schedule/{gtfs-transfer-connector.js → gtfs-transfer-parser.js} +40 -22
  52. package/dist/parser/schedule/gtfs-transfer-parser.js.map +1 -0
  53. package/dist/parser/schedule/gtfs-trip-parser.d.ts +8 -4
  54. package/dist/parser/schedule/gtfs-trip-parser.js +11 -9
  55. package/dist/parser/schedule/gtfs-trip-parser.js.map +1 -1
  56. package/package.json +1 -1
  57. 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,5 +1,6 @@
1
1
  import { assertNever, itsOk } from "@dan-schel/js-utils";
2
2
  import { DeparturesIterator, } from "./departures-iterator.js";
3
+ // TODO: Create a folder for iterators.
3
4
  export class DeparturesBlockIterator extends DeparturesIterator {
4
5
  block;
5
6
  _entries;
@@ -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;IAOxB;IACA;IACA;IACA;IACA;IAVX;IACE,sEAAsE;IACtE,sEAAsE;IACtE,qEAAqE;IACrE,wEAAwE;IACxE,kEAAkE;IACzD,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"}
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(entry: RealtimeDeparturesBlockEntry): boolean;
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(entry) {
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,KAAmC;QAEnC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QAEjC,wEAAwE;QACxE,4EAA4E;QAC5E,0EAA0E;QAC1E,gEAAgE;QAChE,MAAM,uBAAuB,GAC3B,QAAQ,CAAC,IAAI,KAAK,aAAa;YAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI;YACnC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9D,CAAC,IAAI,CAAC,gBAAgB,CACpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CACtB,CAAC;QACJ,IAAI,uBAAuB;YAAE,OAAO,IAAI,CAAC;QAEzC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB,CACtB,MAAc,EACd,UAA8B;QAE9B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CACzD,MAAM,EACN,UAAU,CACX,CAAC;QACF,OAAO,YAAY,EAAE,WAAW,IAAI,KAAK,CAAC;IAC5C,CAAC;CACF"}
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,wEAAwE;QACxE,4EAA4E;QAC5E,0EAA0E;QAC1E,gEAAgE;QAChE,EAAE;QACF,qEAAqE;QACrE,2EAA2E;QAC3E,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,0EAA0E;QAC1E,wEAAwE;QACxE,qEAAqE;QACrE,EAAE;QACF,mEAAmE;QACnE,MAAM,uBAAuB,GAC3B,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa;YACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC3B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YAC5D,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,uBAAuB;YAAE,OAAO,IAAI,CAAC;QAEzC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACrC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CACzD,MAAM,EACN,IAAI,CAAC,KAAK,CAAC,UAAU,CACtB,CAAC;QACF,OAAO,YAAY,EAAE,WAAW,IAAI,KAAK,CAAC;IAC5C,CAAC;CACF"}
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":"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"}
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 new GtfsRealtimeData(updatedTrips);
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;AAKpE,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,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,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;CACF"}
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
- const Err = TripDescriptorReferencesNonExistentTripIdError;
27
- this._onError(new Err(tripDescriptor));
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":"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"}
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,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CACxC,KAAK,EACL,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;QAEF,OAAO,IAAI,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC5D,CAAC;CACF"}
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
- export declare class GtfsTransferConnector {
3
+ import { type GtfsTransfer } from "../../data/gtfs-transfer.js";
4
+ export declare class GtfsTransferParser {
4
5
  private readonly _onError;
5
- constructor(_onError: (error: GtfsTransferConnectionError) => void);
6
- connect(trips: readonly GtfsScheduledTrip[], transfers: TransfersCsv): readonly GtfsScheduledTrip[];
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 GtfsTransferConnectionError = TransferReferencesNonExistentTrip | TransferIsNotFromTerminusError | TransferIsNotToOriginError | TransferReferencesTripAlreadyConnectedError | TransferIsNotInSeatTransferError | TransferIsNotSameStopAndPositionError | TransferCrossesCalendarsError | TransferRequiresTimeTravelError;
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 GtfsTransferConnector {
5
+ export class GtfsTransferParser {
4
6
  _onError;
5
7
  constructor(_onError) {
6
8
  this._onError = _onError;
7
9
  }
8
- connect(trips, transfers) {
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, because we're only
14
- // parsing these transfers to form trips into multiple "legs" of a
15
- // service, a.k.a. what I used to call continuations.
16
- //
17
- // We should ignore them, but it's not really an error. I'm just reporting
18
- // them because right now PTV only publishes in-seat transfers, and I'm
19
- // curious to see if that changes one day (e.g. with V/Line's guaranteed
20
- // coach connections, or coupling of trains at Ballarat).
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 make things
40
- // difficult if they start (accurately, to be fair) considering their
41
- // Maryborough shuttles as "in-seat" transfers because the trains couple
42
- // at Ballarat. No idea how we'd even want to _display_ those, let alone
43
- // model it!
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.nextTrip != null) {
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.previousTrip != null) {
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
- const [newFrom, newTo] = GtfsScheduledTrip.connectAsTransfer(fromTrip, toTrip);
90
- tripMap.set(fromTrip.gtfsTripId, newFrom);
91
- tripMap.set(toTrip.gtfsTripId, newTo);
94
+ result.push(new GtfsEntireVehicleFormsServiceTransfer({
95
+ fromTripId: fromTrip.gtfsTripId,
96
+ toTripId: toTrip.gtfsTripId,
97
+ }));
92
98
  }
93
- return Array.from(tripMap.values());
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-connector.js.map
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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"}