openf1-client
Version:
Library for querying data from the OpenF1 API
179 lines (178 loc) • 4.91 kB
TypeScript
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 {};