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