Spaces:
Sleeping
Sleeping
| /** | |
| * 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 | |
| } | |
| } | |