in packages/ice/src/utils/prepareURLs.ts [14:76]
export default function prepareUrls(
protocol: string,
host: string,
port: number,
pathname: string,
enabledHashRouter: boolean,
): Urls {
const formatUrl = (hostname: string): string => {
const url = new URL(`${protocol}://${hostname}:${port}`);
url.pathname = enabledHashRouter ? '' : pathname;
url.hash = enabledHashRouter ? `${pathname || '/'}` : '';
return url.href;
};
const prettyPrintUrl = (hostname: string): string => {
const url = new URL(`${protocol}://${hostname}:${port}`);
url.pathname = enabledHashRouter ? '' : pathname;
url.hash = enabledHashRouter ? `${pathname || '/'}` : '';
return url.href;
};
const isUnspecifiedHost = host === '0.0.0.0' || host === '::';
let prettyHost: string;
let lanUrlForConfig: any;
let lanUrlForTerminal: string;
if (isUnspecifiedHost) {
prettyHost = 'localhost';
} else {
prettyHost = host;
}
try {
// This can only return an IPv4 address
lanUrlForConfig = address.ip();
if (lanUrlForConfig) {
// Check if the address is a private ip
// https://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces
if (
/^10[.]|^30[.]|^172[.](1[6-9]|2[0-9]|3[0-1])[.]|^192[.]168[.]/.test(
lanUrlForConfig,
) ||
process.env.USE_PUBLIC_IP
) {
// Address is private, format it for later use
lanUrlForTerminal = prettyPrintUrl(lanUrlForConfig);
} else {
// Address is not private, so we will discard it
lanUrlForConfig = undefined;
}
}
} catch (_e) {
// ignored
}
const localUrlForTerminal = prettyPrintUrl(prettyHost);
const localUrlForBrowser = formatUrl(prettyHost);
return {
lanUrlForConfig,
lanUrlForTerminal,
localUrlForTerminal,
localUrlForBrowser,
};
}