gtfs 4.17.3 → 4.17.5

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.
@@ -11,16 +11,16 @@ import { hideBin } from "yargs/helpers";
11
11
  import PrettyError from "pretty-error";
12
12
 
13
13
  // src/lib/file-utils.ts
14
- import path from "node:path";
15
- import { existsSync } from "node:fs";
16
- import { mkdir, readFile, rm } from "node:fs/promises";
14
+ import path from "path";
15
+ import { existsSync } from "fs";
16
+ import { mkdir, readFile, rm } from "fs/promises";
17
17
  import { omit, snakeCase } from "lodash-es";
18
18
  import sanitize from "sanitize-filename";
19
19
  import untildify from "untildify";
20
20
  import StreamZip from "node-stream-zip";
21
21
 
22
22
  // src/lib/log-utils.ts
23
- import { clearLine, cursorTo } from "node:readline";
23
+ import { clearLine, cursorTo } from "readline";
24
24
  import { noop } from "lodash-es";
25
25
  import * as colors from "yoctocolors";
26
26
  function log(config) {
@@ -108,6 +108,9 @@ function generateFolderName(folderName) {
108
108
  }
109
109
 
110
110
  // src/lib/import-gtfs.ts
111
+ import path2 from "path";
112
+ import { createReadStream, existsSync as existsSync2, lstatSync } from "fs";
113
+ import { cp, readdir, rename, readFile as readFile2, rm as rm2, writeFile } from "fs/promises";
111
114
  import { parse } from "csv-parse";
112
115
  import pluralize2 from "pluralize";
113
116
  import stripBomStream from "strip-bom-stream";
@@ -129,12 +132,14 @@ __export(models_exports, {
129
132
  calendarDates: () => calendarDates,
130
133
  deadheadTimes: () => deadheadTimes,
131
134
  deadheads: () => deadheads,
135
+ devices: () => devices,
132
136
  directions: () => directions,
133
137
  fareAttributes: () => fareAttributes,
134
138
  fareLegRules: () => fareLegRules,
135
139
  fareMedia: () => fareMedia,
136
140
  fareProducts: () => fareProducts,
137
141
  fareRules: () => fareRules,
142
+ fareTransactions: () => fareTransactions,
138
143
  fareTransferRules: () => fareTransferRules,
139
144
  feedInfo: () => feedInfo,
140
145
  frequencies: () => frequencies,
@@ -143,7 +148,9 @@ __export(models_exports, {
143
148
  locationGroups: () => locationGroups,
144
149
  locations: () => locations,
145
150
  networks: () => networks,
151
+ operators: () => operators,
146
152
  opsLocations: () => opsLocations,
153
+ passengerEvents: () => passengerEvents,
147
154
  pathways: () => pathways,
148
155
  rideFeedInfo: () => rideFeedInfo,
149
156
  riderCategories: () => riderCategories,
@@ -157,10 +164,12 @@ __export(models_exports, {
157
164
  serviceAlertInformedEntities: () => serviceAlertInformedEntities,
158
165
  serviceAlerts: () => serviceAlerts,
159
166
  shapes: () => shapes,
167
+ stationActivities: () => stationActivities,
160
168
  stopAreas: () => stopAreas,
161
169
  stopAttributes: () => stopAttributes,
162
170
  stopTimeUpdates: () => stopTimeUpdates,
163
171
  stopTimes: () => stopTimes,
172
+ stopVisits: () => stopVisits,
164
173
  stops: () => stops,
165
174
  timeframes: () => timeframes,
166
175
  timetableNotes: () => timetableNotes,
@@ -168,13 +177,18 @@ __export(models_exports, {
168
177
  timetablePages: () => timetablePages,
169
178
  timetableStopOrder: () => timetableStopOrder,
170
179
  timetables: () => timetables,
180
+ trainCars: () => trainCars,
171
181
  transfers: () => transfers,
172
182
  translations: () => translations,
173
183
  tripCapacity: () => tripCapacity,
174
184
  tripUpdates: () => tripUpdates,
175
185
  trips: () => trips,
176
186
  tripsDatedVehicleJourney: () => tripsDatedVehicleJourney,
177
- vehiclePositions: () => vehiclePositions
187
+ tripsPerformed: () => tripsPerformed,
188
+ vehicleLocations: () => vehicleLocations,
189
+ vehiclePositions: () => vehiclePositions,
190
+ vehicleTrainCars: () => vehicleTrainCars,
191
+ vehicles: () => vehicles
178
192
  });
179
193
 
180
194
  // src/models/gtfs/agency.ts
@@ -648,6 +662,7 @@ var fareProducts = {
648
662
  {
649
663
  name: "rider_category_id",
650
664
  type: "text",
665
+ primary: true,
651
666
  prefix: true
652
667
  },
653
668
  {
@@ -1611,6 +1626,12 @@ var trips = {
1611
1626
  type: "integer",
1612
1627
  min: 0,
1613
1628
  max: 2
1629
+ },
1630
+ {
1631
+ name: "cars_allowed",
1632
+ type: "integer",
1633
+ min: 0,
1634
+ max: 2
1614
1635
  }
1615
1636
  ]
1616
1637
  };
@@ -3222,6 +3243,839 @@ var runsPieces = {
3222
3243
  ]
3223
3244
  };
3224
3245
 
3246
+ // src/models/tides/devices.ts
3247
+ var devices = {
3248
+ filenameBase: "devices",
3249
+ filenameExtension: "txt",
3250
+ nonstandard: true,
3251
+ extension: "tides",
3252
+ schema: [
3253
+ {
3254
+ name: "device_id",
3255
+ type: "text",
3256
+ required: true,
3257
+ primary: true
3258
+ },
3259
+ {
3260
+ name: "stop_id",
3261
+ type: "text"
3262
+ },
3263
+ {
3264
+ name: "vehicle_id",
3265
+ type: "text"
3266
+ },
3267
+ {
3268
+ name: "train_car_id",
3269
+ type: "text"
3270
+ },
3271
+ {
3272
+ name: "device_type",
3273
+ type: "text"
3274
+ },
3275
+ {
3276
+ name: "device_vendor",
3277
+ type: "text"
3278
+ },
3279
+ {
3280
+ name: "device_model",
3281
+ type: "text"
3282
+ },
3283
+ {
3284
+ name: "device_location",
3285
+ type: "text"
3286
+ }
3287
+ ]
3288
+ };
3289
+
3290
+ // src/models/tides/fare-transactions.ts
3291
+ var fareTransactions = {
3292
+ filenameBase: "fare_transactions",
3293
+ filenameExtension: "txt",
3294
+ nonstandard: true,
3295
+ extension: "tides",
3296
+ schema: [
3297
+ {
3298
+ name: "transaction_id",
3299
+ type: "text",
3300
+ required: true,
3301
+ index: true
3302
+ },
3303
+ {
3304
+ name: "service_date",
3305
+ type: "date",
3306
+ required: true
3307
+ },
3308
+ {
3309
+ name: "event_timestamp",
3310
+ type: "text",
3311
+ required: true
3312
+ },
3313
+ {
3314
+ name: "location_ping_id",
3315
+ type: "text"
3316
+ },
3317
+ {
3318
+ name: "amount",
3319
+ type: "real",
3320
+ required: true
3321
+ },
3322
+ {
3323
+ name: "currency_type",
3324
+ type: "text"
3325
+ },
3326
+ {
3327
+ name: "fare_action",
3328
+ type: "text",
3329
+ required: true
3330
+ },
3331
+ {
3332
+ name: "trip_id_performed",
3333
+ type: "text"
3334
+ },
3335
+ {
3336
+ name: "trip_id_scheduled",
3337
+ type: "text"
3338
+ },
3339
+ {
3340
+ name: "pattern_id",
3341
+ type: "text"
3342
+ },
3343
+ {
3344
+ name: "trip_stop_sequence",
3345
+ type: "integer",
3346
+ min: 1
3347
+ },
3348
+ {
3349
+ name: "scheduled_stop_sequence",
3350
+ type: "integer",
3351
+ min: 0
3352
+ },
3353
+ {
3354
+ name: "vehicle_id",
3355
+ type: "text"
3356
+ },
3357
+ {
3358
+ name: "device_id",
3359
+ type: "text"
3360
+ },
3361
+ {
3362
+ name: "fare_id",
3363
+ type: "text"
3364
+ },
3365
+ {
3366
+ name: "stop_id",
3367
+ type: "text"
3368
+ },
3369
+ {
3370
+ name: "num_riders",
3371
+ type: "integer",
3372
+ min: 0
3373
+ },
3374
+ {
3375
+ name: "fare_media_id",
3376
+ type: "text"
3377
+ },
3378
+ {
3379
+ name: "rider_category",
3380
+ type: "text"
3381
+ },
3382
+ {
3383
+ name: "fare_product",
3384
+ type: "text"
3385
+ },
3386
+ {
3387
+ name: "fare_period",
3388
+ type: "text"
3389
+ },
3390
+ {
3391
+ name: "fare_capped",
3392
+ type: "text",
3393
+ required: true
3394
+ },
3395
+ {
3396
+ name: "token_id",
3397
+ type: "text"
3398
+ },
3399
+ {
3400
+ name: "balance",
3401
+ type: "real"
3402
+ }
3403
+ ]
3404
+ };
3405
+
3406
+ // src/models/tides/operators.ts
3407
+ var operators = {
3408
+ filenameBase: "operators",
3409
+ filenameExtension: "txt",
3410
+ nonstandard: true,
3411
+ extension: "tides",
3412
+ schema: [
3413
+ {
3414
+ name: "operator_id",
3415
+ type: "text",
3416
+ required: true,
3417
+ primary: true
3418
+ }
3419
+ ]
3420
+ };
3421
+
3422
+ // src/models/tides/passenger-events.ts
3423
+ var passengerEvents = {
3424
+ filenameBase: "passenger_events",
3425
+ filenameExtension: "txt",
3426
+ nonstandard: true,
3427
+ extension: "tides",
3428
+ schema: [
3429
+ {
3430
+ name: "passenger_event_id",
3431
+ type: "text",
3432
+ required: true,
3433
+ index: true
3434
+ },
3435
+ {
3436
+ name: "service_date",
3437
+ type: "date",
3438
+ required: true
3439
+ },
3440
+ {
3441
+ name: "event_timestamp",
3442
+ type: "text",
3443
+ required: true
3444
+ },
3445
+ {
3446
+ name: "location_ping_id",
3447
+ type: "text"
3448
+ },
3449
+ {
3450
+ name: "trip_id_performed",
3451
+ type: "text"
3452
+ },
3453
+ {
3454
+ name: "trip_id_scheduled",
3455
+ type: "text"
3456
+ },
3457
+ {
3458
+ name: "trip_stop_sequence",
3459
+ type: "integer",
3460
+ min: 1
3461
+ },
3462
+ {
3463
+ name: "scheduled_stop_sequence",
3464
+ type: "integer",
3465
+ min: 0
3466
+ },
3467
+ {
3468
+ name: "event_type",
3469
+ type: "text",
3470
+ required: true
3471
+ },
3472
+ {
3473
+ name: "vehicle_id",
3474
+ type: "text",
3475
+ required: true
3476
+ },
3477
+ {
3478
+ name: "device_id",
3479
+ type: "text"
3480
+ },
3481
+ {
3482
+ name: "train_car_id",
3483
+ type: "text"
3484
+ },
3485
+ {
3486
+ name: "stop_id",
3487
+ type: "text"
3488
+ },
3489
+ {
3490
+ name: "pattern_id",
3491
+ type: "text"
3492
+ },
3493
+ {
3494
+ name: "event_count",
3495
+ type: "integer",
3496
+ min: 0
3497
+ }
3498
+ ]
3499
+ };
3500
+
3501
+ // src/models/tides/station-activities.ts
3502
+ var stationActivities = {
3503
+ filenameBase: "station_activities",
3504
+ filenameExtension: "txt",
3505
+ nonstandard: true,
3506
+ extension: "tides",
3507
+ schema: [
3508
+ {
3509
+ name: "service_date",
3510
+ type: "date",
3511
+ required: true,
3512
+ primary: true
3513
+ },
3514
+ {
3515
+ name: "stop_id",
3516
+ type: "text",
3517
+ required: true,
3518
+ primary: true
3519
+ },
3520
+ {
3521
+ name: "time_period_start",
3522
+ type: "text",
3523
+ required: true,
3524
+ primary: true
3525
+ },
3526
+ {
3527
+ name: "time_period_end",
3528
+ type: "text",
3529
+ required: true,
3530
+ primary: true
3531
+ },
3532
+ {
3533
+ name: "time_period_category",
3534
+ type: "text"
3535
+ },
3536
+ {
3537
+ name: "total_entries",
3538
+ type: "integer",
3539
+ min: 0
3540
+ },
3541
+ {
3542
+ name: "total_exits",
3543
+ type: "integer",
3544
+ min: 0
3545
+ },
3546
+ {
3547
+ name: "number_of_transactions",
3548
+ type: "integer",
3549
+ min: 0
3550
+ },
3551
+ {
3552
+ name: "bike_entries",
3553
+ type: "integer",
3554
+ min: 0
3555
+ },
3556
+ {
3557
+ name: "bike_exits",
3558
+ type: "integer",
3559
+ min: 0
3560
+ },
3561
+ {
3562
+ name: "ramp_entries",
3563
+ type: "integer",
3564
+ min: 0
3565
+ },
3566
+ {
3567
+ name: "ramp_exits",
3568
+ type: "integer",
3569
+ min: 0
3570
+ }
3571
+ ]
3572
+ };
3573
+
3574
+ // src/models/tides/stop-visits.ts
3575
+ var stopVisits = {
3576
+ filenameBase: "stop_visits",
3577
+ filenameExtension: "txt",
3578
+ nonstandard: true,
3579
+ extension: "tides",
3580
+ schema: [
3581
+ {
3582
+ name: "service_date",
3583
+ type: "date",
3584
+ required: true,
3585
+ primary: true
3586
+ },
3587
+ {
3588
+ name: "trip_id_performed",
3589
+ type: "text",
3590
+ required: true,
3591
+ primary: true
3592
+ },
3593
+ {
3594
+ name: "trip_stop_sequence",
3595
+ type: "integer",
3596
+ min: 1,
3597
+ required: true,
3598
+ primary: true
3599
+ },
3600
+ {
3601
+ name: "scheduled_stop_sequence",
3602
+ type: "integer",
3603
+ min: 0
3604
+ },
3605
+ {
3606
+ name: "pattern_id",
3607
+ type: "text"
3608
+ },
3609
+ {
3610
+ name: "vehicle_id",
3611
+ type: "text"
3612
+ },
3613
+ {
3614
+ name: "dwell",
3615
+ type: "integer",
3616
+ min: 0
3617
+ },
3618
+ {
3619
+ name: "stop_id",
3620
+ type: "text"
3621
+ },
3622
+ {
3623
+ name: "timepoint",
3624
+ type: "text"
3625
+ },
3626
+ {
3627
+ name: "schedule_arrival_time",
3628
+ type: "text"
3629
+ },
3630
+ {
3631
+ name: "schedule_departure_time",
3632
+ type: "text"
3633
+ },
3634
+ {
3635
+ name: "actual_arrival_time",
3636
+ type: "text"
3637
+ },
3638
+ {
3639
+ name: "actual_departure_time",
3640
+ type: "text"
3641
+ },
3642
+ {
3643
+ name: "distance",
3644
+ type: "integer",
3645
+ min: 0
3646
+ },
3647
+ {
3648
+ name: "boarding_1",
3649
+ type: "integer",
3650
+ min: 0
3651
+ },
3652
+ {
3653
+ name: "alighting_1",
3654
+ type: "integer",
3655
+ min: 0
3656
+ },
3657
+ {
3658
+ name: "boarding_2",
3659
+ type: "integer",
3660
+ min: 0
3661
+ },
3662
+ {
3663
+ name: "alighting_2",
3664
+ type: "integer",
3665
+ min: 0
3666
+ },
3667
+ {
3668
+ name: "departure_load",
3669
+ type: "integer",
3670
+ min: 0
3671
+ },
3672
+ {
3673
+ name: "door_open",
3674
+ type: "text"
3675
+ },
3676
+ {
3677
+ name: "door_close",
3678
+ type: "text"
3679
+ },
3680
+ {
3681
+ name: "door_status",
3682
+ type: "text"
3683
+ },
3684
+ {
3685
+ name: "ramp_deployed_time",
3686
+ type: "text"
3687
+ },
3688
+ {
3689
+ name: "ramp_failure",
3690
+ type: "text"
3691
+ },
3692
+ {
3693
+ name: "kneel_deployed_time",
3694
+ type: "integer",
3695
+ min: 0
3696
+ },
3697
+ {
3698
+ name: "lift_deployed_time",
3699
+ type: "integer",
3700
+ min: 0
3701
+ },
3702
+ {
3703
+ name: "bike_rack_deployed",
3704
+ type: "text"
3705
+ },
3706
+ {
3707
+ name: "bike_load",
3708
+ type: "integer",
3709
+ min: 0
3710
+ },
3711
+ {
3712
+ name: "revenue",
3713
+ type: "real"
3714
+ },
3715
+ {
3716
+ name: "number_of_transactions",
3717
+ type: "integer",
3718
+ min: 0
3719
+ },
3720
+ {
3721
+ name: "schedule_relationship",
3722
+ type: "text"
3723
+ }
3724
+ ]
3725
+ };
3726
+
3727
+ // src/models/tides/train-cars.ts
3728
+ var trainCars = {
3729
+ filenameBase: "train_cars",
3730
+ filenameExtension: "txt",
3731
+ nonstandard: true,
3732
+ extension: "tides",
3733
+ schema: [
3734
+ {
3735
+ name: "train_car_id",
3736
+ type: "text",
3737
+ required: true,
3738
+ primary: true
3739
+ },
3740
+ {
3741
+ name: "model_name",
3742
+ type: "text"
3743
+ },
3744
+ {
3745
+ name: "facility_name",
3746
+ type: "text"
3747
+ },
3748
+ {
3749
+ name: "capacity_seated",
3750
+ type: "integer",
3751
+ min: 0
3752
+ },
3753
+ {
3754
+ name: "capacity_wheelchair",
3755
+ type: "integer",
3756
+ min: 0
3757
+ },
3758
+ {
3759
+ name: "capacity_bike",
3760
+ type: "integer",
3761
+ min: 0
3762
+ },
3763
+ {
3764
+ name: "bike_rack",
3765
+ type: "text"
3766
+ },
3767
+ {
3768
+ name: "capacity_standing",
3769
+ type: "integer",
3770
+ min: 0
3771
+ },
3772
+ {
3773
+ name: "train_car_type",
3774
+ type: "text"
3775
+ }
3776
+ ]
3777
+ };
3778
+
3779
+ // src/models/tides/trips-performed.ts
3780
+ var tripsPerformed = {
3781
+ filenameBase: "trips_performed",
3782
+ filenameExtension: "txt",
3783
+ nonstandard: true,
3784
+ extension: "tides",
3785
+ schema: [
3786
+ {
3787
+ name: "service_date",
3788
+ type: "date",
3789
+ required: true,
3790
+ primary: true
3791
+ },
3792
+ {
3793
+ name: "trip_id_performed",
3794
+ type: "text",
3795
+ required: true,
3796
+ primary: true
3797
+ },
3798
+ {
3799
+ name: "vehicle_id",
3800
+ type: "text",
3801
+ required: true
3802
+ },
3803
+ {
3804
+ name: "trip_id_scheduled",
3805
+ type: "text"
3806
+ },
3807
+ {
3808
+ name: "route_id",
3809
+ type: "text"
3810
+ },
3811
+ {
3812
+ name: "route_type",
3813
+ type: "text"
3814
+ },
3815
+ {
3816
+ name: "ntd_mode",
3817
+ type: "text"
3818
+ },
3819
+ {
3820
+ name: "route_type_agency",
3821
+ type: "text"
3822
+ },
3823
+ {
3824
+ name: "shape_id",
3825
+ type: "text"
3826
+ },
3827
+ {
3828
+ name: "pattern_id",
3829
+ type: "text"
3830
+ },
3831
+ {
3832
+ name: "direction_id",
3833
+ type: "integer",
3834
+ min: 0,
3835
+ max: 1
3836
+ },
3837
+ {
3838
+ name: "operator_id",
3839
+ type: "text"
3840
+ },
3841
+ {
3842
+ name: "block_id",
3843
+ type: "text"
3844
+ },
3845
+ {
3846
+ name: "trip_start_stop_id",
3847
+ type: "text"
3848
+ },
3849
+ {
3850
+ name: "trip_end_stop_id",
3851
+ type: "text"
3852
+ },
3853
+ {
3854
+ name: "schedule_trip_start",
3855
+ type: "text"
3856
+ },
3857
+ {
3858
+ name: "schedule_trip_end",
3859
+ type: "text"
3860
+ },
3861
+ {
3862
+ name: "actual_trip_start",
3863
+ type: "text"
3864
+ },
3865
+ {
3866
+ name: "actual_trip_end",
3867
+ type: "text"
3868
+ },
3869
+ {
3870
+ name: "trip_type",
3871
+ type: "text"
3872
+ },
3873
+ {
3874
+ name: "schedule_relationship",
3875
+ type: "text"
3876
+ }
3877
+ ]
3878
+ };
3879
+
3880
+ // src/models/tides/vehicle-train-cars.ts
3881
+ var vehicleTrainCars = {
3882
+ filenameBase: "vehicle_train_cars",
3883
+ filenameExtension: "txt",
3884
+ nonstandard: true,
3885
+ extension: "tides",
3886
+ schema: [
3887
+ {
3888
+ name: "vehicle_id",
3889
+ type: "text",
3890
+ required: true,
3891
+ primary: true
3892
+ },
3893
+ {
3894
+ name: "train_car_id",
3895
+ type: "text",
3896
+ required: true,
3897
+ primary: true
3898
+ },
3899
+ {
3900
+ name: "train_car_order",
3901
+ type: "integer",
3902
+ min: 0
3903
+ },
3904
+ {
3905
+ name: "operator_id",
3906
+ type: "text"
3907
+ }
3908
+ ]
3909
+ };
3910
+
3911
+ // src/models/tides/vehicle-locations.ts
3912
+ var vehicleLocations = {
3913
+ filenameBase: "vehicle_locations",
3914
+ filenameExtension: "txt",
3915
+ nonstandard: true,
3916
+ extension: "tides",
3917
+ schema: [
3918
+ {
3919
+ name: "location_ping_id",
3920
+ type: "text",
3921
+ required: true,
3922
+ primary: true
3923
+ },
3924
+ {
3925
+ name: "service_date",
3926
+ type: "date"
3927
+ },
3928
+ {
3929
+ name: "event_timestamp",
3930
+ type: "text",
3931
+ required: true
3932
+ },
3933
+ {
3934
+ name: "trip_id_performed",
3935
+ type: "text"
3936
+ },
3937
+ {
3938
+ name: "trip_id_scheduled",
3939
+ type: "text"
3940
+ },
3941
+ {
3942
+ name: "trip_stop_sequence",
3943
+ type: "integer",
3944
+ min: 1
3945
+ },
3946
+ {
3947
+ name: "scheduled_stop_sequence",
3948
+ type: "integer",
3949
+ min: 0
3950
+ },
3951
+ {
3952
+ name: "vehicle_id",
3953
+ type: "text",
3954
+ required: true
3955
+ },
3956
+ {
3957
+ name: "device_id",
3958
+ type: "text"
3959
+ },
3960
+ {
3961
+ name: "pattern_id",
3962
+ type: "text"
3963
+ },
3964
+ {
3965
+ name: "stop_id",
3966
+ type: "text"
3967
+ },
3968
+ {
3969
+ name: "current_status",
3970
+ type: "text"
3971
+ },
3972
+ {
3973
+ name: "latitude",
3974
+ type: "real",
3975
+ min: -90,
3976
+ max: 90
3977
+ },
3978
+ {
3979
+ name: "longitude",
3980
+ type: "real",
3981
+ min: -180,
3982
+ max: 180
3983
+ },
3984
+ {
3985
+ name: "gps_quality",
3986
+ type: "text"
3987
+ },
3988
+ {
3989
+ name: "heading",
3990
+ type: "real",
3991
+ min: 0,
3992
+ max: 360
3993
+ },
3994
+ {
3995
+ name: "speed",
3996
+ type: "real",
3997
+ min: 0
3998
+ },
3999
+ {
4000
+ name: "odometer",
4001
+ type: "real",
4002
+ min: 0
4003
+ },
4004
+ {
4005
+ name: "schedule_deviation",
4006
+ type: "integer"
4007
+ },
4008
+ {
4009
+ name: "headway_deviation",
4010
+ type: "integer"
4011
+ },
4012
+ {
4013
+ name: "trip_type",
4014
+ type: "text"
4015
+ },
4016
+ {
4017
+ name: "schedule_relationship",
4018
+ type: "text"
4019
+ }
4020
+ ]
4021
+ };
4022
+
4023
+ // src/models/tides/vehicles.ts
4024
+ var vehicles = {
4025
+ filenameBase: "vehicles",
4026
+ filenameExtension: "txt",
4027
+ nonstandard: true,
4028
+ extension: "tides",
4029
+ schema: [
4030
+ {
4031
+ name: "vehicle_id",
4032
+ type: "text",
4033
+ required: true,
4034
+ primary: true
4035
+ },
4036
+ {
4037
+ name: "vehicle_start",
4038
+ type: "text"
4039
+ },
4040
+ {
4041
+ name: "vehicle_end",
4042
+ type: "text"
4043
+ },
4044
+ {
4045
+ name: "model_name",
4046
+ type: "text"
4047
+ },
4048
+ {
4049
+ name: "facility_name",
4050
+ type: "text"
4051
+ },
4052
+ {
4053
+ name: "capacity_seated",
4054
+ type: "integer",
4055
+ min: 0
4056
+ },
4057
+ {
4058
+ name: "capacity_wheelchair",
4059
+ type: "integer",
4060
+ min: 0
4061
+ },
4062
+ {
4063
+ name: "capacity_bike",
4064
+ type: "integer",
4065
+ min: 0
4066
+ },
4067
+ {
4068
+ name: "bike_rack",
4069
+ type: "text"
4070
+ },
4071
+ {
4072
+ name: "capacity_standing",
4073
+ type: "integer",
4074
+ min: 0
4075
+ }
4076
+ ]
4077
+ };
4078
+
3225
4079
  // src/lib/db.ts
3226
4080
  import Database from "better-sqlite3";
3227
4081
  import untildify2 from "untildify";
@@ -3306,8 +4160,8 @@ function formatCurrency(value, currency) {
3306
4160
  }
3307
4161
 
3308
4162
  // src/lib/export.ts
3309
- import path2 from "node:path";
3310
- import { writeFile } from "node:fs/promises";
4163
+ import path3 from "path";
4164
+ import { writeFile as writeFile2 } from "fs/promises";
3311
4165
  import { without, compact as compact2 } from "lodash-es";
3312
4166
  import pluralize3 from "pluralize";
3313
4167
  import { stringify } from "csv-stringify";
@@ -3350,7 +4204,7 @@ var exportGtfs = async (initialConfig) => {
3350
4204
  )} using SQLite database at ${config.sqlitePath}`
3351
4205
  );
3352
4206
  const folderName = generateFolderName(agencies[0].agency_name);
3353
- const defaultExportPath = path2.join(process.cwd(), "gtfs-export", folderName);
4207
+ const defaultExportPath = path3.join(process.cwd(), "gtfs-export", folderName);
3354
4208
  const exportPath = untildify4(config.exportPath || defaultExportPath);
3355
4209
  await prepDirectory(exportPath);
3356
4210
  const modelsToExport = Object.values(models_exports).filter(
@@ -3359,7 +4213,7 @@ var exportGtfs = async (initialConfig) => {
3359
4213
  const exportedFiles = await mapSeries3(
3360
4214
  modelsToExport,
3361
4215
  async (model) => {
3362
- const filePath = path2.join(
4216
+ const filePath = path3.join(
3363
4217
  exportPath,
3364
4218
  `${model.filenameBase}.${model.filenameExtension}`
3365
4219
  );
@@ -3396,10 +4250,10 @@ var exportGtfs = async (initialConfig) => {
3396
4250
  ...excludeColumns
3397
4251
  );
3398
4252
  const fileText = await stringify(lines, { columns, header: true });
3399
- await writeFile(filePath, fileText);
4253
+ await writeFile2(filePath, fileText);
3400
4254
  } else if (model.filenameExtension === "geojson") {
3401
4255
  const fileText = lines?.[0].geojson ?? "";
3402
- await writeFile(filePath, fileText);
4256
+ await writeFile2(filePath, fileText);
3403
4257
  } else {
3404
4258
  throw new Error(
3405
4259
  `Unexpected filename extension: ${model.filenameExtension}`