69 lines
1.6 KiB
TypeScript
69 lines
1.6 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { isDefined } from "@/server/utils"
|
|
|
|
export const locationsUrlsSchema = z.object({
|
|
hotels: z
|
|
.object({
|
|
items: z.array(
|
|
z.object({
|
|
id: z.string(),
|
|
url: z.string(),
|
|
})
|
|
),
|
|
})
|
|
.transform((data) => {
|
|
return data.items
|
|
}),
|
|
cities: z
|
|
.object({
|
|
items: z
|
|
.array(
|
|
z
|
|
.object({
|
|
id: z
|
|
.object({
|
|
da: z.string().nullish(),
|
|
de: z.string().nullish(),
|
|
en: z.string().nullish(),
|
|
fi: z.string().nullish(),
|
|
no: z.string().nullish(),
|
|
pl: z.string().nullish(),
|
|
sv: z.string().nullish(),
|
|
})
|
|
.transform(
|
|
(data) =>
|
|
data.da ||
|
|
data.de ||
|
|
data.en ||
|
|
data.fi ||
|
|
data.no ||
|
|
data.pl ||
|
|
data.sv
|
|
),
|
|
url: z.string().nullish(),
|
|
})
|
|
.partial()
|
|
.transform((data) => {
|
|
if (!data.id || !data.url) {
|
|
return null
|
|
}
|
|
|
|
return {
|
|
id: data.id,
|
|
url: data.url,
|
|
}
|
|
})
|
|
)
|
|
.transform((data) => {
|
|
return data.filter(isDefined)
|
|
}),
|
|
})
|
|
.transform((data) => {
|
|
return data.items
|
|
}),
|
|
})
|
|
|
|
export type GetLocationsUrlsData = z.input<typeof locationsUrlsSchema>
|
|
export type LocationsUrls = z.output<typeof locationsUrlsSchema>
|