Some checks failed
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Admin Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Codespell / Check for spelling errors (push) Has been cancelled
Sync Repositories / sync_changes (push) Has been cancelled
Synced from upstream: 8853637e981ed7d8a6cff32bd98e7afe20f54362
34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
/**
|
|
* Ensures that a URL has a trailing slash while preserving query parameters and fragments
|
|
* @param url - The URL to process
|
|
* @returns The URL with a trailing slash added to the pathname (if not already present)
|
|
*/
|
|
export function ensureTrailingSlash(url: string): string {
|
|
try {
|
|
// Handle relative URLs by creating a URL object with a dummy base
|
|
const urlObj = new URL(url, "http://dummy.com");
|
|
|
|
// Don't modify root path
|
|
if (urlObj.pathname === "/") {
|
|
return url;
|
|
}
|
|
|
|
// Add trailing slash if it doesn't exist
|
|
if (!urlObj.pathname.endsWith("/")) {
|
|
urlObj.pathname += "/";
|
|
}
|
|
|
|
// For relative URLs, return just the path + search + hash
|
|
if (url.startsWith("/")) {
|
|
return urlObj.pathname + urlObj.search + urlObj.hash;
|
|
}
|
|
|
|
// For absolute URLs, return the full URL
|
|
return urlObj.toString();
|
|
} catch (error) {
|
|
// If URL parsing fails, return the original URL
|
|
console.warn("Failed to parse URL for trailing slash enforcement:", url, error);
|
|
return url;
|
|
}
|
|
}
|