gtfs 3.1.3 → 3.1.4

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.
Files changed (107) hide show
  1. package/.eslintrc.json +14 -19
  2. package/.husky/pre-commit +4 -0
  3. package/.prettierrc.js +4 -0
  4. package/CHANGELOG.md +156 -0
  5. package/README.md +113 -126
  6. package/bin/gtfs-export.js +4 -5
  7. package/bin/gtfs-import.js +6 -7
  8. package/config-sample-full.json +2 -7
  9. package/lib/db.js +4 -2
  10. package/lib/export.js +26 -9
  11. package/lib/file-utils.js +26 -9
  12. package/lib/geojson-utils.js +51 -38
  13. package/lib/gtfs/agencies.js +8 -2
  14. package/lib/gtfs/attributions.js +8 -2
  15. package/lib/gtfs/calendar-dates.js +8 -2
  16. package/lib/gtfs/calendars.js +8 -2
  17. package/lib/gtfs/fare-attributes.js +8 -2
  18. package/lib/gtfs/fare-rules.js +8 -2
  19. package/lib/gtfs/feed-info.js +8 -2
  20. package/lib/gtfs/frequencies.js +8 -2
  21. package/lib/gtfs/levels.js +8 -2
  22. package/lib/gtfs/pathways.js +8 -2
  23. package/lib/gtfs/routes.js +15 -4
  24. package/lib/gtfs/shapes.js +49 -18
  25. package/lib/gtfs/stop-times.js +8 -2
  26. package/lib/gtfs/stops.js +45 -16
  27. package/lib/gtfs/transfers.js +8 -2
  28. package/lib/gtfs/translations.js +8 -2
  29. package/lib/gtfs/trips.js +8 -2
  30. package/lib/gtfs-ride/board-alights.js +8 -2
  31. package/lib/gtfs-ride/ride-feed-infos.js +8 -2
  32. package/lib/gtfs-ride/rider-trips.js +8 -2
  33. package/lib/gtfs-ride/riderships.js +8 -2
  34. package/lib/gtfs-ride/trip-capacities.js +8 -2
  35. package/lib/import.js +198 -123
  36. package/lib/log-utils.js +8 -4
  37. package/lib/non-standard/directions.js +8 -2
  38. package/lib/non-standard/stop-attributes.js +8 -2
  39. package/lib/non-standard/timetable-notes-references.js +13 -3
  40. package/lib/non-standard/timetable-notes.js +8 -2
  41. package/lib/non-standard/timetable-pages.js +8 -2
  42. package/lib/non-standard/timetable-stop-order.js +13 -3
  43. package/lib/non-standard/timetables.js +8 -2
  44. package/lib/utils.js +22 -11
  45. package/models/gtfs/agency.js +11 -11
  46. package/models/gtfs/attributions.js +14 -14
  47. package/models/gtfs/calendar-dates.js +7 -7
  48. package/models/gtfs/calendar.js +12 -12
  49. package/models/gtfs/fare-attributes.js +9 -9
  50. package/models/gtfs/fare-rules.js +8 -8
  51. package/models/gtfs/feed-info.js +12 -12
  52. package/models/gtfs/frequencies.js +10 -10
  53. package/models/gtfs/levels.js +5 -5
  54. package/models/gtfs/pathways.js +14 -14
  55. package/models/gtfs/routes.js +14 -14
  56. package/models/gtfs/shapes.js +8 -8
  57. package/models/gtfs/stop-times.js +17 -17
  58. package/models/gtfs/stops.js +17 -17
  59. package/models/gtfs/transfers.js +7 -7
  60. package/models/gtfs/translations.js +10 -10
  61. package/models/gtfs/trips.js +12 -12
  62. package/models/gtfs-ride/board-alight.js +24 -24
  63. package/models/gtfs-ride/ride-feed-info.js +8 -8
  64. package/models/gtfs-ride/rider-trip.js +21 -21
  65. package/models/gtfs-ride/ridership.js +23 -23
  66. package/models/gtfs-ride/trip-capacity.js +10 -10
  67. package/models/models.js +1 -1
  68. package/models/non-standard/directions.js +6 -6
  69. package/models/non-standard/stop-attributes.js +5 -5
  70. package/models/non-standard/timetable-notes-references.js +9 -9
  71. package/models/non-standard/timetable-notes.js +5 -5
  72. package/models/non-standard/timetable-pages.js +5 -5
  73. package/models/non-standard/timetable-stop-order.js +6 -6
  74. package/models/non-standard/timetables.js +27 -27
  75. package/package.json +10 -2
  76. package/test/mocha/export-gtfs.js +63 -40
  77. package/test/mocha/get-agencies.js +11 -11
  78. package/test/mocha/get-attributions.js +1 -1
  79. package/test/mocha/get-board-alights.js +1 -1
  80. package/test/mocha/get-calendar-dates.js +22 -21
  81. package/test/mocha/get-calendars.js +8 -8
  82. package/test/mocha/get-db.js +9 -2
  83. package/test/mocha/get-directions.js +1 -1
  84. package/test/mocha/get-fare-attributes.js +3 -3
  85. package/test/mocha/get-fare-rules.js +8 -10
  86. package/test/mocha/get-feed-info.js +1 -1
  87. package/test/mocha/get-frequencies.js +1 -1
  88. package/test/mocha/get-levels.js +1 -1
  89. package/test/mocha/get-pathways.js +1 -1
  90. package/test/mocha/get-rider-trips.js +1 -1
  91. package/test/mocha/get-riderships.js +1 -1
  92. package/test/mocha/get-routes.js +9 -13
  93. package/test/mocha/get-shapes-as-geojson.js +3 -3
  94. package/test/mocha/get-shapes.js +28 -36
  95. package/test/mocha/get-stop-attributes.js +1 -1
  96. package/test/mocha/get-stops-as-geojson.js +2 -2
  97. package/test/mocha/get-stops.js +59 -48
  98. package/test/mocha/get-stoptimes.js +9 -7
  99. package/test/mocha/get-timetable-pages.js +1 -1
  100. package/test/mocha/get-timetable-stop-orders.js +1 -1
  101. package/test/mocha/get-timetables.js +1 -1
  102. package/test/mocha/get-transfers.js +1 -1
  103. package/test/mocha/get-translations.js +1 -1
  104. package/test/mocha/get-trip-capacities.js +1 -1
  105. package/test/mocha/get-trips.js +3 -3
  106. package/test/mocha/import-gtfs.js +59 -42
  107. package/test/test-config.js +9 -4
package/lib/utils.js CHANGED
@@ -10,7 +10,9 @@ export function validateConfigForImport(config) {
10
10
 
11
11
  for (const [index, agency] of config.agencies.entries()) {
12
12
  if (!agency.path && !agency.url) {
13
- throw new Error(`No Agency \`url\` or \`path\` specified in config for agency index ${index}.`);
13
+ throw new Error(
14
+ `No Agency \`url\` or \`path\` specified in config for agency index ${index}.`
15
+ );
14
16
  }
15
17
  }
16
18
 
@@ -22,7 +24,7 @@ export function validateConfigForImport(config) {
22
24
  */
23
25
  export function setDefaultConfig(initialConfig) {
24
26
  const defaults = {
25
- sqlitePath: ':memory:'
27
+ sqlitePath: ':memory:',
26
28
  };
27
29
 
28
30
  return Object.assign(defaults, initialConfig);
@@ -32,23 +34,28 @@ export function setDefaultConfig(initialConfig) {
32
34
  * Calculate seconds from midnight for HH:mm:ss
33
35
  */
34
36
  export function calculateSecondsFromMidnight(time) {
35
- const split = time.split(':').map(d => Number.parseInt(d, 10));
37
+ const split = time.split(':').map((d) => Number.parseInt(d, 10));
36
38
  if (split.length !== 3) {
37
39
  return null;
38
40
  }
39
41
 
40
- return (split[0] * 3600) + (split[1] * 60) + split[2];
42
+ return split[0] * 3600 + split[1] * 60 + split[2];
41
43
  }
42
44
 
43
45
  export function formatSelectClause(fields) {
44
- const selectItem = fields.length > 0 ? fields.map(fieldName => sqlString.escapeId(fieldName)).join(', ') : '*';
46
+ const selectItem =
47
+ fields.length > 0
48
+ ? fields.map((fieldName) => sqlString.escapeId(fieldName)).join(', ')
49
+ : '*';
45
50
 
46
51
  return `SELECT ${selectItem}`;
47
52
  }
48
53
 
49
54
  export function formatWhereClause(key, value) {
50
55
  if (Array.isArray(value)) {
51
- return `${sqlString.escapeId(key)} IN (${value.map(v => sqlString.escape(v)).join(', ')})`;
56
+ return `${sqlString.escapeId(key)} IN (${value
57
+ .map((v) => sqlString.escape(v))
58
+ .join(', ')})`;
52
59
  }
53
60
 
54
61
  if (value === null) {
@@ -63,7 +70,9 @@ export function formatWhereClauses(query) {
63
70
  return '';
64
71
  }
65
72
 
66
- const whereClauses = Object.entries(query).map(([key, value]) => formatWhereClause(key, value));
73
+ const whereClauses = Object.entries(query).map(([key, value]) =>
74
+ formatWhereClause(key, value)
75
+ );
67
76
  return `WHERE ${whereClauses.join(' AND ')}`;
68
77
  }
69
78
 
@@ -73,10 +82,12 @@ export function formatOrderByClause(orderBy) {
73
82
  if (orderBy.length > 0) {
74
83
  orderByClause += 'ORDER BY ';
75
84
 
76
- orderByClause += orderBy.map(([key, value]) => {
77
- const direction = value === 'DESC' ? 'DESC' : 'ASC';
78
- return `${sqlString.escapeId(key)} ${direction}`;
79
- }).join(', ');
85
+ orderByClause += orderBy
86
+ .map(([key, value]) => {
87
+ const direction = value === 'DESC' ? 'DESC' : 'ASC';
88
+ return `${sqlString.escapeId(key)} ${direction}`;
89
+ })
90
+ .join(', ');
80
91
  }
81
92
 
82
93
  return orderByClause;
@@ -4,44 +4,44 @@ const model = {
4
4
  {
5
5
  name: 'id',
6
6
  type: 'integer',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'agency_id',
11
- type: 'varchar(255)'
11
+ type: 'varchar(255)',
12
12
  },
13
13
  {
14
14
  name: 'agency_name',
15
15
  type: 'varchar(255)',
16
- required: true
16
+ required: true,
17
17
  },
18
18
  {
19
19
  name: 'agency_url',
20
20
  type: 'varchar(2047)',
21
- required: true
21
+ required: true,
22
22
  },
23
23
  {
24
24
  name: 'agency_timezone',
25
25
  type: 'varchar(255)',
26
- required: true
26
+ required: true,
27
27
  },
28
28
  {
29
29
  name: 'agency_lang',
30
- type: 'varchar(255)'
30
+ type: 'varchar(255)',
31
31
  },
32
32
  {
33
33
  name: 'agency_phone',
34
- type: 'varchar(64)'
34
+ type: 'varchar(64)',
35
35
  },
36
36
  {
37
37
  name: 'agency_fare_url',
38
- type: 'varchar(2047)'
38
+ type: 'varchar(2047)',
39
39
  },
40
40
  {
41
41
  name: 'agency_email',
42
- type: 'varchar(255)'
43
- }
44
- ]
42
+ type: 'varchar(255)',
43
+ },
44
+ ],
45
45
  };
46
46
 
47
47
  export default model;
@@ -4,60 +4,60 @@ const model = {
4
4
  {
5
5
  name: 'id',
6
6
  type: 'integer',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'attribution_id',
11
- type: 'varchar(255)'
11
+ type: 'varchar(255)',
12
12
  },
13
13
  {
14
14
  name: 'agency_id',
15
- type: 'varchar(255)'
15
+ type: 'varchar(255)',
16
16
  },
17
17
  {
18
18
  name: 'route_id',
19
- type: 'varchar(255)'
19
+ type: 'varchar(255)',
20
20
  },
21
21
  {
22
22
  name: 'trip_id',
23
- type: 'varchar(255)'
23
+ type: 'varchar(255)',
24
24
  },
25
25
  {
26
26
  name: 'organization_name',
27
27
  type: 'varchar(255)',
28
- required: true
28
+ required: true,
29
29
  },
30
30
  {
31
31
  name: 'is_producer',
32
32
  type: 'integer',
33
33
  min: 0,
34
- max: 1
34
+ max: 1,
35
35
  },
36
36
  {
37
37
  name: 'is_operator',
38
38
  type: 'integer',
39
39
  min: 0,
40
- max: 1
40
+ max: 1,
41
41
  },
42
42
  {
43
43
  name: 'is_authority',
44
44
  type: 'integer',
45
45
  min: 0,
46
- max: 1
46
+ max: 1,
47
47
  },
48
48
  {
49
49
  name: 'attribution_url',
50
- type: 'varchar(2047)'
50
+ type: 'varchar(2047)',
51
51
  },
52
52
  {
53
53
  name: 'attribution_email',
54
- type: 'varchar(255)'
54
+ type: 'varchar(255)',
55
55
  },
56
56
  {
57
57
  name: 'attribution_phone',
58
- type: 'varchar(255)'
59
- }
60
- ]
58
+ type: 'varchar(255)',
59
+ },
60
+ ],
61
61
  };
62
62
 
63
63
  export default model;
@@ -4,19 +4,19 @@ const model = {
4
4
  {
5
5
  name: 'id',
6
6
  type: 'integer',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'service_id',
11
11
  type: 'varchar(255)',
12
12
  required: true,
13
- index: true
13
+ index: true,
14
14
  },
15
15
  {
16
16
  name: 'date',
17
17
  type: 'integer',
18
18
  required: true,
19
- index: true
19
+ index: true,
20
20
  },
21
21
  {
22
22
  name: 'exception_type',
@@ -24,13 +24,13 @@ const model = {
24
24
  required: true,
25
25
  min: 1,
26
26
  max: 2,
27
- index: true
27
+ index: true,
28
28
  },
29
29
  {
30
30
  name: 'holiday_name',
31
- type: 'varchar(255)'
32
- }
33
- ]
31
+ type: 'varchar(255)',
32
+ },
33
+ ],
34
34
  };
35
35
 
36
36
  export default model;
@@ -5,70 +5,70 @@ const model = {
5
5
  name: 'service_id',
6
6
  type: 'varchar(255)',
7
7
  required: true,
8
- primary: true
8
+ primary: true,
9
9
  },
10
10
  {
11
11
  name: 'monday',
12
12
  type: 'integer',
13
13
  required: true,
14
14
  min: 0,
15
- max: 1
15
+ max: 1,
16
16
  },
17
17
  {
18
18
  name: 'tuesday',
19
19
  type: 'integer',
20
20
  required: true,
21
21
  min: 0,
22
- max: 1
22
+ max: 1,
23
23
  },
24
24
  {
25
25
  name: 'wednesday',
26
26
  type: 'integer',
27
27
  required: true,
28
28
  min: 0,
29
- max: 1
29
+ max: 1,
30
30
  },
31
31
  {
32
32
  name: 'thursday',
33
33
  type: 'integer',
34
34
  required: true,
35
35
  min: 0,
36
- max: 1
36
+ max: 1,
37
37
  },
38
38
  {
39
39
  name: 'friday',
40
40
  type: 'integer',
41
41
  required: true,
42
42
  min: 0,
43
- max: 1
43
+ max: 1,
44
44
  },
45
45
  {
46
46
  name: 'saturday',
47
47
  type: 'integer',
48
48
  required: true,
49
49
  min: 0,
50
- max: 1
50
+ max: 1,
51
51
  },
52
52
  {
53
53
  name: 'sunday',
54
54
  type: 'integer',
55
55
  required: true,
56
56
  min: 0,
57
- max: 1
57
+ max: 1,
58
58
  },
59
59
  {
60
60
  name: 'start_date',
61
61
  type: 'integer',
62
62
  required: true,
63
- index: true
63
+ index: true,
64
64
  },
65
65
  {
66
66
  name: 'end_date',
67
67
  type: 'integer',
68
68
  required: true,
69
- index: true
70
- }
71
- ]
69
+ index: true,
70
+ },
71
+ ],
72
72
  };
73
73
 
74
74
  export default model;
@@ -5,41 +5,41 @@ const model = {
5
5
  name: 'fare_id',
6
6
  type: 'varchar(255)',
7
7
  required: true,
8
- primary: true
8
+ primary: true,
9
9
  },
10
10
  {
11
11
  name: 'price',
12
12
  type: 'real',
13
- required: true
13
+ required: true,
14
14
  },
15
15
  {
16
16
  name: 'currency_type',
17
17
  type: 'varchar(255)',
18
- required: true
18
+ required: true,
19
19
  },
20
20
  {
21
21
  name: 'payment_method',
22
22
  type: 'integer',
23
23
  required: true,
24
24
  min: 0,
25
- max: 1
25
+ max: 1,
26
26
  },
27
27
  {
28
28
  name: 'transfers',
29
29
  type: 'integer',
30
30
  min: 0,
31
- max: 2
31
+ max: 2,
32
32
  },
33
33
  {
34
34
  name: 'agency_id',
35
- type: 'varchar(255)'
35
+ type: 'varchar(255)',
36
36
  },
37
37
  {
38
38
  name: 'transfer_duration',
39
39
  type: 'integer',
40
- min: 0
41
- }
42
- ]
40
+ min: 0,
41
+ },
42
+ ],
43
43
  };
44
44
 
45
45
  export default model;
@@ -4,32 +4,32 @@ const model = {
4
4
  {
5
5
  name: 'id',
6
6
  type: 'integer',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'fare_id',
11
11
  type: 'varchar(255)',
12
12
  required: true,
13
- index: true
13
+ index: true,
14
14
  },
15
15
  {
16
16
  name: 'route_id',
17
17
  type: 'varchar(255)',
18
- index: true
18
+ index: true,
19
19
  },
20
20
  {
21
21
  name: 'origin_id',
22
- type: 'varchar(255)'
22
+ type: 'varchar(255)',
23
23
  },
24
24
  {
25
25
  name: 'destination_id',
26
- type: 'varchar(255)'
26
+ type: 'varchar(255)',
27
27
  },
28
28
  {
29
29
  name: 'contains_id',
30
- type: 'varchar(255)'
31
- }
32
- ]
30
+ type: 'varchar(255)',
31
+ },
32
+ ],
33
33
  };
34
34
 
35
35
  export default model;
@@ -4,48 +4,48 @@ const model = {
4
4
  {
5
5
  name: 'id',
6
6
  type: 'integer',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'feed_publisher_name',
11
11
  type: 'varchar(255)',
12
- required: true
12
+ required: true,
13
13
  },
14
14
  {
15
15
  name: 'feed_publisher_url',
16
16
  type: 'varchar(2047)',
17
- required: true
17
+ required: true,
18
18
  },
19
19
  {
20
20
  name: 'feed_lang',
21
21
  type: 'varchar(255)',
22
- required: true
22
+ required: true,
23
23
  },
24
24
  {
25
25
  name: 'default_lang',
26
- type: 'varchar(255)'
26
+ type: 'varchar(255)',
27
27
  },
28
28
  {
29
29
  name: 'feed_start_date',
30
- type: 'integer'
30
+ type: 'integer',
31
31
  },
32
32
  {
33
33
  name: 'feed_end_date',
34
- type: 'integer'
34
+ type: 'integer',
35
35
  },
36
36
  {
37
37
  name: 'feed_version',
38
- type: 'varchar(255)'
38
+ type: 'varchar(255)',
39
39
  },
40
40
  {
41
41
  name: 'feed_contact_email',
42
- type: 'varchar(255)'
42
+ type: 'varchar(255)',
43
43
  },
44
44
  {
45
45
  name: 'feed_contact_url',
46
- type: 'varchar(2047)'
47
- }
48
- ]
46
+ type: 'varchar(2047)',
47
+ },
48
+ ],
49
49
  };
50
50
 
51
51
  export default model;
@@ -4,45 +4,45 @@ const model = {
4
4
  {
5
5
  name: 'id',
6
6
  type: 'integer',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'trip_id',
11
11
  type: 'varchar(255)',
12
12
  required: true,
13
- index: true
13
+ index: true,
14
14
  },
15
15
  {
16
16
  name: 'start_time',
17
17
  type: 'varchar(255)',
18
- required: true
18
+ required: true,
19
19
  },
20
20
  {
21
21
  name: 'start_timestamp',
22
- type: 'integer'
22
+ type: 'integer',
23
23
  },
24
24
  {
25
25
  name: 'end_time',
26
26
  type: 'varchar(255)',
27
- required: true
27
+ required: true,
28
28
  },
29
29
  {
30
30
  name: 'end_timestamp',
31
- type: 'integer'
31
+ type: 'integer',
32
32
  },
33
33
  {
34
34
  name: 'headway_secs',
35
35
  type: 'integer',
36
36
  required: true,
37
- min: 0
37
+ min: 0,
38
38
  },
39
39
  {
40
40
  name: 'exact_times',
41
41
  type: 'integer',
42
42
  min: 0,
43
- max: 1
44
- }
45
- ]
43
+ max: 1,
44
+ },
45
+ ],
46
46
  };
47
47
 
48
48
  export default model;
@@ -4,18 +4,18 @@ const model = {
4
4
  {
5
5
  name: 'level_id',
6
6
  type: 'varchar(255)',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'level_index',
11
11
  type: 'real',
12
- required: true
12
+ required: true,
13
13
  },
14
14
  {
15
15
  name: 'level_name',
16
- type: 'varchar(255)'
17
- }
18
- ]
16
+ type: 'varchar(255)',
17
+ },
18
+ ],
19
19
  };
20
20
 
21
21
  export default model;
@@ -4,63 +4,63 @@ const model = {
4
4
  {
5
5
  name: 'pathway_id',
6
6
  type: 'varchar(255)',
7
- primary: true
7
+ primary: true,
8
8
  },
9
9
  {
10
10
  name: 'from_stop_id',
11
11
  type: 'varchar(255)',
12
- required: true
12
+ required: true,
13
13
  },
14
14
  {
15
15
  name: 'to_stop_id',
16
16
  type: 'varchar(255)',
17
- required: true
17
+ required: true,
18
18
  },
19
19
  {
20
20
  name: 'pathway_mode',
21
21
  type: 'integer',
22
22
  required: true,
23
23
  min: 1,
24
- max: 7
24
+ max: 7,
25
25
  },
26
26
  {
27
27
  name: 'is_bidirectional',
28
28
  type: 'integer',
29
29
  required: true,
30
30
  min: 0,
31
- max: 1
31
+ max: 1,
32
32
  },
33
33
  {
34
34
  name: 'length',
35
- type: 'real'
35
+ type: 'real',
36
36
  },
37
37
  {
38
38
  name: 'traversal_time',
39
39
  type: 'integer',
40
- min: 0
40
+ min: 0,
41
41
  },
42
42
  {
43
43
  name: 'stair_count',
44
- type: 'integer'
44
+ type: 'integer',
45
45
  },
46
46
  {
47
47
  name: 'max_slope',
48
- type: 'real'
48
+ type: 'real',
49
49
  },
50
50
  {
51
51
  name: 'min_width',
52
52
  type: 'real',
53
- min: 0
53
+ min: 0,
54
54
  },
55
55
  {
56
56
  name: 'signposted_as',
57
- type: 'varchar(255)'
57
+ type: 'varchar(255)',
58
58
  },
59
59
  {
60
60
  name: 'reversed_signposted_as',
61
- type: 'varchar(255)'
62
- }
63
- ]
61
+ type: 'varchar(255)',
62
+ },
63
+ ],
64
64
  };
65
65
 
66
66
  export default model;