PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
← All changes | build/modules/abilities/index.js +866 -403 23.3.2 → 24.1.0 View file →
@@ -3111,266 +3111,504 @@
3111 3111 };
3112 3112 }
3113 3113 });
3114 3114
3115 -// node_modules/fast-uri/lib/scopedChars.js
3116 -var require_scopedChars = __commonJS({
3117 - "node_modules/fast-uri/lib/scopedChars.js"(exports, module) {
3118 - "use strict";
3119 - var HEX = {
3120 - 0: 0,
3121 - 1: 1,
3122 - 2: 2,
3123 - 3: 3,
3124 - 4: 4,
3125 - 5: 5,
3126 - 6: 6,
3127 - 7: 7,
3128 - 8: 8,
3129 - 9: 9,
3130 - a: 10,
3131 - A: 10,
3132 - b: 11,
3133 - B: 11,
3134 - c: 12,
3135 - C: 12,
3136 - d: 13,
3137 - D: 13,
3138 - e: 14,
3139 - E: 14,
3140 - f: 15,
3141 - F: 15
3142 - };
3143 - module.exports = {
3144 - HEX
3145 - };
3146 - }
3147 -});
3148 -
3149 3115 // node_modules/fast-uri/lib/utils.js
3150 3116 var require_utils = __commonJS({
3151 3117 "node_modules/fast-uri/lib/utils.js"(exports, module) {
3152 3118 "use strict";
3153 - var { HEX } = require_scopedChars();
3154 - function normalizeIPv4(host) {
3155 - if (findToken(host, ".") < 3) {
3156 - return { host, isIPV4: false };
3119 + var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);
3120 + var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
3121 + var isPort = RegExp.prototype.test.bind(/^\d*$/u);
3122 + var isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);
3123 + var isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);
3124 + var isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u);
3125 + var isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u);
3126 + var isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u);
3127 + var BYTE_HEX = new Array(256);
3128 + {
3129 + const HEX_DIGITS = "0123456789ABCDEF";
3130 + for (let i = 0; i < 256; i++) {
3131 + BYTE_HEX[i] = "%" + HEX_DIGITS[i >> 4] + HEX_DIGITS[i & 15];
3157 3132 }
3158 - const matches = host.match(/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/u) || [];
3159 - const [address] = matches;
3160 - if (address) {
3161 - return { host: stripLeadingZeros(address, "."), isIPV4: true };
3162 - } else {
3163 - return { host, isIPV4: false };
3133 + }
3134 + function percentEncodeNonAscii(cp) {
3135 + if (cp < 2048) {
3136 + return BYTE_HEX[192 | cp >> 6] + BYTE_HEX[128 | cp & 63];
3164 3137 }
3138 + if (cp < 65536) {
3139 + return BYTE_HEX[224 | cp >> 12] + BYTE_HEX[128 | cp >> 6 & 63] + BYTE_HEX[128 | cp & 63];
3140 + }
3141 + return BYTE_HEX[240 | cp >> 18] + BYTE_HEX[128 | cp >> 12 & 63] + BYTE_HEX[128 | cp >> 6 & 63] + BYTE_HEX[128 | cp & 63];
3165 3142 }
3166 - function stringArrayToHexStripped(input, keepZero = false) {
3143 + function stringArrayToHexStripped(input) {
3167 3144 let acc = "";
3168 - let strip = true;
3169 - for (const c of input) {
3170 - if (HEX[c] === void 0) return void 0;
3171 - if (c !== "0" && strip === true) strip = false;
3172 - if (!strip) acc += c;
3145 + let code = 0;
3146 + let i = 0;
3147 + for (i = 0; i < input.length; i++) {
3148 + code = input[i].charCodeAt(0);
3149 + if (code === 48) {
3150 + continue;
3151 + }
3152 + if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) {
3153 + return "";
3154 + }
3155 + acc += input[i];
3156 + break;
3173 3157 }
3174 - if (keepZero && acc.length === 0) acc = "0";
3158 + for (i += 1; i < input.length; i++) {
3159 + code = input[i].charCodeAt(0);
3160 + if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) {
3161 + return "";
3162 + }
3163 + acc += input[i];
3164 + }
3175 3165 return acc;
3176 3166 }
3177 - function getIPV6(input) {
3178 - let tokenCount = 0;
3179 - const output = { error: false, address: "", zone: "" };
3180 - const address = [];
3181 - const buffer = [];
3182 - let isZone = false;
3183 - let endipv6Encountered = false;
3184 - let endIpv6 = false;
3185 - function consume() {
3186 - if (buffer.length) {
3187 - if (isZone === false) {
3188 - const hex = stringArrayToHexStripped(buffer);
3189 - if (hex !== void 0) {
3190 - address.push(hex);
3191 - } else {
3192 - output.error = true;
3193 - return false;
3194 - }
3167 + var isHextet = RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/);
3168 + var isIPvFuture = RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/);
3169 + var isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/);
3170 + var nonSimpleDomain = RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);
3171 + function isZoneIdentifier(zone) {
3172 + if (zone.length === 0) return false;
3173 + for (let i = 0; i < zone.length; i++) {
3174 + if (isZoneCharacter(zone[i])) continue;
3175 + if (zone[i] === "%" && i + 2 < zone.length && isHexPair(zone.slice(i + 1, i + 3))) {
3176 + i += 2;
3177 + continue;
3178 + }
3179 + return false;
3180 + }
3181 + return true;
3182 + }
3183 + function compressIPv6ZeroRun(hextets) {
3184 + let bestStart = -1;
3185 + let bestLength = 0;
3186 + let runStart = -1;
3187 + let runLength = 0;
3188 + for (let i = 0; i < hextets.length; i++) {
3189 + if (hextets[i] === "0") {
3190 + if (runStart === -1) runStart = i;
3191 + runLength++;
3192 + if (runLength > bestLength) {
3193 + bestLength = runLength;
3194 + bestStart = runStart;
3195 3195 }
3196 - buffer.length = 0;
3196 + } else {
3197 + runStart = -1;
3198 + runLength = 0;
3197 3199 }
3198 - return true;
3199 3200 }
3200 - for (let i = 0; i < input.length; i++) {
3201 - const cursor = input[i];
3202 - if (cursor === "[" || cursor === "]") {
3201 + if (bestLength < 2) return hextets.join(":");
3202 + const head = hextets.slice(0, bestStart).join(":");
3203 + const tail = hextets.slice(bestStart + bestLength).join(":");
3204 + return head + "::" + tail;
3205 + }
3206 + function normalizeIPv6Address(input) {
3207 + const compression = input.indexOf("::");
3208 + if (compression !== -1 && input.indexOf("::", compression + 1) !== -1) return void 0;
3209 + const left = compression === -1 ? input.split(":") : input.slice(0, compression).split(":");
3210 + const right = compression === -1 ? [] : input.slice(compression + 2).split(":");
3211 + if (compression !== -1) {
3212 + if (left.length === 1 && left[0] === "") left.length = 0;
3213 + if (right.length === 1 && right[0] === "") right.length = 0;
3214 + }
3215 + const parts = left.concat(right);
3216 + let hextetCount = 0;
3217 + for (let i = 0; i < parts.length; i++) {
3218 + const part = parts[i];
3219 + if (part === "") return void 0;
3220 + if (part.indexOf(".") !== -1) {
3221 + if (i !== parts.length - 1 || compression !== -1 && right.length === 0 || !isIPv4(part)) return void 0;
3222 + hextetCount += 2;
3203 3223 continue;
3204 3224 }
3205 - if (cursor === ":") {
3206 - if (endipv6Encountered === true) {
3207 - endIpv6 = true;
3225 + if (!isHextet(part)) return void 0;
3226 + parts[i] = parseInt(part, 16).toString(16);
3227 + hextetCount++;
3228 + }
3229 + if (compression === -1) {
3230 + if (hextetCount !== 8) return void 0;
3231 + return compressIPv6ZeroRun(parts);
3232 + }
3233 + if (hextetCount >= 8) return void 0;
3234 + const expanded = parts.slice(0, left.length);
3235 + for (let i = hextetCount; i < 8; i++) expanded.push("0");
3236 + for (let i = left.length; i < parts.length; i++) expanded.push(parts[i]);
3237 + return compressIPv6ZeroRun(expanded);
3238 + }
3239 + function normalizeIPv6(host) {
3240 + const bracketed = host[0] === "[" && host[host.length - 1] === "]";
3241 + const hasBracket = host[0] === "[" || host[host.length - 1] === "]";
3242 + if (hasBracket && !bracketed) return { host, isIPV6: false, error: true };
3243 + let input = bracketed ? host.slice(1, -1) : host;
3244 + if (bracketed && isIPvFuture(input)) {
3245 + input = input.toLowerCase();
3246 + return { host: `[${input}]`, escapedHost: input, isIPV6: false, isIPVFuture: true };
3247 + }
3248 + if (findToken(input, ":") < 2) {
3249 + return { host, isIPV6: false, error: bracketed };
3250 + }
3251 + let zoneIdentifier = "";
3252 + const zoneSeparator = input.indexOf("%");
3253 + if (zoneSeparator !== -1) {
3254 + const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === "%25" ? 3 : 1;
3255 + zoneIdentifier = input.slice(zoneSeparator + separatorLength);
3256 + if (!isZoneIdentifier(zoneIdentifier)) return { host, isIPV6: false, error: true };
3257 + input = input.slice(0, zoneSeparator);
3258 + }
3259 + const address = normalizeIPv6Address(input);
3260 + if (address === void 0) return { host, isIPV6: false, error: true };
3261 + return {
3262 + host: address + (zoneIdentifier ? "%" + zoneIdentifier : ""),
3263 + escapedHost: address + (zoneIdentifier ? "%25" + zoneIdentifier : ""),
3264 + isIPV6: true
3265 + };
3266 + }
3267 + function findToken(str, token) {
3268 + let ind = 0;
3269 + for (let i = 0; i < str.length; i++) {
3270 + if (str[i] === token) ind++;
3271 + }
3272 + return ind;
3273 + }
3274 + function removeDotSegments(path) {
3275 + let input = path;
3276 + const output = [];
3277 + let nextSlash = -1;
3278 + let len = 0;
3279 + while (len = input.length) {
3280 + if (len === 1) {
3281 + if (input === ".") {
3282 + break;
3283 + } else if (input === "/") {
3284 + output.push("/");
3285 + break;
3286 + } else {
3287 + output.push(input);
3288 + break;
3208 3289 }
3209 - if (!consume()) {
3210 - break;
3290 + } else if (len === 2) {
3291 + if (input[0] === ".") {
3292 + if (input[1] === ".") {
3293 + break;
3294 + } else if (input[1] === "/") {
3295 + input = input.slice(2);
3296 + continue;
3297 + }
3298 + } else if (input[0] === "/") {
3299 + if (input[1] === "." || input[1] === "/") {
3300 + output.push("/");
3301 + break;
3302 + }
3211 3303 }
3212 - tokenCount++;
3213 - address.push(":");
3214 - if (tokenCount > 7) {
3215 - output.error = true;
3304 + } else if (len === 3) {
3305 + if (input === "/..") {
3306 + if (output.length !== 0) {
3307 + output.pop();
3308 + }
3309 + output.push("/");
3216 3310 break;
3217 3311 }
3218 - if (i - 1 >= 0 && input[i - 1] === ":") {
3219 - endipv6Encountered = true;
3312 + }
3313 + if (input[0] === ".") {
3314 + if (input[1] === ".") {
3315 + if (input[2] === "/") {
3316 + input = input.slice(3);
3317 + continue;
3318 + }
3319 + } else if (input[1] === "/") {
3320 + input = input.slice(2);
3321 + continue;
3220 3322 }
3221 - continue;
3222 - } else if (cursor === "%") {
3223 - if (!consume()) {
3224 - break;
3323 + } else if (input[0] === "/") {
3324 + if (input[1] === ".") {
3325 + if (input[2] === "/") {
3326 + input = input.slice(2);
3327 + continue;
3328 + } else if (input[2] === ".") {
3329 + if (input[3] === "/") {
3330 + input = input.slice(3);
3331 + if (output.length !== 0) {
3332 + output.pop();
3333 + }
3334 + continue;
3335 + }
3336 + }
3225 3337 }
3226 - isZone = true;
3338 + }
3339 + if ((nextSlash = input.indexOf("/", 1)) === -1) {
3340 + output.push(input);
3341 + break;
3227 3342 } else {
3228 - buffer.push(cursor);
3229 - continue;
3343 + output.push(input.slice(0, nextSlash));
3344 + input = input.slice(nextSlash);
3230 3345 }
3231 3346 }
3232 - if (buffer.length) {
3233 - if (isZone) {
3234 - output.zone = buffer.join("");
3235 - } else if (endIpv6) {
3236 - address.push(buffer.join(""));
3347 + return output.join("");
3348 + }
3349 + var HOST_DELIMS = { "@": "%40", "/": "%2F", "?": "%3F", "#": "%23", ":": "%3A" };
3350 + var HOST_DELIM_RE = /[@/?#:]/g;
3351 + var HOST_DELIM_NO_COLON_RE = /[@/?#]/g;
3352 + function reescapeHostDelimiters(host, isIP) {
3353 + const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE;
3354 + re.lastIndex = 0;
3355 + return host.replace(re, (ch) => HOST_DELIMS[ch]);
3356 + }
3357 + function normalizePercentEncoding(input, decodeUnreserved = false) {
3358 + if (input.indexOf("%") === -1) {
3359 + return input;
3360 + }
3361 + let output = "";
3362 + for (let i = 0; i < input.length; i++) {
3363 + if (input[i] === "%" && i + 2 < input.length) {
3364 + const hex = input.slice(i + 1, i + 3);
3365 + if (isHexPair(hex)) {
3366 + const normalizedHex = hex.toUpperCase();
3367 + const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
3368 + if (decodeUnreserved && isUnreserved(decoded)) {
3369 + output += decoded;
3370 + } else {
3371 + output += "%" + normalizedHex;
3372 + }
3373 + i += 2;
3374 + continue;
3375 + }
3376 + }
3377 + output += input[i];
3378 + }
3379 + return output;
3380 + }
3381 + function normalizePathEncoding(input) {
3382 + let output = "";
3383 + for (let i = 0; i < input.length; i++) {
3384 + const ch = input[i];
3385 + if (ch === "%" && i + 2 < input.length) {
3386 + const hex = input.slice(i + 1, i + 3);
3387 + if (isHexPair(hex)) {
3388 + const normalizedHex = hex.toUpperCase();
3389 + const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
3390 + if (decoded !== "." && isUnreserved(decoded)) {
3391 + output += decoded;
3392 + } else {
3393 + output += "%" + normalizedHex;
3394 + }
3395 + i += 2;
3396 + continue;
3397 + }
3398 + }
3399 + if (isPathCharacter(ch)) {
3400 + output += ch;
3237 3401 } else {
3238 - address.push(stringArrayToHexStripped(buffer));
3402 + const code = input.charCodeAt(i);
3403 + if (code < 128) {
3404 + output += isEscapeSafe(code) ? ch : BYTE_HEX[code];
3405 + } else if (code < 55296 || code > 57343) {
3406 + output += percentEncodeNonAscii(code);
3407 + } else if (code <= 56319 && i + 1 < input.length) {
3408 + const low = input.charCodeAt(i + 1);
3409 + if (low >= 56320 && low <= 57343) {
3410 + output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
3411 + i++;
3412 + } else {
3413 + output += percentEncodeNonAscii(65533);
3414 + }
3415 + } else {
3416 + output += percentEncodeNonAscii(65533);
3417 + }
3239 3418 }
3240 3419 }
3241 - output.address = address.join("");
3242 3420 return output;
3243 3421 }
3244 - function normalizeIPv6(host, opts = {}) {
3245 - if (findToken(host, ":") < 2) {
3246 - return { host, isIPV6: false };
3247 - }
3248 - const ipv6 = getIPV6(host);
3249 - if (!ipv6.error) {
3250 - let newHost = ipv6.address;
3251 - let escapedHost = ipv6.address;
3252 - if (ipv6.zone) {
3253 - newHost += "%" + ipv6.zone;
3254 - escapedHost += "%25" + ipv6.zone;
3422 + function serializePathEncoding(input, pathNoScheme = false) {
3423 + let output = "";
3424 + let firstSegment = pathNoScheme && input[0] !== "/";
3425 + for (let i = 0; i < input.length; i++) {
3426 + const ch = input[i];
3427 + if (ch === "%" && i + 2 < input.length) {
3428 + const hex = input.slice(i + 1, i + 3);
3429 + if (isHexPair(hex)) {
3430 + output += "%" + hex.toUpperCase();
3431 + i += 2;
3432 + continue;
3433 + }
3255 3434 }
3256 - return { host: newHost, escapedHost, isIPV6: true };
3257 - } else {
3258 - return { host, isIPV6: false };
3435 + if (ch === "/") {
3436 + firstSegment = false;
3437 + }
3438 + if (isPathCharacter(ch) && (ch !== ":" || !firstSegment)) {
3439 + output += ch;
3440 + } else {
3441 + const code = input.charCodeAt(i);
3442 + if (code < 128) {
3443 + output += BYTE_HEX[code];
3444 + } else if (code < 55296 || code > 57343) {
3445 + output += percentEncodeNonAscii(code);
3446 + } else if (code <= 56319 && i + 1 < input.length) {
3447 + const low = input.charCodeAt(i + 1);
3448 + if (low >= 56320 && low <= 57343) {
3449 + output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
3450 + i++;
3451 + } else {
3452 + output += percentEncodeNonAscii(65533);
3453 + }
3454 + } else {
3455 + output += percentEncodeNonAscii(65533);
3456 + }
3457 + }
3259 3458 }
3459 + return output;
3260 3460 }
3261 - function stripLeadingZeros(str, token) {
3262 - let out = "";
3263 - let skip = true;
3264 - const l = str.length;
3265 - for (let i = 0; i < l; i++) {
3266 - const c = str[i];
3267 - if (c === "0" && skip) {
3268 - if (i + 1 <= l && str[i + 1] === token || i + 1 === l) {
3269 - out += c;
3270 - skip = false;
3461 + function encodeComponent(input, isAllowed) {
3462 + let output = "";
3463 + for (let i = 0; i < input.length; i++) {
3464 + const ch = input[i];
3465 + if (ch === "%" && i + 2 < input.length) {
3466 + const hex = input.slice(i + 1, i + 3);
3467 + if (isHexPair(hex)) {
3468 + output += "%" + hex.toUpperCase();
3469 + i += 2;
3470 + continue;
3271 3471 }
3472 + }
3473 + if (isAllowed(ch)) {
3474 + output += ch;
3272 3475 } else {
3273 - if (c === token) {
3274 - skip = true;
3476 + const code = input.charCodeAt(i);
3477 + if (code < 128) {
3478 + output += BYTE_HEX[code];
3479 + } else if (code < 55296 || code > 57343) {
3480 + output += percentEncodeNonAscii(code);
3481 + } else if (code <= 56319 && i + 1 < input.length) {
3482 + const low = input.charCodeAt(i + 1);
3483 + if (low >= 56320 && low <= 57343) {
3484 + output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
3485 + i++;
3486 + } else {
3487 + output += percentEncodeNonAscii(65533);
3488 + }
3275 3489 } else {
3276 - skip = false;
3490 + output += percentEncodeNonAscii(65533);
3277 3491 }
3278 - out += c;
3279 3492 }
3280 3493 }
3281 - return out;
3494 + return output;
3282 3495 }
3283 - function findToken(str, token) {
3284 - let ind = 0;
3285 - for (let i = 0; i < str.length; i++) {
3286 - if (str[i] === token) ind++;
3287 - }
3288 - return ind;
3496 + function encodeUserinfo(input) {
3497 + return encodeComponent(input, isUserinfoCharacter);
3289 3498 }
3290 - var RDS1 = /^\.\.?\//u;
3291 - var RDS2 = /^\/\.(?:\/|$)/u;
3292 - var RDS3 = /^\/\.\.(?:\/|$)/u;
3293 - var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/u;
3294 - function removeDotSegments(input) {
3295 - const output = [];
3296 - while (input.length) {
3297 - if (input.match(RDS1)) {
3298 - input = input.replace(RDS1, "");
3299 - } else if (input.match(RDS2)) {
3300 - input = input.replace(RDS2, "/");
3301 - } else if (input.match(RDS3)) {
3302 - input = input.replace(RDS3, "/");
3303 - output.pop();
3304 - } else if (input === "." || input === "..") {
3305 - input = "";
3499 + function encodeQuery(input) {
3500 + return encodeComponent(input, isQueryFragmentCharacter);
3501 + }
3502 + function encodeFragment(input) {
3503 + return encodeComponent(input, isQueryFragmentCharacter);
3504 + }
3505 + function isEscapeSafe(cp) {
3506 + return cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 42 || cp === 43 || cp === 45 || cp === 46 || cp === 47 || cp === 64 || cp === 95;
3507 + }
3508 + function normalizeQueryFragmentEncoding(input) {
3509 + let output = "";
3510 + for (let i = 0; i < input.length; i++) {
3511 + const ch = input[i];
3512 + if (ch === "%" && i + 2 < input.length) {
3513 + const hex = input.slice(i + 1, i + 3);
3514 + if (isHexPair(hex)) {
3515 + const normalizedHex = hex.toUpperCase();
3516 + const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
3517 + if (isUnreserved(decoded)) {
3518 + output += decoded;
3519 + } else {
3520 + output += "%" + normalizedHex;
3521 + }
3522 + i += 2;
3523 + continue;
3524 + }
3525 + }
3526 + if (isQueryFragmentCharacter(ch)) {
3527 + output += ch;
3306 3528 } else {
3307 - const im = input.match(RDS5);
3308 - if (im) {
3309 - const s = im[0];
3310 - input = input.slice(s.length);
3311 - output.push(s);
3529 + const code = input.charCodeAt(i);
3530 + if (code < 128) {
3531 + output += isEscapeSafe(code) ? ch : BYTE_HEX[code];
3532 + } else if (code < 55296 || code > 57343) {
3533 + output += percentEncodeNonAscii(code);
3534 + } else if (code <= 56319 && i + 1 < input.length) {
3535 + const low = input.charCodeAt(i + 1);
3536 + if (low >= 56320 && low <= 57343) {
3537 + output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
3538 + i++;
3539 + } else {
3540 + output += percentEncodeNonAscii(65533);
3541 + }
3312 3542 } else {
3313 - throw new Error("Unexpected dot segment condition");
3543 + output += percentEncodeNonAscii(65533);
3314 3544 }
3315 3545 }
3316 3546 }
3317 - return output.join("");
3547 + return output;
3318 3548 }
3319 - function normalizeComponentEncoding(components, esc) {
3320 - const func = esc !== true ? escape : unescape;
3321 - if (components.scheme !== void 0) {
3322 - components.scheme = func(components.scheme);
3549 + function escapePreservingEscapes(input) {
3550 + let output = "";
3551 + for (let i = 0; i < input.length; i++) {
3552 + if (input[i] === "%" && i + 2 < input.length) {
3553 + const hex = input.slice(i + 1, i + 3);
3554 + if (isHexPair(hex)) {
3555 + output += "%" + hex.toUpperCase();
3556 + i += 2;
3557 + continue;
3558 + }
3559 + }
3560 + output += escape(input[i]);
3323 3561 }
3324 - if (components.userinfo !== void 0) {
3325 - components.userinfo = func(components.userinfo);
3326 - }
3327 - if (components.host !== void 0) {
3328 - components.host = func(components.host);
3329 - }
3330 - if (components.path !== void 0) {
3331 - components.path = func(components.path);
3332 - }
3333 - if (components.query !== void 0) {
3334 - components.query = func(components.query);
3335 - }
3336 - if (components.fragment !== void 0) {
3337 - components.fragment = func(components.fragment);
3338 - }
3339 - return components;
3562 + return output;
3340 3563 }
3341 - function recomposeAuthority(components, options) {
3564 + function recomposeAuthority(component) {
3342 3565 const uriTokens = [];
3343 - if (components.userinfo !== void 0) {
3344 - uriTokens.push(components.userinfo);
3566 + if (component.userinfo !== void 0) {
3567 + uriTokens.push(encodeUserinfo(component.userinfo));
3345 3568 uriTokens.push("@");
3346 3569 }
3347 - if (components.host !== void 0) {
3348 - let host = unescape(components.host);
3349 - const ipV4res = normalizeIPv4(host);
3350 - if (ipV4res.isIPV4) {
3351 - host = ipV4res.host;
3352 - } else {
3353 - const ipV6res = normalizeIPv6(ipV4res.host, { isIPV4: false });
3354 - if (ipV6res.isIPV6 === true) {
3570 + if (component.host !== void 0) {
3571 + let host = component.host;
3572 + if (!isIPv4(host)) {
3573 + let ipV6res = normalizeIPv6(host);
3574 + if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {
3575 + host = normalizePercentEncoding(host, true);
3576 + ipV6res = normalizeIPv6(host);
3577 + }
3578 + if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) {
3355 3579 host = `[${ipV6res.escapedHost}]`;
3356 3580 } else {
3357 - host = components.host;
3581 + host = reescapeHostDelimiters(host, false);
3358 3582 }
3359 3583 }
3360 3584 uriTokens.push(host);
3361 3585 }
3362 - if (typeof components.port === "number" || typeof components.port === "string") {
3586 + if (typeof component.port === "number" || typeof component.port === "string") {
3587 + const port = String(component.port);
3588 + if (!isPort(port)) {
3589 + throw new TypeError("URI port is malformed.");
3590 + }
3363 3591 uriTokens.push(":");
3364 - uriTokens.push(String(components.port));
3592 + uriTokens.push(port);
3365 3593 }
3366 3594 return uriTokens.length ? uriTokens.join("") : void 0;
3367 3595 }
3368 3596 module.exports = {
3597 + nonSimpleDomain,
3369 3598 recomposeAuthority,
3370 - normalizeComponentEncoding,
3599 + reescapeHostDelimiters,
3600 + normalizePercentEncoding,
3601 + normalizePathEncoding,
3602 + serializePathEncoding,
3603 + normalizeQueryFragmentEncoding,
3604 + encodeUserinfo,
3605 + encodeQuery,
3606 + encodeFragment,
3607 + escapePreservingEscapes,
3371 3608 removeDotSegments,
3372 - normalizeIPv4,
3609 + isIPv4,
3610 + isUUID,
3373 3611 normalizeIPv6,
3374 3612 stringArrayToHexStripped
3375 3613 };
3376 3614 }
@@ -3379,147 +3617,212 @@
3379 3617 // node_modules/fast-uri/lib/schemes.js
3380 3618 var require_schemes = __commonJS({
3381 3619 "node_modules/fast-uri/lib/schemes.js"(exports, module) {
3382 3620 "use strict";
3383 - var UUID_REG = /^[\da-f]{8}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{12}$/iu;
3384 - var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;
3385 - function isSecure(wsComponents) {
3386 - return typeof wsComponents.secure === "boolean" ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss";
3621 + var { isUUID } = require_utils();
3622 + var URN_REG = /^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu;
3623 + var supportedSchemeNames = (
3624 + /** @type {const} */
3625 + [
3626 + "http",
3627 + "https",
3628 + "ws",
3629 + "wss",
3630 + "urn",
3631 + "urn:uuid"
3632 + ]
3633 + );
3634 + function isValidSchemeName(name) {
3635 + return supportedSchemeNames.indexOf(
3636 + /** @type {*} */
3637 + name
3638 + ) !== -1;
3387 3639 }
3388 - function httpParse(components) {
3389 - if (!components.host) {
3390 - components.error = components.error || "HTTP URIs must have a host.";
3640 + function wsIsSecure(wsComponent) {
3641 + if (wsComponent.secure === true) {
3642 + return true;
3643 + } else if (wsComponent.secure === false) {
3644 + return false;
3645 + } else if (wsComponent.scheme) {
3646 + return wsComponent.scheme.length === 3 && (wsComponent.scheme[0] === "w" || wsComponent.scheme[0] === "W") && (wsComponent.scheme[1] === "s" || wsComponent.scheme[1] === "S") && (wsComponent.scheme[2] === "s" || wsComponent.scheme[2] === "S");
3647 + } else {
3648 + return false;
3391 3649 }
3392 - return components;
3393 3650 }
3394 - function httpSerialize(components) {
3395 - const secure = String(components.scheme).toLowerCase() === "https";
3396 - if (components.port === (secure ? 443 : 80) || components.port === "") {
3397 - components.port = void 0;
3651 + function httpParse(component) {
3652 + if (!component.host) {
3653 + component.error = component.error || "HTTP URIs must have a host.";
3398 3654 }
3399 - if (!components.path) {
3400 - components.path = "/";
3655 + return component;
3656 + }
3657 + function httpSerialize(component) {
3658 + const secure = String(component.scheme).toLowerCase() === "https";
3659 + if (component.port === (secure ? 443 : 80) || component.port === "") {
3660 + component.port = void 0;
3401 3661 }
3402 - return components;
3662 + if (!component.path) {
3663 + component.path = "/";
3664 + }
3665 + return component;
3403 3666 }
3404 - function wsParse(wsComponents) {
3405 - wsComponents.secure = isSecure(wsComponents);
3406 - wsComponents.resourceName = (wsComponents.path || "/") + (wsComponents.query ? "?" + wsComponents.query : "");
3407 - wsComponents.path = void 0;
3408 - wsComponents.query = void 0;
3409 - return wsComponents;
3667 + function wsParse(wsComponent) {
3668 + wsComponent.secure = wsIsSecure(wsComponent);
3669 + wsComponent.resourceName = (wsComponent.path || "/") + (wsComponent.query ? "?" + wsComponent.query : "");
3670 + wsComponent.path = void 0;
3671 + wsComponent.query = void 0;
3672 + return wsComponent;
3410 3673 }
3411 - function wsSerialize(wsComponents) {
3412 - if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") {
3413 - wsComponents.port = void 0;
3674 + function wsSerialize(wsComponent) {
3675 + if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === "") {
3676 + wsComponent.port = void 0;
3414 3677 }
3415 - if (typeof wsComponents.secure === "boolean") {
3416 - wsComponents.scheme = wsComponents.secure ? "wss" : "ws";
3417 - wsComponents.secure = void 0;
3678 + if (typeof wsComponent.secure === "boolean") {
3679 + wsComponent.scheme = wsComponent.secure ? "wss" : "ws";
3680 + wsComponent.secure = void 0;
3418 3681 }
3419 - if (wsComponents.resourceName) {
3420 - const [path, query] = wsComponents.resourceName.split("?");
3421 - wsComponents.path = path && path !== "/" ? path : void 0;
3422 - wsComponents.query = query;
3423 - wsComponents.resourceName = void 0;
3682 + if (wsComponent.resourceName) {
3683 + const queryIndex = wsComponent.resourceName.indexOf("?");
3684 + const path = queryIndex === -1 ? wsComponent.resourceName : wsComponent.resourceName.slice(0, queryIndex);
3685 + wsComponent.path = path && path !== "/" ? path : void 0;
3686 + wsComponent.query = queryIndex === -1 ? void 0 : wsComponent.resourceName.slice(queryIndex + 1);
3687 + wsComponent.resourceName = void 0;
3424 3688 }
3425 - wsComponents.fragment = void 0;
3426 - return wsComponents;
3689 + wsComponent.fragment = void 0;
3690 + return wsComponent;
3427 3691 }
3428 - function urnParse(urnComponents, options) {
3429 - if (!urnComponents.path) {
3430 - urnComponents.error = "URN can not be parsed";
3431 - return urnComponents;
3692 + function urnParse(urnComponent, options) {
3693 + if (!urnComponent.path) {
3694 + urnComponent.error = "URN can not be parsed";
3695 + return urnComponent;
3432 3696 }
3433 - const matches = urnComponents.path.match(URN_REG);
3434 - if (matches) {
3435 - const scheme = options.scheme || urnComponents.scheme || "urn";
3436 - urnComponents.nid = matches[1].toLowerCase();
3437 - urnComponents.nss = matches[2];
3438 - const urnScheme = `${scheme}:${options.nid || urnComponents.nid}`;
3439 - const schemeHandler = SCHEMES[urnScheme];
3440 - urnComponents.path = void 0;
3697 + const matches = urnComponent.path.match(URN_REG);
3698 + if (matches && matches[0] === urnComponent.path) {
3699 + const scheme = options.scheme || urnComponent.scheme || "urn";
3700 + urnComponent.nid = matches[1].toLowerCase();
3701 + urnComponent.nss = matches[2];
3702 + const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`;
3703 + const schemeHandler = getSchemeHandler(urnScheme);
3704 + urnComponent.path = void 0;
3441 3705 if (schemeHandler) {
3442 - urnComponents = schemeHandler.parse(urnComponents, options);
3706 + urnComponent = schemeHandler.parse(urnComponent, options);
3443 3707 }
3444 3708 } else {
3445 - urnComponents.error = urnComponents.error || "URN can not be parsed.";
3709 + urnComponent.error = urnComponent.error || "URN can not be parsed.";
3446 3710 }
3447 - return urnComponents;
3711 + return urnComponent;
3448 3712 }
3449 - function urnSerialize(urnComponents, options) {
3450 - const scheme = options.scheme || urnComponents.scheme || "urn";
3451 - const nid = urnComponents.nid.toLowerCase();
3713 + function urnSerialize(urnComponent, options) {
3714 + if (urnComponent.nid === void 0) {
3715 + throw new Error("URN without nid cannot be serialized");
3716 + }
3717 + const scheme = options.scheme || urnComponent.scheme || "urn";
3718 + const nid = urnComponent.nid.toLowerCase();
3452 3719 const urnScheme = `${scheme}:${options.nid || nid}`;
3453 - const schemeHandler = SCHEMES[urnScheme];
3720 + const schemeHandler = getSchemeHandler(urnScheme);
3454 3721 if (schemeHandler) {
3455 - urnComponents = schemeHandler.serialize(urnComponents, options);
3722 + urnComponent = schemeHandler.serialize(urnComponent, options);
3456 3723 }
3457 - const uriComponents = urnComponents;
3458 - const nss = urnComponents.nss;
3459 - uriComponents.path = `${nid || options.nid}:${nss}`;
3724 + const uriComponent = urnComponent;
3725 + const nss = urnComponent.nss;
3726 + uriComponent.path = `${nid || options.nid}:${nss}`;
3460 3727 options.skipEscape = true;
3461 - return uriComponents;
3728 + return uriComponent;
3462 3729 }
3463 - function urnuuidParse(urnComponents, options) {
3464 - const uuidComponents = urnComponents;
3465 - uuidComponents.uuid = uuidComponents.nss;
3466 - uuidComponents.nss = void 0;
3467 - if (!options.tolerant && (!uuidComponents.uuid || !UUID_REG.test(uuidComponents.uuid))) {
3468 - uuidComponents.error = uuidComponents.error || "UUID is not valid.";
3730 + function urnuuidParse(urnComponent, options) {
3731 + const uuidComponent = urnComponent;
3732 + uuidComponent.uuid = uuidComponent.nss;
3733 + uuidComponent.nss = void 0;
3734 + if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {
3735 + uuidComponent.error = uuidComponent.error || "UUID is not valid.";
3469 3736 }
3470 - return uuidComponents;
3737 + return uuidComponent;
3471 3738 }
3472 - function urnuuidSerialize(uuidComponents) {
3473 - const urnComponents = uuidComponents;
3474 - urnComponents.nss = (uuidComponents.uuid || "").toLowerCase();
3475 - return urnComponents;
3739 + function urnuuidSerialize(uuidComponent) {
3740 + const urnComponent = uuidComponent;
3741 + urnComponent.nss = (uuidComponent.uuid || "").toLowerCase();
3742 + return urnComponent;
3476 3743 }
3477 - var http = {
3478 - scheme: "http",
3479 - domainHost: true,
3480 - parse: httpParse,
3481 - serialize: httpSerialize
3744 + var http = (
3745 + /** @type {SchemeHandler} */
3746 + {
3747 + scheme: "http",
3748 + domainHost: true,
3749 + parse: httpParse,
3750 + serialize: httpSerialize
3751 + }
3752 + );
3753 + var https = (
3754 + /** @type {SchemeHandler} */
3755 + {
3756 + scheme: "https",
3757 + domainHost: http.domainHost,
3758 + parse: httpParse,
3759 + serialize: httpSerialize
3760 + }
3761 + );
3762 + var ws = (
3763 + /** @type {SchemeHandler} */
3764 + {
3765 + scheme: "ws",
3766 + domainHost: true,
3767 + parse: wsParse,
3768 + serialize: wsSerialize
3769 + }
3770 + );
3771 + var wss = (
3772 + /** @type {SchemeHandler} */
3773 + {
3774 + scheme: "wss",
3775 + domainHost: ws.domainHost,
3776 + parse: ws.parse,
3777 + serialize: ws.serialize
3778 + }
3779 + );
3780 + var urn = (
3781 + /** @type {SchemeHandler} */
3782 + {
3783 + scheme: "urn",
3784 + parse: urnParse,
3785 + serialize: urnSerialize,
3786 + skipNormalize: true
3787 + }
3788 + );
3789 + var urnuuid = (
3790 + /** @type {SchemeHandler} */
3791 + {
3792 + scheme: "urn:uuid",
3793 + parse: urnuuidParse,
3794 + serialize: urnuuidSerialize,
3795 + skipNormalize: true
3796 + }
3797 + );
3798 + var SCHEMES = (
3799 + /** @type {Record<SchemeName, SchemeHandler>} */
3800 + {
3801 + http,
3802 + https,
3803 + ws,
3804 + wss,
3805 + urn,
3806 + "urn:uuid": urnuuid
3807 + }
3808 + );
3809 + Object.setPrototypeOf(SCHEMES, null);
3810 + function getSchemeHandler(scheme) {
3811 + return scheme && (SCHEMES[
3812 + /** @type {SchemeName} */
3813 + scheme
3814 + ] || SCHEMES[
3815 + /** @type {SchemeName} */
3816 + scheme.toLowerCase()
3817 + ]) || void 0;
3818 + }
3819 + module.exports = {
3820 + wsIsSecure,
3821 + SCHEMES,
3822 + isValidSchemeName,
3823 + getSchemeHandler
3482 3824 };
3483 - var https = {
3484 - scheme: "https",
3485 - domainHost: http.domainHost,
3486 - parse: httpParse,
3487 - serialize: httpSerialize
3488 - };
3489 - var ws = {
3490 - scheme: "ws",
3491 - domainHost: true,
3492 - parse: wsParse,
3493 - serialize: wsSerialize
3494 - };
3495 - var wss = {
3496 - scheme: "wss",
3497 - domainHost: ws.domainHost,
3498 - parse: ws.parse,
3499 - serialize: ws.serialize
3500 - };
3501 - var urn = {
3502 - scheme: "urn",
3503 - parse: urnParse,
3504 - serialize: urnSerialize,
3505 - skipNormalize: true
3506 - };
3507 - var urnuuid = {
3508 - scheme: "urn:uuid",
3509 - parse: urnuuidParse,
3510 - serialize: urnuuidSerialize,
3511 - skipNormalize: true
3512 - };
3513 - var SCHEMES = {
3514 - http,
3515 - https,
3516 - ws,
3517 - wss,
3518 - urn,
3519 - "urn:uuid": urnuuid
3520 - };
3521 - module.exports = SCHEMES;
3522 3825 }
3523 3826 });
3524 3827
3525 3828 // node_modules/fast-uri/index.js
@@ -3525,24 +3828,63 @@
3525 3828 // node_modules/fast-uri/index.js
3526 3829 var require_fast_uri = __commonJS({
3527 3830 "node_modules/fast-uri/index.js"(exports, module) {
3528 3831 "use strict";
3529 - var { normalizeIPv6, normalizeIPv4, removeDotSegments, recomposeAuthority, normalizeComponentEncoding } = require_utils();
3530 - var SCHEMES = require_schemes();
3832 + var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils();
3833 + var { SCHEMES, getSchemeHandler } = require_schemes();
3834 + var VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u;
3835 + var MALFORMED_SCHEME_ERROR = "URI scheme is malformed.";
3836 + function decodeValidScheme(scheme) {
3837 + const decodedScheme = unescape(String(scheme));
3838 + if (!VALID_SCHEME.test(decodedScheme)) {
3839 + throw new TypeError(MALFORMED_SCHEME_ERROR);
3840 + }
3841 + return decodedScheme;
3842 + }
3531 3843 function normalize(uri, options) {
3532 3844 if (typeof uri === "string") {
3533 - uri = serialize(parse(uri, options), options);
3845 + uri = /** @type {T} */
3846 + normalizeString(uri, options);
3534 3847 } else if (typeof uri === "object") {
3535 - uri = parse(serialize(uri, options), options);
3848 + uri = /** @type {T} */
3849 + parse(serialize(uri, options), options);
3536 3850 }
3537 3851 return uri;
3538 3852 }
3539 3853 function resolve(baseURI, relativeURI, options) {
3540 - const schemelessOptions = Object.assign({ scheme: "null" }, options);
3541 - const resolved = resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true);
3542 - return serialize(resolved, { ...schemelessOptions, skipEscape: true });
3854 + const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
3855 + const {
3856 + parsed: baseParsed,
3857 + malformedAuthorityOrPort: baseMalformed,
3858 + malformedPercentEncoding: baseMalformedPercentEncoding,
3859 + malformedSchemeSpecific: baseMalformedSchemeSpecific,
3860 + malformedHost: baseMalformedHost,
3861 + malformedScheme: baseMalformedScheme
3862 + } = parseWithStatus(baseURI, schemelessOptions);
3863 + const {
3864 + parsed: relativeParsed,
3865 + malformedAuthorityOrPort: relativeMalformed,
3866 + malformedPercentEncoding: relativeMalformedPercentEncoding,
3867 + malformedSchemeSpecific: relativeMalformedSchemeSpecific,
3868 + malformedHost: relativeMalformedHost,
3869 + malformedScheme: relativeMalformedScheme
3870 + } = parseWithStatus(relativeURI, schemelessOptions);
3871 + if (baseMalformed || relativeMalformed || baseMalformedPercentEncoding || relativeMalformedPercentEncoding || baseMalformedSchemeSpecific || relativeMalformedSchemeSpecific || baseMalformedHost || relativeMalformedHost || baseMalformedScheme || relativeMalformedScheme) {
3872 + throw new Error(baseParsed.error || relativeParsed.error || "URI is malformed.");
3873 + }
3874 + const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true);
3875 + const resolvedSchemeHandler = getSchemeHandler(options && options.scheme || resolved.scheme);
3876 + const resolvedHost = resolved.host;
3877 + const resolvedHostIsIP = resolvedHost !== void 0 && resolvedHost !== "" && (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6);
3878 + canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP);
3879 + const encodedASCIIHost = resolvedHost && resolvedHost.indexOf("%") !== -1 && !new RegExp("\\P{ASCII}", "u").test(resolvedHost);
3880 + if (resolved.error && !encodedASCIIHost) {
3881 + throw new Error(resolved.error);
3882 + }
3883 + schemelessOptions.skipEscape = true;
3884 + return serialize(resolved, schemelessOptions);
3543 3885 }
3544 - function resolveComponents(base, relative, options, skipNormalization) {
3886 + function resolveComponent(base, relative, options, skipNormalization) {
3545 3887 const target = {};
3546 3888 if (!skipNormalization) {
3547 3889 base = parse(serialize(base, options), options);
3548 3890 relative = parse(serialize(relative, options), options);
@@ -3570,9 +3912,9 @@
3570 3912 } else {
3571 3913 target.query = base.query;
3572 3914 }
3573 3915 } else {
3574 - if (relative.path.charAt(0) === "/") {
3916 + if (relative.path[0] === "/") {
3575 3917 target.path = removeDotSegments(relative.path);
3576 3918 } else {
3577 3919 if ((base.userinfo !== void 0 || base.host !== void 0 || base.port !== void 0) && !base.path) {
3578 3920 target.path = "/" + relative.path;
@@ -3594,24 +3936,14 @@
3594 3936 target.fragment = relative.fragment;
3595 3937 return target;
3596 3938 }
3597 3939 function equal(uriA, uriB, options) {
3598 - if (typeof uriA === "string") {
3599 - uriA = unescape(uriA);
3600 - uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true });
3601 - } else if (typeof uriA === "object") {
3602 - uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true });
3603 - }
3604 - if (typeof uriB === "string") {
3605 - uriB = unescape(uriB);
3606 - uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true });
3607 - } else if (typeof uriB === "object") {
3608 - uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true });
3609 - }
3610 - return uriA.toLowerCase() === uriB.toLowerCase();
3940 + const normalizedA = normalizeComparableURI(uriA, options);
3941 + const normalizedB = normalizeComparableURI(uriB, options);
3942 + return normalizedA !== void 0 && normalizedB !== void 0 && normalizedA === normalizedB;
3611 3943 }
3612 3944 function serialize(cmpts, opts) {
3613 - const components = {
3945 + const component = {
3614 3946 host: cmpts.host,
3615 3947 scheme: cmpts.scheme,
3616 3948 userinfo: cmpts.userinfo,
3617 3949 port: cmpts.port,
@@ -3627,67 +3959,99 @@
3627 3959 error: ""
3628 3960 };
3629 3961 const options = Object.assign({}, opts);
3630 3962 const uriTokens = [];
3631 - const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()];
3632 - if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);
3633 - if (components.path !== void 0) {
3963 + if (component.scheme) {
3964 + component.scheme = decodeValidScheme(component.scheme);
3965 + }
3966 + const schemeHandler = getSchemeHandler(options.scheme || component.scheme);
3967 + if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options);
3968 + const hasAuthority = component.userinfo !== void 0 || component.host !== void 0 || component.port !== void 0;
3969 + const pathNoScheme = !options.skipEscape && component.scheme === void 0 && !hasAuthority;
3970 + if (component.path !== void 0) {
3634 3971 if (!options.skipEscape) {
3635 - components.path = escape(components.path);
3636 - if (components.scheme !== void 0) {
3637 - components.path = components.path.split("%3A").join(":");
3638 - }
3972 + component.path = serializePathEncoding(component.path, pathNoScheme);
3639 3973 } else {
3640 - components.path = unescape(components.path);
3974 + component.path = normalizePercentEncoding(component.path);
3641 3975 }
3642 3976 }
3643 - if (options.reference !== "suffix" && components.scheme) {
3644 - uriTokens.push(components.scheme);
3645 - uriTokens.push(":");
3977 + if (options.reference !== "suffix" && component.scheme) {
3978 + component.scheme = decodeValidScheme(component.scheme);
3979 + uriTokens.push(component.scheme, ":");
3646 3980 }
3647 - const authority = recomposeAuthority(components, options);
3981 + const authority = recomposeAuthority(component);
3648 3982 if (authority !== void 0) {
3649 3983 if (options.reference !== "suffix") {
3650 3984 uriTokens.push("//");
3651 3985 }
3652 3986 uriTokens.push(authority);
3653 - if (components.path && components.path.charAt(0) !== "/") {
3987 + if (component.path && component.path[0] !== "/") {
3654 3988 uriTokens.push("/");
3655 3989 }
3656 3990 }
3657 - if (components.path !== void 0) {
3658 - let s = components.path;
3991 + if (component.path !== void 0) {
3992 + let s = component.path;
3659 3993 if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {
3660 3994 s = removeDotSegments(s);
3661 3995 }
3662 - if (authority === void 0) {
3663 - s = s.replace(/^\/\//u, "/%2F");
3996 + if (pathNoScheme) {
3997 + s = serializePathEncoding(s, true);
3664 3998 }
3999 + if (authority === void 0 && s[0] === "/" && s[1] === "/") {
4000 + s = "/%2F" + s.slice(2);
4001 + }
3665 4002 uriTokens.push(s);
3666 4003 }
3667 - if (components.query !== void 0) {
3668 - uriTokens.push("?");
3669 - uriTokens.push(components.query);
4004 + if (component.query !== void 0) {
4005 + uriTokens.push("?", encodeQuery(component.query));
3670 4006 }
3671 - if (components.fragment !== void 0) {
3672 - uriTokens.push("#");
3673 - uriTokens.push(components.fragment);
4007 + if (component.fragment !== void 0) {
4008 + uriTokens.push("#", encodeFragment(component.fragment));
3674 4009 }
3675 4010 return uriTokens.join("");
3676 4011 }
3677 - var hexLookUp = Array.from({ length: 127 }, (v, k) => /[^!"$&'()*+,\-.;=_`a-z{}~]/u.test(String.fromCharCode(k)));
3678 - function nonSimpleDomain(value) {
3679 - let code = 0;
3680 - for (let i = 0, len = value.length; i < len; ++i) {
3681 - code = value.charCodeAt(i);
3682 - if (code > 126 || hexLookUp[code]) {
4012 + var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
4013 + var AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\/\/([^/?#]*)/;
4014 + var AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;
4015 + function getParseError(parsed, matches) {
4016 + if (matches[2] !== void 0 && parsed.path && parsed.path[0] !== "/") {
4017 + return 'URI path must start with "/" when authority is present.';
4018 + }
4019 + if (typeof parsed.port === "number" && (parsed.port < 0 || parsed.port > 65535)) {
4020 + return "URI port is malformed.";
4021 + }
4022 + return void 0;
4023 + }
4024 + function hasMalformedPercentEncoding(component) {
4025 + if (component === void 0) return false;
4026 + let percent = component.indexOf("%");
4027 + while (percent !== -1) {
4028 + if (percent + 2 >= component.length || !/^[\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) {
3683 4029 return true;
3684 4030 }
4031 + percent = component.indexOf("%", percent + 3);
3685 4032 }
3686 4033 return false;
3687 4034 }
3688 - var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
3689 - function parse(uri, opts) {
4035 + function isIPLiteral(host) {
4036 + return host[0] === "[" && host[host.length - 1] === "]";
4037 + }
4038 + function hasMalformedComponentPercentEncoding(matches) {
4039 + const host = matches[4];
4040 + return hasMalformedPercentEncoding(matches[3]) || host !== void 0 && !isIPLiteral(host) && hasMalformedPercentEncoding(host) || hasMalformedPercentEncoding(matches[6]) || hasMalformedPercentEncoding(matches[7]) || hasMalformedPercentEncoding(matches[8]);
4041 + }
4042 + function canonicalizeHost(parsed, options, schemeHandler, isIP) {
4043 + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport) && parsed.host && !isIPLiteral(parsed.host) && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) {
4044 + try {
4045 + parsed.host = new URL("http://" + parsed.host).hostname;
4046 + } catch (e) {
4047 + parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
4048 + return true;
4049 + }
4050 + }
4051 + return false;
4052 + }
4053 + function parseWithStatus(uri, opts) {
3690 4054 const options = Object.assign({}, opts);
3691 4055 const parsed = {
3692 4056 scheme: void 0,
3693 4057 userinfo: void 0,
@@ -3696,11 +4060,41 @@
3696 4060 path: "",
3697 4061 query: void 0,
3698 4062 fragment: void 0
3699 4063 };
3700 - const gotEncoding = uri.indexOf("%") !== -1;
4064 + let malformedAuthorityOrPort = false;
4065 + let malformedPercentEncoding = false;
4066 + let malformedSchemeSpecific = false;
4067 + let malformedHost = false;
4068 + let malformedIPLiteral = false;
4069 + let malformedScheme = false;
3701 4070 let isIP = false;
3702 - if (options.reference === "suffix") uri = (options.scheme ? options.scheme + ":" : "") + "//" + uri;
4071 + if (options.reference === "suffix") {
4072 + if (options.scheme) {
4073 + uri = options.scheme + ":" + uri;
4074 + } else {
4075 + uri = "//" + uri;
4076 + }
4077 + }
4078 + const authorityMatch = uri.match(AUTHORITY_PREFIX);
4079 + if (authorityMatch !== null && authorityMatch[1].indexOf("\\") !== -1) {
4080 + parsed.error = "URI authority must not contain a literal backslash.";
4081 + malformedAuthorityOrPort = true;
4082 + }
4083 + const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION);
4084 + if (introducerMatch !== null) {
4085 + const region = introducerMatch[1];
4086 + const normalizedRegion = region.replace(/[\t\n\r]/g, "");
4087 + if (normalizedRegion.length >= 2) {
4088 + if (normalizedRegion.slice(0, 2) !== "//") {
4089 + parsed.error = parsed.error || "URI authority must not contain a literal backslash.";
4090 + malformedAuthorityOrPort = true;
4091 + } else if (region.length !== normalizedRegion.length) {
4092 + parsed.error = parsed.error || "URI authority introducer must not contain whitespace.";
4093 + malformedAuthorityOrPort = true;
4094 + }
4095 + }
4096 + }
3703 4097 const matches = uri.match(URI_PARSE);
3704 4098 if (matches) {
3705 4099 parsed.scheme = matches[1];
3706 4100 parsed.userinfo = matches[3];
@@ -3708,23 +4102,47 @@
3708 4102 parsed.port = parseInt(matches[5], 10);
3709 4103 parsed.path = matches[6] || "";
3710 4104 parsed.query = matches[7];
3711 4105 parsed.fragment = matches[8];
4106 + if (parsed.scheme !== void 0) {
4107 + const decodedScheme = unescape(parsed.scheme);
4108 + if (VALID_SCHEME.test(decodedScheme)) {
4109 + parsed.scheme = decodedScheme.toLowerCase();
4110 + } else {
4111 + parsed.error = parsed.error || MALFORMED_SCHEME_ERROR;
4112 + malformedScheme = true;
4113 + }
4114 + }
4115 + malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches);
4116 + if (malformedPercentEncoding) {
4117 + parsed.error = parsed.error || "URI contains malformed percent-encoding.";
4118 + }
3712 4119 if (isNaN(parsed.port)) {
3713 4120 parsed.port = matches[5];
3714 4121 }
4122 + const parseError = getParseError(parsed, matches);
4123 + if (parseError !== void 0) {
4124 + parsed.error = parsed.error || parseError;
4125 + malformedAuthorityOrPort = true;
4126 + }
3715 4127 if (parsed.host) {
3716 - const ipv4result = normalizeIPv4(parsed.host);
3717 - if (ipv4result.isIPV4 === false) {
3718 - const ipv6result = normalizeIPv6(ipv4result.host, { isIPV4: false });
3719 - parsed.host = ipv6result.host.toLowerCase();
3720 - isIP = ipv6result.isIPV6;
4128 + const ipv4result = isIPv4(parsed.host);
4129 + if (ipv4result === false) {
4130 + const bracketedIPLiteral = isIPLiteral(parsed.host);
4131 + const hasIPLiteralBracket = parsed.host.indexOf("[") !== -1 || parsed.host.indexOf("]") !== -1;
4132 + const ipv6result = normalizeIPv6(parsed.host);
4133 + isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true;
4134 + malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true);
4135 + parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase();
4136 + if (malformedIPLiteral) {
4137 + parsed.error = parsed.error || "URI host is malformed.";
4138 + malformedAuthorityOrPort = true;
4139 + }
3721 4140 } else {
3722 - parsed.host = ipv4result.host;
3723 4141 isIP = true;
3724 4142 }
3725 4143 }
3726 - if (parsed.scheme === void 0 && parsed.userinfo === void 0 && parsed.host === void 0 && parsed.port === void 0 && !parsed.path && parsed.query === void 0) {
4144 + if (parsed.scheme === void 0 && parsed.userinfo === void 0 && parsed.host === void 0 && parsed.port === void 0 && parsed.query === void 0 && !parsed.path) {
3727 4145 parsed.reference = "same-document";
3728 4146 } else if (parsed.scheme === void 0) {
3729 4147 parsed.reference = "relative";
3730 4148 } else if (parsed.fragment === void 0) {
@@ -3734,48 +4152,75 @@
3734 4152 }
3735 4153 if (options.reference && options.reference !== "suffix" && options.reference !== parsed.reference) {
3736 4154 parsed.error = parsed.error || "URI is not a " + options.reference + " reference.";
3737 4155 }
3738 - const schemeHandler = SCHEMES[(options.scheme || parsed.scheme || "").toLowerCase()];
3739 - if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
3740 - if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) {
3741 - try {
3742 - parsed.host = URL.domainToASCII(parsed.host.toLowerCase());
3743 - } catch (e) {
3744 - parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
3745 - }
3746 - }
4156 + const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
4157 + if (!malformedIPLiteral) {
4158 + malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP);
3747 4159 }
3748 4160 if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
3749 - if (gotEncoding && parsed.scheme !== void 0) {
3750 - parsed.scheme = unescape(parsed.scheme);
4161 + if (uri.indexOf("%") !== -1) {
4162 + if (parsed.host !== void 0 && !malformedIPLiteral) {
4163 + const host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true);
4164 + parsed.host = reescapeHostDelimiters(host, isIP);
4165 + }
3751 4166 }
3752 - if (gotEncoding && parsed.userinfo !== void 0) {
3753 - parsed.userinfo = unescape(parsed.userinfo);
4167 + if (parsed.path) {
4168 + parsed.path = normalizePathEncoding(parsed.path);
3754 4169 }
3755 - if (gotEncoding && parsed.host !== void 0) {
3756 - parsed.host = unescape(parsed.host);
4170 + if (parsed.query) {
4171 + parsed.query = normalizeQueryFragmentEncoding(parsed.query);
3757 4172 }
3758 - if (parsed.path !== void 0 && parsed.path.length) {
3759 - parsed.path = escape(unescape(parsed.path));
4173 + if (parsed.fragment) {
4174 + parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment);
3760 4175 }
3761 - if (parsed.fragment !== void 0 && parsed.fragment.length) {
3762 - parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
3763 - }
3764 4176 }
3765 4177 if (schemeHandler && schemeHandler.parse) {
3766 4178 schemeHandler.parse(parsed, options);
4179 + if (schemeHandler === SCHEMES.urn && parsed.nid === void 0) {
4180 + malformedSchemeSpecific = true;
4181 + }
3767 4182 }
3768 4183 } else {
3769 4184 parsed.error = parsed.error || "URI can not be parsed.";
3770 4185 }
3771 - return parsed;
4186 + return { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme };
3772 4187 }
4188 + function parse(uri, opts) {
4189 + return parseWithStatus(uri, opts).parsed;
4190 + }
4191 + function normalizeString(uri, opts) {
4192 + return normalizeStringWithStatus(uri, opts).normalized;
4193 + }
4194 + function normalizeStringWithStatus(uri, opts) {
4195 + const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts);
4196 + return {
4197 + normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize(parsed, opts),
4198 + malformedAuthorityOrPort,
4199 + malformedPercentEncoding,
4200 + malformedSchemeSpecific,
4201 + malformedHost,
4202 + malformedScheme
4203 + };
4204 + }
4205 + function normalizeComparableURI(uri, opts) {
4206 + if (typeof uri !== "string" && typeof uri !== "object") {
4207 + return void 0;
4208 + }
4209 + let value;
4210 + try {
4211 + value = typeof uri === "string" ? uri : serialize(uri, opts);
4212 + } catch {
4213 + return void 0;
4214 + }
4215 + const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts);
4216 + return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? void 0 : normalized;
4217 + }
3773 4218 var fastUri = {
3774 4219 SCHEMES,
3775 4220 normalize,
3776 4221 resolve,
3777 - resolveComponents,
4222 + resolveComponent,
3778 4223 equal,
3779 4224 serialize,
3780 4225 parse
3781 4226 };
@@ -3907,9 +4352,9 @@
3907 4352 var Ajv2 = class {
3908 4353 constructor(opts = {}) {
3909 4354 this.schemas = {};
3910 4355 this.refs = {};
3911 - this.formats = {};
4356 + this.formats = /* @__PURE__ */ Object.create(null);
3912 4357 this._compilations = /* @__PURE__ */ new Set();
3913 4358 this._loading = {};
3914 4359 this._cache = /* @__PURE__ */ new Map();
3915 4360 opts = this.opts = { ...opts, ...requiredOptions(opts) };
@@ -4711,8 +5156,9 @@
4711 5156 "node_modules/ajv/dist/vocabularies/validation/pattern.js"(exports) {
4712 5157 "use strict";
4713 5158 Object.defineProperty(exports, "__esModule", { value: true });
4714 5159 var code_1 = require_code2();
5160 + var util_1 = require_util();
4715 5161 var codegen_1 = require_codegen();
4716 5162 var error = {
4717 5163 message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`,
4718 5164 params: ({ schemaCode }) => (0, codegen_1._)`{pattern: ${schemaCode}}`
@@ -4723,12 +5169,20 @@
4723 5169 schemaType: "string",
4724 5170 $data: true,
4725 5171 error,
4726 5172 code(cxt) {
4727 - const { data, $data, schema, schemaCode, it } = cxt;
5173 + const { gen, data, $data, schema, schemaCode, it } = cxt;
4728 5174 const u = it.opts.unicodeRegExp ? "u" : "";
4729 - const regExp = $data ? (0, codegen_1._)`(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema);
4730 - cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
5175 + if ($data) {
5176 + const { regExp } = it.opts.code;
5177 + const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._)`new RegExp` : (0, util_1.useFunc)(gen, regExp);
5178 + const valid = gen.let("valid");
5179 + gen.try(() => gen.assign(valid, (0, codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));
5180 + cxt.fail$data((0, codegen_1._)`!${valid}`);
5181 + } else {
5182 + const regExp = (0, code_1.usePattern)(cxt, schema);
5183 + cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`);
5184 + }
4731 5185 }
4732 5186 };
4733 5187 exports.default = def;
4734 5188 }
@@ -6419,11 +6873,11 @@
6419 6873 } });
6420 6874 }
6421 6875 });
6422 6876
6423 -// packages/abilities/node_modules/ajv-formats/dist/formats.js
6877 +// node_modules/ajv-formats/dist/formats.js
6424 6878 var require_formats = __commonJS({
6425 - "packages/abilities/node_modules/ajv-formats/dist/formats.js"(exports) {
6879 + "node_modules/ajv-formats/dist/formats.js"(exports) {
6426 6880 "use strict";
6427 6881 Object.defineProperty(exports, "__esModule", { value: true });
6428 6882 exports.formatNames = exports.fastFormats = exports.fullFormats = void 0;
6429 6883 function fmtDef(validate, compare) {
@@ -7000,11 +7454,11 @@
7000 7454 } });
7001 7455 }
7002 7456 });
7003 7457
7004 -// packages/abilities/node_modules/ajv-formats/dist/limit.js
7458 +// node_modules/ajv-formats/dist/limit.js
7005 7459 var require_limit = __commonJS({
7006 - "packages/abilities/node_modules/ajv-formats/dist/limit.js"(exports) {
7460 + "node_modules/ajv-formats/dist/limit.js"(exports) {
7007 7461 "use strict";
7008 7462 Object.defineProperty(exports, "__esModule", { value: true });
7009 7463 exports.formatLimitDefinition = void 0;
7010 7464 var ajv_1 = require_ajv();
@@ -7072,11 +7526,11 @@
7072 7526 exports.default = formatLimitPlugin;
7073 7527 }
7074 7528 });
7075 7529
7076 -// packages/abilities/node_modules/ajv-formats/dist/index.js
7530 +// node_modules/ajv-formats/dist/index.js
7077 7531 var require_dist2 = __commonJS({
7078 - "packages/abilities/node_modules/ajv-formats/dist/index.js"(exports, module) {
7532 + "node_modules/ajv-formats/dist/index.js"(exports, module) {
7079 7533 "use strict";
7080 7534 Object.defineProperty(exports, "__esModule", { value: true });
7081 7535 var formats_1 = require_formats();
7082 7536 var limit_1 = require_limit();
@@ -7443,9 +7897,17 @@
7443 7897 verbose: true,
7444 7898 allowUnionTypes: true
7445 7899 // Allow anyOf without explicit type
7446 7900 });
7447 -(0, import_ajv_formats.default)(ajv, ["date-time", "email", "hostname", "ipv4", "ipv6", "uuid"]);
7901 +(0, import_ajv_formats.default)(ajv, [
7902 + "date-time",
7903 + "email",
7904 + "hostname",
7905 + "ipv4",
7906 + "ipv6",
7907 + "uri",
7908 + "uuid"
7909 +]);
7448 7910 function formatAjvError(ajvError, param) {
7449 7911 const instancePath = ajvError.instancePath ? ajvError.instancePath.replace(/\//g, "][").replace(/^\]\[/, "[") + "]" : "";
7450 7912 const fullParam = param + instancePath;
7451 7913 switch (ajvError.keyword) {
@@ -7469,9 +7931,10 @@
7469 7931 "date-time": "Invalid date.",
7470 7932 uuid: `${fullParam} is not a valid UUID.`,
7471 7933 ipv4: `${fullParam} is not a valid IP address.`,
7472 7934 ipv6: `${fullParam} is not a valid IP address.`,
7473 - hostname: `${fullParam} is not a valid hostname.`
7935 + hostname: `${fullParam} is not a valid hostname.`,
7936 + uri: `${fullParam} is not a valid URI.`
7474 7937 };
7475 7938 return formatMessages[format] || `Invalid ${format}.`;
7476 7939 case "minimum":
7477 7940 case "exclusiveMinimum":