UNPKG

openf1-client

Version:

Library for querying data from the OpenF1 API

179 lines (178 loc) 4.91 kB
type NonArrayKeys<T> = { [K in keyof T]: T[K] extends any[] ? never : K; }[keyof T]; type QueryParams<T> = Partial<Pick<T, NonArrayKeys<T>>>; type CamelCase<S extends string> = S extends `${infer Head}_${infer Tail}` ? `${Head}${Capitalize<CamelCase<Tail>>}` : S; export type Camelize<T> = T extends Array<infer U> ? Camelize<U>[] : T extends object ? { [K in keyof T as CamelCase<K & string>]: Camelize<T[K]>; } : T; export type InputQueryParams<T> = { [K in keyof QueryParams<T> as CamelCase<string & K>]?: QueryParams<T>[K]; }; export interface CarData { brake: number; date: string; driver_number: number; drs: number; meeting_key: number | 'latest'; n_gear: number; rpm: number; session_key: number | 'latest'; speed: number; throttle: number; } export interface Driver { broadcast_name: string; country_code: string; driver_number: number; first_name: string; full_name: string; headshot_url: string; last_name: string; meeting_key: number | 'latest'; name_acronym: string; session_key: number | 'latest'; team_colour: string; team_name: string; } export interface Interval { date: string; driver_number: number; gap_to_leader: number | string | null; interval: number | string | null; meeting_key: number | 'latest'; session_key: number | 'latest'; } export interface Lap { date_start: string; driver_number: number; duration_sector_1: number; duration_sector_2: number; duration_sector_3: number; i1_speed: number; i2_speed: number; is_put_out_lap: boolean; lap_duration: number; lap_number: number; meeting_key: number | 'latest'; segments_sector_1: number[]; segments_sector_2: number[]; segments_sector_3: number[]; session_key: number | 'latest'; st_speed: number; } export interface Location { date: string; driver_number: number; meeting_key: number | 'latest'; session_key: number | 'latest'; x: number; y: number; z: number; } export interface Meeting { circuit_key: number; circuit_short_name: string; country_code: string; country_key: number; country_name: string; date_start: string; gmt_offset: number; location: string; meeting_key: number | 'latest'; meeting_name: string; meeting_official_name: string; year: number; } export interface Pit { date: string; driver_number: number; lap_number: number; meeting_key: number | 'latest'; pit_duration: number; session_key: number | 'latest'; } export interface Position { date: string; driver_number: number; meeting_key: number | 'latest'; position: number; session_key: number | 'latest'; } export interface RaceControl { category: 'CarEvent' | 'Drs' | 'Flag' | 'SafteyCar'; date: string; driver_number: number; flag: 'GREEN' | 'YELLOW' | 'DOUBLE YELLOW' | 'CHEQUERED'; lap_number: number; meeting_key: number | 'latest'; message: string; scope: 'Track' | 'Driver' | 'Sector'; sector: number | null; session_key: number | 'latest'; } export interface Session { circuit_key: number; circuit_short_name: string; country_code: string; country_key: number; country_name: string; date_end: string; date_start: string; gmt_offset: string; location: string; meeting_key: number | 'latest'; session_key: number | 'latest'; session_name: 'Practice 1' | 'Qualifying' | 'Race'; session_type: 'Practice' | 'Qualifying' | 'Race'; year: number; } export interface SessionResult { dnf: boolean; dns: boolean; dsq: boolean; driver_number: number; duration: number | null | [number | null, number | null, number | null]; gap_to_leader: number | string | null | [number | null, number | null, number | null]; number_of_laps: number; meeting_key: number; position: number; session_key: number; } export interface StartingGrid { driver_number: number; lap_duration: number | null; meeting_key: number; position: number; session_key: number; } export interface Stint { compound: 'SOFT' | 'MEDIUM' | 'HARD'; driver_number: number; lap_end: number; lap_start: number; meeting_key: number | 'latest'; session_key: number | 'latest'; stint_number: number; tyre_age_at_start: number; } export interface TeamRadio { date: string; driver_number: number; meeting_key: number | 'latest'; recording_url: string; session_key: number | 'latest'; } export interface Weather { air_temperature: number; date: string; humidity: number; meeting_key: number | 'latest'; pressure: number; rainfall: number; session_key: number | 'latest'; track_temperature: number; wind_direction: number; wind_speed: number; } export {};