mirror of
https://github.com/Nezumi-2711/onedrive-vercel-index.git
synced 2026-09-22 13:38:45 +00:00
add getReadablePath util to make copied url readable
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Make path readable but still valid in URL (means the whole URL is still recognized as a URL)
|
||||
* @param path Path. May be used as URL path or query value.
|
||||
* @returns Readable but still valid path
|
||||
*/
|
||||
export function getReadablePath(path: string) {
|
||||
path = path
|
||||
.split('/')
|
||||
.map(s => decodeURIComponent(s))
|
||||
.map(s =>
|
||||
Array.from(s)
|
||||
.map(c => (isSafeChar(c) ? c : encodeURIComponent(c)))
|
||||
.join('')
|
||||
)
|
||||
.join('/')
|
||||
// Handle trailing char for autolink
|
||||
// Ref: https://github.github.com/gfm/#autolinks-extension-
|
||||
if (/^[!,:*]$/.test(path[path.length - 1])) {
|
||||
path = path.substring(0, path.length - 1) + encodeURIComponent(path[path.length - 1])
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
||||
// Check if the character is safe (means no need of percent-encoding)
|
||||
function isSafeChar(c: string) {
|
||||
if (c.charCodeAt(0) < 0x80) {
|
||||
// ASCII
|
||||
if (/^[a-zA-Z0-9\-._~]$/.test(c)) {
|
||||
// RFC3986 unreserved chars
|
||||
return true
|
||||
} else if (/^[*:+@,!]$/.test(c)) {
|
||||
// Some extra pretty safe chars for URL path or query
|
||||
// Ref: https://stackoverflow.com/a/42287988/11691878
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
if (!/\s|\u180e/.test(c)) {
|
||||
// Non-whitespace char. \u180e is missed in \s.
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user