UNPKG

@rapidthenerd/ergast-ts

Version:

Node wrapper for Ergast API

72 lines (57 loc) 2.69 kB
import axios from "axios"; import {CircuitData} from "./interface/CircuitData"; import {PitStopEntry} from "./interface/PitStopEntry"; import {Cache} from "./cache/cache"; import {PitStopData} from "./interface/PitStopData"; export class PitStop { public async getForCurrentYear(raceNumber: number, stop: number): Promise<PitStopData> { return this.getFor(new Date().getFullYear(), raceNumber, stop); } public async getFor(year: number | string, raceNumber: number, stop: number): Promise<PitStopData> { const key = Cache.generateKey("pit_stop", year, raceNumber, stop); if (Cache.isEnabled() && Cache.isInCache(key)) { return Cache.get(key); } const response = await axios.get(`https://ergast.com/api/f1/${year}/${raceNumber}/pitstops/${stop}.json`); const responseData = response.data.MRData.RaceTable; const racesData = responseData.Races && responseData.Races[0] ? responseData.Races[0] : null; if (!racesData) { throw new Error(`Could not find data for year ${year}, raceNumber ${raceNumber}, stop ${stop}`); } const circuitData: CircuitData = { season: responseData.season, round: responseData.round, name: racesData.Circuit.circuitName, wikiUrl: racesData.Circuit.url, id: racesData.Circuit.circuitId, lat: parseFloat(racesData.Circuit.Location.lat), long: parseFloat(racesData.Circuit.Location.long), local: racesData.Circuit.Location.locality, country: racesData.Circuit.Location.country, }; const pitStopsData = racesData.PitStops && racesData.PitStops.length ? racesData.PitStops : []; const pitStopEntries: PitStopEntry[] = []; // Don't know how many stops there could be // so probably assume 50 max. for (let i = 0; i < 50; i++) { const currentPitStop = pitStopsData[i]; if (currentPitStop === null || currentPitStop === undefined) break; pitStopEntries.push({ driverId: currentPitStop.driverId, lap: currentPitStop.lap, stop: currentPitStop.stop, time: currentPitStop.time, duration: currentPitStop.duration }); } const pitStop: PitStopData = { season: year, round: raceNumber, stop: stop, circuit: circuitData, totalStops: pitStopEntries } Cache.set(key, pitStop); return pitStop; } }