UNPKG

@rapidthenerd/ergast-ts

Version:

Node wrapper for Ergast API

62 lines (52 loc) 2.34 kB
import axios from 'axios'; import {SeasonData} from './interface/SeasonData'; import {CircuitData} from "./interface/CircuitData"; import {Cache} from "./cache/cache"; export class Seasons { /** * Gets the current season data. * @return an array of {@link SeasonData} */ public async getForCurrentYear(): Promise<SeasonData[]> { return this.getForYear(new Date().getFullYear()); } /** * Returns the current race data for the year specified. * @param year to get the data from. * @return an array of {@link SeasonData} */ public async getForYear(year: string | number): Promise<SeasonData[]> { const key = Cache.generateKey("seasons", year); if (Cache.isEnabled() && Cache.isInCache(key)) { return Cache.get(key); } const response = await axios.get(`https://ergast.com/api/f1/${year}.json`); const racesData = response.data.MRData.RaceTable.Races; const seasonData: SeasonData[] = racesData.map((raceData: any) => { const circuit: CircuitData = { name: raceData.Circuit.circuitName, wikiUrl: raceData.Circuit.url, id: raceData.Circuit.circuitId, lat: parseFloat(raceData.Circuit.Location.lat), long: parseFloat(raceData.Circuit.Location.long), local: raceData.Circuit.Location.locality, country: raceData.Circuit.Location.country } return { season: year, round: raceData.round, wikiUrl: raceData.url, raceName: raceData.raceName, circuit: circuit, date: new Date(raceData.date), time: raceData.time, firstPractice: raceData.FirstPractice?.date ? raceData.FirstPractice.date : null, secondPractice: raceData.SecondPractice?.date ? raceData.SecondPractice.date : null, thirdPractice: raceData.ThirdPractice?.date ? raceData.ThirdPractice.date : null, qualifying: raceData.Qualifying?.date ? raceData.Qualifying.date : null, }; }); Cache.set(key, seasonData); return seasonData; } }