app installer hrefs + IIS /installers static

This commit is contained in:
2026-07-29 10:25:56 -04:00
parent d77a726560
commit e0b3dbcff3
4 changed files with 61 additions and 6 deletions

View File

@@ -12,6 +12,24 @@ export function withBase(path) {
return BASE_URL + String(path).replace(/^\//, '')
}
// Resolve a stored file/link path for use in an <a href>. Full URLs (http,
// https, file:, mailto:, ...) and UNC / protocol-relative paths (\\server,
// //host) open as-is. A path relative to the app (e.g. 'installers/x.exe' or
// './installers/x.exe') is mounted under the base so it does NOT resolve
// against the current route - '/shopdb/applications/6' + 'installers/x.exe'
// wrongly became '/shopdb/applications/installers/x.exe'.
export function fileHref(path) {
if (!path) return null
const trimmed = String(path).trim()
if (!trimmed) return null
if (/^[a-z][a-z0-9+.-]*:/i.test(trimmed)
|| trimmed.startsWith('\\\\')
|| trimmed.startsWith('//')) {
return trimmed
}
return withBase('/' + trimmed.replace(/^(\.?\/)+/, ''))
}
// Inverse of withBase: turn a browser pathname (which includes the mount
// base, e.g. '/ops/computers') into a router path ('/computers'). Router
// navigation already applies the base; feeding it an un-stripped pathname