Rocky_Mountain_Vending/lib/manuals-render-safety.ts

33 lines
911 B
TypeScript

import { join } from "node:path"
import type { Manual } from "@/lib/manuals-types"
type ThumbnailSanitizeOptions = {
isLocalDevelopment: boolean
thumbnailsRoot: string
fileExists?: (path: string) => boolean
}
export function sanitizeManualThumbnailsForRuntime(
manuals: Manual[],
options: ThumbnailSanitizeOptions
): Manual[] {
if (!options.isLocalDevelopment) {
return manuals
}
const fileExists = options.fileExists ?? (() => false)
return manuals.map((manual) => {
if (!manual.thumbnailUrl || /^https?:\/\//i.test(manual.thumbnailUrl)) {
return manual
}
const relativeThumbnailPath = manual.thumbnailUrl.includes("/thumbnails/")
? manual.thumbnailUrl.replace(/^.*\/thumbnails\//, "")
: manual.thumbnailUrl
return fileExists(join(options.thumbnailsRoot, relativeThumbnailPath))
? manual
: { ...manual, thumbnailUrl: undefined }
})
}