gtfs 4.18.7 → 4.19.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.
@@ -1,4387 +1,30 @@
1
1
  #!/usr/bin/env node
2
- var __defProp = Object.defineProperty;
3
- var __export = (target, all) => {
4
- for (var name in all)
5
- __defProp(target, name, { get: all[name], enumerable: true });
6
- };
7
-
8
- // src/bin/gtfs-export.ts
2
+ import { Tt as formatError, st as exportGtfs, xt as getConfig } from "../src-DuXcyA_N.js";
9
3
  import yargs from "yargs";
10
4
  import { hideBin } from "yargs/helpers";
11
5
  import PrettyError from "pretty-error";
12
6
 
13
- // src/lib/file-utils.ts
14
- import path from "path";
15
- import { existsSync } from "fs";
16
- import { homedir } from "os";
17
- import { mkdir, readFile, rm } from "fs/promises";
18
- import { omit, snakeCase } from "lodash-es";
19
- import sanitize from "sanitize-filename";
20
- import StreamZip from "node-stream-zip";
21
-
22
- // src/lib/log-utils.ts
23
- import { clearLine, cursorTo } from "readline";
24
- import { noop } from "lodash-es";
25
- import * as colors from "yoctocolors";
26
- function log(config) {
27
- if (config.verbose === false) {
28
- return noop;
29
- }
30
- if (config.logFunction) {
31
- return config.logFunction;
32
- }
33
- return (text, overwrite = false) => {
34
- if (overwrite && process.stdout.isTTY) {
35
- clearLine(process.stdout, 0);
36
- cursorTo(process.stdout, 0);
37
- } else {
38
- process.stdout.write("\n");
39
- }
40
- process.stdout.write(text);
41
- };
42
- }
43
- function logWarning(config) {
44
- if (config.logFunction) {
45
- return config.logFunction;
46
- }
47
- return (text) => {
48
- process.stdout.write(`
49
- ${formatWarning(text)}
50
- `);
51
- };
52
- }
53
- function formatWarning(text) {
54
- return colors.yellow(`${colors.underline("Warning")}: ${text}`);
55
- }
56
- function formatError(error) {
57
- const messageText = error instanceof Error ? error.message : error;
58
- const cleanMessage = messageText.replace(/^Error:\s*/i, "");
59
- return colors.red(`${colors.underline("Error")}: ${cleanMessage}`);
60
- }
61
-
62
- // src/lib/file-utils.ts
63
- var homeDirectory = homedir();
64
- async function getConfig(argv2) {
65
- let config;
66
- let data;
67
- try {
68
- if (argv2.configPath) {
69
- const configPath = path.resolve(untildify(argv2.configPath));
70
- data = await readFile(configPath, "utf8");
71
- config = Object.assign(JSON.parse(data), argv2);
72
- } else if (argv2.gtfsPath || argv2.gtfsUrl || argv2.sqlitePath) {
73
- const agencies = [
74
- ...argv2.gtfsPath ? [{ path: argv2.gtfsPath }] : [],
75
- ...argv2.gtfsUrl ? [{ url: argv2.gtfsUrl }] : []
76
- ];
77
- config = {
78
- agencies,
79
- ...omit(argv2, ["path", "url"])
80
- };
81
- } else if (existsSync(path.resolve("./config.json"))) {
82
- data = await readFile(path.resolve("./config.json"), "utf8");
83
- config = Object.assign(JSON.parse(data), argv2);
84
- log(config)("Using configuration from ./config.json");
85
- } else {
86
- throw new Error(
87
- "Cannot find configuration file. Use config-sample.json as a starting point, pass --configPath option."
88
- );
89
- }
90
- return config;
91
- } catch (error) {
92
- if (error instanceof SyntaxError) {
93
- throw new Error(
94
- `Cannot parse configuration file. Check to ensure that it is valid JSON. Error: ${error.message}`,
95
- { cause: error }
96
- );
97
- }
98
- throw error;
99
- }
100
- }
101
- async function prepDirectory(exportPath) {
102
- await rm(exportPath, { recursive: true, force: true });
103
- await mkdir(exportPath, { recursive: true });
104
- }
105
- function generateFolderName(folderName) {
106
- if (!folderName || typeof folderName !== "string") {
107
- throw new Error("Folder name must be a non-empty string");
108
- }
109
- return snakeCase(sanitize(folderName));
110
- }
111
- function untildify(pathWithTilde) {
112
- return homeDirectory ? pathWithTilde.replace(/^~(?=$|\/|\\)/, homeDirectory) : pathWithTilde;
113
- }
114
-
115
- // src/lib/import-gtfs.ts
116
- import path2 from "path";
117
- import { createReadStream, existsSync as existsSync2, lstatSync } from "fs";
118
- import { cp, readdir, rename, readFile as readFile2, rm as rm2, writeFile } from "fs/promises";
119
- import { parse } from "csv-parse";
120
- import stripBomStream from "strip-bom-stream";
121
- import { temporaryDirectory } from "tempy";
122
- import mapSeries2 from "promise-map-series";
123
-
124
- // src/models/models.ts
125
- var models_exports = {};
126
- __export(models_exports, {
127
- agency: () => agency,
128
- areas: () => areas,
129
- attributions: () => attributions,
130
- boardAlight: () => boardAlight,
131
- bookingRules: () => bookingRules,
132
- calendar: () => calendar,
133
- calendarAttributes: () => calendarAttributes,
134
- calendarDates: () => calendarDates,
135
- deadheadTimes: () => deadheadTimes,
136
- deadheads: () => deadheads,
137
- devices: () => devices,
138
- directions: () => directions,
139
- fareAttributes: () => fareAttributes,
140
- fareLegRules: () => fareLegRules,
141
- fareMedia: () => fareMedia,
142
- fareProducts: () => fareProducts,
143
- fareRules: () => fareRules,
144
- fareTransactions: () => fareTransactions,
145
- fareTransferRules: () => fareTransferRules,
146
- feedInfo: () => feedInfo,
147
- frequencies: () => frequencies,
148
- levels: () => levels,
149
- locationGroupStops: () => locationGroupStops,
150
- locationGroups: () => locationGroups,
151
- locations: () => locations,
152
- networks: () => networks,
153
- operators: () => operators,
154
- opsLocations: () => opsLocations,
155
- passengerEvents: () => passengerEvents,
156
- pathways: () => pathways,
157
- rideFeedInfo: () => rideFeedInfo,
158
- riderCategories: () => riderCategories,
159
- riderTrip: () => riderTrip,
160
- ridership: () => ridership,
161
- routeAttributes: () => routeAttributes,
162
- routeNetworks: () => routeNetworks,
163
- routes: () => routes,
164
- runEvents: () => runEvents,
165
- runsPieces: () => runsPieces,
166
- serviceAlertInformedEntities: () => serviceAlertInformedEntities,
167
- serviceAlerts: () => serviceAlerts,
168
- shapes: () => shapes,
169
- stationActivities: () => stationActivities,
170
- stopAreas: () => stopAreas,
171
- stopAttributes: () => stopAttributes,
172
- stopTimeUpdates: () => stopTimeUpdates,
173
- stopTimes: () => stopTimes,
174
- stopVisits: () => stopVisits,
175
- stops: () => stops,
176
- timeframes: () => timeframes,
177
- timetableNotes: () => timetableNotes,
178
- timetableNotesReferences: () => timetableNotesReferences,
179
- timetablePages: () => timetablePages,
180
- timetableStopOrder: () => timetableStopOrder,
181
- timetables: () => timetables,
182
- trainCars: () => trainCars,
183
- transfers: () => transfers,
184
- translations: () => translations,
185
- tripCapacity: () => tripCapacity,
186
- tripUpdates: () => tripUpdates,
187
- trips: () => trips,
188
- tripsDatedVehicleJourney: () => tripsDatedVehicleJourney,
189
- tripsPerformed: () => tripsPerformed,
190
- vehicleLocations: () => vehicleLocations,
191
- vehiclePositions: () => vehiclePositions,
192
- vehicleTrainCars: () => vehicleTrainCars,
193
- vehicles: () => vehicles
194
- });
195
-
196
- // src/models/gtfs/agency.ts
197
- var agency = {
198
- filenameBase: "agency",
199
- filenameExtension: "txt",
200
- schema: [
201
- {
202
- name: "agency_id",
203
- type: "text",
204
- primary: true,
205
- prefix: true
206
- },
207
- {
208
- name: "agency_name",
209
- type: "text",
210
- required: true,
211
- nocase: true
212
- },
213
- {
214
- name: "agency_url",
215
- type: "text",
216
- required: true
217
- },
218
- {
219
- name: "agency_timezone",
220
- type: "text",
221
- required: true
222
- },
223
- {
224
- name: "agency_lang",
225
- type: "text",
226
- nocase: true
227
- },
228
- {
229
- name: "agency_phone",
230
- type: "text",
231
- nocase: true
232
- },
233
- {
234
- name: "agency_fare_url",
235
- type: "text"
236
- },
237
- {
238
- name: "agency_email",
239
- type: "text",
240
- nocase: true
241
- },
242
- {
243
- name: "cemv_support",
244
- type: "integer",
245
- min: 0,
246
- max: 2
247
- }
248
- ]
249
- };
250
-
251
- // src/models/gtfs/areas.ts
252
- var areas = {
253
- filenameBase: "areas",
254
- filenameExtension: "txt",
255
- schema: [
256
- {
257
- name: "area_id",
258
- type: "text",
259
- required: true,
260
- primary: true,
261
- prefix: true
262
- },
263
- {
264
- name: "area_name",
265
- type: "text"
266
- }
267
- ]
268
- };
269
-
270
- // src/models/gtfs/attributions.ts
271
- var attributions = {
272
- filenameBase: "attributions",
273
- filenameExtension: "txt",
274
- schema: [
275
- {
276
- name: "attribution_id",
277
- type: "text",
278
- prefix: true,
279
- primary: true
280
- },
281
- {
282
- name: "agency_id",
283
- type: "text",
284
- prefix: true
285
- },
286
- {
287
- name: "route_id",
288
- type: "text",
289
- prefix: true
290
- },
291
- {
292
- name: "trip_id",
293
- type: "text",
294
- prefix: true
295
- },
296
- {
297
- name: "organization_name",
298
- type: "text",
299
- required: true,
300
- nocase: true
301
- },
302
- {
303
- name: "is_producer",
304
- type: "integer",
305
- min: 0,
306
- max: 1
307
- },
308
- {
309
- name: "is_operator",
310
- type: "integer",
311
- min: 0,
312
- max: 1
313
- },
314
- {
315
- name: "is_authority",
316
- type: "integer",
317
- min: 0,
318
- max: 1
319
- },
320
- {
321
- name: "attribution_url",
322
- type: "text"
323
- },
324
- {
325
- name: "attribution_email",
326
- type: "text",
327
- nocase: true
328
- },
329
- {
330
- name: "attribution_phone",
331
- type: "text",
332
- nocase: true
333
- }
334
- ]
335
- };
336
-
337
- // src/models/gtfs/booking-rules.ts
338
- var bookingRules = {
339
- filenameBase: "booking_rules",
340
- filenameExtension: "txt",
341
- schema: [
342
- {
343
- name: "booking_rule_id",
344
- type: "text",
345
- primary: true,
346
- prefix: true
347
- },
348
- {
349
- name: "booking_type",
350
- type: "integer",
351
- required: true,
352
- min: 0,
353
- max: 2
354
- },
355
- {
356
- name: "prior_notice_duration_min",
357
- type: "integer",
358
- min: 0
359
- },
360
- {
361
- name: "prior_notice_duration_max",
362
- type: "integer",
363
- min: 0
364
- },
365
- {
366
- name: "prior_notice_last_day",
367
- type: "integer",
368
- min: 0
369
- },
370
- {
371
- name: "prior_notice_last_time",
372
- type: "time"
373
- },
374
- {
375
- name: "prior_notice_start_day",
376
- type: "integer",
377
- min: 0
378
- },
379
- {
380
- name: "prior_notice_start_time",
381
- type: "time"
382
- },
383
- {
384
- name: "prior_notice_service_id",
385
- type: "text",
386
- prefix: true
387
- },
388
- {
389
- name: "message",
390
- type: "text",
391
- nocase: true
392
- },
393
- {
394
- name: "pickup_message",
395
- type: "text",
396
- nocase: true
397
- },
398
- {
399
- name: "drop_off_message",
400
- type: "text",
401
- nocase: true
402
- },
403
- {
404
- name: "phone_number",
405
- type: "text",
406
- nocase: true
407
- },
408
- {
409
- name: "info_url",
410
- type: "text"
411
- },
412
- {
413
- name: "booking_url",
414
- type: "text"
415
- }
416
- ]
417
- };
418
-
419
- // src/models/gtfs/calendar-dates.ts
420
- var calendarDates = {
421
- filenameBase: "calendar_dates",
422
- filenameExtension: "txt",
423
- schema: [
424
- {
425
- name: "service_id",
426
- type: "text",
427
- required: true,
428
- primary: true,
429
- prefix: true
430
- },
431
- {
432
- name: "date",
433
- type: "date",
434
- required: true,
435
- primary: true
436
- },
437
- {
438
- name: "exception_type",
439
- type: "integer",
440
- required: true,
441
- min: 1,
442
- max: 2,
443
- index: true
444
- },
445
- {
446
- name: "holiday_name",
447
- type: "text",
448
- nocase: true
449
- }
450
- ]
451
- };
452
-
453
- // src/models/gtfs/calendar.ts
454
- var calendar = {
455
- filenameBase: "calendar",
456
- filenameExtension: "txt",
457
- schema: [
458
- {
459
- name: "service_id",
460
- type: "text",
461
- required: true,
462
- primary: true,
463
- prefix: true
464
- },
465
- {
466
- name: "monday",
467
- type: "integer",
468
- required: true,
469
- min: 0,
470
- max: 1
471
- },
472
- {
473
- name: "tuesday",
474
- type: "integer",
475
- required: true,
476
- min: 0,
477
- max: 1
478
- },
479
- {
480
- name: "wednesday",
481
- type: "integer",
482
- required: true,
483
- min: 0,
484
- max: 1
485
- },
486
- {
487
- name: "thursday",
488
- type: "integer",
489
- required: true,
490
- min: 0,
491
- max: 1
492
- },
493
- {
494
- name: "friday",
495
- type: "integer",
496
- required: true,
497
- min: 0,
498
- max: 1
499
- },
500
- {
501
- name: "saturday",
502
- type: "integer",
503
- required: true,
504
- min: 0,
505
- max: 1
506
- },
507
- {
508
- name: "sunday",
509
- type: "integer",
510
- required: true,
511
- min: 0,
512
- max: 1
513
- },
514
- {
515
- name: "start_date",
516
- type: "date",
517
- required: true,
518
- index: true
519
- },
520
- {
521
- name: "end_date",
522
- type: "date",
523
- required: true,
524
- index: true
525
- }
526
- ]
527
- };
528
-
529
- // src/models/gtfs/fare-attributes.ts
530
- var fareAttributes = {
531
- filenameBase: "fare_attributes",
532
- filenameExtension: "txt",
533
- schema: [
534
- {
535
- name: "fare_id",
536
- type: "text",
537
- required: true,
538
- primary: true,
539
- prefix: true
540
- },
541
- {
542
- name: "price",
543
- type: "real",
544
- required: true
545
- },
546
- {
547
- name: "currency_type",
548
- type: "text",
549
- required: true
550
- },
551
- {
552
- name: "payment_method",
553
- type: "integer",
554
- required: true,
555
- min: 0,
556
- max: 1
557
- },
558
- {
559
- name: "transfers",
560
- type: "integer",
561
- min: 0,
562
- max: 2
563
- },
564
- {
565
- name: "agency_id",
566
- type: "text",
567
- prefix: true
568
- },
569
- {
570
- name: "transfer_duration",
571
- type: "integer",
572
- min: 0
573
- }
574
- ]
575
- };
576
-
577
- // src/models/gtfs/fare-leg-rules.ts
578
- var fareLegRules = {
579
- filenameBase: "fare_leg_rules",
580
- filenameExtension: "txt",
581
- schema: [
582
- {
583
- name: "leg_group_id",
584
- type: "text",
585
- prefix: true
586
- },
587
- {
588
- name: "network_id",
589
- type: "text",
590
- primary: true,
591
- prefix: true
592
- },
593
- {
594
- name: "from_area_id",
595
- type: "text",
596
- primary: true,
597
- prefix: true
598
- },
599
- {
600
- name: "to_area_id",
601
- type: "text",
602
- primary: true,
603
- prefix: true
604
- },
605
- {
606
- name: "from_timeframe_group_id",
607
- type: "text",
608
- primary: true,
609
- prefix: true
610
- },
611
- {
612
- name: "to_timeframe_group_id",
613
- type: "text",
614
- primary: true,
615
- prefix: true
616
- },
617
- {
618
- name: "fare_product_id",
619
- type: "text",
620
- required: true,
621
- primary: true,
622
- prefix: true
623
- },
624
- {
625
- name: "rule_priority",
626
- type: "integer",
627
- min: 0
628
- }
629
- ]
630
- };
631
-
632
- // src/models/gtfs/fare-media.ts
633
- var fareMedia = {
634
- filenameBase: "fare_media",
635
- filenameExtension: "txt",
636
- schema: [
637
- {
638
- name: "fare_media_id",
639
- type: "text",
640
- required: true,
641
- primary: true,
642
- prefix: true
643
- },
644
- {
645
- name: "fare_media_name",
646
- type: "text"
647
- },
648
- {
649
- name: "fare_media_type",
650
- type: "integer",
651
- required: true,
652
- min: 0,
653
- max: 4
654
- }
655
- ]
656
- };
657
-
658
- // src/models/gtfs/fare-products.ts
659
- var fareProducts = {
660
- filenameBase: "fare_products",
661
- filenameExtension: "txt",
662
- schema: [
663
- {
664
- name: "fare_product_id",
665
- type: "text",
666
- required: true,
667
- primary: true,
668
- prefix: true
669
- },
670
- {
671
- name: "rider_category_id",
672
- type: "text",
673
- primary: true,
674
- prefix: true
675
- },
676
- {
677
- name: "fare_product_name",
678
- type: "text"
679
- },
680
- {
681
- name: "fare_media_id",
682
- type: "text",
683
- primary: true,
684
- prefix: true
685
- },
686
- {
687
- name: "amount",
688
- type: "real",
689
- required: true
690
- },
691
- {
692
- name: "currency",
693
- type: "text",
694
- required: true
695
- }
696
- ]
697
- };
698
-
699
- // src/models/gtfs/fare-rules.ts
700
- var fareRules = {
701
- filenameBase: "fare_rules",
702
- filenameExtension: "txt",
703
- schema: [
704
- {
705
- name: "fare_id",
706
- type: "text",
707
- required: true,
708
- primary: true,
709
- prefix: true
710
- },
711
- {
712
- name: "route_id",
713
- type: "text",
714
- primary: true,
715
- prefix: true
716
- },
717
- {
718
- name: "origin_id",
719
- type: "text",
720
- primary: true,
721
- prefix: true
722
- },
723
- {
724
- name: "destination_id",
725
- type: "text",
726
- primary: true,
727
- prefix: true
728
- },
729
- {
730
- name: "contains_id",
731
- type: "text",
732
- primary: true,
733
- prefix: true
734
- }
735
- ]
736
- };
737
-
738
- // src/models/gtfs/fare-transfer-rules.ts
739
- var fareTransferRules = {
740
- filenameBase: "fare_transfer_rules",
741
- filenameExtension: "txt",
742
- schema: [
743
- {
744
- name: "from_leg_group_id",
745
- type: "text",
746
- primary: true,
747
- prefix: true
748
- },
749
- {
750
- name: "to_leg_group_id",
751
- type: "text",
752
- primary: true,
753
- prefix: true
754
- },
755
- {
756
- name: "transfer_count",
757
- type: "integer",
758
- min: -1,
759
- primary: true
760
- },
761
- {
762
- name: "duration_limit",
763
- type: "integer",
764
- min: 0,
765
- primary: true
766
- },
767
- {
768
- name: "duration_limit_type",
769
- type: "integer",
770
- min: 0,
771
- max: 3
772
- },
773
- {
774
- name: "fare_transfer_type",
775
- type: "integer",
776
- min: 0,
777
- max: 2,
778
- required: true
779
- },
780
- {
781
- name: "fare_product_id",
782
- type: "text",
783
- primary: true,
784
- prefix: true
785
- }
786
- ]
787
- };
788
-
789
- // src/models/gtfs/feed-info.ts
790
- var feedInfo = {
791
- filenameBase: "feed_info",
792
- filenameExtension: "txt",
793
- schema: [
794
- {
795
- name: "feed_publisher_name",
796
- type: "text",
797
- required: true,
798
- nocase: true
799
- },
800
- {
801
- name: "feed_publisher_url",
802
- type: "text",
803
- required: true
804
- },
805
- {
806
- name: "feed_lang",
807
- type: "text",
808
- required: true
809
- },
810
- {
811
- name: "default_lang",
812
- type: "text",
813
- nocase: true
814
- },
815
- {
816
- name: "feed_start_date",
817
- type: "date"
818
- },
819
- {
820
- name: "feed_end_date",
821
- type: "date"
822
- },
823
- {
824
- name: "feed_version",
825
- type: "text"
826
- },
827
- {
828
- name: "feed_contact_email",
829
- type: "text",
830
- nocase: true
831
- },
832
- {
833
- name: "feed_contact_url",
834
- type: "text"
835
- }
836
- ]
837
- };
838
-
839
- // src/models/gtfs/frequencies.ts
840
- var frequencies = {
841
- filenameBase: "frequencies",
842
- filenameExtension: "txt",
843
- schema: [
844
- {
845
- name: "trip_id",
846
- type: "text",
847
- required: true,
848
- primary: true,
849
- prefix: true
850
- },
851
- {
852
- name: "start_time",
853
- type: "time",
854
- required: true,
855
- primary: true
856
- },
857
- {
858
- name: "end_time",
859
- type: "time",
860
- required: true
861
- },
862
- {
863
- name: "headway_secs",
864
- type: "integer",
865
- required: true,
866
- min: 0
867
- },
868
- {
869
- name: "exact_times",
870
- type: "integer",
871
- min: 0,
872
- max: 1
873
- }
874
- ]
875
- };
876
-
877
- // src/models/gtfs/levels.ts
878
- var levels = {
879
- filenameBase: "levels",
880
- filenameExtension: "txt",
881
- schema: [
882
- {
883
- name: "level_id",
884
- type: "text",
885
- primary: true,
886
- required: true,
887
- prefix: true
888
- },
889
- {
890
- name: "level_index",
891
- type: "real",
892
- required: true
893
- },
894
- {
895
- name: "level_name",
896
- type: "text",
897
- nocase: true
898
- }
899
- ]
900
- };
901
-
902
- // src/models/gtfs/location-groups.ts
903
- var locationGroups = {
904
- filenameBase: "location_groups",
905
- filenameExtension: "txt",
906
- schema: [
907
- {
908
- name: "location_group_id",
909
- type: "text",
910
- primary: true,
911
- prefix: true
912
- },
913
- {
914
- name: "location_group_name",
915
- type: "text",
916
- nocase: true
917
- }
918
- ]
919
- };
920
-
921
- // src/models/gtfs/location-group-stops.ts
922
- var locationGroupStops = {
923
- filenameBase: "location_group_stops",
924
- filenameExtension: "txt",
925
- schema: [
926
- {
927
- name: "location_group_id",
928
- type: "text",
929
- prefix: true,
930
- index: true,
931
- required: true,
932
- primary: true
933
- },
934
- {
935
- name: "stop_id",
936
- type: "text",
937
- required: true,
938
- prefix: true,
939
- index: true,
940
- primary: true
941
- }
942
- ]
943
- };
944
-
945
- // src/models/gtfs/locations.ts
946
- var locations = {
947
- filenameBase: "locations",
948
- filenameExtension: "geojson",
949
- schema: [
950
- {
951
- name: "geojson",
952
- type: "text"
953
- }
954
- ]
955
- };
956
-
957
- // src/models/gtfs/networks.ts
958
- var networks = {
959
- filenameBase: "networks",
960
- filenameExtension: "txt",
961
- schema: [
962
- {
963
- name: "network_id",
964
- type: "text",
965
- primary: true,
966
- required: true,
967
- prefix: true
968
- },
969
- {
970
- name: "network_name",
971
- type: "text",
972
- nocase: true
973
- }
974
- ]
975
- };
976
-
977
- // src/models/gtfs/pathways.ts
978
- var pathways = {
979
- filenameBase: "pathways",
980
- filenameExtension: "txt",
981
- schema: [
982
- {
983
- name: "pathway_id",
984
- type: "text",
985
- primary: true,
986
- required: true,
987
- prefix: true
988
- },
989
- {
990
- name: "from_stop_id",
991
- type: "text",
992
- required: true,
993
- prefix: true
994
- },
995
- {
996
- name: "to_stop_id",
997
- type: "text",
998
- required: true,
999
- prefix: true
1000
- },
1001
- {
1002
- name: "pathway_mode",
1003
- type: "integer",
1004
- required: true,
1005
- min: 1,
1006
- max: 7
1007
- },
1008
- {
1009
- name: "is_bidirectional",
1010
- type: "integer",
1011
- required: true,
1012
- min: 0,
1013
- max: 1
1014
- },
1015
- {
1016
- name: "length",
1017
- type: "real",
1018
- min: 0
1019
- },
1020
- {
1021
- name: "traversal_time",
1022
- type: "integer",
1023
- min: 0
1024
- },
1025
- {
1026
- name: "stair_count",
1027
- type: "integer"
1028
- },
1029
- {
1030
- name: "max_slope",
1031
- type: "real"
1032
- },
1033
- {
1034
- name: "min_width",
1035
- type: "real",
1036
- min: 0
1037
- },
1038
- {
1039
- name: "signposted_as",
1040
- type: "text",
1041
- nocase: true
1042
- },
1043
- {
1044
- name: "reversed_signposted_as",
1045
- type: "text",
1046
- nocase: true
1047
- }
1048
- ]
1049
- };
1050
-
1051
- // src/models/gtfs/rider-categories.ts
1052
- var riderCategories = {
1053
- filenameBase: "rider_categories",
1054
- filenameExtension: "txt",
1055
- schema: [
1056
- {
1057
- name: "rider_category_id",
1058
- type: "text",
1059
- primary: true,
1060
- required: true,
1061
- prefix: true
1062
- },
1063
- {
1064
- name: "rider_category_name",
1065
- type: "text",
1066
- required: true
1067
- },
1068
- {
1069
- name: "is_default_fare_category",
1070
- type: "integer",
1071
- min: 0,
1072
- max: 1
1073
- },
1074
- {
1075
- name: "eligibility_url",
1076
- type: "text"
1077
- }
1078
- ]
1079
- };
1080
-
1081
- // src/models/gtfs/route-networks.ts
1082
- var routeNetworks = {
1083
- filenameBase: "route_networks",
1084
- filenameExtension: "txt",
1085
- schema: [
1086
- {
1087
- name: "network_id",
1088
- type: "text",
1089
- required: true,
1090
- prefix: true
1091
- },
1092
- {
1093
- name: "route_id",
1094
- type: "text",
1095
- primary: true,
1096
- index: true,
1097
- prefix: true
1098
- }
1099
- ]
1100
- };
1101
-
1102
- // src/models/gtfs/routes.ts
1103
- var routes = {
1104
- filenameBase: "routes",
1105
- filenameExtension: "txt",
1106
- schema: [
1107
- {
1108
- name: "route_id",
1109
- type: "text",
1110
- primary: true,
1111
- required: true,
1112
- prefix: true
1113
- },
1114
- {
1115
- name: "agency_id",
1116
- type: "text",
1117
- prefix: true
1118
- },
1119
- {
1120
- name: "route_short_name",
1121
- type: "text",
1122
- nocase: true
1123
- },
1124
- {
1125
- name: "route_long_name",
1126
- type: "text",
1127
- nocase: true
1128
- },
1129
- {
1130
- name: "route_desc",
1131
- type: "text",
1132
- nocase: true
1133
- },
1134
- {
1135
- name: "route_type",
1136
- type: "integer",
1137
- required: true,
1138
- min: 0
1139
- // Support extended GTFS route types with no max value
1140
- // https://developers.google.com/transit/gtfs/reference/extended-route-types
1141
- },
1142
- {
1143
- name: "route_url",
1144
- type: "text"
1145
- },
1146
- {
1147
- name: "route_color",
1148
- type: "text",
1149
- nocase: true
1150
- },
1151
- {
1152
- name: "route_text_color",
1153
- type: "text",
1154
- nocase: true
1155
- },
1156
- {
1157
- name: "route_sort_order",
1158
- type: "integer",
1159
- min: 0
1160
- },
1161
- {
1162
- name: "continuous_pickup",
1163
- type: "integer",
1164
- min: 0,
1165
- max: 3
1166
- },
1167
- {
1168
- name: "continuous_drop_off",
1169
- type: "integer",
1170
- min: 0,
1171
- max: 3
1172
- },
1173
- {
1174
- name: "network_id",
1175
- type: "text",
1176
- prefix: true
1177
- },
1178
- {
1179
- name: "cemv_support",
1180
- type: "integer",
1181
- min: 0,
1182
- max: 2
1183
- }
1184
- ]
1185
- };
1186
-
1187
- // src/models/gtfs/shapes.ts
1188
- var shapes = {
1189
- filenameBase: "shapes",
1190
- filenameExtension: "txt",
1191
- schema: [
1192
- {
1193
- name: "shape_id",
1194
- type: "text",
1195
- required: true,
1196
- primary: true,
1197
- prefix: true
1198
- },
1199
- {
1200
- name: "shape_pt_lat",
1201
- type: "real",
1202
- required: true,
1203
- min: -90,
1204
- max: 90
1205
- },
1206
- {
1207
- name: "shape_pt_lon",
1208
- type: "real",
1209
- required: true,
1210
- min: -180,
1211
- max: 180
1212
- },
1213
- {
1214
- name: "shape_pt_sequence",
1215
- type: "integer",
1216
- required: true,
1217
- primary: true,
1218
- min: 0
1219
- },
1220
- {
1221
- name: "shape_dist_traveled",
1222
- type: "real",
1223
- min: 0
1224
- }
1225
- ]
1226
- };
1227
-
1228
- // src/models/gtfs/stop-areas.ts
1229
- var stopAreas = {
1230
- filenameBase: "stop_areas",
1231
- filenameExtension: "txt",
1232
- schema: [
1233
- {
1234
- name: "area_id",
1235
- type: "text",
1236
- required: true,
1237
- primary: true,
1238
- prefix: true
1239
- },
1240
- {
1241
- name: "stop_id",
1242
- type: "text",
1243
- required: true,
1244
- primary: true,
1245
- prefix: true
1246
- }
1247
- ]
1248
- };
1249
-
1250
- // src/models/gtfs/stop-times.ts
1251
- var stopTimes = {
1252
- filenameBase: "stop_times",
1253
- filenameExtension: "txt",
1254
- schema: [
1255
- {
1256
- name: "trip_id",
1257
- type: "text",
1258
- required: true,
1259
- primary: true,
1260
- prefix: true
1261
- },
1262
- {
1263
- name: "arrival_time",
1264
- type: "time"
1265
- },
1266
- {
1267
- name: "departure_time",
1268
- type: "time"
1269
- },
1270
- {
1271
- name: "location_group_id",
1272
- type: "text",
1273
- prefix: true,
1274
- index: true
1275
- },
1276
- {
1277
- name: "location_id",
1278
- type: "text",
1279
- prefix: true,
1280
- index: true
1281
- },
1282
- {
1283
- name: "stop_id",
1284
- type: "text",
1285
- required: true,
1286
- prefix: true,
1287
- index: true
1288
- },
1289
- {
1290
- name: "stop_sequence",
1291
- type: "integer",
1292
- required: true,
1293
- primary: true,
1294
- min: 0
1295
- },
1296
- {
1297
- name: "stop_headsign",
1298
- type: "text",
1299
- nocase: true
1300
- },
1301
- {
1302
- name: "start_pickup_drop_off_window",
1303
- type: "time"
1304
- },
1305
- {
1306
- name: "pickup_type",
1307
- type: "integer",
1308
- min: 0,
1309
- max: 3
1310
- },
1311
- {
1312
- name: "drop_off_type",
1313
- type: "integer",
1314
- min: 0,
1315
- max: 3
1316
- },
1317
- {
1318
- name: "continuous_pickup",
1319
- type: "integer",
1320
- min: 0,
1321
- max: 3
1322
- },
1323
- {
1324
- name: "continuous_drop_off",
1325
- type: "integer",
1326
- min: 0,
1327
- max: 3
1328
- },
1329
- {
1330
- name: "shape_dist_traveled",
1331
- type: "real",
1332
- min: 0
1333
- },
1334
- {
1335
- name: "timepoint",
1336
- type: "integer",
1337
- min: 0,
1338
- max: 1
1339
- },
1340
- {
1341
- name: "pickup_booking_rule_id",
1342
- type: "text",
1343
- prefix: true,
1344
- index: true
1345
- },
1346
- {
1347
- name: "drop_off_booking_rule_id",
1348
- type: "text",
1349
- prefix: true,
1350
- index: true
1351
- }
1352
- ]
1353
- };
1354
-
1355
- // src/models/gtfs/stops.ts
1356
- var stops = {
1357
- filenameBase: "stops",
1358
- filenameExtension: "txt",
1359
- schema: [
1360
- {
1361
- name: "stop_id",
1362
- type: "text",
1363
- primary: true,
1364
- required: true,
1365
- prefix: true
1366
- },
1367
- {
1368
- name: "stop_code",
1369
- type: "text"
1370
- },
1371
- {
1372
- name: "stop_name",
1373
- type: "text",
1374
- nocase: true
1375
- },
1376
- {
1377
- name: "tts_stop_name",
1378
- type: "text",
1379
- nocase: true
1380
- },
1381
- {
1382
- name: "stop_desc",
1383
- type: "text",
1384
- nocase: true
1385
- },
1386
- {
1387
- name: "stop_lat",
1388
- type: "real",
1389
- min: -90,
1390
- max: 90
1391
- },
1392
- {
1393
- name: "stop_lon",
1394
- type: "real",
1395
- min: -180,
1396
- max: 180
1397
- },
1398
- {
1399
- name: "zone_id",
1400
- type: "text",
1401
- prefix: true
1402
- },
1403
- {
1404
- name: "stop_url",
1405
- type: "text"
1406
- },
1407
- {
1408
- name: "location_type",
1409
- type: "integer",
1410
- min: 0,
1411
- max: 4
1412
- },
1413
- {
1414
- name: "parent_station",
1415
- type: "text",
1416
- index: true,
1417
- prefix: true
1418
- },
1419
- {
1420
- name: "stop_timezone",
1421
- type: "text"
1422
- },
1423
- {
1424
- name: "wheelchair_boarding",
1425
- type: "integer",
1426
- min: 0,
1427
- max: 2
1428
- },
1429
- {
1430
- name: "level_id",
1431
- type: "text",
1432
- prefix: true
1433
- },
1434
- {
1435
- name: "platform_code",
1436
- type: "text"
1437
- },
1438
- {
1439
- name: "stop_access",
1440
- type: "integer",
1441
- min: 0,
1442
- max: 1
1443
- }
1444
- ]
1445
- };
1446
-
1447
- // src/models/gtfs/timeframes.ts
1448
- var timeframes = {
1449
- filenameBase: "timeframes",
1450
- filenameExtension: "txt",
1451
- schema: [
1452
- {
1453
- name: "timeframe_group_id",
1454
- type: "text",
1455
- primary: true,
1456
- prefix: true
1457
- },
1458
- {
1459
- name: "start_time",
1460
- type: "time",
1461
- primary: true
1462
- },
1463
- {
1464
- name: "end_time",
1465
- type: "time",
1466
- primary: true
1467
- },
1468
- {
1469
- name: "service_id",
1470
- type: "text",
1471
- required: true,
1472
- primary: true,
1473
- index: true,
1474
- prefix: true
1475
- }
1476
- ]
1477
- };
1478
-
1479
- // src/models/gtfs/transfers.ts
1480
- var transfers = {
1481
- filenameBase: "transfers",
1482
- filenameExtension: "txt",
1483
- schema: [
1484
- {
1485
- name: "from_stop_id",
1486
- type: "text",
1487
- primary: true,
1488
- prefix: true
1489
- },
1490
- {
1491
- name: "to_stop_id",
1492
- type: "text",
1493
- primary: true,
1494
- prefix: true
1495
- },
1496
- {
1497
- name: "from_route_id",
1498
- type: "text",
1499
- primary: true,
1500
- prefix: true
1501
- },
1502
- {
1503
- name: "to_route_id",
1504
- type: "text",
1505
- primary: true,
1506
- prefix: true
1507
- },
1508
- {
1509
- name: "from_trip_id",
1510
- type: "text",
1511
- primary: true,
1512
- prefix: true
1513
- },
1514
- {
1515
- name: "to_trip_id",
1516
- type: "text",
1517
- primary: true,
1518
- prefix: true
1519
- },
1520
- {
1521
- name: "transfer_type",
1522
- type: "integer",
1523
- min: 0,
1524
- max: 5,
1525
- default: 0
1526
- },
1527
- {
1528
- name: "min_transfer_time",
1529
- type: "integer",
1530
- min: 0
1531
- }
1532
- ]
1533
- };
1534
-
1535
- // src/models/gtfs/translations.ts
1536
- var translations = {
1537
- filenameBase: "translations",
1538
- filenameExtension: "txt",
1539
- schema: [
1540
- {
1541
- name: "table_name",
1542
- type: "text",
1543
- primary: true,
1544
- required: true
1545
- },
1546
- {
1547
- name: "field_name",
1548
- type: "text",
1549
- primary: true,
1550
- required: true
1551
- },
1552
- {
1553
- name: "language",
1554
- type: "text",
1555
- primary: true,
1556
- required: true
1557
- },
1558
- {
1559
- name: "translation",
1560
- type: "text",
1561
- required: true
1562
- },
1563
- {
1564
- name: "record_id",
1565
- type: "text",
1566
- primary: true,
1567
- prefix: true
1568
- },
1569
- {
1570
- name: "record_sub_id",
1571
- type: "text",
1572
- primary: true,
1573
- prefix: true
1574
- },
1575
- {
1576
- name: "field_value",
1577
- type: "text",
1578
- primary: true
1579
- }
1580
- ]
1581
- };
1582
-
1583
- // src/models/gtfs/trips.ts
1584
- var trips = {
1585
- filenameBase: "trips",
1586
- filenameExtension: "txt",
1587
- schema: [
1588
- {
1589
- name: "route_id",
1590
- type: "text",
1591
- required: true,
1592
- index: true,
1593
- prefix: true
1594
- },
1595
- {
1596
- name: "service_id",
1597
- type: "text",
1598
- required: true,
1599
- index: true,
1600
- prefix: true
1601
- },
1602
- {
1603
- name: "trip_id",
1604
- type: "text",
1605
- primary: true,
1606
- required: true,
1607
- prefix: true
1608
- },
1609
- {
1610
- name: "trip_headsign",
1611
- type: "text",
1612
- nocase: true
1613
- },
1614
- {
1615
- name: "trip_short_name",
1616
- type: "text",
1617
- nocase: true
1618
- },
1619
- {
1620
- name: "direction_id",
1621
- type: "integer",
1622
- min: 0,
1623
- max: 1,
1624
- index: true
1625
- },
1626
- {
1627
- name: "block_id",
1628
- type: "text",
1629
- index: true,
1630
- prefix: true
1631
- },
1632
- {
1633
- name: "shape_id",
1634
- type: "text",
1635
- index: true,
1636
- prefix: true
1637
- },
1638
- {
1639
- name: "wheelchair_accessible",
1640
- type: "integer",
1641
- min: 0,
1642
- max: 2
1643
- },
1644
- {
1645
- name: "bikes_allowed",
1646
- type: "integer",
1647
- min: 0,
1648
- max: 2
1649
- },
1650
- {
1651
- name: "cars_allowed",
1652
- type: "integer",
1653
- min: 0,
1654
- max: 2
1655
- },
1656
- {
1657
- name: "safe_duration_factor",
1658
- type: "real"
1659
- },
1660
- {
1661
- name: "safe_duration_offset",
1662
- type: "real"
1663
- }
1664
- ]
1665
- };
1666
-
1667
- // src/models/non-standard/timetables.ts
1668
- var timetables = {
1669
- filenameBase: "timetables",
1670
- filenameExtension: "txt",
1671
- nonstandard: true,
1672
- schema: [
1673
- {
1674
- name: "timetable_id",
1675
- type: "text",
1676
- prefix: true,
1677
- required: true,
1678
- primary: true
1679
- },
1680
- {
1681
- name: "route_id",
1682
- type: "text",
1683
- prefix: true,
1684
- required: true,
1685
- primary: true
1686
- },
1687
- {
1688
- name: "direction_id",
1689
- type: "integer",
1690
- min: 0,
1691
- max: 1
1692
- },
1693
- {
1694
- name: "start_date",
1695
- type: "date"
1696
- },
1697
- {
1698
- name: "end_date",
1699
- type: "date"
1700
- },
1701
- {
1702
- name: "monday",
1703
- type: "integer",
1704
- required: true,
1705
- min: 0,
1706
- max: 1
1707
- },
1708
- {
1709
- name: "tuesday",
1710
- type: "integer",
1711
- required: true,
1712
- min: 0,
1713
- max: 1
1714
- },
1715
- {
1716
- name: "wednesday",
1717
- type: "integer",
1718
- required: true,
1719
- min: 0,
1720
- max: 1
1721
- },
1722
- {
1723
- name: "thursday",
1724
- type: "integer",
1725
- required: true,
1726
- min: 0,
1727
- max: 1
1728
- },
1729
- {
1730
- name: "friday",
1731
- type: "integer",
1732
- required: true,
1733
- min: 0,
1734
- max: 1
1735
- },
1736
- {
1737
- name: "saturday",
1738
- type: "integer",
1739
- required: true,
1740
- min: 0,
1741
- max: 1
1742
- },
1743
- {
1744
- name: "sunday",
1745
- type: "integer",
1746
- required: true,
1747
- min: 0,
1748
- max: 1
1749
- },
1750
- {
1751
- name: "start_time",
1752
- type: "time"
1753
- },
1754
- {
1755
- name: "end_time",
1756
- type: "time"
1757
- },
1758
- {
1759
- name: "timetable_label",
1760
- type: "text",
1761
- nocase: true
1762
- },
1763
- {
1764
- name: "service_notes",
1765
- type: "text",
1766
- nocase: true
1767
- },
1768
- {
1769
- name: "orientation",
1770
- type: "text"
1771
- },
1772
- {
1773
- name: "timetable_page_id",
1774
- type: "text"
1775
- },
1776
- {
1777
- name: "timetable_sequence",
1778
- type: "integer",
1779
- min: 0,
1780
- index: true
1781
- },
1782
- {
1783
- name: "direction_name",
1784
- type: "text"
1785
- },
1786
- {
1787
- name: "include_exceptions",
1788
- type: "integer",
1789
- min: 0,
1790
- max: 1
1791
- },
1792
- {
1793
- name: "show_trip_continuation",
1794
- type: "integer",
1795
- min: 0,
1796
- max: 1
1797
- }
1798
- ]
1799
- };
1800
-
1801
- // src/models/non-standard/timetable-pages.ts
1802
- var timetablePages = {
1803
- filenameBase: "timetable_pages",
1804
- filenameExtension: "txt",
1805
- nonstandard: true,
1806
- schema: [
1807
- {
1808
- name: "timetable_page_id",
1809
- type: "text",
1810
- primary: true,
1811
- required: true,
1812
- prefix: true
1813
- },
1814
- {
1815
- name: "timetable_page_label",
1816
- type: "text"
1817
- },
1818
- {
1819
- name: "filename",
1820
- type: "text"
1821
- }
1822
- ]
1823
- };
1824
-
1825
- // src/models/non-standard/timetable-stop-order.ts
1826
- var timetableStopOrder = {
1827
- filenameBase: "timetable_stop_order",
1828
- filenameExtension: "txt",
1829
- nonstandard: true,
1830
- schema: [
1831
- {
1832
- name: "timetable_id",
1833
- type: "text",
1834
- index: true,
1835
- prefix: true,
1836
- required: true,
1837
- primary: true
1838
- },
1839
- {
1840
- name: "stop_id",
1841
- type: "text",
1842
- prefix: true,
1843
- required: true,
1844
- primary: true
1845
- },
1846
- {
1847
- name: "stop_sequence",
1848
- type: "integer",
1849
- min: 0,
1850
- index: true,
1851
- required: true,
1852
- primary: true
1853
- }
1854
- ]
1855
- };
1856
-
1857
- // src/models/non-standard/timetable-notes.ts
1858
- var timetableNotes = {
1859
- filenameBase: "timetable_notes",
1860
- filenameExtension: "txt",
1861
- nonstandard: true,
1862
- schema: [
1863
- {
1864
- name: "note_id",
1865
- type: "text",
1866
- primary: true,
1867
- prefix: true,
1868
- required: true
1869
- },
1870
- {
1871
- name: "symbol",
1872
- type: "text"
1873
- },
1874
- {
1875
- name: "note",
1876
- type: "text",
1877
- nocase: true,
1878
- required: true
1879
- }
1880
- ]
1881
- };
1882
-
1883
- // src/models/non-standard/timetable-notes-references.ts
1884
- var timetableNotesReferences = {
1885
- filenameBase: "timetable_notes_references",
1886
- filenameExtension: "txt",
1887
- nonstandard: true,
1888
- schema: [
1889
- {
1890
- name: "note_id",
1891
- type: "text",
1892
- prefix: true,
1893
- required: true,
1894
- primary: true
1895
- },
1896
- {
1897
- name: "timetable_id",
1898
- type: "text",
1899
- prefix: true,
1900
- primary: true
1901
- },
1902
- {
1903
- name: "route_id",
1904
- type: "text",
1905
- prefix: true,
1906
- primary: true
1907
- },
1908
- {
1909
- name: "trip_id",
1910
- type: "text",
1911
- prefix: true,
1912
- primary: true
1913
- },
1914
- {
1915
- name: "stop_id",
1916
- type: "text",
1917
- prefix: true,
1918
- primary: true
1919
- },
1920
- {
1921
- name: "stop_sequence",
1922
- type: "integer",
1923
- min: 0,
1924
- primary: true
1925
- },
1926
- {
1927
- name: "show_on_stoptime",
1928
- type: "integer",
1929
- min: 0,
1930
- max: 1
1931
- }
1932
- ]
1933
- };
1934
-
1935
- // src/models/non-standard/trips-dated-vehicle-journey.ts
1936
- var tripsDatedVehicleJourney = {
1937
- filenameBase: "trips_dated_vehicle_journey",
1938
- filenameExtension: "txt",
1939
- nonstandard: true,
1940
- schema: [
1941
- {
1942
- name: "trip_id",
1943
- type: "text",
1944
- required: true,
1945
- index: true,
1946
- prefix: true
1947
- },
1948
- {
1949
- name: "operating_day_date",
1950
- type: "text",
1951
- index: true,
1952
- required: true
1953
- },
1954
- {
1955
- name: "dated_vehicle_journey_gid",
1956
- type: "text",
1957
- required: true
1958
- },
1959
- {
1960
- name: "journey_number",
1961
- type: "integer",
1962
- min: 0,
1963
- max: 65535,
1964
- index: true
1965
- }
1966
- ]
1967
- };
1968
-
1969
- // src/models/gtfs-plus/calendar-attributes.ts
1970
- var calendarAttributes = {
1971
- filenameBase: "calendar_attributes",
1972
- filenameExtension: "txt",
1973
- nonstandard: true,
1974
- extension: "gtfs-plus",
1975
- schema: [
1976
- {
1977
- name: "service_id",
1978
- type: "text",
1979
- primary: true,
1980
- prefix: true
1981
- },
1982
- {
1983
- name: "service_description",
1984
- type: "text",
1985
- required: true,
1986
- nocase: true
1987
- }
1988
- ]
1989
- };
1990
-
1991
- // src/models/gtfs-plus/directions.ts
1992
- var directions = {
1993
- filenameBase: "directions",
1994
- filenameExtension: "txt",
1995
- nonstandard: true,
1996
- extension: "gtfs-plus",
1997
- schema: [
1998
- {
1999
- name: "route_id",
2000
- type: "text",
2001
- required: true,
2002
- primary: true,
2003
- prefix: true
2004
- },
2005
- {
2006
- name: "direction_id",
2007
- type: "integer",
2008
- min: 0,
2009
- max: 1,
2010
- primary: true
2011
- },
2012
- {
2013
- name: "direction",
2014
- type: "text",
2015
- required: true
2016
- }
2017
- ]
2018
- };
2019
-
2020
- // src/models/gtfs-plus/route-attributes.ts
2021
- var routeAttributes = {
2022
- filenameBase: "route_attributes",
2023
- filenameExtension: "txt",
2024
- nonstandard: true,
2025
- extension: "gtfs-plus",
2026
- schema: [
2027
- {
2028
- name: "route_id",
2029
- type: "text",
2030
- primary: true,
2031
- prefix: true
2032
- },
2033
- {
2034
- name: "category",
2035
- type: "integer",
2036
- min: 0,
2037
- required: true
2038
- },
2039
- {
2040
- name: "subcategory",
2041
- type: "integer",
2042
- min: 101,
2043
- required: true
2044
- },
2045
- {
2046
- name: "running_way",
2047
- type: "integer",
2048
- min: 1,
2049
- required: true
2050
- }
2051
- ]
2052
- };
2053
-
2054
- // src/models/gtfs-plus/stop-attributes.ts
2055
- var stopAttributes = {
2056
- filenameBase: "stop_attributes",
2057
- filenameExtension: "txt",
2058
- nonstandard: true,
2059
- extension: "gtfs-plus",
2060
- schema: [
2061
- {
2062
- name: "stop_id",
2063
- type: "text",
2064
- required: true,
2065
- primary: true,
2066
- prefix: true
2067
- },
2068
- {
2069
- name: "accessibility_id",
2070
- type: "integer",
2071
- min: 0
2072
- },
2073
- {
2074
- name: "cardinal_direction",
2075
- type: "text"
2076
- },
2077
- {
2078
- name: "relative_position",
2079
- type: "text"
2080
- },
2081
- {
2082
- name: "stop_city",
2083
- type: "text",
2084
- nocase: true
2085
- }
2086
- ]
2087
- };
2088
-
2089
- // src/models/gtfs-ride/board-alight.ts
2090
- var boardAlight = {
2091
- filenameBase: "board_alight",
2092
- filenameExtension: "txt",
2093
- nonstandard: true,
2094
- extension: "gtfs-ride",
2095
- schema: [
2096
- {
2097
- name: "trip_id",
2098
- type: "text",
2099
- required: true,
2100
- index: true,
2101
- prefix: true
2102
- },
2103
- {
2104
- name: "stop_id",
2105
- type: "text",
2106
- required: true,
2107
- index: true,
2108
- prefix: true
2109
- },
2110
- {
2111
- name: "stop_sequence",
2112
- type: "integer",
2113
- required: true,
2114
- min: 0,
2115
- index: true
2116
- },
2117
- {
2118
- name: "record_use",
2119
- type: "integer",
2120
- required: true,
2121
- min: 0,
2122
- max: 1,
2123
- index: true
2124
- },
2125
- {
2126
- name: "schedule_relationship",
2127
- type: "integer",
2128
- min: 0,
2129
- max: 8
2130
- },
2131
- {
2132
- name: "boardings",
2133
- type: "integer",
2134
- min: 0
2135
- },
2136
- {
2137
- name: "alightings",
2138
- type: "integer",
2139
- min: 0
2140
- },
2141
- {
2142
- name: "current_load",
2143
- type: "integer",
2144
- min: 0
2145
- },
2146
- {
2147
- name: "load_count",
2148
- type: "integer",
2149
- min: 0
2150
- },
2151
- {
2152
- name: "load_type",
2153
- type: "integer",
2154
- min: 0,
2155
- max: 1
2156
- },
2157
- {
2158
- name: "rack_down",
2159
- type: "integer",
2160
- min: 0,
2161
- max: 1
2162
- },
2163
- {
2164
- name: "bike_boardings",
2165
- type: "integer",
2166
- min: 0
2167
- },
2168
- {
2169
- name: "bike_alightings",
2170
- type: "integer",
2171
- min: 0
2172
- },
2173
- {
2174
- name: "ramp_used",
2175
- type: "integer",
2176
- min: 0,
2177
- max: 1
2178
- },
2179
- {
2180
- name: "ramp_boardings",
2181
- type: "integer",
2182
- min: 0
2183
- },
2184
- {
2185
- name: "ramp_alightings",
2186
- type: "integer",
2187
- min: 0
2188
- },
2189
- {
2190
- name: "service_date",
2191
- type: "date",
2192
- index: true
2193
- },
2194
- {
2195
- name: "service_arrival_time",
2196
- type: "time"
2197
- },
2198
- {
2199
- name: "service_departure_time",
2200
- type: "time"
2201
- },
2202
- {
2203
- name: "source",
2204
- type: "integer",
2205
- min: 0,
2206
- max: 4
2207
- }
2208
- ]
2209
- };
2210
-
2211
- // src/models/gtfs-ride/rider-trip.ts
2212
- var riderTrip = {
2213
- filenameBase: "rider_trip",
2214
- filenameExtension: "txt",
2215
- nonstandard: true,
2216
- extension: "gtfs-ride",
2217
- schema: [
2218
- {
2219
- name: "rider_id",
2220
- type: "text",
2221
- primary: true,
2222
- prefix: true
2223
- },
2224
- {
2225
- name: "agency_id",
2226
- type: "text",
2227
- index: true,
2228
- prefix: true
2229
- },
2230
- {
2231
- name: "trip_id",
2232
- type: "text",
2233
- index: true,
2234
- prefix: true
2235
- },
2236
- {
2237
- name: "boarding_stop_id",
2238
- type: "text",
2239
- index: true,
2240
- prefix: true
2241
- },
2242
- {
2243
- name: "boarding_stop_sequence",
2244
- type: "integer",
2245
- min: 0,
2246
- index: true
2247
- },
2248
- {
2249
- name: "alighting_stop_id",
2250
- type: "text",
2251
- index: true,
2252
- prefix: true
2253
- },
2254
- {
2255
- name: "alighting_stop_sequence",
2256
- type: "integer",
2257
- min: 0,
2258
- index: true
2259
- },
2260
- {
2261
- name: "service_date",
2262
- type: "date",
2263
- index: true
2264
- },
2265
- {
2266
- name: "boarding_time",
2267
- type: "time"
2268
- },
2269
- {
2270
- name: "alighting_time",
2271
- type: "time"
2272
- },
2273
- {
2274
- name: "rider_type",
2275
- type: "integer",
2276
- min: 0,
2277
- max: 13
2278
- },
2279
- {
2280
- name: "rider_type_description",
2281
- type: "text"
2282
- },
2283
- {
2284
- name: "fare_paid",
2285
- type: "real"
2286
- },
2287
- {
2288
- name: "transaction_type",
2289
- type: "integer",
2290
- min: 0,
2291
- max: 8
2292
- },
2293
- {
2294
- name: "fare_media",
2295
- type: "integer",
2296
- min: 0,
2297
- max: 9
2298
- },
2299
- {
2300
- name: "accompanying_device",
2301
- type: "integer",
2302
- min: 0,
2303
- max: 6
2304
- },
2305
- {
2306
- name: "transfer_status",
2307
- type: "integer",
2308
- min: 0,
2309
- max: 1
2310
- }
2311
- ]
2312
- };
2313
-
2314
- // src/models/gtfs-ride/ridership.ts
2315
- var ridership = {
2316
- filenameBase: "ridership",
2317
- filenameExtension: "txt",
2318
- nonstandard: true,
2319
- extension: "gtfs-ride",
2320
- schema: [
2321
- {
2322
- name: "total_boardings",
2323
- type: "integer",
2324
- min: 0,
2325
- required: true
2326
- },
2327
- {
2328
- name: "total_alightings",
2329
- type: "integer",
2330
- min: 0,
2331
- required: true
2332
- },
2333
- {
2334
- name: "ridership_start_date",
2335
- type: "date",
2336
- index: true
2337
- },
2338
- {
2339
- name: "ridership_end_date",
2340
- type: "date",
2341
- index: true
2342
- },
2343
- {
2344
- name: "ridership_start_time",
2345
- type: "time"
2346
- },
2347
- {
2348
- name: "ridership_end_time",
2349
- type: "time"
2350
- },
2351
- {
2352
- name: "service_id",
2353
- type: "text",
2354
- index: true,
2355
- prefix: true
2356
- },
2357
- {
2358
- name: "monday",
2359
- type: "integer",
2360
- min: 0,
2361
- max: 1
2362
- },
2363
- {
2364
- name: "tuesday",
2365
- type: "integer",
2366
- min: 0,
2367
- max: 1
2368
- },
2369
- {
2370
- name: "wednesday",
2371
- type: "integer",
2372
- min: 0,
2373
- max: 1
2374
- },
2375
- {
2376
- name: "thursday",
2377
- type: "integer",
2378
- min: 0,
2379
- max: 1
2380
- },
2381
- {
2382
- name: "friday",
2383
- type: "integer",
2384
- min: 0,
2385
- max: 1
2386
- },
2387
- {
2388
- name: "saturday",
2389
- type: "integer",
2390
- min: 0,
2391
- max: 1
2392
- },
2393
- {
2394
- name: "sunday",
2395
- type: "integer",
2396
- min: 0,
2397
- max: 1
2398
- },
2399
- {
2400
- name: "agency_id",
2401
- type: "text",
2402
- index: true,
2403
- prefix: true
2404
- },
2405
- {
2406
- name: "route_id",
2407
- type: "text",
2408
- index: true,
2409
- prefix: true
2410
- },
2411
- {
2412
- name: "direction_id",
2413
- type: "integer",
2414
- min: 0,
2415
- max: 1,
2416
- index: true
2417
- },
2418
- {
2419
- name: "trip_id",
2420
- type: "text",
2421
- prefix: true
2422
- },
2423
- {
2424
- name: "stop_id",
2425
- type: "text",
2426
- prefix: true
2427
- }
2428
- ]
2429
- };
2430
-
2431
- // src/models/gtfs-ride/trip-capacity.ts
2432
- var tripCapacity = {
2433
- filenameBase: "trip_capacity",
2434
- filenameExtension: "txt",
2435
- nonstandard: true,
2436
- extension: "gtfs-ride",
2437
- schema: [
2438
- {
2439
- name: "agency_id",
2440
- type: "text",
2441
- index: true,
2442
- prefix: true
2443
- },
2444
- {
2445
- name: "trip_id",
2446
- type: "text",
2447
- index: true,
2448
- prefix: true
2449
- },
2450
- {
2451
- name: "service_date",
2452
- type: "date",
2453
- index: true
2454
- },
2455
- {
2456
- name: "vehicle_description",
2457
- type: "text"
2458
- },
2459
- {
2460
- name: "seated_capacity",
2461
- type: "integer",
2462
- min: 0
2463
- },
2464
- {
2465
- name: "standing_capacity",
2466
- type: "integer",
2467
- min: 0
2468
- },
2469
- {
2470
- name: "wheelchair_capacity",
2471
- type: "integer",
2472
- min: 0
2473
- },
2474
- {
2475
- name: "bike_capacity",
2476
- type: "integer",
2477
- min: 0
2478
- }
2479
- ]
2480
- };
2481
-
2482
- // src/models/gtfs-ride/ride-feed-info.ts
2483
- var rideFeedInfo = {
2484
- filenameBase: "ride_feed_info",
2485
- filenameExtension: "txt",
2486
- nonstandard: true,
2487
- extension: "gtfs-ride",
2488
- schema: [
2489
- {
2490
- name: "ride_files",
2491
- type: "integer",
2492
- min: 0,
2493
- max: 6,
2494
- required: true
2495
- },
2496
- {
2497
- name: "ride_start_date",
2498
- type: "date",
2499
- index: true
2500
- },
2501
- {
2502
- name: "ride_end_date",
2503
- type: "date",
2504
- index: true
2505
- },
2506
- {
2507
- name: "gtfs_feed_date",
2508
- type: "date",
2509
- index: true
2510
- },
2511
- {
2512
- name: "default_currency_type",
2513
- type: "text"
2514
- },
2515
- {
2516
- name: "ride_feed_version",
2517
- type: "text"
2518
- }
2519
- ]
2520
- };
2521
-
2522
- // src/models/gtfs-realtime/trip-updates.ts
2523
- var tripUpdates = {
2524
- filenameBase: "trip_updates",
2525
- extension: "gtfs-realtime",
2526
- schema: [
2527
- {
2528
- name: "id",
2529
- type: "text",
2530
- required: true,
2531
- primary: true,
2532
- index: true,
2533
- source: "id",
2534
- prefix: true
2535
- },
2536
- {
2537
- name: "vehicle_id",
2538
- type: "text",
2539
- index: true,
2540
- source: "tripUpdate.vehicle.id",
2541
- default: null,
2542
- prefix: true
2543
- },
2544
- {
2545
- name: "trip_id",
2546
- type: "text",
2547
- index: true,
2548
- source: "tripUpdate.trip.tripId",
2549
- default: null,
2550
- prefix: true
2551
- },
2552
- {
2553
- name: "trip_start_time",
2554
- type: "text",
2555
- source: "tripUpdate.trip.startTime",
2556
- default: null
2557
- },
2558
- {
2559
- name: "direction_id",
2560
- type: "integer",
2561
- source: "tripUpdate.trip.directionId",
2562
- default: null
2563
- },
2564
- {
2565
- name: "route_id",
2566
- type: "text",
2567
- index: true,
2568
- source: "tripUpdate.trip.routeId",
2569
- default: null,
2570
- prefix: true
2571
- },
2572
- {
2573
- name: "start_date",
2574
- type: "text",
2575
- source: "tripUpdate.trip.startDate",
2576
- default: null
2577
- },
2578
- {
2579
- name: "timestamp",
2580
- type: "text",
2581
- source: "tripUpdate.timestamp",
2582
- default: null
2583
- },
2584
- {
2585
- name: "schedule_relationship",
2586
- type: "text",
2587
- source: "tripUpdate.trip.scheduleRelationship",
2588
- default: null
2589
- },
2590
- {
2591
- name: "created_timestamp",
2592
- type: "integer",
2593
- required: true
2594
- },
2595
- {
2596
- name: "expiration_timestamp",
2597
- type: "integer",
2598
- required: true
2599
- }
2600
- ]
2601
- };
2602
-
2603
- // src/models/gtfs-realtime/stop-time-updates.ts
2604
- var stopTimeUpdates = {
2605
- filenameBase: "stop_time_updates",
2606
- extension: "gtfs-realtime",
2607
- schema: [
2608
- {
2609
- name: "trip_id",
2610
- type: "text",
2611
- index: true,
2612
- source: "parent.tripUpdate.trip.tripId",
2613
- default: null,
2614
- prefix: true
2615
- },
2616
- {
2617
- name: "trip_start_time",
2618
- type: "text",
2619
- source: "parent.tripUpdate.trip.startTime",
2620
- default: null
2621
- },
2622
- {
2623
- name: "direction_id",
2624
- type: "integer",
2625
- source: "parent.tripUpdate.trip.directionId",
2626
- default: null
2627
- },
2628
- {
2629
- name: "route_id",
2630
- type: "text",
2631
- index: true,
2632
- source: "parent.tripUpdate.trip.routeId",
2633
- default: null,
2634
- prefix: true
2635
- },
2636
- {
2637
- name: "stop_id",
2638
- type: "text",
2639
- index: true,
2640
- source: "stopId",
2641
- default: null,
2642
- prefix: true
2643
- },
2644
- {
2645
- name: "stop_sequence",
2646
- type: "integer",
2647
- source: "stopSequence",
2648
- default: null
2649
- },
2650
- {
2651
- name: "arrival_delay",
2652
- type: "integer",
2653
- source: "arrival.delay",
2654
- default: null
2655
- },
2656
- {
2657
- name: "departure_delay",
2658
- type: "integer",
2659
- source: "departure.delay",
2660
- default: null
2661
- },
2662
- {
2663
- name: "departure_timestamp",
2664
- type: "text",
2665
- source: "departure.time",
2666
- default: null
2667
- },
2668
- {
2669
- name: "arrival_timestamp",
2670
- type: "text",
2671
- source: "arrival.time",
2672
- default: null
2673
- },
2674
- {
2675
- name: "schedule_relationship",
2676
- type: "text",
2677
- source: "scheduleRelationship",
2678
- default: null
2679
- },
2680
- {
2681
- name: "created_timestamp",
2682
- type: "integer",
2683
- required: true
2684
- },
2685
- {
2686
- name: "expiration_timestamp",
2687
- type: "integer",
2688
- required: true
2689
- }
2690
- ]
2691
- };
2692
-
2693
- // src/models/gtfs-realtime/vehicle-positions.ts
2694
- var vehiclePositions = {
2695
- filenameBase: "vehicle_positions",
2696
- extension: "gtfs-realtime",
2697
- schema: [
2698
- {
2699
- name: "id",
2700
- type: "text",
2701
- required: true,
2702
- primary: true,
2703
- index: true,
2704
- source: "id",
2705
- prefix: true
2706
- },
2707
- {
2708
- name: "bearing",
2709
- type: "real",
2710
- source: "vehicle.position.bearing",
2711
- default: null
2712
- },
2713
- {
2714
- name: "latitude",
2715
- type: "real",
2716
- min: -90,
2717
- max: 90,
2718
- source: "vehicle.position.latitude",
2719
- default: null
2720
- },
2721
- {
2722
- name: "longitude",
2723
- type: "real",
2724
- source: "vehicle.position.longitude",
2725
- min: -180,
2726
- max: 180,
2727
- default: null
2728
- },
2729
- {
2730
- name: "speed",
2731
- type: "real",
2732
- min: 0,
2733
- source: "vehicle.position.speed",
2734
- default: null
2735
- },
2736
- {
2737
- name: "current_stop_sequence",
2738
- type: "integer",
2739
- source: "vehicle.currentStopSequence",
2740
- default: null
2741
- },
2742
- {
2743
- name: "trip_id",
2744
- type: "text",
2745
- index: true,
2746
- source: "vehicle.trip.tripId",
2747
- default: null,
2748
- prefix: true
2749
- },
2750
- {
2751
- name: "trip_start_date",
2752
- type: "text",
2753
- index: true,
2754
- source: "vehicle.trip.startDate",
2755
- default: null
2756
- },
2757
- {
2758
- name: "trip_start_time",
2759
- type: "text",
2760
- index: true,
2761
- source: "vehicle.trip.startTime",
2762
- default: null
2763
- },
2764
- {
2765
- name: "congestion_level",
2766
- type: "text",
2767
- source: "vehicle.congestionLevel",
2768
- default: null
2769
- },
2770
- {
2771
- name: "occupancy_status",
2772
- type: "text",
2773
- source: "vehicle.occupancyStatus",
2774
- default: null
2775
- },
2776
- {
2777
- name: "occupancy_percentage",
2778
- type: "integer",
2779
- source: "vehicle.occupancyPercentage",
2780
- default: null
2781
- },
2782
- {
2783
- name: "vehicle_stop_status",
2784
- type: "text",
2785
- source: "vehicle.vehicleStopStatus",
2786
- default: null
2787
- },
2788
- {
2789
- name: "vehicle_id",
2790
- type: "text",
2791
- index: true,
2792
- source: "vehicle.vehicle.id",
2793
- default: null,
2794
- prefix: true
2795
- },
2796
- {
2797
- name: "vehicle_label",
2798
- type: "text",
2799
- source: "vehicle.vehicle.label",
2800
- default: null
2801
- },
2802
- {
2803
- name: "vehicle_license_plate",
2804
- type: "text",
2805
- source: "vehicle.vehicle.licensePlate",
2806
- default: null
2807
- },
2808
- {
2809
- name: "vehicle_wheelchair_accessible",
2810
- type: "text",
2811
- source: "vehicle.vehicle.wheelchairAccessible",
2812
- default: null
2813
- },
2814
- {
2815
- name: "timestamp",
2816
- type: "text",
2817
- source: "vehicle.timestamp",
2818
- default: null
2819
- },
2820
- {
2821
- name: "created_timestamp",
2822
- type: "integer",
2823
- required: true
2824
- },
2825
- {
2826
- name: "expiration_timestamp",
2827
- type: "integer",
2828
- required: true
2829
- }
2830
- ]
2831
- };
2832
-
2833
- // src/models/gtfs-realtime/service-alerts.ts
2834
- var serviceAlerts = {
2835
- filenameBase: "service_alerts",
2836
- extension: "gtfs-realtime",
2837
- schema: [
2838
- {
2839
- name: "id",
2840
- type: "text",
2841
- required: true,
2842
- primary: true,
2843
- index: true,
2844
- source: "id",
2845
- prefix: true
2846
- },
2847
- {
2848
- name: "active_period",
2849
- type: "json",
2850
- source: "alert.activePeriod"
2851
- },
2852
- {
2853
- name: "cause",
2854
- type: "text",
2855
- source: "alert.cause"
2856
- },
2857
- {
2858
- name: "effect",
2859
- type: "text",
2860
- source: "alert.effect"
2861
- },
2862
- {
2863
- name: "url",
2864
- type: "text",
2865
- source: "alert.url.translation[0].text",
2866
- default: ""
2867
- },
2868
- {
2869
- name: "start_time",
2870
- type: "text",
2871
- required: true,
2872
- source: "alert.activePeriod[0].start",
2873
- default: ""
2874
- },
2875
- {
2876
- name: "end_time",
2877
- type: "text",
2878
- required: true,
2879
- source: "alert.activePeriod[0].end",
2880
- default: ""
2881
- },
2882
- {
2883
- name: "header_text",
2884
- type: "text",
2885
- required: true,
2886
- source: "alert.headerText.translation[0].text",
2887
- default: ""
2888
- },
2889
- {
2890
- name: "description_text",
2891
- type: "text",
2892
- required: true,
2893
- source: "alert.descriptionText.translation[0].text",
2894
- default: ""
2895
- },
2896
- {
2897
- name: "tts_header_text",
2898
- type: "text",
2899
- source: "alert.ttsHeaderText.translation[0].text"
2900
- },
2901
- {
2902
- name: "tts_description_text",
2903
- type: "text",
2904
- source: "alert.ttsDescriptionText.translation[0].text"
2905
- },
2906
- {
2907
- name: "severity_level",
2908
- type: "text",
2909
- source: "alert.severityLevel"
2910
- },
2911
- {
2912
- name: "created_timestamp",
2913
- type: "integer",
2914
- required: true
2915
- },
2916
- {
2917
- name: "expiration_timestamp",
2918
- type: "integer",
2919
- required: true
2920
- }
2921
- ]
2922
- };
2923
-
2924
- // src/models/gtfs-realtime/service-alert-informed_entities.ts
2925
- var serviceAlertInformedEntities = {
2926
- filenameBase: "service_alert_informed_entities",
2927
- extension: "gtfs-realtime",
2928
- schema: [
2929
- {
2930
- name: "alert_id",
2931
- type: "text",
2932
- required: true,
2933
- primary: true,
2934
- source: "parent.id",
2935
- prefix: true
2936
- },
2937
- {
2938
- name: "stop_id",
2939
- type: "text",
2940
- index: true,
2941
- source: "stopId",
2942
- default: null,
2943
- prefix: true
2944
- },
2945
- {
2946
- name: "route_id",
2947
- type: "text",
2948
- index: true,
2949
- source: "routeId",
2950
- default: null,
2951
- prefix: true
2952
- },
2953
- {
2954
- name: "route_type",
2955
- type: "integer",
2956
- index: true,
2957
- source: "routeType",
2958
- default: null
2959
- },
2960
- {
2961
- name: "trip_id",
2962
- type: "text",
2963
- index: true,
2964
- source: "trip.tripId",
2965
- default: null,
2966
- prefix: true
2967
- },
2968
- {
2969
- name: "direction_id",
2970
- type: "integer",
2971
- index: true,
2972
- source: "directionId",
2973
- default: null
2974
- },
2975
- {
2976
- name: "created_timestamp",
2977
- type: "integer",
2978
- required: true
2979
- },
2980
- {
2981
- name: "expiration_timestamp",
2982
- type: "integer",
2983
- required: true
2984
- }
2985
- ]
2986
- };
2987
-
2988
- // src/models/ods/deadhead-times.ts
2989
- var deadheadTimes = {
2990
- filenameBase: "deadhead_times",
2991
- filenameExtension: "txt",
2992
- nonstandard: true,
2993
- extension: "ods",
2994
- schema: [
2995
- {
2996
- name: "deadhead_id",
2997
- type: "text",
2998
- required: true,
2999
- index: true,
3000
- primary: true,
3001
- prefix: true
3002
- },
3003
- {
3004
- name: "arrival_time",
3005
- type: "time",
3006
- required: true
3007
- },
3008
- {
3009
- name: "departure_time",
3010
- type: "time",
3011
- required: true
3012
- },
3013
- {
3014
- name: "ops_location_id",
3015
- type: "text",
3016
- prefix: true
3017
- },
3018
- {
3019
- name: "stop_id",
3020
- type: "text",
3021
- prefix: true
3022
- },
3023
- {
3024
- name: "location_sequence",
3025
- type: "integer",
3026
- required: true,
3027
- primary: true,
3028
- min: 0,
3029
- index: true
3030
- },
3031
- {
3032
- name: "shape_dist_traveled",
3033
- type: "real",
3034
- min: 0
3035
- }
3036
- ]
3037
- };
3038
-
3039
- // src/models/ods/deadheads.ts
3040
- var deadheads = {
3041
- filenameBase: "deadheads",
3042
- filenameExtension: "txt",
3043
- nonstandard: true,
3044
- extension: "ods",
3045
- schema: [
3046
- {
3047
- name: "deadhead_id",
3048
- type: "text",
3049
- primary: true,
3050
- required: true,
3051
- prefix: true
3052
- },
3053
- {
3054
- name: "service_id",
3055
- type: "text",
3056
- required: true,
3057
- prefix: true
3058
- },
3059
- {
3060
- name: "block_id",
3061
- type: "text",
3062
- required: true,
3063
- index: true,
3064
- prefix: true
3065
- },
3066
- {
3067
- name: "shape_id",
3068
- type: "text",
3069
- index: true,
3070
- prefix: true
3071
- },
3072
- {
3073
- name: "to_trip_id",
3074
- type: "text",
3075
- index: true,
3076
- prefix: true
3077
- },
3078
- {
3079
- name: "from_trip_id",
3080
- type: "text",
3081
- index: true,
3082
- prefix: true
3083
- },
3084
- {
3085
- name: "to_deadhead_id",
3086
- type: "text",
3087
- index: true,
3088
- prefix: true
3089
- },
3090
- {
3091
- name: "from_deadhead_id",
3092
- type: "text",
3093
- index: true,
3094
- prefix: true
3095
- }
3096
- ]
3097
- };
3098
-
3099
- // src/models/ods/ops-locations.ts
3100
- var opsLocations = {
3101
- filenameBase: "ops_locations",
3102
- filenameExtension: "txt",
3103
- nonstandard: true,
3104
- extension: "ods",
3105
- schema: [
3106
- {
3107
- name: "ops_location_id",
3108
- type: "text",
3109
- primary: true,
3110
- required: true,
3111
- prefix: true
3112
- },
3113
- {
3114
- name: "ops_location_code",
3115
- type: "text"
3116
- },
3117
- {
3118
- name: "ops_location_name",
3119
- type: "text",
3120
- required: true,
3121
- nocase: true
3122
- },
3123
- {
3124
- name: "ops_location_desc",
3125
- type: "text",
3126
- nocase: true
3127
- },
3128
- {
3129
- name: "ops_location_lat",
3130
- type: "real",
3131
- required: true,
3132
- min: -90,
3133
- max: 90
3134
- },
3135
- {
3136
- name: "ops_location_lon",
3137
- type: "real",
3138
- required: true,
3139
- min: -180,
3140
- max: 180
3141
- }
3142
- ]
3143
- };
3144
-
3145
- // src/models/ods/run-events.ts
3146
- var runEvents = {
3147
- filenameBase: "run_event",
3148
- filenameExtension: "txt",
3149
- nonstandard: true,
3150
- extension: "ods",
3151
- schema: [
3152
- {
3153
- name: "run_event_id",
3154
- type: "text",
3155
- primary: true,
3156
- required: true,
3157
- prefix: true
3158
- },
3159
- {
3160
- name: "piece_id",
3161
- type: "text",
3162
- required: true,
3163
- prefix: true
3164
- },
3165
- {
3166
- name: "event_type",
3167
- type: "integer",
3168
- required: true,
3169
- min: 0,
3170
- index: true
3171
- },
3172
- {
3173
- name: "event_name",
3174
- type: "text",
3175
- nocase: true
3176
- },
3177
- {
3178
- name: "event_time",
3179
- type: "text",
3180
- required: true
3181
- },
3182
- {
3183
- name: "event_duration",
3184
- type: "integer",
3185
- required: true,
3186
- min: 0
3187
- },
3188
- {
3189
- name: "event_from_location_type",
3190
- type: "integer",
3191
- min: 0,
3192
- max: 1,
3193
- index: true
3194
- },
3195
- {
3196
- name: "event_from_location_id",
3197
- type: "text",
3198
- prefix: true
3199
- },
3200
- {
3201
- name: "event_to_location_type",
3202
- type: "integer",
3203
- min: 0,
3204
- max: 1,
3205
- index: true
3206
- },
3207
- {
3208
- name: "event_to_location_id",
3209
- type: "text",
3210
- prefix: true
3211
- }
3212
- ]
3213
- };
3214
-
3215
- // src/models/ods/runs-pieces.ts
3216
- var runsPieces = {
3217
- filenameBase: "runs_pieces",
3218
- filenameExtension: "txt",
3219
- nonstandard: true,
3220
- extension: "ods",
3221
- schema: [
3222
- {
3223
- name: "run_id",
3224
- type: "text",
3225
- required: true
3226
- },
3227
- {
3228
- name: "piece_id",
3229
- type: "text",
3230
- primary: true,
3231
- required: true
3232
- },
3233
- {
3234
- name: "start_type",
3235
- type: "integer",
3236
- required: true,
3237
- min: 0,
3238
- max: 2,
3239
- index: true
3240
- },
3241
- {
3242
- name: "start_trip_id",
3243
- type: "text",
3244
- required: true,
3245
- index: true
3246
- },
3247
- {
3248
- name: "start_trip_position",
3249
- type: "integer",
3250
- min: 0
3251
- },
3252
- {
3253
- name: "end_type",
3254
- type: "integer",
3255
- required: true,
3256
- min: 0,
3257
- max: 2,
3258
- index: true
3259
- },
3260
- {
3261
- name: "end_trip_id",
3262
- type: "text",
3263
- required: true,
3264
- index: true
3265
- },
3266
- {
3267
- name: "end_trip_position",
3268
- type: "integer",
3269
- min: 0
3270
- }
3271
- ]
3272
- };
3273
-
3274
- // src/models/tides/devices.ts
3275
- var devices = {
3276
- filenameBase: "devices",
3277
- filenameExtension: "txt",
3278
- nonstandard: true,
3279
- extension: "tides",
3280
- schema: [
3281
- {
3282
- name: "device_id",
3283
- type: "text",
3284
- required: true,
3285
- primary: true
3286
- },
3287
- {
3288
- name: "stop_id",
3289
- type: "text"
3290
- },
3291
- {
3292
- name: "vehicle_id",
3293
- type: "text"
3294
- },
3295
- {
3296
- name: "train_car_id",
3297
- type: "text"
3298
- },
3299
- {
3300
- name: "device_type",
3301
- type: "text"
3302
- },
3303
- {
3304
- name: "device_vendor",
3305
- type: "text"
3306
- },
3307
- {
3308
- name: "device_model",
3309
- type: "text"
3310
- },
3311
- {
3312
- name: "device_location",
3313
- type: "text"
3314
- }
3315
- ]
3316
- };
3317
-
3318
- // src/models/tides/fare-transactions.ts
3319
- var fareTransactions = {
3320
- filenameBase: "fare_transactions",
3321
- filenameExtension: "txt",
3322
- nonstandard: true,
3323
- extension: "tides",
3324
- schema: [
3325
- {
3326
- name: "transaction_id",
3327
- type: "text",
3328
- required: true,
3329
- index: true
3330
- },
3331
- {
3332
- name: "service_date",
3333
- type: "date",
3334
- required: true
3335
- },
3336
- {
3337
- name: "event_timestamp",
3338
- type: "text",
3339
- required: true
3340
- },
3341
- {
3342
- name: "location_ping_id",
3343
- type: "text"
3344
- },
3345
- {
3346
- name: "amount",
3347
- type: "real",
3348
- required: true
3349
- },
3350
- {
3351
- name: "currency_type",
3352
- type: "text"
3353
- },
3354
- {
3355
- name: "fare_action",
3356
- type: "text",
3357
- required: true
3358
- },
3359
- {
3360
- name: "trip_id_performed",
3361
- type: "text"
3362
- },
3363
- {
3364
- name: "trip_id_scheduled",
3365
- type: "text"
3366
- },
3367
- {
3368
- name: "pattern_id",
3369
- type: "text"
3370
- },
3371
- {
3372
- name: "trip_stop_sequence",
3373
- type: "integer",
3374
- min: 1
3375
- },
3376
- {
3377
- name: "scheduled_stop_sequence",
3378
- type: "integer",
3379
- min: 0
3380
- },
3381
- {
3382
- name: "vehicle_id",
3383
- type: "text"
3384
- },
3385
- {
3386
- name: "device_id",
3387
- type: "text"
3388
- },
3389
- {
3390
- name: "fare_id",
3391
- type: "text"
3392
- },
3393
- {
3394
- name: "stop_id",
3395
- type: "text"
3396
- },
3397
- {
3398
- name: "num_riders",
3399
- type: "integer",
3400
- min: 0
3401
- },
3402
- {
3403
- name: "fare_media_id",
3404
- type: "text"
3405
- },
3406
- {
3407
- name: "rider_category",
3408
- type: "text"
3409
- },
3410
- {
3411
- name: "fare_product",
3412
- type: "text"
3413
- },
3414
- {
3415
- name: "fare_period",
3416
- type: "text"
3417
- },
3418
- {
3419
- name: "fare_capped",
3420
- type: "text",
3421
- required: true
3422
- },
3423
- {
3424
- name: "token_id",
3425
- type: "text"
3426
- },
3427
- {
3428
- name: "balance",
3429
- type: "real"
3430
- }
3431
- ]
3432
- };
3433
-
3434
- // src/models/tides/operators.ts
3435
- var operators = {
3436
- filenameBase: "operators",
3437
- filenameExtension: "txt",
3438
- nonstandard: true,
3439
- extension: "tides",
3440
- schema: [
3441
- {
3442
- name: "operator_id",
3443
- type: "text",
3444
- required: true,
3445
- primary: true
3446
- }
3447
- ]
3448
- };
3449
-
3450
- // src/models/tides/passenger-events.ts
3451
- var passengerEvents = {
3452
- filenameBase: "passenger_events",
3453
- filenameExtension: "txt",
3454
- nonstandard: true,
3455
- extension: "tides",
3456
- schema: [
3457
- {
3458
- name: "passenger_event_id",
3459
- type: "text",
3460
- required: true,
3461
- index: true
3462
- },
3463
- {
3464
- name: "service_date",
3465
- type: "date",
3466
- required: true
3467
- },
3468
- {
3469
- name: "event_timestamp",
3470
- type: "text",
3471
- required: true
3472
- },
3473
- {
3474
- name: "location_ping_id",
3475
- type: "text"
3476
- },
3477
- {
3478
- name: "trip_id_performed",
3479
- type: "text"
3480
- },
3481
- {
3482
- name: "trip_id_scheduled",
3483
- type: "text"
3484
- },
3485
- {
3486
- name: "trip_stop_sequence",
3487
- type: "integer",
3488
- min: 1
3489
- },
3490
- {
3491
- name: "scheduled_stop_sequence",
3492
- type: "integer",
3493
- min: 0
3494
- },
3495
- {
3496
- name: "event_type",
3497
- type: "text",
3498
- required: true
3499
- },
3500
- {
3501
- name: "vehicle_id",
3502
- type: "text",
3503
- required: true
3504
- },
3505
- {
3506
- name: "device_id",
3507
- type: "text"
3508
- },
3509
- {
3510
- name: "train_car_id",
3511
- type: "text"
3512
- },
3513
- {
3514
- name: "stop_id",
3515
- type: "text"
3516
- },
3517
- {
3518
- name: "pattern_id",
3519
- type: "text"
3520
- },
3521
- {
3522
- name: "event_count",
3523
- type: "integer",
3524
- min: 0
3525
- }
3526
- ]
3527
- };
3528
-
3529
- // src/models/tides/station-activities.ts
3530
- var stationActivities = {
3531
- filenameBase: "station_activities",
3532
- filenameExtension: "txt",
3533
- nonstandard: true,
3534
- extension: "tides",
3535
- schema: [
3536
- {
3537
- name: "service_date",
3538
- type: "date",
3539
- required: true,
3540
- primary: true
3541
- },
3542
- {
3543
- name: "stop_id",
3544
- type: "text",
3545
- required: true,
3546
- primary: true
3547
- },
3548
- {
3549
- name: "time_period_start",
3550
- type: "text",
3551
- required: true,
3552
- primary: true
3553
- },
3554
- {
3555
- name: "time_period_end",
3556
- type: "text",
3557
- required: true,
3558
- primary: true
3559
- },
3560
- {
3561
- name: "time_period_category",
3562
- type: "text"
3563
- },
3564
- {
3565
- name: "total_entries",
3566
- type: "integer",
3567
- min: 0
3568
- },
3569
- {
3570
- name: "total_exits",
3571
- type: "integer",
3572
- min: 0
3573
- },
3574
- {
3575
- name: "number_of_transactions",
3576
- type: "integer",
3577
- min: 0
3578
- },
3579
- {
3580
- name: "bike_entries",
3581
- type: "integer",
3582
- min: 0
3583
- },
3584
- {
3585
- name: "bike_exits",
3586
- type: "integer",
3587
- min: 0
3588
- },
3589
- {
3590
- name: "ramp_entries",
3591
- type: "integer",
3592
- min: 0
3593
- },
3594
- {
3595
- name: "ramp_exits",
3596
- type: "integer",
3597
- min: 0
3598
- }
3599
- ]
3600
- };
3601
-
3602
- // src/models/tides/stop-visits.ts
3603
- var stopVisits = {
3604
- filenameBase: "stop_visits",
3605
- filenameExtension: "txt",
3606
- nonstandard: true,
3607
- extension: "tides",
3608
- schema: [
3609
- {
3610
- name: "service_date",
3611
- type: "date",
3612
- required: true,
3613
- primary: true
3614
- },
3615
- {
3616
- name: "trip_id_performed",
3617
- type: "text",
3618
- required: true,
3619
- primary: true
3620
- },
3621
- {
3622
- name: "trip_stop_sequence",
3623
- type: "integer",
3624
- min: 1,
3625
- required: true,
3626
- primary: true
3627
- },
3628
- {
3629
- name: "scheduled_stop_sequence",
3630
- type: "integer",
3631
- min: 0
3632
- },
3633
- {
3634
- name: "pattern_id",
3635
- type: "text"
3636
- },
3637
- {
3638
- name: "vehicle_id",
3639
- type: "text"
3640
- },
3641
- {
3642
- name: "dwell",
3643
- type: "integer",
3644
- min: 0
3645
- },
3646
- {
3647
- name: "stop_id",
3648
- type: "text"
3649
- },
3650
- {
3651
- name: "timepoint",
3652
- type: "text"
3653
- },
3654
- {
3655
- name: "schedule_arrival_time",
3656
- type: "text"
3657
- },
3658
- {
3659
- name: "schedule_departure_time",
3660
- type: "text"
3661
- },
3662
- {
3663
- name: "actual_arrival_time",
3664
- type: "text"
3665
- },
3666
- {
3667
- name: "actual_departure_time",
3668
- type: "text"
3669
- },
3670
- {
3671
- name: "distance",
3672
- type: "integer",
3673
- min: 0
3674
- },
3675
- {
3676
- name: "boarding_1",
3677
- type: "integer",
3678
- min: 0
3679
- },
3680
- {
3681
- name: "alighting_1",
3682
- type: "integer",
3683
- min: 0
3684
- },
3685
- {
3686
- name: "boarding_2",
3687
- type: "integer",
3688
- min: 0
3689
- },
3690
- {
3691
- name: "alighting_2",
3692
- type: "integer",
3693
- min: 0
3694
- },
3695
- {
3696
- name: "departure_load",
3697
- type: "integer",
3698
- min: 0
3699
- },
3700
- {
3701
- name: "door_open",
3702
- type: "text"
3703
- },
3704
- {
3705
- name: "door_close",
3706
- type: "text"
3707
- },
3708
- {
3709
- name: "door_status",
3710
- type: "text"
3711
- },
3712
- {
3713
- name: "ramp_deployed_time",
3714
- type: "text"
3715
- },
3716
- {
3717
- name: "ramp_failure",
3718
- type: "text"
3719
- },
3720
- {
3721
- name: "kneel_deployed_time",
3722
- type: "integer",
3723
- min: 0
3724
- },
3725
- {
3726
- name: "lift_deployed_time",
3727
- type: "integer",
3728
- min: 0
3729
- },
3730
- {
3731
- name: "bike_rack_deployed",
3732
- type: "text"
3733
- },
3734
- {
3735
- name: "bike_load",
3736
- type: "integer",
3737
- min: 0
3738
- },
3739
- {
3740
- name: "revenue",
3741
- type: "real"
3742
- },
3743
- {
3744
- name: "number_of_transactions",
3745
- type: "integer",
3746
- min: 0
3747
- },
3748
- {
3749
- name: "schedule_relationship",
3750
- type: "text"
3751
- }
3752
- ]
3753
- };
3754
-
3755
- // src/models/tides/train-cars.ts
3756
- var trainCars = {
3757
- filenameBase: "train_cars",
3758
- filenameExtension: "txt",
3759
- nonstandard: true,
3760
- extension: "tides",
3761
- schema: [
3762
- {
3763
- name: "train_car_id",
3764
- type: "text",
3765
- required: true,
3766
- primary: true
3767
- },
3768
- {
3769
- name: "model_name",
3770
- type: "text"
3771
- },
3772
- {
3773
- name: "facility_name",
3774
- type: "text"
3775
- },
3776
- {
3777
- name: "capacity_seated",
3778
- type: "integer",
3779
- min: 0
3780
- },
3781
- {
3782
- name: "capacity_wheelchair",
3783
- type: "integer",
3784
- min: 0
3785
- },
3786
- {
3787
- name: "capacity_bike",
3788
- type: "integer",
3789
- min: 0
3790
- },
3791
- {
3792
- name: "bike_rack",
3793
- type: "text"
3794
- },
3795
- {
3796
- name: "capacity_standing",
3797
- type: "integer",
3798
- min: 0
3799
- },
3800
- {
3801
- name: "train_car_type",
3802
- type: "text"
3803
- }
3804
- ]
3805
- };
3806
-
3807
- // src/models/tides/trips-performed.ts
3808
- var tripsPerformed = {
3809
- filenameBase: "trips_performed",
3810
- filenameExtension: "txt",
3811
- nonstandard: true,
3812
- extension: "tides",
3813
- schema: [
3814
- {
3815
- name: "service_date",
3816
- type: "date",
3817
- required: true,
3818
- primary: true
3819
- },
3820
- {
3821
- name: "trip_id_performed",
3822
- type: "text",
3823
- required: true,
3824
- primary: true
3825
- },
3826
- {
3827
- name: "vehicle_id",
3828
- type: "text",
3829
- required: true
3830
- },
3831
- {
3832
- name: "trip_id_scheduled",
3833
- type: "text"
3834
- },
3835
- {
3836
- name: "route_id",
3837
- type: "text"
3838
- },
3839
- {
3840
- name: "route_type",
3841
- type: "text"
3842
- },
3843
- {
3844
- name: "ntd_mode",
3845
- type: "text"
3846
- },
3847
- {
3848
- name: "route_type_agency",
3849
- type: "text"
3850
- },
3851
- {
3852
- name: "shape_id",
3853
- type: "text"
3854
- },
3855
- {
3856
- name: "pattern_id",
3857
- type: "text"
3858
- },
3859
- {
3860
- name: "direction_id",
3861
- type: "integer",
3862
- min: 0,
3863
- max: 1
3864
- },
3865
- {
3866
- name: "operator_id",
3867
- type: "text"
3868
- },
3869
- {
3870
- name: "block_id",
3871
- type: "text"
3872
- },
3873
- {
3874
- name: "trip_start_stop_id",
3875
- type: "text"
3876
- },
3877
- {
3878
- name: "trip_end_stop_id",
3879
- type: "text"
3880
- },
3881
- {
3882
- name: "schedule_trip_start",
3883
- type: "text"
3884
- },
3885
- {
3886
- name: "schedule_trip_end",
3887
- type: "text"
3888
- },
3889
- {
3890
- name: "actual_trip_start",
3891
- type: "text"
3892
- },
3893
- {
3894
- name: "actual_trip_end",
3895
- type: "text"
3896
- },
3897
- {
3898
- name: "trip_type",
3899
- type: "text"
3900
- },
3901
- {
3902
- name: "schedule_relationship",
3903
- type: "text"
3904
- }
3905
- ]
3906
- };
3907
-
3908
- // src/models/tides/vehicle-train-cars.ts
3909
- var vehicleTrainCars = {
3910
- filenameBase: "vehicle_train_cars",
3911
- filenameExtension: "txt",
3912
- nonstandard: true,
3913
- extension: "tides",
3914
- schema: [
3915
- {
3916
- name: "vehicle_id",
3917
- type: "text",
3918
- required: true,
3919
- primary: true
3920
- },
3921
- {
3922
- name: "train_car_id",
3923
- type: "text",
3924
- required: true,
3925
- primary: true
3926
- },
3927
- {
3928
- name: "train_car_order",
3929
- type: "integer",
3930
- min: 0
3931
- },
3932
- {
3933
- name: "operator_id",
3934
- type: "text"
3935
- }
3936
- ]
3937
- };
3938
-
3939
- // src/models/tides/vehicle-locations.ts
3940
- var vehicleLocations = {
3941
- filenameBase: "vehicle_locations",
3942
- filenameExtension: "txt",
3943
- nonstandard: true,
3944
- extension: "tides",
3945
- schema: [
3946
- {
3947
- name: "location_ping_id",
3948
- type: "text",
3949
- required: true,
3950
- primary: true
3951
- },
3952
- {
3953
- name: "service_date",
3954
- type: "date"
3955
- },
3956
- {
3957
- name: "event_timestamp",
3958
- type: "text",
3959
- required: true
3960
- },
3961
- {
3962
- name: "trip_id_performed",
3963
- type: "text"
3964
- },
3965
- {
3966
- name: "trip_id_scheduled",
3967
- type: "text"
3968
- },
3969
- {
3970
- name: "trip_stop_sequence",
3971
- type: "integer",
3972
- min: 1
3973
- },
3974
- {
3975
- name: "scheduled_stop_sequence",
3976
- type: "integer",
3977
- min: 0
3978
- },
3979
- {
3980
- name: "vehicle_id",
3981
- type: "text",
3982
- required: true
3983
- },
3984
- {
3985
- name: "device_id",
3986
- type: "text"
3987
- },
3988
- {
3989
- name: "pattern_id",
3990
- type: "text"
3991
- },
3992
- {
3993
- name: "stop_id",
3994
- type: "text"
3995
- },
3996
- {
3997
- name: "current_status",
3998
- type: "text"
3999
- },
4000
- {
4001
- name: "latitude",
4002
- type: "real",
4003
- min: -90,
4004
- max: 90
4005
- },
4006
- {
4007
- name: "longitude",
4008
- type: "real",
4009
- min: -180,
4010
- max: 180
4011
- },
4012
- {
4013
- name: "gps_quality",
4014
- type: "text"
4015
- },
4016
- {
4017
- name: "heading",
4018
- type: "real",
4019
- min: 0,
4020
- max: 360
4021
- },
4022
- {
4023
- name: "speed",
4024
- type: "real",
4025
- min: 0
4026
- },
4027
- {
4028
- name: "odometer",
4029
- type: "real",
4030
- min: 0
4031
- },
4032
- {
4033
- name: "schedule_deviation",
4034
- type: "integer"
4035
- },
4036
- {
4037
- name: "headway_deviation",
4038
- type: "integer"
4039
- },
4040
- {
4041
- name: "trip_type",
4042
- type: "text"
4043
- },
4044
- {
4045
- name: "schedule_relationship",
4046
- type: "text"
4047
- }
4048
- ]
4049
- };
4050
-
4051
- // src/models/tides/vehicles.ts
4052
- var vehicles = {
4053
- filenameBase: "vehicles",
4054
- filenameExtension: "txt",
4055
- nonstandard: true,
4056
- extension: "tides",
4057
- schema: [
4058
- {
4059
- name: "vehicle_id",
4060
- type: "text",
4061
- required: true,
4062
- primary: true
4063
- },
4064
- {
4065
- name: "vehicle_start",
4066
- type: "text"
4067
- },
4068
- {
4069
- name: "vehicle_end",
4070
- type: "text"
4071
- },
4072
- {
4073
- name: "model_name",
4074
- type: "text"
4075
- },
4076
- {
4077
- name: "facility_name",
4078
- type: "text"
4079
- },
4080
- {
4081
- name: "capacity_seated",
4082
- type: "integer",
4083
- min: 0
4084
- },
4085
- {
4086
- name: "capacity_wheelchair",
4087
- type: "integer",
4088
- min: 0
4089
- },
4090
- {
4091
- name: "capacity_bike",
4092
- type: "integer",
4093
- min: 0
4094
- },
4095
- {
4096
- name: "bike_rack",
4097
- type: "text"
4098
- },
4099
- {
4100
- name: "capacity_standing",
4101
- type: "integer",
4102
- min: 0
4103
- }
4104
- ]
4105
- };
4106
-
4107
- // src/lib/db.ts
4108
- import Database from "better-sqlite3";
4109
-
4110
- // src/lib/errors.ts
4111
- var GtfsError = class extends Error {
4112
- code;
4113
- category;
4114
- isOperational;
4115
- statusCode;
4116
- details;
4117
- constructor(message, options) {
4118
- super(message, { cause: options.cause });
4119
- this.name = "GtfsError";
4120
- this.code = options.code;
4121
- this.category = options.category;
4122
- this.isOperational = options.isOperational ?? true;
4123
- this.statusCode = options.statusCode;
4124
- this.details = options.details;
4125
- }
4126
- };
4127
-
4128
- // src/lib/db.ts
4129
- var dbs = {};
4130
- function setupDb(sqlitePath) {
4131
- const db = new Database(untildify(sqlitePath));
4132
- db.pragma("journal_mode = OFF");
4133
- db.pragma("synchronous = OFF");
4134
- db.pragma("temp_store = MEMORY");
4135
- dbs[sqlitePath] = db;
4136
- return db;
4137
- }
4138
- function openDb(config = null) {
4139
- if (config) {
4140
- const { sqlitePath = ":memory:", db } = config;
4141
- if (db) {
4142
- return db;
4143
- }
4144
- if (dbs[sqlitePath]) {
4145
- return dbs[sqlitePath];
4146
- }
4147
- return setupDb(sqlitePath);
4148
- }
4149
- if (Object.keys(dbs).length === 0) {
4150
- return setupDb(":memory:");
4151
- }
4152
- if (Object.keys(dbs).length === 1) {
4153
- const filename = Object.keys(dbs)[0];
4154
- return dbs[filename];
4155
- }
4156
- if (Object.keys(dbs).length > 1) {
4157
- throw new GtfsError(
4158
- "Multiple databases open, please specify which one to use.",
4159
- {
4160
- code: "GTFS_DB_OPERATION_FAILED" /* GTFS_DB_OPERATION_FAILED */,
4161
- category: "database" /* DATABASE */,
4162
- details: { openDatabaseCount: Object.keys(dbs).length }
4163
- }
4164
- );
4165
- }
4166
- throw new GtfsError("Unable to find database connection.", {
4167
- code: "GTFS_DB_OPERATION_FAILED" /* GTFS_DB_OPERATION_FAILED */,
4168
- category: "database" /* DATABASE */
4169
- });
4170
- }
4171
-
4172
- // src/lib/geojson-utils.ts
4173
- import {
4174
- cloneDeep,
4175
- compact,
4176
- filter,
4177
- groupBy,
4178
- last,
4179
- omit as omit2,
4180
- sortBy,
4181
- omitBy
4182
- } from "lodash-es";
4183
- import { feature, featureCollection } from "@turf/helpers";
4184
-
4185
- // src/lib/import-gtfs-realtime.ts
4186
- import GtfsRealtimeBindings from "gtfs-realtime-bindings";
4187
- import mapSeries from "promise-map-series";
4188
- import { get } from "lodash-es";
4189
-
4190
- // src/lib/utils.ts
4191
- import sqlString from "sqlstring-sqlite";
4192
- import Long from "long";
4193
- function setDefaultConfig(initialConfig) {
4194
- const defaults = {
4195
- sqlitePath: ":memory:",
4196
- ignoreDuplicates: false,
4197
- ignoreErrors: false,
4198
- gtfsRealtimeExpirationSeconds: 0,
4199
- verbose: true,
4200
- downloadTimeout: 3e4
4201
- };
4202
- return {
4203
- ...defaults,
4204
- ...initialConfig
4205
- };
4206
- }
4207
- function formatCurrency(value, currency) {
4208
- const parts = new Intl.NumberFormat(void 0, {
4209
- style: "currency",
4210
- currency
4211
- }).formatToParts(value);
4212
- const integerPart = parts.find((part) => part.type === "integer")?.value ?? "0";
4213
- const fractionPart = parts.find((part) => part.type === "fraction")?.value ?? "";
4214
- return `${integerPart}${fractionPart !== "" ? `.${fractionPart}` : ""}`;
4215
- }
4216
- function pluralize(singularWord, pluralWord, count) {
4217
- return count === 1 ? singularWord : pluralWord;
4218
- }
4219
-
4220
- // src/lib/export.ts
4221
- import path3 from "path";
4222
- import { writeFile as writeFile2 } from "fs/promises";
4223
- import { without, compact as compact2 } from "lodash-es";
4224
- import { stringify } from "csv-stringify";
4225
- import sqlString2 from "sqlstring-sqlite";
4226
- import mapSeries3 from "promise-map-series";
4227
- var getAgencies = (db, config) => {
4228
- try {
4229
- return db.prepare("SELECT agency_name FROM agency;").all();
4230
- } catch {
4231
- if (config.sqlitePath === ":memory:") {
4232
- throw new Error(
4233
- 'No agencies found in SQLite. You are using an in-memory database - if running this from command line be sure to specify a value for `sqlitePath` in config.json other than ":memory:".'
4234
- );
4235
- }
4236
- throw new Error(
4237
- "No agencies found in SQLite. Be sure to first import data into SQLite using `gtfs-import` or `importGtfs(config);`"
4238
- );
4239
- }
4240
- };
4241
- var exportGtfs = async (initialConfig) => {
4242
- const config = setDefaultConfig(initialConfig);
4243
- const db = openDb(config);
4244
- const agencies = getAgencies(db, config);
4245
- const agencyCount = agencies.length;
4246
- if (agencyCount === 0) {
4247
- throw new Error(
4248
- "No agencies found in SQLite. Be sure to first import data into SQLite using `gtfs-import` or `importGtfs(config);`"
4249
- );
4250
- } else if (agencyCount > 1) {
4251
- logWarning(config)(
4252
- "More than one agency is defined in config.json. Export will merge all into one GTFS file."
4253
- );
4254
- }
4255
- log(config)(
4256
- `Starting GTFS export for ${pluralize(
4257
- "agency",
4258
- "agencies",
4259
- agencyCount
4260
- )} using SQLite database at ${config.sqlitePath}`
4261
- );
4262
- const folderName = generateFolderName(agencies[0].agency_name);
4263
- const defaultExportPath = path3.join(process.cwd(), "gtfs-export", folderName);
4264
- const exportPath = untildify(config.exportPath || defaultExportPath);
4265
- await prepDirectory(exportPath);
4266
- const modelsToExport = Object.values(models_exports).filter(
4267
- (model) => model.extension !== "gtfs-realtime"
4268
- );
4269
- const exportedFiles = await mapSeries3(
4270
- modelsToExport,
4271
- async (model) => {
4272
- const filePath = path3.join(
4273
- exportPath,
4274
- `${model.filenameBase}.${model.filenameExtension}`
4275
- );
4276
- const tableName = sqlString2.escapeId(model.filenameBase);
4277
- const lines = db.prepare(`SELECT * FROM ${tableName};`).all();
4278
- if (!lines || lines.length === 0) {
4279
- if (!model.nonstandard) {
4280
- log(config)(
4281
- `Skipping (no data) - ${model.filenameBase}.${model.filenameExtension}\r`
4282
- );
4283
- }
4284
- return;
4285
- }
4286
- if (model.filenameExtension === "txt") {
4287
- const excludeColumns = [];
4288
- if (model.filenameBase === "routes") {
4289
- const routesWithAgencyId = db.prepare(
4290
- "SELECT agency_id FROM routes WHERE agency_id IS NOT NULL;"
4291
- ).all();
4292
- if (!routesWithAgencyId || routesWithAgencyId.length === 0) {
4293
- excludeColumns.push("agency_id");
4294
- }
4295
- } else if (model.filenameBase === "fare_attributes") {
4296
- for (const line of lines) {
4297
- line.price = formatCurrency(
4298
- line.price,
4299
- line.currency_type
4300
- );
4301
- }
4302
- } else if (model.filenameBase === "fare_products") {
4303
- for (const line of lines) {
4304
- line.amount = formatCurrency(
4305
- line.amount,
4306
- line.currency
4307
- );
4308
- }
4309
- }
4310
- const columns = without(
4311
- model.schema.map((column) => column.name),
4312
- ...excludeColumns
4313
- );
4314
- const fileText = await stringify(lines, { columns, header: true });
4315
- await writeFile2(filePath, fileText);
4316
- } else if (model.filenameExtension === "geojson") {
4317
- const fileText = lines?.[0].geojson ?? "";
4318
- await writeFile2(filePath, fileText);
4319
- } else {
4320
- throw new Error(
4321
- `Unexpected filename extension: ${model.filenameExtension}`
4322
- );
4323
- }
4324
- log(config)(
4325
- `Exporting - ${model.filenameBase}.${model.filenameExtension}\r`
4326
- );
4327
- return `${model.filenameBase}.${model.filenameExtension}`;
4328
- }
4329
- );
4330
- if (compact2(exportedFiles).length === 0) {
4331
- log(config)(
4332
- "No GTFS data exported. Be sure to first import data into SQLite."
4333
- );
4334
- return;
4335
- }
4336
- log(config)(`Completed GTFS export to ${exportPath}`);
4337
- log(config)(
4338
- `Completed GTFS export for ${pluralize("agency", "agencies", agencyCount)}
4339
- `
4340
- );
4341
- };
4342
-
4343
- // src/lib/advancedQuery.ts
4344
- import sqlString3 from "sqlstring-sqlite";
4345
-
4346
- // src/lib/gtfs/routes.ts
4347
- import { omit as omit3, pick } from "lodash-es";
4348
-
4349
- // src/lib/gtfs/shapes.ts
4350
- import { compact as compact3, omit as omit4, pick as pick2 } from "lodash-es";
4351
- import { featureCollection as featureCollection2 } from "@turf/helpers";
4352
-
4353
- // src/lib/gtfs/stops.ts
4354
- import { omit as omit5, orderBy, pick as pick3 } from "lodash-es";
4355
-
4356
- // src/lib/gtfs/stop-times.ts
4357
- import { omit as omit6 } from "lodash-es";
4358
- import sqlString4 from "sqlstring-sqlite";
4359
-
4360
- // src/lib/gtfs/trips.ts
4361
- import { omit as omit7 } from "lodash-es";
4362
- import sqlString5 from "sqlstring-sqlite";
4363
-
4364
- // src/bin/gtfs-export.ts
4365
- var pe = new PrettyError();
4366
- var argv = yargs(hideBin(process.argv)).usage("Usage: $0 --configPath ./config.json").help().option("c", {
4367
- alias: "configPath",
4368
- describe: "Path to config file",
4369
- type: "string"
7
+ //#region src/bin/gtfs-export.ts
8
+ const pe = new PrettyError();
9
+ const argv = yargs(hideBin(process.argv)).usage("Usage: $0 --configPath ./config.json").help().option("c", {
10
+ alias: "configPath",
11
+ describe: "Path to config file",
12
+ type: "string"
4370
13
  }).option("sqlitePath", {
4371
- describe: "Path to SQLite database",
4372
- type: "string"
14
+ describe: "Path to SQLite database",
15
+ type: "string"
4373
16
  }).parseSync();
4374
- var handleError = (error = "Unknown Error") => {
4375
- process.stdout.write(`
4376
- ${formatError(error)}
4377
- `);
4378
- console.error(pe.render(error));
4379
- process.exit(1);
17
+ const handleError = (error = "Unknown Error") => {
18
+ process.stdout.write(`\n${formatError(error)}\n`);
19
+ console.error(pe.render(error));
20
+ process.exit(1);
4380
21
  };
4381
- var setupExport = async () => {
4382
- const config = await getConfig(argv);
4383
- await exportGtfs(config);
4384
- process.exit();
22
+ const setupExport = async () => {
23
+ await exportGtfs(await getConfig(argv));
24
+ process.exit();
4385
25
  };
4386
26
  setupExport().catch(handleError);
27
+
28
+ //#endregion
29
+ export { };
4387
30
  //# sourceMappingURL=gtfs-export.js.map