import { z } from "zod"; import zodToCamelCase from "zod-to-camel-case"; export const mediaClipObjectSchema = z.object({ url: z.string(), type: z.string(), bytes: z.number(), format: z.string(), display_name: z.string(), resource_type: z.string(), metadata: z .object({ attribution: z.string().nullish(), }) .nullish(), }); export const videoClipObjectSchema = z .object({ duration: z.number().nullish(), mux_asset_id: z.string(), playback_ids: z.array( z.object({ id: z.string(), policy: z.string(), }), ), mux_playback_id: z.string(), }) .nullable(); // FIXME why is this nullable? export const mediaClipCycleSchema = z.object({ // text data had a mix of numbers and strings order: z.number().or(z.string()), media_id: z.number().or(z.string()), video_id: z.number().nullish(), media_type: z.string().nullish(), custom_title: z.string().nullish(), media_object: mediaClipObjectSchema, video_object: videoClipObjectSchema, transcriptSentences: z.array(z.string()).nullish(), }); export const mediaClipsRecordSchema = z.record( z.string(), z.array(mediaClipCycleSchema), ); export const lessonMediaClipsSchema = z.object({ media_clips: mediaClipsRecordSchema, }); export type MediaClipObject = z.infer; export type VideoClipObject = z.infer; export type MediaClipCycle = z.infer; export type MediaClipsRecord = z.infer; export type LessonMediaClips = z.infer; export const mediaClipObjectSchemaCamel = zodToCamelCase(mediaClipObjectSchema); export type MediaClipObjectCamel = z.infer; export const videoClipObjectSchemaCamel = zodToCamelCase(videoClipObjectSchema); export type VideoClipObjectCamel = z.infer; export const mediaClipCycleSchemaCamel = zodToCamelCase(mediaClipCycleSchema); export type MediaClipCycleCamel = z.infer; export const mediaClipsRecordSchemaCamel = zodToCamelCase( mediaClipsRecordSchema, ); export type MediaClipsRecordCamel = z.infer; export const lessonMediaClipsSchemaCamel = zodToCamelCase( lessonMediaClipsSchema, ); export type LessonMediaClipsCamel = z.infer;