1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import parseuri from "parseuri";
- export function url(uri, path = "", loc) {
- let obj = uri;
-
- loc = loc || (typeof location !== "undefined" && location);
- if (null == uri)
- uri = loc.protocol + "//" + loc.host;
-
- if (typeof uri === "string") {
- if ("/" === uri.charAt(0)) {
- if ("/" === uri.charAt(1)) {
- uri = loc.protocol + uri;
- }
- else {
- uri = loc.host + uri;
- }
- }
- if (!/^(https?|wss?):\/\//.test(uri)) {
- if ("undefined" !== typeof loc) {
- uri = loc.protocol + "//" + uri;
- }
- else {
- uri = "https://" + uri;
- }
- }
-
- obj = parseuri(uri);
- }
-
- if (!obj.port) {
- if (/^(http|ws)$/.test(obj.protocol)) {
- obj.port = "80";
- }
- else if (/^(http|ws)s$/.test(obj.protocol)) {
- obj.port = "443";
- }
- }
- obj.path = obj.path || "/";
- const ipv6 = obj.host.indexOf(":") !== -1;
- const host = ipv6 ? "[" + obj.host + "]" : obj.host;
-
- obj.id = obj.protocol + "://" + host + ":" + obj.port + path;
-
- obj.href =
- obj.protocol +
- "://" +
- host +
- (loc && loc.port === obj.port ? "" : ":" + obj.port);
- return obj;
- }
|