summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/file/path.ts19
1 files changed, 17 insertions, 2 deletions
diff --git a/packages/app/src/context/file/path.ts b/packages/app/src/context/file/path.ts
index ced30d0fd..155f05aaf 100644
--- a/packages/app/src/context/file/path.ts
+++ b/packages/app/src/context/file/path.ts
@@ -72,12 +72,27 @@ export function unquoteGitPath(input: string) {
return new TextDecoder().decode(new Uint8Array(bytes))
}
+export function decodeFilePath(input: string) {
+ try {
+ return decodeURIComponent(input)
+ } catch {
+ return input
+ }
+}
+
+export function encodeFilePath(filepath: string): string {
+ return filepath
+ .split("/")
+ .map((segment) => encodeURIComponent(segment))
+ .join("/")
+}
+
export function createPathHelpers(scope: () => string) {
const normalize = (input: string) => {
const root = scope()
const prefix = root.endsWith("/") ? root : root + "/"
- let path = unquoteGitPath(stripQueryAndHash(stripFileProtocol(input)))
+ let path = unquoteGitPath(decodeFilePath(stripQueryAndHash(stripFileProtocol(input))))
if (path.startsWith(prefix)) {
path = path.slice(prefix.length)
@@ -100,7 +115,7 @@ export function createPathHelpers(scope: () => string) {
const tab = (input: string) => {
const path = normalize(input)
- return `file://${path}`
+ return `file://${encodeFilePath(path)}`
}
const pathFromTab = (tabValue: string) => {