-
Notifications
You must be signed in to change notification settings - Fork 43
Description
Context
What I mean by a "dirty" path is simply a path that has trailing and leading slashes, without accounting for what other URL parts are following or leading.
Current behavior
If we try to merge parts of a URL that contains leading and trailing slashes, building a relative path out of these data would lead to an incorrect path.
import Url.Builder
Url.Builder.relative ["http://localhost/", "/ping/"] [] -- "http://localhost///ping/"Expected behavior
It would be nice if the function somehow cleaned the URLs. The end result (with the above data) could look like that.
import Url.Builder
Url.Builder.relative ["http://localhost/", "/ping/"] [] -- "http://localhost/ping/"
Url.Builder.relative ["http://localhost/", "ping/"] [] -- "http://localhost/ping/"
Url.Builder.relative ["http://localhost/", "/ping"] [] -- "http://localhost/ping"
Url.Builder.relative ["http://localhost/", "ping"] [] -- "http://localhost/ping"
Url.Builder.relative ["http://localhost", "/ping/"] [] -- "http://localhost/ping/"
Url.Builder.relative ["http://localhost", "ping/"] [] -- "http://localhost/ping/"
Url.Builder.relative ["http://localhost", "/ping"] [] -- "http://localhost/ping"
Url.Builder.relative ["http://localhost", "ping"] [] -- "http://localhost/ping"Additional Context
In JavaScript, there is a module path that has a join function that act in a similar fashion, but will merge the parts of a path and make a valid url at the end (it also uses the operating system's default path separator but this is irrelevant here).
There could be a new Url.Builder.join function to prevent any breaking change in the current API instead.
import {join} from "path";
console.log(join("http://localhost/", "/ping/")); // "http://localhost/ping/"
console.log(join("http://localhost/", "ping/")); // "http://localhost/ping/"
console.log(join("http://localhost/", "/ping")); // "http://localhost/ping"
console.log(join("http://localhost/", "ping")); // "http://localhost/ping"
console.log(join("http://localhost", "/ping/")); // "http://localhost/ping/"
console.log(join("http://localhost", "ping/")); // "http://localhost/ping/"
console.log(join("http://localhost", "/ping")); // "http://localhost/ping"
console.log(join("http://localhost", "ping")); // "http://localhost/ping"Like
import Url.Builder
Url.Builder.join ["http://localhost/", "/ping/"] [] -- "http://localhost/ping/"
Url.Builder.join ["http://localhost/", "ping/"] [] -- "http://localhost/ping/"
Url.Builder.join ["http://localhost/", "/ping"] [] -- "http://localhost/ping"
Url.Builder.join ["http://localhost/", "ping"] [] -- "http://localhost/ping"
Url.Builder.join ["http://localhost", "/ping/"] [] -- "http://localhost/ping/"
Url.Builder.join ["http://localhost", "ping/"] [] -- "http://localhost/ping/"
Url.Builder.join ["http://localhost", "/ping"] [] -- "http://localhost/ping"
Url.Builder.join ["http://localhost", "ping"] [] -- "http://localhost/ping"