1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import { parse } from "engine.io-client";
- /**
- * URL parser.
- *
- * @param uri - url
- * @param path - the request path of the connection
- * @param loc - An object meant to mimic window.location.
- * Defaults to window.location.
- * @public
- */
- export function url(uri, path = "", loc) {
- let obj = uri;
- // default to window.location
- loc = loc || (typeof location !== "undefined" && location);
- if (null == uri)
- uri = loc.protocol + "//" + loc.host;
- // relative path support
- 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;
- }
- }
- // parse
- obj = parse(uri);
- }
- // make sure we treat `localhost:80` and `localhost` equally
- 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;
- // define unique id
- obj.id = obj.protocol + "://" + host + ":" + obj.port + path;
- // define href
- obj.href =
- obj.protocol +
- "://" +
- host +
- (loc && loc.port === obj.port ? "" : ":" + obj.port);
- return obj;
- }
|