UNPKG

@rapidthenerd/ergast-ts

Version:

Node wrapper for Ergast API

66 lines (53 loc) 2.3 kB
import { LapsData } from "./interface/LapsData"; import axios from "axios"; import { CircuitData } from "./interface/CircuitData"; import { TimingsData } from "./interface/TimingsData"; import {Cache} from "./cache/cache"; export class Laps { public async getForCurrentYear(raceNumber: number, lap: number): Promise<LapsData> { return this.getFor(new Date().getFullYear(), raceNumber, lap); } public async getFor(year: number | string, raceNumber: number, lap: number): Promise<LapsData> { const key = Cache.generateKey("laps", year, raceNumber, lap); if (Cache.isEnabled() && Cache.isInCache(key)) { return Cache.get(key); } const response = await axios.get(`https://ergast.com/api/f1/${year}/${raceNumber}/laps/${lap}.json`); const responseData = response.data.MRData.RaceTable; const racesData = responseData.Races[0]; const circuitData: CircuitData = { season: racesData.season, round: racesData.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 lapsData = racesData.Laps[0]; const timings: TimingsData[] = []; for (let timing of lapsData.Timings) { let time: TimingsData = { driverId: timing.driverId, position: parseInt(timing.position), time: timing.time, }; timings.push(time); } const laps: LapsData = { season: year, round: raceNumber, wikiUrl: racesData.url, raceName: racesData.raceName, circuit: circuitData, date: new Date(racesData.date), time: racesData.time, number: parseInt(lap.toString()), timings: timings, }; Cache.set(key, laps); return laps; } }