corequery-gtfs 0.1.0 → 0.1.2

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 (185) hide show
  1. package/README.md +1 -1
  2. package/dist/config/gtfs-config.d.ts +10 -0
  3. package/dist/config/gtfs-config.js +2 -0
  4. package/dist/config/gtfs-config.js.map +1 -0
  5. package/dist/config/ids.d.ts +13 -0
  6. package/dist/config/ids.js +2 -0
  7. package/dist/config/ids.js.map +1 -0
  8. package/dist/config/index.d.ts +4 -0
  9. package/dist/config/index.js +5 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/routes.d.ts +16 -0
  12. package/dist/config/routes.js +2 -0
  13. package/dist/config/routes.js.map +1 -0
  14. package/dist/config/timezone-data.d.ts +5 -0
  15. package/dist/config/timezone-data.js +2 -0
  16. package/dist/config/timezone-data.js.map +1 -0
  17. package/dist/corequery-types.d.ts +2 -0
  18. package/dist/corequery-types.js +3 -0
  19. package/dist/corequery-types.js.map +1 -0
  20. package/dist/data/bounded-instant-range.d.ts +10 -0
  21. package/dist/data/bounded-instant-range.js +30 -0
  22. package/dist/data/bounded-instant-range.js.map +1 -0
  23. package/dist/data/gtfs-calendar.d.ts +38 -0
  24. package/dist/data/gtfs-calendar.js +116 -0
  25. package/dist/data/gtfs-calendar.js.map +1 -0
  26. package/dist/data/gtfs-feed.d.ts +16 -0
  27. package/dist/data/gtfs-feed.js +33 -0
  28. package/dist/data/gtfs-feed.js.map +1 -0
  29. package/dist/data/gtfs-realtime-data.d.ts +9 -0
  30. package/dist/data/gtfs-realtime-data.js +20 -0
  31. package/dist/data/gtfs-realtime-data.js.map +1 -0
  32. package/dist/data/gtfs-schedule-data.d.ts +13 -0
  33. package/dist/data/gtfs-schedule-data.js +40 -0
  34. package/dist/data/gtfs-schedule-data.js.map +1 -0
  35. package/dist/data/gtfs-scheduled-trip-movements.d.ts +118 -0
  36. package/dist/data/gtfs-scheduled-trip-movements.js +233 -0
  37. package/dist/data/gtfs-scheduled-trip-movements.js.map +1 -0
  38. package/dist/data/gtfs-scheduled-trip.d.ts +41 -0
  39. package/dist/data/gtfs-scheduled-trip.js +100 -0
  40. package/dist/data/gtfs-scheduled-trip.js.map +1 -0
  41. package/dist/data/gtfs-stop-time.d.ts +38 -0
  42. package/dist/data/gtfs-stop-time.js +105 -0
  43. package/dist/data/gtfs-stop-time.js.map +1 -0
  44. package/dist/data/gtfs-updated-trip-movements.d.ts +124 -0
  45. package/dist/data/gtfs-updated-trip-movements.js +150 -0
  46. package/dist/data/gtfs-updated-trip-movements.js.map +1 -0
  47. package/dist/data/gtfs-updated-trip.d.ts +21 -0
  48. package/dist/data/gtfs-updated-trip.js +55 -0
  49. package/dist/data/gtfs-updated-trip.js.map +1 -0
  50. package/dist/data/ids/index.d.ts +2 -0
  51. package/dist/data/ids/index.js +3 -0
  52. package/dist/data/ids/index.js.map +1 -0
  53. package/dist/data/ids/line-gtfs-id-collection.d.ts +16 -0
  54. package/dist/data/ids/line-gtfs-id-collection.js +47 -0
  55. package/dist/data/ids/line-gtfs-id-collection.js.map +1 -0
  56. package/dist/data/ids/line-gtfs-id-mapping.d.ts +17 -0
  57. package/dist/data/ids/line-gtfs-id-mapping.js +50 -0
  58. package/dist/data/ids/line-gtfs-id-mapping.js.map +1 -0
  59. package/dist/data/ids/line-gtfs-id-metadata.d.ts +17 -0
  60. package/dist/data/ids/line-gtfs-id-metadata.js +2 -0
  61. package/dist/data/ids/line-gtfs-id-metadata.js.map +1 -0
  62. package/dist/data/ids/stop-gtfs-id-collection.d.ts +14 -0
  63. package/dist/data/ids/stop-gtfs-id-collection.js +55 -0
  64. package/dist/data/ids/stop-gtfs-id-collection.js.map +1 -0
  65. package/dist/data/ids/stop-gtfs-id-mapping.d.ts +17 -0
  66. package/dist/data/ids/stop-gtfs-id-mapping.js +50 -0
  67. package/dist/data/ids/stop-gtfs-id-mapping.js.map +1 -0
  68. package/dist/data/ids/stop-gtfs-id-metadata.d.ts +23 -0
  69. package/dist/data/ids/stop-gtfs-id-metadata.js +2 -0
  70. package/dist/data/ids/stop-gtfs-id-metadata.js.map +1 -0
  71. package/dist/data/index.d.ts +3 -0
  72. package/dist/data/index.js +4 -0
  73. package/dist/data/index.js.map +1 -0
  74. package/dist/data/plain-date-range.d.ts +11 -0
  75. package/dist/data/plain-date-range.js +36 -0
  76. package/dist/data/plain-date-range.js.map +1 -0
  77. package/dist/data/raw/realtime-data-json.d.ts +26 -0
  78. package/dist/data/raw/realtime-data-json.js +2 -0
  79. package/dist/data/raw/realtime-data-json.js.map +1 -0
  80. package/dist/data/raw/schedule-csvs.d.ts +69 -0
  81. package/dist/data/raw/schedule-csvs.js +2 -0
  82. package/dist/data/raw/schedule-csvs.js.map +1 -0
  83. package/dist/data/route/bonus-lines-mapping.d.ts +17 -0
  84. package/dist/data/route/bonus-lines-mapping.js +29 -0
  85. package/dist/data/route/bonus-lines-mapping.js.map +1 -0
  86. package/dist/data/route/index.d.ts +1 -0
  87. package/dist/data/route/index.js +2 -0
  88. package/dist/data/route/index.js.map +1 -0
  89. package/dist/data/route/line-routes-mapping.d.ts +8 -0
  90. package/dist/data/route/line-routes-mapping.js +20 -0
  91. package/dist/data/route/line-routes-mapping.js.map +1 -0
  92. package/dist/data/route/route-stop.d.ts +12 -0
  93. package/dist/data/route/route-stop.js +18 -0
  94. package/dist/data/route/route-stop.js.map +1 -0
  95. package/dist/data/route/route.d.ts +19 -0
  96. package/dist/data/route/route.js +43 -0
  97. package/dist/data/route/route.js.map +1 -0
  98. package/dist/data/utils.d.ts +3 -0
  99. package/dist/data/utils.js +2 -0
  100. package/dist/data/utils.js.map +1 -0
  101. package/dist/departures/departures-block-iterator.d.ts +18 -0
  102. package/dist/departures/departures-block-iterator.js +70 -0
  103. package/dist/departures/departures-block-iterator.js.map +1 -0
  104. package/dist/departures/departures-block.d.ts +19 -0
  105. package/dist/departures/departures-block.js +13 -0
  106. package/dist/departures/departures-block.js.map +1 -0
  107. package/dist/departures/departures-iterator.d.ts +16 -0
  108. package/dist/departures/departures-iterator.js +15 -0
  109. package/dist/departures/departures-iterator.js.map +1 -0
  110. package/dist/departures/gtfs-scheduled-movements-index.d.ts +18 -0
  111. package/dist/departures/gtfs-scheduled-movements-index.js +66 -0
  112. package/dist/departures/gtfs-scheduled-movements-index.js.map +1 -0
  113. package/dist/departures/index.d.ts +1 -0
  114. package/dist/departures/index.js +2 -0
  115. package/dist/departures/index.js.map +1 -0
  116. package/dist/departures/multifeed-departures-iterator.d.ts +20 -0
  117. package/dist/departures/multifeed-departures-iterator.js +52 -0
  118. package/dist/departures/multifeed-departures-iterator.js.map +1 -0
  119. package/dist/departures/realtime-departures-block-iterator.d.ts +12 -0
  120. package/dist/departures/realtime-departures-block-iterator.js +38 -0
  121. package/dist/departures/realtime-departures-block-iterator.js.map +1 -0
  122. package/dist/departures/realtime-departures-block.d.ts +16 -0
  123. package/dist/departures/realtime-departures-block.js +43 -0
  124. package/dist/departures/realtime-departures-block.js.map +1 -0
  125. package/dist/departures/scheduled-departures-block-iterator.d.ts +12 -0
  126. package/dist/departures/scheduled-departures-block-iterator.js +55 -0
  127. package/dist/departures/scheduled-departures-block-iterator.js.map +1 -0
  128. package/dist/departures/scheduled-departures-block.d.ts +18 -0
  129. package/dist/departures/scheduled-departures-block.js +54 -0
  130. package/dist/departures/scheduled-departures-block.js.map +1 -0
  131. package/dist/departures/scheduled-departures-blocks-builder.d.ts +20 -0
  132. package/dist/departures/scheduled-departures-blocks-builder.js +222 -0
  133. package/dist/departures/scheduled-departures-blocks-builder.js.map +1 -0
  134. package/dist/departures/scheduled-departures-iterator.d.ts +30 -0
  135. package/dist/departures/scheduled-departures-iterator.js +204 -0
  136. package/dist/departures/scheduled-departures-iterator.js.map +1 -0
  137. package/dist/departures/zipper-departures-iterator.d.ts +18 -0
  138. package/dist/departures/zipper-departures-iterator.js +68 -0
  139. package/dist/departures/zipper-departures-iterator.js.map +1 -0
  140. package/dist/gtfs-system.d.ts +31 -0
  141. package/dist/gtfs-system.js +86 -0
  142. package/dist/gtfs-system.js.map +1 -0
  143. package/dist/index.d.ts +6 -0
  144. package/dist/index.js +7 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/parser/gtfs-feed-parser.d.ts +18 -0
  147. package/dist/parser/gtfs-feed-parser.js +23 -0
  148. package/dist/parser/gtfs-feed-parser.js.map +1 -0
  149. package/dist/parser/index.d.ts +2 -0
  150. package/dist/parser/index.js +3 -0
  151. package/dist/parser/index.js.map +1 -0
  152. package/dist/parser/realtime/gtfs-realtime-data-parser.d.ts +11 -0
  153. package/dist/parser/realtime/gtfs-realtime-data-parser.js +19 -0
  154. package/dist/parser/realtime/gtfs-realtime-data-parser.js.map +1 -0
  155. package/dist/parser/realtime/gtfs-trip-update-parser.d.ts +99 -0
  156. package/dist/parser/realtime/gtfs-trip-update-parser.js +335 -0
  157. package/dist/parser/realtime/gtfs-trip-update-parser.js.map +1 -0
  158. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.d.ts +35 -0
  159. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js +95 -0
  160. package/dist/parser/realtime/gtfs-trip-update-trip-identifier.js.map +1 -0
  161. package/dist/parser/realtime/index.d.ts +3 -0
  162. package/dist/parser/realtime/index.js +2 -0
  163. package/dist/parser/realtime/index.js.map +1 -0
  164. package/dist/parser/schedule/gtfs-calendar-parser.d.ts +28 -0
  165. package/dist/parser/schedule/gtfs-calendar-parser.js +113 -0
  166. package/dist/parser/schedule/gtfs-calendar-parser.js.map +1 -0
  167. package/dist/parser/schedule/gtfs-route-matcher.d.ts +48 -0
  168. package/dist/parser/schedule/gtfs-route-matcher.js +199 -0
  169. package/dist/parser/schedule/gtfs-route-matcher.js.map +1 -0
  170. package/dist/parser/schedule/gtfs-schedule-parser.d.ts +15 -0
  171. package/dist/parser/schedule/gtfs-schedule-parser.js +19 -0
  172. package/dist/parser/schedule/gtfs-schedule-parser.js.map +1 -0
  173. package/dist/parser/schedule/gtfs-stop-time-normaliser.d.ts +47 -0
  174. package/dist/parser/schedule/gtfs-stop-time-normaliser.js +119 -0
  175. package/dist/parser/schedule/gtfs-stop-time-normaliser.js.map +1 -0
  176. package/dist/parser/schedule/gtfs-transfer-connector.d.ts +52 -0
  177. package/dist/parser/schedule/gtfs-transfer-connector.js +168 -0
  178. package/dist/parser/schedule/gtfs-transfer-connector.js.map +1 -0
  179. package/dist/parser/schedule/gtfs-trip-parser.d.ts +45 -0
  180. package/dist/parser/schedule/gtfs-trip-parser.js +169 -0
  181. package/dist/parser/schedule/gtfs-trip-parser.js.map +1 -0
  182. package/dist/parser/schedule/index.d.ts +6 -0
  183. package/dist/parser/schedule/index.js +2 -0
  184. package/dist/parser/schedule/index.js.map +1 -0
  185. package/package.json +3 -3
@@ -0,0 +1,36 @@
1
+ export class PlainDateRange {
2
+ start;
3
+ end;
4
+ static infinite = new PlainDateRange(null, null);
5
+ constructor(start, end) {
6
+ this.start = start;
7
+ this.end = end;
8
+ if (start !== null &&
9
+ end !== null &&
10
+ Temporal.PlainDate.compare(start, end) > 0) {
11
+ throw new Error(`Start date cannot be after end date.`);
12
+ }
13
+ }
14
+ includes(date) {
15
+ return !this.startsAfter(date) && !this.endsBefore(date);
16
+ }
17
+ startsAfter(date) {
18
+ return (this.start != null && Temporal.PlainDate.compare(this.start, date) > 0);
19
+ }
20
+ endsBefore(date) {
21
+ return this.end != null && Temporal.PlainDate.compare(this.end, date) < 0;
22
+ }
23
+ endsAfter(date) {
24
+ return this.end == null || Temporal.PlainDate.compare(this.end, date) > 0;
25
+ }
26
+ static encompassing(a, b) {
27
+ function earliestOf(a, b) {
28
+ return Temporal.PlainDate.compare(a, b) < 0 ? a : b;
29
+ }
30
+ function latestOf(a, b) {
31
+ return Temporal.PlainDate.compare(a, b) > 0 ? a : b;
32
+ }
33
+ return new PlainDateRange(a.start == null || b.start == null ? null : earliestOf(a.start, b.start), a.end == null || b.end == null ? null : latestOf(a.end, b.end));
34
+ }
35
+ }
36
+ //# sourceMappingURL=plain-date-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-date-range.js","sourceRoot":"","sources":["../../src/data/plain-date-range.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAc;IAId;IACA;IAJX,MAAM,CAAU,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE1D,YACW,KAAgC,EAChC,GAA8B;QAD9B,UAAK,GAAL,KAAK,CAA2B;QAChC,QAAG,GAAH,GAAG,CAA2B;QAEvC,IACE,KAAK,KAAK,IAAI;YACd,GAAG,KAAK,IAAI;YACZ,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAC1C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAwB;QAC/B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,WAAW,CAAC,IAAwB;QAClC,OAAO,CACL,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,IAAwB;QACjC,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED,SAAS,CAAC,IAAwB;QAChC,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,CAAiB,EAAE,CAAiB;QACtD,SAAS,UAAU,CAAC,CAAqB,EAAE,CAAqB;YAC9D,OAAO,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,SAAS,QAAQ,CAAC,CAAqB,EAAE,CAAqB;YAC5D,OAAO,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,IAAI,cAAc,CACvB,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EACxE,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAC/D,CAAC;IACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { GtfsStopTime } from "../gtfs-stop-time.js";
2
+ export type TripDescriptorJson = {
3
+ readonly tripId?: string;
4
+ readonly startTime?: GtfsStopTime;
5
+ readonly startDate?: Temporal.PlainDate;
6
+ readonly scheduleRelationship?: string;
7
+ readonly routeId?: string;
8
+ };
9
+ export type UpdatedTimeJson = {
10
+ readonly delay?: number;
11
+ readonly time?: number;
12
+ };
13
+ export type StopTimeUpdateJson = {
14
+ readonly stopSequence?: number;
15
+ readonly arrival?: UpdatedTimeJson;
16
+ readonly departure?: UpdatedTimeJson;
17
+ readonly stopId?: string;
18
+ readonly scheduleRelationship: string;
19
+ };
20
+ export type TripUpdateJson = {
21
+ readonly trip: TripDescriptorJson;
22
+ readonly stopTimeUpdate?: readonly StopTimeUpdateJson[];
23
+ };
24
+ export type RealtimeDataJson = {
25
+ readonly tripUpdates: readonly TripUpdateJson[];
26
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=realtime-data-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-data-json.js","sourceRoot":"","sources":["../../../src/data/raw/realtime-data-json.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
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
+ export type TripsCsvRow = {
18
+ readonly route_id: string;
19
+ readonly service_id: string;
20
+ readonly trip_id: string;
21
+ };
22
+ export type TripsCsv = readonly TripsCsvRow[];
23
+ export type StopTimesCsvRow = {
24
+ readonly trip_id: string;
25
+ readonly arrival_time: GtfsStopTime;
26
+ readonly departure_time: GtfsStopTime;
27
+ readonly stop_id: string;
28
+ readonly stop_sequence: number;
29
+ readonly pickup_type: number;
30
+ readonly drop_off_type: number;
31
+ };
32
+ export type StopTimesCsv = readonly StopTimesCsvRow[];
33
+ export type CalendarCsvRow = {
34
+ readonly service_id: string;
35
+ readonly monday: boolean;
36
+ readonly tuesday: boolean;
37
+ readonly wednesday: boolean;
38
+ readonly thursday: boolean;
39
+ readonly friday: boolean;
40
+ readonly saturday: boolean;
41
+ readonly sunday: boolean;
42
+ readonly start_date: Temporal.PlainDate;
43
+ readonly end_date: Temporal.PlainDate;
44
+ };
45
+ export type CalendarCsv = readonly CalendarCsvRow[];
46
+ export type CalendarDatesCsvRow = {
47
+ readonly service_id: string;
48
+ readonly date: Temporal.PlainDate;
49
+ readonly exception_type: number;
50
+ };
51
+ export type CalendarDatesCsv = readonly CalendarDatesCsvRow[];
52
+ export type TransfersCsvRow = {
53
+ readonly from_stop_id: string;
54
+ readonly to_stop_id: string;
55
+ readonly from_trip_id: string;
56
+ readonly to_trip_id: string;
57
+ readonly transfer_type: number;
58
+ };
59
+ export type TransfersCsv = readonly TransfersCsvRow[];
60
+ export type GtfsFeedCsv = {
61
+ readonly stops: StopsCsv;
62
+ readonly routes: RoutesCsv;
63
+ readonly trips: TripsCsv;
64
+ readonly stopTimes: StopTimesCsv;
65
+ readonly calendar: CalendarCsv;
66
+ readonly calendarDates: CalendarDatesCsv;
67
+ readonly transfers: TransfersCsv;
68
+ };
69
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schedule-csvs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-csvs.js","sourceRoot":"","sources":["../../../src/data/raw/schedule-csvs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import type { BonusLinesMappingConfig, BonusLinesConfig } from "../../config/routes.js";
2
+ export declare class BonusLinesMapping {
3
+ private readonly _map;
4
+ constructor(_map: Map<number, BonusLines>);
5
+ static build(config: BonusLinesMappingConfig): BonusLinesMapping;
6
+ forLine(lineId: number): BonusLines | null;
7
+ }
8
+ export type BonusLinesFields = {
9
+ readonly mode: "add" | "replace";
10
+ readonly lines: readonly number[];
11
+ };
12
+ export declare class BonusLines {
13
+ readonly mode: "add" | "replace";
14
+ readonly lines: readonly number[];
15
+ constructor(fields: BonusLinesFields);
16
+ static build(config: BonusLinesConfig): BonusLines;
17
+ }
@@ -0,0 +1,29 @@
1
+ export class BonusLinesMapping {
2
+ _map;
3
+ constructor(_map) {
4
+ this._map = _map;
5
+ }
6
+ static build(config) {
7
+ return new BonusLinesMapping(new Map(Object.entries(config).map(([lineId, bonusLines]) => [
8
+ Number(lineId),
9
+ BonusLines.build(bonusLines),
10
+ ])));
11
+ }
12
+ // `require` doesn't make sense here. Not all lines are expected to have bonus
13
+ // lines, e.g. the Gippsland line.
14
+ forLine(lineId) {
15
+ return this._map.get(lineId) ?? null;
16
+ }
17
+ }
18
+ export class BonusLines {
19
+ mode;
20
+ lines;
21
+ constructor(fields) {
22
+ this.mode = fields.mode;
23
+ this.lines = fields.lines;
24
+ }
25
+ static build(config) {
26
+ return new BonusLines(config);
27
+ }
28
+ }
29
+ //# sourceMappingURL=bonus-lines-mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bonus-lines-mapping.js","sourceRoot":"","sources":["../../../src/data/route/bonus-lines-mapping.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,IAA6B;QAA7B,SAAI,GAAJ,IAAI,CAAyB;IAAG,CAAC;IAE9D,MAAM,CAAC,KAAK,CAAC,MAA+B;QAC1C,OAAO,IAAI,iBAAiB,CAC1B,IAAI,GAAG,CACL,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC;YACd,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;SAC7B,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,kCAAkC;IAClC,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;CACF;AAOD,MAAM,OAAO,UAAU;IACZ,IAAI,CAAoB;IACxB,KAAK,CAAoB;IAElC,YAAY,MAAwB;QAClC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAwB;QACnC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export * from "./route.js";
@@ -0,0 +1,2 @@
1
+ export * from "./route.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/route/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { LineRoutesMappingConfig } from "../../config/routes.js";
2
+ import { Route } from "./route.js";
3
+ export declare class LineRoutesMapping {
4
+ private readonly _map;
5
+ constructor(_map: Map<number, readonly Route[]>);
6
+ static build(config: LineRoutesMappingConfig): LineRoutesMapping;
7
+ forLine(lineId: number): readonly Route[];
8
+ }
@@ -0,0 +1,20 @@
1
+ import { Route } from "./route.js";
2
+ export class LineRoutesMapping {
3
+ _map;
4
+ constructor(_map) {
5
+ this._map = _map;
6
+ }
7
+ static build(config) {
8
+ return new LineRoutesMapping(new Map(Object.entries(config).map(([lineId, routes]) => [
9
+ Number(lineId),
10
+ routes.map((route) => Route.build(route)),
11
+ ])));
12
+ }
13
+ // `require` doesn't make sense here. If a line has no routes defined, that
14
+ // would be strange, but it's the type of thing we should catch in CI/linting.
15
+ // (And in fact, we DO have a unit test to catch it).
16
+ forLine(lineId) {
17
+ return this._map.get(lineId) ?? [];
18
+ }
19
+ }
20
+ //# sourceMappingURL=line-routes-mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-routes-mapping.js","sourceRoot":"","sources":["../../../src/data/route/line-routes-mapping.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,IAAmC;QAAnC,SAAI,GAAJ,IAAI,CAA+B;IAAG,CAAC;IAEpE,MAAM,CAAC,KAAK,CAAC,MAA+B;QAC1C,OAAO,IAAI,iBAAiB,CAC1B,IAAI,GAAG,CACL,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,8EAA8E;IAC9E,qDAAqD;IACrD,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { RouteStopConfig } from "../../config/routes.js";
2
+ export type RouteStopFields = {
3
+ readonly stopId: number;
4
+ readonly collapseInStoppingPatterns: boolean;
5
+ };
6
+ export declare class RouteStop {
7
+ readonly stopId: number;
8
+ readonly collapseInStoppingPatterns: boolean;
9
+ constructor(fields: RouteStopFields);
10
+ static build(config: RouteStopConfig): RouteStop;
11
+ with(newValues: Partial<RouteStopFields>): RouteStop;
12
+ }
@@ -0,0 +1,18 @@
1
+ export class RouteStop {
2
+ stopId;
3
+ collapseInStoppingPatterns;
4
+ constructor(fields) {
5
+ this.stopId = fields.stopId;
6
+ this.collapseInStoppingPatterns = fields.collapseInStoppingPatterns;
7
+ }
8
+ static build(config) {
9
+ return new RouteStop({
10
+ stopId: config.stopId,
11
+ collapseInStoppingPatterns: config.collapseInStoppingPatterns,
12
+ });
13
+ }
14
+ with(newValues) {
15
+ return new RouteStop({ ...this, ...newValues });
16
+ }
17
+ }
18
+ //# sourceMappingURL=route-stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-stop.js","sourceRoot":"","sources":["../../../src/data/route/route-stop.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,SAAS;IACX,MAAM,CAAS;IACf,0BAA0B,CAAU;IAE7C,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;IACtE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAuB;QAClC,OAAO,IAAI,SAAS,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,0BAA0B,EAAE,MAAM,CAAC,0BAA0B;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAAmC;QACtC,OAAO,IAAI,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { Color } from "../../corequery-types.js";
2
+ import { RouteStop } from "./route-stop.js";
3
+ import type { RouteConfig } from "../../config/routes.js";
4
+ type RouteFields = {
5
+ readonly color: Color | null;
6
+ readonly stops: readonly RouteStop[];
7
+ readonly serviceTags: readonly number[];
8
+ };
9
+ export declare class Route {
10
+ readonly color: Color | null;
11
+ readonly stops: readonly RouteStop[];
12
+ readonly serviceTags: readonly number[];
13
+ constructor(fields: RouteFields);
14
+ static build(config: RouteConfig): Route;
15
+ with(newValues: Partial<RouteFields>): Route;
16
+ matchesStoppingOrder(stopIds: readonly number[]): boolean;
17
+ isShorterThan(other: Route): boolean;
18
+ }
19
+ export {};
@@ -0,0 +1,43 @@
1
+ import { RouteStop } from "./route-stop.js";
2
+ export class Route {
3
+ color;
4
+ stops;
5
+ serviceTags;
6
+ constructor(fields) {
7
+ this.color = fields.color;
8
+ this.stops = fields.stops.map((stop) => new RouteStop(stop));
9
+ this.serviceTags = fields.serviceTags;
10
+ }
11
+ static build(config) {
12
+ return new Route({
13
+ color: config.color,
14
+ stops: config.stops.map((stop) => RouteStop.build(stop)),
15
+ serviceTags: config.serviceTags,
16
+ });
17
+ }
18
+ with(newValues) {
19
+ return new Route({ ...this, ...newValues });
20
+ }
21
+ matchesStoppingOrder(stopIds) {
22
+ const routeStops = this.stops.map((stop) => stop.stopId);
23
+ return isSubsequence(stopIds, routeStops);
24
+ }
25
+ isShorterThan(other) {
26
+ return this.stops.length < other.stops.length;
27
+ }
28
+ }
29
+ function isSubsequence(subseq, seq) {
30
+ if (subseq.length === 0)
31
+ return true;
32
+ let subseqIndex = 0;
33
+ for (const item of seq) {
34
+ if (item === subseq[subseqIndex]) {
35
+ subseqIndex++;
36
+ if (subseqIndex === subseq.length) {
37
+ return true;
38
+ }
39
+ }
40
+ }
41
+ return false;
42
+ }
43
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/data/route/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C,MAAM,OAAO,KAAK;IACP,KAAK,CAAe;IACpB,KAAK,CAAuB;IAC5B,WAAW,CAAoB;IAExC,YAAY,MAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAmB;QAC9B,OAAO,IAAI,KAAK,CAAC;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxD,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAA+B;QAClC,OAAO,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,oBAAoB,CAAC,OAA0B;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,aAAa,CAAC,KAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAChD,CAAC;CACF;AAED,SAAS,aAAa,CACpB,MAAyB,EACzB,GAAsB;IAEtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,WAAW,EAAE,CAAC;YACd,IAAI,WAAW,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { GtfsScheduledTripServicingMovement } from "./gtfs-scheduled-trip-movements.js";
2
+ import type { GtfsUpdatedTripServicingMovement } from "./gtfs-updated-trip-movements.js";
3
+ export type GtfsTripServicingMovement = GtfsScheduledTripServicingMovement | GtfsUpdatedTripServicingMovement;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/data/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { DeparturesIterator, type DeparturesIteratorResult } from "./departures-iterator.js";
2
+ import type { DeparturesBlock } from "./departures-block.js";
3
+ import type { DeparturesSearchDirection } from "../corequery-types.js";
4
+ export declare abstract class DeparturesBlockIterator<BlockType extends DeparturesBlock, EntryType> extends DeparturesIterator {
5
+ readonly block: BlockType;
6
+ private readonly _entries;
7
+ private _index;
8
+ private _direction;
9
+ private _nextValue;
10
+ constructor(block: BlockType, _entries: readonly EntryType[]);
11
+ set(instant: Temporal.Instant, direction: DeparturesSearchDirection): void;
12
+ peek(): DeparturesIteratorResult | null;
13
+ take(): DeparturesIteratorResult;
14
+ protected abstract _convertEntryToResult(entry: EntryType): DeparturesIteratorResult;
15
+ protected abstract _shouldSkipEntry(entry: EntryType): boolean;
16
+ private _setIndexAndSkipUntilValidEntry;
17
+ private static _nextIndexValueFor;
18
+ }
@@ -0,0 +1,70 @@
1
+ import { assertNever, itsOk } from "@dan-schel/js-utils";
2
+ import { DeparturesIterator, } from "./departures-iterator.js";
3
+ export class DeparturesBlockIterator extends DeparturesIterator {
4
+ block;
5
+ _entries;
6
+ _index;
7
+ _direction;
8
+ _nextValue;
9
+ constructor(block, _entries) {
10
+ super();
11
+ this.block = block;
12
+ this._entries = _entries;
13
+ this._index = -1;
14
+ this._direction = "forwards";
15
+ this._nextValue = null;
16
+ }
17
+ set(instant, direction) {
18
+ this._direction = direction;
19
+ if (direction === "forwards") {
20
+ const index = this.block.getIterationIndexOfNextFrom(instant);
21
+ this._setIndexAndSkipUntilValidEntry(index, direction);
22
+ }
23
+ else if (direction === "backwards") {
24
+ const index = this.block.getIterationIndexOfPreviousFrom(instant);
25
+ this._setIndexAndSkipUntilValidEntry(index, direction);
26
+ }
27
+ else {
28
+ assertNever(direction);
29
+ }
30
+ }
31
+ peek() {
32
+ return this._nextValue;
33
+ }
34
+ take() {
35
+ const value = this.peek();
36
+ if (value == null)
37
+ throw new Error("Nothing to take.");
38
+ const index = this._index;
39
+ const direction = this._direction;
40
+ const next = DeparturesBlockIterator._nextIndexValueFor(index, direction);
41
+ this._setIndexAndSkipUntilValidEntry(next, direction);
42
+ return value;
43
+ }
44
+ _setIndexAndSkipUntilValidEntry(newIndex, direction) {
45
+ let index = newIndex;
46
+ while (index >= 0 && index < this._entries.length) {
47
+ // Ok due to while loop condition. Once we've exceed the bounds of the
48
+ // array (in either direction), we'll have stopped.
49
+ const entry = itsOk(this._entries[index]);
50
+ if (!this._shouldSkipEntry(entry))
51
+ break;
52
+ index = DeparturesBlockIterator._nextIndexValueFor(index, direction);
53
+ }
54
+ this._index = index;
55
+ const value = this._entries[index] ?? null;
56
+ this._nextValue = value == null ? null : this._convertEntryToResult(value);
57
+ }
58
+ static _nextIndexValueFor(index, direction) {
59
+ if (direction === "forwards") {
60
+ return index + 1;
61
+ }
62
+ else if (direction === "backwards") {
63
+ return index - 1;
64
+ }
65
+ else {
66
+ assertNever(direction);
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=departures-block-iterator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"departures-block-iterator.js","sourceRoot":"","sources":["../../src/departures/departures-block-iterator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BoundedInstantRange } from "../data/bounded-instant-range.js";
2
+ export declare abstract class DeparturesBlock {
3
+ readonly earliestDepartureInstant: Temporal.Instant;
4
+ readonly latestDepartureInstant: Temporal.Instant;
5
+ constructor(earliestDepartureInstant: Temporal.Instant, latestDepartureInstant: Temporal.Instant);
6
+ get instantRange(): BoundedInstantRange;
7
+ /**
8
+ * Returns the index of the first movement that is at or after the given
9
+ * instant. If all movements come before the given instant, returns the length
10
+ * of the movements array, i.e. the index _after_ all movements.
11
+ */
12
+ abstract getIterationIndexOfNextFrom(instant: Temporal.Instant): number;
13
+ /**
14
+ * Returns the index of the last movement that is at or before the given
15
+ * instant. If all movements come after the given instant, returns -1, i.e.
16
+ * the index _before_ all movements.
17
+ */
18
+ abstract getIterationIndexOfPreviousFrom(instant: Temporal.Instant): number;
19
+ }
@@ -0,0 +1,13 @@
1
+ import { BoundedInstantRange } from "../data/bounded-instant-range.js";
2
+ export class DeparturesBlock {
3
+ earliestDepartureInstant;
4
+ latestDepartureInstant;
5
+ constructor(earliestDepartureInstant, latestDepartureInstant) {
6
+ this.earliestDepartureInstant = earliestDepartureInstant;
7
+ this.latestDepartureInstant = latestDepartureInstant;
8
+ }
9
+ get instantRange() {
10
+ return new BoundedInstantRange(this.earliestDepartureInstant, this.latestDepartureInstant);
11
+ }
12
+ }
13
+ //# sourceMappingURL=departures-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"departures-block.js","sourceRoot":"","sources":["../../src/departures/departures-block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,OAAgB,eAAe;IAExB;IACA;IAFX,YACW,wBAA0C,EAC1C,sBAAwC;QADxC,6BAAwB,GAAxB,wBAAwB,CAAkB;QAC1C,2BAAsB,GAAtB,sBAAsB,CAAkB;IAChD,CAAC;IAEJ,IAAI,YAAY;QACd,OAAO,IAAI,mBAAmB,CAC5B,IAAI,CAAC,wBAAwB,EAC7B,IAAI,CAAC,sBAAsB,CAC5B,CAAC;IACJ,CAAC;CAeF"}
@@ -0,0 +1,16 @@
1
+ import type { DeparturesSearchDirection } from "../corequery-types.js";
2
+ import type { GtfsScheduledTrip } from "../data/gtfs-scheduled-trip.js";
3
+ import type { GtfsUpdatedTrip } from "../data/gtfs-updated-trip.js";
4
+ import type { GtfsTripServicingMovement } from "../data/utils.js";
5
+ export declare class DeparturesIteratorResult {
6
+ readonly trip: GtfsScheduledTrip | GtfsUpdatedTrip;
7
+ readonly serviceDay: Temporal.PlainDate;
8
+ readonly instant: Temporal.Instant;
9
+ readonly movement: GtfsTripServicingMovement;
10
+ constructor(trip: GtfsScheduledTrip | GtfsUpdatedTrip, serviceDay: Temporal.PlainDate, instant: Temporal.Instant, movement: GtfsTripServicingMovement);
11
+ }
12
+ export declare abstract class DeparturesIterator {
13
+ abstract set(instant: Temporal.Instant, direction: DeparturesSearchDirection): void;
14
+ abstract peek(): DeparturesIteratorResult | null;
15
+ abstract take(): DeparturesIteratorResult;
16
+ }
@@ -0,0 +1,15 @@
1
+ export class DeparturesIteratorResult {
2
+ trip;
3
+ serviceDay;
4
+ instant;
5
+ movement;
6
+ constructor(trip, serviceDay, instant, movement) {
7
+ this.trip = trip;
8
+ this.serviceDay = serviceDay;
9
+ this.instant = instant;
10
+ this.movement = movement;
11
+ }
12
+ }
13
+ export class DeparturesIterator {
14
+ }
15
+ //# sourceMappingURL=departures-iterator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"departures-iterator.js","sourceRoot":"","sources":["../../src/departures/departures-iterator.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,wBAAwB;IAExB;IACA;IACA;IACA;IAJX,YACW,IAAyC,EACzC,UAA8B,EAC9B,OAAyB,EACzB,QAAmC;QAHnC,SAAI,GAAJ,IAAI,CAAqC;QACzC,eAAU,GAAV,UAAU,CAAoB;QAC9B,YAAO,GAAP,OAAO,CAAkB;QACzB,aAAQ,GAAR,QAAQ,CAA2B;IAC3C,CAAC;CACL;AAED,MAAM,OAAgB,kBAAkB;CASvC"}
@@ -0,0 +1,18 @@
1
+ import type { GtfsScheduleData } from "../data/gtfs-schedule-data.js";
2
+ import { GtfsStopTime } from "../data/gtfs-stop-time.js";
3
+ import type { GtfsScheduledTrip } from "../data/gtfs-scheduled-trip.js";
4
+ import type { GtfsScheduledTripServicingMovement } from "../data/gtfs-scheduled-trip-movements.js";
5
+ import { PlainDateRange } from "../data/plain-date-range.js";
6
+ export type GtfsScheduledMovementsIndexEntry = {
7
+ readonly trip: GtfsScheduledTrip;
8
+ readonly time: GtfsStopTime;
9
+ readonly movement: GtfsScheduledTripServicingMovement;
10
+ };
11
+ export declare class GtfsScheduledMovementsIndex {
12
+ private readonly _index;
13
+ private readonly _rangeEncompassingAllCalendarsByStop;
14
+ private constructor();
15
+ getMovementsForStop(stopId: number): readonly GtfsScheduledMovementsIndexEntry[];
16
+ getRangeEncompassingAllCalendarsForStop(stopId: number): PlainDateRange | null;
17
+ static build(schedule: GtfsScheduleData): GtfsScheduledMovementsIndex;
18
+ }
@@ -0,0 +1,66 @@
1
+ import { itsOk } from "@dan-schel/js-utils";
2
+ import { GtfsStopTime } from "../data/gtfs-stop-time.js";
3
+ import { PlainDateRange } from "../data/plain-date-range.js";
4
+ export class GtfsScheduledMovementsIndex {
5
+ _index;
6
+ _rangeEncompassingAllCalendarsByStop;
7
+ constructor(_index, _rangeEncompassingAllCalendarsByStop) {
8
+ this._index = _index;
9
+ this._rangeEncompassingAllCalendarsByStop = _rangeEncompassingAllCalendarsByStop;
10
+ }
11
+ getMovementsForStop(stopId) {
12
+ return this._index.get(stopId) ?? [];
13
+ }
14
+ getRangeEncompassingAllCalendarsForStop(stopId) {
15
+ return this._rangeEncompassingAllCalendarsByStop.get(stopId) ?? null;
16
+ }
17
+ static build(schedule) {
18
+ const index = new Map();
19
+ const calendarsByStop = new Map();
20
+ for (const trip of schedule.allTrips()) {
21
+ for (const movement of trip.movements) {
22
+ if (!movement.isServicing)
23
+ continue;
24
+ const entry = {
25
+ trip,
26
+ movement,
27
+ // The departure time, unless it's a terminating movement, in which
28
+ // case it's the arrival time.
29
+ time: movement.timeRelevantToDeparturesAlgorithm,
30
+ };
31
+ if (!index.has(movement.stopId)) {
32
+ index.set(movement.stopId, []);
33
+ }
34
+ const existingEntries = itsOk(index.get(movement.stopId));
35
+ existingEntries.push(entry);
36
+ if (!calendarsByStop.has(movement.stopId)) {
37
+ calendarsByStop.set(movement.stopId, new Set());
38
+ }
39
+ const existingCalendars = itsOk(calendarsByStop.get(movement.stopId));
40
+ existingCalendars.add(trip.calendar.gtfsCalendarId);
41
+ }
42
+ }
43
+ for (const entries of index.values()) {
44
+ entries.sort((a, b) => GtfsStopTime.compare(a.time, b.time));
45
+ }
46
+ const rangeEncompassingAllCalendarsByStop = new Map();
47
+ for (const [stopId, calendarIds] of calendarsByStop.entries()) {
48
+ let range = null;
49
+ for (const calendarId of calendarIds) {
50
+ const calendar = schedule.requireCalendar(calendarId);
51
+ const calendarFullDateRange = calendar.getFullDateRange();
52
+ if (range == null) {
53
+ range = calendarFullDateRange;
54
+ }
55
+ else {
56
+ range = PlainDateRange.encompassing(range, calendarFullDateRange);
57
+ }
58
+ }
59
+ if (range != null) {
60
+ rangeEncompassingAllCalendarsByStop.set(stopId, range);
61
+ }
62
+ }
63
+ return new GtfsScheduledMovementsIndex(index, rangeEncompassingAllCalendarsByStop);
64
+ }
65
+ }
66
+ //# sourceMappingURL=gtfs-scheduled-movements-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gtfs-scheduled-movements-index.js","sourceRoot":"","sources":["../../src/departures/gtfs-scheduled-movements-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAQ7D,MAAM,OAAO,2BAA2B;IAEnB;IAIA;IALnB,YACmB,MAGhB,EACgB,oCAGhB;QAPgB,WAAM,GAAN,MAAM,CAGtB;QACgB,yCAAoC,GAApC,oCAAoC,CAGpD;IACA,CAAC;IAEJ,mBAAmB,CACjB,MAAc;QAEd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,uCAAuC,CACrC,MAAc;QAEd,OAAO,IAAI,CAAC,oCAAoC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAA0B;QACrC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8C,CAAC;QACpE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;QAEvD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,WAAW;oBAAE,SAAS;gBAEpC,MAAM,KAAK,GAAqC;oBAC9C,IAAI;oBACJ,QAAQ;oBAER,mEAAmE;oBACnE,8BAA8B;oBAC9B,IAAI,EAAE,QAAQ,CAAC,iCAAiC;iBACjD,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC;gBACD,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC1D,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE5B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBAClD,CAAC;gBACD,MAAM,iBAAiB,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtE,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,mCAAmC,GAAG,IAAI,GAAG,EAGhD,CAAC;QAEJ,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,KAAK,GAA0B,IAAI,CAAC;YAExC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,qBAAqB,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAE1D,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAClB,KAAK,GAAG,qBAAqB,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YAED,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,mCAAmC,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,2BAA2B,CACpC,KAAK,EACL,mCAAmC,CACpC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export * from "./multifeed-departures-iterator.js";