gtfs 4.16.0 → 4.17.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.
- package/dist/bin/gtfs-export.js +60 -23
- package/dist/bin/gtfs-export.js.map +1 -1
- package/dist/bin/gtfs-import.js +165 -132
- package/dist/bin/gtfs-import.js.map +1 -1
- package/dist/bin/gtfsrealtime-update.js +159 -130
- package/dist/bin/gtfsrealtime-update.js.map +1 -1
- package/dist/index.js +171 -137
- package/dist/index.js.map +1 -1
- package/dist/models/models.d.ts +44 -3
- package/dist/models/models.js +55 -18
- package/dist/models/models.js.map +1 -1
- package/package.json +4 -3
package/dist/bin/gtfs-import.js
CHANGED
|
@@ -168,7 +168,7 @@ __export(models_exports, {
|
|
|
168
168
|
routes: () => routes,
|
|
169
169
|
runEvents: () => runEvents,
|
|
170
170
|
runsPieces: () => runsPieces,
|
|
171
|
-
|
|
171
|
+
serviceAlertInformedEntities: () => serviceAlertInformedEntities,
|
|
172
172
|
serviceAlerts: () => serviceAlerts,
|
|
173
173
|
shapes: () => shapes,
|
|
174
174
|
stopAreas: () => stopAreas,
|
|
@@ -1399,7 +1399,8 @@ var stops = {
|
|
|
1399
1399
|
{
|
|
1400
1400
|
name: "parent_station",
|
|
1401
1401
|
type: "text",
|
|
1402
|
-
index: true
|
|
1402
|
+
index: true,
|
|
1403
|
+
prefix: true
|
|
1403
1404
|
},
|
|
1404
1405
|
{
|
|
1405
1406
|
name: "stop_timezone",
|
|
@@ -2495,21 +2496,24 @@ var tripUpdates = {
|
|
|
2495
2496
|
required: true,
|
|
2496
2497
|
primary: true,
|
|
2497
2498
|
index: true,
|
|
2498
|
-
source: "id"
|
|
2499
|
+
source: "id",
|
|
2500
|
+
prefix: true
|
|
2499
2501
|
},
|
|
2500
2502
|
{
|
|
2501
2503
|
name: "vehicle_id",
|
|
2502
2504
|
type: "text",
|
|
2503
2505
|
index: true,
|
|
2504
2506
|
source: "tripUpdate.vehicle.id",
|
|
2505
|
-
default: null
|
|
2507
|
+
default: null,
|
|
2508
|
+
prefix: true
|
|
2506
2509
|
},
|
|
2507
2510
|
{
|
|
2508
2511
|
name: "trip_id",
|
|
2509
2512
|
type: "text",
|
|
2510
2513
|
index: true,
|
|
2511
2514
|
source: "tripUpdate.trip.tripId",
|
|
2512
|
-
default: null
|
|
2515
|
+
default: null,
|
|
2516
|
+
prefix: true
|
|
2513
2517
|
},
|
|
2514
2518
|
{
|
|
2515
2519
|
name: "trip_start_time",
|
|
@@ -2528,7 +2532,8 @@ var tripUpdates = {
|
|
|
2528
2532
|
type: "text",
|
|
2529
2533
|
index: true,
|
|
2530
2534
|
source: "tripUpdate.trip.routeId",
|
|
2531
|
-
default: null
|
|
2535
|
+
default: null,
|
|
2536
|
+
prefix: true
|
|
2532
2537
|
},
|
|
2533
2538
|
{
|
|
2534
2539
|
name: "start_date",
|
|
@@ -2571,7 +2576,8 @@ var stopTimeUpdates = {
|
|
|
2571
2576
|
type: "text",
|
|
2572
2577
|
index: true,
|
|
2573
2578
|
source: "parent.tripUpdate.trip.tripId",
|
|
2574
|
-
default: null
|
|
2579
|
+
default: null,
|
|
2580
|
+
prefix: true
|
|
2575
2581
|
},
|
|
2576
2582
|
{
|
|
2577
2583
|
name: "trip_start_time",
|
|
@@ -2590,14 +2596,16 @@ var stopTimeUpdates = {
|
|
|
2590
2596
|
type: "text",
|
|
2591
2597
|
index: true,
|
|
2592
2598
|
source: "parent.tripUpdate.trip.routeId",
|
|
2593
|
-
default: null
|
|
2599
|
+
default: null,
|
|
2600
|
+
prefix: true
|
|
2594
2601
|
},
|
|
2595
2602
|
{
|
|
2596
2603
|
name: "stop_id",
|
|
2597
2604
|
type: "text",
|
|
2598
2605
|
index: true,
|
|
2599
2606
|
source: "stopId",
|
|
2600
|
-
default: null
|
|
2607
|
+
default: null,
|
|
2608
|
+
prefix: true
|
|
2601
2609
|
},
|
|
2602
2610
|
{
|
|
2603
2611
|
name: "stop_sequence",
|
|
@@ -2659,7 +2667,8 @@ var vehiclePositions = {
|
|
|
2659
2667
|
required: true,
|
|
2660
2668
|
primary: true,
|
|
2661
2669
|
index: true,
|
|
2662
|
-
source: "id"
|
|
2670
|
+
source: "id",
|
|
2671
|
+
prefix: true
|
|
2663
2672
|
},
|
|
2664
2673
|
{
|
|
2665
2674
|
name: "bearing",
|
|
@@ -2701,7 +2710,8 @@ var vehiclePositions = {
|
|
|
2701
2710
|
type: "text",
|
|
2702
2711
|
index: true,
|
|
2703
2712
|
source: "vehicle.trip.tripId",
|
|
2704
|
-
default: null
|
|
2713
|
+
default: null,
|
|
2714
|
+
prefix: true
|
|
2705
2715
|
},
|
|
2706
2716
|
{
|
|
2707
2717
|
name: "trip_start_date",
|
|
@@ -2746,7 +2756,8 @@ var vehiclePositions = {
|
|
|
2746
2756
|
type: "text",
|
|
2747
2757
|
index: true,
|
|
2748
2758
|
source: "vehicle.vehicle.id",
|
|
2749
|
-
default: null
|
|
2759
|
+
default: null,
|
|
2760
|
+
prefix: true
|
|
2750
2761
|
},
|
|
2751
2762
|
{
|
|
2752
2763
|
name: "vehicle_label",
|
|
@@ -2796,7 +2807,8 @@ var serviceAlerts = {
|
|
|
2796
2807
|
required: true,
|
|
2797
2808
|
primary: true,
|
|
2798
2809
|
index: true,
|
|
2799
|
-
source: "id"
|
|
2810
|
+
source: "id",
|
|
2811
|
+
prefix: true
|
|
2800
2812
|
},
|
|
2801
2813
|
{
|
|
2802
2814
|
name: "active_period",
|
|
@@ -2875,9 +2887,9 @@ var serviceAlerts = {
|
|
|
2875
2887
|
]
|
|
2876
2888
|
};
|
|
2877
2889
|
|
|
2878
|
-
// src/models/gtfs-realtime/service-alert-
|
|
2879
|
-
var
|
|
2880
|
-
filenameBase: "
|
|
2890
|
+
// src/models/gtfs-realtime/service-alert-informed_entities.ts
|
|
2891
|
+
var serviceAlertInformedEntities = {
|
|
2892
|
+
filenameBase: "service_alert_informed_entities",
|
|
2881
2893
|
extension: "gtfs-realtime",
|
|
2882
2894
|
schema: [
|
|
2883
2895
|
{
|
|
@@ -2885,20 +2897,45 @@ var serviceAlertTargets = {
|
|
|
2885
2897
|
type: "text",
|
|
2886
2898
|
required: true,
|
|
2887
2899
|
primary: true,
|
|
2888
|
-
source: "parent.id"
|
|
2900
|
+
source: "parent.id",
|
|
2901
|
+
prefix: true
|
|
2889
2902
|
},
|
|
2890
2903
|
{
|
|
2891
2904
|
name: "stop_id",
|
|
2892
2905
|
type: "text",
|
|
2893
2906
|
index: true,
|
|
2894
2907
|
source: "stopId",
|
|
2895
|
-
default: null
|
|
2908
|
+
default: null,
|
|
2909
|
+
prefix: true
|
|
2896
2910
|
},
|
|
2897
2911
|
{
|
|
2898
2912
|
name: "route_id",
|
|
2899
2913
|
type: "text",
|
|
2900
2914
|
index: true,
|
|
2901
2915
|
source: "routeId",
|
|
2916
|
+
default: null,
|
|
2917
|
+
prefix: true
|
|
2918
|
+
},
|
|
2919
|
+
{
|
|
2920
|
+
name: "route_type",
|
|
2921
|
+
type: "integer",
|
|
2922
|
+
index: true,
|
|
2923
|
+
source: "routeType",
|
|
2924
|
+
default: null
|
|
2925
|
+
},
|
|
2926
|
+
{
|
|
2927
|
+
name: "trip_id",
|
|
2928
|
+
type: "text",
|
|
2929
|
+
index: true,
|
|
2930
|
+
source: "trip.tripId",
|
|
2931
|
+
default: null,
|
|
2932
|
+
prefix: true
|
|
2933
|
+
},
|
|
2934
|
+
{
|
|
2935
|
+
name: "direction_id",
|
|
2936
|
+
type: "integer",
|
|
2937
|
+
index: true,
|
|
2938
|
+
source: "directionId",
|
|
2902
2939
|
default: null
|
|
2903
2940
|
},
|
|
2904
2941
|
{
|
|
@@ -3279,8 +3316,8 @@ function isValidJSON(string) {
|
|
|
3279
3316
|
// src/lib/import-gtfs-realtime.ts
|
|
3280
3317
|
import pluralize from "pluralize";
|
|
3281
3318
|
import GtfsRealtimeBindings from "gtfs-realtime-bindings";
|
|
3282
|
-
import sqlString2 from "sqlstring-sqlite";
|
|
3283
3319
|
import mapSeries from "promise-map-series";
|
|
3320
|
+
import { get } from "lodash-es";
|
|
3284
3321
|
|
|
3285
3322
|
// src/lib/utils.ts
|
|
3286
3323
|
import sqlString from "sqlstring-sqlite";
|
|
@@ -3337,39 +3374,14 @@ function padLeadingZeros(time) {
|
|
|
3337
3374
|
function getTimestampColumnName(columnName) {
|
|
3338
3375
|
return columnName.endsWith("time") ? `${columnName}stamp` : `${columnName}_timestamp`;
|
|
3339
3376
|
}
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
if (path3 === void 0) return defaultValue;
|
|
3344
|
-
const arr = path3.split(".");
|
|
3345
|
-
while (arr.length) {
|
|
3346
|
-
const nextKey = arr.shift();
|
|
3347
|
-
if (nextKey === void 0) {
|
|
3348
|
-
return defaultValue;
|
|
3349
|
-
} else if (obj == null) {
|
|
3350
|
-
return defaultValue;
|
|
3351
|
-
} else if (nextKey?.includes("[")) {
|
|
3352
|
-
const arrayKey = nextKey.match(/(\w*)\[(\d+)\]/);
|
|
3353
|
-
if (arrayKey === null) {
|
|
3354
|
-
return defaultValue;
|
|
3355
|
-
}
|
|
3356
|
-
if (obj[arrayKey[1]] === void 0) {
|
|
3357
|
-
return defaultValue;
|
|
3358
|
-
}
|
|
3359
|
-
if (obj[arrayKey[1]][arrayKey[2]] === void 0) {
|
|
3360
|
-
return defaultValue;
|
|
3361
|
-
}
|
|
3362
|
-
obj = obj[arrayKey[1]][arrayKey[2]];
|
|
3363
|
-
} else {
|
|
3364
|
-
if (obj[nextKey] === void 0) {
|
|
3365
|
-
return defaultValue;
|
|
3366
|
-
}
|
|
3367
|
-
obj = obj[nextKey];
|
|
3368
|
-
}
|
|
3377
|
+
function applyPrefixToValue(value, columnShouldBePrefixed, prefix) {
|
|
3378
|
+
if (!columnShouldBePrefixed || prefix === void 0 || value === null) {
|
|
3379
|
+
return value;
|
|
3369
3380
|
}
|
|
3370
|
-
|
|
3371
|
-
return obj;
|
|
3381
|
+
return `${prefix}${value}`;
|
|
3372
3382
|
}
|
|
3383
|
+
|
|
3384
|
+
// src/lib/import-gtfs-realtime.ts
|
|
3373
3385
|
async function fetchGtfsRealtimeData(urlConfig, task) {
|
|
3374
3386
|
task.log(`Downloading GTFS-Realtime from ${urlConfig.url}`);
|
|
3375
3387
|
const response = await fetch(urlConfig.url, {
|
|
@@ -3394,7 +3406,7 @@ async function fetchGtfsRealtimeData(urlConfig, task) {
|
|
|
3394
3406
|
enums: String,
|
|
3395
3407
|
longs: String,
|
|
3396
3408
|
bytes: String,
|
|
3397
|
-
defaults:
|
|
3409
|
+
defaults: false,
|
|
3398
3410
|
arrays: true,
|
|
3399
3411
|
objects: true,
|
|
3400
3412
|
oneofs: true
|
|
@@ -3407,100 +3419,117 @@ function prepareRealtimeFieldValue(entity, column, task) {
|
|
|
3407
3419
|
if (column.name === "expiration_timestamp") {
|
|
3408
3420
|
return task.currentTimestamp + task.gtfsRealtimeExpirationSeconds;
|
|
3409
3421
|
}
|
|
3410
|
-
const
|
|
3411
|
-
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
|
|
3422
|
+
const baseValue = column.source === void 0 ? column.default : get(entity, column.source, column.default);
|
|
3423
|
+
const timeAdjustedValue = baseValue?.__isLong__ ? convertLongTimeToDate(baseValue) : baseValue;
|
|
3424
|
+
const prefixedValue = applyPrefixToValue(
|
|
3425
|
+
timeAdjustedValue,
|
|
3426
|
+
column.prefix,
|
|
3427
|
+
task.prefix
|
|
3428
|
+
);
|
|
3429
|
+
return column.type === "json" ? JSON.stringify(prefixedValue) : prefixedValue;
|
|
3415
3430
|
}
|
|
3416
3431
|
async function processRealtimeAlerts(db, gtfsRealtimeData, task) {
|
|
3417
|
-
|
|
3432
|
+
const alertStmt = db.prepare(
|
|
3433
|
+
`REPLACE INTO ${serviceAlerts.filenameBase} (${serviceAlerts.schema.map((column) => column.name).join(
|
|
3434
|
+
", "
|
|
3435
|
+
)}) VALUES (${serviceAlerts.schema.map(() => "?").join(", ")})`
|
|
3436
|
+
);
|
|
3437
|
+
const informedEntityStmt = db.prepare(
|
|
3438
|
+
`REPLACE INTO ${serviceAlertInformedEntities.filenameBase} (${serviceAlertInformedEntities.schema.map((column) => column.name).join(
|
|
3439
|
+
", "
|
|
3440
|
+
)}) VALUES (${serviceAlertInformedEntities.schema.map(() => "?").join(", ")})`
|
|
3441
|
+
);
|
|
3418
3442
|
let totalLineCount = 0;
|
|
3419
|
-
|
|
3420
|
-
const
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
try {
|
|
3424
|
-
db.prepare(
|
|
3425
|
-
`REPLACE INTO ${serviceAlerts.filenameBase} (${serviceAlerts.schema.map((column) => column.name).join(", ")}) VALUES (${fieldValues.join(", ")})`
|
|
3426
|
-
).run();
|
|
3427
|
-
} catch (error) {
|
|
3428
|
-
task.logWarning(`Import error: ${error.message}`);
|
|
3429
|
-
}
|
|
3430
|
-
if (!entity.alert.informedEntity || entity.alert.informedEntity.length === 0) {
|
|
3431
|
-
task.logWarning(
|
|
3432
|
-
`Import error: No informed entities found for alert id=${entity.id}`
|
|
3443
|
+
db.transaction(() => {
|
|
3444
|
+
for (const entity of gtfsRealtimeData.entity) {
|
|
3445
|
+
const fieldValues = serviceAlerts.schema.map(
|
|
3446
|
+
(column) => prepareRealtimeFieldValue(entity, column, task)
|
|
3433
3447
|
);
|
|
3434
|
-
} else {
|
|
3435
|
-
const alertTargetArray = [];
|
|
3436
|
-
for (const informedEntity of entity.alert.informedEntity) {
|
|
3437
|
-
informedEntity.parent = entity;
|
|
3438
|
-
const subValues = serviceAlertTargets.schema.map(
|
|
3439
|
-
(column) => prepareRealtimeFieldValue(informedEntity, column, task)
|
|
3440
|
-
);
|
|
3441
|
-
alertTargetArray.push(`(${subValues.join(", ")})`);
|
|
3442
|
-
totalLineCount++;
|
|
3443
|
-
}
|
|
3444
3448
|
try {
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3449
|
+
alertStmt.run(fieldValues);
|
|
3450
|
+
if (entity.alert.informedEntity?.length) {
|
|
3451
|
+
const informedEntities = entity.alert.informedEntity.map(
|
|
3452
|
+
(informedEntity) => {
|
|
3453
|
+
informedEntity.parent = entity;
|
|
3454
|
+
return serviceAlertInformedEntities.schema.map(
|
|
3455
|
+
(column) => prepareRealtimeFieldValue(informedEntity, column, task)
|
|
3456
|
+
);
|
|
3457
|
+
}
|
|
3458
|
+
);
|
|
3459
|
+
for (const values of informedEntities) {
|
|
3460
|
+
informedEntityStmt.run(values);
|
|
3461
|
+
}
|
|
3462
|
+
}
|
|
3463
|
+
totalLineCount++;
|
|
3448
3464
|
} catch (error) {
|
|
3449
3465
|
task.logWarning(`Import error: ${error.message}`);
|
|
3450
3466
|
}
|
|
3451
3467
|
}
|
|
3452
|
-
task.log(
|
|
3453
|
-
|
|
3468
|
+
task.log(
|
|
3469
|
+
`Importing - GTFS-Realtime service alerts - ${totalLineCount} entries imported\r`,
|
|
3470
|
+
true
|
|
3471
|
+
);
|
|
3472
|
+
})();
|
|
3454
3473
|
}
|
|
3455
3474
|
async function processRealtimeTripUpdates(db, gtfsRealtimeData, task) {
|
|
3456
|
-
task.log(`Download successful`);
|
|
3457
3475
|
let totalLineCount = 0;
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
)
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
}
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
const
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3476
|
+
const tripUpdateStmt = db.prepare(
|
|
3477
|
+
`REPLACE INTO ${tripUpdates.filenameBase} (${tripUpdates.schema.map((column) => column.name).join(
|
|
3478
|
+
", "
|
|
3479
|
+
)}) VALUES (${tripUpdates.schema.map(() => "?").join(", ")})`
|
|
3480
|
+
);
|
|
3481
|
+
const stopTimeStmt = db.prepare(
|
|
3482
|
+
`REPLACE INTO ${stopTimeUpdates.filenameBase} (${stopTimeUpdates.schema.map((column) => column.name).join(
|
|
3483
|
+
", "
|
|
3484
|
+
)}) VALUES (${stopTimeUpdates.schema.map(() => "?").join(", ")})`
|
|
3485
|
+
);
|
|
3486
|
+
db.transaction(() => {
|
|
3487
|
+
for (const entity of gtfsRealtimeData.entity) {
|
|
3488
|
+
try {
|
|
3489
|
+
const fieldValues = tripUpdates.schema.map(
|
|
3490
|
+
(column) => prepareRealtimeFieldValue(entity, column, task)
|
|
3491
|
+
);
|
|
3492
|
+
tripUpdateStmt.run(fieldValues);
|
|
3493
|
+
for (const stopTimeUpdate of entity.tripUpdate.stopTimeUpdate) {
|
|
3494
|
+
stopTimeUpdate.parent = entity;
|
|
3495
|
+
const values = stopTimeUpdates.schema.map(
|
|
3496
|
+
(column) => prepareRealtimeFieldValue(stopTimeUpdate, column, task)
|
|
3497
|
+
);
|
|
3498
|
+
stopTimeStmt.run(values);
|
|
3499
|
+
}
|
|
3500
|
+
totalLineCount++;
|
|
3501
|
+
} catch (error) {
|
|
3502
|
+
task.logWarning(`Import error: ${error.message}`);
|
|
3503
|
+
}
|
|
3484
3504
|
}
|
|
3485
|
-
task.log(
|
|
3486
|
-
|
|
3505
|
+
task.log(
|
|
3506
|
+
`Importing - GTFS-Realtime trip updates - ${totalLineCount} entries imported\r`,
|
|
3507
|
+
true
|
|
3508
|
+
);
|
|
3509
|
+
})();
|
|
3487
3510
|
}
|
|
3488
3511
|
async function processRealtimeVehiclePositions(db, gtfsRealtimeData, task) {
|
|
3489
|
-
task.log(`Download successful`);
|
|
3490
3512
|
let totalLineCount = 0;
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
)
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3513
|
+
const vehiclePositionStmt = db.prepare(
|
|
3514
|
+
`REPLACE INTO ${vehiclePositions.filenameBase} (${vehiclePositions.schema.map((column) => column.name).join(
|
|
3515
|
+
", "
|
|
3516
|
+
)}) VALUES (${vehiclePositions.schema.map(() => "?").join(", ")})`
|
|
3517
|
+
);
|
|
3518
|
+
db.transaction(() => {
|
|
3519
|
+
for (const entity of gtfsRealtimeData.entity) {
|
|
3520
|
+
try {
|
|
3521
|
+
const fieldValues = vehiclePositions.schema.map((column) => prepareRealtimeFieldValue(entity, column, task));
|
|
3522
|
+
vehiclePositionStmt.run(fieldValues);
|
|
3523
|
+
totalLineCount++;
|
|
3524
|
+
} catch (error) {
|
|
3525
|
+
task.logWarning(`Import error: ${error.message}`);
|
|
3526
|
+
}
|
|
3501
3527
|
}
|
|
3502
|
-
task.log(
|
|
3503
|
-
|
|
3528
|
+
task.log(
|
|
3529
|
+
`Importing - GTFS-Realtime vehicle positions - ${totalLineCount} entries imported\r`,
|
|
3530
|
+
true
|
|
3531
|
+
);
|
|
3532
|
+
})();
|
|
3504
3533
|
}
|
|
3505
3534
|
async function updateGtfsRealtimeData(task) {
|
|
3506
3535
|
if (task.realtimeAlerts === void 0 && task.realtimeTripUpdates === void 0 && task.realtimeVehiclePositions === void 0) {
|
|
@@ -3809,7 +3838,11 @@ var importGtfsFiles = (db, task) => mapSeries2(
|
|
|
3809
3838
|
line
|
|
3810
3839
|
).map(([columnName, value]) => [
|
|
3811
3840
|
columnName,
|
|
3812
|
-
|
|
3841
|
+
applyPrefixToValue(
|
|
3842
|
+
value,
|
|
3843
|
+
prefixedColumns.has(columnName),
|
|
3844
|
+
task.prefix
|
|
3845
|
+
)
|
|
3813
3846
|
])
|
|
3814
3847
|
);
|
|
3815
3848
|
insert.run(prefixedLine);
|
|
@@ -3976,12 +4009,12 @@ async function importGtfs(initialConfig) {
|
|
|
3976
4009
|
import { without, compact as compact2 } from "lodash-es";
|
|
3977
4010
|
import pluralize3 from "pluralize";
|
|
3978
4011
|
import { stringify } from "csv-stringify";
|
|
3979
|
-
import
|
|
4012
|
+
import sqlString2 from "sqlstring-sqlite";
|
|
3980
4013
|
import mapSeries3 from "promise-map-series";
|
|
3981
4014
|
import untildify4 from "untildify";
|
|
3982
4015
|
|
|
3983
4016
|
// src/lib/advancedQuery.ts
|
|
3984
|
-
import
|
|
4017
|
+
import sqlString3 from "sqlstring-sqlite";
|
|
3985
4018
|
|
|
3986
4019
|
// src/lib/gtfs/routes.ts
|
|
3987
4020
|
import { omit as omit3, pick } from "lodash-es";
|
|
@@ -3995,7 +4028,7 @@ import { omit as omit5, orderBy, pick as pick3 } from "lodash-es";
|
|
|
3995
4028
|
|
|
3996
4029
|
// src/lib/gtfs/stop-times.ts
|
|
3997
4030
|
import { omit as omit6 } from "lodash-es";
|
|
3998
|
-
import
|
|
4031
|
+
import sqlString4 from "sqlstring-sqlite";
|
|
3999
4032
|
|
|
4000
4033
|
// src/bin/gtfs-import.ts
|
|
4001
4034
|
var pe = new PrettyError();
|