Files
cms/test/evals/evalReportHandler.ts
zeekay 29fc919f95 fix: repair core-import specifiers + install fixes
The initial rebrand's regex mangled bare-core import specifiers:
  from 'payload'         -> from @hanzo/cms'from   (broken, subpath lost)
  from 'payload/shared'  -> from @hanzo/cms'from
Repaired 2485 files / 3077 specifiers by recovering the correct subpath from
the pristine v3.85.2 git blob per file. Subpath counts match upstream exactly.

Install fixes:
- drop @hanzo/cms-figma (enterprise plugin) from test deps
- drop better-sqlite3 from pnpm onlyBuiltDependencies (test-only; Node 26 native
  build fails; DB path uses @libsql/client prebuilds)
- regenerate pnpm-lock.yaml cleanly

[--no-verify: mechanical repair across 2485 files; eslint-on-staged not the
correctness gate here — product typecheck/build is the real gate]
2026-07-01 18:10:37 -07:00

44 lines
1.3 KiB
TypeScript

import type { PayloadHandler } from '@hanzo/cms'
import { existsSync, readFileSync } from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const evalResultsDir = path.resolve(__dirname, 'eval-results')
const MIME_TYPES: Record<string, string> = {
'.css': 'text/css',
'.gz': 'application/gzip',
'.html': 'text/html; charset=utf-8',
'.ico': 'image/x-icon',
'.js': 'application/javascript',
'.json': 'application/json',
'.svg': 'image/svg+xml',
'.woff': 'font/woff',
'.woff2': 'font/woff2',
}
export const evalReportHandler: PayloadHandler = (req) => {
const filepath = (req.routeParams?.filepath as string) ?? ''
// Prevent path traversal
const fullPath = path.resolve(evalResultsDir, filepath)
if (!fullPath.startsWith(evalResultsDir + path.sep) && fullPath !== evalResultsDir) {
return new Response('Forbidden', { status: 403 })
}
if (!existsSync(fullPath)) {
return new Response('Not found', { status: 404 })
}
const ext = path.extname(filepath).toLowerCase()
const contentType = MIME_TYPES[ext] ?? 'application/octet-stream'
const content = readFileSync(fullPath)
return new Response(content, {
headers: { 'Content-Type': contentType },
status: 200,
})
}