123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627 |
- 'use strict';
- const n = /[^\0-\x7E]/;
- const t = /[\x2E\u3002\uFF0E\uFF61]/g;
- const o = {
- overflow: "Overflow Error",
- "not-basic": "Illegal Input",
- "invalid-input": "Invalid Input"
- };
- const e = Math.floor;
- const r = String.fromCharCode;
- function s(n2) {
- throw new RangeError(o[n2]);
- }
- const c = function(n2, t2) {
- return n2 + 22 + 75 * (n2 < 26) - ((t2 != 0) << 5);
- };
- const u = function(n2, t2, o2) {
- let r2 = 0;
- for (n2 = o2 ? e(n2 / 700) : n2 >> 1, n2 += e(n2 / t2); n2 > 455; r2 += 36) {
- n2 = e(n2 / 35);
- }
- return e(r2 + 36 * n2 / (n2 + 38));
- };
- function toASCII(o2) {
- return function(n2, o3) {
- const e2 = n2.split("@");
- let r2 = "";
- e2.length > 1 && (r2 = e2[0] + "@", n2 = e2[1]);
- const s2 = function(n3, t2) {
- const o4 = [];
- let e3 = n3.length;
- for (; e3--; ) {
- o4[e3] = t2(n3[e3]);
- }
- return o4;
- }((n2 = n2.replace(t, ".")).split("."), o3).join(".");
- return r2 + s2;
- }(o2, function(t2) {
- return n.test(t2) ? "xn--" + function(n2) {
- const t3 = [];
- const o3 = (n2 = function(n3) {
- const t4 = [];
- let o4 = 0;
- const e2 = n3.length;
- for (; o4 < e2; ) {
- const r2 = n3.charCodeAt(o4++);
- if (r2 >= 55296 && r2 <= 56319 && o4 < e2) {
- const e3 = n3.charCodeAt(o4++);
- (64512 & e3) == 56320 ? t4.push(((1023 & r2) << 10) + (1023 & e3) + 65536) : (t4.push(r2), o4--);
- } else {
- t4.push(r2);
- }
- }
- return t4;
- }(n2)).length;
- let f = 128;
- let i = 0;
- let l = 72;
- for (const o4 of n2) {
- o4 < 128 && t3.push(r(o4));
- }
- const h = t3.length;
- let p = h;
- for (h && t3.push("-"); p < o3; ) {
- let o4 = 2147483647;
- for (const t4 of n2) {
- t4 >= f && t4 < o4 && (o4 = t4);
- }
- const a = p + 1;
- o4 - f > e((2147483647 - i) / a) && s("overflow"), i += (o4 - f) * a, f = o4;
- for (const o5 of n2) {
- if (o5 < f && ++i > 2147483647 && s("overflow"), o5 == f) {
- let n3 = i;
- for (let o6 = 36; ; o6 += 36) {
- const s2 = o6 <= l ? 1 : o6 >= l + 26 ? 26 : o6 - l;
- if (n3 < s2) {
- break;
- }
- const u2 = n3 - s2;
- const f2 = 36 - s2;
- t3.push(r(c(s2 + u2 % f2, 0))), n3 = e(u2 / f2);
- }
- t3.push(r(c(n3, 0))), l = u(i, a, p == h), i = 0, ++p;
- }
- }
- ++i, ++f;
- }
- return t3.join("");
- }(t2) : t2;
- });
- }
- const HASH_RE = /#/g;
- const AMPERSAND_RE = /&/g;
- const SLASH_RE = /\//g;
- const EQUAL_RE = /=/g;
- const IM_RE = /\?/g;
- const PLUS_RE = /\+/g;
- const ENC_CARET_RE = /%5e/gi;
- const ENC_BACKTICK_RE = /%60/gi;
- const ENC_CURLY_OPEN_RE = /%7b/gi;
- const ENC_PIPE_RE = /%7c/gi;
- const ENC_CURLY_CLOSE_RE = /%7d/gi;
- const ENC_SPACE_RE = /%20/gi;
- const ENC_SLASH_RE = /%2f/gi;
- const ENC_ENC_SLASH_RE = /%252f/gi;
- function encode(text) {
- return encodeURI("" + text).replace(ENC_PIPE_RE, "|");
- }
- function encodeHash(text) {
- return encode(text).replace(ENC_CURLY_OPEN_RE, "{").replace(ENC_CURLY_CLOSE_RE, "}").replace(ENC_CARET_RE, "^");
- }
- function encodeQueryValue(input) {
- return encode(typeof input === "string" ? input : JSON.stringify(input)).replace(PLUS_RE, "%2B").replace(ENC_SPACE_RE, "+").replace(HASH_RE, "%23").replace(AMPERSAND_RE, "%26").replace(ENC_BACKTICK_RE, "`").replace(ENC_CARET_RE, "^").replace(SLASH_RE, "%2F");
- }
- function encodeQueryKey(text) {
- return encodeQueryValue(text).replace(EQUAL_RE, "%3D");
- }
- function encodePath(text) {
- return encode(text).replace(HASH_RE, "%23").replace(IM_RE, "%3F").replace(ENC_ENC_SLASH_RE, "%2F").replace(AMPERSAND_RE, "%26").replace(PLUS_RE, "%2B");
- }
- function encodeParam(text) {
- return encodePath(text).replace(SLASH_RE, "%2F");
- }
- function decode(text = "") {
- try {
- return decodeURIComponent("" + text);
- } catch {
- return "" + text;
- }
- }
- function decodePath(text) {
- return decode(text.replace(ENC_SLASH_RE, "%252F"));
- }
- function decodeQueryKey(text) {
- return decode(text.replace(PLUS_RE, " "));
- }
- function decodeQueryValue(text) {
- return decode(text.replace(PLUS_RE, " "));
- }
- function encodeHost(name = "") {
- return toASCII(name);
- }
- function parseQuery(parametersString = "") {
- const object = {};
- if (parametersString[0] === "?") {
- parametersString = parametersString.slice(1);
- }
- for (const parameter of parametersString.split("&")) {
- const s = parameter.match(/([^=]+)=?(.*)/) || [];
- if (s.length < 2) {
- continue;
- }
- const key = decodeQueryKey(s[1]);
- if (key === "__proto__" || key === "constructor") {
- continue;
- }
- const value = decodeQueryValue(s[2] || "");
- if (object[key] === void 0) {
- object[key] = value;
- } else if (Array.isArray(object[key])) {
- object[key].push(value);
- } else {
- object[key] = [object[key], value];
- }
- }
- return object;
- }
- function encodeQueryItem(key, value) {
- if (typeof value === "number" || typeof value === "boolean") {
- value = String(value);
- }
- if (!value) {
- return encodeQueryKey(key);
- }
- if (Array.isArray(value)) {
- return value.map((_value) => `${encodeQueryKey(key)}=${encodeQueryValue(_value)}`).join("&");
- }
- return `${encodeQueryKey(key)}=${encodeQueryValue(value)}`;
- }
- function stringifyQuery(query) {
- return Object.keys(query).filter((k) => query[k] !== void 0).map((k) => encodeQueryItem(k, query[k])).filter(Boolean).join("&");
- }
- const PROTOCOL_STRICT_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{1,2})/;
- const PROTOCOL_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{2})?/;
- const PROTOCOL_RELATIVE_REGEX = /^([/\\]\s*){2,}[^/\\]/;
- const PROTOCOL_SCRIPT_RE = /^[\s\0]*(blob|data|javascript|vbscript):$/i;
- const TRAILING_SLASH_RE = /\/$|\/\?|\/#/;
- const JOIN_LEADING_SLASH_RE = /^\.?\//;
- function isRelative(inputString) {
- return ["./", "../"].some((string_) => inputString.startsWith(string_));
- }
- function hasProtocol(inputString, opts = {}) {
- if (typeof opts === "boolean") {
- opts = { acceptRelative: opts };
- }
- if (opts.strict) {
- return PROTOCOL_STRICT_REGEX.test(inputString);
- }
- return PROTOCOL_REGEX.test(inputString) || (opts.acceptRelative ? PROTOCOL_RELATIVE_REGEX.test(inputString) : false);
- }
- function isScriptProtocol(protocol) {
- return !!protocol && PROTOCOL_SCRIPT_RE.test(protocol);
- }
- function hasTrailingSlash(input = "", respectQueryAndFragment) {
- if (!respectQueryAndFragment) {
- return input.endsWith("/");
- }
- return TRAILING_SLASH_RE.test(input);
- }
- function withoutTrailingSlash(input = "", respectQueryAndFragment) {
- if (!respectQueryAndFragment) {
- return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || "/";
- }
- if (!hasTrailingSlash(input, true)) {
- return input || "/";
- }
- let path = input;
- let fragment = "";
- const fragmentIndex = input.indexOf("#");
- if (fragmentIndex >= 0) {
- path = input.slice(0, fragmentIndex);
- fragment = input.slice(fragmentIndex);
- }
- const [s0, ...s] = path.split("?");
- return (s0.slice(0, -1) || "/") + (s.length > 0 ? `?${s.join("?")}` : "") + fragment;
- }
- function withTrailingSlash(input = "", respectQueryAndFragment) {
- if (!respectQueryAndFragment) {
- return input.endsWith("/") ? input : input + "/";
- }
- if (hasTrailingSlash(input, true)) {
- return input || "/";
- }
- let path = input;
- let fragment = "";
- const fragmentIndex = input.indexOf("#");
- if (fragmentIndex >= 0) {
- path = input.slice(0, fragmentIndex);
- fragment = input.slice(fragmentIndex);
- if (!path) {
- return fragment;
- }
- }
- const [s0, ...s] = path.split("?");
- return s0 + "/" + (s.length > 0 ? `?${s.join("?")}` : "") + fragment;
- }
- function hasLeadingSlash(input = "") {
- return input.startsWith("/");
- }
- function withoutLeadingSlash(input = "") {
- return (hasLeadingSlash(input) ? input.slice(1) : input) || "/";
- }
- function withLeadingSlash(input = "") {
- return hasLeadingSlash(input) ? input : "/" + input;
- }
- function cleanDoubleSlashes(input = "") {
- return input.split("://").map((string_) => string_.replace(/\/{2,}/g, "/")).join("://");
- }
- function withBase(input, base) {
- if (isEmptyURL(base) || hasProtocol(input)) {
- return input;
- }
- const _base = withoutTrailingSlash(base);
- if (input.startsWith(_base)) {
- return input;
- }
- return joinURL(_base, input);
- }
- function withoutBase(input, base) {
- if (isEmptyURL(base)) {
- return input;
- }
- const _base = withoutTrailingSlash(base);
- if (!input.startsWith(_base)) {
- return input;
- }
- const trimmed = input.slice(_base.length);
- return trimmed[0] === "/" ? trimmed : "/" + trimmed;
- }
- function withQuery(input, query) {
- const parsed = parseURL(input);
- const mergedQuery = { ...parseQuery(parsed.search), ...query };
- parsed.search = stringifyQuery(mergedQuery);
- return stringifyParsedURL(parsed);
- }
- function getQuery(input) {
- return parseQuery(parseURL(input).search);
- }
- function isEmptyURL(url) {
- return !url || url === "/";
- }
- function isNonEmptyURL(url) {
- return url && url !== "/";
- }
- function joinURL(base, ...input) {
- let url = base || "";
- for (const segment of input.filter((url2) => isNonEmptyURL(url2))) {
- if (url) {
- const _segment = segment.replace(JOIN_LEADING_SLASH_RE, "");
- url = withTrailingSlash(url) + _segment;
- } else {
- url = segment;
- }
- }
- return url;
- }
- function withHttp(input) {
- return withProtocol(input, "http://");
- }
- function withHttps(input) {
- return withProtocol(input, "https://");
- }
- function withoutProtocol(input) {
- return withProtocol(input, "");
- }
- function withProtocol(input, protocol) {
- const match = input.match(PROTOCOL_REGEX);
- if (!match) {
- return protocol + input;
- }
- return protocol + input.slice(match[0].length);
- }
- function normalizeURL(input) {
- const parsed = parseURL(input);
- parsed.pathname = encodePath(decodePath(parsed.pathname));
- parsed.hash = encodeHash(decode(parsed.hash));
- parsed.host = encodeHost(decode(parsed.host));
- parsed.search = stringifyQuery(parseQuery(parsed.search));
- return stringifyParsedURL(parsed);
- }
- function resolveURL(base = "", ...inputs) {
- if (typeof base !== "string") {
- throw new TypeError(
- `URL input should be string received ${typeof base} (${base})`
- );
- }
- const filteredInputs = inputs.filter((input) => isNonEmptyURL(input));
- if (filteredInputs.length === 0) {
- return base;
- }
- const url = parseURL(base);
- for (const inputSegment of filteredInputs) {
- const urlSegment = parseURL(inputSegment);
- if (urlSegment.pathname) {
- url.pathname = withTrailingSlash(url.pathname) + withoutLeadingSlash(urlSegment.pathname);
- }
- if (urlSegment.hash && urlSegment.hash !== "#") {
- url.hash = urlSegment.hash;
- }
- if (urlSegment.search && urlSegment.search !== "?") {
- if (url.search && url.search !== "?") {
- const queryString = stringifyQuery({
- ...parseQuery(url.search),
- ...parseQuery(urlSegment.search)
- });
- url.search = queryString.length > 0 ? "?" + queryString : "";
- } else {
- url.search = urlSegment.search;
- }
- }
- }
- return stringifyParsedURL(url);
- }
- function isSamePath(p1, p2) {
- return decode(withoutTrailingSlash(p1)) === decode(withoutTrailingSlash(p2));
- }
- function isEqual(a, b, options = {}) {
- if (!options.trailingSlash) {
- a = withTrailingSlash(a);
- b = withTrailingSlash(b);
- }
- if (!options.leadingSlash) {
- a = withLeadingSlash(a);
- b = withLeadingSlash(b);
- }
- if (!options.encoding) {
- a = decode(a);
- b = decode(b);
- }
- return a === b;
- }
- function withFragment(input, hash) {
- if (!hash || hash === "#") {
- return input;
- }
- const parsed = parseURL(input);
- parsed.hash = hash === "" ? "" : "#" + encodeHash(hash);
- return stringifyParsedURL(parsed);
- }
- function withoutFragment(input) {
- return stringifyParsedURL({ ...parseURL(input), hash: "" });
- }
- const protocolRelative = Symbol.for("ufo:protocolRelative");
- function parseURL(input = "", defaultProto) {
- const _specialProtoMatch = input.match(
- /^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i
- );
- if (_specialProtoMatch) {
- const [, _proto, _pathname = ""] = _specialProtoMatch;
- return {
- protocol: _proto.toLowerCase(),
- pathname: _pathname,
- href: _proto + _pathname,
- auth: "",
- host: "",
- search: "",
- hash: ""
- };
- }
- if (!hasProtocol(input, { acceptRelative: true })) {
- return defaultProto ? parseURL(defaultProto + input) : parsePath(input);
- }
- const [, protocol = "", auth, hostAndPath = ""] = input.replace(/\\/g, "/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/) || [];
- const [, host = "", path = ""] = hostAndPath.match(/([^#/?]*)(.*)?/) || [];
- const { pathname, search, hash } = parsePath(
- path.replace(/\/(?=[A-Za-z]:)/, "")
- );
- return {
- protocol: protocol.toLowerCase(),
- auth: auth ? auth.slice(0, Math.max(0, auth.length - 1)) : "",
- host,
- pathname,
- search,
- hash,
- [protocolRelative]: !protocol
- };
- }
- function parsePath(input = "") {
- const [pathname = "", search = "", hash = ""] = (input.match(/([^#?]*)(\?[^#]*)?(#.*)?/) || []).splice(1);
- return {
- pathname,
- search,
- hash
- };
- }
- function parseAuth(input = "") {
- const [username, password] = input.split(":");
- return {
- username: decode(username),
- password: decode(password)
- };
- }
- function parseHost(input = "") {
- const [hostname, port] = (input.match(/([^/:]*):?(\d+)?/) || []).splice(1);
- return {
- hostname: decode(hostname),
- port
- };
- }
- function stringifyParsedURL(parsed) {
- const pathname = parsed.pathname || "";
- const search = parsed.search ? (parsed.search.startsWith("?") ? "" : "?") + parsed.search : "";
- const hash = parsed.hash || "";
- const auth = parsed.auth ? parsed.auth + "@" : "";
- const host = parsed.host || "";
- const proto = parsed.protocol || parsed[protocolRelative] ? (parsed.protocol || "") + "//" : "";
- return proto + auth + host + pathname + search + hash;
- }
- const FILENAME_STRICT_REGEX = /\/([^/]+\.[^/]+)$/;
- const FILENAME_REGEX = /\/([^/]+)$/;
- function parseFilename(input = "", { strict }) {
- const { pathname } = parseURL(input);
- const matches = strict ? pathname.match(FILENAME_STRICT_REGEX) : pathname.match(FILENAME_REGEX);
- return matches ? matches[1] : void 0;
- }
- var __defProp = Object.defineProperty;
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
- var __publicField = (obj, key, value) => {
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
- return value;
- };
- class $URL {
- constructor(input = "") {
- __publicField(this, "protocol");
- __publicField(this, "host");
- __publicField(this, "auth");
- __publicField(this, "pathname");
- __publicField(this, "query", {});
- __publicField(this, "hash");
- if (typeof input !== "string") {
- throw new TypeError(
- `URL input should be string received ${typeof input} (${input})`
- );
- }
- const parsed = parseURL(input);
- this.protocol = decode(parsed.protocol);
- this.host = decode(parsed.host);
- this.auth = decode(parsed.auth);
- this.pathname = decodePath(parsed.pathname);
- this.query = parseQuery(parsed.search);
- this.hash = decode(parsed.hash);
- }
- get hostname() {
- return parseHost(this.host).hostname;
- }
- get port() {
- return parseHost(this.host).port || "";
- }
- get username() {
- return parseAuth(this.auth).username;
- }
- get password() {
- return parseAuth(this.auth).password || "";
- }
- get hasProtocol() {
- return this.protocol.length;
- }
- get isAbsolute() {
- return this.hasProtocol || this.pathname[0] === "/";
- }
- get search() {
- const q = stringifyQuery(this.query);
- return q.length > 0 ? "?" + q : "";
- }
- get searchParams() {
- const p = new URLSearchParams();
- for (const name in this.query) {
- const value = this.query[name];
- if (Array.isArray(value)) {
- for (const v of value) {
- p.append(name, v);
- }
- } else {
- p.append(
- name,
- typeof value === "string" ? value : JSON.stringify(value)
- );
- }
- }
- return p;
- }
- get origin() {
- return (this.protocol ? this.protocol + "//" : "") + encodeHost(this.host);
- }
- get fullpath() {
- return encodePath(this.pathname) + this.search + encodeHash(this.hash);
- }
- get encodedAuth() {
- if (!this.auth) {
- return "";
- }
- const { username, password } = parseAuth(this.auth);
- return encodeURIComponent(username) + (password ? ":" + encodeURIComponent(password) : "");
- }
- get href() {
- const auth = this.encodedAuth;
- const originWithAuth = (this.protocol ? this.protocol + "//" : "") + (auth ? auth + "@" : "") + encodeHost(this.host);
- return this.hasProtocol && this.isAbsolute ? originWithAuth + this.fullpath : this.fullpath;
- }
- append(url) {
- if (url.hasProtocol) {
- throw new Error("Cannot append a URL with protocol");
- }
- Object.assign(this.query, url.query);
- if (url.pathname) {
- this.pathname = withTrailingSlash(this.pathname) + withoutLeadingSlash(url.pathname);
- }
- if (url.hash) {
- this.hash = url.hash;
- }
- }
- toJSON() {
- return this.href;
- }
- toString() {
- return this.href;
- }
- }
- function createURL(input) {
- return new $URL(input);
- }
- exports.$URL = $URL;
- exports.cleanDoubleSlashes = cleanDoubleSlashes;
- exports.createURL = createURL;
- exports.decode = decode;
- exports.decodePath = decodePath;
- exports.decodeQueryKey = decodeQueryKey;
- exports.decodeQueryValue = decodeQueryValue;
- exports.encode = encode;
- exports.encodeHash = encodeHash;
- exports.encodeHost = encodeHost;
- exports.encodeParam = encodeParam;
- exports.encodePath = encodePath;
- exports.encodeQueryItem = encodeQueryItem;
- exports.encodeQueryKey = encodeQueryKey;
- exports.encodeQueryValue = encodeQueryValue;
- exports.getQuery = getQuery;
- exports.hasLeadingSlash = hasLeadingSlash;
- exports.hasProtocol = hasProtocol;
- exports.hasTrailingSlash = hasTrailingSlash;
- exports.isEmptyURL = isEmptyURL;
- exports.isEqual = isEqual;
- exports.isNonEmptyURL = isNonEmptyURL;
- exports.isRelative = isRelative;
- exports.isSamePath = isSamePath;
- exports.isScriptProtocol = isScriptProtocol;
- exports.joinURL = joinURL;
- exports.normalizeURL = normalizeURL;
- exports.parseAuth = parseAuth;
- exports.parseFilename = parseFilename;
- exports.parseHost = parseHost;
- exports.parsePath = parsePath;
- exports.parseQuery = parseQuery;
- exports.parseURL = parseURL;
- exports.resolveURL = resolveURL;
- exports.stringifyParsedURL = stringifyParsedURL;
- exports.stringifyQuery = stringifyQuery;
- exports.withBase = withBase;
- exports.withFragment = withFragment;
- exports.withHttp = withHttp;
- exports.withHttps = withHttps;
- exports.withLeadingSlash = withLeadingSlash;
- exports.withProtocol = withProtocol;
- exports.withQuery = withQuery;
- exports.withTrailingSlash = withTrailingSlash;
- exports.withoutBase = withoutBase;
- exports.withoutFragment = withoutFragment;
- exports.withoutLeadingSlash = withoutLeadingSlash;
- exports.withoutProtocol = withoutProtocol;
- exports.withoutTrailingSlash = withoutTrailingSlash;
|