You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/** * 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 url = require('url') const { chalk } = require('@vue/cli-shared-utils') const address = require('address') const defaultGateway = require('default-gateway')
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.bold(port), pathname })
const isUnspecifiedHost = host === '0.0.0.0' || host === '::' let prettyHost, lanUrlForConfig let lanUrlForTerminal = chalk.gray('unavailable') if (isUnspecifiedHost) { prettyHost = 'localhost' try { // This can only return an IPv4 address
const result = defaultGateway.v4.sync() lanUrlForConfig = address.ip(result && result.interface) if (lanUrlForConfig) { // Check if the address is a private ip
// https://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces
if ( /^10[.]|^172[.](1[6-9]|2[0-9]|3[0-1])[.]|^192[.]168[.]/.test( lanUrlForConfig ) ) { // 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
} } else { prettyHost = host lanUrlForConfig = host lanUrlForTerminal = prettyPrintUrl(lanUrlForConfig) } const localUrlForTerminal = prettyPrintUrl(prettyHost) const localUrlForBrowser = formatUrl(prettyHost) return { lanUrlForConfig, lanUrlForTerminal, localUrlForTerminal, localUrlForBrowser } }
|