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.
- package/dist/corequeryify/service-conversion-iterator.js +3 -1
- package/dist/corequeryify/service-conversion-iterator.js.map +1 -1
- package/dist/data/gtfs-feed.d.ts +1 -1
- package/dist/data/gtfs-feed.js +2 -2
- package/dist/data/gtfs-feed.js.map +1 -1
- package/dist/data/gtfs-schedule-data.d.ts +9 -1
- package/dist/data/gtfs-schedule-data.js +15 -2
- package/dist/data/gtfs-schedule-data.js.map +1 -1
- package/dist/data/raw/schedule-csvs.d.ts +0 -18
- package/dist/departures/departures-iterator.js +1 -7
- package/dist/departures/departures-iterator.js.map +1 -1
- package/dist/departures/realtime-departures-block-iterator.js +2 -0
- package/dist/departures/realtime-departures-block-iterator.js.map +1 -1
- package/dist/departures/scheduled-departures-iterator.d.ts +8 -2
- package/dist/departures/scheduled-departures-iterator.js +35 -19
- package/dist/departures/scheduled-departures-iterator.js.map +1 -1
- package/dist/departures/zipper-departures-iterator.d.ts +7 -4
- package/dist/departures/zipper-departures-iterator.js +33 -11
- package/dist/departures/zipper-departures-iterator.js.map +1 -1
- package/dist/gtfs-service-source.d.ts +2 -0
- package/dist/gtfs-service-source.js +3 -1
- package/dist/gtfs-service-source.js.map +1 -1
- package/dist/gtfs-system.d.ts +1 -1
- package/dist/parser/gtfs-feed-parser.d.ts +1 -1
- package/dist/parser/gtfs-feed-parser.js +2 -2
- package/dist/parser/gtfs-feed-parser.js.map +1 -1
- package/dist/parser/realtime/gtfs-trip-update-parser.d.ts +12 -12
- package/dist/parser/realtime/gtfs-trip-update-parser.js +12 -24
- package/dist/parser/realtime/gtfs-trip-update-parser.js.map +1 -1
- package/dist/parser/realtime/gtfs-trip-update-trip-identifier.d.ts +4 -4
- package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js +11 -13
- package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js.map +1 -1
- package/dist/parser/schedule/gtfs-calendar-parser.d.ts +4 -4
- package/dist/parser/schedule/gtfs-calendar-parser.js +4 -12
- package/dist/parser/schedule/gtfs-calendar-parser.js.map +1 -1
- package/dist/parser/schedule/gtfs-route-matcher.d.ts +4 -4
- package/dist/parser/schedule/gtfs-route-matcher.js +4 -8
- package/dist/parser/schedule/gtfs-route-matcher.js.map +1 -1
- package/dist/parser/schedule/{gtfs-schedule-parser.d.ts → gtfs-schedule-data-parser.d.ts} +1 -1
- package/dist/parser/schedule/{gtfs-schedule-parser.js → gtfs-schedule-data-parser.js} +4 -5
- package/dist/parser/schedule/gtfs-schedule-data-parser.js.map +1 -0
- package/dist/parser/schedule/gtfs-stop-time-normaliser.d.ts +2 -2
- package/dist/parser/schedule/gtfs-stop-time-normaliser.js +2 -4
- package/dist/parser/schedule/gtfs-stop-time-normaliser.js.map +1 -1
- package/dist/parser/schedule/gtfs-transfer-connector.d.ts +8 -8
- package/dist/parser/schedule/gtfs-transfer-connector.js +8 -16
- package/dist/parser/schedule/gtfs-transfer-connector.js.map +1 -1
- package/dist/parser/schedule/gtfs-trip-parser.d.ts +8 -5
- package/dist/parser/schedule/gtfs-trip-parser.js +10 -10
- package/dist/parser/schedule/gtfs-trip-parser.js.map +1 -1
- package/package.json +1 -1
- package/dist/departures/multifeed-departures-iterator.d.ts +0 -20
- package/dist/departures/multifeed-departures-iterator.js +0 -52
- package/dist/departures/multifeed-departures-iterator.js.map +0 -1
- 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;
|
|
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"}
|
package/dist/data/gtfs-feed.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/data/gtfs-feed.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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;
|
|
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
|
|
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
|
|
15
|
-
_subiteratorsCreated
|
|
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
|
-
|
|
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,
|
|
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
|
-
//
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
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.
|
|
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":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAG5F,OAAO,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAI5F,MAAM,
|
|
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
|
-
|
|
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
|
|
16
|
-
private
|
|
17
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
38
|
+
this._nextIterator = this._determineNextIterator();
|
|
34
39
|
return value;
|
|
35
40
|
}
|
|
36
|
-
|
|
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
|
-
|
|
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
|
-
|
|
59
|
+
_isCloser(a, b) {
|
|
51
60
|
if (this._direction === "forwards") {
|
|
52
|
-
return Temporal.Instant.compare(
|
|
61
|
+
return Temporal.Instant.compare(a, b) < 0;
|
|
53
62
|
}
|
|
54
63
|
else if (this._direction === "backwards") {
|
|
55
|
-
return Temporal.Instant.compare(
|
|
64
|
+
return Temporal.Instant.compare(a, b) > 0;
|
|
56
65
|
}
|
|
57
66
|
else {
|
|
58
67
|
assertNever(this._direction);
|
|
59
68
|
}
|
|
60
69
|
}
|
|
61
|
-
|
|
62
|
-
|
|
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":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"zipper-departures-iterator.js","sourceRoot":"","sources":["../../src/departures/zipper-departures-iterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAKjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IAM3C;IACA;IANX,UAAU,CAA+B;IACzC,aAAa,CAA4B;IACzC,OAAO,CAA0B;IAEzC,YACmB,UAAgC,EAChC,oBAAmC;QAEpD,KAAK,EAAE,CAAC;QAHS,eAAU,GAAV,UAAU,CAAsB;QAChC,yBAAoB,GAApB,oBAAoB,CAAe;QAIpD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEQ,GAAG,CACV,OAAyB,EACzB,SAAuC;QAEvC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE9C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;IACrD,CAAC;IAEQ,IAAI;QACX,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEQ,IAAI;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,IAAI,QAAQ,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEnD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,sBAAsB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,IAAI,IAAI,GAAoC,IAAI,CAAC;QACjD,IAAI,YAAY,GAA8B,IAAI,CAAC;QAEnD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,SAAS,IAAI,IAAI;gBAAE,SAAS;YAEhC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzE,MAAM,WAAW,GAAG,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAE1E,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3B,IAAI,GAAG,SAAS,CAAC;gBACjB,YAAY,GAAG,QAAQ,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,SAAS,CAAC,CAAmB,EAAE,CAAmB;QACxD,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACnC,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;YAC3C,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,OAAyB;QAChD,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAEnD,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACnC,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,MAAc,EACd,uBAAoD,EACpD,YAA8B,EAC9B,YAA0B,EAC1B,mBAAkC;QAElC,MAAM,SAAS,GAAG,2BAA2B,CAAC,QAAQ,CACpD,MAAM,EACN,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,mBAAmB,CACpB,CAAC;QAEF,MAAM,QAAQ,GAAG,+BAA+B,CAAC,QAAQ,CACvD,MAAM,EACN,YAAY,CACb,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxD,OAAO,IAAI,wBAAwB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACtE,CAAC;CACF"}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"gtfs-service-source.js","sourceRoot":"","sources":["../src/gtfs-service-source.ts"],"names":[],"mappings":"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"}
|
package/dist/gtfs-system.d.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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,
|
|
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"}
|