81 lines
2.0 KiB
TypeScript
81 lines
2.0 KiB
TypeScript
import { z } from "zod"
|
|
|
|
const ecoLabelsSchema = z.object({
|
|
euEcoLabel: z.boolean(),
|
|
greenGlobeLabel: z.boolean(),
|
|
nordicEcoLabel: z.boolean(),
|
|
svanenEcoLabelCertificateNumber: z.string().optional(),
|
|
})
|
|
|
|
export const checkinSchema = z.object({
|
|
checkInTime: z.string(),
|
|
checkOutTime: z.string(),
|
|
onlineCheckout: z.boolean(),
|
|
onlineCheckOutAvailableFrom: z.string().nullable().optional(),
|
|
})
|
|
|
|
const hotelFacilityDetailSchema = z
|
|
.object({
|
|
description: z.string(),
|
|
heading: z.string(),
|
|
})
|
|
.optional()
|
|
|
|
/** Possibly more values */
|
|
const hotelFacilityDetailsSchema = z.object({
|
|
breakfast: hotelFacilityDetailSchema,
|
|
checkout: hotelFacilityDetailSchema,
|
|
gym: hotelFacilityDetailSchema,
|
|
internet: hotelFacilityDetailSchema,
|
|
laundry: hotelFacilityDetailSchema,
|
|
luggage: hotelFacilityDetailSchema,
|
|
shop: hotelFacilityDetailSchema,
|
|
telephone: hotelFacilityDetailSchema,
|
|
})
|
|
|
|
const hotelInformationSchema = z
|
|
.object({
|
|
description: z.string(),
|
|
heading: z.string(),
|
|
link: z.string().optional(),
|
|
})
|
|
.optional()
|
|
|
|
const hotelInformationsSchema = z.object({
|
|
accessibility: hotelInformationSchema,
|
|
safety: hotelInformationSchema,
|
|
sustainability: hotelInformationSchema,
|
|
})
|
|
|
|
const interiorSchema = z.object({
|
|
numberOfBeds: z.number(),
|
|
numberOfCribs: z.number(),
|
|
numberOfFloors: z.number(),
|
|
numberOfRooms: z.object({
|
|
connected: z.number(),
|
|
forAllergics: z.number().optional(),
|
|
forDisabled: z.number(),
|
|
nonSmoking: z.number(),
|
|
pet: z.number(),
|
|
withExtraBeds: z.number(),
|
|
total: z.number(),
|
|
}),
|
|
})
|
|
|
|
const receptionHoursSchema = z.object({
|
|
alwaysOpen: z.boolean(),
|
|
isClosed: z.boolean(),
|
|
openingTime: z.string().optional(),
|
|
closingTime: z.string().optional(),
|
|
})
|
|
|
|
export const hotelFactsSchema = z.object({
|
|
checkin: checkinSchema,
|
|
ecoLabels: ecoLabelsSchema,
|
|
hotelFacilityDetail: hotelFacilityDetailsSchema.default({}),
|
|
hotelInformation: hotelInformationsSchema.default({}),
|
|
interior: interiorSchema,
|
|
receptionHours: receptionHoursSchema,
|
|
yearBuilt: z.string(),
|
|
})
|