Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/wwwroot/mifepriston.org/node_modules/normalize-url/ |
Upload File : |
'use strict'; var url = require('url'); var punycode = require('punycode'); var queryString = require('query-string'); var prependHttp = require('prepend-http'); var sortKeys = require('sort-keys'); var objectAssign = require('object-assign'); var DEFAULT_PORTS = { 'http:': 80, 'https:': 443, 'ftp:': 21 }; // protocols that always contain a `//`` bit var slashedProtocol = { 'http': true, 'https': true, 'ftp': true, 'gopher': true, 'file': true, 'http:': true, 'https:': true, 'ftp:': true, 'gopher:': true, 'file:': true }; function testParameter(name, filters) { return filters.some(function (filter) { return filter instanceof RegExp ? filter.test(name) : filter === name; }); } module.exports = function (str, opts) { opts = objectAssign({ normalizeProtocol: true, normalizeHttps: false, stripFragment: true, stripWWW: true, removeQueryParameters: [/^utm_\w+/i], removeTrailingSlash: true, removeDirectoryIndex: false }, opts); if (typeof str !== 'string') { throw new TypeError('Expected a string'); } var hasRelativeProtocol = str.indexOf('//') === 0; // prepend protocol str = prependHttp(str.trim()).replace(/^\/\//, 'http://'); var urlObj = url.parse(str); if (opts.normalizeHttps && urlObj.protocol === 'https:') { urlObj.protocol = 'http:'; } if (!urlObj.hostname && !urlObj.pathname) { throw new Error('Invalid URL'); } // prevent these from being used by `url.format` delete urlObj.host; delete urlObj.query; // remove fragment if (opts.stripFragment) { delete urlObj.hash; } // remove default port var port = DEFAULT_PORTS[urlObj.protocol]; if (Number(urlObj.port) === port) { delete urlObj.port; } // remove duplicate slashes if (urlObj.pathname) { urlObj.pathname = urlObj.pathname.replace(/\/{2,}/g, '/'); } // decode URI octets if (urlObj.pathname) { urlObj.pathname = decodeURI(urlObj.pathname); } // remove directory index if (opts.removeDirectoryIndex === true) { opts.removeDirectoryIndex = [/^index\.[a-z]+$/]; } if (Array.isArray(opts.removeDirectoryIndex) && opts.removeDirectoryIndex.length) { var pathComponents = urlObj.pathname.split('/'); var lastComponent = pathComponents[pathComponents.length - 1]; if (testParameter(lastComponent, opts.removeDirectoryIndex)) { pathComponents = pathComponents.slice(0, pathComponents.length - 1); urlObj.pathname = pathComponents.slice(1).join('/') + '/'; } } // resolve relative paths, but only for slashed protocols if (slashedProtocol[urlObj.protocol]) { var domain = urlObj.protocol + '//' + urlObj.hostname; var relative = url.resolve(domain, urlObj.pathname); urlObj.pathname = relative.replace(domain, ''); } if (urlObj.hostname) { // IDN to Unicode urlObj.hostname = punycode.toUnicode(urlObj.hostname).toLowerCase(); // remove trailing dot urlObj.hostname = urlObj.hostname.replace(/\.$/, ''); // remove `www.` if (opts.stripWWW) { urlObj.hostname = urlObj.hostname.replace(/^www\./, ''); } } // remove URL with empty query string if (urlObj.search === '?') { delete urlObj.search; } var queryParameters = queryString.parse(urlObj.search); // remove query unwanted parameters if (Array.isArray(opts.removeQueryParameters)) { for (var key in queryParameters) { if (testParameter(key, opts.removeQueryParameters)) { delete queryParameters[key]; } } } // sort query parameters urlObj.search = queryString.stringify(sortKeys(queryParameters)); // decode query parameters urlObj.search = decodeURIComponent(urlObj.search); // take advantage of many of the Node `url` normalizations str = url.format(urlObj); // remove ending `/` if (opts.removeTrailingSlash || urlObj.pathname === '/') { str = str.replace(/\/$/, ''); } // restore relative protocol, if applicable if (hasRelativeProtocol && !opts.normalizeProtocol) { str = str.replace(/^http:\/\//, '//'); } return str; };