corequery-gtfs 0.5.0 → 0.7.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 (55) 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/data/gtfs-feed.d.ts +1 -1
  4. package/dist/data/gtfs-feed.js +2 -2
  5. package/dist/data/gtfs-feed.js.map +1 -1
  6. package/dist/data/gtfs-schedule-data.d.ts +9 -1
  7. package/dist/data/gtfs-schedule-data.js +15 -2
  8. package/dist/data/gtfs-schedule-data.js.map +1 -1
  9. package/dist/data/raw/schedule-csvs.d.ts +0 -18
  10. package/dist/departures/departures-iterator.js +1 -7
  11. package/dist/departures/departures-iterator.js.map +1 -1
  12. package/dist/departures/realtime-departures-block-iterator.js +2 -0
  13. package/dist/departures/realtime-departures-block-iterator.js.map +1 -1
  14. package/dist/departures/scheduled-departures-iterator.d.ts +8 -2
  15. package/dist/departures/scheduled-departures-iterator.js +35 -19
  16. package/dist/departures/scheduled-departures-iterator.js.map +1 -1
  17. package/dist/departures/zipper-departures-iterator.d.ts +7 -4
  18. package/dist/departures/zipper-departures-iterator.js +33 -11
  19. package/dist/departures/zipper-departures-iterator.js.map +1 -1
  20. package/dist/gtfs-service-source.d.ts +2 -0
  21. package/dist/gtfs-service-source.js +3 -1
  22. package/dist/gtfs-service-source.js.map +1 -1
  23. package/dist/gtfs-system.d.ts +1 -1
  24. package/dist/parser/gtfs-feed-parser.d.ts +1 -1
  25. package/dist/parser/gtfs-feed-parser.js +2 -2
  26. package/dist/parser/gtfs-feed-parser.js.map +1 -1
  27. package/dist/parser/realtime/gtfs-trip-update-parser.d.ts +12 -12
  28. package/dist/parser/realtime/gtfs-trip-update-parser.js +12 -24
  29. package/dist/parser/realtime/gtfs-trip-update-parser.js.map +1 -1
  30. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.d.ts +4 -4
  31. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js +11 -13
  32. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js.map +1 -1
  33. package/dist/parser/schedule/gtfs-calendar-parser.d.ts +4 -4
  34. package/dist/parser/schedule/gtfs-calendar-parser.js +4 -12
  35. package/dist/parser/schedule/gtfs-calendar-parser.js.map +1 -1
  36. package/dist/parser/schedule/gtfs-route-matcher.d.ts +4 -4
  37. package/dist/parser/schedule/gtfs-route-matcher.js +4 -8
  38. package/dist/parser/schedule/gtfs-route-matcher.js.map +1 -1
  39. package/dist/parser/schedule/{gtfs-schedule-parser.d.ts → gtfs-schedule-data-parser.d.ts} +1 -1
  40. package/dist/parser/schedule/{gtfs-schedule-parser.js → gtfs-schedule-data-parser.js} +4 -5
  41. package/dist/parser/schedule/gtfs-schedule-data-parser.js.map +1 -0
  42. package/dist/parser/schedule/gtfs-stop-time-normaliser.d.ts +2 -2
  43. package/dist/parser/schedule/gtfs-stop-time-normaliser.js +2 -4
  44. package/dist/parser/schedule/gtfs-stop-time-normaliser.js.map +1 -1
  45. package/dist/parser/schedule/gtfs-transfer-connector.d.ts +8 -8
  46. package/dist/parser/schedule/gtfs-transfer-connector.js +8 -16
  47. package/dist/parser/schedule/gtfs-transfer-connector.js.map +1 -1
  48. package/dist/parser/schedule/gtfs-trip-parser.d.ts +8 -5
  49. package/dist/parser/schedule/gtfs-trip-parser.js +10 -10
  50. package/dist/parser/schedule/gtfs-trip-parser.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/departures/multifeed-departures-iterator.d.ts +0 -20
  53. package/dist/departures/multifeed-departures-iterator.js +0 -52
  54. package/dist/departures/multifeed-departures-iterator.js.map +0 -1
  55. package/dist/parser/schedule/gtfs-schedule-parser.js.map +0 -1
@@ -5,7 +5,9 @@ export class ServiceConversionIterator {
5
5
  _convertedNextDeparture;
6
6
  constructor(
7
7
  // TODO: There's two things called DeparturesIterator in this repo, which
8
- // isn't ideal.
8
+ // isn't ideal. Maybe this one could be prefixed with Gtfs, but it raises
9
+ // the larger question of whether anything in this repo need be prefixed
10
+ // with Gtfs given the package name.
9
11
  _iterator, _converter,
10
12
  // TODO: The need to pass around timezone here (and everywhere), I think
11
13
  // hints at that it should be a property of the DeparturesIteratorResult.
@@ -1 +1 @@
1
- {"version":3,"file":"service-conversion-iterator.js","sourceRoot":"","sources":["../../src/corequeryify/service-conversion-iterator.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,yBAAyB;IAejB;IAEA;IAaA;IApBX,uBAAuB,CAAiC;IAEhE;IACE,yEAAyE;IACzE,eAAe;IACE,SAA6B,EAE7B,UAShB;IAED,wEAAwE;IACxE,yEAAyE;IACxD,SAAiB;QAfjB,cAAS,GAAT,SAAS,CAAoB;QAE7B,eAAU,GAAV,UAAU,CAS1B;QAIgB,cAAS,GAAT,SAAS,CAAQ;QAElC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC;QACtC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,IAAI;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAEpC,yEAAyE;QACzE,iDAAiD;QACjD,MAAM,cAAc,GAClB,IAAI,CAAC,uBAAuB,IAAI,IAAI;YAClC,CAAC,CAAC,IAAI,CAAC,uBAAuB;YAC9B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9D,2EAA2E;QAC3E,0DAA0D;QAC1D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAEpC,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;CACF"}
1
+ {"version":3,"file":"service-conversion-iterator.js","sourceRoot":"","sources":["../../src/corequeryify/service-conversion-iterator.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,yBAAyB;IAiBjB;IAEA;IAaA;IAtBX,uBAAuB,CAAiC;IAEhE;IACE,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,oCAAoC;IACnB,SAA6B,EAE7B,UAShB;IAED,wEAAwE;IACxE,yEAAyE;IACxD,SAAiB;QAfjB,cAAS,GAAT,SAAS,CAAoB;QAE7B,eAAU,GAAV,UAAU,CAS1B;QAIgB,cAAS,GAAT,SAAS,CAAQ;QAElC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC;QACtC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,IAAI;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAEpC,yEAAyE;QACzE,iDAAiD;QACjD,MAAM,cAAc,GAClB,IAAI,CAAC,uBAAuB,IAAI,IAAI;YAClC,CAAC,CAAC,IAAI,CAAC,uBAAuB;YAC9B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9D,2EAA2E;QAC3E,0DAA0D;QAC1D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAEpC,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -15,5 +15,5 @@ export declare class GtfsFeed {
15
15
  static fromNewScheduleData(scheduleData: GtfsScheduleData, realtimeData: GtfsRealtimeData, timezoneData: TimezoneData): GtfsFeed;
16
16
  withUpdatedRealtimeData(realtimeData: GtfsRealtimeData): GtfsFeed;
17
17
  getTrip(gtfsTripId: string, serviceDay: Temporal.PlainDate): GtfsScheduledTrip | GtfsUpdatedTrip | null;
18
- createDepartureIterator(stopId: number): ZipperDeparturesIterator;
18
+ createDepartureIterator(stopId: number, iterationLimitHours: number | null): ZipperDeparturesIterator;
19
19
  }
@@ -38,8 +38,8 @@ export class GtfsFeed {
38
38
  }
39
39
  return null;
40
40
  }
41
- createDepartureIterator(stopId) {
42
- return ZipperDeparturesIterator.forFeed(stopId, this.scheduledMovementsIndex, this.realtimeData, this.timezoneData);
41
+ createDepartureIterator(stopId, iterationLimitHours) {
42
+ return ZipperDeparturesIterator.forFeed(stopId, this.scheduledMovementsIndex, this.realtimeData, this.timezoneData, iterationLimitHours);
43
43
  }
44
44
  }
45
45
  //# sourceMappingURL=gtfs-feed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gtfs-feed.js","sourceRoot":"","sources":["../../src/data/gtfs-feed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,MAAM,OAAO,QAAQ;IAiBR;IACA;IACA;IACA;IAnBX,MAAM,CAAU,KAAK,GAAG,IAAI,QAAQ,CAClC,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,KAAK;IAEtB,wEAAwE;IACxE,mEAAmE;IACnE;QACE,QAAQ,EAAE,KAAK;QACf,0BAA0B,EAAE,CAAC;QAC7B,0BAA0B,EAAE,CAAC;KAC9B,EAED,2BAA2B,CAAC,KAAK,CAClC,CAAC;IAEF,YACW,YAA8B,EAC9B,YAA8B,EAC9B,YAA0B,EAC1B,uBAAoD;QAHpD,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,4BAAuB,GAAvB,uBAAuB,CAA6B;IAC5D,CAAC;IAEJ,MAAM,CAAC,mBAAmB,CACxB,YAA8B,EAC9B,YAA8B,EAC9B,YAA0B;QAE1B,MAAM,uBAAuB,GAC3B,2BAA2B,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAElD,OAAO,IAAI,QAAQ,CACjB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,YAA8B;QACpD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,YAAY,EACjB,YAAY,EACZ,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,uBAAuB,CAC7B,CAAC;IACJ,CAAC;IAED,OAAO,CACL,UAAkB,EAClB,UAA8B;QAE9B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,YAAY,IAAI,IAAI;YAAE,OAAO,YAAY,CAAC;QAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB,CAAC,MAAc;QACpC,OAAO,wBAAwB,CAAC,OAAO,CACrC,MAAM,EACN,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,CAClB,CAAC;IACJ,CAAC"}
1
+ {"version":3,"file":"gtfs-feed.js","sourceRoot":"","sources":["../../src/data/gtfs-feed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,MAAM,OAAO,QAAQ;IAiBR;IACA;IACA;IACA;IAnBX,MAAM,CAAU,KAAK,GAAG,IAAI,QAAQ,CAClC,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,KAAK;IAEtB,wEAAwE;IACxE,mEAAmE;IACnE;QACE,QAAQ,EAAE,KAAK;QACf,0BAA0B,EAAE,CAAC;QAC7B,0BAA0B,EAAE,CAAC;KAC9B,EAED,2BAA2B,CAAC,KAAK,CAClC,CAAC;IAEF,YACW,YAA8B,EAC9B,YAA8B,EAC9B,YAA0B,EAC1B,uBAAoD;QAHpD,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,4BAAuB,GAAvB,uBAAuB,CAA6B;IAC5D,CAAC;IAEJ,MAAM,CAAC,mBAAmB,CACxB,YAA8B,EAC9B,YAA8B,EAC9B,YAA0B;QAE1B,MAAM,uBAAuB,GAC3B,2BAA2B,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAElD,OAAO,IAAI,QAAQ,CACjB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,YAA8B;QACpD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,YAAY,EACjB,YAAY,EACZ,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,uBAAuB,CAC7B,CAAC;IACJ,CAAC;IAED,OAAO,CACL,UAAkB,EAClB,UAA8B;QAE9B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,YAAY,IAAI,IAAI;YAAE,OAAO,YAAY,CAAC;QAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACzE,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB,CAAC,MAAc,EAAE,mBAAkC;QACxE,OAAO,wBAAwB,CAAC,OAAO,CACrC,MAAM,EACN,IAAI,CAAC,uBAAuB,EAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EACjB,mBAAmB,CACpB,CAAC;IACJ,CAAC"}
@@ -4,11 +4,19 @@ export declare class GtfsScheduleData {
4
4
  private readonly _trips;
5
5
  private readonly _tripsById;
6
6
  private readonly _calendarsById;
7
+ /**
8
+ * Trip IDs we saw during parsing, but intentionally ignored (e.g. because
9
+ * they were replacement buses). We store them so that if we see them in a
10
+ * realtime trip update, we don't classify it as a trip we failed to match.
11
+ ) */
12
+ private readonly _ignoredTripIds;
7
13
  static readonly empty: GtfsScheduleData;
8
- constructor(_trips: readonly GtfsScheduledTrip[], calendars: readonly GtfsCalendar[]);
14
+ constructor(_trips: readonly GtfsScheduledTrip[], calendars: readonly GtfsCalendar[], ignoredTripIds: readonly string[]);
9
15
  allTrips(): readonly GtfsScheduledTrip[];
10
16
  getTrip(gtfsTripId: string): GtfsScheduledTrip | null;
11
17
  getCalendar(gtfsCalendarId: string): GtfsCalendar | null;
18
+ isTripIgnored(gtfsTripId: string): boolean;
12
19
  requireCalendar(gtfsCalendarId: string): GtfsCalendar;
20
+ withIgnoredTripIds(newIgnoredTripIds: readonly string[]): GtfsScheduleData;
13
21
  static fromTrips(trips: readonly GtfsScheduledTrip[]): GtfsScheduleData;
14
22
  }
@@ -2,8 +2,14 @@ export class GtfsScheduleData {
2
2
  _trips;
3
3
  _tripsById;
4
4
  _calendarsById;
5
+ /**
6
+ * Trip IDs we saw during parsing, but intentionally ignored (e.g. because
7
+ * they were replacement buses). We store them so that if we see them in a
8
+ * realtime trip update, we don't classify it as a trip we failed to match.
9
+ ) */
10
+ _ignoredTripIds;
5
11
  static empty = GtfsScheduleData.fromTrips([]);
6
- constructor(_trips, calendars) {
12
+ constructor(_trips, calendars, ignoredTripIds) {
7
13
  // Arguably we should be taking the map as the constructor argument because
8
14
  // the GtfsTransferConnector operates on a map, that it converts back to an
9
15
  // array, only to have it immediately passed on to this constructor where
@@ -11,6 +17,7 @@ export class GtfsScheduleData {
11
17
  this._trips = _trips;
12
18
  this._tripsById = new Map(_trips.map((trip) => [trip.gtfsTripId, trip]));
13
19
  this._calendarsById = new Map(calendars.map((calendar) => [calendar.gtfsCalendarId, calendar]));
20
+ this._ignoredTripIds = new Set(ignoredTripIds);
14
21
  }
15
22
  allTrips() {
16
23
  return this._trips;
@@ -21,6 +28,9 @@ export class GtfsScheduleData {
21
28
  getCalendar(gtfsCalendarId) {
22
29
  return this._calendarsById.get(gtfsCalendarId) ?? null;
23
30
  }
31
+ isTripIgnored(gtfsTripId) {
32
+ return this._ignoredTripIds.has(gtfsTripId);
33
+ }
24
34
  requireCalendar(gtfsCalendarId) {
25
35
  const calendar = this.getCalendar(gtfsCalendarId);
26
36
  if (calendar == null) {
@@ -28,6 +38,9 @@ export class GtfsScheduleData {
28
38
  }
29
39
  return calendar;
30
40
  }
41
+ withIgnoredTripIds(newIgnoredTripIds) {
42
+ return new GtfsScheduleData(this._trips, [...this._calendarsById.values()], newIgnoredTripIds);
43
+ }
31
44
  static fromTrips(trips) {
32
45
  const calendars = new Map();
33
46
  for (const trip of trips) {
@@ -35,7 +48,7 @@ export class GtfsScheduleData {
35
48
  calendars.set(trip.calendar.gtfsCalendarId, trip.calendar);
36
49
  }
37
50
  }
38
- return new GtfsScheduleData(trips, [...calendars.values()]);
51
+ return new GtfsScheduleData(trips, [...calendars.values()], []);
39
52
  }
40
53
  }
41
54
  //# sourceMappingURL=gtfs-schedule-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gtfs-schedule-data.js","sourceRoot":"","sources":["../../src/data/gtfs-schedule-data.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IAOR;IANF,UAAU,CAAiC;IAC3C,cAAc,CAA4B;IAE3D,MAAM,CAAU,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEvD,YACmB,MAAoC,EACrD,SAAkC;QAElC,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,8BAA8B;QANb,WAAM,GAAN,MAAM,CAA8B;QAQrD,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAC9C,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CACjE,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,UAAkB;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACjD,CAAC;IAED,WAAW,CAAC,cAAsB;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IAED,eAAe,CAAC,cAAsB;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,uBAAuB,cAAc,+BAA+B,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAmC;QAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC"}
1
+ {"version":3,"file":"gtfs-schedule-data.js","sourceRoot":"","sources":["../../src/data/gtfs-schedule-data.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IAcR;IAbF,UAAU,CAAiC;IAC3C,cAAc,CAA4B;IAE3D;;;;QAII;IACa,eAAe,CAAc;IAE9C,MAAM,CAAU,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEvD,YACmB,MAAoC,EACrD,SAAkC,EAClC,cAAiC;QAEjC,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,8BAA8B;QAPb,WAAM,GAAN,MAAM,CAA8B;QASrD,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAC9C,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CACjE,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAS,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,UAAkB;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACjD,CAAC;IAED,WAAW,CAAC,cAAsB;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe,CAAC,cAAsB;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAClD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,uBAAuB,cAAc,+BAA+B,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kBAAkB,CAAC,iBAAoC;QACrD,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,MAAM,EACX,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EACjC,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAmC;QAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC"}
@@ -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 {};
@@ -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"}
@@ -22,6 +22,8 @@ export class RealtimeDeparturesBlockIterator extends DeparturesBlockIterator {
22
22
  // trip listed twice at stations like Flinders Street or Town Hall, once for
23
23
  // the arrival and then again for the departure of the continuing trip. We
24
24
  // just need to be sure the continuing trip is actually running!
25
+ //
26
+ // TODO: This needs to change too.
25
27
  const isArrivalWhichContinues = movement.type === "terminating" &&
26
28
  trip.scheduledTrip.nextTrip != null &&
27
29
  trip.scheduledTrip.nextTrip.calendar.occursOn(trip.serviceDay) &&
@@ -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,KAAmC;QAEnC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QAEjC,wEAAwE;QACxE,4EAA4E;QAC5E,0EAA0E;QAC1E,gEAAgE;QAChE,EAAE;QACF,kCAAkC;QAClC,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"}
@@ -4,17 +4,22 @@ import type { GtfsRealtimeData } from "../data/gtfs-realtime-data.js";
4
4
  import { ScheduledDeparturesBlocksBuilder } from "./scheduled-departures-blocks-builder.js";
5
5
  import type { TimezoneData } from "../config/timezone-data.js";
6
6
  import type { DeparturesIterationDirection } from "../corequery-types.js";
7
+ type ScheduledDeparturesIteratorOptions = {
8
+ readonly blockScanHours: number;
9
+ readonly maximumNumberOfScans: number | null;
10
+ };
7
11
  export declare class ScheduledDeparturesIterator extends DeparturesIterator {
8
12
  private readonly _blockBuilder;
9
13
  private readonly _realtimeData;
14
+ private readonly _options;
10
15
  private _direction;
11
16
  private _searchRange;
12
17
  private _iterators;
13
18
  private _nextIterator;
14
19
  private _blockSearchesRan;
15
20
  private _subiteratorsCreated;
16
- constructor(_blockBuilder: ScheduledDeparturesBlocksBuilder, _realtimeData: GtfsRealtimeData);
17
- static tryBuild(stopId: number, scheduledMovementsIndex: GtfsScheduledMovementsIndex, realtimeData: GtfsRealtimeData, timezoneData: TimezoneData): ScheduledDeparturesIterator | null;
21
+ constructor(_blockBuilder: ScheduledDeparturesBlocksBuilder, _realtimeData: GtfsRealtimeData, _options: ScheduledDeparturesIteratorOptions);
22
+ static tryBuild(stopId: number, scheduledMovementsIndex: GtfsScheduledMovementsIndex, realtimeData: GtfsRealtimeData, timezoneData: TimezoneData, iterationLimitHours: number | null): ScheduledDeparturesIterator | null;
18
23
  getStats(): {
19
24
  blockSearchesRan: number;
20
25
  subiteratorsCreated: number;
@@ -28,3 +33,4 @@ export declare class ScheduledDeparturesIterator extends DeparturesIterator {
28
33
  private _isBetter;
29
34
  private _areMoreBlocksAvailable;
30
35
  }
36
+ export {};
@@ -3,30 +3,40 @@ import { DeparturesIterator, } from "./departures-iterator.js";
3
3
  import { BoundedInstantRange } from "../data/bounded-instant-range.js";
4
4
  import { ScheduledDeparturesBlockIterator } from "./scheduled-departures-block-iterator.js";
5
5
  import { ScheduledDeparturesBlocksBuilder } from "./scheduled-departures-blocks-builder.js";
6
- const BLOCK_SCAN_HRS = 48;
6
+ const DEFAULT_BLOCK_SCAN_HOURS = 48;
7
7
  export class ScheduledDeparturesIterator extends DeparturesIterator {
8
8
  _blockBuilder;
9
9
  _realtimeData;
10
+ _options;
10
11
  _direction;
11
12
  _searchRange;
12
13
  _iterators;
13
14
  _nextIterator;
14
- _blockSearchesRan = 0;
15
- _subiteratorsCreated = 0;
16
- constructor(_blockBuilder, _realtimeData) {
15
+ _blockSearchesRan;
16
+ _subiteratorsCreated;
17
+ constructor(_blockBuilder, _realtimeData, _options) {
17
18
  super();
18
19
  this._blockBuilder = _blockBuilder;
19
20
  this._realtimeData = _realtimeData;
21
+ this._options = _options;
20
22
  this._direction = "forwards";
21
23
  this._searchRange = null;
22
24
  this._iterators = [];
23
25
  this._nextIterator = null;
26
+ this._blockSearchesRan = 0;
27
+ this._subiteratorsCreated = 0;
24
28
  }
25
- static tryBuild(stopId, scheduledMovementsIndex, realtimeData, timezoneData) {
29
+ static tryBuild(stopId, scheduledMovementsIndex, realtimeData, timezoneData, iterationLimitHours) {
26
30
  const blockBuilder = ScheduledDeparturesBlocksBuilder.tryBuild(stopId, scheduledMovementsIndex, timezoneData);
27
31
  if (blockBuilder == null)
28
32
  return null;
29
- return new ScheduledDeparturesIterator(blockBuilder, realtimeData);
33
+ const maximumNumberOfScans = iterationLimitHours == null
34
+ ? null
35
+ : Math.ceil(iterationLimitHours / DEFAULT_BLOCK_SCAN_HOURS);
36
+ return new ScheduledDeparturesIterator(blockBuilder, realtimeData, {
37
+ blockScanHours: DEFAULT_BLOCK_SCAN_HOURS,
38
+ maximumNumberOfScans: maximumNumberOfScans,
39
+ });
30
40
  }
31
41
  getStats() {
32
42
  return {
@@ -35,8 +45,10 @@ export class ScheduledDeparturesIterator extends DeparturesIterator {
35
45
  };
36
46
  }
37
47
  set(instant, direction) {
48
+ this._blockSearchesRan = 0;
49
+ this._subiteratorsCreated = 0;
38
50
  this._direction = direction;
39
- this._searchRange = SearchRange.create(instant, direction, BLOCK_SCAN_HRS).optimize(this._blockBuilder);
51
+ this._searchRange = SearchRange.create(instant, direction, this._options.blockScanHours).optimize(this._blockBuilder);
40
52
  this._iterators = [];
41
53
  this._nextIterator = null;
42
54
  this._updateIteratorsForSearchRange();
@@ -58,19 +70,23 @@ export class ScheduledDeparturesIterator extends DeparturesIterator {
58
70
  throw new Error("Search range not set.");
59
71
  let bestIterator = this._getBestOfCurrentIterators();
60
72
  let bestValue = bestIterator?.peek() ?? null;
61
- // TODO: Allow the maximum number of iterations to be configurable. Even
62
- // though I've gone to great effort to make an algorithm which gives
63
- // theoretically correct results and stops once all calendars are exhausted,
64
- // reality can be messy, and there could be giant gaps between services
65
- // matching certain criteria (e.g. terminating in an unusual location), and
66
- // we probably don't want to make it super easy to DDOS the server by making
67
- // it perform searches which require it to search through several months of
68
- // blocks. Maybe instead of a max number of iterations, we could do a max
69
- // number of days from the start time or something (effectively the same
70
- // thing, but without relying on the value of BLOCK_SCAN_HRS).
73
+ // Limit the maximum number of searches, otherwise if there are more blocks
74
+ // available, but they're super far off in the future, and next time peek()
75
+ // is called once we've made it to that huge gap is gonna be really slow.
76
+ //
77
+ // While it's great that in theory this algorithm works to infinity, and is
78
+ // fairly efficient in most cases, in reality, trainquery-melbourne (or any
79
+ // other consumer) won't want to tradeoff the possibility of a single tricky
80
+ // request taking down the server for exact correctness.
81
+ //
82
+ // There's probably further optimisations I could make in this algorithm to
83
+ // allow this limit to be raised (to the point where it'll never matter in
84
+ // practice), but I doubt we'll ever want to remove it entirely.
85
+ const maxScans = this._options.maximumNumberOfScans;
71
86
  while ((bestValue == null || !this._searchRange.includes(bestValue.instant)) &&
72
- this._areMoreBlocksAvailable()) {
73
- this._searchRange = this._searchRange.getNextWithDuration(BLOCK_SCAN_HRS);
87
+ this._areMoreBlocksAvailable() &&
88
+ (maxScans == null || this._blockSearchesRan < maxScans)) {
89
+ this._searchRange = this._searchRange.getNextWithDuration(this._options.blockScanHours);
74
90
  this._updateIteratorsForSearchRange();
75
91
  bestIterator = this._getBestOfCurrentIterators();
76
92
  bestValue = bestIterator?.peek() ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-departures-iterator.js","sourceRoot":"","sources":["../../src/departures/scheduled-departures-iterator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduled-departures-iterator.js","sourceRoot":"","sources":["../../src/departures/scheduled-departures-iterator.ts"],"names":[],"mappings":"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"}
@@ -5,14 +5,17 @@ import type { TimezoneData } from "../config/timezone-data.js";
5
5
  import type { DeparturesIterationDirection } from "../corequery-types.js";
6
6
  export declare class ZipperDeparturesIterator extends DeparturesIterator {
7
7
  private readonly _iterators;
8
+ private readonly _iterationLimitHours;
8
9
  private _direction;
9
10
  private _nextIterator;
10
- constructor(_iterators: DeparturesIterator[]);
11
+ private _cutoff;
12
+ constructor(_iterators: DeparturesIterator[], _iterationLimitHours: number | null);
11
13
  set(instant: Temporal.Instant, direction: DeparturesIterationDirection): void;
12
14
  peek(): DeparturesIteratorResult | null;
13
15
  peekAtIterator(): DeparturesIterator | null;
14
16
  take(): DeparturesIteratorResult;
15
- private _determineBestIterator;
16
- private _isBetter;
17
- static forFeed(stopId: number, scheduledMovementsIndex: GtfsScheduledMovementsIndex, realtimeData: GtfsRealtimeData, timezoneData: TimezoneData): ZipperDeparturesIterator;
17
+ private _determineNextIterator;
18
+ private _isCloser;
19
+ private _determineCutoff;
20
+ static forFeed(stopId: number, scheduledMovementsIndex: GtfsScheduledMovementsIndex, realtimeData: GtfsRealtimeData, timezoneData: TimezoneData, iterationLimitHours: number | null): ZipperDeparturesIterator;
18
21
  }
@@ -4,20 +4,25 @@ import { ScheduledDeparturesIterator } from "./scheduled-departures-iterator.js"
4
4
  import { RealtimeDeparturesBlockIterator } from "./realtime-departures-block-iterator.js";
5
5
  export class ZipperDeparturesIterator extends DeparturesIterator {
6
6
  _iterators;
7
+ _iterationLimitHours;
7
8
  _direction;
8
9
  _nextIterator;
9
- constructor(_iterators) {
10
+ _cutoff;
11
+ constructor(_iterators, _iterationLimitHours) {
10
12
  super();
11
13
  this._iterators = _iterators;
14
+ this._iterationLimitHours = _iterationLimitHours;
12
15
  this._direction = "forwards";
13
16
  this._nextIterator = null;
17
+ this._cutoff = null;
14
18
  }
15
19
  set(instant, direction) {
16
20
  this._direction = direction;
21
+ this._cutoff = this._determineCutoff(instant);
17
22
  for (const iterator of this._iterators) {
18
23
  iterator.set(instant, direction);
19
24
  }
20
- this._nextIterator = this._determineBestIterator();
25
+ this._nextIterator = this._determineNextIterator();
21
26
  }
22
27
  peek() {
23
28
  return this._nextIterator?.peek() ?? null;
@@ -30,39 +35,56 @@ export class ZipperDeparturesIterator extends DeparturesIterator {
30
35
  if (iterator == null)
31
36
  throw new Error("Nothing to take.");
32
37
  const value = iterator.take();
33
- this._nextIterator = this._determineBestIterator();
38
+ this._nextIterator = this._determineNextIterator();
34
39
  return value;
35
40
  }
36
- _determineBestIterator() {
41
+ _determineNextIterator() {
42
+ const cutoff = this._cutoff;
37
43
  let best = null;
38
44
  let bestIterator = null;
39
45
  for (const iterator of this._iterators) {
40
46
  const nextValue = iterator.peek();
41
47
  if (nextValue == null)
42
48
  continue;
43
- if (best == null || this._isBetter(best.instant, nextValue.instant)) {
49
+ const nextInstant = nextValue.instant;
50
+ const better = best == null || this._isCloser(nextInstant, best.instant);
51
+ const afterCutoff = cutoff != null && this._isCloser(cutoff, nextInstant);
52
+ if (better && !afterCutoff) {
44
53
  best = nextValue;
45
54
  bestIterator = iterator;
46
55
  }
47
56
  }
48
57
  return bestIterator;
49
58
  }
50
- _isBetter(currentBest, candidate) {
59
+ _isCloser(a, b) {
51
60
  if (this._direction === "forwards") {
52
- return Temporal.Instant.compare(candidate, currentBest) < 0;
61
+ return Temporal.Instant.compare(a, b) < 0;
53
62
  }
54
63
  else if (this._direction === "backwards") {
55
- return Temporal.Instant.compare(candidate, currentBest) > 0;
64
+ return Temporal.Instant.compare(a, b) > 0;
56
65
  }
57
66
  else {
58
67
  assertNever(this._direction);
59
68
  }
60
69
  }
61
- static forFeed(stopId, scheduledMovementsIndex, realtimeData, timezoneData) {
62
- const scheduled = ScheduledDeparturesIterator.tryBuild(stopId, scheduledMovementsIndex, realtimeData, timezoneData);
70
+ _determineCutoff(instant) {
71
+ if (this._iterationLimitHours == null)
72
+ return null;
73
+ if (this._direction === "forwards") {
74
+ return instant.add({ hours: this._iterationLimitHours });
75
+ }
76
+ else if (this._direction === "backwards") {
77
+ return instant.subtract({ hours: this._iterationLimitHours });
78
+ }
79
+ else {
80
+ assertNever(this._direction);
81
+ }
82
+ }
83
+ static forFeed(stopId, scheduledMovementsIndex, realtimeData, timezoneData, iterationLimitHours) {
84
+ const scheduled = ScheduledDeparturesIterator.tryBuild(stopId, scheduledMovementsIndex, realtimeData, timezoneData, iterationLimitHours);
63
85
  const realtime = RealtimeDeparturesBlockIterator.tryBuild(stopId, realtimeData);
64
86
  const iterators = [scheduled, realtime].filter(nonNull);
65
- return new ZipperDeparturesIterator(iterators);
87
+ return new ZipperDeparturesIterator(iterators, iterationLimitHours);
66
88
  }
67
89
  }
68
90
  //# sourceMappingURL=zipper-departures-iterator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zipper-departures-iterator.js","sourceRoot":"","sources":["../../src/departures/zipper-departures-iterator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zipper-departures-iterator.js","sourceRoot":"","sources":["../../src/departures/zipper-departures-iterator.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { GtfsSystem } from "./gtfs-system.js";
3
3
  type GtfsServiceSourceFields<CorequeryDepartureClass, CorequeryServiceClass, CorequeryTagsClass, CorequeryServiceOriginatingMovementClass, CorequeryServiceRegularMovementClass, CorequeryServiceTerminatingMovementClass, CorequeryServicePassingMovementClass, CorequeryServiceConnectionClass> = {
4
4
  readonly sourceId: string;
5
5
  readonly gtfsSystem: GtfsSystem;
6
+ readonly departureIterationLimitHours: number | null;
6
7
  buildDeparture: (fields: DepartureFields<CorequeryServiceClass>) => CorequeryDepartureClass;
7
8
  buildService: (fields: ServiceFields<CorequeryTagsClass, CorequeryServiceOriginatingMovementClass, CorequeryServiceRegularMovementClass, CorequeryServiceTerminatingMovementClass, CorequeryServicePassingMovementClass, CorequeryServiceConnectionClass>) => CorequeryServiceClass;
8
9
  buildTags: (tags: Set<number>) => CorequeryTagsClass;
@@ -15,6 +16,7 @@ type GtfsServiceSourceFields<CorequeryDepartureClass, CorequeryServiceClass, Cor
15
16
  export declare class GtfsServiceSource<CorequeryDepartureClass, CorequeryServiceClass, CorequeryTagsClass, CorequeryServiceOriginatingMovementClass, CorequeryServiceRegularMovementClass, CorequeryServiceTerminatingMovementClass, CorequeryServicePassingMovementClass, CorequeryServiceConnectionClass> implements ServiceSource<CorequeryDepartureClass, CorequeryServiceClass> {
16
17
  readonly sourceId: string;
17
18
  readonly gtfsSystem: GtfsSystem;
19
+ readonly departureIterationLimitHours: number | null;
18
20
  private readonly _converter;
19
21
  constructor(fields: GtfsServiceSourceFields<CorequeryDepartureClass, CorequeryServiceClass, CorequeryTagsClass, CorequeryServiceOriginatingMovementClass, CorequeryServiceRegularMovementClass, CorequeryServiceTerminatingMovementClass, CorequeryServicePassingMovementClass, CorequeryServiceConnectionClass>);
20
22
  getService(intrasourceId: string): Promise<CorequeryServiceClass | null>;
@@ -7,10 +7,12 @@ import { ServiceConversionIterator } from "./corequeryify/service-conversion-ite
7
7
  export class GtfsServiceSource {
8
8
  sourceId;
9
9
  gtfsSystem;
10
+ departureIterationLimitHours;
10
11
  _converter;
11
12
  constructor(fields) {
12
13
  this.sourceId = fields.sourceId;
13
14
  this.gtfsSystem = fields.gtfsSystem;
15
+ this.departureIterationLimitHours = fields.departureIterationLimitHours;
14
16
  this._converter = new ServiceConverter({
15
17
  sourceId: fields.sourceId,
16
18
  buildDeparture: fields.buildDeparture,
@@ -45,7 +47,7 @@ export class GtfsServiceSource {
45
47
  }
46
48
  getDeparturesIterator(stopId, instant, direction) {
47
49
  const feed = this.gtfsSystem.requireFeed();
48
- const iterator = feed.createDepartureIterator(stopId);
50
+ const iterator = feed.createDepartureIterator(stopId, this.departureIterationLimitHours);
49
51
  iterator.set(instant, direction);
50
52
  return new ServiceConversionIterator(iterator, this._converter, feed.timezoneData.timezone);
51
53
  }
@@ -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;AAqD1F,MAAM,OAAO,iBAAiB;IAUnB,QAAQ,CAAS;IACjB,UAAU,CAAa;IAEf,UAAU,CASzB;IAEF,YACE,MASC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEhC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,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,CAAC,MAAM,CAAC,CAAC;QACtD,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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"}
@@ -4,7 +4,7 @@ import { LineGtfsIdMapping } from "./data/ids/line-gtfs-id-mapping.js";
4
4
  import { StopGtfsIdMapping } from "./data/ids/stop-gtfs-id-mapping.js";
5
5
  import { BonusLinesMapping } from "./data/route/bonus-lines-mapping.js";
6
6
  import { LineRoutesMapping } from "./data/route/line-routes-mapping.js";
7
- import type { GtfsScheduleParsingError } from "./parser/schedule/gtfs-schedule-parser.js";
7
+ import type { GtfsScheduleParsingError } from "./parser/schedule/gtfs-schedule-data-parser.js";
8
8
  import type { RealtimeDataJson } from "./data/raw/realtime-data-json.js";
9
9
  import type { GtfsFeedCsv } from "./data/raw/schedule-csvs.js";
10
10
  export declare class GtfsSystem {
@@ -5,7 +5,7 @@ import type { BonusLinesMapping } from "../data/route/bonus-lines-mapping.js";
5
5
  import type { LineRoutesMapping } from "../data/route/line-routes-mapping.js";
6
6
  import type { RealtimeDataJson } from "../data/raw/realtime-data-json.js";
7
7
  import { type GtfsRealtimeDataParsingError } from "./realtime/gtfs-realtime-data-parser.js";
8
- import { type GtfsScheduleParsingError } from "./schedule/gtfs-schedule-parser.js";
8
+ import { type GtfsScheduleParsingError } from "./schedule/gtfs-schedule-data-parser.js";
9
9
  import type { GtfsFeedCsv } from "../data/raw/schedule-csvs.js";
10
10
  import type { TimezoneData } from "../config/timezone-data.js";
11
11
  export declare class GtfsFeedParser {
@@ -1,13 +1,13 @@
1
1
  import { GtfsFeed } from "../data/gtfs-feed.js";
2
2
  import { GtfsRealtimeDataParser, } from "./realtime/gtfs-realtime-data-parser.js";
3
- import { GtfsScheduleParser, } from "./schedule/gtfs-schedule-parser.js";
3
+ import { GtfsScheduleDataParser, } from "./schedule/gtfs-schedule-data-parser.js";
4
4
  export class GtfsFeedParser {
5
5
  _timezoneData;
6
6
  _scheduleParser;
7
7
  _realtimeParser;
8
8
  constructor(lineRoutesMapping, bonusLinesMapping, _timezoneData, _onScheduleParsingError, _onRealtimeParsingError) {
9
9
  this._timezoneData = _timezoneData;
10
- this._scheduleParser = new GtfsScheduleParser(lineRoutesMapping, bonusLinesMapping, _onScheduleParsingError);
10
+ this._scheduleParser = new GtfsScheduleDataParser(lineRoutesMapping, bonusLinesMapping, _onScheduleParsingError);
11
11
  this._realtimeParser = new GtfsRealtimeDataParser(_timezoneData.timezone, _onRealtimeParsingError);
12
12
  }
13
13
  parse(scheduleCsvs, realtimeJson, lineGtfsIdMapping, stopGtfsIdMapping) {
@@ -1 +1 @@
1
- {"version":3,"file":"gtfs-feed-parser.js","sourceRoot":"","sources":["../../src/parser/gtfs-feed-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhD,OAAO,EACL,sBAAsB,GAEvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,kBAAkB,GAEnB,MAAM,oCAAoC,CAAC;AAI5C,MAAM,OAAO,cAAc;IAON;IANF,eAAe,CAAqB;IACpC,eAAe,CAAyB;IAEzD,YACE,iBAAoC,EACpC,iBAAoC,EACnB,aAA2B,EAC5C,uBAAkE,EAClE,uBAAsE;QAFrD,kBAAa,GAAb,aAAa,CAAc;QAI5C,IAAI,CAAC,eAAe,GAAG,IAAI,kBAAkB,CAC3C,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,CACxB,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,sBAAsB,CAC/C,aAAa,CAAC,QAAQ,EACtB,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,KAAK,CACH,YAAyB,EACzB,YAA8B,EAC9B,iBAAoC,EACpC,iBAAoC;QAEpC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAC7C,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAC7C,YAAY,EACZ,YAAY,EACZ,iBAAiB,CAClB,CAAC;QAEF,OAAO,QAAQ,CAAC,mBAAmB,CACjC,YAAY,EACZ,YAAY,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAED,yBAAyB,CACvB,QAAkB,EAClB,YAA8B,EAC9B,iBAAoC;QAEpC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAChD,YAAY,EACZ,QAAQ,CAAC,YAAY,EACrB,iBAAiB,CAClB,CAAC;QAEF,OAAO,QAAQ,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC3D,CAAC;CACF"}
1
+ {"version":3,"file":"gtfs-feed-parser.js","sourceRoot":"","sources":["../../src/parser/gtfs-feed-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhD,OAAO,EACL,sBAAsB,GAEvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,sBAAsB,GAEvB,MAAM,yCAAyC,CAAC;AAIjD,MAAM,OAAO,cAAc;IAON;IANF,eAAe,CAAyB;IACxC,eAAe,CAAyB;IAEzD,YACE,iBAAoC,EACpC,iBAAoC,EACnB,aAA2B,EAC5C,uBAAkE,EAClE,uBAAsE;QAFrD,kBAAa,GAAb,aAAa,CAAc;QAI5C,IAAI,CAAC,eAAe,GAAG,IAAI,sBAAsB,CAC/C,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,CACxB,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,sBAAsB,CAC/C,aAAa,CAAC,QAAQ,EACtB,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,KAAK,CACH,YAAyB,EACzB,YAA8B,EAC9B,iBAAoC,EACpC,iBAAoC;QAEpC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAC7C,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAC7C,YAAY,EACZ,YAAY,EACZ,iBAAiB,CAClB,CAAC;QAEF,OAAO,QAAQ,CAAC,mBAAmB,CACjC,YAAY,EACZ,YAAY,EACZ,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;IAED,yBAAyB,CACvB,QAAkB,EAClB,YAA8B,EAC9B,iBAAoC;QAEpC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAChD,YAAY,EACZ,QAAQ,CAAC,YAAY,EACrB,iBAAiB,CAClB,CAAC;QAEF,OAAO,QAAQ,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAC3D,CAAC;CACF"}