gtfs 4.14.0 → 4.14.1

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/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import CsvParse from 'csv-parse';
2
2
  import Database from 'better-sqlite3';
3
3
  import { FeatureCollection } from 'geojson';
4
4
 
5
- interface IAgency {
5
+ interface ConfigAgency {
6
6
  exclude?: string[];
7
7
  url?: string;
8
8
  path?: string;
@@ -21,7 +21,7 @@ interface IAgency {
21
21
  };
22
22
  prefix?: string;
23
23
  }
24
- interface IConfig {
24
+ interface Config {
25
25
  db?: Database.Database;
26
26
  sqlitePath?: string;
27
27
  ignoreDuplicates?: boolean;
@@ -30,7 +30,7 @@ interface IConfig {
30
30
  csvOptions?: CsvParse.Options;
31
31
  exportPath?: string;
32
32
  ignoreErrors?: boolean;
33
- agencies: IAgency[];
33
+ agencies: ConfigAgency[];
34
34
  verbose?: boolean;
35
35
  logFunction?: (message: string) => void;
36
36
  }
@@ -48,11 +48,282 @@ interface QueryOptions {
48
48
  bounding_box_side_m?: number;
49
49
  }
50
50
  type SqlResults = Array<Record<string, any>>;
51
+ interface Agency {
52
+ agency_id?: string;
53
+ agency_name: string;
54
+ agency_url: string;
55
+ agency_timezone: string;
56
+ agency_lang?: string;
57
+ agency_phone?: string;
58
+ agency_fare_url?: string;
59
+ agency_email?: string;
60
+ }
61
+ interface Area {
62
+ area_id: string;
63
+ area_name?: string;
64
+ }
65
+ interface Attribution {
66
+ attribution_id?: string;
67
+ agency_id?: string;
68
+ route_id?: string;
69
+ trip_id?: string;
70
+ organization_name: string;
71
+ is_producer?: 0 | 1;
72
+ is_operator?: 0 | 1;
73
+ is_authority?: 0 | 1;
74
+ attribution_url?: string;
75
+ attribution_email?: string;
76
+ attribution_phone?: string;
77
+ }
78
+ interface BookingRule {
79
+ booking_rule_id: string;
80
+ booking_type: 0 | 1 | 2;
81
+ prior_notice_duration_min?: number;
82
+ prior_notice_duration_max?: number;
83
+ prior_notice_last_day?: number;
84
+ prior_notice_last_time?: string;
85
+ prior_notice_last_timestamp?: number;
86
+ prior_notice_start_day?: number;
87
+ prior_notice_start_time?: string;
88
+ prior_notice_start_timestamp?: number;
89
+ prior_notice_service_id?: string;
90
+ message?: string;
91
+ pickup_message?: string;
92
+ drop_off_message?: string;
93
+ phone_number?: string;
94
+ info_url?: string;
95
+ booking_url?: string;
96
+ }
97
+ interface Calendar {
98
+ service_id: string;
99
+ monday: 0 | 1;
100
+ tuesday: 0 | 1;
101
+ wednesday: 0 | 1;
102
+ thursday: 0 | 1;
103
+ friday: 0 | 1;
104
+ saturday: 0 | 1;
105
+ sunday: 0 | 1;
106
+ start_date: number;
107
+ end_date: number;
108
+ }
109
+ interface CalendarDate {
110
+ service_id: string;
111
+ date: number;
112
+ exception_type: 1 | 2;
113
+ holiday_name?: string;
114
+ }
115
+ interface FareAttribute {
116
+ fare_id: string;
117
+ price: number;
118
+ currency_type: string;
119
+ payment_method: 0 | 1;
120
+ transfers: 0 | 1 | 2;
121
+ agency_id?: string;
122
+ transfer_duration?: number;
123
+ }
124
+ interface FareLegRule {
125
+ leg_group_id?: string;
126
+ network_id?: string;
127
+ from_area_id?: string;
128
+ to_area_id?: string;
129
+ from_timeframe_group_id?: string;
130
+ to_timeframe_group_id?: string;
131
+ fare_product_id: string;
132
+ rule_priority?: number;
133
+ }
134
+ interface FareMedia {
135
+ fare_media_id: string;
136
+ fare_media_name?: string;
137
+ fare_media_type: 0 | 1 | 2 | 3 | 4;
138
+ }
139
+ interface FareProduct {
140
+ fare_product_id: string;
141
+ fare_product_name?: string;
142
+ fare_media_id?: string;
143
+ amount: number;
144
+ currency: string;
145
+ }
146
+ interface FareRule {
147
+ fare_id: string;
148
+ route_id?: string;
149
+ origin_id?: string;
150
+ destination_id?: string;
151
+ contains_id?: string;
152
+ }
153
+ interface FareTransferRule {
154
+ from_leg_group_id?: string;
155
+ to_leg_group_id?: string;
156
+ transfer_count?: number;
157
+ duration_limit: number;
158
+ duration_limit_type?: 0 | 1 | 2 | 3;
159
+ fare_transfer_type: 0 | 1 | 2;
160
+ fare_product_id?: string;
161
+ }
162
+ interface FeedInfo {
163
+ feed_publisher_name: string;
164
+ feed_publisher_url: string;
165
+ feed_lang: string;
166
+ default_lang?: string;
167
+ feed_start_date?: number;
168
+ feed_end_date?: number;
169
+ feed_version?: string;
170
+ feed_contact_email?: string;
171
+ feed_contact_url?: string;
172
+ }
173
+ interface Frequency {
174
+ trip_id: string;
175
+ start_time: string;
176
+ start_timestamp: number;
177
+ end_time: string;
178
+ end_timestamp: number;
179
+ headway_secs: number;
180
+ exact_times?: 0 | 1;
181
+ }
182
+ interface Level {
183
+ level_id: string;
184
+ level_index: number;
185
+ level_name?: string;
186
+ }
187
+ interface LocationGroupStop {
188
+ location_group_id: string;
189
+ stop_id: string;
190
+ }
191
+ interface LocationGroup {
192
+ location_group_id: string;
193
+ location_group_name?: string;
194
+ }
195
+ interface Location {
196
+ geojson: string;
197
+ }
198
+ interface Network {
199
+ network_id: string;
200
+ network_name?: string;
201
+ }
202
+ interface Pathway {
203
+ pathway_id: string;
204
+ from_stop_id: string;
205
+ to_stop_id: string;
206
+ pathway_mode: 1 | 2 | 3 | 4 | 5 | 6 | 7;
207
+ is_bidirectional: 0 | 1;
208
+ length?: number;
209
+ traversal_time?: number;
210
+ stair_count?: number;
211
+ max_slope?: number;
212
+ min_width?: number;
213
+ signposted_as?: string;
214
+ reversed_signposted_as?: string;
215
+ }
216
+ interface RouteNetwork {
217
+ network_id: string;
218
+ route_id: string;
219
+ }
220
+ interface Route {
221
+ route_id: string;
222
+ agency_id?: string;
223
+ route_short_name?: string;
224
+ route_long_name?: string;
225
+ route_desc?: string;
226
+ route_type: number;
227
+ route_url?: string;
228
+ route_color?: string;
229
+ route_text_color?: string;
230
+ route_sort_order?: number;
231
+ continuous_pickup?: 0 | 1 | 2 | 3;
232
+ continuous_drop_off?: 0 | 1 | 2 | 3;
233
+ network_id?: string;
234
+ }
235
+ interface Shape {
236
+ shape_id: string;
237
+ shape_pt_lat: number;
238
+ shape_pt_lon: number;
239
+ shape_pt_sequence: number;
240
+ shape_dist_traveled?: number;
241
+ }
242
+ interface StopArea {
243
+ area_id: string;
244
+ stop_id: string;
245
+ }
246
+ interface StopTime {
247
+ trip_id: string;
248
+ arrival_time?: string;
249
+ arrival_timestamp?: number;
250
+ departure_time?: string;
251
+ departure_timestamp?: number;
252
+ location_group_id?: string;
253
+ location_id?: string;
254
+ stop_id?: string;
255
+ stop_sequence: number;
256
+ stop_headsign?: string;
257
+ start_pickup_drop_off_window?: string;
258
+ start_pickup_drop_off_window_timestamp?: number;
259
+ pickup_type?: 0 | 1 | 2 | 3;
260
+ drop_off_type?: 0 | 1 | 2 | 3;
261
+ continuous_pickup?: 0 | 1 | 2 | 3;
262
+ continuous_drop_off?: 0 | 1 | 2 | 3;
263
+ shape_dist_traveled?: number;
264
+ timepoint?: 0 | 1;
265
+ pickup_booking_rule_id?: string;
266
+ drop_off_booking_rule_id?: string;
267
+ }
268
+ interface Stop {
269
+ stop_id: string;
270
+ stop_code?: string;
271
+ stop_name?: string;
272
+ tts_stop_name?: string;
273
+ stop_desc?: string;
274
+ stop_lat?: number;
275
+ stop_lon?: number;
276
+ zone_id?: string;
277
+ stop_url?: string;
278
+ location_type?: 0 | 1 | 2 | 3 | 4;
279
+ parent_station?: string;
280
+ stop_timezone?: string;
281
+ wheelchair_boarding?: 0 | 1 | 2;
282
+ level_id?: string;
283
+ platform_code?: string;
284
+ }
285
+ interface Timeframe {
286
+ timeframe_group_id: string;
287
+ start_time?: string;
288
+ end_time?: string;
289
+ service_id: string;
290
+ }
291
+ interface Transfer {
292
+ from_stop_id?: string;
293
+ to_stop_id?: string;
294
+ from_route_id?: string;
295
+ to_route_id?: string;
296
+ from_trip_id?: string;
297
+ to_trip_id?: string;
298
+ transfer_type: 0 | 1 | 2 | 3 | 4 | 5;
299
+ min_transfer_time?: number;
300
+ }
301
+ interface Translation {
302
+ table_name: string;
303
+ field_name: string;
304
+ language: string;
305
+ translation: string;
306
+ record_id?: string;
307
+ record_sub_id?: string;
308
+ field_value?: string;
309
+ }
310
+ interface Trip {
311
+ route_id: string;
312
+ service_id: string;
313
+ trip_id: string;
314
+ trip_headsign?: string;
315
+ trip_short_name?: string;
316
+ direction_id?: 0 | 1;
317
+ block_id?: string;
318
+ shape_id?: string;
319
+ wheelchair_accessible?: 0 | 1 | 2;
320
+ bikes_allowed?: 0 | 1 | 2;
321
+ }
51
322
 
52
- declare function importGtfs(initialConfig: IConfig): Promise<void>;
53
- declare function updateGtfsRealtime(initialConfig: IConfig): Promise<void>;
323
+ declare function importGtfs(initialConfig: Config): Promise<void>;
324
+ declare function updateGtfsRealtime(initialConfig: Config): Promise<void>;
54
325
 
55
- declare const exportGtfs: (initialConfig: IConfig) => Promise<void>;
326
+ declare const exportGtfs: (initialConfig: Config) => Promise<void>;
56
327
 
57
328
  declare function openDb(config?: {
58
329
  db?: Database.Database;
@@ -70,67 +341,67 @@ declare function advancedQuery(table: string, advancedQueryOptions: {
70
341
  options?: QueryOptions;
71
342
  }): Array<Record<string, any>>;
72
343
 
73
- declare function getAgencies(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
344
+ declare function getAgencies(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Agency[];
74
345
 
75
- declare function getAreas(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
346
+ declare function getAreas(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Area[];
76
347
 
77
- declare function getAttributions(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
348
+ declare function getAttributions(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Attribution[];
78
349
 
79
- declare function getBookingRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
350
+ declare function getBookingRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): BookingRule[];
80
351
 
81
- declare function getCalendarDates(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
352
+ declare function getCalendarDates(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): CalendarDate[];
82
353
 
83
- declare function getCalendars(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
354
+ declare function getCalendars(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Calendar[];
84
355
 
85
- declare function getFareAttributes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
356
+ declare function getFareAttributes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): FareAttribute[];
86
357
 
87
- declare function getFareLegRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
358
+ declare function getFareLegRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): FareLegRule[];
88
359
 
89
- declare function getFareMedia(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
360
+ declare function getFareMedia(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): FareMedia[];
90
361
 
91
- declare function getFareProducts(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
362
+ declare function getFareProducts(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): FareProduct[];
92
363
 
93
- declare function getFareRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
364
+ declare function getFareRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): FareRule[];
94
365
 
95
- declare function getFareTransferRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
366
+ declare function getFareTransferRules(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): FareTransferRule[];
96
367
 
97
- declare function getFeedInfo(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
368
+ declare function getFeedInfo(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): FeedInfo[];
98
369
 
99
- declare function getFrequencies(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
370
+ declare function getFrequencies(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Frequency[];
100
371
 
101
- declare function getLevels(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
372
+ declare function getLevels(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Level[];
102
373
 
103
- declare function getLocationGroups(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
374
+ declare function getLocationGroups(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): LocationGroup[];
104
375
 
105
- declare function getLocationGroupStops(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
376
+ declare function getLocationGroupStops(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): LocationGroupStop[];
106
377
 
107
- declare function getLocations(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
378
+ declare function getLocations(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Location[];
108
379
 
109
- declare function getNetworks(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
380
+ declare function getNetworks(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Network[];
110
381
 
111
- declare function getPathways(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
382
+ declare function getPathways(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Pathway[];
112
383
 
113
- declare function getRouteNetworks(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
384
+ declare function getRouteNetworks(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): RouteNetwork[];
114
385
 
115
- declare function getRoutes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
386
+ declare function getRoutes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Route[];
116
387
 
117
- declare function getShapes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
388
+ declare function getShapes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Shape[];
118
389
  declare function getShapesAsGeoJSON(query?: SqlWhere, options?: QueryOptions): FeatureCollection;
119
390
 
120
- declare function getStopAreas(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
391
+ declare function getStopAreas(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): StopArea[];
121
392
 
122
- declare function getStops(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
393
+ declare function getStops(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Stop[];
123
394
  declare function getStopsAsGeoJSON(query?: SqlWhere, options?: QueryOptions): FeatureCollection;
124
395
 
125
- declare function getStoptimes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
396
+ declare function getStoptimes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): StopTime[];
126
397
 
127
- declare function getTimeframes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
398
+ declare function getTimeframes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Timeframe[];
128
399
 
129
- declare function getTransfers(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
400
+ declare function getTransfers(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Transfer[];
130
401
 
131
- declare function getTranslations(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
402
+ declare function getTranslations(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Translation[];
132
403
 
133
- declare function getTrips(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
404
+ declare function getTrips(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): Trip[];
134
405
 
135
406
  declare function getCalendarAttributes(query?: SqlWhere, fields?: SqlSelect, orderBy?: SqlOrderBy, options?: QueryOptions): SqlResults;
136
407
 
package/dist/index.js CHANGED
@@ -634,11 +634,6 @@ var fareTransferRules = {
634
634
  min: -1,
635
635
  primary: true
636
636
  },
637
- {
638
- name: "transfer_id",
639
- type: "text",
640
- prefix: true
641
- },
642
637
  {
643
638
  name: "duration_limit",
644
639
  type: "integer",
@@ -3192,6 +3187,7 @@ function generateFolderName(folderName) {
3192
3187
  // src/lib/geojson-utils.ts
3193
3188
  import {
3194
3189
  cloneDeep,
3190
+ compact,
3195
3191
  filter,
3196
3192
  groupBy,
3197
3193
  last,
@@ -3220,14 +3216,14 @@ function isValidLineString(lineString) {
3220
3216
  }
3221
3217
  return true;
3222
3218
  }
3223
- function consolidateShapes(shapes2) {
3219
+ function consolidateShapes(shapeGroups) {
3224
3220
  const keys = /* @__PURE__ */ new Set();
3225
- const segmentsArray = shapes2.map(
3226
- (shape) => shape.reduce(
3221
+ const segmentsArray = shapeGroups.map(
3222
+ (shapes2) => shapes2.reduce(
3227
3223
  (memo, point, idx) => {
3228
3224
  if (idx > 0) {
3229
3225
  memo.push([
3230
- [shape[idx - 1].shape_pt_lon, shape[idx - 1].shape_pt_lat],
3226
+ [shapes2[idx - 1].shape_pt_lon, shapes2[idx - 1].shape_pt_lat],
3231
3227
  [point.shape_pt_lon, point.shape_pt_lat]
3232
3228
  ]);
3233
3229
  }
@@ -3296,15 +3292,18 @@ function shapesToGeoJSONFeature(shapes2, properties = {}) {
3296
3292
  );
3297
3293
  }
3298
3294
  function stopsToGeoJSONFeatureCollection(stops2) {
3299
- const features = stops2.map(
3300
- (stop) => feature(
3295
+ const features = compact(stops2.map((stop) => {
3296
+ if (!stop.stop_lon || !stop.stop_lat) {
3297
+ return;
3298
+ }
3299
+ return feature(
3301
3300
  {
3302
3301
  type: "Point",
3303
3302
  coordinates: [stop.stop_lon, stop.stop_lat]
3304
3303
  },
3305
3304
  formatProperties(omit2(stop, ["stop_lat", "stop_lon"]))
3306
- )
3307
- );
3305
+ );
3306
+ }));
3308
3307
  return featureCollection(features);
3309
3308
  }
3310
3309
 
@@ -4107,7 +4106,7 @@ async function updateGtfsRealtime(initialConfig) {
4107
4106
  // src/lib/export.ts
4108
4107
  import path2 from "node:path";
4109
4108
  import { writeFile as writeFile2 } from "node:fs/promises";
4110
- import { without, compact } from "lodash-es";
4109
+ import { without, compact as compact2 } from "lodash-es";
4111
4110
  import pluralize2 from "pluralize";
4112
4111
  import { stringify } from "csv-stringify";
4113
4112
  import sqlString3 from "sqlstring-sqlite";
@@ -4214,7 +4213,7 @@ var exportGtfs = async (initialConfig) => {
4214
4213
  return `${model.filenameBase}.${model.filenameExtension}`;
4215
4214
  }
4216
4215
  );
4217
- if (compact(exportedFiles).length === 0) {
4216
+ if (compact2(exportedFiles).length === 0) {
4218
4217
  log2("No GTFS data exported. Be sure to first import data into SQLite.");
4219
4218
  return;
4220
4219
  }
@@ -4544,7 +4543,7 @@ function getRoutes(query = {}, fields = [], orderBy2 = [], options = {}) {
4544
4543
  }
4545
4544
 
4546
4545
  // src/lib/gtfs/shapes.ts
4547
- import { compact as compact2, omit as omit4, pick as pick2 } from "lodash-es";
4546
+ import { compact as compact3, omit as omit4, pick as pick2 } from "lodash-es";
4548
4547
  import { featureCollection as featureCollection2 } from "@turf/helpers";
4549
4548
 
4550
4549
  // src/lib/gtfs-plus/route-attributes.ts
@@ -4594,7 +4593,7 @@ function getShapesAsGeoJSON(query = {}, options = {}) {
4594
4593
  const agencies = getAgencies2({}, [], [], options);
4595
4594
  const routeQuery = pick2(query, ["route_id"]);
4596
4595
  const routes2 = getRoutes(routeQuery, [], [], options);
4597
- const features = compact2(
4596
+ const features = compact3(
4598
4597
  routes2.map((route) => {
4599
4598
  const shapeQuery = {
4600
4599
  route_id: route.route_id,
@@ -4721,14 +4720,14 @@ function getStopsAsGeoJSON(query = {}, options = {}) {
4721
4720
  const routeSubquery = "SELECT DISTINCT route_id FROM trips WHERE trip_id IN (SELECT DISTINCT trip_id FROM stop_times WHERE stop_id = ?)";
4722
4721
  const routes2 = db.prepare(`SELECT * FROM routes WHERE route_id IN (${routeSubquery})`).all(stop.stop_id);
4723
4722
  const stopAttributes2 = getStopAttributes({ stop_id: stop.stop_id });
4724
- stop.routes = orderBy(
4725
- routes2,
4726
- (route) => route?.route_short_name ? Number.parseInt(route.route_short_name, 10) : 0
4727
- );
4728
- stop.agency_name = agencies[0].agency_name;
4729
4723
  return {
4730
4724
  ...stop,
4731
- ...stopAttributes2?.[0] || []
4725
+ ...stopAttributes2?.[0] || [],
4726
+ routes: orderBy(
4727
+ routes2,
4728
+ (route) => route?.route_short_name ? Number.parseInt(route.route_short_name, 10) : 0
4729
+ ),
4730
+ agency_name: agencies[0].agency_name
4732
4731
  };
4733
4732
  });
4734
4733
  const filteredStops = preparedStops.filter((stop) => stop.routes.length > 0);