fix: keep tenant thumbnail paths in production manuals render

This commit is contained in:
DMleadgen 2026-04-16 16:36:14 -06:00
parent 508a8bbe5e
commit 7144aa4943
Signed by: matt
GPG key ID: C2720CF8CD701894
2 changed files with 39 additions and 16 deletions

View file

@ -1,8 +1,7 @@
export const dynamic = "force-dynamic"
import { createHash } from "node:crypto"
import { existsSync } from "fs"
import { join } from "path"
import { existsSync } from "node:fs"
import { Metadata } from "next"
import { headers } from "next/headers"
import { businessConfig } from "@/lib/seo-config"
@ -13,6 +12,7 @@ import { selectManualsForSite } from "@/lib/manuals-site-selection"
import { generateSEOMetadata, generateStructuredData } from "@/lib/seo"
import { getManualsThumbnailsRoot } from "@/lib/manuals-paths"
import { resolveManualsTenantDomain } from "@/lib/manuals-tenant"
import { sanitizeManualThumbnailsForRuntime } from "@/lib/manuals-render-safety"
export const metadata: Metadata = generateSEOMetadata({
title: "Vending Machine Manuals | Rocky Mountain Vending",
@ -83,20 +83,10 @@ export default async function ManualsPage() {
)
}
// Hide broken local thumbnails so the public manuals page doesn't spam 404s.
const thumbnailsRoot = getManualsThumbnailsRoot()
manuals = 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 existsSync(join(thumbnailsRoot, relativeThumbnailPath))
? manual
: { ...manual, thumbnailUrl: undefined }
manuals = sanitizeManualThumbnailsForRuntime(manuals, {
isLocalDevelopment,
thumbnailsRoot: getManualsThumbnailsRoot(),
fileExists: existsSync,
})
// Generate structured data for SEO

View file

@ -0,0 +1,33 @@
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 }
})
}