// Sert les médias du contenu Grav (et des snapshots figés). // - `?w=480` : image redimensionnée (voir server/lib/media.ts). // - `?poster=1` : première frame d'une vidéo. // - `?frozen=` : résout d'abord dans le snapshot figé (§7.3). import { join } from 'node:path' import { useContentSource } from '../../lib/content-source' import { serveMedia, splitMediaPath } from '../../lib/media' export default defineEventHandler(async (event) => { const { projectId, filename } = splitMediaPath(getRouterParam(event, 'path') ?? '') const query = getQuery(event) const width = Number(query.w) || 0 const wantPoster = Boolean(query.poster) const frozenId = typeof query.frozen === 'string' ? query.frozen : '' const config = useRuntimeConfig(event) const source = useContentSource() // Racines de résolution : snapshot figé d'abord, contenu live ensuite const roots: string[] = [] if (frozenId && /^[\w-]+$/.test(frozenId)) { roots.push(join(config.dataDir, 'frozen', frozenId)) } roots.push(source.rootDir) return serveMedia(event, { roots, projectId, filename, width, wantPoster, dataDir: config.dataDir }) })