35 lines
980 B
TypeScript
35 lines
980 B
TypeScript
import { z } from "zod";
|
|
|
|
export const numberModel = z
|
|
.union([
|
|
z.coerce
|
|
.number()
|
|
.refine((val) => !isNaN(val), { message: "Must be a valid number" }),
|
|
z.undefined(),
|
|
])
|
|
.transform((value) => {
|
|
return value !== undefined && isNaN(value) ? undefined : value;
|
|
});
|
|
|
|
export const airportModel = z.object({
|
|
id: z.coerce.number().int(),
|
|
ident: z.string().nullable().optional(),
|
|
type: z.string(),
|
|
name: z.string(),
|
|
latitudeDeg: numberModel.default(0.0),
|
|
longitudeDeg: numberModel.default(0.0),
|
|
elevationFt: numberModel.default(0.0),
|
|
continent: z.string(),
|
|
isoCountry: z.string(),
|
|
country: z.string(),
|
|
isoRegion: z.string(),
|
|
municipality: z.string(),
|
|
scheduledService: z.string(),
|
|
gpsCode: z.coerce.string().default("----"),
|
|
iataCode: z.coerce.string().min(1),
|
|
localCode: z.coerce.string().default("----"),
|
|
createdAt: z.coerce.date(),
|
|
updatedAt: z.coerce.date(),
|
|
});
|
|
export type Airport = z.infer<typeof airportModel>;
|