@tmlmobilidade/go-types-gtfs-validator 20260828.1636.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/rules.js ADDED
@@ -0,0 +1,594 @@
1
+ /* * */
2
+ export const gtfsValidationRulesConfig = {
3
+ agency_email_valid_address: {
4
+ depends_on: ['agency_file_required'],
5
+ severity: 'warning',
6
+ },
7
+ agency_fare_url_valid_url: {
8
+ depends_on: ['agency_file_required'],
9
+ severity: 'warning',
10
+ },
11
+ agency_file_required: {
12
+ severity: 'error',
13
+ },
14
+ agency_id_matched_with_agency_name: {
15
+ depends_on: ['agency_file_required'],
16
+ severity: 'error',
17
+ },
18
+ agency_id_unique: {
19
+ depends_on: ['agency_file_required'],
20
+ severity: 'error',
21
+ },
22
+ agency_lang_valid_language_tag: {
23
+ depends_on: ['agency_file_required'],
24
+ severity: 'ignore',
25
+ },
26
+ agency_name_present: {
27
+ depends_on: ['agency_file_required'],
28
+ severity: 'warning',
29
+ },
30
+ agency_phone_valid_phone_number: {
31
+ depends_on: ['agency_file_required'],
32
+ severity: 'error',
33
+ },
34
+ agency_timezone_valid_id: {
35
+ depends_on: ['agency_file_required'],
36
+ severity: 'error',
37
+ },
38
+ agency_url_valid_url: {
39
+ depends_on: ['agency_file_required'],
40
+ severity: 'error',
41
+ },
42
+ calendar_dates_day_type_valid_input: {
43
+ depends_on: ['calendar_dates_file_required'],
44
+ options: ['1', '2', '3'],
45
+ severity: 'error',
46
+ },
47
+ calendar_dates_exception_date_valid_yyyymmdd: {
48
+ depends_on: ['calendar_dates_file_required'],
49
+ severity: 'error',
50
+ },
51
+ calendar_dates_exception_type_add_or_remove_service: {
52
+ depends_on: ['calendar_dates_file_required'],
53
+ options: ['0', '1'],
54
+ severity: 'error',
55
+ },
56
+ calendar_dates_file_required: {
57
+ severity: 'warning',
58
+ },
59
+ calendar_dates_period_valid_input: {
60
+ depends_on: ['calendar_dates_file_required'],
61
+ options: ['1', '2', '3'],
62
+ severity: 'error',
63
+ },
64
+ calendar_dates_service_id_references_calendar: {
65
+ depends_on: ['calendar_dates_file_required'],
66
+ severity: 'error',
67
+ },
68
+ calendar_end_date_valid_yyyymmdd: {
69
+ depends_on: ['calendar_file_required'],
70
+ severity: 'error',
71
+ },
72
+ calendar_file_required: {
73
+ severity: 'error',
74
+ },
75
+ calendar_friday_valid_input: {
76
+ depends_on: ['calendar_file_required'],
77
+ severity: 'error',
78
+ },
79
+ calendar_monday_valid_input: {
80
+ depends_on: ['calendar_file_required'],
81
+ severity: 'error',
82
+ },
83
+ calendar_saturday_valid_input: {
84
+ depends_on: ['calendar_file_required'],
85
+ severity: 'error',
86
+ },
87
+ calendar_service_id_unique_non_empty: {
88
+ depends_on: ['calendar_file_required'],
89
+ severity: 'error',
90
+ },
91
+ calendar_start_date_valid_yyyymmdd: {
92
+ depends_on: ['calendar_file_required'],
93
+ severity: 'error',
94
+ },
95
+ calendar_sunday_valid_input: {
96
+ depends_on: ['calendar_file_required'],
97
+ severity: 'error',
98
+ },
99
+ calendar_thursday_valid_input: {
100
+ depends_on: ['calendar_file_required'],
101
+ severity: 'error',
102
+ },
103
+ calendar_tuesday_valid_input: {
104
+ depends_on: ['calendar_file_required'],
105
+ severity: 'error',
106
+ },
107
+ calendar_wednesday_valid_input: {
108
+ depends_on: ['calendar_file_required'],
109
+ severity: 'error',
110
+ },
111
+ fare_attributes_agency_id_references_agency_table: {
112
+ depends_on: ['fare_attributes_file_required'],
113
+ severity: 'error',
114
+ },
115
+ fare_attributes_currency_type_valid: {
116
+ depends_on: ['fare_attributes_file_required'],
117
+ options: ['EUR'],
118
+ severity: 'error',
119
+ },
120
+ fare_attributes_file_required: {
121
+ severity: 'warning',
122
+ },
123
+ fare_attributes_payment_method_valid_gtfs_enum: {
124
+ depends_on: ['fare_attributes_file_required'],
125
+ options: ['0'],
126
+ severity: 'error',
127
+ },
128
+ fare_attributes_transfer_duration_valid_seconds_range: {
129
+ depends_on: ['fare_attributes_file_required'],
130
+ severity: 'ignore',
131
+ },
132
+ fare_attributes_transfers_valid_gtfs_enum: {
133
+ depends_on: ['fare_attributes_file_required'],
134
+ options: ['0'],
135
+ severity: 'warning',
136
+ },
137
+ fare_id_unique: {
138
+ depends_on: ['fare_attributes_file_required'],
139
+ severity: 'error',
140
+ },
141
+ fare_price_valid_non_negative_decimal: {
142
+ depends_on: ['fare_attributes_file_required'],
143
+ severity: 'error',
144
+ },
145
+ fare_rules_contains_id_references_zones_stops: {
146
+ depends_on: ['fare_rules_file_required'],
147
+ severity: 'forbidden',
148
+ },
149
+ fare_rules_destination_id_references_zones_stops: {
150
+ depends_on: ['fare_rules_file_required'],
151
+ severity: 'forbidden',
152
+ },
153
+ fare_rules_fare_id_references_fare_attributes: {
154
+ depends_on: ['fare_rules_file_required'],
155
+ severity: 'error',
156
+ },
157
+ fare_rules_file_required: {
158
+ severity: 'warning',
159
+ },
160
+ fare_rules_origin_id_references_zones_stops: {
161
+ depends_on: ['fare_rules_file_required'],
162
+ severity: 'forbidden',
163
+ },
164
+ fare_rules_route_id_references_routes: {
165
+ depends_on: ['fare_rules_file_required'],
166
+ severity: 'error',
167
+ },
168
+ feed_info_contact_email_valid_address: {
169
+ depends_on: ['feed_info_file_required'],
170
+ severity: 'error',
171
+ },
172
+ feed_info_contact_url_valid_http_url: {
173
+ depends_on: ['feed_info_file_required'],
174
+ severity: 'error',
175
+ },
176
+ feed_info_default_lang_matches_feed_lang_when_present: {
177
+ depends_on: ['feed_info_file_required'],
178
+ severity: 'error',
179
+ },
180
+ feed_info_end_date_valid_yyyymmdd_not_before_start: {
181
+ depends_on: ['feed_info_file_required'],
182
+ severity: 'error',
183
+ },
184
+ feed_info_file_required: {
185
+ severity: 'error',
186
+ },
187
+ feed_info_lang_valid_tag: {
188
+ depends_on: ['feed_info_file_required'],
189
+ options: ['pt', 'es'],
190
+ severity: 'error',
191
+ },
192
+ feed_info_publisher_name_non_empty: {
193
+ depends_on: ['feed_info_file_required'],
194
+ severity: 'error',
195
+ },
196
+ feed_info_publisher_url_valid_http_url: {
197
+ depends_on: ['feed_info_file_required'],
198
+ severity: 'error',
199
+ },
200
+ feed_info_remarks: {
201
+ depends_on: ['feed_info_file_required'],
202
+ severity: 'ignore',
203
+ },
204
+ feed_info_start_date_valid_yyyymmdd: {
205
+ depends_on: ['feed_info_file_required'],
206
+ severity: 'error',
207
+ },
208
+ feed_info_type: {
209
+ depends_on: ['feed_info_file_required'],
210
+ options: ['0', '1', '2'],
211
+ severity: 'error',
212
+ },
213
+ feed_info_version_valid_identifier: {
214
+ depends_on: ['feed_info_file_required'],
215
+ severity: 'error',
216
+ },
217
+ frequencies_file_required: {
218
+ severity: 'forbidden',
219
+ },
220
+ routes_agency_id_references_agency_table: {
221
+ depends_on: ['routes_file_required'],
222
+ severity: 'error',
223
+ },
224
+ routes_circular_valid_enum: {
225
+ depends_on: ['routes_file_required'],
226
+ options: ['0', '1'],
227
+ severity: 'error',
228
+ },
229
+ routes_color_valid_hex_string: {
230
+ depends_on: ['routes_file_required'],
231
+ severity: 'error',
232
+ },
233
+ routes_continuous_drop_off_valid_gtfs_enum: {
234
+ depends_on: ['routes_file_required'],
235
+ options: ['0', '1'],
236
+ severity: 'warning',
237
+ },
238
+ routes_continuous_pickup_valid_gtfs_enum: {
239
+ depends_on: ['routes_file_required'],
240
+ options: ['0', '1'],
241
+ severity: 'warning',
242
+ },
243
+ routes_desc_per_severity_and_content_rules: {
244
+ depends_on: ['routes_file_required'],
245
+ severity: 'ignore',
246
+ },
247
+ routes_file_required: {
248
+ severity: 'error',
249
+ },
250
+ routes_id_unique: {
251
+ depends_on: ['routes_file_required'],
252
+ severity: 'error',
253
+ },
254
+ routes_line_id: {
255
+ depends_on: ['routes_file_required'],
256
+ severity: 'error',
257
+ },
258
+ routes_line_long_name: {
259
+ depends_on: ['routes_file_required'],
260
+ severity: 'error',
261
+ },
262
+ routes_line_short_name: {
263
+ depends_on: ['routes_file_required'],
264
+ severity: 'error',
265
+ },
266
+ routes_long_name_or_short_name_present: {
267
+ depends_on: ['routes_file_required'],
268
+ severity: 'error',
269
+ },
270
+ routes_network_id_references_networks_table: {
271
+ depends_on: ['routes_file_required'],
272
+ severity: 'ignore',
273
+ },
274
+ routes_path_type_valid_enum: {
275
+ depends_on: ['routes_file_required'],
276
+ options: ['1', '2', '3'],
277
+ severity: 'error',
278
+ },
279
+ routes_remarks: {
280
+ depends_on: ['routes_file_required'],
281
+ severity: 'ignore',
282
+ },
283
+ routes_school: {
284
+ depends_on: ['routes_file_required'],
285
+ options: ['0', '1'],
286
+ severity: 'warning',
287
+ },
288
+ routes_short_name_or_long_name_present: {
289
+ depends_on: ['routes_file_required'],
290
+ severity: 'error',
291
+ },
292
+ routes_sort_order_non_negative_integer: {
293
+ depends_on: ['routes_file_required'],
294
+ severity: 'ignore',
295
+ },
296
+ routes_text_color_valid_hex_contrast: {
297
+ depends_on: ['routes_file_required'],
298
+ severity: 'error',
299
+ },
300
+ routes_type_valid_gtfs_enum: {
301
+ depends_on: ['routes_file_required'],
302
+ options: ['0', '1', '2', '3', '4', '5', '6', '7', '11', '12'],
303
+ severity: 'error',
304
+ },
305
+ routes_url_valid_http_url: {
306
+ depends_on: ['routes_file_required'],
307
+ severity: 'ignore',
308
+ },
309
+ shapes_block_distance_rows_aggregated: {
310
+ depends_on: ['shapes_file_required'],
311
+ options: ['100.0'],
312
+ severity: 'error',
313
+ },
314
+ shapes_dist_traveled_delta_mismatches_haversine_block: {
315
+ depends_on: ['shapes_file_required'],
316
+ options: ['200.0'],
317
+ severity: 'error',
318
+ },
319
+ shapes_dist_traveled_delta_mismatches_haversine_segment: {
320
+ depends_on: ['shapes_file_required'],
321
+ options: ['100.0'],
322
+ severity: 'error',
323
+ },
324
+ shapes_dist_traveled_non_decreasing_with_sequence: {
325
+ depends_on: ['shapes_file_required'],
326
+ severity: 'error',
327
+ },
328
+ shapes_dist_traveled_non_negative_monotonic: {
329
+ severity: 'error',
330
+ },
331
+ shapes_file_required: {
332
+ severity: 'error',
333
+ },
334
+ shapes_id_and_point_sequence_required: {
335
+ severity: 'error',
336
+ },
337
+ shapes_id_required: {
338
+ severity: 'error',
339
+ },
340
+ shapes_pt_lat_valid_latitude: {
341
+ severity: 'error',
342
+ },
343
+ shapes_pt_lon_valid_longitude: {
344
+ severity: 'error',
345
+ },
346
+ shapes_pt_sequence_not_repeated_within_shape: {
347
+ severity: 'error',
348
+ },
349
+ shapes_pt_sequence_strictly_increasing: {
350
+ severity: 'error',
351
+ },
352
+ shapes_sequence_position_mismatches_cumulative_traveled_distance: {
353
+ severity: 'error',
354
+ },
355
+ stop_headsign_present: {
356
+ depends_on: ['stop_times_file_required'],
357
+ severity: 'forbidden',
358
+ },
359
+ stop_times_arrival_time_ordering_with_departure_and_frequencies: {
360
+ depends_on: ['stop_times_file_required'],
361
+ severity: 'error',
362
+ },
363
+ stop_times_continuous_drop_off_valid_gtfs_enum: {
364
+ depends_on: ['stop_times_file_required'],
365
+ severity: 'warning',
366
+ },
367
+ stop_times_continuous_pickup_valid_gtfs_enum: {
368
+ depends_on: ['stop_times_file_required'],
369
+ severity: 'warning',
370
+ },
371
+ stop_times_departure_time_ordering_with_arrival_and_timepoint: {
372
+ depends_on: ['stop_times_file_required'],
373
+ severity: 'error',
374
+ },
375
+ stop_times_drop_off_booking_rule_id_references_booking_rules_or_empty: {
376
+ depends_on: ['stop_times_file_required'],
377
+ severity: 'ignore',
378
+ },
379
+ stop_times_drop_off_type_valid_gtfs_enum: {
380
+ depends_on: ['stop_times_file_required'],
381
+ severity: 'error',
382
+ },
383
+ stop_times_end_pickup_drop_off_window_valid: {
384
+ depends_on: ['stop_times_file_required'],
385
+ severity: 'ignore',
386
+ },
387
+ stop_times_file_required: {
388
+ severity: 'error',
389
+ },
390
+ stop_times_location_group_id_consistent_with_trip_id_and_stops: {
391
+ depends_on: ['stop_times_file_required'],
392
+ severity: 'error',
393
+ },
394
+ stop_times_pickup_booking_rule_id_references_booking_rules: {
395
+ depends_on: ['stop_times_file_required'],
396
+ severity: 'ignore',
397
+ },
398
+ stop_times_pickup_type_valid_gtfs_enum: {
399
+ depends_on: ['stop_times_file_required'],
400
+ severity: 'error',
401
+ },
402
+ stop_times_shape_dist_traveled_non_decreasing_on_trip: {
403
+ depends_on: ['stop_times_file_required'],
404
+ severity: 'error',
405
+ },
406
+ stop_times_start_pickup_drop_off_window_valid: {
407
+ depends_on: ['stop_times_file_required'],
408
+ severity: 'ignore',
409
+ },
410
+ stop_times_stop_id_references_stops_table: {
411
+ depends_on: ['stop_times_file_required'],
412
+ severity: 'error',
413
+ },
414
+ stop_times_trip_id_references_trips_table: {
415
+ depends_on: ['stop_times_file_required'],
416
+ severity: 'error',
417
+ },
418
+ stops_code_valid: {
419
+ depends_on: ['stops_file_required'],
420
+ severity: 'error',
421
+ },
422
+ stops_desc_valid: {
423
+ depends_on: ['stops_file_required'],
424
+ severity: 'ignore',
425
+ },
426
+ stops_file_required: {
427
+ severity: 'error',
428
+ },
429
+ stops_id_unique: {
430
+ depends_on: ['stops_file_required'],
431
+ severity: 'error',
432
+ },
433
+ stops_lat_valid_latitude_range: {
434
+ depends_on: ['stops_file_required'],
435
+ severity: 'error',
436
+ },
437
+ stops_location_type_valid_enum: {
438
+ depends_on: ['stops_file_required'],
439
+ severity: 'ignore',
440
+ },
441
+ stops_lon_valid_longitude_range: {
442
+ depends_on: ['stops_file_required'],
443
+ severity: 'error',
444
+ },
445
+ stops_name_required_by_location_type: {
446
+ depends_on: ['stops_file_required'],
447
+ severity: 'error',
448
+ },
449
+ stops_parent_station_id_valid_for_stop_hierarchy: {
450
+ depends_on: ['stops_file_required'],
451
+ severity: 'ignore',
452
+ },
453
+ stops_platform_code_valid: {
454
+ depends_on: ['stops_file_required'],
455
+ severity: 'ignore',
456
+ },
457
+ stops_public_visible_valid_enum: {
458
+ depends_on: ['stops_file_required'],
459
+ severity: 'ignore',
460
+ },
461
+ stops_short_name_valid: {
462
+ depends_on: ['stops_file_required'],
463
+ severity: 'ignore',
464
+ },
465
+ stops_timezone_valid: {
466
+ depends_on: ['stops_file_required'],
467
+ severity: 'ignore',
468
+ },
469
+ stops_tts_stop_name_valid: {
470
+ depends_on: ['stops_file_required'],
471
+ severity: 'ignore',
472
+ },
473
+ stops_url_valid_url: {
474
+ depends_on: ['stops_file_required'],
475
+ severity: 'ignore',
476
+ },
477
+ stops_wheelchair_boarding_valid_enum: {
478
+ depends_on: ['stops_file_required'],
479
+ options: ['0', '1', '2'],
480
+ severity: 'warning',
481
+ },
482
+ timepoint_valid_gtfs_enum: {
483
+ depends_on: ['stop_times_file_required'],
484
+ severity: 'warning',
485
+ },
486
+ trips_bikes_allowed_valid_gtfs_enum: {
487
+ depends_on: ['trips_file_required'],
488
+ severity: 'warning',
489
+ },
490
+ trips_block_id_in_allowed_set: {
491
+ depends_on: ['trips_file_required'],
492
+ severity: 'ignore',
493
+ },
494
+ trips_direction_id_consistent_for_all_patterns_in_trips: {
495
+ depends_on: ['trips_file_required'],
496
+ severity: 'error',
497
+ },
498
+ trips_direction_id_matches_feed_pattern_direction: {
499
+ depends_on: ['trips_file_required'],
500
+ severity: 'ignore',
501
+ },
502
+ trips_direction_id_valid_enum: {
503
+ depends_on: ['trips_file_required'],
504
+ severity: 'error',
505
+ },
506
+ trips_file_required: {
507
+ severity: 'error',
508
+ },
509
+ trips_one_pattern_id_per_shape_id_group: {
510
+ depends_on: ['trips_file_required'],
511
+ severity: 'error',
512
+ },
513
+ trips_one_shape_id_per_pattern_id_group: {
514
+ depends_on: ['trips_file_required'],
515
+ severity: 'error',
516
+ },
517
+ trips_pattern_id_matches_feed_pattern_id_syntax: {
518
+ depends_on: ['trips_file_required'],
519
+ options: [
520
+ '^[^_]{1,4}_[^_]_[^_]$',
521
+ '^[^_]{1,4}_[^_]_ASC$',
522
+ '^[^_]{1,4}_[^_]_DESC$',
523
+ '^[^_]{1,4}_[^_]_CIRC$',
524
+ ],
525
+ severity: 'error',
526
+ },
527
+ trips_pattern_id_present_and_references_consistent: {
528
+ depends_on: ['trips_file_required'],
529
+ severity: 'error',
530
+ },
531
+ trips_pattern_id_single_trip_signature_per_pattern: {
532
+ depends_on: ['trips_file_required'],
533
+ severity: 'error',
534
+ },
535
+ trips_pattern_id_trip_has_required_fields_for_grouping: {
536
+ depends_on: ['trips_file_required'],
537
+ severity: 'error',
538
+ },
539
+ trips_route_id_consistent_for_all_patterns_in_trips: {
540
+ depends_on: ['trips_file_required'],
541
+ severity: 'error',
542
+ },
543
+ trips_route_id_references_routes_table: {
544
+ depends_on: ['trips_file_required'],
545
+ severity: 'error',
546
+ },
547
+ trips_service_id_references_calendar_service: {
548
+ depends_on: ['trips_file_required'],
549
+ severity: 'error',
550
+ },
551
+ trips_shape_id_needs_to_be_the_same_as_pattern_id: {
552
+ depends_on: ['trips_file_required'],
553
+ severity: 'warning',
554
+ },
555
+ trips_shape_id_references_shapes_table_when_present: {
556
+ depends_on: ['trips_file_required'],
557
+ severity: 'error',
558
+ },
559
+ trips_stop_sequence_increasing_by_one_along_trip: {
560
+ depends_on: ['trips_file_required'],
561
+ severity: 'error',
562
+ },
563
+ trips_trip_headsign_consistent_for_all_patterns_in_trips: {
564
+ depends_on: ['trips_file_required'],
565
+ severity: 'error',
566
+ },
567
+ trips_trip_headsign_present_when_short_name_absent: {
568
+ depends_on: ['trips_file_required'],
569
+ severity: 'error',
570
+ },
571
+ trips_trip_id_limit_max_length: {
572
+ depends_on: ['trips_file_required'],
573
+ severity: 'error',
574
+ },
575
+ trips_trip_id_unique: {
576
+ depends_on: ['trips_file_required'],
577
+ severity: 'error',
578
+ },
579
+ trips_trip_path_stop_coordinates_referenced_from_stops: {
580
+ depends_on: ['trips_file_required'],
581
+ severity: 'error',
582
+ },
583
+ trips_trip_short_name_exclusivity: {
584
+ depends_on: ['trips_file_required'],
585
+ severity: 'ignore',
586
+ },
587
+ trips_wheelchair_accessible_valid_gtfs_enum: {
588
+ depends_on: ['trips_file_required'],
589
+ severity: 'warning',
590
+ },
591
+ vehicles_file_required: {
592
+ severity: 'error',
593
+ },
594
+ };
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@tmlmobilidade/go-types-gtfs-validator",
3
+ "version": "20260828.1636.54",
4
+ "author": {
5
+ "email": "iso@tmlmobilidade.pt",
6
+ "name": "TML-ISO"
7
+ },
8
+ "license": "AGPL-3.0-or-later",
9
+ "homepage": "https://go.tmlmobilidade.pt",
10
+ "bugs": {
11
+ "url": "https://github.com/tmlmobilidade/go/issues"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/tmlmobilidade/go.git"
16
+ },
17
+ "keywords": [
18
+ "public transit",
19
+ "tml",
20
+ "transportes metropolitanos de lisboa",
21
+ "go"
22
+ ],
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "type": "module",
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "main": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "scripts": {
33
+ "build": "tsc && resolve-tspaths",
34
+ "lint": "eslint ./src/ && tsc --noEmit",
35
+ "lint:fix": "eslint ./src/ --fix",
36
+ "watch": "tsc-watch --onSuccess 'resolve-tspaths'"
37
+ },
38
+ "dependencies": {
39
+ "@tmlmobilidade/go-types-gtfs": "*",
40
+ "@tmlmobilidade/go-types-shared": "*",
41
+ "zod": "3.25.76"
42
+ },
43
+ "devDependencies": {
44
+ "@tmlmobilidade/go-utils-tsconfig": "*",
45
+ "@types/node": "26.1.2",
46
+ "resolve-tspaths": "0.8.23",
47
+ "tsc-watch": "7.2.1",
48
+ "typescript": "6.0.3"
49
+ }
50
+ }