summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/js/util.ts12
-rw-r--r--cli/tests/unit/path_from_url_test.ts3
2 files changed, 9 insertions, 6 deletions
diff --git a/cli/js/util.ts b/cli/js/util.ts
index c50a4cdcb..a67dec595 100644
--- a/cli/js/util.ts
+++ b/cli/js/util.ts
@@ -82,19 +82,21 @@ export function immutableDefine(
}
function pathFromURLWin32(url: URL): string {
- if (url.hostname !== "") {
+ const hostname = url.hostname;
+ const pathname = decodeURIComponent(url.pathname.replace(/\//g, "\\"));
+
+ if (hostname !== "") {
//TODO(actual-size) Node adds a punycode decoding step, we should consider adding this
- return `\\\\${url.hostname}${url.pathname}`;
+ return `\\\\${hostname}${pathname}`;
}
- const validPath = /^\/(?<driveLetter>[A-Za-z]):\//;
- const matches = validPath.exec(url.pathname);
+ const validPath = /^\\(?<driveLetter>[A-Za-z]):\\/;
+ const matches = validPath.exec(pathname);
if (!matches?.groups?.driveLetter) {
throw new TypeError("A URL with the file schema must be absolute.");
}
- const pathname = url.pathname.replace(/\//g, "\\");
// we don't want a leading slash on an absolute path in Windows
return pathname.slice(1);
}
diff --git a/cli/tests/unit/path_from_url_test.ts b/cli/tests/unit/path_from_url_test.ts
index 5e7203a58..41f2c47ea 100644
--- a/cli/tests/unit/path_from_url_test.ts
+++ b/cli/tests/unit/path_from_url_test.ts
@@ -7,6 +7,7 @@ unitTest(
{ ignore: Deno.build.os === "windows" },
function pathFromURLPosix(): void {
assertEquals(pathFromURL("file:///test/directory"), "/test/directory");
+ assertEquals(pathFromURL("file:///space_ .txt"), "/space_ .txt");
assertThrows(() => pathFromURL("file://host/test/directory"));
assertThrows(() => pathFromURL("https://deno.land/welcome.ts"));
}
@@ -16,6 +17,7 @@ unitTest(
{ ignore: Deno.build.os !== "windows" },
function pathFromURLWin32(): void {
assertEquals(pathFromURL("file:///c:/windows/test"), "c:\\windows\\test");
+ assertEquals(pathFromURL("file:///c:/space_ .txt"), "c:\\space_ .txt");
assertThrows(() => pathFromURL("file:///thing/test"));
assertThrows(() => pathFromURL("https://deno.land/welcome.ts"));
/* TODO(ry) Add tests for these situations
@@ -24,7 +26,6 @@ unitTest(
* emoji_🙃.txt file:///D:/weird_names/emoji_%F0%9F%99%83.txt
* percent_%.txt file:///D:/weird_names/percent_%25.txt
* pound_#.txt file:///D:/weird_names/pound_%23.txt
- * space_ .txt file:///D:/weird_names/space_%20.txt
* swapped_surrogate_pair_��.txt file:///D:/weird_names/swapped_surrogate_pair_%EF%BF%BD%EF%BF%BD.txt
*/
}