UNPKG

build-scripts

Version:

scripts core

66 lines (65 loc) 2.15 kB
"use strict"; /** * 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, }; };