gtfs 4.12.0 → 4.13.1

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