@stiava/cta 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -0
- package/README.md +147 -0
- package/dist/cta.d.ts +72 -0
- package/dist/cta_open_api.d.ts +73 -0
- package/dist/cta_system_data.d.ts +19 -0
- package/dist/index.cjs +154 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +117 -0
- package/dist/public/trains/blue.csv +34 -0
- package/dist/public/trains/blue_stations.csv +34 -0
- package/dist/public/trains/brown_stations.csv +27 -0
- package/dist/public/trains/green_stations.csv +0 -0
- package/dist/public/trains/orange_stations.csv +16 -0
- package/dist/public/trains/pink_stations.csv +22 -0
- package/dist/public/trains/purple_stations.csv +26 -0
- package/dist/public/trains/red_stations.csv +34 -0
- package/dist/public/trains/yellow_stations.csv +4 -0
- package/package.json +33 -0
package/LICENSE
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MIT
|
package/README.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# @jeremystiava/cta
|
|
2
|
+
|
|
3
|
+
A modern TypeScript client for the **Chicago Transit Authority (CTA)** Bus Tracker and Train Tracker APIs.
|
|
4
|
+
|
|
5
|
+
Designed for Node.js, Next.js, and modern JavaScript applications, this package provides a simple, strongly typed interface for accessing real-time CTA transit data.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- 🚆 Real-time train arrival predictions
|
|
12
|
+
- 🚌 Real-time bus arrival predictions
|
|
13
|
+
- 📍 Retrieve bus routes and stops
|
|
14
|
+
- 🚉 Retrieve train stations
|
|
15
|
+
- 📡 Simple Promise-based API
|
|
16
|
+
- 📝 Full TypeScript support
|
|
17
|
+
- ⚡ Lightweight with zero runtime dependencies
|
|
18
|
+
- 🌐 Works in Node.js and modern web frameworks
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @jeremystiava/cta
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Getting Started
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import { CTA } from "@jeremystiava/cta";
|
|
34
|
+
|
|
35
|
+
// Use the CTA apis.
|
|
36
|
+
const cta_buses = new CTABusService(process.env.CTA_BUS_API_KEY!);
|
|
37
|
+
const cta_trains = new CTATrainService(process.env.CTA_TRAIN_API_KEY!);
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Train Arrivals
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
const arrivals = await cta.train.getArrivals({
|
|
50
|
+
stationId: "40380",
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
console.log(arrivals);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Bus Arrivals
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
const arrivals = await cta.bus.getPredictions({
|
|
62
|
+
stopId: "14787",
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
console.log(arrivals);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Find Stops
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
const stops = await cta.bus.getStops({
|
|
74
|
+
route: "22",
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Find Train Stations
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
const stations = await cta.train.getStations();
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## API Keys
|
|
89
|
+
|
|
90
|
+
The CTA APIs require developer API keys.
|
|
91
|
+
|
|
92
|
+
You can request free API keys from the Chicago Transit Authority Developer Center.
|
|
93
|
+
|
|
94
|
+
Once obtained, provide your keys when creating the client.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## TypeScript
|
|
99
|
+
|
|
100
|
+
This package is written entirely in TypeScript and ships with complete type definitions.
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
import type {
|
|
104
|
+
TrainArrival,
|
|
105
|
+
BusPrediction,
|
|
106
|
+
} from "@jeremystiava/cta";
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Framework Support
|
|
112
|
+
|
|
113
|
+
Works with:
|
|
114
|
+
|
|
115
|
+
- Node.js
|
|
116
|
+
- Next.js
|
|
117
|
+
- React
|
|
118
|
+
- Express
|
|
119
|
+
- NestJS
|
|
120
|
+
- Bun
|
|
121
|
+
- Deno (via npm compatibility)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Roadmap
|
|
126
|
+
|
|
127
|
+
- [ ] Route planning
|
|
128
|
+
- [ ] Service alerts
|
|
129
|
+
- [ ] Vehicle tracking
|
|
130
|
+
- [ ] GTFS static data helpers
|
|
131
|
+
- [ ] Automatic retry/backoff
|
|
132
|
+
- [ ] Built-in caching
|
|
133
|
+
- [ ] Rate limit handling
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Contributing
|
|
138
|
+
|
|
139
|
+
Contributions, issues, and feature requests are welcome.
|
|
140
|
+
|
|
141
|
+
If you'd like to contribute, please open an issue or submit a pull request.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## License
|
|
146
|
+
|
|
147
|
+
MIT © Jeremy Stiava
|
package/dist/cta.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export type RouteServiceDirectionsResponse = {
|
|
2
|
+
"bustime-response": {
|
|
3
|
+
directions: {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export type CTATrain = {
|
|
10
|
+
rn: string;
|
|
11
|
+
destSt: string;
|
|
12
|
+
destNm: string;
|
|
13
|
+
trDr: string;
|
|
14
|
+
nextStaId: string;
|
|
15
|
+
nextStpId: string;
|
|
16
|
+
nextStaNm: string;
|
|
17
|
+
prdt: Date;
|
|
18
|
+
arrT: Date;
|
|
19
|
+
isApp: string;
|
|
20
|
+
isDly: string;
|
|
21
|
+
flags: null;
|
|
22
|
+
lat: string;
|
|
23
|
+
lon: string;
|
|
24
|
+
heading: string;
|
|
25
|
+
};
|
|
26
|
+
export type TrainRouteLocationsResponse = {
|
|
27
|
+
ctatt: {
|
|
28
|
+
tmst: Date;
|
|
29
|
+
errCd: number;
|
|
30
|
+
errNum: null;
|
|
31
|
+
route: {
|
|
32
|
+
"@name": string;
|
|
33
|
+
train: CTATrain[];
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export type CTATrainRoutes = 'red' | 'blue' | 'brn' | 'g' | 'org' | 'p' | 'pink' | 'y' | 'pexp';
|
|
38
|
+
export declare class CTATrainOpenApi {
|
|
39
|
+
apiKey: string;
|
|
40
|
+
constructor(apiKey: string);
|
|
41
|
+
buildQuery(params: any): string;
|
|
42
|
+
getStationArrivalPredictions(params: {
|
|
43
|
+
stationId: string;
|
|
44
|
+
}): Promise<any>;
|
|
45
|
+
getStopArrivalPredictions(params: {
|
|
46
|
+
stopId: string;
|
|
47
|
+
}): Promise<any>;
|
|
48
|
+
getTrainLocationsByRoute(routeId: CTATrainRoutes): Promise<TrainRouteLocationsResponse>;
|
|
49
|
+
getTrainArrivalPredictions(trainId: string): Promise<any>;
|
|
50
|
+
}
|
|
51
|
+
export declare class CTABusOpenApi {
|
|
52
|
+
apiKey: string;
|
|
53
|
+
constructor(apiKey: string);
|
|
54
|
+
buildQuery(params: any): string;
|
|
55
|
+
getAllBusRoutes(): Promise<any>;
|
|
56
|
+
getRouteServiceDirections(routeId: string): Promise<RouteServiceDirectionsResponse>;
|
|
57
|
+
getBusStops(params: {
|
|
58
|
+
routeId: string;
|
|
59
|
+
direction: string;
|
|
60
|
+
}): Promise<any>;
|
|
61
|
+
getRoutePoints(params: {
|
|
62
|
+
routeId: string;
|
|
63
|
+
}): Promise<any>;
|
|
64
|
+
getRouteStopPredictions(params: {
|
|
65
|
+
routeId: string;
|
|
66
|
+
stopId: string;
|
|
67
|
+
}): Promise<any>;
|
|
68
|
+
getVehiclePredictions(params: {
|
|
69
|
+
routeId: string;
|
|
70
|
+
vehicleId: string;
|
|
71
|
+
}): Promise<any>;
|
|
72
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
type RouteServiceDirectionsResponse = {
|
|
2
|
+
"bustime-response": {
|
|
3
|
+
directions: {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
type CTATrain = {
|
|
10
|
+
rn: string;
|
|
11
|
+
destSt: string;
|
|
12
|
+
destNm: string;
|
|
13
|
+
trDr: string;
|
|
14
|
+
nextStaId: string;
|
|
15
|
+
nextStpId: string;
|
|
16
|
+
nextStaNm: string;
|
|
17
|
+
prdt: Date;
|
|
18
|
+
arrT: Date;
|
|
19
|
+
isApp: string;
|
|
20
|
+
isDly: string;
|
|
21
|
+
flags: null;
|
|
22
|
+
lat: string;
|
|
23
|
+
lon: string;
|
|
24
|
+
heading: string;
|
|
25
|
+
};
|
|
26
|
+
type TrainRouteLocationsResponse = {
|
|
27
|
+
ctatt: {
|
|
28
|
+
tmst: Date;
|
|
29
|
+
errCd: number;
|
|
30
|
+
errNum: null;
|
|
31
|
+
route: {
|
|
32
|
+
"@name": string;
|
|
33
|
+
train: CTATrain[];
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export type CTATrainRoutesOptions = 'red' | 'blue' | 'brn' | 'g' | 'org' | 'p' | 'pink' | 'y' | 'pexp';
|
|
38
|
+
export declare class CTATrainService {
|
|
39
|
+
apiKey: string;
|
|
40
|
+
constructor(apiKey: string);
|
|
41
|
+
buildQuery(params: any): string;
|
|
42
|
+
getStationArrivalPredictions(params: {
|
|
43
|
+
stationId: string;
|
|
44
|
+
}): Promise<any>;
|
|
45
|
+
getStopArrivalPredictions(params: {
|
|
46
|
+
stopId: string;
|
|
47
|
+
}): Promise<any>;
|
|
48
|
+
getTrainLocationsByRoute(routeId: CTATrainRoutesOptions): Promise<TrainRouteLocationsResponse>;
|
|
49
|
+
getTrainArrivalPredictions(trainId: string): Promise<any>;
|
|
50
|
+
}
|
|
51
|
+
export declare class CTABusService {
|
|
52
|
+
apiKey: string;
|
|
53
|
+
constructor(apiKey: string);
|
|
54
|
+
buildQuery(params: any): string;
|
|
55
|
+
getAllBusRoutes(): Promise<any>;
|
|
56
|
+
getRouteServiceDirections(routeId: string): Promise<RouteServiceDirectionsResponse>;
|
|
57
|
+
getBusStops(params: {
|
|
58
|
+
routeId: string;
|
|
59
|
+
direction: string;
|
|
60
|
+
}): Promise<any>;
|
|
61
|
+
getRoutePoints(params: {
|
|
62
|
+
routeId: string;
|
|
63
|
+
}): Promise<any>;
|
|
64
|
+
getRouteStopPredictions(params: {
|
|
65
|
+
routeId: string;
|
|
66
|
+
stopId: string;
|
|
67
|
+
}): Promise<any>;
|
|
68
|
+
getVehiclePredictions(params: {
|
|
69
|
+
routeId: string;
|
|
70
|
+
vehicleId: string;
|
|
71
|
+
}): Promise<any>;
|
|
72
|
+
}
|
|
73
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type CTATrainStopRaw = {
|
|
2
|
+
stop_id: string;
|
|
3
|
+
naive_station_name: string;
|
|
4
|
+
name: string;
|
|
5
|
+
inbound_sequence: number;
|
|
6
|
+
lines: string;
|
|
7
|
+
segment: string;
|
|
8
|
+
station_type: string;
|
|
9
|
+
is_accessible: boolean;
|
|
10
|
+
is_transfer: boolean;
|
|
11
|
+
is_parking: boolean;
|
|
12
|
+
parking_capacity: number;
|
|
13
|
+
platforms: string;
|
|
14
|
+
connected_buses: boolean;
|
|
15
|
+
stop_lat: string;
|
|
16
|
+
stop_lon: string;
|
|
17
|
+
location_type: string;
|
|
18
|
+
parent_station: string;
|
|
19
|
+
};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// index.ts
|
|
30
|
+
var index_exports = {};
|
|
31
|
+
__export(index_exports, {
|
|
32
|
+
CTABusService: () => CTABusService,
|
|
33
|
+
CTATrainService: () => CTATrainService
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(index_exports);
|
|
36
|
+
|
|
37
|
+
// cta_open_api.ts
|
|
38
|
+
var CTA_BUS_BASE_URL = "https://www.ctabustracker.com";
|
|
39
|
+
var CTATrainService = class {
|
|
40
|
+
apiKey;
|
|
41
|
+
constructor(apiKey) {
|
|
42
|
+
this.apiKey = apiKey;
|
|
43
|
+
}
|
|
44
|
+
buildQuery(params) {
|
|
45
|
+
return new URLSearchParams(
|
|
46
|
+
Object.entries({
|
|
47
|
+
...params,
|
|
48
|
+
key: this.apiKey
|
|
49
|
+
}).map(([k, v]) => [k, String(v)])
|
|
50
|
+
).toString();
|
|
51
|
+
}
|
|
52
|
+
async getStationArrivalPredictions(params) {
|
|
53
|
+
const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
|
|
54
|
+
const query = this.buildQuery({
|
|
55
|
+
mapid: params.stationId,
|
|
56
|
+
outputType: "json"
|
|
57
|
+
});
|
|
58
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
59
|
+
}
|
|
60
|
+
async getStopArrivalPredictions(params) {
|
|
61
|
+
const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
|
|
62
|
+
const query = this.buildQuery({
|
|
63
|
+
stpid: params.stopId,
|
|
64
|
+
outputType: "json"
|
|
65
|
+
});
|
|
66
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
67
|
+
}
|
|
68
|
+
async getTrainLocationsByRoute(routeId) {
|
|
69
|
+
const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttpositions.aspx";
|
|
70
|
+
const query = this.buildQuery({
|
|
71
|
+
rt: routeId,
|
|
72
|
+
outputType: "json"
|
|
73
|
+
});
|
|
74
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
75
|
+
}
|
|
76
|
+
async getTrainArrivalPredictions(trainId) {
|
|
77
|
+
const BASE_URL = "lapi.transitchicago.com/api/1.0/ttfollow.aspx";
|
|
78
|
+
const query = this.buildQuery({
|
|
79
|
+
runnumber: trainId,
|
|
80
|
+
outputType: "json"
|
|
81
|
+
});
|
|
82
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var CTABusService = class {
|
|
86
|
+
apiKey;
|
|
87
|
+
constructor(apiKey) {
|
|
88
|
+
this.apiKey = apiKey;
|
|
89
|
+
}
|
|
90
|
+
buildQuery(params) {
|
|
91
|
+
return new URLSearchParams(
|
|
92
|
+
Object.entries({
|
|
93
|
+
...params,
|
|
94
|
+
key: this.apiKey
|
|
95
|
+
}).map(([k, v]) => [k, String(v)])
|
|
96
|
+
).toString();
|
|
97
|
+
}
|
|
98
|
+
async getAllBusRoutes() {
|
|
99
|
+
const query = this.buildQuery({
|
|
100
|
+
format: "json"
|
|
101
|
+
});
|
|
102
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getroutes?${query}`).then((res) => res.json()).then((data) => data);
|
|
103
|
+
}
|
|
104
|
+
async getRouteServiceDirections(routeId) {
|
|
105
|
+
const query = this.buildQuery({
|
|
106
|
+
rt: routeId,
|
|
107
|
+
format: "json"
|
|
108
|
+
});
|
|
109
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getdirections?${query}`).then((res) => res.json()).then((data) => data);
|
|
110
|
+
}
|
|
111
|
+
async getBusStops(params) {
|
|
112
|
+
const query = this.buildQuery({
|
|
113
|
+
rt: params.routeId,
|
|
114
|
+
dir: params.direction,
|
|
115
|
+
format: "json"
|
|
116
|
+
});
|
|
117
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getstops?${query}`).then((res) => res.json()).then((data) => data);
|
|
118
|
+
}
|
|
119
|
+
async getRoutePoints(params) {
|
|
120
|
+
const query = this.buildQuery({
|
|
121
|
+
rt: params.routeId,
|
|
122
|
+
format: "json"
|
|
123
|
+
});
|
|
124
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpatterns?${query}`).then((res) => res.json()).then((data) => data);
|
|
125
|
+
}
|
|
126
|
+
async getRouteStopPredictions(params) {
|
|
127
|
+
const query = this.buildQuery({
|
|
128
|
+
rt: params.routeId,
|
|
129
|
+
stpid: params.stopId,
|
|
130
|
+
top: 50,
|
|
131
|
+
tmres: "s",
|
|
132
|
+
format: "json"
|
|
133
|
+
});
|
|
134
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
|
|
135
|
+
}
|
|
136
|
+
async getVehiclePredictions(params) {
|
|
137
|
+
const query = this.buildQuery({
|
|
138
|
+
rt: params.routeId,
|
|
139
|
+
vid: params.vehicleId,
|
|
140
|
+
top: 50,
|
|
141
|
+
tmres: "s",
|
|
142
|
+
format: "json"
|
|
143
|
+
});
|
|
144
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// cta_system_data.ts
|
|
149
|
+
var Papa = __toESM(require("papaparse"), 1);
|
|
150
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
151
|
+
0 && (module.exports = {
|
|
152
|
+
CTABusService,
|
|
153
|
+
CTATrainService
|
|
154
|
+
});
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// cta_open_api.ts
|
|
2
|
+
var CTA_BUS_BASE_URL = "https://www.ctabustracker.com";
|
|
3
|
+
var CTATrainService = class {
|
|
4
|
+
apiKey;
|
|
5
|
+
constructor(apiKey) {
|
|
6
|
+
this.apiKey = apiKey;
|
|
7
|
+
}
|
|
8
|
+
buildQuery(params) {
|
|
9
|
+
return new URLSearchParams(
|
|
10
|
+
Object.entries({
|
|
11
|
+
...params,
|
|
12
|
+
key: this.apiKey
|
|
13
|
+
}).map(([k, v]) => [k, String(v)])
|
|
14
|
+
).toString();
|
|
15
|
+
}
|
|
16
|
+
async getStationArrivalPredictions(params) {
|
|
17
|
+
const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
|
|
18
|
+
const query = this.buildQuery({
|
|
19
|
+
mapid: params.stationId,
|
|
20
|
+
outputType: "json"
|
|
21
|
+
});
|
|
22
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
23
|
+
}
|
|
24
|
+
async getStopArrivalPredictions(params) {
|
|
25
|
+
const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx";
|
|
26
|
+
const query = this.buildQuery({
|
|
27
|
+
stpid: params.stopId,
|
|
28
|
+
outputType: "json"
|
|
29
|
+
});
|
|
30
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
31
|
+
}
|
|
32
|
+
async getTrainLocationsByRoute(routeId) {
|
|
33
|
+
const BASE_URL = "https://lapi.transitchicago.com/api/1.0/ttpositions.aspx";
|
|
34
|
+
const query = this.buildQuery({
|
|
35
|
+
rt: routeId,
|
|
36
|
+
outputType: "json"
|
|
37
|
+
});
|
|
38
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
39
|
+
}
|
|
40
|
+
async getTrainArrivalPredictions(trainId) {
|
|
41
|
+
const BASE_URL = "lapi.transitchicago.com/api/1.0/ttfollow.aspx";
|
|
42
|
+
const query = this.buildQuery({
|
|
43
|
+
runnumber: trainId,
|
|
44
|
+
outputType: "json"
|
|
45
|
+
});
|
|
46
|
+
return await fetch(`${BASE_URL}?${query}`).then((res) => res.json()).then((data) => data);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var CTABusService = class {
|
|
50
|
+
apiKey;
|
|
51
|
+
constructor(apiKey) {
|
|
52
|
+
this.apiKey = apiKey;
|
|
53
|
+
}
|
|
54
|
+
buildQuery(params) {
|
|
55
|
+
return new URLSearchParams(
|
|
56
|
+
Object.entries({
|
|
57
|
+
...params,
|
|
58
|
+
key: this.apiKey
|
|
59
|
+
}).map(([k, v]) => [k, String(v)])
|
|
60
|
+
).toString();
|
|
61
|
+
}
|
|
62
|
+
async getAllBusRoutes() {
|
|
63
|
+
const query = this.buildQuery({
|
|
64
|
+
format: "json"
|
|
65
|
+
});
|
|
66
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getroutes?${query}`).then((res) => res.json()).then((data) => data);
|
|
67
|
+
}
|
|
68
|
+
async getRouteServiceDirections(routeId) {
|
|
69
|
+
const query = this.buildQuery({
|
|
70
|
+
rt: routeId,
|
|
71
|
+
format: "json"
|
|
72
|
+
});
|
|
73
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getdirections?${query}`).then((res) => res.json()).then((data) => data);
|
|
74
|
+
}
|
|
75
|
+
async getBusStops(params) {
|
|
76
|
+
const query = this.buildQuery({
|
|
77
|
+
rt: params.routeId,
|
|
78
|
+
dir: params.direction,
|
|
79
|
+
format: "json"
|
|
80
|
+
});
|
|
81
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getstops?${query}`).then((res) => res.json()).then((data) => data);
|
|
82
|
+
}
|
|
83
|
+
async getRoutePoints(params) {
|
|
84
|
+
const query = this.buildQuery({
|
|
85
|
+
rt: params.routeId,
|
|
86
|
+
format: "json"
|
|
87
|
+
});
|
|
88
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpatterns?${query}`).then((res) => res.json()).then((data) => data);
|
|
89
|
+
}
|
|
90
|
+
async getRouteStopPredictions(params) {
|
|
91
|
+
const query = this.buildQuery({
|
|
92
|
+
rt: params.routeId,
|
|
93
|
+
stpid: params.stopId,
|
|
94
|
+
top: 50,
|
|
95
|
+
tmres: "s",
|
|
96
|
+
format: "json"
|
|
97
|
+
});
|
|
98
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
|
|
99
|
+
}
|
|
100
|
+
async getVehiclePredictions(params) {
|
|
101
|
+
const query = this.buildQuery({
|
|
102
|
+
rt: params.routeId,
|
|
103
|
+
vid: params.vehicleId,
|
|
104
|
+
top: 50,
|
|
105
|
+
tmres: "s",
|
|
106
|
+
format: "json"
|
|
107
|
+
});
|
|
108
|
+
return await fetch(`${CTA_BUS_BASE_URL}/bustime/api/v3/getpredictions?${query}`).then((res) => res.json()).then((data) => data);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// cta_system_data.ts
|
|
113
|
+
import * as Papa from "papaparse";
|
|
114
|
+
export {
|
|
115
|
+
CTABusService,
|
|
116
|
+
CTATrainService
|
|
117
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40890,O'Hare,O'Hare,1,blue,O'Hare,subway,TRUE,FALSE,FALSE,0,,,41.97766526,-87.90422307,,1
|
|
3
|
+
40820,Rosemont,Rosemont,2,blue,O'Hare,elevated,TRUE,FALSE,TRUE,648,,,41.983507,-87.859388,,1
|
|
4
|
+
40230,Cumberland,Cumberland,3,blue,Kennedy,elevated,TRUE,FALSE,TRUE,1633,,81W,41.984246,-87.838028,,1
|
|
5
|
+
40750,Harlem,Harlem (Blue - O'Hare Branch),4,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,,"88, 90",41.98227,-87.8089,,1
|
|
6
|
+
41280,Jefferson Park,Jefferson Park Transit Center,5,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,,"85A, 68, 92, 81, 56, 85, 91, 81W, 88",41.97023386,-87.76159401,,1
|
|
7
|
+
41330,Montrose,Montrose (Blue),6,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,,"54A, 54, 78",41.96090105,-87.74290344,,2
|
|
8
|
+
40550,Irving Park,Irving Park (Blue),7,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,,"54A, 80, 53",41.952925,-87.729229,,2
|
|
9
|
+
41240,Addison,Addison (Blue),8,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,,152,41.94660372,-87.71845842,,1
|
|
10
|
+
40060,Belmont,Belmont (Blue),9,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,,"82, 77",41.9391107,-87.71225212,,2
|
|
11
|
+
41020,Logan Square,Logan Square,10,blue,Milwaukee,subway,TRUE,FALSE,FALSE,0,,"56, 93, 76",41.92953423,-87.70768815,,1
|
|
12
|
+
40570,California,California (Blue),11,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,,"94, 74, 56",41.92215831,-87.69724395,,2
|
|
13
|
+
40670,Western,Western (Blue - O'Hare Branch),12,blue,Milwaukee,elevated,TRUE,FALSE,FALSE,0,,"49, 73, X49, 56",41.916157,-87.687364,,1
|
|
14
|
+
40590,Damen,Damen (Blue),13,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,,"50, 72, 56",41.90984523,-87.67754001,,2
|
|
15
|
+
40320,Division,Division,14,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,,"9, X9, 70, 56",41.903355,-87.666496,,2
|
|
16
|
+
41410,Chicago,Chicago (Blue),15,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,,"66, 56",41.896075,-87.655214,,2
|
|
17
|
+
40490,Grand,Grand (Blue),16,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,,"8, 65, 66, 56",41.891189,-87.647578,,2
|
|
18
|
+
40380,Clark/Lake,Clark/Lake,17,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,,,41.885737,-87.630886,,1
|
|
19
|
+
40370,Washington,Washington,18,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,,,41.883164,-87.62944,,2
|
|
20
|
+
40790,Monroe,Monroe (Blue),19,blue,Dearborn Subway,subway,TRUE,FALSE,FALSE,0,,,41.880703,-87.629378,,2
|
|
21
|
+
40070,Jackson,Jackson (Blue),20,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,,,41.878183,-87.629296,,1
|
|
22
|
+
41340,LaSalle,LaSalle,21,blue,Congress,subway,FALSE,FALSE,FALSE,0,,"36, 24",41.875568,-87.631722,,2
|
|
23
|
+
40430,Clinton,Clinton (Blue),22,blue,Congress,subway,FALSE,FALSE,FALSE,0,,"60, 37, 7, 157",41.875539,-87.640984,,2
|
|
24
|
+
40350,UIC-Halsted,UIC-Halsted,23,blue,Congress,elevated,TRUE,FALSE,FALSE,0,,"8, 7, 60",41.875474,-87.649707,,1
|
|
25
|
+
40470,Racine,Racine,24,blue,Congress,elevated,FALSE,FALSE,FALSE,0,,"7, 60",41.87592,-87.659458,,1
|
|
26
|
+
40810,Illinois Medical District,Illinois Medical District,25,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,,"7, 126",41.875706,-87.673932,,1
|
|
27
|
+
40220,Western,Western (Blue - Forest Park Branch),26,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,"7, 49, X49",41.875478,-87.688436,,2
|
|
28
|
+
40250,Kedzie-Homan,Kedzie-Homan,27,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,,"7, 52",41.874341,-87.70604,,1
|
|
29
|
+
40920,Pulaski,Pulaski (Blue),28,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,"7, 53",41.873797,-87.725663,,2
|
|
30
|
+
40970,Cicero,Cicero (Blue),29,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,"54, 7, 57",41.871574,-87.745154,,2
|
|
31
|
+
40010,Austin,Austin (Blue),30,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,91,41.870851,-87.776812,,2
|
|
32
|
+
40180,Oak Park,Oak Park (Blue),31,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,,,41.872108,-87.791602,,2
|
|
33
|
+
40980,Harlem,Harlem (Blue - Forest Park Branch),32,blue,Eisenhower,elevated,FALSE,FALSE,TRUE,53,,,41.87349,-87.806961,,2
|
|
34
|
+
40390,Forest Park,Forest Park,33,blue,Eisenhower,elevated,TRUE,FALSE,TRUE,644,,,41.874257,-87.817318,,1
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40890,O'Hare,O'Hare,1,blue,O'Hare,subway,TRUE,FALSE,FALSE,0,"30171, 30172",,41.97766526,-87.90422307,,1
|
|
3
|
+
40820,Rosemont,Rosemont,2,blue,O'Hare,elevated,TRUE,FALSE,TRUE,648,"30159, 30160",,41.983507,-87.859388,,1
|
|
4
|
+
40230,Cumberland,Cumberland,3,blue,Kennedy,elevated,TRUE,FALSE,TRUE,1633,"30044, 30045",81W,41.984246,-87.838028,,1
|
|
5
|
+
40750,Harlem,Harlem (Blue - O'Hare Branch),4,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,"30145, 30146","88, 90",41.98227,-87.8089,,1
|
|
6
|
+
41280,Jefferson Park,Jefferson Park Transit Center,5,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,"30247, 30248","85A, 68, 92, 81, 56, 85, 91, 81W, 88",41.97023386,-87.76159401,,1
|
|
7
|
+
41330,Montrose,Montrose (Blue),6,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,"30259, 30260","54A, 54, 78",41.96090105,-87.74290344,,2
|
|
8
|
+
40550,Irving Park,Irving Park (Blue),7,blue,Kennedy,elevated,FALSE,FALSE,FALSE,0,"30107, 30108","54A, 80, 53",41.952925,-87.729229,,2
|
|
9
|
+
41240,Addison,Addison (Blue),8,blue,Kennedy,elevated,TRUE,FALSE,FALSE,0,"30239, 30240",152,41.94660372,-87.71845842,,1
|
|
10
|
+
40060,Belmont,Belmont (Blue),9,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,"30012, 30013","82, 77",41.9391107,-87.71225212,,2
|
|
11
|
+
41020,Logan Square,Logan Square,10,blue,Milwaukee,subway,TRUE,FALSE,FALSE,0,"30197, 30198","56, 93, 76",41.92953423,-87.70768815,,1
|
|
12
|
+
40570,California,California (Blue),11,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,"30111, 30112","94, 74, 56",41.92215831,-87.69724395,,2
|
|
13
|
+
40670,Western,Western (Blue - O'Hare Branch),12,blue,Milwaukee,elevated,TRUE,FALSE,FALSE,0,"30129, 30130","49, 73, X49, 56",41.916157,-87.687364,,1
|
|
14
|
+
40590,Damen,Damen (Blue),13,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,"30115, 30116","50, 72, 56",41.90984523,-87.67754001,,2
|
|
15
|
+
40320,Division,Division,14,blue,Milwaukee,elevated,FALSE,FALSE,FALSE,0,"30062, 30063","9, X9, 70, 56",41.903355,-87.666496,,2
|
|
16
|
+
41410,Chicago,Chicago (Blue),15,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,"30271, 30272","66, 56",41.896075,-87.655214,,2
|
|
17
|
+
40490,Grand,Grand (Blue),16,blue,Milwaukee,subway,FALSE,FALSE,FALSE,0,"30095, 30096","8, 65, 66, 56",41.891189,-87.647578,,2
|
|
18
|
+
40380,Clark/Lake,Clark/Lake,17,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
|
|
19
|
+
40370,Washington,Washington,18,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,"30072, 30073",,41.883164,-87.62944,,2
|
|
20
|
+
40790,Monroe,Monroe (Blue),19,blue,Dearborn Subway,subway,TRUE,FALSE,FALSE,0,"30153, 30154",,41.880703,-87.629378,,2
|
|
21
|
+
40070,Jackson,Jackson (Blue),20,blue,Dearborn Subway,subway,TRUE,TRUE,FALSE,0,"30014, 30015",,41.878183,-87.629296,,1
|
|
22
|
+
41340,LaSalle,LaSalle,21,blue,Congress,subway,FALSE,FALSE,FALSE,0,"30261, 30262","36, 24",41.875568,-87.631722,,2
|
|
23
|
+
40430,Clinton,Clinton (Blue),22,blue,Congress,subway,FALSE,FALSE,FALSE,0,"30084, 30085","60, 37, 7, 157",41.875539,-87.640984,,2
|
|
24
|
+
40350,UIC-Halsted,UIC-Halsted,23,blue,Congress,elevated,TRUE,FALSE,FALSE,0,"30068, 30069","8, 7, 60",41.875474,-87.649707,,1
|
|
25
|
+
40470,Racine,Racine,24,blue,Congress,elevated,FALSE,FALSE,FALSE,0,"30092, 30093","7, 60",41.87592,-87.659458,,1
|
|
26
|
+
40810,Illinois Medical District,Illinois Medical District,25,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,"30157, 30158","7, 126",41.875706,-87.673932,,1
|
|
27
|
+
40220,Western,Western (Blue - Forest Park Branch),26,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30042, 30043","7, 49, X49",41.875478,-87.688436,,2
|
|
28
|
+
40250,Kedzie-Homan,Kedzie-Homan,27,blue,Eisenhower,elevated,TRUE,FALSE,FALSE,0,"30048, 30049","7, 52",41.874341,-87.70604,,1
|
|
29
|
+
40920,Pulaski,Pulaski (Blue),28,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30179, 30180","7, 53",41.873797,-87.725663,,2
|
|
30
|
+
40970,Cicero,Cicero (Blue),29,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30187, 30188","54, 7, 57",41.871574,-87.745154,,2
|
|
31
|
+
40010,Austin,Austin (Blue),30,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30001, 30002",91,41.870851,-87.776812,,2
|
|
32
|
+
40180,Oak Park,Oak Park (Blue),31,blue,Eisenhower,elevated,FALSE,FALSE,FALSE,0,"30034, 30035",,41.872108,-87.791602,,2
|
|
33
|
+
40980,Harlem,Harlem (Blue - Forest Park Branch),32,blue,Eisenhower,elevated,FALSE,FALSE,TRUE,53,"30189, 30190",,41.87349,-87.806961,,2
|
|
34
|
+
40390,Forest Park,Forest Park,33,blue,Eisenhower,elevated,TRUE,FALSE,TRUE,644,"30076, 30077",,41.874257,-87.817318,,1
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40380,Clark/Lake,Clark/Lake,26,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
|
|
3
|
+
41700,Washington/Wabash,Washington/Wabash,25,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
|
|
4
|
+
40680,Adams/Wabash,Adams/Wabash,24,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
|
|
5
|
+
40850,H W Library,Harold Washington Library-State/Van Buren,23,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
|
|
6
|
+
40160,LaSalle/Van Buren,LaSalle/Van Buren,22,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
|
|
7
|
+
40040,Quincy,Quincy,21,"brown, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
|
|
8
|
+
40730,Washington/Wells,Washington/Wells,20,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
|
|
9
|
+
40460,Merchandise Mart,Merchandise Mart (Brown/Purple),19,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30090, 30091",,41.888969,-87.633924,,1
|
|
10
|
+
40710,Chicago,Chicago (Brown/Purple),18,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30137, 30138",,41.89681,-87.635924,,1
|
|
11
|
+
40800,Sedgwick,Sedgwick (Brown/Purple),17,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30155, 30156",37,41.910409,-87.639302,,1
|
|
12
|
+
40660,Armitage,Armitage (Brown/Purple),16,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30127, 30128","73, 8",41.918217,-87.652644,,1
|
|
13
|
+
41220,Fullerton,Fullerton,15,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30233, 30234, 30235, 30236","8, 37, 74",41.92530037,-87.65286844,,1
|
|
14
|
+
40530,Diversey,Diversey (Brown/Purple),14,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30103, 30104","8, 76",41.932732,-87.653131,,1
|
|
15
|
+
41210,Wellington,Wellington (Brown/Purple),13,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30231, 30232",8,41.936033,-87.653266,,1
|
|
16
|
+
41320,Belmont,Belmont (Red/Brown/Purple),12,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30255, 30256, 30257, 30258","77, 8, 22, 156",41.939751,-87.65338,,1
|
|
17
|
+
40360,Southport,Southport,11,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30070, 30071",,41.943744,-87.663619,,1
|
|
18
|
+
41310,Paulina,Paulina,10,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30253, 30254","9, X9",41.943623,-87.670907,,1
|
|
19
|
+
41440,Addison,Addison (Brown),9,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30277, 30278",152,41.947028,-87.674642,,1
|
|
20
|
+
41460,Irving Park,Irving Park (Brown),8,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30281, 30282",80,41.954521,-87.674868,,1
|
|
21
|
+
41500,Montrose,Montrose (Brown),7,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30287, 30288",78,41.961756,-87.675047,,1
|
|
22
|
+
40090,Damen,Damen (Brown),6,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30018, 30019","50, 81",41.966286,-87.678639,,1
|
|
23
|
+
41480,Western,Western (Brown),5,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30283, 30284","49, 81, 49B, 11",41.966163,-87.688502,,1
|
|
24
|
+
41010,Rockwell,Rockwell,4,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30195, 30196",81,41.966115,-87.6941,,1
|
|
25
|
+
40870,Francisco,Francisco,3,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30167, 30168",81,41.966046,-87.701644,,1
|
|
26
|
+
41180,Kedzie,Kedzie (Brown),2,brown,Ravenswood,elevated,TRUE,FALSE,FALSE,0,"30225, 30226","93, 81",41.965996,-87.708821,,1
|
|
27
|
+
41290,Kimball,Kimball,1,brown,Ravenswood,elevated,TRUE,FALSE,TRUE,73,"30249, 30250","82, 81",41.967901,-87.713065,,1
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40930,Midway,Midway,1,orange,Orange,elevated,TRUE,FALSE,TRUE,299,"30181, 30182",,41.78661,-87.737875,,1
|
|
3
|
+
40960,Pulaski,Pulaski (Orange),2,orange,Orange,elevated,TRUE,FALSE,TRUE,390,"30185, 30186",,41.799756,-87.724493,,1
|
|
4
|
+
41150,Kedzie,Kedzie (Orange),3,orange,Orange,elevated,TRUE,FALSE,TRUE,157,"30219, 30220",,41.804236,-87.704406,,1
|
|
5
|
+
40310,Western,Western (Orange),4,orange,Orange,elevated,TRUE,FALSE,TRUE,200,"30060, 30061",,41.804546,-87.684019,,1
|
|
6
|
+
40120,35th/Archer,35th/Archer,5,orange,Orange,elevated,TRUE,FALSE,TRUE,69,"30022, 30023",,41.829353,-87.680622,,1
|
|
7
|
+
41060,Ashland,Ashland (Orange),6,orange,Orange,elevated,TRUE,FALSE,FALSE,0,"30205, 30206",,41.839234,-87.665317,,1
|
|
8
|
+
41130,Halsted,Halsted (Orange),7,orange,Orange,elevated,TRUE,FALSE,TRUE,31,"30215, 30216",,41.84678,-87.648088,,1
|
|
9
|
+
41400,Roosevelt,Roosevelt,8,"green, orange, red",Near South Side,elevated,TRUE,TRUE,FALSE,0,"30080, 30081, 30269, 30270",,41.86737853,-87.62703141,,1
|
|
10
|
+
40850,H W Library,Harold Washington Library-State/Van Buren,9,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
|
|
11
|
+
40160,LaSalle/Van Buren,LaSalle/Van Buren,10,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
|
|
12
|
+
40040,Quincy,Quincy,11,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
|
|
13
|
+
40730,Washington/Wells,Washington/Wells,12,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
|
|
14
|
+
40380,Clark/Lake,Clark/Lake,13,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
|
|
15
|
+
41700,Washington/Wabash,Washington/Wabash,14,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
|
|
16
|
+
40680,Adams/Wabash,Adams/Wabash,15,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40580,54th/Cermak,54th/Cermak,1,pink,Cermak,elevated,TRUE,FALSE,TRUE,441,"30113, 30114",,41.85177331,-87.75669201,,1
|
|
3
|
+
40420,Cicero,Cicero (Pink),2,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30082, 30083",,41.85182,-87.745336,,1
|
|
4
|
+
40600,Kostner,Kostner,3,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30117, 30118",,41.853751,-87.733258,,1
|
|
5
|
+
40150,Pulaski,Pulaski (Pink),4,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30028, 30029",,41.853732,-87.724311,,1
|
|
6
|
+
40780,Central Park,Central Park,5,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30151, 30152",,41.853839,-87.714842,,1
|
|
7
|
+
41040,Kedzie,Kedzie (Pink),6,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30201, 30202",,41.853964,-87.705408,,1
|
|
8
|
+
40440,California,California (Pink),7,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30086, 30087",,41.854109,-87.694774,,1
|
|
9
|
+
40740,Western,Western (Pink),8,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30143, 30144",,41.854225,-87.685129,,1
|
|
10
|
+
40210,Damen,Damen (Pink),9,pink,Cermak,elevated,TRUE,FALSE,FALSE,0,"30040, 30041",,41.854517,-87.675975,,1
|
|
11
|
+
40830,18th,18th,10,pink,Ashland,elevated,TRUE,FALSE,FALSE,0,"30161, 30162",,41.857908,-87.669147,,1
|
|
12
|
+
41030,Polk,Polk,11,pink,Ashland,elevated,TRUE,FALSE,FALSE,0,"30199, 30200",,41.871551,-87.66953,,1
|
|
13
|
+
40170,Ashland,Ashland (Green/Pink),12,"green, pink",Lake Elevated,elevated,TRUE,TRUE,FALSE,0,"30032, 30033",,41.885269,-87.666969,,1
|
|
14
|
+
41510,Morgan,Morgan (Green/Pink),13,"green, pink",Lake Elevated,elevated,TRUE,TRUE,FALSE,0,"30295, 30296",,41.88557676,-87.65212993,,1
|
|
15
|
+
41160,Clinton,Clinton (Green/Pink),14,"green, pink",Lake Elevated,elevated,TRUE,TRUE,FALSE,0,"30221, 30222",,41.885678,-87.641782,,1
|
|
16
|
+
40380,Clark/Lake,Clark/Lake,15,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
|
|
17
|
+
41700,Washington/Wabash,Washington/Wabash,16,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
|
|
18
|
+
40680,Adams/Wabash,Adams/Wabash,17,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
|
|
19
|
+
40850,H W Library,Harold Washington Library-State/Van Buren,18,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
|
|
20
|
+
40160,LaSalle/Van Buren,LaSalle/Van Buren,19,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
|
|
21
|
+
40040,Quincy,Quincy,20,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
|
|
22
|
+
40730,Washington/Wells,Washington/Wells,21,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40730,Washington/Wells,Washington/Wells,24,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30141, 30142",,41.882695,-87.63378,,1
|
|
3
|
+
40040,Quincy,Quincy,23,"brown, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30007, 30008",,41.878723,-87.63374,,1
|
|
4
|
+
40160,LaSalle/Van Buren,LaSalle/Van Buren,22,"brown, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30030, 30031",,41.8768,-87.631739,,2
|
|
5
|
+
40850,H W Library,Harold Washington Library-State/Van Buren,21,"brown, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30165, 30166",,41.876862,-87.628196,,1
|
|
6
|
+
40680,Adams/Wabash,Adams/Wabash,20,"brown, green, orange, pink, purple",Main Loop,elevated,FALSE,TRUE,FALSE,0,"30131, 30132",,41.879507,-87.626037,,2
|
|
7
|
+
41700,Washington/Wabash,Washington/Wabash,19,"brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30383, 30384",,41.88322,-87.626189,,1
|
|
8
|
+
40380,Clark/Lake,Clark/Lake,18,"blue, brown, green, orange, pink, purple",Main Loop,elevated,TRUE,TRUE,FALSE,0,"30374, 30375, 30074, 30075",,41.885737,-87.630886,,1
|
|
9
|
+
40460,Merchandise Mart,Merchandise Mart (Brown/Purple),17,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30090, 30091",,41.888969,-87.633924,,1
|
|
10
|
+
40710,Chicago,Chicago (Brown/Purple),16,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30137, 30138",,41.89681,-87.635924,,1
|
|
11
|
+
40800,Sedgwick,Sedgwick (Brown/Purple),15,"brown, purple",Near North Side,elevated,TRUE,TRUE,FALSE,0,"30155, 30156",,41.910409,-87.639302,,1
|
|
12
|
+
40660,Armitage,Armitage (Brown/Purple),14,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30127, 30128",,41.918217,-87.652644,,1
|
|
13
|
+
41220,Fullerton,Fullerton,13,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30233, 30234, 30235, 30236",,41.92530037,-87.65286844,,1
|
|
14
|
+
40530,Diversey,Diversey (Brown/Purple),12,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30103, 30104",,41.932732,-87.653131,,1
|
|
15
|
+
41210,Wellington,Wellington (Brown/Purple),11,"brown, purple",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30231, 30232",,41.936033,-87.653266,,1
|
|
16
|
+
41320,Belmont,Belmont (Red/Brown/Purple),10,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30255, 30256, 30257, 30258",,41.939751,-87.65338,,1
|
|
17
|
+
40540,Wilson,Wilson,9,"red, purple",North Elevated,elevated,TRUE,TRUE,FALSE,0,"30105, 30106, 30385, 30386",,41.96548157,-87.65792581,,1
|
|
18
|
+
40900,Howard,Howard,8,"purple, red, yellow",North Elevated,elevated,TRUE,TRUE,TRUE,592,"30173, 30174, 30175, 30176",,42.019063,-87.672892,,1
|
|
19
|
+
40840,South Blvd,South Boulevard,7,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30163, 30164",,42.027612,-87.678329,,2
|
|
20
|
+
40270,Main,Main,6,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30052, 30053",,42.033456,-87.679538,,2
|
|
21
|
+
40050,Davis,Davis,5,purple,Evanston,elevated,TRUE,FALSE,FALSE,0,"30010, 30011",,42.04771,-87.683543,,1
|
|
22
|
+
40690,Dempster,Dempster,5,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30133, 30134",,42.041655,-87.681602,,2
|
|
23
|
+
40520,Foster,Foster,4,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30101, 30102",,42.05416,-87.68356,,2
|
|
24
|
+
40400,Noyes,Noyes,3,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30078, 30079",,42.058282,-87.683337,,2
|
|
25
|
+
41250,Central,Central (Purple),2,purple,Evanston,elevated,FALSE,FALSE,FALSE,0,"30241, 30242",,42.063987,-87.685617,,2
|
|
26
|
+
41050,Linden,Linden,1,purple,Evanston,elevated,TRUE,FALSE,TRUE,441,"30203, 30204",,42.073153,-87.69073,,1
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
stop_id,naive_station_name,name,inbound_sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40900,Howard,Howard,1,"purple, red, yellow",North Elevated,elevated,TRUE,TRUE,TRUE,592,"30173, 30174, 30175, 30176",,42.019063,-87.672892,,1
|
|
3
|
+
41190,Jarvis,Jarvis,2,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30227, 30228",,42.01602042,-87.66925713,,2
|
|
4
|
+
40100,Morse,Morse,3,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30020, 30021",,42.008362,-87.665909,,2
|
|
5
|
+
41300,Loyola,Loyola,4,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30251, 30252",,42.001073,-87.661061,,1
|
|
6
|
+
40760,Granville,Granville,5,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30147, 30148",,41.99448301,-87.65918663,,1
|
|
7
|
+
40880,Thorndale,Thorndale,6,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30169, 30170",,41.99009909,-87.6590685,,2
|
|
8
|
+
41380,Bryn Mawr,Bryn Mawr,7,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30267, 30268",,41.983504,-87.65884,,1
|
|
9
|
+
40340,Berwyn,Berwyn,8,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30066, 30067",,41.977984,-87.658668,,1
|
|
10
|
+
41200,Argyle,Argyle,9,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30229, 30230",,41.97332205,-87.65852795,,1
|
|
11
|
+
40770,Lawrence,Lawrence,10,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30149, 30150",,41.96897629,-87.65848694,,1
|
|
12
|
+
40540,Wilson,Wilson,11,"red, purple",North Elevated,elevated,TRUE,TRUE,FALSE,0,"30105, 30106, 30385, 30386",,41.96548157,-87.65792581,,1
|
|
13
|
+
40080,Sheridan,Sheridan,12,red,North Elevated,elevated,FALSE,FALSE,FALSE,0,"30016, 30017",,41.95390484,-87.65466141,,2
|
|
14
|
+
41420,Addison,Addison (Red),13,red,North Elevated,elevated,TRUE,FALSE,FALSE,0,"30273, 30274",,41.94731617,-87.6536241,,1
|
|
15
|
+
41320,Belmont,Belmont (Red/Brown/Purple),14,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30255, 30256, 30257, 30258",,41.939751,-87.65338,,1
|
|
16
|
+
41220,Fullerton,Fullerton,15,"brown, purple, red",Lincoln Park,elevated,TRUE,TRUE,FALSE,0,"30233, 30234, 30235, 30236",,41.92530037,-87.65286844,,1
|
|
17
|
+
40650,North/Clybourn,North/Clybourn,16,red,Lincoln Park,subway,TRUE,FALSE,FALSE,0,"30125, 30126",,41.910655,-87.649177,,2
|
|
18
|
+
40630,Clark/Division,Clark/Division,17,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30121, 30122",,41.90392,-87.631412,,1
|
|
19
|
+
41450,Chicago,Chicago (Red),18,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30279, 30280",,41.896671,-87.628176,,1
|
|
20
|
+
40330,Grand,Grand (Red),19,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30064, 30065",,41.891665,-87.628021,,1
|
|
21
|
+
41660,Lake,Lake (Subway),20,red,State St Subway,subway,TRUE,TRUE,FALSE,0,"30289, 30290",,41.884809,-87.627813,,1
|
|
22
|
+
41090,Monroe,Monroe (Red),21,red,State St Subway,subway,FALSE,FALSE,FALSE,0,"30211, 30212",,41.880745,-87.627696,,2
|
|
23
|
+
40560,Jackson,Jackson (Red),22,red,State St Subway,subway,TRUE,FALSE,FALSE,0,"30109, 30110",,41.878153,-87.627596,,1
|
|
24
|
+
41490,Harrison,Harrison,23,red,State St Subway,subway,FALSE,FALSE,FALSE,0,"30285, 30286",,41.874039,-87.627479,,2
|
|
25
|
+
41400,Roosevelt,Roosevelt,24,"green, orange, red",Near South Side,subway,TRUE,TRUE,FALSE,0,"30080, 30081, 30269, 30270",,41.86737853,-87.62703141,,1
|
|
26
|
+
41000,Cermak-Chinatown,Cermak-Chinatown,25,red,Near South Side,elevated,TRUE,FALSE,FALSE,0,"30193, 30194",,41.853206,-87.630968,,1
|
|
27
|
+
40190,Sox-35th,Sox-35th,26,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30036, 30037",,41.831191,-87.630636,,1
|
|
28
|
+
41230,47th,47th (Red),27,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30237, 30238",,41.810318,-87.63094,,1
|
|
29
|
+
41170,Garfield,Garfield (Red),28,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30223, 30224",,41.79542,-87.631157,,1
|
|
30
|
+
40910,63rd,63rd,29,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30177, 30178",,41.780536,-87.630952,,1
|
|
31
|
+
40990,69th,69th,30,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30191, 30192",,41.768367,-87.625724,,1
|
|
32
|
+
40240,79th,79th,31,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30046, 30047",,41.750419,-87.625112,,1
|
|
33
|
+
41430,87th,87th,32,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30275, 30276",,41.735372,-87.624717,,1
|
|
34
|
+
40450,95th/Dan Ryan,95th/Dan Ryan,33,red,Dan Ryan,elevated,TRUE,FALSE,FALSE,0,"30088, 30089",,41.722377,-87.624342,,1
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
stop_id,station_name,name,sequence,lines,segment,station_type,is_accessible,is_transfer,is_parking,parking_capacity,platforms,connected_buses,stop_lat,stop_lon,location_type,parent_station
|
|
2
|
+
40140,Dempster-Skokie,Dempster-Skokie,1,yellow,Skokie Swift,,,,,,,,42.038951,-87.751919,,1
|
|
3
|
+
40900,Howard,Howard,3,"purple, red, yellow",Skokie Swift,,,,,,,,42.019063,-87.672892,,1
|
|
4
|
+
41680,Oakton-Skokie,Oakton-Skokie,2,yellow,Skokie Swift,,,,,,,,42.02624348,-87.74722084,,1
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@stiava/cta",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A NodeJS package for interacting with the CTA Bus and Train apis",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsup index.ts --format esm,cjs",
|
|
21
|
+
"types": "tsc --emitDeclarationOnly",
|
|
22
|
+
"copy-assets": "node scripts/copy-assets.mjs",
|
|
23
|
+
"prepare": "npm run build && npm run types && npm run copy-assets"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/papaparse": "^5.5.2",
|
|
27
|
+
"tsup": "^8.5.1",
|
|
28
|
+
"typescript": "^7.0.2"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"papaparse": "^5.5.4"
|
|
32
|
+
}
|
|
33
|
+
}
|