gtfs 4.11.3 → 4.13.0

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 (199) hide show
  1. package/README.md +27 -5
  2. package/dist/bin/gtfs-export.d.ts +1 -0
  3. package/dist/bin/gtfs-export.js +3646 -0
  4. package/dist/bin/gtfs-export.js.map +1 -0
  5. package/dist/bin/gtfs-import.d.ts +1 -0
  6. package/dist/bin/gtfs-import.js +4146 -0
  7. package/dist/bin/gtfs-import.js.map +1 -0
  8. package/dist/bin/gtfsrealtime-update.d.ts +1 -0
  9. package/dist/bin/gtfsrealtime-update.js +3802 -0
  10. package/dist/bin/gtfsrealtime-update.js.map +1 -0
  11. package/dist/index.d.ts +169 -0
  12. package/dist/index.js +5205 -0
  13. package/dist/index.js.map +1 -0
  14. package/package.json +27 -13
  15. package/.eslintrc.json +0 -28
  16. package/.github/workflows/nodejs.yml +0 -21
  17. package/.husky/pre-commit +0 -4
  18. package/@types/index.d.ts +0 -606
  19. package/@types/tests.ts +0 -31
  20. package/@types/tsconfig.json +0 -17
  21. package/CHANGELOG.md +0 -895
  22. package/bin/gtfs-export.js +0 -42
  23. package/bin/gtfs-import.js +0 -52
  24. package/bin/gtfsrealtime-update.js +0 -35
  25. package/config-sample-full.json +0 -20
  26. package/config-sample-rtupdates.json +0 -16
  27. package/config-sample.json +0 -8
  28. package/docs/images/node-gtfs-logo.svg +0 -18
  29. package/index.js +0 -1
  30. package/lib/advancedQuery.js +0 -36
  31. package/lib/db.js +0 -92
  32. package/lib/export.js +0 -141
  33. package/lib/file-utils.js +0 -103
  34. package/lib/geojson-utils.js +0 -138
  35. package/lib/gtfs/agencies.js +0 -32
  36. package/lib/gtfs/areas.js +0 -27
  37. package/lib/gtfs/attributions.js +0 -32
  38. package/lib/gtfs/booking-rules.js +0 -32
  39. package/lib/gtfs/calendar-dates.js +0 -32
  40. package/lib/gtfs/calendars.js +0 -32
  41. package/lib/gtfs/fare-attributes.js +0 -32
  42. package/lib/gtfs/fare-leg-rules.js +0 -32
  43. package/lib/gtfs/fare-media.js +0 -32
  44. package/lib/gtfs/fare-products.js +0 -32
  45. package/lib/gtfs/fare-rules.js +0 -32
  46. package/lib/gtfs/fare-transfer-rules.js +0 -32
  47. package/lib/gtfs/feed-info.js +0 -32
  48. package/lib/gtfs/frequencies.js +0 -32
  49. package/lib/gtfs/levels.js +0 -27
  50. package/lib/gtfs/location-group-stops.js +0 -32
  51. package/lib/gtfs/location-groups.js +0 -32
  52. package/lib/gtfs/locations.js +0 -32
  53. package/lib/gtfs/networks.js +0 -32
  54. package/lib/gtfs/pathways.js +0 -32
  55. package/lib/gtfs/route-networks.js +0 -32
  56. package/lib/gtfs/routes.js +0 -56
  57. package/lib/gtfs/shapes.js +0 -119
  58. package/lib/gtfs/stop-areas.js +0 -32
  59. package/lib/gtfs/stop-times.js +0 -32
  60. package/lib/gtfs/stops.js +0 -136
  61. package/lib/gtfs/timeframes.js +0 -32
  62. package/lib/gtfs/transfers.js +0 -32
  63. package/lib/gtfs/translations.js +0 -32
  64. package/lib/gtfs/trips.js +0 -27
  65. package/lib/gtfs-plus/calendar-attributes.js +0 -32
  66. package/lib/gtfs-plus/directions.js +0 -32
  67. package/lib/gtfs-plus/route-attributes.js +0 -32
  68. package/lib/gtfs-plus/stop-attributes.js +0 -32
  69. package/lib/gtfs-realtime/service-alerts.js +0 -34
  70. package/lib/gtfs-realtime/stop-time-updates.js +0 -32
  71. package/lib/gtfs-realtime/trip-updates.js +0 -32
  72. package/lib/gtfs-realtime/vehicle-positions.js +0 -32
  73. package/lib/gtfs-ride/board-alights.js +0 -32
  74. package/lib/gtfs-ride/ride-feed-infos.js +0 -32
  75. package/lib/gtfs-ride/rider-trips.js +0 -32
  76. package/lib/gtfs-ride/riderships.js +0 -32
  77. package/lib/gtfs-ride/trip-capacities.js +0 -32
  78. package/lib/gtfs.js +0 -261
  79. package/lib/import.js +0 -803
  80. package/lib/log-utils.js +0 -73
  81. package/lib/non-standard/timetable-notes-references.js +0 -32
  82. package/lib/non-standard/timetable-notes.js +0 -32
  83. package/lib/non-standard/timetable-pages.js +0 -32
  84. package/lib/non-standard/timetable-stop-order.js +0 -32
  85. package/lib/non-standard/timetables.js +0 -32
  86. package/lib/non-standard/trips-dated-vehicle-journey.js +0 -32
  87. package/lib/ods/deadhead-times.js +0 -32
  88. package/lib/ods/deadheads.js +0 -32
  89. package/lib/ods/ops-locations.js +0 -32
  90. package/lib/ods/run-events.js +0 -32
  91. package/lib/ods/runs-pieces.js +0 -32
  92. package/lib/utils.js +0 -178
  93. package/models/gtfs/agency.js +0 -49
  94. package/models/gtfs/areas.js +0 -19
  95. package/models/gtfs/attributions.js +0 -68
  96. package/models/gtfs/booking-rules.js +0 -92
  97. package/models/gtfs/calendar-dates.js +0 -34
  98. package/models/gtfs/calendar.js +0 -76
  99. package/models/gtfs/fare-attributes.js +0 -48
  100. package/models/gtfs/fare-leg-rules.js +0 -55
  101. package/models/gtfs/fare-media.js +0 -26
  102. package/models/gtfs/fare-products.js +0 -35
  103. package/models/gtfs/fare-rules.js +0 -34
  104. package/models/gtfs/fare-transfer-rules.js +0 -56
  105. package/models/gtfs/feed-info.js +0 -50
  106. package/models/gtfs/frequencies.js +0 -46
  107. package/models/gtfs/levels.js +0 -25
  108. package/models/gtfs/location-group-stops.js +0 -22
  109. package/models/gtfs/location-groups.js +0 -19
  110. package/models/gtfs/locations.js +0 -12
  111. package/models/gtfs/networks.js +0 -20
  112. package/models/gtfs/pathways.js +0 -74
  113. package/models/gtfs/route-networks.js +0 -21
  114. package/models/gtfs/routes.js +0 -79
  115. package/models/gtfs/shapes.js +0 -41
  116. package/models/gtfs/stop-areas.js +0 -20
  117. package/models/gtfs/stop-times.js +0 -120
  118. package/models/gtfs/stops.js +0 -85
  119. package/models/gtfs/timeframes.js +0 -29
  120. package/models/gtfs/transfers.js +0 -56
  121. package/models/gtfs/translations.js +0 -48
  122. package/models/gtfs/trips.js +0 -70
  123. package/models/gtfs-plus/calendar-attributes.js +0 -22
  124. package/models/gtfs-plus/directions.js +0 -29
  125. package/models/gtfs-plus/route-attributes.js +0 -34
  126. package/models/gtfs-plus/stop-attributes.js +0 -35
  127. package/models/gtfs-realtime/service-alert-targets.js +0 -37
  128. package/models/gtfs-realtime/service-alerts.js +0 -60
  129. package/models/gtfs-realtime/stop-time-updates.js +0 -85
  130. package/models/gtfs-realtime/trip-updates.js +0 -75
  131. package/models/gtfs-realtime/vehicle-positions.js +0 -135
  132. package/models/gtfs-ride/board-alight.js +0 -132
  133. package/models/gtfs-ride/ride-feed-info.js +0 -40
  134. package/models/gtfs-ride/rider-trip.js +0 -113
  135. package/models/gtfs-ride/ridership.js +0 -127
  136. package/models/gtfs-ride/trip-capacity.js +0 -51
  137. package/models/models.js +0 -120
  138. package/models/non-standard/timetable-notes-references.js +0 -50
  139. package/models/non-standard/timetable-notes.js +0 -24
  140. package/models/non-standard/timetable-pages.js +0 -23
  141. package/models/non-standard/timetable-stop-order.js +0 -32
  142. package/models/non-standard/timetables.js +0 -144
  143. package/models/non-standard/trips-dated-vehicle-journey.js +0 -34
  144. package/models/ods/deadhead-times.js +0 -65
  145. package/models/ods/deadheads.js +0 -60
  146. package/models/ods/ops-locations.js +0 -46
  147. package/models/ods/run-events.js +0 -70
  148. package/models/ods/runs-pieces.js +0 -59
  149. package/test/fixture/caltrain_20160406.zip +0 -0
  150. package/test/mocha/advanced-query.js +0 -74
  151. package/test/mocha/delete-db.js +0 -62
  152. package/test/mocha/export-gtfs.js +0 -147
  153. package/test/mocha/fare-transfer-rules.js +0 -32
  154. package/test/mocha/get-agencies.js +0 -90
  155. package/test/mocha/get-areas.js +0 -27
  156. package/test/mocha/get-attributions.js +0 -27
  157. package/test/mocha/get-board-alights.js +0 -28
  158. package/test/mocha/get-booking-rules.js +0 -28
  159. package/test/mocha/get-calendar-attributes.js +0 -33
  160. package/test/mocha/get-calendar-dates.js +0 -107
  161. package/test/mocha/get-calendars.js +0 -94
  162. package/test/mocha/get-directions.js +0 -28
  163. package/test/mocha/get-fare-attributes.js +0 -51
  164. package/test/mocha/get-fare-leg-rules.js +0 -27
  165. package/test/mocha/get-fare-media.js +0 -27
  166. package/test/mocha/get-fare-products.js +0 -27
  167. package/test/mocha/get-fare-rules.js +0 -50
  168. package/test/mocha/get-feed-info.js +0 -28
  169. package/test/mocha/get-frequencies.js +0 -28
  170. package/test/mocha/get-levels.js +0 -28
  171. package/test/mocha/get-location-group-stops.js +0 -33
  172. package/test/mocha/get-location-groups.js +0 -28
  173. package/test/mocha/get-locations.js +0 -69
  174. package/test/mocha/get-networks.js +0 -28
  175. package/test/mocha/get-pathways.js +0 -28
  176. package/test/mocha/get-ride-feed-infos.js +0 -24
  177. package/test/mocha/get-rider-trips.js +0 -28
  178. package/test/mocha/get-riderships.js +0 -28
  179. package/test/mocha/get-route-attributes.js +0 -33
  180. package/test/mocha/get-route-networks.js +0 -28
  181. package/test/mocha/get-routes.js +0 -143
  182. package/test/mocha/get-shapes-as-geojson.js +0 -92
  183. package/test/mocha/get-shapes.js +0 -240
  184. package/test/mocha/get-stop-attributes.js +0 -28
  185. package/test/mocha/get-stops-as-geojson.js +0 -87
  186. package/test/mocha/get-stops.js +0 -343
  187. package/test/mocha/get-stoptimes.js +0 -67
  188. package/test/mocha/get-timeframes.js +0 -28
  189. package/test/mocha/get-timetable-pages.js +0 -28
  190. package/test/mocha/get-timetable-stop-orders.js +0 -33
  191. package/test/mocha/get-timetables.js +0 -28
  192. package/test/mocha/get-transfers.js +0 -28
  193. package/test/mocha/get-translations.js +0 -28
  194. package/test/mocha/get-trip-capacities.js +0 -28
  195. package/test/mocha/get-trips.js +0 -53
  196. package/test/mocha/import-gtfs.js +0 -173
  197. package/test/mocha/open-db.js +0 -149
  198. package/test/mocha/raw-query.js +0 -34
  199. package/test/test-config.js +0 -12
@@ -0,0 +1,3802 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/bin/gtfsrealtime-update.ts
4
+ import yargs from "yargs";
5
+ import { hideBin } from "yargs/helpers";
6
+ import PrettyError from "pretty-error";
7
+
8
+ // src/lib/file-utils.ts
9
+ import path from "node:path";
10
+ import { existsSync } from "node:fs";
11
+ import { mkdir, readFile, rm } from "node:fs/promises";
12
+ import { omit, snakeCase } from "lodash-es";
13
+ import sanitize from "sanitize-filename";
14
+ import untildify from "untildify";
15
+ import StreamZip from "node-stream-zip";
16
+ async function getConfig(argv2) {
17
+ let config;
18
+ let data;
19
+ if (argv2.configPath) {
20
+ try {
21
+ data = await readFile(path.resolve(untildify(argv2.configPath)), "utf8");
22
+ } catch (error) {
23
+ throw new Error(
24
+ `Cannot find configuration file at \`${argv2.configPath}\`. Use config-sample.json as a starting point.`
25
+ );
26
+ }
27
+ try {
28
+ config = Object.assign(JSON.parse(data), argv2);
29
+ } catch (error) {
30
+ throw new Error(
31
+ `Cannot parse configuration file at \`${argv2.configPath}\`. Check to ensure that it is valid JSON.`
32
+ );
33
+ }
34
+ } else if (argv2.gtfsPath || argv2.gtfsUrl || argv2.sqlitePath) {
35
+ const agencies = [];
36
+ if (argv2.gtfsPath) {
37
+ agencies.push({
38
+ path: argv2.gtfsPath
39
+ });
40
+ }
41
+ if (argv2.gtfsUrl) {
42
+ agencies.push({
43
+ url: argv2.gtfsUrl
44
+ });
45
+ }
46
+ config = {
47
+ agencies,
48
+ ...omit(argv2, ["path", "url"])
49
+ };
50
+ } else if (existsSync(path.resolve("./config.json"))) {
51
+ try {
52
+ data = await readFile(path.resolve("./config.json"), "utf8");
53
+ } catch (error) {
54
+ throw new Error(
55
+ `Cannot open configuration file at \`${path.resolve("./config.json")}\`. Check to ensure that it exists. Use config-sample.json as a starting point.`
56
+ );
57
+ }
58
+ try {
59
+ config = Object.assign(JSON.parse(data), argv2);
60
+ console.log("Using configuration from ./config.json");
61
+ } catch (error) {
62
+ throw new Error(
63
+ `Cannot parse configuration file at \`${path.resolve("./config.json")}\`. Check to ensure that it is valid JSON.`
64
+ );
65
+ }
66
+ } else {
67
+ throw new Error(
68
+ "Cannot find configuration file. Use config-sample.json as a starting point, pass --configPath option."
69
+ );
70
+ }
71
+ return config;
72
+ }
73
+
74
+ // src/lib/log-utils.ts
75
+ import { clearLine, cursorTo } from "node:readline";
76
+ import { noop } from "lodash-es";
77
+ import * as colors from "yoctocolors";
78
+ function log(config) {
79
+ if (config.verbose === false) {
80
+ return noop;
81
+ }
82
+ if (config.logFunction) {
83
+ return config.logFunction;
84
+ }
85
+ return (text, overwrite) => {
86
+ if (overwrite === true && process.stdout.isTTY) {
87
+ clearLine(process.stdout, 0);
88
+ cursorTo(process.stdout, 0);
89
+ } else {
90
+ process.stdout.write("\n");
91
+ }
92
+ process.stdout.write(text);
93
+ };
94
+ }
95
+ function logWarning(config) {
96
+ if (config.logFunction) {
97
+ return config.logFunction;
98
+ }
99
+ return (text) => {
100
+ process.stdout.write(`
101
+ ${formatWarning(text)}
102
+ `);
103
+ };
104
+ }
105
+ function logError(config) {
106
+ if (config.logFunction) {
107
+ return config.logFunction;
108
+ }
109
+ return (text) => {
110
+ process.stdout.write(`
111
+ ${formatError(text)}
112
+ `);
113
+ };
114
+ }
115
+ function formatWarning(text) {
116
+ const warningMessage = `${colors.underline("Warning")}: ${text}`;
117
+ return colors.yellow(warningMessage);
118
+ }
119
+ function formatError(error) {
120
+ const messageText = error instanceof Error ? error.message : error;
121
+ const errorMessage = `${colors.underline("Error")}: ${messageText.replace(
122
+ "Error: ",
123
+ ""
124
+ )}`;
125
+ return colors.red(errorMessage);
126
+ }
127
+
128
+ // src/lib/import.ts
129
+ import { parse } from "csv-parse";
130
+ import pluralize from "pluralize";
131
+ import stripBomStream from "strip-bom-stream";
132
+ import { temporaryDirectory } from "tempy";
133
+ import untildify3 from "untildify";
134
+ import mapSeries from "promise-map-series";
135
+ import GtfsRealtimeBindings from "gtfs-realtime-bindings";
136
+ import sqlString2 from "sqlstring-sqlite";
137
+
138
+ // src/models/gtfs/agency.ts
139
+ var model = {
140
+ filenameBase: "agency",
141
+ filenameExtension: "txt",
142
+ schema: [
143
+ {
144
+ name: "agency_id",
145
+ type: "text",
146
+ primary: true,
147
+ prefix: true
148
+ },
149
+ {
150
+ name: "agency_name",
151
+ type: "text",
152
+ required: true,
153
+ nocase: true
154
+ },
155
+ {
156
+ name: "agency_url",
157
+ type: "text",
158
+ required: true
159
+ },
160
+ {
161
+ name: "agency_timezone",
162
+ type: "text",
163
+ required: true
164
+ },
165
+ {
166
+ name: "agency_lang",
167
+ type: "text",
168
+ nocase: true
169
+ },
170
+ {
171
+ name: "agency_phone",
172
+ type: "text",
173
+ nocase: true
174
+ },
175
+ {
176
+ name: "agency_fare_url",
177
+ type: "text"
178
+ },
179
+ {
180
+ name: "agency_email",
181
+ type: "text",
182
+ nocase: true
183
+ }
184
+ ]
185
+ };
186
+ var agency_default = model;
187
+
188
+ // src/models/gtfs/areas.ts
189
+ var model2 = {
190
+ filenameBase: "areas",
191
+ filenameExtension: "txt",
192
+ schema: [
193
+ {
194
+ name: "area_id",
195
+ type: "text",
196
+ required: true,
197
+ primary: true,
198
+ prefix: true
199
+ },
200
+ {
201
+ name: "area_name",
202
+ type: "text"
203
+ }
204
+ ]
205
+ };
206
+ var areas_default = model2;
207
+
208
+ // src/models/gtfs/attributions.ts
209
+ var model3 = {
210
+ filenameBase: "attributions",
211
+ filenameExtension: "txt",
212
+ schema: [
213
+ {
214
+ name: "attribution_id",
215
+ type: "text",
216
+ primary: true,
217
+ required: true,
218
+ prefix: true
219
+ },
220
+ {
221
+ name: "agency_id",
222
+ type: "text",
223
+ prefix: true
224
+ },
225
+ {
226
+ name: "route_id",
227
+ type: "text",
228
+ prefix: true
229
+ },
230
+ {
231
+ name: "trip_id",
232
+ type: "text",
233
+ prefix: true
234
+ },
235
+ {
236
+ name: "organization_name",
237
+ type: "text",
238
+ required: true,
239
+ nocase: true
240
+ },
241
+ {
242
+ name: "is_producer",
243
+ type: "integer",
244
+ min: 0,
245
+ max: 1
246
+ },
247
+ {
248
+ name: "is_operator",
249
+ type: "integer",
250
+ min: 0,
251
+ max: 1
252
+ },
253
+ {
254
+ name: "is_authority",
255
+ type: "integer",
256
+ min: 0,
257
+ max: 1
258
+ },
259
+ {
260
+ name: "attribution_url",
261
+ type: "text"
262
+ },
263
+ {
264
+ name: "attribution_email",
265
+ type: "text",
266
+ nocase: true
267
+ },
268
+ {
269
+ name: "attribution_phone",
270
+ type: "text",
271
+ nocase: true
272
+ }
273
+ ]
274
+ };
275
+ var attributions_default = model3;
276
+
277
+ // src/models/gtfs/booking-rules.ts
278
+ var model4 = {
279
+ filenameBase: "booking_rules",
280
+ filenameExtension: "txt",
281
+ schema: [
282
+ {
283
+ name: "booking_rule_id",
284
+ type: "text",
285
+ primary: true,
286
+ prefix: true
287
+ },
288
+ {
289
+ name: "booking_type",
290
+ type: "integer",
291
+ required: true,
292
+ min: 0,
293
+ max: 2
294
+ },
295
+ {
296
+ name: "prior_notice_duration_min",
297
+ type: "integer",
298
+ min: 0
299
+ },
300
+ {
301
+ name: "prior_notice_duration_max",
302
+ type: "integer",
303
+ min: 0
304
+ },
305
+ {
306
+ name: "prior_notice_last_day",
307
+ type: "integer",
308
+ min: 0
309
+ },
310
+ {
311
+ name: "prior_notice_last_time",
312
+ type: "text"
313
+ },
314
+ {
315
+ name: "prior_notice_last_timestamp",
316
+ type: "integer",
317
+ index: true
318
+ },
319
+ {
320
+ name: "prior_notice_start_day",
321
+ type: "integer",
322
+ min: 0
323
+ },
324
+ {
325
+ name: "prior_notice_start_time",
326
+ type: "text"
327
+ },
328
+ {
329
+ name: "prior_notice_start_timestamp",
330
+ type: "integer",
331
+ index: true
332
+ },
333
+ {
334
+ name: "prior_notice_service_id",
335
+ type: "text",
336
+ prefix: true
337
+ },
338
+ {
339
+ name: "message",
340
+ type: "text",
341
+ nocase: true
342
+ },
343
+ {
344
+ name: "pickup_message",
345
+ type: "text",
346
+ nocase: true
347
+ },
348
+ {
349
+ name: "drop_off_message",
350
+ type: "text",
351
+ nocase: true
352
+ },
353
+ {
354
+ name: "phone_number",
355
+ type: "text",
356
+ nocase: true
357
+ },
358
+ {
359
+ name: "info_url",
360
+ type: "text"
361
+ },
362
+ {
363
+ name: "booking_url",
364
+ type: "text"
365
+ }
366
+ ]
367
+ };
368
+ var booking_rules_default = model4;
369
+
370
+ // src/models/gtfs/calendar-dates.ts
371
+ var model5 = {
372
+ filenameBase: "calendar_dates",
373
+ filenameExtension: "txt",
374
+ schema: [
375
+ {
376
+ name: "service_id",
377
+ type: "text",
378
+ required: true,
379
+ primary: true,
380
+ prefix: true
381
+ },
382
+ {
383
+ name: "date",
384
+ type: "integer",
385
+ required: true,
386
+ primary: true
387
+ },
388
+ {
389
+ name: "exception_type",
390
+ type: "integer",
391
+ required: true,
392
+ min: 1,
393
+ max: 2,
394
+ index: true
395
+ },
396
+ {
397
+ name: "holiday_name",
398
+ type: "text",
399
+ nocase: true
400
+ }
401
+ ]
402
+ };
403
+ var calendar_dates_default = model5;
404
+
405
+ // src/models/gtfs/calendar.ts
406
+ var model6 = {
407
+ filenameBase: "calendar",
408
+ filenameExtension: "txt",
409
+ schema: [
410
+ {
411
+ name: "service_id",
412
+ type: "text",
413
+ required: true,
414
+ primary: true,
415
+ prefix: true
416
+ },
417
+ {
418
+ name: "monday",
419
+ type: "integer",
420
+ required: true,
421
+ min: 0,
422
+ max: 1
423
+ },
424
+ {
425
+ name: "tuesday",
426
+ type: "integer",
427
+ required: true,
428
+ min: 0,
429
+ max: 1
430
+ },
431
+ {
432
+ name: "wednesday",
433
+ type: "integer",
434
+ required: true,
435
+ min: 0,
436
+ max: 1
437
+ },
438
+ {
439
+ name: "thursday",
440
+ type: "integer",
441
+ required: true,
442
+ min: 0,
443
+ max: 1
444
+ },
445
+ {
446
+ name: "friday",
447
+ type: "integer",
448
+ required: true,
449
+ min: 0,
450
+ max: 1
451
+ },
452
+ {
453
+ name: "saturday",
454
+ type: "integer",
455
+ required: true,
456
+ min: 0,
457
+ max: 1
458
+ },
459
+ {
460
+ name: "sunday",
461
+ type: "integer",
462
+ required: true,
463
+ min: 0,
464
+ max: 1
465
+ },
466
+ {
467
+ name: "start_date",
468
+ type: "integer",
469
+ required: true,
470
+ index: true
471
+ },
472
+ {
473
+ name: "end_date",
474
+ type: "integer",
475
+ required: true,
476
+ index: true
477
+ }
478
+ ]
479
+ };
480
+ var calendar_default = model6;
481
+
482
+ // src/models/gtfs/fare-attributes.ts
483
+ var model7 = {
484
+ filenameBase: "fare_attributes",
485
+ filenameExtension: "txt",
486
+ schema: [
487
+ {
488
+ name: "fare_id",
489
+ type: "text",
490
+ required: true,
491
+ primary: true,
492
+ prefix: true
493
+ },
494
+ {
495
+ name: "price",
496
+ type: "real",
497
+ required: true
498
+ },
499
+ {
500
+ name: "currency_type",
501
+ type: "text",
502
+ required: true
503
+ },
504
+ {
505
+ name: "payment_method",
506
+ type: "integer",
507
+ required: true,
508
+ min: 0,
509
+ max: 1
510
+ },
511
+ {
512
+ name: "transfers",
513
+ type: "integer",
514
+ min: 0,
515
+ max: 2
516
+ },
517
+ {
518
+ name: "agency_id",
519
+ type: "text",
520
+ prefix: true
521
+ },
522
+ {
523
+ name: "transfer_duration",
524
+ type: "integer",
525
+ min: 0
526
+ }
527
+ ]
528
+ };
529
+ var fare_attributes_default = model7;
530
+
531
+ // src/models/gtfs/fare-leg-rules.ts
532
+ var model8 = {
533
+ filenameBase: "fare_leg_rules",
534
+ filenameExtension: "txt",
535
+ schema: [
536
+ {
537
+ name: "leg_group_id",
538
+ type: "text",
539
+ prefix: true
540
+ },
541
+ {
542
+ name: "network_id",
543
+ type: "text",
544
+ primary: true,
545
+ prefix: true
546
+ },
547
+ {
548
+ name: "from_area_id",
549
+ type: "text",
550
+ primary: true,
551
+ prefix: true
552
+ },
553
+ {
554
+ name: "to_area_id",
555
+ type: "text",
556
+ primary: true,
557
+ prefix: true
558
+ },
559
+ {
560
+ name: "from_timeframe_group_id",
561
+ type: "text",
562
+ primary: true,
563
+ prefix: true
564
+ },
565
+ {
566
+ name: "to_timeframe_group_id",
567
+ type: "text",
568
+ primary: true,
569
+ prefix: true
570
+ },
571
+ {
572
+ name: "fare_product_id",
573
+ type: "text",
574
+ required: true,
575
+ primary: true,
576
+ prefix: true
577
+ },
578
+ {
579
+ name: "rule_priority",
580
+ type: "integer",
581
+ min: 0
582
+ }
583
+ ]
584
+ };
585
+ var fare_leg_rules_default = model8;
586
+
587
+ // src/models/gtfs/fare-media.ts
588
+ var model9 = {
589
+ filenameBase: "fare_media",
590
+ filenameExtension: "txt",
591
+ schema: [
592
+ {
593
+ name: "fare_media_id",
594
+ type: "text",
595
+ required: true,
596
+ primary: true,
597
+ prefix: true
598
+ },
599
+ {
600
+ name: "fare_media_name",
601
+ type: "text"
602
+ },
603
+ {
604
+ name: "fare_media_type",
605
+ type: "integer",
606
+ required: true,
607
+ min: 0,
608
+ max: 4
609
+ }
610
+ ]
611
+ };
612
+ var fare_media_default = model9;
613
+
614
+ // src/models/gtfs/fare-products.ts
615
+ var model10 = {
616
+ filenameBase: "fare_products",
617
+ filenameExtension: "txt",
618
+ schema: [
619
+ {
620
+ name: "fare_product_id",
621
+ type: "text",
622
+ required: true,
623
+ primary: true,
624
+ prefix: true
625
+ },
626
+ {
627
+ name: "fare_product_name",
628
+ type: "text"
629
+ },
630
+ {
631
+ name: "fare_media_id",
632
+ type: "text",
633
+ primary: true,
634
+ prefix: true
635
+ },
636
+ {
637
+ name: "amount",
638
+ type: "real",
639
+ required: true
640
+ },
641
+ {
642
+ name: "currency",
643
+ type: "text",
644
+ required: true
645
+ }
646
+ ]
647
+ };
648
+ var fare_products_default = model10;
649
+
650
+ // src/models/gtfs/fare-rules.ts
651
+ var model11 = {
652
+ filenameBase: "fare_rules",
653
+ filenameExtension: "txt",
654
+ schema: [
655
+ {
656
+ name: "fare_id",
657
+ type: "text",
658
+ required: true,
659
+ prefix: true
660
+ },
661
+ {
662
+ name: "route_id",
663
+ type: "text",
664
+ prefix: true
665
+ },
666
+ {
667
+ name: "origin_id",
668
+ type: "text",
669
+ prefix: true
670
+ },
671
+ {
672
+ name: "destination_id",
673
+ type: "text",
674
+ prefix: true
675
+ },
676
+ {
677
+ name: "contains_id",
678
+ type: "text",
679
+ prefix: true
680
+ }
681
+ ]
682
+ };
683
+ var fare_rules_default = model11;
684
+
685
+ // src/models/gtfs/fare-transfer-rules.ts
686
+ var model12 = {
687
+ filenameBase: "fare_transfer_rules",
688
+ filenameExtension: "txt",
689
+ schema: [
690
+ {
691
+ name: "from_leg_group_id",
692
+ type: "text",
693
+ primary: true,
694
+ prefix: true
695
+ },
696
+ {
697
+ name: "to_leg_group_id",
698
+ type: "text",
699
+ primary: true,
700
+ prefix: true
701
+ },
702
+ {
703
+ name: "transfer_count",
704
+ type: "integer",
705
+ min: -1,
706
+ primary: true
707
+ },
708
+ {
709
+ name: "transfer_id",
710
+ type: "text",
711
+ prefix: true
712
+ },
713
+ {
714
+ name: "duration_limit",
715
+ type: "integer",
716
+ min: 0,
717
+ primary: true
718
+ },
719
+ {
720
+ name: "duration_limit_type",
721
+ type: "integer",
722
+ min: 0,
723
+ max: 3
724
+ },
725
+ {
726
+ name: "fare_transfer_type",
727
+ type: "integer",
728
+ min: 0,
729
+ max: 2,
730
+ required: true
731
+ },
732
+ {
733
+ name: "fare_product_id",
734
+ type: "text",
735
+ primary: true,
736
+ prefix: true
737
+ }
738
+ ]
739
+ };
740
+ var fare_transfer_rules_default = model12;
741
+
742
+ // src/models/gtfs/feed-info.ts
743
+ var model13 = {
744
+ filenameBase: "feed_info",
745
+ filenameExtension: "txt",
746
+ schema: [
747
+ {
748
+ name: "feed_publisher_name",
749
+ type: "text",
750
+ required: true,
751
+ nocase: true
752
+ },
753
+ {
754
+ name: "feed_publisher_url",
755
+ type: "text",
756
+ required: true
757
+ },
758
+ {
759
+ name: "feed_lang",
760
+ type: "text",
761
+ required: true
762
+ },
763
+ {
764
+ name: "default_lang",
765
+ type: "text",
766
+ nocase: true
767
+ },
768
+ {
769
+ name: "feed_start_date",
770
+ type: "integer"
771
+ },
772
+ {
773
+ name: "feed_end_date",
774
+ type: "integer"
775
+ },
776
+ {
777
+ name: "feed_version",
778
+ type: "text"
779
+ },
780
+ {
781
+ name: "feed_contact_email",
782
+ type: "text",
783
+ nocase: true
784
+ },
785
+ {
786
+ name: "feed_contact_url",
787
+ type: "text"
788
+ }
789
+ ]
790
+ };
791
+ var feed_info_default = model13;
792
+
793
+ // src/models/gtfs/frequencies.ts
794
+ var model14 = {
795
+ filenameBase: "frequencies",
796
+ filenameExtension: "txt",
797
+ schema: [
798
+ {
799
+ name: "trip_id",
800
+ type: "text",
801
+ required: true,
802
+ primary: true,
803
+ prefix: true
804
+ },
805
+ {
806
+ name: "start_time",
807
+ type: "text",
808
+ required: true,
809
+ primary: true
810
+ },
811
+ {
812
+ name: "start_timestamp",
813
+ type: "integer"
814
+ },
815
+ {
816
+ name: "end_time",
817
+ type: "text",
818
+ required: true
819
+ },
820
+ {
821
+ name: "end_timestamp",
822
+ type: "integer"
823
+ },
824
+ {
825
+ name: "headway_secs",
826
+ type: "integer",
827
+ required: true,
828
+ min: 0
829
+ },
830
+ {
831
+ name: "exact_times",
832
+ type: "integer",
833
+ min: 0,
834
+ max: 1
835
+ }
836
+ ]
837
+ };
838
+ var frequencies_default = model14;
839
+
840
+ // src/models/gtfs/levels.ts
841
+ var model15 = {
842
+ filenameBase: "levels",
843
+ filenameExtension: "txt",
844
+ schema: [
845
+ {
846
+ name: "level_id",
847
+ type: "text",
848
+ primary: true,
849
+ required: true,
850
+ prefix: true
851
+ },
852
+ {
853
+ name: "level_index",
854
+ type: "real",
855
+ required: true
856
+ },
857
+ {
858
+ name: "level_name",
859
+ type: "text",
860
+ nocase: true
861
+ }
862
+ ]
863
+ };
864
+ var levels_default = model15;
865
+
866
+ // src/models/gtfs/location-groups.ts
867
+ var model16 = {
868
+ filenameBase: "location_groups",
869
+ filenameExtension: "txt",
870
+ schema: [
871
+ {
872
+ name: "location_group_id",
873
+ type: "text",
874
+ primary: true,
875
+ prefix: true
876
+ },
877
+ {
878
+ name: "location_group_name",
879
+ type: "text",
880
+ nocase: true
881
+ }
882
+ ]
883
+ };
884
+ var location_groups_default = model16;
885
+
886
+ // src/models/gtfs/location-group-stops.ts
887
+ var model17 = {
888
+ filenameBase: "location_group_stops",
889
+ filenameExtension: "txt",
890
+ schema: [
891
+ {
892
+ name: "location_group_id",
893
+ type: "text",
894
+ prefix: true,
895
+ index: true,
896
+ required: true
897
+ },
898
+ {
899
+ name: "stop_id",
900
+ type: "text",
901
+ required: true,
902
+ prefix: true,
903
+ index: true
904
+ }
905
+ ]
906
+ };
907
+ var location_group_stops_default = model17;
908
+
909
+ // src/models/gtfs/locations.ts
910
+ var model18 = {
911
+ filenameBase: "locations",
912
+ filenameExtension: "geojson",
913
+ schema: [
914
+ {
915
+ name: "geojson",
916
+ type: "text"
917
+ }
918
+ ]
919
+ };
920
+ var locations_default = model18;
921
+
922
+ // src/models/gtfs/networks.ts
923
+ var model19 = {
924
+ filenameBase: "networks",
925
+ filenameExtension: "txt",
926
+ schema: [
927
+ {
928
+ name: "network_id",
929
+ type: "text",
930
+ primary: true,
931
+ required: true,
932
+ prefix: true
933
+ },
934
+ {
935
+ name: "network_name",
936
+ type: "text",
937
+ nocase: true
938
+ }
939
+ ]
940
+ };
941
+ var networks_default = model19;
942
+
943
+ // src/models/gtfs/pathways.ts
944
+ var model20 = {
945
+ filenameBase: "pathways",
946
+ filenameExtension: "txt",
947
+ schema: [
948
+ {
949
+ name: "pathway_id",
950
+ type: "text",
951
+ primary: true,
952
+ required: true,
953
+ prefix: true
954
+ },
955
+ {
956
+ name: "from_stop_id",
957
+ type: "text",
958
+ required: true,
959
+ prefix: true
960
+ },
961
+ {
962
+ name: "to_stop_id",
963
+ type: "text",
964
+ required: true,
965
+ prefix: true
966
+ },
967
+ {
968
+ name: "pathway_mode",
969
+ type: "integer",
970
+ required: true,
971
+ min: 1,
972
+ max: 7
973
+ },
974
+ {
975
+ name: "is_bidirectional",
976
+ type: "integer",
977
+ required: true,
978
+ min: 0,
979
+ max: 1
980
+ },
981
+ {
982
+ name: "length",
983
+ type: "real",
984
+ min: 0
985
+ },
986
+ {
987
+ name: "traversal_time",
988
+ type: "integer",
989
+ min: 0
990
+ },
991
+ {
992
+ name: "stair_count",
993
+ type: "integer"
994
+ },
995
+ {
996
+ name: "max_slope",
997
+ type: "real"
998
+ },
999
+ {
1000
+ name: "min_width",
1001
+ type: "real",
1002
+ min: 0
1003
+ },
1004
+ {
1005
+ name: "signposted_as",
1006
+ type: "text",
1007
+ nocase: true
1008
+ },
1009
+ {
1010
+ name: "reversed_signposted_as",
1011
+ type: "text",
1012
+ nocase: true
1013
+ }
1014
+ ]
1015
+ };
1016
+ var pathways_default = model20;
1017
+
1018
+ // src/models/gtfs/route-networks.ts
1019
+ var model21 = {
1020
+ filenameBase: "route_networks",
1021
+ filenameExtension: "txt",
1022
+ schema: [
1023
+ {
1024
+ name: "network_id",
1025
+ type: "text",
1026
+ required: true,
1027
+ prefix: true
1028
+ },
1029
+ {
1030
+ name: "route_id",
1031
+ type: "text",
1032
+ primary: true,
1033
+ index: true,
1034
+ prefix: true
1035
+ }
1036
+ ]
1037
+ };
1038
+ var route_networks_default = model21;
1039
+
1040
+ // src/models/gtfs/routes.ts
1041
+ var model22 = {
1042
+ filenameBase: "routes",
1043
+ filenameExtension: "txt",
1044
+ schema: [
1045
+ {
1046
+ name: "route_id",
1047
+ type: "text",
1048
+ primary: true,
1049
+ required: true,
1050
+ prefix: true
1051
+ },
1052
+ {
1053
+ name: "agency_id",
1054
+ type: "text",
1055
+ prefix: true
1056
+ },
1057
+ {
1058
+ name: "route_short_name",
1059
+ type: "text",
1060
+ nocase: true
1061
+ },
1062
+ {
1063
+ name: "route_long_name",
1064
+ type: "text",
1065
+ nocase: true
1066
+ },
1067
+ {
1068
+ name: "route_desc",
1069
+ type: "text",
1070
+ nocase: true
1071
+ },
1072
+ {
1073
+ name: "route_type",
1074
+ type: "integer",
1075
+ required: true,
1076
+ min: 0
1077
+ // Support extended GTFS route types with no max value
1078
+ // https://developers.google.com/transit/gtfs/reference/extended-route-types
1079
+ },
1080
+ {
1081
+ name: "route_url",
1082
+ type: "text"
1083
+ },
1084
+ {
1085
+ name: "route_color",
1086
+ type: "text",
1087
+ nocase: true
1088
+ },
1089
+ {
1090
+ name: "route_text_color",
1091
+ type: "text",
1092
+ nocase: true
1093
+ },
1094
+ {
1095
+ name: "route_sort_order",
1096
+ type: "integer",
1097
+ min: 0
1098
+ },
1099
+ {
1100
+ name: "continuous_pickup",
1101
+ type: "integer",
1102
+ min: 0,
1103
+ max: 3
1104
+ },
1105
+ {
1106
+ name: "continuous_drop_off",
1107
+ type: "integer",
1108
+ min: 0,
1109
+ max: 3
1110
+ },
1111
+ {
1112
+ name: "network_id",
1113
+ type: "text",
1114
+ prefix: true
1115
+ }
1116
+ ]
1117
+ };
1118
+ var routes_default = model22;
1119
+
1120
+ // src/models/gtfs/shapes.ts
1121
+ var model23 = {
1122
+ filenameBase: "shapes",
1123
+ filenameExtension: "txt",
1124
+ schema: [
1125
+ {
1126
+ name: "shape_id",
1127
+ type: "text",
1128
+ required: true,
1129
+ primary: true,
1130
+ prefix: true
1131
+ },
1132
+ {
1133
+ name: "shape_pt_lat",
1134
+ type: "real",
1135
+ required: true,
1136
+ min: -90,
1137
+ max: 90
1138
+ },
1139
+ {
1140
+ name: "shape_pt_lon",
1141
+ type: "real",
1142
+ required: true,
1143
+ min: -180,
1144
+ max: 180
1145
+ },
1146
+ {
1147
+ name: "shape_pt_sequence",
1148
+ type: "integer",
1149
+ required: true,
1150
+ primary: true,
1151
+ min: 0
1152
+ },
1153
+ {
1154
+ name: "shape_dist_traveled",
1155
+ type: "real",
1156
+ min: 0
1157
+ }
1158
+ ]
1159
+ };
1160
+ var shapes_default = model23;
1161
+
1162
+ // src/models/gtfs/stop-areas.ts
1163
+ var model24 = {
1164
+ filenameBase: "stop_areas",
1165
+ filenameExtension: "txt",
1166
+ schema: [
1167
+ {
1168
+ name: "area_id",
1169
+ type: "text",
1170
+ required: true,
1171
+ prefix: true
1172
+ },
1173
+ {
1174
+ name: "stop_id",
1175
+ type: "text",
1176
+ required: true,
1177
+ prefix: true
1178
+ }
1179
+ ]
1180
+ };
1181
+ var stop_areas_default = model24;
1182
+
1183
+ // src/models/gtfs/stop-times.ts
1184
+ var model25 = {
1185
+ filenameBase: "stop_times",
1186
+ filenameExtension: "txt",
1187
+ schema: [
1188
+ {
1189
+ name: "trip_id",
1190
+ type: "text",
1191
+ required: true,
1192
+ primary: true,
1193
+ prefix: true
1194
+ },
1195
+ {
1196
+ name: "arrival_time",
1197
+ type: "text"
1198
+ },
1199
+ {
1200
+ name: "arrival_timestamp",
1201
+ type: "integer",
1202
+ index: true
1203
+ },
1204
+ {
1205
+ name: "departure_time",
1206
+ type: "text"
1207
+ },
1208
+ {
1209
+ name: "departure_timestamp",
1210
+ type: "integer",
1211
+ index: true
1212
+ },
1213
+ {
1214
+ name: "location_group_id",
1215
+ type: "text",
1216
+ prefix: true,
1217
+ index: true
1218
+ },
1219
+ {
1220
+ name: "location_id",
1221
+ type: "text",
1222
+ prefix: true,
1223
+ index: true
1224
+ },
1225
+ {
1226
+ name: "stop_id",
1227
+ type: "text",
1228
+ required: true,
1229
+ prefix: true,
1230
+ index: true
1231
+ },
1232
+ {
1233
+ name: "stop_sequence",
1234
+ type: "integer",
1235
+ required: true,
1236
+ primary: true,
1237
+ min: 0
1238
+ },
1239
+ {
1240
+ name: "stop_headsign",
1241
+ type: "text",
1242
+ nocase: true
1243
+ },
1244
+ {
1245
+ name: "start_pickup_drop_off_window",
1246
+ type: "text"
1247
+ },
1248
+ {
1249
+ name: "start_pickup_drop_off_window_timestamp",
1250
+ type: "integer",
1251
+ index: true
1252
+ },
1253
+ {
1254
+ name: "pickup_type",
1255
+ type: "integer",
1256
+ min: 0,
1257
+ max: 3
1258
+ },
1259
+ {
1260
+ name: "drop_off_type",
1261
+ type: "integer",
1262
+ min: 0,
1263
+ max: 3
1264
+ },
1265
+ {
1266
+ name: "continuous_pickup",
1267
+ type: "integer",
1268
+ min: 0,
1269
+ max: 3
1270
+ },
1271
+ {
1272
+ name: "continuous_drop_off",
1273
+ type: "integer",
1274
+ min: 0,
1275
+ max: 3
1276
+ },
1277
+ {
1278
+ name: "shape_dist_traveled",
1279
+ type: "real",
1280
+ min: 0
1281
+ },
1282
+ {
1283
+ name: "timepoint",
1284
+ type: "integer",
1285
+ min: 0,
1286
+ max: 1
1287
+ },
1288
+ {
1289
+ name: "pickup_booking_rule_id",
1290
+ type: "text",
1291
+ prefix: true,
1292
+ index: true
1293
+ },
1294
+ {
1295
+ name: "drop_off_booking_rule_id",
1296
+ type: "text",
1297
+ prefix: true,
1298
+ index: true
1299
+ }
1300
+ ]
1301
+ };
1302
+ var stop_times_default = model25;
1303
+
1304
+ // src/models/gtfs/stops.ts
1305
+ var model26 = {
1306
+ filenameBase: "stops",
1307
+ filenameExtension: "txt",
1308
+ schema: [
1309
+ {
1310
+ name: "stop_id",
1311
+ type: "text",
1312
+ primary: true,
1313
+ required: true,
1314
+ prefix: true
1315
+ },
1316
+ {
1317
+ name: "stop_code",
1318
+ type: "text"
1319
+ },
1320
+ {
1321
+ name: "stop_name",
1322
+ type: "text",
1323
+ nocase: true
1324
+ },
1325
+ {
1326
+ name: "tts_stop_name",
1327
+ type: "text",
1328
+ nocase: true
1329
+ },
1330
+ {
1331
+ name: "stop_desc",
1332
+ type: "text",
1333
+ nocase: true
1334
+ },
1335
+ {
1336
+ name: "stop_lat",
1337
+ type: "real",
1338
+ min: -90,
1339
+ max: 90
1340
+ },
1341
+ {
1342
+ name: "stop_lon",
1343
+ type: "real",
1344
+ min: -180,
1345
+ max: 180
1346
+ },
1347
+ {
1348
+ name: "zone_id",
1349
+ type: "text",
1350
+ prefix: true
1351
+ },
1352
+ {
1353
+ name: "stop_url",
1354
+ type: "text"
1355
+ },
1356
+ {
1357
+ name: "location_type",
1358
+ type: "integer",
1359
+ min: 0,
1360
+ max: 4
1361
+ },
1362
+ {
1363
+ name: "parent_station",
1364
+ type: "text",
1365
+ index: true
1366
+ },
1367
+ {
1368
+ name: "stop_timezone",
1369
+ type: "text"
1370
+ },
1371
+ {
1372
+ name: "wheelchair_boarding",
1373
+ type: "integer",
1374
+ min: 0,
1375
+ max: 2
1376
+ },
1377
+ {
1378
+ name: "level_id",
1379
+ type: "text",
1380
+ prefix: true
1381
+ },
1382
+ {
1383
+ name: "platform_code",
1384
+ type: "text"
1385
+ }
1386
+ ]
1387
+ };
1388
+ var stops_default = model26;
1389
+
1390
+ // src/models/gtfs/timeframes.ts
1391
+ var model27 = {
1392
+ filenameBase: "timeframes",
1393
+ filenameExtension: "txt",
1394
+ schema: [
1395
+ {
1396
+ name: "timeframe_group_id",
1397
+ type: "text",
1398
+ primary: true,
1399
+ prefix: true
1400
+ },
1401
+ {
1402
+ name: "start_time",
1403
+ type: "text"
1404
+ },
1405
+ {
1406
+ name: "end_time",
1407
+ type: "text"
1408
+ },
1409
+ {
1410
+ name: "service_id",
1411
+ type: "text",
1412
+ required: true,
1413
+ index: true,
1414
+ prefix: true
1415
+ }
1416
+ ]
1417
+ };
1418
+ var timeframes_default = model27;
1419
+
1420
+ // src/models/gtfs/transfers.ts
1421
+ var model28 = {
1422
+ filenameBase: "transfers",
1423
+ filenameExtension: "txt",
1424
+ schema: [
1425
+ {
1426
+ name: "from_stop_id",
1427
+ type: "text",
1428
+ primary: true,
1429
+ prefix: true
1430
+ },
1431
+ {
1432
+ name: "to_stop_id",
1433
+ type: "text",
1434
+ primary: true,
1435
+ prefix: true
1436
+ },
1437
+ {
1438
+ name: "from_route_id",
1439
+ type: "text",
1440
+ primary: true,
1441
+ prefix: true
1442
+ },
1443
+ {
1444
+ name: "to_route_id",
1445
+ type: "text",
1446
+ primary: true,
1447
+ prefix: true
1448
+ },
1449
+ {
1450
+ name: "from_trip_id",
1451
+ type: "text",
1452
+ primary: true,
1453
+ prefix: true
1454
+ },
1455
+ {
1456
+ name: "to_trip_id",
1457
+ type: "text",
1458
+ primary: true,
1459
+ prefix: true
1460
+ },
1461
+ {
1462
+ name: "transfer_type",
1463
+ type: "integer",
1464
+ min: 0,
1465
+ max: 5,
1466
+ default: 0
1467
+ },
1468
+ {
1469
+ name: "min_transfer_time",
1470
+ type: "integer",
1471
+ min: 0
1472
+ }
1473
+ ]
1474
+ };
1475
+ var transfers_default = model28;
1476
+
1477
+ // src/models/gtfs/translations.ts
1478
+ var model29 = {
1479
+ filenameBase: "translations",
1480
+ filenameExtension: "txt",
1481
+ schema: [
1482
+ {
1483
+ name: "table_name",
1484
+ type: "text",
1485
+ primary: true,
1486
+ required: true
1487
+ },
1488
+ {
1489
+ name: "field_name",
1490
+ type: "text",
1491
+ primary: true,
1492
+ required: true
1493
+ },
1494
+ {
1495
+ name: "language",
1496
+ type: "text",
1497
+ primary: true,
1498
+ required: true
1499
+ },
1500
+ {
1501
+ name: "translation",
1502
+ type: "text",
1503
+ required: true
1504
+ },
1505
+ {
1506
+ name: "record_id",
1507
+ type: "text",
1508
+ primary: true,
1509
+ prefix: true
1510
+ },
1511
+ {
1512
+ name: "record_sub_id",
1513
+ type: "text",
1514
+ primary: true,
1515
+ prefix: true
1516
+ },
1517
+ {
1518
+ name: "field_value",
1519
+ type: "text",
1520
+ primary: true
1521
+ }
1522
+ ]
1523
+ };
1524
+ var translations_default = model29;
1525
+
1526
+ // src/models/gtfs/trips.ts
1527
+ var model30 = {
1528
+ filenameBase: "trips",
1529
+ filenameExtension: "txt",
1530
+ schema: [
1531
+ {
1532
+ name: "route_id",
1533
+ type: "text",
1534
+ required: true,
1535
+ index: true,
1536
+ prefix: true
1537
+ },
1538
+ {
1539
+ name: "service_id",
1540
+ type: "text",
1541
+ required: true,
1542
+ index: true,
1543
+ prefix: true
1544
+ },
1545
+ {
1546
+ name: "trip_id",
1547
+ type: "text",
1548
+ primary: true,
1549
+ required: true,
1550
+ prefix: true
1551
+ },
1552
+ {
1553
+ name: "trip_headsign",
1554
+ type: "text",
1555
+ nocase: true
1556
+ },
1557
+ {
1558
+ name: "trip_short_name",
1559
+ type: "text",
1560
+ nocase: true
1561
+ },
1562
+ {
1563
+ name: "direction_id",
1564
+ type: "integer",
1565
+ min: 0,
1566
+ max: 1,
1567
+ index: true
1568
+ },
1569
+ {
1570
+ name: "block_id",
1571
+ type: "text",
1572
+ index: true,
1573
+ prefix: true
1574
+ },
1575
+ {
1576
+ name: "shape_id",
1577
+ type: "text",
1578
+ index: true,
1579
+ prefix: true
1580
+ },
1581
+ {
1582
+ name: "wheelchair_accessible",
1583
+ type: "integer",
1584
+ min: 0,
1585
+ max: 2
1586
+ },
1587
+ {
1588
+ name: "bikes_allowed",
1589
+ type: "integer",
1590
+ min: 0,
1591
+ max: 2
1592
+ }
1593
+ ]
1594
+ };
1595
+ var trips_default = model30;
1596
+
1597
+ // src/models/non-standard/timetables.ts
1598
+ var model31 = {
1599
+ filenameBase: "timetables",
1600
+ filenameExtension: "txt",
1601
+ nonstandard: true,
1602
+ schema: [
1603
+ {
1604
+ name: "id",
1605
+ type: "integer",
1606
+ primary: true,
1607
+ prefix: true
1608
+ },
1609
+ {
1610
+ name: "timetable_id",
1611
+ type: "text",
1612
+ prefix: true
1613
+ },
1614
+ {
1615
+ name: "route_id",
1616
+ type: "text",
1617
+ prefix: true
1618
+ },
1619
+ {
1620
+ name: "direction_id",
1621
+ type: "integer",
1622
+ min: 0,
1623
+ max: 1
1624
+ },
1625
+ {
1626
+ name: "start_date",
1627
+ type: "integer"
1628
+ },
1629
+ {
1630
+ name: "end_date",
1631
+ type: "integer"
1632
+ },
1633
+ {
1634
+ name: "monday",
1635
+ type: "integer",
1636
+ required: true,
1637
+ min: 0,
1638
+ max: 1
1639
+ },
1640
+ {
1641
+ name: "tuesday",
1642
+ type: "integer",
1643
+ required: true,
1644
+ min: 0,
1645
+ max: 1
1646
+ },
1647
+ {
1648
+ name: "wednesday",
1649
+ type: "integer",
1650
+ required: true,
1651
+ min: 0,
1652
+ max: 1
1653
+ },
1654
+ {
1655
+ name: "thursday",
1656
+ type: "integer",
1657
+ required: true,
1658
+ min: 0,
1659
+ max: 1
1660
+ },
1661
+ {
1662
+ name: "friday",
1663
+ type: "integer",
1664
+ required: true,
1665
+ min: 0,
1666
+ max: 1
1667
+ },
1668
+ {
1669
+ name: "saturday",
1670
+ type: "integer",
1671
+ required: true,
1672
+ min: 0,
1673
+ max: 1
1674
+ },
1675
+ {
1676
+ name: "sunday",
1677
+ type: "integer",
1678
+ required: true,
1679
+ min: 0,
1680
+ max: 1
1681
+ },
1682
+ {
1683
+ name: "start_time",
1684
+ type: "text"
1685
+ },
1686
+ {
1687
+ name: "start_timestamp",
1688
+ type: "integer"
1689
+ },
1690
+ {
1691
+ name: "end_time",
1692
+ type: "text"
1693
+ },
1694
+ {
1695
+ name: "end_timestamp",
1696
+ type: "integer"
1697
+ },
1698
+ {
1699
+ name: "timetable_label",
1700
+ type: "text",
1701
+ nocase: true
1702
+ },
1703
+ {
1704
+ name: "service_notes",
1705
+ type: "text",
1706
+ nocase: true
1707
+ },
1708
+ {
1709
+ name: "orientation",
1710
+ type: "text"
1711
+ },
1712
+ {
1713
+ name: "timetable_page_id",
1714
+ type: "text"
1715
+ },
1716
+ {
1717
+ name: "timetable_sequence",
1718
+ type: "integer",
1719
+ min: 0,
1720
+ index: true
1721
+ },
1722
+ {
1723
+ name: "direction_name",
1724
+ type: "text"
1725
+ },
1726
+ {
1727
+ name: "include_exceptions",
1728
+ type: "integer",
1729
+ min: 0,
1730
+ max: 1
1731
+ },
1732
+ {
1733
+ name: "show_trip_continuation",
1734
+ type: "integer",
1735
+ min: 0,
1736
+ max: 1
1737
+ }
1738
+ ]
1739
+ };
1740
+ var timetables_default = model31;
1741
+
1742
+ // src/models/non-standard/timetable-pages.ts
1743
+ var model32 = {
1744
+ filenameBase: "timetable_pages",
1745
+ filenameExtension: "txt",
1746
+ nonstandard: true,
1747
+ schema: [
1748
+ {
1749
+ name: "timetable_page_id",
1750
+ type: "text",
1751
+ primary: true,
1752
+ prefix: true
1753
+ },
1754
+ {
1755
+ name: "timetable_page_label",
1756
+ type: "text"
1757
+ },
1758
+ {
1759
+ name: "filename",
1760
+ type: "text"
1761
+ }
1762
+ ]
1763
+ };
1764
+ var timetable_pages_default = model32;
1765
+
1766
+ // src/models/non-standard/timetable-stop-order.ts
1767
+ var model33 = {
1768
+ filenameBase: "timetable_stop_order",
1769
+ filenameExtension: "txt",
1770
+ nonstandard: true,
1771
+ schema: [
1772
+ {
1773
+ name: "id",
1774
+ type: "integer",
1775
+ primary: true,
1776
+ prefix: true
1777
+ },
1778
+ {
1779
+ name: "timetable_id",
1780
+ type: "text",
1781
+ index: true,
1782
+ prefix: true
1783
+ },
1784
+ {
1785
+ name: "stop_id",
1786
+ type: "text",
1787
+ prefix: true
1788
+ },
1789
+ {
1790
+ name: "stop_sequence",
1791
+ type: "integer",
1792
+ min: 0,
1793
+ index: true
1794
+ }
1795
+ ]
1796
+ };
1797
+ var timetable_stop_order_default = model33;
1798
+
1799
+ // src/models/non-standard/timetable-notes.ts
1800
+ var model34 = {
1801
+ filenameBase: "timetable_notes",
1802
+ filenameExtension: "txt",
1803
+ nonstandard: true,
1804
+ schema: [
1805
+ {
1806
+ name: "note_id",
1807
+ type: "text",
1808
+ primary: true,
1809
+ prefix: true
1810
+ },
1811
+ {
1812
+ name: "symbol",
1813
+ type: "text"
1814
+ },
1815
+ {
1816
+ name: "note",
1817
+ type: "text",
1818
+ nocase: true
1819
+ }
1820
+ ]
1821
+ };
1822
+ var timetable_notes_default = model34;
1823
+
1824
+ // src/models/non-standard/timetable-notes-references.ts
1825
+ var model35 = {
1826
+ filenameBase: "timetable_notes_references",
1827
+ filenameExtension: "txt",
1828
+ nonstandard: true,
1829
+ schema: [
1830
+ {
1831
+ name: "note_id",
1832
+ type: "text",
1833
+ prefix: true
1834
+ },
1835
+ {
1836
+ name: "timetable_id",
1837
+ type: "text",
1838
+ index: true,
1839
+ prefix: true
1840
+ },
1841
+ {
1842
+ name: "route_id",
1843
+ type: "text",
1844
+ index: true,
1845
+ prefix: true
1846
+ },
1847
+ {
1848
+ name: "trip_id",
1849
+ type: "text",
1850
+ index: true,
1851
+ prefix: true
1852
+ },
1853
+ {
1854
+ name: "stop_id",
1855
+ type: "text",
1856
+ index: true,
1857
+ prefix: true
1858
+ },
1859
+ {
1860
+ name: "stop_sequence",
1861
+ type: "integer",
1862
+ min: 0,
1863
+ index: true
1864
+ },
1865
+ {
1866
+ name: "show_on_stoptime",
1867
+ type: "integer",
1868
+ min: 0,
1869
+ max: 1
1870
+ }
1871
+ ]
1872
+ };
1873
+ var timetable_notes_references_default = model35;
1874
+
1875
+ // src/models/non-standard/trips-dated-vehicle-journey.ts
1876
+ var model36 = {
1877
+ filenameBase: "trips_dated_vehicle_journeys",
1878
+ filenameExtension: "txt",
1879
+ nonstandard: true,
1880
+ schema: [
1881
+ {
1882
+ name: "trip_id",
1883
+ type: "text",
1884
+ required: true,
1885
+ index: true,
1886
+ prefix: true
1887
+ },
1888
+ {
1889
+ name: "operating_day_date",
1890
+ type: "text",
1891
+ index: true,
1892
+ required: true
1893
+ },
1894
+ {
1895
+ name: "dated_vehicle_journey_gid",
1896
+ type: "text",
1897
+ required: true
1898
+ },
1899
+ {
1900
+ name: "journey_number",
1901
+ type: "integer",
1902
+ min: 0,
1903
+ max: 65535,
1904
+ index: true
1905
+ }
1906
+ ]
1907
+ };
1908
+ var trips_dated_vehicle_journey_default = model36;
1909
+
1910
+ // src/models/gtfs-plus/calendar-attributes.ts
1911
+ var model37 = {
1912
+ filenameBase: "calendar_attributes",
1913
+ filenameExtension: "txt",
1914
+ nonstandard: true,
1915
+ extension: "gtfs-plus",
1916
+ schema: [
1917
+ {
1918
+ name: "service_id",
1919
+ type: "text",
1920
+ primary: true,
1921
+ prefix: true
1922
+ },
1923
+ {
1924
+ name: "service_description",
1925
+ type: "text",
1926
+ required: true,
1927
+ nocase: true
1928
+ }
1929
+ ]
1930
+ };
1931
+ var calendar_attributes_default = model37;
1932
+
1933
+ // src/models/gtfs-plus/directions.ts
1934
+ var model38 = {
1935
+ filenameBase: "directions",
1936
+ filenameExtension: "txt",
1937
+ nonstandard: true,
1938
+ extension: "gtfs-plus",
1939
+ schema: [
1940
+ {
1941
+ name: "route_id",
1942
+ type: "text",
1943
+ required: true,
1944
+ primary: true,
1945
+ prefix: true
1946
+ },
1947
+ {
1948
+ name: "direction_id",
1949
+ type: "integer",
1950
+ min: 0,
1951
+ max: 1,
1952
+ primary: true
1953
+ },
1954
+ {
1955
+ name: "direction",
1956
+ type: "text",
1957
+ required: true
1958
+ }
1959
+ ]
1960
+ };
1961
+ var directions_default = model38;
1962
+
1963
+ // src/models/gtfs-plus/route-attributes.ts
1964
+ var model39 = {
1965
+ filenameBase: "route_attributes",
1966
+ filenameExtension: "txt",
1967
+ nonstandard: true,
1968
+ extension: "gtfs-plus",
1969
+ schema: [
1970
+ {
1971
+ name: "route_id",
1972
+ type: "text",
1973
+ primary: true,
1974
+ prefix: true
1975
+ },
1976
+ {
1977
+ name: "category",
1978
+ type: "integer",
1979
+ min: 0,
1980
+ required: true
1981
+ },
1982
+ {
1983
+ name: "subcategory",
1984
+ type: "integer",
1985
+ min: 101,
1986
+ required: true
1987
+ },
1988
+ {
1989
+ name: "running_way",
1990
+ type: "integer",
1991
+ min: 1,
1992
+ required: true
1993
+ }
1994
+ ]
1995
+ };
1996
+ var route_attributes_default = model39;
1997
+
1998
+ // src/models/gtfs-plus/stop-attributes.ts
1999
+ var model40 = {
2000
+ filenameBase: "stop_attributes",
2001
+ filenameExtension: "txt",
2002
+ nonstandard: true,
2003
+ extension: "gtfs-plus",
2004
+ schema: [
2005
+ {
2006
+ name: "stop_id",
2007
+ type: "text",
2008
+ required: true,
2009
+ primary: true,
2010
+ prefix: true
2011
+ },
2012
+ {
2013
+ name: "accessibility_id",
2014
+ type: "integer",
2015
+ min: 0
2016
+ },
2017
+ {
2018
+ name: "cardinal_direction",
2019
+ type: "text"
2020
+ },
2021
+ {
2022
+ name: "relative_position",
2023
+ type: "text"
2024
+ },
2025
+ {
2026
+ name: "stop_city",
2027
+ type: "text",
2028
+ nocase: true
2029
+ }
2030
+ ]
2031
+ };
2032
+ var stop_attributes_default = model40;
2033
+
2034
+ // src/models/gtfs-ride/board-alight.ts
2035
+ var model41 = {
2036
+ filenameBase: "board_alight",
2037
+ filenameExtension: "txt",
2038
+ nonstandard: true,
2039
+ extension: "gtfs-ride",
2040
+ schema: [
2041
+ {
2042
+ name: "trip_id",
2043
+ type: "text",
2044
+ required: true,
2045
+ index: true,
2046
+ prefix: true
2047
+ },
2048
+ {
2049
+ name: "stop_id",
2050
+ type: "text",
2051
+ required: true,
2052
+ index: true,
2053
+ prefix: true
2054
+ },
2055
+ {
2056
+ name: "stop_sequence",
2057
+ type: "integer",
2058
+ required: true,
2059
+ min: 0,
2060
+ index: true
2061
+ },
2062
+ {
2063
+ name: "record_use",
2064
+ type: "integer",
2065
+ required: true,
2066
+ min: 0,
2067
+ max: 1,
2068
+ index: true
2069
+ },
2070
+ {
2071
+ name: "schedule_relationship",
2072
+ type: "integer",
2073
+ min: 0,
2074
+ max: 8
2075
+ },
2076
+ {
2077
+ name: "boardings",
2078
+ type: "integer",
2079
+ min: 0
2080
+ },
2081
+ {
2082
+ name: "alightings",
2083
+ type: "integer",
2084
+ min: 0
2085
+ },
2086
+ {
2087
+ name: "current_load",
2088
+ type: "integer",
2089
+ min: 0
2090
+ },
2091
+ {
2092
+ name: "load_count",
2093
+ type: "integer",
2094
+ min: 0
2095
+ },
2096
+ {
2097
+ name: "load_type",
2098
+ type: "integer",
2099
+ min: 0,
2100
+ max: 1
2101
+ },
2102
+ {
2103
+ name: "rack_down",
2104
+ type: "integer",
2105
+ min: 0,
2106
+ max: 1
2107
+ },
2108
+ {
2109
+ name: "bike_boardings",
2110
+ type: "integer",
2111
+ min: 0
2112
+ },
2113
+ {
2114
+ name: "bike_alightings",
2115
+ type: "integer",
2116
+ min: 0
2117
+ },
2118
+ {
2119
+ name: "ramp_used",
2120
+ type: "integer",
2121
+ min: 0,
2122
+ max: 1
2123
+ },
2124
+ {
2125
+ name: "ramp_boardings",
2126
+ type: "integer",
2127
+ min: 0
2128
+ },
2129
+ {
2130
+ name: "ramp_alightings",
2131
+ type: "integer",
2132
+ min: 0
2133
+ },
2134
+ {
2135
+ name: "service_date",
2136
+ type: "integer",
2137
+ index: true
2138
+ },
2139
+ {
2140
+ name: "service_arrival_time",
2141
+ type: "text"
2142
+ },
2143
+ {
2144
+ name: "service_arrival_timestamp",
2145
+ type: "integer",
2146
+ index: true
2147
+ },
2148
+ {
2149
+ name: "service_departure_time",
2150
+ type: "text"
2151
+ },
2152
+ {
2153
+ name: "service_departure_timestamp",
2154
+ type: "integer",
2155
+ index: true
2156
+ },
2157
+ {
2158
+ name: "source",
2159
+ type: "integer",
2160
+ min: 0,
2161
+ max: 4
2162
+ }
2163
+ ]
2164
+ };
2165
+ var board_alight_default = model41;
2166
+
2167
+ // src/models/gtfs-ride/rider-trip.ts
2168
+ var model42 = {
2169
+ filenameBase: "rider_trip",
2170
+ filenameExtension: "txt",
2171
+ nonstandard: true,
2172
+ extension: "gtfs-ride",
2173
+ schema: [
2174
+ {
2175
+ name: "rider_id",
2176
+ type: "text",
2177
+ primary: true,
2178
+ prefix: true
2179
+ },
2180
+ {
2181
+ name: "agency_id",
2182
+ type: "text",
2183
+ index: true,
2184
+ prefix: true
2185
+ },
2186
+ {
2187
+ name: "trip_id",
2188
+ type: "text",
2189
+ index: true,
2190
+ prefix: true
2191
+ },
2192
+ {
2193
+ name: "boarding_stop_id",
2194
+ type: "text",
2195
+ index: true,
2196
+ prefix: true
2197
+ },
2198
+ {
2199
+ name: "boarding_stop_sequence",
2200
+ type: "integer",
2201
+ min: 0,
2202
+ index: true
2203
+ },
2204
+ {
2205
+ name: "alighting_stop_id",
2206
+ type: "text",
2207
+ index: true,
2208
+ prefix: true
2209
+ },
2210
+ {
2211
+ name: "alighting_stop_sequence",
2212
+ type: "integer",
2213
+ min: 0,
2214
+ index: true
2215
+ },
2216
+ {
2217
+ name: "service_date",
2218
+ type: "integer",
2219
+ index: true
2220
+ },
2221
+ {
2222
+ name: "boarding_time",
2223
+ type: "text"
2224
+ },
2225
+ {
2226
+ name: "boarding_timestamp",
2227
+ type: "integer",
2228
+ index: true
2229
+ },
2230
+ {
2231
+ name: "alighting_time",
2232
+ type: "text"
2233
+ },
2234
+ {
2235
+ name: "alighting_timestamp",
2236
+ type: "integer",
2237
+ index: true
2238
+ },
2239
+ {
2240
+ name: "rider_type",
2241
+ type: "integer",
2242
+ min: 0,
2243
+ max: 13
2244
+ },
2245
+ {
2246
+ name: "rider_type_description",
2247
+ type: "text"
2248
+ },
2249
+ {
2250
+ name: "fare_paid",
2251
+ type: "real"
2252
+ },
2253
+ {
2254
+ name: "transaction_type",
2255
+ type: "integer",
2256
+ min: 0,
2257
+ max: 8
2258
+ },
2259
+ {
2260
+ name: "fare_media",
2261
+ type: "integer",
2262
+ min: 0,
2263
+ max: 9
2264
+ },
2265
+ {
2266
+ name: "accompanying_device",
2267
+ type: "integer",
2268
+ min: 0,
2269
+ max: 6
2270
+ },
2271
+ {
2272
+ name: "transfer_status",
2273
+ type: "integer",
2274
+ min: 0,
2275
+ max: 1
2276
+ }
2277
+ ]
2278
+ };
2279
+ var rider_trip_default = model42;
2280
+
2281
+ // src/models/gtfs-ride/ridership.ts
2282
+ var model43 = {
2283
+ filenameBase: "ridership",
2284
+ filenameExtension: "txt",
2285
+ nonstandard: true,
2286
+ extension: "gtfs-ride",
2287
+ schema: [
2288
+ {
2289
+ name: "total_boardings",
2290
+ type: "integer",
2291
+ min: 0,
2292
+ required: true
2293
+ },
2294
+ {
2295
+ name: "total_alightings",
2296
+ type: "integer",
2297
+ min: 0,
2298
+ required: true
2299
+ },
2300
+ {
2301
+ name: "ridership_start_date",
2302
+ type: "integer",
2303
+ index: true
2304
+ },
2305
+ {
2306
+ name: "ridership_end_date",
2307
+ type: "integer",
2308
+ index: true
2309
+ },
2310
+ {
2311
+ name: "ridership_start_time",
2312
+ type: "text"
2313
+ },
2314
+ {
2315
+ name: "ridership_start_timestamp",
2316
+ type: "integer",
2317
+ index: true
2318
+ },
2319
+ {
2320
+ name: "ridership_end_time",
2321
+ type: "text"
2322
+ },
2323
+ {
2324
+ name: "ridership_end_timestamp",
2325
+ type: "integer",
2326
+ index: true
2327
+ },
2328
+ {
2329
+ name: "service_id",
2330
+ type: "text",
2331
+ index: true,
2332
+ prefix: true
2333
+ },
2334
+ {
2335
+ name: "monday",
2336
+ type: "integer",
2337
+ min: 0,
2338
+ max: 1
2339
+ },
2340
+ {
2341
+ name: "tuesday",
2342
+ type: "integer",
2343
+ min: 0,
2344
+ max: 1
2345
+ },
2346
+ {
2347
+ name: "wednesday",
2348
+ type: "integer",
2349
+ min: 0,
2350
+ max: 1
2351
+ },
2352
+ {
2353
+ name: "thursday",
2354
+ type: "integer",
2355
+ min: 0,
2356
+ max: 1
2357
+ },
2358
+ {
2359
+ name: "friday",
2360
+ type: "integer",
2361
+ min: 0,
2362
+ max: 1
2363
+ },
2364
+ {
2365
+ name: "saturday",
2366
+ type: "integer",
2367
+ min: 0,
2368
+ max: 1
2369
+ },
2370
+ {
2371
+ name: "sunday",
2372
+ type: "integer",
2373
+ min: 0,
2374
+ max: 1
2375
+ },
2376
+ {
2377
+ name: "agency_id",
2378
+ type: "text",
2379
+ index: true,
2380
+ prefix: true
2381
+ },
2382
+ {
2383
+ name: "route_id",
2384
+ type: "text",
2385
+ index: true,
2386
+ prefix: true
2387
+ },
2388
+ {
2389
+ name: "direction_id",
2390
+ type: "integer",
2391
+ min: 0,
2392
+ max: 1,
2393
+ index: true
2394
+ },
2395
+ {
2396
+ name: "trip_id",
2397
+ type: "text",
2398
+ prefix: true
2399
+ },
2400
+ {
2401
+ name: "stop_id",
2402
+ type: "text",
2403
+ prefix: true
2404
+ }
2405
+ ]
2406
+ };
2407
+ var ridership_default = model43;
2408
+
2409
+ // src/models/gtfs-ride/trip-capacity.ts
2410
+ var model44 = {
2411
+ filenameBase: "trip_capacity",
2412
+ filenameExtension: "txt",
2413
+ nonstandard: true,
2414
+ extension: "gtfs-ride",
2415
+ schema: [
2416
+ {
2417
+ name: "agency_id",
2418
+ type: "text",
2419
+ index: true,
2420
+ prefix: true
2421
+ },
2422
+ {
2423
+ name: "trip_id",
2424
+ type: "text",
2425
+ index: true,
2426
+ prefix: true
2427
+ },
2428
+ {
2429
+ name: "service_date",
2430
+ type: "integer",
2431
+ index: true
2432
+ },
2433
+ {
2434
+ name: "vehicle_description",
2435
+ type: "text"
2436
+ },
2437
+ {
2438
+ name: "seated_capacity",
2439
+ type: "integer",
2440
+ min: 0
2441
+ },
2442
+ {
2443
+ name: "standing_capacity",
2444
+ type: "integer",
2445
+ min: 0
2446
+ },
2447
+ {
2448
+ name: "wheelchair_capacity",
2449
+ type: "integer",
2450
+ min: 0
2451
+ },
2452
+ {
2453
+ name: "bike_capacity",
2454
+ type: "integer",
2455
+ min: 0
2456
+ }
2457
+ ]
2458
+ };
2459
+ var trip_capacity_default = model44;
2460
+
2461
+ // src/models/gtfs-ride/ride-feed-info.ts
2462
+ var model45 = {
2463
+ filenameBase: "ride_feed_info",
2464
+ filenameExtension: "txt",
2465
+ nonstandard: true,
2466
+ extension: "gtfs-ride",
2467
+ schema: [
2468
+ {
2469
+ name: "ride_files",
2470
+ type: "integer",
2471
+ min: 0,
2472
+ max: 6,
2473
+ required: true
2474
+ },
2475
+ {
2476
+ name: "ride_start_date",
2477
+ type: "integer",
2478
+ index: true
2479
+ },
2480
+ {
2481
+ name: "ride_end_date",
2482
+ type: "integer",
2483
+ index: true
2484
+ },
2485
+ {
2486
+ name: "gtfs_feed_date",
2487
+ type: "integer",
2488
+ index: true
2489
+ },
2490
+ {
2491
+ name: "default_currency_type",
2492
+ type: "text"
2493
+ },
2494
+ {
2495
+ name: "ride_feed_version",
2496
+ type: "text"
2497
+ }
2498
+ ]
2499
+ };
2500
+ var ride_feed_info_default = model45;
2501
+
2502
+ // src/models/gtfs-realtime/trip-updates.ts
2503
+ var model46 = {
2504
+ filenameBase: "trip_updates",
2505
+ extension: "gtfs-realtime",
2506
+ schema: [
2507
+ {
2508
+ name: "update_id",
2509
+ type: "text",
2510
+ required: true,
2511
+ primary: true,
2512
+ index: true,
2513
+ source: "id"
2514
+ },
2515
+ {
2516
+ name: "vehicle_id",
2517
+ type: "text",
2518
+ index: true,
2519
+ source: "tripUpdate.vehicle.id",
2520
+ default: null
2521
+ },
2522
+ {
2523
+ name: "trip_id",
2524
+ type: "text",
2525
+ index: true,
2526
+ source: "tripUpdate.trip.tripId",
2527
+ default: null
2528
+ },
2529
+ {
2530
+ name: "trip_start_time",
2531
+ type: "text",
2532
+ source: "tripUpdate.trip.startTime",
2533
+ default: null
2534
+ },
2535
+ {
2536
+ name: "direction_id",
2537
+ type: "integer",
2538
+ source: "tripUpdate.trip.directionId",
2539
+ default: null
2540
+ },
2541
+ {
2542
+ name: "route_id",
2543
+ type: "text",
2544
+ index: true,
2545
+ source: "tripUpdate.trip.routeId",
2546
+ default: null
2547
+ },
2548
+ {
2549
+ name: "start_date",
2550
+ type: "text",
2551
+ source: "tripUpdate.trip.startDate",
2552
+ default: null
2553
+ },
2554
+ {
2555
+ name: "timestamp",
2556
+ type: "text",
2557
+ source: "tripUpdate.timestamp",
2558
+ default: null
2559
+ },
2560
+ {
2561
+ name: "schedule_relationship",
2562
+ type: "text",
2563
+ source: "tripUpdate.trip.scheduleRelationship",
2564
+ default: null
2565
+ },
2566
+ {
2567
+ name: "created_timestamp",
2568
+ type: "integer",
2569
+ required: true
2570
+ },
2571
+ {
2572
+ name: "expiration_timestamp",
2573
+ type: "integer",
2574
+ required: true
2575
+ }
2576
+ ]
2577
+ };
2578
+ var trip_updates_default = model46;
2579
+
2580
+ // src/models/gtfs-realtime/stop-time-updates.ts
2581
+ var model47 = {
2582
+ filenameBase: "stop_time_updates",
2583
+ extension: "gtfs-realtime",
2584
+ schema: [
2585
+ {
2586
+ name: "trip_id",
2587
+ type: "text",
2588
+ index: true,
2589
+ source: "parent.tripUpdate.trip.tripId",
2590
+ default: null
2591
+ },
2592
+ {
2593
+ name: "trip_start_time",
2594
+ type: "text",
2595
+ source: "parent.tripUpdate.trip.startTime",
2596
+ default: null
2597
+ },
2598
+ {
2599
+ name: "direction_id",
2600
+ type: "integer",
2601
+ source: "parent.tripUpdate.trip.directionId",
2602
+ default: null
2603
+ },
2604
+ {
2605
+ name: "route_id",
2606
+ type: "text",
2607
+ index: true,
2608
+ source: "parent.tripUpdate.trip.routeId",
2609
+ default: null
2610
+ },
2611
+ {
2612
+ name: "stop_id",
2613
+ type: "text",
2614
+ index: true,
2615
+ source: "stopId",
2616
+ default: null
2617
+ },
2618
+ {
2619
+ name: "stop_sequence",
2620
+ type: "integer",
2621
+ source: "stopSequence",
2622
+ default: null
2623
+ },
2624
+ {
2625
+ name: "arrival_delay",
2626
+ type: "integer",
2627
+ source: "arrival.delay",
2628
+ default: null
2629
+ },
2630
+ {
2631
+ name: "departure_delay",
2632
+ type: "integer",
2633
+ source: "departure.delay",
2634
+ default: null
2635
+ },
2636
+ {
2637
+ name: "departure_timestamp",
2638
+ type: "text",
2639
+ source: "departure.time",
2640
+ default: null
2641
+ },
2642
+ {
2643
+ name: "arrival_timestamp",
2644
+ type: "text",
2645
+ source: "arrival.time",
2646
+ default: null
2647
+ },
2648
+ {
2649
+ name: "schedule_relationship",
2650
+ type: "text",
2651
+ source: "scheduleRelationship",
2652
+ default: null
2653
+ },
2654
+ {
2655
+ name: "created_timestamp",
2656
+ type: "integer",
2657
+ required: true
2658
+ },
2659
+ {
2660
+ name: "expiration_timestamp",
2661
+ type: "integer",
2662
+ required: true
2663
+ }
2664
+ ]
2665
+ };
2666
+ var stop_time_updates_default = model47;
2667
+
2668
+ // src/models/gtfs-realtime/vehicle-positions.ts
2669
+ var model48 = {
2670
+ filenameBase: "vehicle_positions",
2671
+ extension: "gtfs-realtime",
2672
+ schema: [
2673
+ {
2674
+ name: "update_id",
2675
+ type: "text",
2676
+ required: true,
2677
+ primary: true,
2678
+ index: true,
2679
+ source: "id"
2680
+ },
2681
+ {
2682
+ name: "bearing",
2683
+ type: "real",
2684
+ source: "vehicle.position.bearing",
2685
+ default: null
2686
+ },
2687
+ {
2688
+ name: "latitude",
2689
+ type: "real",
2690
+ min: -90,
2691
+ max: 90,
2692
+ source: "vehicle.position.latitude",
2693
+ default: null
2694
+ },
2695
+ {
2696
+ name: "longitude",
2697
+ type: "real",
2698
+ source: "vehicle.position.longitude",
2699
+ min: -180,
2700
+ max: 180,
2701
+ default: null
2702
+ },
2703
+ {
2704
+ name: "speed",
2705
+ type: "real",
2706
+ min: 0,
2707
+ source: "vehicle.position.speed",
2708
+ default: null
2709
+ },
2710
+ {
2711
+ name: "current_stop_sequence",
2712
+ type: "integer",
2713
+ source: "vehicle.currentStopSequence",
2714
+ default: null
2715
+ },
2716
+ {
2717
+ name: "trip_id",
2718
+ type: "text",
2719
+ index: true,
2720
+ source: "vehicle.trip.tripId",
2721
+ default: null
2722
+ },
2723
+ {
2724
+ name: "trip_start_date",
2725
+ type: "text",
2726
+ index: true,
2727
+ source: "vehicle.trip.startDate",
2728
+ default: null
2729
+ },
2730
+ {
2731
+ name: "trip_start_time",
2732
+ type: "text",
2733
+ index: true,
2734
+ source: "vehicle.trip.startTime",
2735
+ default: null
2736
+ },
2737
+ {
2738
+ name: "congestion_level",
2739
+ type: "text",
2740
+ source: "vehicle.congestionLevel",
2741
+ default: null
2742
+ },
2743
+ {
2744
+ name: "occupancy_status",
2745
+ type: "text",
2746
+ source: "vehicle.occupancyStatus",
2747
+ default: null
2748
+ },
2749
+ {
2750
+ name: "occupancy_percentage",
2751
+ type: "integer",
2752
+ source: "vehicle.occupancyPercentage",
2753
+ default: null
2754
+ },
2755
+ {
2756
+ name: "vehicle_stop_status",
2757
+ type: "text",
2758
+ source: "vehicle.vehicleStopStatus",
2759
+ default: null
2760
+ },
2761
+ {
2762
+ name: "vehicle_id",
2763
+ type: "text",
2764
+ index: true,
2765
+ source: "vehicle.vehicle.id",
2766
+ default: null
2767
+ },
2768
+ {
2769
+ name: "vehicle_label",
2770
+ type: "text",
2771
+ source: "vehicle.vehicle.label",
2772
+ default: null
2773
+ },
2774
+ {
2775
+ name: "vehicle_license_plate",
2776
+ type: "text",
2777
+ source: "vehicle.vehicle.licensePlate",
2778
+ default: null
2779
+ },
2780
+ {
2781
+ name: "vehicle_wheelchair_accessible",
2782
+ type: "text",
2783
+ source: "vehicle.vehicle.wheelchairAccessible",
2784
+ default: null
2785
+ },
2786
+ {
2787
+ name: "timestamp",
2788
+ type: "text",
2789
+ source: "vehicle.timestamp",
2790
+ default: null
2791
+ },
2792
+ {
2793
+ name: "created_timestamp",
2794
+ type: "integer",
2795
+ required: true
2796
+ },
2797
+ {
2798
+ name: "expiration_timestamp",
2799
+ type: "integer",
2800
+ required: true
2801
+ }
2802
+ ]
2803
+ };
2804
+ var vehicle_positions_default = model48;
2805
+
2806
+ // src/models/gtfs-realtime/service-alerts.ts
2807
+ var model49 = {
2808
+ filenameBase: "service_alerts",
2809
+ extension: "gtfs-realtime",
2810
+ schema: [
2811
+ {
2812
+ name: "id",
2813
+ type: "text",
2814
+ required: true,
2815
+ primary: true,
2816
+ index: true,
2817
+ source: "id"
2818
+ },
2819
+ {
2820
+ name: "cause",
2821
+ type: "integer",
2822
+ required: true,
2823
+ min: 0,
2824
+ source: "alert.cause",
2825
+ default: 0
2826
+ },
2827
+ {
2828
+ name: "start_time",
2829
+ type: "text",
2830
+ required: true,
2831
+ source: "alert.activePeriod[0].start",
2832
+ default: ""
2833
+ },
2834
+ {
2835
+ name: "end_time",
2836
+ type: "text",
2837
+ required: true,
2838
+ source: "alert.activePeriod[0].end",
2839
+ default: ""
2840
+ },
2841
+ {
2842
+ name: "headline",
2843
+ type: "text",
2844
+ required: true,
2845
+ source: "alert.headerText.translation[0].text",
2846
+ default: ""
2847
+ },
2848
+ {
2849
+ name: "description",
2850
+ type: "text",
2851
+ required: true,
2852
+ source: "alert.descriptionText.translation[0].text",
2853
+ default: ""
2854
+ },
2855
+ {
2856
+ name: "created_timestamp",
2857
+ type: "integer",
2858
+ required: true
2859
+ },
2860
+ {
2861
+ name: "expiration_timestamp",
2862
+ type: "integer",
2863
+ required: true
2864
+ }
2865
+ ]
2866
+ };
2867
+ var service_alerts_default = model49;
2868
+
2869
+ // src/models/gtfs-realtime/service-alert-targets.ts
2870
+ var model50 = {
2871
+ filenameBase: "service_alert_targets",
2872
+ extension: "gtfs-realtime",
2873
+ schema: [
2874
+ {
2875
+ name: "alert_id",
2876
+ type: "text",
2877
+ required: true,
2878
+ primary: true,
2879
+ source: "parent.id"
2880
+ },
2881
+ {
2882
+ name: "stop_id",
2883
+ type: "text",
2884
+ index: true,
2885
+ source: "stopId",
2886
+ default: null
2887
+ },
2888
+ {
2889
+ name: "route_id",
2890
+ type: "text",
2891
+ index: true,
2892
+ source: "routeId",
2893
+ default: null
2894
+ },
2895
+ {
2896
+ name: "created_timestamp",
2897
+ type: "integer",
2898
+ required: true
2899
+ },
2900
+ {
2901
+ name: "expiration_timestamp",
2902
+ type: "integer",
2903
+ required: true
2904
+ }
2905
+ ]
2906
+ };
2907
+ var service_alert_targets_default = model50;
2908
+
2909
+ // src/models/ods/deadhead-times.ts
2910
+ var model51 = {
2911
+ filenameBase: "deadhead_times",
2912
+ filenameExtension: "txt",
2913
+ nonstandard: true,
2914
+ extension: "ods",
2915
+ schema: [
2916
+ {
2917
+ name: "id",
2918
+ type: "integer",
2919
+ primary: true,
2920
+ prefix: true
2921
+ },
2922
+ {
2923
+ name: "deadhead_id",
2924
+ type: "text",
2925
+ required: true,
2926
+ index: true,
2927
+ prefix: true
2928
+ },
2929
+ {
2930
+ name: "arrival_time",
2931
+ type: "text",
2932
+ required: true
2933
+ },
2934
+ {
2935
+ name: "arrival_timestamp",
2936
+ type: "integer",
2937
+ index: true
2938
+ },
2939
+ {
2940
+ name: "departure_time",
2941
+ type: "text",
2942
+ required: true
2943
+ },
2944
+ {
2945
+ name: "departure_timestamp",
2946
+ type: "integer",
2947
+ index: true
2948
+ },
2949
+ {
2950
+ name: "ops_location_id",
2951
+ type: "text",
2952
+ prefix: true
2953
+ },
2954
+ {
2955
+ name: "stop_id",
2956
+ type: "text",
2957
+ prefix: true
2958
+ },
2959
+ {
2960
+ name: "location_sequence",
2961
+ type: "integer",
2962
+ required: true,
2963
+ min: 0,
2964
+ index: true
2965
+ },
2966
+ {
2967
+ name: "shape_dist_traveled",
2968
+ type: "real",
2969
+ min: 0
2970
+ }
2971
+ ]
2972
+ };
2973
+ var deadhead_times_default = model51;
2974
+
2975
+ // src/models/ods/deadheads.ts
2976
+ var model52 = {
2977
+ filenameBase: "deadheads",
2978
+ filenameExtension: "txt",
2979
+ nonstandard: true,
2980
+ extension: "ods",
2981
+ schema: [
2982
+ {
2983
+ name: "deadhead_id",
2984
+ type: "text",
2985
+ primary: true,
2986
+ required: true,
2987
+ prefix: true
2988
+ },
2989
+ {
2990
+ name: "service_id",
2991
+ type: "text",
2992
+ required: true,
2993
+ prefix: true
2994
+ },
2995
+ {
2996
+ name: "block_id",
2997
+ type: "text",
2998
+ required: true,
2999
+ index: true,
3000
+ prefix: true
3001
+ },
3002
+ {
3003
+ name: "shape_id",
3004
+ type: "text",
3005
+ index: true,
3006
+ prefix: true
3007
+ },
3008
+ {
3009
+ name: "to_trip_id",
3010
+ type: "text",
3011
+ index: true,
3012
+ prefix: true
3013
+ },
3014
+ {
3015
+ name: "from_trip_id",
3016
+ type: "text",
3017
+ index: true,
3018
+ prefix: true
3019
+ },
3020
+ {
3021
+ name: "to_deadhead_id",
3022
+ type: "text",
3023
+ index: true,
3024
+ prefix: true
3025
+ },
3026
+ {
3027
+ name: "from_deadhead_id",
3028
+ type: "text",
3029
+ index: true,
3030
+ prefix: true
3031
+ }
3032
+ ]
3033
+ };
3034
+ var deadheads_default = model52;
3035
+
3036
+ // src/models/ods/ops-locations.ts
3037
+ var model53 = {
3038
+ filenameBase: "ops_locations",
3039
+ filenameExtension: "txt",
3040
+ nonstandard: true,
3041
+ extension: "ods",
3042
+ schema: [
3043
+ {
3044
+ name: "ops_location_id",
3045
+ type: "text",
3046
+ primary: true,
3047
+ required: true,
3048
+ prefix: true
3049
+ },
3050
+ {
3051
+ name: "ops_location_code",
3052
+ type: "text"
3053
+ },
3054
+ {
3055
+ name: "ops_location_name",
3056
+ type: "text",
3057
+ required: true,
3058
+ nocase: true
3059
+ },
3060
+ {
3061
+ name: "ops_location_desc",
3062
+ type: "text",
3063
+ nocase: true
3064
+ },
3065
+ {
3066
+ name: "ops_location_lat",
3067
+ type: "real",
3068
+ required: true,
3069
+ min: -90,
3070
+ max: 90
3071
+ },
3072
+ {
3073
+ name: "ops_location_lon",
3074
+ type: "real",
3075
+ required: true,
3076
+ min: -180,
3077
+ max: 180
3078
+ }
3079
+ ]
3080
+ };
3081
+ var ops_locations_default = model53;
3082
+
3083
+ // src/models/ods/run-events.ts
3084
+ var model54 = {
3085
+ filenameBase: "run_event",
3086
+ filenameExtension: "txt",
3087
+ nonstandard: true,
3088
+ extension: "ods",
3089
+ schema: [
3090
+ {
3091
+ name: "run_event_id",
3092
+ type: "text",
3093
+ primary: true,
3094
+ required: true,
3095
+ prefix: true
3096
+ },
3097
+ {
3098
+ name: "piece_id",
3099
+ type: "text",
3100
+ required: true,
3101
+ prefix: true
3102
+ },
3103
+ {
3104
+ name: "event_type",
3105
+ type: "integer",
3106
+ required: true,
3107
+ min: 0,
3108
+ index: true
3109
+ },
3110
+ {
3111
+ name: "event_name",
3112
+ type: "text",
3113
+ nocase: true
3114
+ },
3115
+ {
3116
+ name: "event_time",
3117
+ type: "text",
3118
+ required: true
3119
+ },
3120
+ {
3121
+ name: "event_duration",
3122
+ type: "integer",
3123
+ required: true,
3124
+ min: 0
3125
+ },
3126
+ {
3127
+ name: "event_from_location_type",
3128
+ type: "integer",
3129
+ min: 0,
3130
+ max: 1,
3131
+ index: true
3132
+ },
3133
+ {
3134
+ name: "event_from_location_id",
3135
+ type: "text",
3136
+ prefix: true
3137
+ },
3138
+ {
3139
+ name: "event_to_location_type",
3140
+ type: "integer",
3141
+ min: 0,
3142
+ max: 1,
3143
+ index: true
3144
+ },
3145
+ {
3146
+ name: "event_to_location_id",
3147
+ type: "text",
3148
+ prefix: true
3149
+ }
3150
+ ]
3151
+ };
3152
+ var run_events_default = model54;
3153
+
3154
+ // src/models/ods/runs-pieces.ts
3155
+ var model55 = {
3156
+ filenameBase: "runs_pieces",
3157
+ filenameExtension: "txt",
3158
+ nonstandard: true,
3159
+ extension: "ods",
3160
+ schema: [
3161
+ {
3162
+ name: "run_id",
3163
+ type: "text",
3164
+ required: true
3165
+ },
3166
+ {
3167
+ name: "piece_id",
3168
+ type: "text",
3169
+ primary: true,
3170
+ required: true
3171
+ },
3172
+ {
3173
+ name: "start_type",
3174
+ type: "integer",
3175
+ required: true,
3176
+ min: 0,
3177
+ max: 2,
3178
+ index: true
3179
+ },
3180
+ {
3181
+ name: "start_trip_id",
3182
+ type: "text",
3183
+ required: true,
3184
+ index: true
3185
+ },
3186
+ {
3187
+ name: "start_trip_position",
3188
+ type: "integer",
3189
+ min: 0
3190
+ },
3191
+ {
3192
+ name: "end_type",
3193
+ type: "integer",
3194
+ required: true,
3195
+ min: 0,
3196
+ max: 2,
3197
+ index: true
3198
+ },
3199
+ {
3200
+ name: "end_trip_id",
3201
+ type: "text",
3202
+ required: true,
3203
+ index: true
3204
+ },
3205
+ {
3206
+ name: "end_trip_position",
3207
+ type: "integer",
3208
+ min: 0
3209
+ }
3210
+ ]
3211
+ };
3212
+ var runs_pieces_default = model55;
3213
+
3214
+ // src/models/models.ts
3215
+ var models = [
3216
+ agency_default,
3217
+ areas_default,
3218
+ attributions_default,
3219
+ booking_rules_default,
3220
+ calendar_dates_default,
3221
+ calendar_default,
3222
+ fare_attributes_default,
3223
+ fare_leg_rules_default,
3224
+ fare_media_default,
3225
+ fare_products_default,
3226
+ fare_rules_default,
3227
+ fare_transfer_rules_default,
3228
+ feed_info_default,
3229
+ frequencies_default,
3230
+ levels_default,
3231
+ location_groups_default,
3232
+ location_group_stops_default,
3233
+ locations_default,
3234
+ networks_default,
3235
+ pathways_default,
3236
+ route_networks_default,
3237
+ routes_default,
3238
+ shapes_default,
3239
+ stop_areas_default,
3240
+ stop_times_default,
3241
+ stops_default,
3242
+ timeframes_default,
3243
+ transfers_default,
3244
+ translations_default,
3245
+ trips_default,
3246
+ timetables_default,
3247
+ timetable_pages_default,
3248
+ timetable_stop_order_default,
3249
+ timetable_notes_default,
3250
+ timetable_notes_references_default,
3251
+ trips_dated_vehicle_journey_default,
3252
+ calendar_attributes_default,
3253
+ directions_default,
3254
+ route_attributes_default,
3255
+ stop_attributes_default,
3256
+ board_alight_default,
3257
+ ride_feed_info_default,
3258
+ rider_trip_default,
3259
+ ridership_default,
3260
+ trip_capacity_default,
3261
+ trip_updates_default,
3262
+ stop_time_updates_default,
3263
+ vehicle_positions_default,
3264
+ service_alerts_default,
3265
+ service_alert_targets_default,
3266
+ deadhead_times_default,
3267
+ deadheads_default,
3268
+ ops_locations_default,
3269
+ run_events_default,
3270
+ runs_pieces_default
3271
+ ];
3272
+ var models_default = models;
3273
+
3274
+ // src/lib/db.ts
3275
+ import Database from "better-sqlite3";
3276
+ import untildify2 from "untildify";
3277
+
3278
+ // src/lib/utils.ts
3279
+ import sqlString from "sqlstring-sqlite";
3280
+ import Long from "long";
3281
+ function validateConfigForImport(config) {
3282
+ if (!config.agencies || config.agencies.length === 0) {
3283
+ throw new Error("No `agencies` specified in config");
3284
+ }
3285
+ for (const [index, agency] of config.agencies.entries()) {
3286
+ if (!agency.path && !agency.url) {
3287
+ throw new Error(
3288
+ `No Agency \`url\` or \`path\` specified in config for agency index ${index}.`
3289
+ );
3290
+ }
3291
+ }
3292
+ return config;
3293
+ }
3294
+ function setDefaultConfig(initialConfig) {
3295
+ const defaults = {
3296
+ sqlitePath: ":memory:",
3297
+ ignoreDuplicates: false,
3298
+ gtfsRealtimeExpirationSeconds: 0
3299
+ };
3300
+ return {
3301
+ ...defaults,
3302
+ ...initialConfig
3303
+ };
3304
+ }
3305
+ function convertLongTimeToDate(longDate) {
3306
+ const { high, low, unsigned } = longDate;
3307
+ return new Date(new Long(low, high, unsigned).toInt() * 1e3).toISOString();
3308
+ }
3309
+
3310
+ // src/lib/db.ts
3311
+ var dbs = {};
3312
+ function setupDb(sqlitePath) {
3313
+ const db = new Database(untildify2(sqlitePath));
3314
+ db.pragma("journal_mode = OFF");
3315
+ db.pragma("synchronous = OFF");
3316
+ db.pragma("temp_store = MEMORY");
3317
+ dbs[sqlitePath] = db;
3318
+ return db;
3319
+ }
3320
+ function openDb(config = null) {
3321
+ if (config) {
3322
+ const { sqlitePath, db } = setDefaultConfig(config);
3323
+ if (db) {
3324
+ return db;
3325
+ }
3326
+ if (dbs[sqlitePath]) {
3327
+ return dbs[sqlitePath];
3328
+ }
3329
+ return setupDb(sqlitePath);
3330
+ }
3331
+ if (Object.keys(dbs).length === 1) {
3332
+ const filename = Object.keys(dbs)[0];
3333
+ return dbs[filename];
3334
+ }
3335
+ if (Object.keys(dbs).length > 1) {
3336
+ throw new Error(
3337
+ "Multiple databases open, please specify which one to use."
3338
+ );
3339
+ }
3340
+ throw new Error("Unable to find database connection.");
3341
+ }
3342
+
3343
+ // src/lib/geojson-utils.ts
3344
+ import {
3345
+ cloneDeep,
3346
+ filter,
3347
+ groupBy,
3348
+ last,
3349
+ omit as omit2,
3350
+ sortBy,
3351
+ omitBy
3352
+ } from "lodash-es";
3353
+ import { feature, featureCollection } from "@turf/helpers";
3354
+
3355
+ // src/lib/import.ts
3356
+ var downloadGtfsRealtimeData = async (url, task) => {
3357
+ const response = await fetch(url, {
3358
+ method: "GET",
3359
+ headers: {
3360
+ ...task.realtime_headers || {},
3361
+ "Accept-Encoding": "gzip"
3362
+ },
3363
+ signal: task.downloadTimeout ? AbortSignal.timeout(task.downloadTimeout) : void 0
3364
+ });
3365
+ if (response.status !== 200) {
3366
+ task.logWarning(`Unable to download GTFS-Realtime from ${url}`);
3367
+ return null;
3368
+ }
3369
+ const buffer = await response.arrayBuffer();
3370
+ const message = GtfsRealtimeBindings.transit_realtime.FeedMessage.decode(
3371
+ new Uint8Array(buffer)
3372
+ );
3373
+ return GtfsRealtimeBindings.transit_realtime.FeedMessage.toObject(message, {
3374
+ enums: String,
3375
+ longs: String,
3376
+ bytes: String,
3377
+ defaults: true,
3378
+ arrays: true,
3379
+ objects: true,
3380
+ oneofs: true
3381
+ });
3382
+ };
3383
+ function getDescendantProp(obj, defaultValue, source) {
3384
+ if (source === void 0) return defaultValue;
3385
+ const arr = source.split(".");
3386
+ while (arr.length) {
3387
+ const nextKey = arr.shift();
3388
+ if (nextKey === void 0) {
3389
+ return defaultValue;
3390
+ } else if (obj == null) {
3391
+ return defaultValue;
3392
+ } else if (nextKey?.includes("[")) {
3393
+ const arrayKey = nextKey.match(/(\w*)\[(\d+)\]/);
3394
+ if (arrayKey === null) {
3395
+ return defaultValue;
3396
+ }
3397
+ if (obj[arrayKey[1]] === void 0) {
3398
+ return defaultValue;
3399
+ }
3400
+ if (obj[arrayKey[1]][arrayKey[2]] === void 0) {
3401
+ return defaultValue;
3402
+ }
3403
+ obj = obj[arrayKey[1]][arrayKey[2]];
3404
+ } else {
3405
+ if (obj[nextKey] === void 0) {
3406
+ return defaultValue;
3407
+ }
3408
+ obj = obj[nextKey];
3409
+ }
3410
+ }
3411
+ if (obj.__isLong__) return convertLongTimeToDate(obj);
3412
+ return obj;
3413
+ }
3414
+ var deleteExpiredRealtimeData = (config) => {
3415
+ const log2 = log(config);
3416
+ const db = openDb(config);
3417
+ log2(`Removing expired GTFS-Realtime data`);
3418
+ db.prepare(
3419
+ `DELETE FROM vehicle_positions WHERE expiration_timestamp <= strftime('%s','now')`
3420
+ ).run();
3421
+ db.prepare(
3422
+ `DELETE FROM trip_updates WHERE expiration_timestamp <= strftime('%s','now')`
3423
+ ).run();
3424
+ db.prepare(
3425
+ `DELETE FROM stop_time_updates WHERE expiration_timestamp <= strftime('%s','now')`
3426
+ ).run();
3427
+ db.prepare(
3428
+ `DELETE FROM service_alerts WHERE expiration_timestamp <= strftime('%s','now')`
3429
+ ).run();
3430
+ db.prepare(
3431
+ `DELETE FROM service_alert_targets WHERE expiration_timestamp <= strftime('%s','now')`
3432
+ ).run();
3433
+ log2(`Removed expired GTFS-Realtime data\r`, true);
3434
+ };
3435
+ var prepareRealtimeValue = (entity, column, task) => {
3436
+ if (column.name === "created_timestamp") {
3437
+ return task.currentTimestamp;
3438
+ }
3439
+ if (column.name === "expiration_timestamp") {
3440
+ return task.currentTimestamp + task.gtfsRealtimeExpirationSeconds;
3441
+ }
3442
+ return sqlString2.escape(
3443
+ getDescendantProp(entity, column.default, column.source)
3444
+ );
3445
+ };
3446
+ var updateRealtimeData = async (task) => {
3447
+ if (!task.realtime_urls) {
3448
+ return;
3449
+ }
3450
+ const db = openDb({
3451
+ sqlitePath: task.sqlitePath,
3452
+ agencies: []
3453
+ });
3454
+ const vehiclePositionsModel = models_default.find(
3455
+ (x) => x.filenameBase === "vehicle_positions"
3456
+ );
3457
+ const tripUpdatesModel = models_default.find(
3458
+ (x) => x.filenameBase === "trip_updates"
3459
+ );
3460
+ const stoptimeUpdatesModel = models_default.find(
3461
+ (x) => x.filenameBase === "stop_time_updates"
3462
+ );
3463
+ const serviceAlertsModel = models_default.find(
3464
+ (x) => x.filenameBase === "service_alerts"
3465
+ );
3466
+ const serviceAlertTargetsModel = models_default.find(
3467
+ (x) => x.filenameBase === "service_alert_targets"
3468
+ );
3469
+ if (!vehiclePositionsModel || !tripUpdatesModel || !stoptimeUpdatesModel || !serviceAlertsModel || !serviceAlertTargetsModel) {
3470
+ task.logError("GTFS-Realtime models definitions not found");
3471
+ return;
3472
+ }
3473
+ task.log(
3474
+ `Starting GTFS-Realtime import from ${task.realtime_urls.length} urls`
3475
+ );
3476
+ for (const realtimeUrl of task.realtime_urls) {
3477
+ task.log(`Downloading GTFS-Realtime from ${realtimeUrl}`);
3478
+ const gtfsRealtimeData = await downloadGtfsRealtimeData(realtimeUrl, task);
3479
+ if (!gtfsRealtimeData?.entity) {
3480
+ continue;
3481
+ }
3482
+ task.log(`Download successful`);
3483
+ let totalLineCount = 0;
3484
+ for (const entity of gtfsRealtimeData.entity) {
3485
+ let model56;
3486
+ if (entity.vehicle) {
3487
+ model56 = vehiclePositionsModel;
3488
+ }
3489
+ if (entity.tripUpdate) {
3490
+ model56 = tripUpdatesModel;
3491
+ }
3492
+ if (entity.alert) {
3493
+ model56 = serviceAlertsModel;
3494
+ }
3495
+ if (!model56) {
3496
+ break;
3497
+ }
3498
+ const fieldValues = model56.schema.map(
3499
+ (column) => prepareRealtimeValue(entity, column, task)
3500
+ );
3501
+ try {
3502
+ db.prepare(
3503
+ `REPLACE INTO ${model56.filenameBase} (${model56.schema.map((column) => column.name).join(", ")}) VALUES (${fieldValues.join(", ")})`
3504
+ ).run();
3505
+ } catch (error) {
3506
+ task.logWarning("Import error: " + error.message);
3507
+ }
3508
+ if (entity.tripUpdate) {
3509
+ const stopTimeUpdateArray = [];
3510
+ for (const stopTimeUpdate of entity.tripUpdate.stopTimeUpdate) {
3511
+ stopTimeUpdate.parent = entity;
3512
+ const subValues = stoptimeUpdatesModel.schema.map(
3513
+ (column) => prepareRealtimeValue(stopTimeUpdate, column, task)
3514
+ );
3515
+ stopTimeUpdateArray.push(`(${subValues.join(", ")})`);
3516
+ totalLineCount++;
3517
+ }
3518
+ try {
3519
+ db.prepare(
3520
+ `REPLACE INTO ${stoptimeUpdatesModel.filenameBase} (${stoptimeUpdatesModel.schema.map((column) => column.name).join(", ")}) VALUES ${stopTimeUpdateArray.join(", ")}`
3521
+ ).run();
3522
+ } catch (error) {
3523
+ task.logWarning("Import error: " + error.message);
3524
+ }
3525
+ }
3526
+ if (entity.alert) {
3527
+ const alertTargetArray = [];
3528
+ for (const informedEntity of entity.alert.informedEntity) {
3529
+ informedEntity.parent = entity;
3530
+ const subValues = serviceAlertTargetsModel.schema.map(
3531
+ (column) => prepareRealtimeValue(informedEntity, column, task)
3532
+ );
3533
+ alertTargetArray.push(`(${subValues.join(", ")})`);
3534
+ totalLineCount++;
3535
+ }
3536
+ try {
3537
+ db.prepare(
3538
+ `REPLACE INTO ${serviceAlertTargetsModel.filenameBase} (${serviceAlertTargetsModel.schema.map((column) => column.name).join(", ")}) VALUES ${alertTargetArray.join(", ")}`
3539
+ ).run();
3540
+ } catch (error) {
3541
+ task.logWarning("Import error: " + error.message);
3542
+ }
3543
+ }
3544
+ task.log(`Importing - ${totalLineCount++} entries imported\r`, true);
3545
+ }
3546
+ }
3547
+ task.log(`GTFS-Realtime data import complete`);
3548
+ };
3549
+ async function updateGtfsRealtime(initialConfig) {
3550
+ const config = setDefaultConfig(initialConfig);
3551
+ validateConfigForImport(config);
3552
+ const log2 = log(config);
3553
+ const logError2 = logError(config);
3554
+ const logWarning2 = logWarning(config);
3555
+ try {
3556
+ openDb(config);
3557
+ const agencyCount = config.agencies.length;
3558
+ log2(
3559
+ `Starting GTFS-Realtime refresh for ${pluralize(
3560
+ "agencies",
3561
+ agencyCount,
3562
+ true
3563
+ )} using SQLite database at ${config.sqlitePath}`
3564
+ );
3565
+ deleteExpiredRealtimeData(config);
3566
+ await Promise.all(
3567
+ config.agencies.map(async (agency) => {
3568
+ if (agency.realtimeUrls === void 0) {
3569
+ return;
3570
+ }
3571
+ const task = {
3572
+ realtime_headers: agency.realtimeHeaders,
3573
+ realtime_urls: agency.realtimeUrls,
3574
+ downloadTimeout: config.downloadTimeout,
3575
+ gtfsRealtimeExpirationSeconds: config.gtfsRealtimeExpirationSeconds,
3576
+ sqlitePath: config.sqlitePath,
3577
+ currentTimestamp: Math.floor(Date.now() / 1e3),
3578
+ log: log2,
3579
+ logWarning: logWarning2,
3580
+ logError: logError2
3581
+ };
3582
+ await updateRealtimeData(task);
3583
+ })
3584
+ );
3585
+ log2(
3586
+ `Completed GTFS-Realtime refresh for ${pluralize(
3587
+ "agencies",
3588
+ agencyCount,
3589
+ true
3590
+ )}
3591
+ `
3592
+ );
3593
+ } catch (error) {
3594
+ if (error?.code === "SQLITE_CANTOPEN") {
3595
+ logError2(
3596
+ `Unae to open sqlite database "${config.sqlitePath}" defined as \`sqlitePath\` config.json. Ensure the parent directory exists or remove \`sqlitePath\` from config.json.`
3597
+ );
3598
+ }
3599
+ throw error;
3600
+ }
3601
+ }
3602
+
3603
+ // src/lib/export.ts
3604
+ import { without, compact } from "lodash-es";
3605
+ import pluralize2 from "pluralize";
3606
+ import { stringify } from "csv-stringify";
3607
+ import sqlString3 from "sqlstring-sqlite";
3608
+ import mapSeries2 from "promise-map-series";
3609
+ import untildify4 from "untildify";
3610
+
3611
+ // src/lib/advancedQuery.ts
3612
+ import sqlString4 from "sqlstring-sqlite";
3613
+
3614
+ // src/lib/gtfs/agencies.ts
3615
+ import sqlString5 from "sqlstring-sqlite";
3616
+
3617
+ // src/lib/gtfs/areas.ts
3618
+ import sqlString6 from "sqlstring-sqlite";
3619
+
3620
+ // src/lib/gtfs/attributions.ts
3621
+ import sqlString7 from "sqlstring-sqlite";
3622
+
3623
+ // src/lib/gtfs/booking-rules.ts
3624
+ import sqlString8 from "sqlstring-sqlite";
3625
+
3626
+ // src/lib/gtfs/calendar-dates.ts
3627
+ import sqlString9 from "sqlstring-sqlite";
3628
+
3629
+ // src/lib/gtfs/calendars.ts
3630
+ import sqlString10 from "sqlstring-sqlite";
3631
+
3632
+ // src/lib/gtfs/fare-attributes.ts
3633
+ import sqlString11 from "sqlstring-sqlite";
3634
+
3635
+ // src/lib/gtfs/fare-leg-rules.ts
3636
+ import sqlString12 from "sqlstring-sqlite";
3637
+
3638
+ // src/lib/gtfs/fare-media.ts
3639
+ import sqlString13 from "sqlstring-sqlite";
3640
+
3641
+ // src/lib/gtfs/fare-products.ts
3642
+ import sqlString14 from "sqlstring-sqlite";
3643
+
3644
+ // src/lib/gtfs/fare-rules.ts
3645
+ import sqlString15 from "sqlstring-sqlite";
3646
+
3647
+ // src/lib/gtfs/fare-transfer-rules.ts
3648
+ import sqlString16 from "sqlstring-sqlite";
3649
+
3650
+ // src/lib/gtfs/feed-info.ts
3651
+ import sqlString17 from "sqlstring-sqlite";
3652
+
3653
+ // src/lib/gtfs/frequencies.ts
3654
+ import sqlString18 from "sqlstring-sqlite";
3655
+
3656
+ // src/lib/gtfs/levels.ts
3657
+ import sqlString19 from "sqlstring-sqlite";
3658
+
3659
+ // src/lib/gtfs/location-groups.ts
3660
+ import sqlString20 from "sqlstring-sqlite";
3661
+
3662
+ // src/lib/gtfs/location-group-stops.ts
3663
+ import sqlString21 from "sqlstring-sqlite";
3664
+
3665
+ // src/lib/gtfs/locations.ts
3666
+ import sqlString22 from "sqlstring-sqlite";
3667
+
3668
+ // src/lib/gtfs/networks.ts
3669
+ import sqlString23 from "sqlstring-sqlite";
3670
+
3671
+ // src/lib/gtfs/pathways.ts
3672
+ import sqlString24 from "sqlstring-sqlite";
3673
+
3674
+ // src/lib/gtfs/route-networks.ts
3675
+ import sqlString25 from "sqlstring-sqlite";
3676
+
3677
+ // src/lib/gtfs/routes.ts
3678
+ import { omit as omit3, pick } from "lodash-es";
3679
+ import sqlString26 from "sqlstring-sqlite";
3680
+
3681
+ // src/lib/gtfs/shapes.ts
3682
+ import { omit as omit4, pick as pick2 } from "lodash-es";
3683
+ import sqlString28 from "sqlstring-sqlite";
3684
+ import { featureCollection as featureCollection2 } from "@turf/helpers";
3685
+
3686
+ // src/lib/gtfs-plus/route-attributes.ts
3687
+ import sqlString27 from "sqlstring-sqlite";
3688
+
3689
+ // src/lib/gtfs/stop-areas.ts
3690
+ import sqlString29 from "sqlstring-sqlite";
3691
+
3692
+ // src/lib/gtfs/stops.ts
3693
+ import { omit as omit5, orderBy, pick as pick3 } from "lodash-es";
3694
+ import sqlString31 from "sqlstring-sqlite";
3695
+
3696
+ // src/lib/gtfs-plus/stop-attributes.ts
3697
+ import sqlString30 from "sqlstring-sqlite";
3698
+
3699
+ // src/lib/gtfs/stop-times.ts
3700
+ import sqlString32 from "sqlstring-sqlite";
3701
+
3702
+ // src/lib/gtfs/timeframes.ts
3703
+ import sqlString33 from "sqlstring-sqlite";
3704
+
3705
+ // src/lib/gtfs/transfers.ts
3706
+ import sqlString34 from "sqlstring-sqlite";
3707
+
3708
+ // src/lib/gtfs/translations.ts
3709
+ import sqlString35 from "sqlstring-sqlite";
3710
+
3711
+ // src/lib/gtfs/trips.ts
3712
+ import sqlString36 from "sqlstring-sqlite";
3713
+
3714
+ // src/lib/gtfs-plus/calendar-attributes.ts
3715
+ import sqlString37 from "sqlstring-sqlite";
3716
+
3717
+ // src/lib/gtfs-plus/directions.ts
3718
+ import sqlString38 from "sqlstring-sqlite";
3719
+
3720
+ // src/lib/non-standard/timetables.ts
3721
+ import sqlString39 from "sqlstring-sqlite";
3722
+
3723
+ // src/lib/non-standard/timetable-stop-order.ts
3724
+ import sqlString40 from "sqlstring-sqlite";
3725
+
3726
+ // src/lib/non-standard/timetable-pages.ts
3727
+ import sqlString41 from "sqlstring-sqlite";
3728
+
3729
+ // src/lib/non-standard/timetable-notes.ts
3730
+ import sqlString42 from "sqlstring-sqlite";
3731
+
3732
+ // src/lib/non-standard/timetable-notes-references.ts
3733
+ import sqlString43 from "sqlstring-sqlite";
3734
+
3735
+ // src/lib/non-standard/trips-dated-vehicle-journey.ts
3736
+ import sqlString44 from "sqlstring-sqlite";
3737
+
3738
+ // src/lib/gtfs-ride/board-alights.ts
3739
+ import sqlString45 from "sqlstring-sqlite";
3740
+
3741
+ // src/lib/gtfs-ride/ride-feed-infos.ts
3742
+ import sqlString46 from "sqlstring-sqlite";
3743
+
3744
+ // src/lib/gtfs-ride/rider-trips.ts
3745
+ import sqlString47 from "sqlstring-sqlite";
3746
+
3747
+ // src/lib/gtfs-ride/riderships.ts
3748
+ import sqlString48 from "sqlstring-sqlite";
3749
+
3750
+ // src/lib/gtfs-ride/trip-capacities.ts
3751
+ import sqlString49 from "sqlstring-sqlite";
3752
+
3753
+ // src/lib/gtfs-realtime/stop-time-updates.ts
3754
+ import sqlString50 from "sqlstring-sqlite";
3755
+
3756
+ // src/lib/gtfs-realtime/trip-updates.ts
3757
+ import sqlString51 from "sqlstring-sqlite";
3758
+
3759
+ // src/lib/gtfs-realtime/vehicle-positions.ts
3760
+ import sqlString52 from "sqlstring-sqlite";
3761
+
3762
+ // src/lib/gtfs-realtime/service-alerts.ts
3763
+ import sqlString53 from "sqlstring-sqlite";
3764
+
3765
+ // src/lib/ods/deadheads.ts
3766
+ import sqlString54 from "sqlstring-sqlite";
3767
+
3768
+ // src/lib/ods/deadhead-times.ts
3769
+ import sqlString55 from "sqlstring-sqlite";
3770
+
3771
+ // src/lib/ods/ops-locations.ts
3772
+ import sqlString56 from "sqlstring-sqlite";
3773
+
3774
+ // src/lib/ods/run-events.ts
3775
+ import sqlString57 from "sqlstring-sqlite";
3776
+
3777
+ // src/lib/ods/runs-pieces.ts
3778
+ import sqlString58 from "sqlstring-sqlite";
3779
+
3780
+ // src/bin/gtfsrealtime-update.ts
3781
+ var pe = new PrettyError();
3782
+ var argv = yargs(hideBin(process.argv)).usage("Usage: $0 --configPath ./config.json").help().option("c", {
3783
+ alias: "configPath",
3784
+ describe: "Path to config file",
3785
+ type: "string"
3786
+ }).default("configPath", void 0).parseSync();
3787
+ var handleError = (error = "Unknown Error") => {
3788
+ process.stdout.write(`
3789
+ ${formatError(error)}
3790
+ `);
3791
+ console.error(pe.render(error));
3792
+ process.exit(1);
3793
+ };
3794
+ var setupImport = async () => {
3795
+ const config = await getConfig({
3796
+ configPath: argv.configPath
3797
+ });
3798
+ await updateGtfsRealtime(config);
3799
+ process.exit();
3800
+ };
3801
+ setupImport().catch(handleError);
3802
+ //# sourceMappingURL=gtfsrealtime-update.js.map