@wordpress/env
Version:
A zero-config, self contained local WordPress environment for development and testing.
42 lines (37 loc) • 1.46 kB
JavaScript
;
/**
* Internal dependencies
*/
const { ValidationError } = require( './validate-config' );
/**
* Adds or replaces the port to the given domain or URI.
*
* @param {string} input The domain or URI to operate on.
* @param {number|string} port The port to append.
* @param {boolean} [replace] Indicates whether or not the port should be replaced if one is already present. Defaults to true.
*
* @return {string} The string with the port added or replaced.
*/
module.exports = function addOrReplacePort( input, port, replace = true ) {
// This matches both domains and URIs with an optional port and anything
// that remains after. We can use this to build an output string that
// adds or replaces the port without making any other changes to the input.
const matches = input.match(
/^((?:.+:\/\/)?[a-z0-9.\-]+)(?::([0-9]+))?(.*)$/i
);
if ( ! matches ) {
throw new ValidationError( `Invalid domain or uri: ${ input }.` );
}
// When a port is already present we will do nothing if the caller doesn't want it to be replaced.
if ( matches[ 2 ] !== undefined && ! replace ) {
return input;
}
// There's never a reason to add the default ports.
// We use == to catch both string and number ports.
// eslint-disable-next-line eqeqeq
if ( port == 80 || port == 443 ) {
return input;
}
// Place the port in the correct location in the input.
return matches[ 1 ] + ':' + port + matches[ 3 ];
};