mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 23:59:59 -05:00
fix url parse bug (#3316)
This commit is contained in:
parent
7ba42ee4a6
commit
0f33bf6885
2 changed files with 26 additions and 7 deletions
|
@ -17,7 +17,7 @@ interface URLParts {
|
|||
}
|
||||
|
||||
const patterns = {
|
||||
protocol: "(?:([^:/?#]+):)",
|
||||
protocol: "(?:([a-z]+):)",
|
||||
authority: "(?://([^/?#]*))",
|
||||
path: "([^?#]*)",
|
||||
query: "(\\?[^#]*)",
|
||||
|
@ -228,10 +228,13 @@ export class URL {
|
|||
this.username || this.password
|
||||
? `${this.username}${this.password ? ":" + this.password : ""}@`
|
||||
: "";
|
||||
|
||||
return `${this.protocol}//${authentication}${this.host}${this.pathname}${
|
||||
this.search
|
||||
}${this.hash}`;
|
||||
let slash = "";
|
||||
if (this.host || this.protocol === "file:") {
|
||||
slash = "//";
|
||||
}
|
||||
return `${this.protocol}${slash}${authentication}${this.host}${
|
||||
this.pathname
|
||||
}${this.search}${this.hash}`;
|
||||
}
|
||||
|
||||
set href(value: string) {
|
||||
|
@ -244,7 +247,10 @@ export class URL {
|
|||
}
|
||||
|
||||
get origin(): string {
|
||||
return `${this.protocol}//${this.host}`;
|
||||
if (this.host) {
|
||||
return `${this.protocol}//${this.host}`;
|
||||
}
|
||||
return "null";
|
||||
}
|
||||
|
||||
get password(): string {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||||
import { test, assert, assertEquals } from "./test_util.ts";
|
||||
import { test, assert, assertEquals, assertThrows } from "./test_util.ts";
|
||||
|
||||
test(function urlParsing(): void {
|
||||
const url = new URL(
|
||||
|
@ -187,3 +187,16 @@ test(function customInspectFunction(): void {
|
|||
'URL { href: "http://example.com/?", origin: "http://example.com", protocol: "http:", username: "", password: "", host: "example.com", hostname: "example.com", port: "", pathname: "/", hash: "", search: "?" }'
|
||||
);
|
||||
});
|
||||
|
||||
test(function protocolNotHttpOrFile() {
|
||||
const url = new URL("about:blank");
|
||||
assertEquals(url.href, "about:blank");
|
||||
assertEquals(url.protocol, "about:");
|
||||
assertEquals(url.origin, "null");
|
||||
});
|
||||
|
||||
test(function createBadUrl(): void {
|
||||
assertThrows(() => {
|
||||
new URL("0.0.0.0:8080");
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue