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