iracing-api
Version:
Javascript client for iracing API
85 lines (84 loc) • 2.71 kB
JavaScript
import * as z from 'zod';
import { TrackTypeEnumSchema, TrackTypeSchema } from './common';
export const TrackMapLayersSchema = z.object({
background: z.string(),
inactive: z.string(),
active: z.string(),
pitroad: z.string(),
startFinish: z.string(),
turns: z.string(),
});
export const TrackAssetSchema = z.object({
coordinates: z.string(),
detailCopy: z.string(),
detailTechspecsCopy: z.union([z.string(), z.null()]),
detailVideo: z.null(),
folder: z.string(),
galleryImages: z.union([z.null(), z.string()]),
galleryPrefix: z.union([z.null(), z.string()]),
largeImage: z.string(),
logo: z.string(),
north: z.union([z.string(), z.null()]),
numSvgImages: z.number(),
smallImage: z.string(),
trackId: z.number(),
trackMap: z.string(),
trackMapLayers: TrackMapLayersSchema,
});
export const TrackAssetsSchema = z.record(TrackAssetSchema);
export const TrackSchema = z.object({
aiEnabled: z.boolean(),
allowPitlaneCollisions: z.boolean(),
allowRollingStart: z.boolean(),
allowStandingStart: z.boolean(),
awardExempt: z.boolean(),
category: TrackTypeEnumSchema,
categoryId: z.number(),
closes: z.string(),
configName: z.union([z.null(), z.string()]).optional(),
cornersPerLap: z.number(),
created: z.string(),
firstSale: z.string(),
freeWithSubscription: z.boolean(),
fullyLit: z.boolean(),
gridStalls: z.number(),
hasOptPath: z.boolean(),
hasShortParadeLap: z.boolean(),
hasStartZone: z.boolean(),
hasSvgMap: z.boolean(),
isDirt: z.boolean(),
isOval: z.boolean(),
isPsPurchasable: z.boolean(),
lapScoring: z.number(),
latitude: z.number(),
location: z.string(),
longitude: z.number(),
maxCars: z.number(),
nightLighting: z.boolean(),
nominalLapTime: z.number(),
numberPitstalls: z.number(),
opens: z.string(),
packageId: z.number(),
pitRoadSpeedLimit: z.union([z.number(), z.null()]).optional(),
price: z.number(),
priceDisplay: z.union([z.string(), z.null()]).optional(),
priority: z.number(),
purchasable: z.boolean(),
qualifyLaps: z.number(),
restartOnLeft: z.boolean(),
retired: z.boolean(),
searchFilters: z.string(),
siteUrl: z.union([z.null(), z.string()]).optional(),
sku: z.number(),
soloLaps: z.number(),
startOnLeft: z.boolean(),
supportsGripCompound: z.boolean(),
techTrack: z.boolean(),
timeZone: z.string(),
trackConfigLength: z.number(),
trackDirpath: z.string(),
trackId: z.number(),
trackName: z.string(),
trackTypes: z.array(TrackTypeSchema),
banking: z.union([z.null(), z.string()]).optional(),
});