HotTRDealsBackend/utils/mediaPath.js
2026-02-09 21:47:55 +00:00

40 lines
942 B
JavaScript

function normalizeMediaPath(value) {
if (value === undefined) return undefined
if (value === null) return null
const raw = String(value).trim()
if (!raw) return null
const lower = raw.toLowerCase()
if (
lower.startsWith("javascript:") ||
lower.startsWith("data:") ||
lower.startsWith("vbscript:")
) {
return null
}
try {
if (raw.startsWith("http://") || raw.startsWith("https://")) {
const parsed = new URL(raw)
return parsed.pathname || "/"
}
if (raw.startsWith("//")) {
const parsed = new URL(`https:${raw}`)
return parsed.pathname || "/"
}
const domainLike = /^[a-z0-9.-]+\.[a-z]{2,}(?::\d+)?(\/|$)/i.test(raw)
if (domainLike) {
const parsed = new URL(`https://${raw}`)
return parsed.pathname || "/"
}
} catch {}
if (raw.startsWith("/")) return raw
return `/${raw.replace(/^\/+/, "")}`
}
module.exports = { normalizeMediaPath }