UNPKG

svelte

Version:

Cybernetically enhanced web apps

166 lines (136 loc) 3.18 kB
import { source, set } from '../internal/client/reactivity/sources.js'; import { get } from '../internal/client/runtime.js'; import { REPLACE, SvelteURLSearchParams } from './url-search-params.js'; /** @type {SvelteURL | null} */ let current_url = null; export function get_current_url() { // ideally we'd just export `current_url` directly, but it seems Vitest doesn't respect live bindings return current_url; } export class SvelteURL extends URL { #protocol = source(super.protocol); #username = source(super.username); #password = source(super.password); #hostname = source(super.hostname); #port = source(super.port); #pathname = source(super.pathname); #hash = source(super.hash); #search = source(super.search); #searchParams; /** * @param {string | URL} url * @param {string | URL} [base] */ constructor(url, base) { url = new URL(url, base); super(url); current_url = this; this.#searchParams = new SvelteURLSearchParams(url.searchParams); current_url = null; } get hash() { return get(this.#hash); } set hash(value) { super.hash = value; set(this.#hash, super.hash); } get host() { get(this.#hostname); get(this.#port); return super.host; } set host(value) { super.host = value; set(this.#hostname, super.hostname); set(this.#port, super.port); } get hostname() { return get(this.#hostname); } set hostname(value) { super.hostname = value; set(this.#hostname, super.hostname); } get href() { get(this.#protocol); get(this.#username); get(this.#password); get(this.#hostname); get(this.#port); get(this.#pathname); get(this.#hash); get(this.#search); return super.href; } set href(value) { super.href = value; set(this.#protocol, super.protocol); set(this.#username, super.username); set(this.#password, super.password); set(this.#hostname, super.hostname); set(this.#port, super.port); set(this.#pathname, super.pathname); set(this.#hash, super.hash); set(this.#search, super.search); this.#searchParams[REPLACE](super.searchParams); } get password() { return get(this.#password); } set password(value) { super.password = value; set(this.#password, super.password); } get pathname() { return get(this.#pathname); } set pathname(value) { super.pathname = value; set(this.#pathname, super.pathname); } get port() { return get(this.#port); } set port(value) { super.port = value; set(this.#port, super.port); } get protocol() { return get(this.#protocol); } set protocol(value) { super.protocol = value; set(this.#protocol, super.protocol); } get search() { return get(this.#search); } set search(value) { super.search = value; set(this.#search, value); this.#searchParams[REPLACE](super.searchParams); } get username() { return get(this.#username); } set username(value) { super.username = value; set(this.#username, super.username); } get origin() { get(this.#protocol); get(this.#hostname); get(this.#port); return super.origin; } get searchParams() { return this.#searchParams; } toString() { return this.href; } toJSON() { return this.href; } }