33 lines
911 B
TypeScript
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 }
|
|
})
|
|
}
|