build-scripts
Version:
scripts core
66 lines (65 loc) • 2.15 kB
JavaScript
;
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file at
* https://github.com/facebookincubator/create-react-app/blob/master/LICENSE
*/
const chalk_1 = require("chalk");
const url = require("url");
const address = require("address");
module.exports = function prepareUrls(protocol, host, port, pathname = '/') {
const formatUrl = (hostname) => url.format({
protocol,
hostname,
port,
pathname,
});
const prettyPrintUrl = (hostname) => url.format({
protocol,
hostname,
port: chalk_1.default.bold(port.toString()),
pathname,
});
const isUnspecifiedHost = host === '0.0.0.0' || host === '::';
let prettyHost;
let lanUrlForConfig;
let lanUrlForTerminal;
let lanUrlForBrowser;
if (isUnspecifiedHost) {
prettyHost = 'localhost';
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);
lanUrlForBrowser = formatUrl(lanUrlForConfig);
}
else {
// Address is not private, so we will discard it
lanUrlForConfig = undefined;
}
}
}
catch (_e) {
// ignored
}
}
else {
prettyHost = host;
}
const localUrlForTerminal = prettyPrintUrl(prettyHost);
const localUrlForBrowser = formatUrl(prettyHost);
return {
lanUrlForConfig,
lanUrlForTerminal,
lanUrlForBrowser,
localUrlForTerminal,
localUrlForBrowser,
};
};