195 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
"use strict";
 | 
						|
Object.defineProperty(exports, "__esModule", {
 | 
						|
    value: true
 | 
						|
});
 | 
						|
Object.defineProperty(exports, "NextURL", {
 | 
						|
    enumerable: true,
 | 
						|
    get: function() {
 | 
						|
        return NextURL;
 | 
						|
    }
 | 
						|
});
 | 
						|
const _detectdomainlocale = require("../../shared/lib/i18n/detect-domain-locale");
 | 
						|
const _formatnextpathnameinfo = require("../../shared/lib/router/utils/format-next-pathname-info");
 | 
						|
const _gethostname = require("../../shared/lib/get-hostname");
 | 
						|
const _getnextpathnameinfo = require("../../shared/lib/router/utils/get-next-pathname-info");
 | 
						|
const REGEX_LOCALHOST_HOSTNAME = /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)/;
 | 
						|
function parseURL(url, base) {
 | 
						|
    return new URL(String(url).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'), base && String(base).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'));
 | 
						|
}
 | 
						|
const Internal = Symbol('NextURLInternal');
 | 
						|
class NextURL {
 | 
						|
    constructor(input, baseOrOpts, opts){
 | 
						|
        let base;
 | 
						|
        let options;
 | 
						|
        if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') {
 | 
						|
            base = baseOrOpts;
 | 
						|
            options = opts || {};
 | 
						|
        } else {
 | 
						|
            options = opts || baseOrOpts || {};
 | 
						|
        }
 | 
						|
        this[Internal] = {
 | 
						|
            url: parseURL(input, base ?? options.base),
 | 
						|
            options: options,
 | 
						|
            basePath: ''
 | 
						|
        };
 | 
						|
        this.analyze();
 | 
						|
    }
 | 
						|
    analyze() {
 | 
						|
        var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1;
 | 
						|
        const info = (0, _getnextpathnameinfo.getNextPathnameInfo)(this[Internal].url.pathname, {
 | 
						|
            nextConfig: this[Internal].options.nextConfig,
 | 
						|
            parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,
 | 
						|
            i18nProvider: this[Internal].options.i18nProvider
 | 
						|
        });
 | 
						|
        const hostname = (0, _gethostname.getHostname)(this[Internal].url, this[Internal].options.headers);
 | 
						|
        this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, _detectdomainlocale.detectDomainLocale)((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname);
 | 
						|
        const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale);
 | 
						|
        this[Internal].url.pathname = info.pathname;
 | 
						|
        this[Internal].defaultLocale = defaultLocale;
 | 
						|
        this[Internal].basePath = info.basePath ?? '';
 | 
						|
        this[Internal].buildId = info.buildId;
 | 
						|
        this[Internal].locale = info.locale ?? defaultLocale;
 | 
						|
        this[Internal].trailingSlash = info.trailingSlash;
 | 
						|
    }
 | 
						|
    formatPathname() {
 | 
						|
        return (0, _formatnextpathnameinfo.formatNextPathnameInfo)({
 | 
						|
            basePath: this[Internal].basePath,
 | 
						|
            buildId: this[Internal].buildId,
 | 
						|
            defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined,
 | 
						|
            locale: this[Internal].locale,
 | 
						|
            pathname: this[Internal].url.pathname,
 | 
						|
            trailingSlash: this[Internal].trailingSlash
 | 
						|
        });
 | 
						|
    }
 | 
						|
    formatSearch() {
 | 
						|
        return this[Internal].url.search;
 | 
						|
    }
 | 
						|
    get buildId() {
 | 
						|
        return this[Internal].buildId;
 | 
						|
    }
 | 
						|
    set buildId(buildId) {
 | 
						|
        this[Internal].buildId = buildId;
 | 
						|
    }
 | 
						|
    get locale() {
 | 
						|
        return this[Internal].locale ?? '';
 | 
						|
    }
 | 
						|
    set locale(locale) {
 | 
						|
        var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig;
 | 
						|
        if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) {
 | 
						|
            throw Object.defineProperty(new TypeError(`The NextURL configuration includes no locale "${locale}"`), "__NEXT_ERROR_CODE", {
 | 
						|
                value: "E597",
 | 
						|
                enumerable: false,
 | 
						|
                configurable: true
 | 
						|
            });
 | 
						|
        }
 | 
						|
        this[Internal].locale = locale;
 | 
						|
    }
 | 
						|
    get defaultLocale() {
 | 
						|
        return this[Internal].defaultLocale;
 | 
						|
    }
 | 
						|
    get domainLocale() {
 | 
						|
        return this[Internal].domainLocale;
 | 
						|
    }
 | 
						|
    get searchParams() {
 | 
						|
        return this[Internal].url.searchParams;
 | 
						|
    }
 | 
						|
    get host() {
 | 
						|
        return this[Internal].url.host;
 | 
						|
    }
 | 
						|
    set host(value) {
 | 
						|
        this[Internal].url.host = value;
 | 
						|
    }
 | 
						|
    get hostname() {
 | 
						|
        return this[Internal].url.hostname;
 | 
						|
    }
 | 
						|
    set hostname(value) {
 | 
						|
        this[Internal].url.hostname = value;
 | 
						|
    }
 | 
						|
    get port() {
 | 
						|
        return this[Internal].url.port;
 | 
						|
    }
 | 
						|
    set port(value) {
 | 
						|
        this[Internal].url.port = value;
 | 
						|
    }
 | 
						|
    get protocol() {
 | 
						|
        return this[Internal].url.protocol;
 | 
						|
    }
 | 
						|
    set protocol(value) {
 | 
						|
        this[Internal].url.protocol = value;
 | 
						|
    }
 | 
						|
    get href() {
 | 
						|
        const pathname = this.formatPathname();
 | 
						|
        const search = this.formatSearch();
 | 
						|
        return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`;
 | 
						|
    }
 | 
						|
    set href(url) {
 | 
						|
        this[Internal].url = parseURL(url);
 | 
						|
        this.analyze();
 | 
						|
    }
 | 
						|
    get origin() {
 | 
						|
        return this[Internal].url.origin;
 | 
						|
    }
 | 
						|
    get pathname() {
 | 
						|
        return this[Internal].url.pathname;
 | 
						|
    }
 | 
						|
    set pathname(value) {
 | 
						|
        this[Internal].url.pathname = value;
 | 
						|
    }
 | 
						|
    get hash() {
 | 
						|
        return this[Internal].url.hash;
 | 
						|
    }
 | 
						|
    set hash(value) {
 | 
						|
        this[Internal].url.hash = value;
 | 
						|
    }
 | 
						|
    get search() {
 | 
						|
        return this[Internal].url.search;
 | 
						|
    }
 | 
						|
    set search(value) {
 | 
						|
        this[Internal].url.search = value;
 | 
						|
    }
 | 
						|
    get password() {
 | 
						|
        return this[Internal].url.password;
 | 
						|
    }
 | 
						|
    set password(value) {
 | 
						|
        this[Internal].url.password = value;
 | 
						|
    }
 | 
						|
    get username() {
 | 
						|
        return this[Internal].url.username;
 | 
						|
    }
 | 
						|
    set username(value) {
 | 
						|
        this[Internal].url.username = value;
 | 
						|
    }
 | 
						|
    get basePath() {
 | 
						|
        return this[Internal].basePath;
 | 
						|
    }
 | 
						|
    set basePath(value) {
 | 
						|
        this[Internal].basePath = value.startsWith('/') ? value : `/${value}`;
 | 
						|
    }
 | 
						|
    toString() {
 | 
						|
        return this.href;
 | 
						|
    }
 | 
						|
    toJSON() {
 | 
						|
        return this.href;
 | 
						|
    }
 | 
						|
    [Symbol.for('edge-runtime.inspect.custom')]() {
 | 
						|
        return {
 | 
						|
            href: this.href,
 | 
						|
            origin: this.origin,
 | 
						|
            protocol: this.protocol,
 | 
						|
            username: this.username,
 | 
						|
            password: this.password,
 | 
						|
            host: this.host,
 | 
						|
            hostname: this.hostname,
 | 
						|
            port: this.port,
 | 
						|
            pathname: this.pathname,
 | 
						|
            search: this.search,
 | 
						|
            searchParams: this.searchParams,
 | 
						|
            hash: this.hash
 | 
						|
        };
 | 
						|
    }
 | 
						|
    clone() {
 | 
						|
        return new NextURL(String(this), this[Internal].options);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
//# sourceMappingURL=next-url.js.map
 |