diff --git a/.github/local-actions/update-models/BUILD.bazel b/.github/local-actions/update-models/BUILD.bazel new file mode 100644 index 000000000..ff9caef09 --- /dev/null +++ b/.github/local-actions/update-models/BUILD.bazel @@ -0,0 +1,28 @@ +load("@devinfra_npm//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults.bzl", "esbuild_checked_in", "ts_project") + +package(default_visibility = ["//.github/local-actions/update-models:__subpackages__"]) + +npm_link_all_packages() + +ts_project( + name = "lib", + srcs = glob(["lib/*.ts"]), + tsconfig = "//.github/local-actions:tsconfig", + deps = [ + "//.github/local-actions/update-models:node_modules/@actions/core", + "//.github/local-actions/update-models:node_modules/@types/node", + "//.github/local-actions/update-models:node_modules/fast-glob", + ], +) + +esbuild_checked_in( + name = "main", + srcs = [ + ":lib", + ], + entry_point = "lib/main.ts", + format = "esm", + platform = "node", + target = "node24", +) diff --git a/.github/local-actions/update-models/action.yml b/.github/local-actions/update-models/action.yml new file mode 100644 index 000000000..8be3994c2 --- /dev/null +++ b/.github/local-actions/update-models/action.yml @@ -0,0 +1,5 @@ +name: 'Update Gemini Models' +description: 'Check Gemini deprecations page and auto-update references to recommended replacements' +runs: + using: 'node24' + main: 'main.js' diff --git a/.github/local-actions/update-models/lib/main.ts b/.github/local-actions/update-models/lib/main.ts new file mode 100644 index 000000000..a41ba9657 --- /dev/null +++ b/.github/local-actions/update-models/lib/main.ts @@ -0,0 +1,121 @@ +/** + * @license + * Copyright Google LLC + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import * as core from '@actions/core'; +import {readFile, writeFile} from 'node:fs/promises'; +import glob from 'fast-glob'; + +/** Parse the deprecations page to extract model replacements. */ +function parseDeprecations(html: string): Map { + const replacements = new Map(); + const tbodyRegex = /]*>([\s\S]*?)<\/tbody>/gi; + let tbodyMatch; + while ((tbodyMatch = tbodyRegex.exec(html)) !== null) { + const tbodyContent = tbodyMatch[1]; + const trRegex = /]*>([\s\S]*?)<\/tr>/gi; + let trMatch; + while ((trMatch = trRegex.exec(tbodyContent)) !== null) { + const trContent = trMatch[1]; + if (!trContent) continue; + if (trContent.includes('colspan')) continue; + + const tdRegex = /]*>([\s\S]*?)<\/td>/gi; + const tds: string[] = []; + let tdMatch; + while ((tdMatch = tdRegex.exec(trContent)) !== null) { + tds.push(tdMatch[1].trim()); + } + + if (tds.length >= 4) { + const modelMatch = tds[0].match(/]*>([^<]+)<\/code>/); + const model = modelMatch ? modelMatch[1].trim() : tds[0]; + + const replacementMatch = tds[3].match(/]*>([^<]+)<\/code>/); + const replacement = replacementMatch + ? replacementMatch[1].trim() + : tds[3].replace(/<[^>]*>/g, '').trim(); + + if (model && replacement && replacement.includes('gemini')) { + replacements.set(model, replacement); + } + } + } + } + return replacements; +} + +async function run() { + core.info('Fetching Gemini deprecations page...'); + let html = ''; + try { + const response = await fetch('https://ai.google.dev/gemini-api/docs/deprecations'); + if (!response.ok) { + throw new Error(`Failed to fetch: ${response.statusText}`); + } + html = await response.text(); + } catch (error) { + core.setFailed(`Error fetching deprecations page: ${error}`); + return; + } + + const replacements = parseDeprecations(html); + if (replacements.size === 0) { + core.warning('No model replacements found on the deprecations page.'); + return; + } + + core.info(`Found ${replacements.size} model replacement(s) on the deprecations page.`); + for (const [oldModel, newModel] of replacements.entries()) { + core.info(` - ${oldModel} -> ${newModel}`); + } + + // Find all .ts, .yml, .yaml files in the repository, ignoring node_modules/dist/.git + const files = await glob(['**/*.{ts,yml,yaml}'], { + ignore: ['**/node_modules/**', '**/dist/**', '**/.git/**'], + dot: true, + }); + + let totalUpdated = 0; + + for (const file of files) { + try { + const content = await readFile(file, 'utf-8'); + let updatedContent = content; + let fileChanged = false; + + for (const [oldModel, newModel] of replacements.entries()) { + const escapedOldModel = oldModel.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const regex = new RegExp(`(? { + core.setFailed(`Unhandled execution error: ${err}`); +}); diff --git a/.github/local-actions/update-models/main.js b/.github/local-actions/update-models/main.js new file mode 100644 index 000000000..20ccddce4 --- /dev/null +++ b/.github/local-actions/update-models/main.js @@ -0,0 +1,25094 @@ +import { createRequire as _esbuildBannerCreateRequire } from 'node:module';globalThis['require'] ??= _esbuildBannerCreateRequire(import.meta.url); +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] +}) : x)(function(x) { + if (typeof require !== "undefined") + return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); +}); +var __commonJS = (cb, mod) => function __require2() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// +var require_tunnel = __commonJS({ + ""(exports) { + "use strict"; + var net = __require("net"); + var tls = __require("tls"); + var http = __require("http"); + var https = __require("https"); + var events = __require("events"); + var assert = __require("assert"); + var util = __require("util"); + exports.httpOverHttp = httpOverHttp2; + exports.httpsOverHttp = httpsOverHttp2; + exports.httpOverHttps = httpOverHttps2; + exports.httpsOverHttps = httpsOverHttps2; + function httpOverHttp2(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + return agent; + } + function httpsOverHttp2(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; + } + function httpOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; + } + function httpsOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; + } + function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; + self.on("free", function onFree(socket, host, port, localAddress) { + var options2 = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options2.host && pending.port === options2.port) { + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } + } + socket.destroy(); + self.removeSocket(socket); + }); + } + util.inherits(TunnelingAgent, events.EventEmitter); + TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({ request: req }, self.options, toOptions(host, port, localAddress)); + if (self.sockets.length >= this.maxSockets) { + self.requests.push(options); + return; + } + self.createSocket(options, function(socket) { + socket.on("free", onFree); + socket.on("close", onCloseOrRemove); + socket.on("agentRemove", onCloseOrRemove); + req.onSocket(socket); + function onFree() { + self.emit("free", socket, options); + } + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener("free", onFree); + socket.removeListener("close", onCloseOrRemove); + socket.removeListener("agentRemove", onCloseOrRemove); + } + }); + }; + TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: "CONNECT", + path: options.host + ":" + options.port, + agent: false, + headers: { + host: options.host + ":" + options.port + } + }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers["Proxy-Authorization"] = "Basic " + new Buffer(connectOptions.proxyAuth).toString("base64"); + } + debug2("making CONNECT request"); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; + connectReq.once("response", onResponse); + connectReq.once("upgrade", onUpgrade); + connectReq.once("connect", onConnect); + connectReq.once("error", onError); + connectReq.end(); + function onResponse(res) { + res.upgrade = true; + } + function onUpgrade(res, socket, head) { + process.nextTick(function() { + onConnect(res, socket, head); + }); + } + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); + if (res.statusCode !== 200) { + debug2( + "tunneling socket could not be established, statusCode=%d", + res.statusCode + ); + socket.destroy(); + var error2 = new Error("tunneling socket could not be established, statusCode=" + res.statusCode); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + return; + } + if (head.length > 0) { + debug2("got illegal response body from proxy"); + socket.destroy(); + var error2 = new Error("got illegal response body from proxy"); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + return; + } + debug2("tunneling connection has established"); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); + } + function onError(cause) { + connectReq.removeAllListeners(); + debug2( + "tunneling socket could not be established, cause=%s\n", + cause.message, + cause.stack + ); + var error2 = new Error("tunneling socket could not be established, cause=" + cause.message); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + } + }; + TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket); + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); + var pending = this.requests.shift(); + if (pending) { + this.createSocket(pending, function(socket2) { + pending.request.onSocket(socket2); + }); + } + }; + function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader("host"); + var tlsOptions = mergeOptions({}, self.options, { + socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host + }); + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); + } + function toOptions(host, port, localAddress) { + if (typeof host === "string") { + return { + host, + port, + localAddress + }; + } + return host; + } + function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === "object") { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== void 0) { + target[k] = overrides[k]; + } + } + } + } + return target; + } + var debug2; + if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug2 = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === "string") { + args[0] = "TUNNEL: " + args[0]; + } else { + args.unshift("TUNNEL:"); + } + console.error.apply(console, args); + }; + } else { + debug2 = function() { + }; + } + exports.debug = debug2; + } +}); + +// +var require_tunnel2 = __commonJS({ + ""(exports, module) { + module.exports = require_tunnel(); + } +}); + +// +var require_symbols = __commonJS({ + ""(exports, module) { + module.exports = { + kClose: Symbol("close"), + kDestroy: Symbol("destroy"), + kDispatch: Symbol("dispatch"), + kUrl: Symbol("url"), + kWriting: Symbol("writing"), + kResuming: Symbol("resuming"), + kQueue: Symbol("queue"), + kConnect: Symbol("connect"), + kConnecting: Symbol("connecting"), + kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"), + kKeepAliveMaxTimeout: Symbol("max keep alive timeout"), + kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"), + kKeepAliveTimeoutValue: Symbol("keep alive timeout"), + kKeepAlive: Symbol("keep alive"), + kHeadersTimeout: Symbol("headers timeout"), + kBodyTimeout: Symbol("body timeout"), + kServerName: Symbol("server name"), + kLocalAddress: Symbol("local address"), + kHost: Symbol("host"), + kNoRef: Symbol("no ref"), + kBodyUsed: Symbol("used"), + kBody: Symbol("abstracted request body"), + kRunning: Symbol("running"), + kBlocking: Symbol("blocking"), + kPending: Symbol("pending"), + kSize: Symbol("size"), + kBusy: Symbol("busy"), + kQueued: Symbol("queued"), + kFree: Symbol("free"), + kConnected: Symbol("connected"), + kClosed: Symbol("closed"), + kNeedDrain: Symbol("need drain"), + kReset: Symbol("reset"), + kDestroyed: Symbol.for("nodejs.stream.destroyed"), + kResume: Symbol("resume"), + kOnError: Symbol("on error"), + kMaxHeadersSize: Symbol("max headers size"), + kRunningIdx: Symbol("running index"), + kPendingIdx: Symbol("pending index"), + kError: Symbol("error"), + kClients: Symbol("clients"), + kClient: Symbol("client"), + kParser: Symbol("parser"), + kOnDestroyed: Symbol("destroy callbacks"), + kPipelining: Symbol("pipelining"), + kSocket: Symbol("socket"), + kHostHeader: Symbol("host header"), + kConnector: Symbol("connector"), + kStrictContentLength: Symbol("strict content length"), + kMaxRedirections: Symbol("maxRedirections"), + kMaxRequests: Symbol("maxRequestsPerClient"), + kProxy: Symbol("proxy agent options"), + kCounter: Symbol("socket request counter"), + kInterceptors: Symbol("dispatch interceptors"), + kMaxResponseSize: Symbol("max response size"), + kHTTP2Session: Symbol("http2Session"), + kHTTP2SessionState: Symbol("http2Session state"), + kRetryHandlerDefaultRetry: Symbol("retry agent default retry"), + kConstruct: Symbol("constructable"), + kListeners: Symbol("listeners"), + kHTTPContext: Symbol("http context"), + kMaxConcurrentStreams: Symbol("max concurrent streams"), + kNoProxyAgent: Symbol("no proxy agent"), + kHttpProxyAgent: Symbol("http proxy agent"), + kHttpsProxyAgent: Symbol("https proxy agent") + }; + } +}); + +// +var require_errors = __commonJS({ + ""(exports, module) { + "use strict"; + var kUndiciError = Symbol.for("undici.error.UND_ERR"); + var UndiciError = class extends Error { + constructor(message) { + super(message); + this.name = "UndiciError"; + this.code = "UND_ERR"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kUndiciError] === true; + } + [kUndiciError] = true; + }; + var kConnectTimeoutError = Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"); + var ConnectTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ConnectTimeoutError"; + this.message = message || "Connect Timeout Error"; + this.code = "UND_ERR_CONNECT_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kConnectTimeoutError] === true; + } + [kConnectTimeoutError] = true; + }; + var kHeadersTimeoutError = Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"); + var HeadersTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersTimeoutError"; + this.message = message || "Headers Timeout Error"; + this.code = "UND_ERR_HEADERS_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHeadersTimeoutError] === true; + } + [kHeadersTimeoutError] = true; + }; + var kHeadersOverflowError = Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"); + var HeadersOverflowError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersOverflowError"; + this.message = message || "Headers Overflow Error"; + this.code = "UND_ERR_HEADERS_OVERFLOW"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHeadersOverflowError] === true; + } + [kHeadersOverflowError] = true; + }; + var kBodyTimeoutError = Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"); + var BodyTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "BodyTimeoutError"; + this.message = message || "Body Timeout Error"; + this.code = "UND_ERR_BODY_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kBodyTimeoutError] === true; + } + [kBodyTimeoutError] = true; + }; + var kResponseStatusCodeError = Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"); + var ResponseStatusCodeError = class extends UndiciError { + constructor(message, statusCode, headers, body) { + super(message); + this.name = "ResponseStatusCodeError"; + this.message = message || "Response Status Code Error"; + this.code = "UND_ERR_RESPONSE_STATUS_CODE"; + this.body = body; + this.status = statusCode; + this.statusCode = statusCode; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseStatusCodeError] === true; + } + [kResponseStatusCodeError] = true; + }; + var kInvalidArgumentError = Symbol.for("undici.error.UND_ERR_INVALID_ARG"); + var InvalidArgumentError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidArgumentError"; + this.message = message || "Invalid Argument Error"; + this.code = "UND_ERR_INVALID_ARG"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInvalidArgumentError] === true; + } + [kInvalidArgumentError] = true; + }; + var kInvalidReturnValueError = Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"); + var InvalidReturnValueError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidReturnValueError"; + this.message = message || "Invalid Return Value Error"; + this.code = "UND_ERR_INVALID_RETURN_VALUE"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInvalidReturnValueError] === true; + } + [kInvalidReturnValueError] = true; + }; + var kAbortError = Symbol.for("undici.error.UND_ERR_ABORT"); + var AbortError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "The operation was aborted"; + this.code = "UND_ERR_ABORT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kAbortError] === true; + } + [kAbortError] = true; + }; + var kRequestAbortedError = Symbol.for("undici.error.UND_ERR_ABORTED"); + var RequestAbortedError = class extends AbortError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "Request aborted"; + this.code = "UND_ERR_ABORTED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestAbortedError] === true; + } + [kRequestAbortedError] = true; + }; + var kInformationalError = Symbol.for("undici.error.UND_ERR_INFO"); + var InformationalError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InformationalError"; + this.message = message || "Request information"; + this.code = "UND_ERR_INFO"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInformationalError] === true; + } + [kInformationalError] = true; + }; + var kRequestContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"); + var RequestContentLengthMismatchError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "RequestContentLengthMismatchError"; + this.message = message || "Request body length does not match content-length header"; + this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestContentLengthMismatchError] === true; + } + [kRequestContentLengthMismatchError] = true; + }; + var kResponseContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"); + var ResponseContentLengthMismatchError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseContentLengthMismatchError"; + this.message = message || "Response body length does not match content-length header"; + this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseContentLengthMismatchError] === true; + } + [kResponseContentLengthMismatchError] = true; + }; + var kClientDestroyedError = Symbol.for("undici.error.UND_ERR_DESTROYED"); + var ClientDestroyedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientDestroyedError"; + this.message = message || "The client is destroyed"; + this.code = "UND_ERR_DESTROYED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kClientDestroyedError] === true; + } + [kClientDestroyedError] = true; + }; + var kClientClosedError = Symbol.for("undici.error.UND_ERR_CLOSED"); + var ClientClosedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientClosedError"; + this.message = message || "The client is closed"; + this.code = "UND_ERR_CLOSED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kClientClosedError] === true; + } + [kClientClosedError] = true; + }; + var kSocketError = Symbol.for("undici.error.UND_ERR_SOCKET"); + var SocketError = class extends UndiciError { + constructor(message, socket) { + super(message); + this.name = "SocketError"; + this.message = message || "Socket error"; + this.code = "UND_ERR_SOCKET"; + this.socket = socket; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kSocketError] === true; + } + [kSocketError] = true; + }; + var kNotSupportedError = Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"); + var NotSupportedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "NotSupportedError"; + this.message = message || "Not supported error"; + this.code = "UND_ERR_NOT_SUPPORTED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kNotSupportedError] === true; + } + [kNotSupportedError] = true; + }; + var kBalancedPoolMissingUpstreamError = Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"); + var BalancedPoolMissingUpstreamError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "MissingUpstreamError"; + this.message = message || "No upstream has been added to the BalancedPool"; + this.code = "UND_ERR_BPL_MISSING_UPSTREAM"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kBalancedPoolMissingUpstreamError] === true; + } + [kBalancedPoolMissingUpstreamError] = true; + }; + var kHTTPParserError = Symbol.for("undici.error.UND_ERR_HTTP_PARSER"); + var HTTPParserError = class extends Error { + constructor(message, code, data) { + super(message); + this.name = "HTTPParserError"; + this.code = code ? `HPE_${code}` : void 0; + this.data = data ? data.toString() : void 0; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHTTPParserError] === true; + } + [kHTTPParserError] = true; + }; + var kResponseExceededMaxSizeError = Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"); + var ResponseExceededMaxSizeError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseExceededMaxSizeError"; + this.message = message || "Response content exceeded max size"; + this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseExceededMaxSizeError] === true; + } + [kResponseExceededMaxSizeError] = true; + }; + var kRequestRetryError = Symbol.for("undici.error.UND_ERR_REQ_RETRY"); + var RequestRetryError = class extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "RequestRetryError"; + this.message = message || "Request retry error"; + this.code = "UND_ERR_REQ_RETRY"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestRetryError] === true; + } + [kRequestRetryError] = true; + }; + var kResponseError = Symbol.for("undici.error.UND_ERR_RESPONSE"); + var ResponseError = class extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "ResponseError"; + this.message = message || "Response error"; + this.code = "UND_ERR_RESPONSE"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseError] === true; + } + [kResponseError] = true; + }; + var kSecureProxyConnectionError = Symbol.for("undici.error.UND_ERR_PRX_TLS"); + var SecureProxyConnectionError = class extends UndiciError { + constructor(cause, message, options) { + super(message, { cause, ...options ?? {} }); + this.name = "SecureProxyConnectionError"; + this.message = message || "Secure Proxy Connection failed"; + this.code = "UND_ERR_PRX_TLS"; + this.cause = cause; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kSecureProxyConnectionError] === true; + } + [kSecureProxyConnectionError] = true; + }; + var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"); + var MessageSizeExceededError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "MessageSizeExceededError"; + this.message = message || "Max decompressed message size exceeded"; + this.code = "UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kMessageSizeExceededError] === true; + } + get [kMessageSizeExceededError]() { + return true; + } + }; + module.exports = { + AbortError, + HTTPParserError, + UndiciError, + HeadersTimeoutError, + HeadersOverflowError, + BodyTimeoutError, + RequestContentLengthMismatchError, + ConnectTimeoutError, + ResponseStatusCodeError, + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError, + ClientDestroyedError, + ClientClosedError, + InformationalError, + SocketError, + NotSupportedError, + ResponseContentLengthMismatchError, + BalancedPoolMissingUpstreamError, + ResponseExceededMaxSizeError, + RequestRetryError, + ResponseError, + SecureProxyConnectionError, + MessageSizeExceededError + }; + } +}); + +// +var require_constants = __commonJS({ + ""(exports, module) { + "use strict"; + var headerNameLowerCasedRecord = {}; + var wellknownHeaderNames = [ + "Accept", + "Accept-Encoding", + "Accept-Language", + "Accept-Ranges", + "Access-Control-Allow-Credentials", + "Access-Control-Allow-Headers", + "Access-Control-Allow-Methods", + "Access-Control-Allow-Origin", + "Access-Control-Expose-Headers", + "Access-Control-Max-Age", + "Access-Control-Request-Headers", + "Access-Control-Request-Method", + "Age", + "Allow", + "Alt-Svc", + "Alt-Used", + "Authorization", + "Cache-Control", + "Clear-Site-Data", + "Connection", + "Content-Disposition", + "Content-Encoding", + "Content-Language", + "Content-Length", + "Content-Location", + "Content-Range", + "Content-Security-Policy", + "Content-Security-Policy-Report-Only", + "Content-Type", + "Cookie", + "Cross-Origin-Embedder-Policy", + "Cross-Origin-Opener-Policy", + "Cross-Origin-Resource-Policy", + "Date", + "Device-Memory", + "Downlink", + "ECT", + "ETag", + "Expect", + "Expect-CT", + "Expires", + "Forwarded", + "From", + "Host", + "If-Match", + "If-Modified-Since", + "If-None-Match", + "If-Range", + "If-Unmodified-Since", + "Keep-Alive", + "Last-Modified", + "Link", + "Location", + "Max-Forwards", + "Origin", + "Permissions-Policy", + "Pragma", + "Proxy-Authenticate", + "Proxy-Authorization", + "RTT", + "Range", + "Referer", + "Referrer-Policy", + "Refresh", + "Retry-After", + "Sec-WebSocket-Accept", + "Sec-WebSocket-Extensions", + "Sec-WebSocket-Key", + "Sec-WebSocket-Protocol", + "Sec-WebSocket-Version", + "Server", + "Server-Timing", + "Service-Worker-Allowed", + "Service-Worker-Navigation-Preload", + "Set-Cookie", + "SourceMap", + "Strict-Transport-Security", + "Supports-Loading-Mode", + "TE", + "Timing-Allow-Origin", + "Trailer", + "Transfer-Encoding", + "Upgrade", + "Upgrade-Insecure-Requests", + "User-Agent", + "Vary", + "Via", + "WWW-Authenticate", + "X-Content-Type-Options", + "X-DNS-Prefetch-Control", + "X-Frame-Options", + "X-Permitted-Cross-Domain-Policies", + "X-Powered-By", + "X-Requested-With", + "X-XSS-Protection" + ]; + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i]; + const lowerCasedKey = key.toLowerCase(); + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey; + } + Object.setPrototypeOf(headerNameLowerCasedRecord, null); + module.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord + }; + } +}); + +// +var require_tree = __commonJS({ + ""(exports, module) { + "use strict"; + var { + wellknownHeaderNames, + headerNameLowerCasedRecord + } = require_constants(); + var TstNode = class _TstNode { + /** @type {any} */ + value = null; + /** @type {null | TstNode} */ + left = null; + /** @type {null | TstNode} */ + middle = null; + /** @type {null | TstNode} */ + right = null; + /** @type {number} */ + code; + /** + * @param {string} key + * @param {any} value + * @param {number} index + */ + constructor(key, value, index) { + if (index === void 0 || index >= key.length) { + throw new TypeError("Unreachable"); + } + const code = this.code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (key.length !== ++index) { + this.middle = new _TstNode(key, value, index); + } else { + this.value = value; + } + } + /** + * @param {string} key + * @param {any} value + */ + add(key, value) { + const length = key.length; + if (length === 0) { + throw new TypeError("Unreachable"); + } + let index = 0; + let node = this; + while (true) { + const code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (node.code === code) { + if (length === ++index) { + node.value = value; + break; + } else if (node.middle !== null) { + node = node.middle; + } else { + node.middle = new _TstNode(key, value, index); + break; + } + } else if (node.code < code) { + if (node.left !== null) { + node = node.left; + } else { + node.left = new _TstNode(key, value, index); + break; + } + } else if (node.right !== null) { + node = node.right; + } else { + node.right = new _TstNode(key, value, index); + break; + } + } + } + /** + * @param {Uint8Array} key + * @return {TstNode | null} + */ + search(key) { + const keylength = key.length; + let index = 0; + let node = this; + while (node !== null && index < keylength) { + let code = key[index]; + if (code <= 90 && code >= 65) { + code |= 32; + } + while (node !== null) { + if (code === node.code) { + if (keylength === ++index) { + return node; + } + node = node.middle; + break; + } + node = node.code < code ? node.left : node.right; + } + } + return null; + } + }; + var TernarySearchTree = class { + /** @type {TstNode | null} */ + node = null; + /** + * @param {string} key + * @param {any} value + * */ + insert(key, value) { + if (this.node === null) { + this.node = new TstNode(key, value, 0); + } else { + this.node.add(key, value); + } + } + /** + * @param {Uint8Array} key + * @return {any} + */ + lookup(key) { + return this.node?.search(key)?.value ?? null; + } + }; + var tree = new TernarySearchTree(); + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]; + tree.insert(key, key); + } + module.exports = { + TernarySearchTree, + tree + }; + } +}); + +// +var require_util = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols(); + var { IncomingMessage } = __require("node:http"); + var stream = __require("node:stream"); + var net = __require("node:net"); + var { Blob: Blob2 } = __require("node:buffer"); + var nodeUtil = __require("node:util"); + var { stringify } = __require("node:querystring"); + var { EventEmitter: EE } = __require("node:events"); + var { InvalidArgumentError } = require_errors(); + var { headerNameLowerCasedRecord } = require_constants(); + var { tree } = require_tree(); + var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v)); + var BodyAsyncIterable = class { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + function wrapRequestBody(body) { + if (isStream(body)) { + if (bodyLength(body) === 0) { + body.on("data", function() { + assert(false); + }); + } + if (typeof body.readableDidRead !== "boolean") { + body[kBodyUsed] = false; + EE.prototype.on.call(body, "data", function() { + this[kBodyUsed] = true; + }); + } + return body; + } else if (body && typeof body.pipeTo === "function") { + return new BodyAsyncIterable(body); + } else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) { + return new BodyAsyncIterable(body); + } else { + return body; + } + } + function nop() { + } + function isStream(obj) { + return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function"; + } + function isBlobLike(object) { + if (object === null) { + return false; + } else if (object instanceof Blob2) { + return true; + } else if (typeof object !== "object") { + return false; + } else { + const sTag = object[Symbol.toStringTag]; + return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function"); + } + } + function buildURL(url, queryParams) { + if (url.includes("?") || url.includes("#")) { + throw new Error('Query params cannot be passed when url already contains "?" or "#".'); + } + const stringified = stringify(queryParams); + if (stringified) { + url += "?" + stringified; + } + return url; + } + function isValidPort(port) { + const value = parseInt(port, 10); + return value === Number(port) && value >= 0 && value <= 65535; + } + function isHttpOrHttpsPrefixed(value) { + return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":"); + } + function parseURL(url) { + if (typeof url === "string") { + url = new URL(url); + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + if (!url || typeof url !== "object") { + throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object."); + } + if (!(url instanceof URL)) { + if (url.port != null && url.port !== "" && isValidPort(url.port) === false) { + throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer."); + } + if (url.path != null && typeof url.path !== "string") { + throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined."); + } + if (url.pathname != null && typeof url.pathname !== "string") { + throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined."); + } + if (url.hostname != null && typeof url.hostname !== "string") { + throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined."); + } + if (url.origin != null && typeof url.origin !== "string") { + throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined."); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80; + let origin = url.origin != null ? url.origin : `${url.protocol || ""}//${url.hostname || ""}:${port}`; + let path = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; + if (origin[origin.length - 1] === "/") { + origin = origin.slice(0, origin.length - 1); + } + if (path && path[0] !== "/") { + path = `/${path}`; + } + return new URL(`${origin}${path}`); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + function parseOrigin(url) { + url = parseURL(url); + if (url.pathname !== "/" || url.search || url.hash) { + throw new InvalidArgumentError("invalid url"); + } + return url; + } + function getHostname(host) { + if (host[0] === "[") { + const idx2 = host.indexOf("]"); + assert(idx2 !== -1); + return host.substring(1, idx2); + } + const idx = host.indexOf(":"); + if (idx === -1) + return host; + return host.substring(0, idx); + } + function getServerName(host) { + if (!host) { + return null; + } + assert(typeof host === "string"); + const servername = getHostname(host); + if (net.isIP(servername)) { + return ""; + } + return servername; + } + function deepClone(obj) { + return JSON.parse(JSON.stringify(obj)); + } + function isAsyncIterable(obj) { + return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function"); + } + function isIterable(obj) { + return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function")); + } + function bodyLength(body) { + if (body == null) { + return 0; + } else if (isStream(body)) { + const state = body._readableState; + return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null; + } else if (isBlobLike(body)) { + return body.size != null ? body.size : null; + } else if (isBuffer(body)) { + return body.byteLength; + } + return null; + } + function isDestroyed(body) { + return body && !!(body.destroyed || body[kDestroyed] || stream.isDestroyed?.(body)); + } + function destroy(stream2, err) { + if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) { + return; + } + if (typeof stream2.destroy === "function") { + if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) { + stream2.socket = null; + } + stream2.destroy(err); + } else if (err) { + queueMicrotask(() => { + stream2.emit("error", err); + }); + } + if (stream2.destroyed !== true) { + stream2[kDestroyed] = true; + } + } + var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/; + function parseKeepAliveTimeout(val) { + const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR); + return m ? parseInt(m[1], 10) * 1e3 : null; + } + function headerNameToString(value) { + return typeof value === "string" ? headerNameLowerCasedRecord[value] ?? value.toLowerCase() : tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + function bufferToLowerCasedHeaderName(value) { + return tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + function parseHeaders(headers, obj) { + if (obj === void 0) + obj = {}; + for (let i = 0; i < headers.length; i += 2) { + const key = headerNameToString(headers[i]); + let val = obj[key]; + if (val) { + if (typeof val === "string") { + val = [val]; + obj[key] = val; + } + val.push(headers[i + 1].toString("utf8")); + } else { + const headersValue = headers[i + 1]; + if (typeof headersValue === "string") { + obj[key] = headersValue; + } else { + obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8"); + } + } + } + if ("content-length" in obj && "content-disposition" in obj) { + obj["content-disposition"] = Buffer.from(obj["content-disposition"]).toString("latin1"); + } + return obj; + } + function parseRawHeaders(headers) { + const len = headers.length; + const ret = new Array(len); + let hasContentLength = false; + let contentDispositionIdx = -1; + let key; + let val; + let kLen = 0; + for (let n = 0; n < headers.length; n += 2) { + key = headers[n]; + val = headers[n + 1]; + typeof key !== "string" && (key = key.toString()); + typeof val !== "string" && (val = val.toString("utf8")); + kLen = key.length; + if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) { + hasContentLength = true; + } else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) { + contentDispositionIdx = n + 1; + } + ret[n] = key; + ret[n + 1] = val; + } + if (hasContentLength && contentDispositionIdx !== -1) { + ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1"); + } + return ret; + } + function isBuffer(buffer) { + return buffer instanceof Uint8Array || Buffer.isBuffer(buffer); + } + function validateHandler(handler, method, upgrade) { + if (!handler || typeof handler !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + if (typeof handler.onConnect !== "function") { + throw new InvalidArgumentError("invalid onConnect method"); + } + if (typeof handler.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + if (typeof handler.onBodySent !== "function" && handler.onBodySent !== void 0) { + throw new InvalidArgumentError("invalid onBodySent method"); + } + if (upgrade || method === "CONNECT") { + if (typeof handler.onUpgrade !== "function") { + throw new InvalidArgumentError("invalid onUpgrade method"); + } + } else { + if (typeof handler.onHeaders !== "function") { + throw new InvalidArgumentError("invalid onHeaders method"); + } + if (typeof handler.onData !== "function") { + throw new InvalidArgumentError("invalid onData method"); + } + if (typeof handler.onComplete !== "function") { + throw new InvalidArgumentError("invalid onComplete method"); + } + } + } + function isDisturbed(body) { + return !!(body && (stream.isDisturbed(body) || body[kBodyUsed])); + } + function isErrored(body) { + return !!(body && stream.isErrored(body)); + } + function isReadable(body) { + return !!(body && stream.isReadable(body)); + } + function getSocketInfo(socket) { + return { + localAddress: socket.localAddress, + localPort: socket.localPort, + remoteAddress: socket.remoteAddress, + remotePort: socket.remotePort, + remoteFamily: socket.remoteFamily, + timeout: socket.timeout, + bytesWritten: socket.bytesWritten, + bytesRead: socket.bytesRead + }; + } + function ReadableStreamFrom(iterable) { + let iterator; + return new ReadableStream( + { + async start() { + iterator = iterable[Symbol.asyncIterator](); + }, + async pull(controller) { + const { done, value } = await iterator.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + const buf = Buffer.isBuffer(value) ? value : Buffer.from(value); + if (buf.byteLength) { + controller.enqueue(new Uint8Array(buf)); + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator.return(); + }, + type: "bytes" + } + ); + } + function isFormDataLike(object) { + return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData"; + } + function addAbortListener(signal, listener) { + if ("addEventListener" in signal) { + signal.addEventListener("abort", listener, { once: true }); + return () => signal.removeEventListener("abort", listener); + } + signal.addListener("abort", listener); + return () => signal.removeListener("abort", listener); + } + var hasToWellFormed = typeof String.prototype.toWellFormed === "function"; + var hasIsWellFormed = typeof String.prototype.isWellFormed === "function"; + function toUSVString(val) { + return hasToWellFormed ? `${val}`.toWellFormed() : nodeUtil.toUSVString(val); + } + function isUSVString(val) { + return hasIsWellFormed ? `${val}`.isWellFormed() : toUSVString(val) === `${val}`; + } + function isTokenCharCode(c) { + switch (c) { + case 34: + case 40: + case 41: + case 44: + case 47: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 91: + case 92: + case 93: + case 123: + case 125: + return false; + default: + return c >= 33 && c <= 126; + } + } + function isValidHTTPToken(characters) { + if (characters.length === 0) { + return false; + } + for (let i = 0; i < characters.length; ++i) { + if (!isTokenCharCode(characters.charCodeAt(i))) { + return false; + } + } + return true; + } + var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; + function isValidHeaderValue(characters) { + return !headerCharRegex.test(characters); + } + function parseRangeHeader(range) { + if (range == null || range === "") + return { start: 0, end: null, size: null }; + const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null; + return m ? { + start: parseInt(m[1]), + end: m[2] ? parseInt(m[2]) : null, + size: m[3] ? parseInt(m[3]) : null + } : null; + } + function addListener(obj, name, listener) { + const listeners = obj[kListeners] ??= []; + listeners.push([name, listener]); + obj.on(name, listener); + return obj; + } + function removeAllListeners(obj) { + for (const [name, listener] of obj[kListeners] ?? []) { + obj.removeListener(name, listener); + } + obj[kListeners] = null; + } + function errorRequest(client, request, err) { + try { + request.onError(err); + assert(request.aborted); + } catch (err2) { + client.emit("error", err2); + } + } + var kEnumerableProperty = /* @__PURE__ */ Object.create(null); + kEnumerableProperty.enumerable = true; + var normalizedMethodRecordsBase = { + delete: "DELETE", + DELETE: "DELETE", + get: "GET", + GET: "GET", + head: "HEAD", + HEAD: "HEAD", + options: "OPTIONS", + OPTIONS: "OPTIONS", + post: "POST", + POST: "POST", + put: "PUT", + PUT: "PUT" + }; + var normalizedMethodRecords = { + ...normalizedMethodRecordsBase, + patch: "patch", + PATCH: "PATCH" + }; + Object.setPrototypeOf(normalizedMethodRecordsBase, null); + Object.setPrototypeOf(normalizedMethodRecords, null); + module.exports = { + kEnumerableProperty, + nop, + isDisturbed, + isErrored, + isReadable, + toUSVString, + isUSVString, + isBlobLike, + parseOrigin, + parseURL, + getServerName, + isStream, + isIterable, + isAsyncIterable, + isDestroyed, + headerNameToString, + bufferToLowerCasedHeaderName, + addListener, + removeAllListeners, + errorRequest, + parseRawHeaders, + parseHeaders, + parseKeepAliveTimeout, + destroy, + bodyLength, + deepClone, + ReadableStreamFrom, + isBuffer, + validateHandler, + getSocketInfo, + isFormDataLike, + buildURL, + addAbortListener, + isValidHTTPToken, + isValidHeaderValue, + isTokenCharCode, + parseRangeHeader, + normalizedMethodRecordsBase, + normalizedMethodRecords, + isValidPort, + isHttpOrHttpsPrefixed, + nodeMajor, + nodeMinor, + safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"], + wrapRequestBody + }; + } +}); + +// +var require_diagnostics = __commonJS({ + ""(exports, module) { + "use strict"; + var diagnosticsChannel = __require("node:diagnostics_channel"); + var util = __require("node:util"); + var undiciDebugLog = util.debuglog("undici"); + var fetchDebuglog = util.debuglog("fetch"); + var websocketDebuglog = util.debuglog("websocket"); + var isClientSet = false; + var channels = { + // Client + beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"), + connected: diagnosticsChannel.channel("undici:client:connected"), + connectError: diagnosticsChannel.channel("undici:client:connectError"), + sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"), + // Request + create: diagnosticsChannel.channel("undici:request:create"), + bodySent: diagnosticsChannel.channel("undici:request:bodySent"), + headers: diagnosticsChannel.channel("undici:request:headers"), + trailers: diagnosticsChannel.channel("undici:request:trailers"), + error: diagnosticsChannel.channel("undici:request:error"), + // WebSocket + open: diagnosticsChannel.channel("undici:websocket:open"), + close: diagnosticsChannel.channel("undici:websocket:close"), + socketError: diagnosticsChannel.channel("undici:websocket:socket_error"), + ping: diagnosticsChannel.channel("undici:websocket:ping"), + pong: diagnosticsChannel.channel("undici:websocket:pong") + }; + if (undiciDebugLog.enabled || fetchDebuglog.enabled) { + const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error: error2 + } = evt; + debuglog( + "connection to %s using %s%s errored - %s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version, + error2.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path); + }); + diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { + const { + request: { method, path, origin }, + response: { statusCode } + } = evt; + debuglog( + "received response to %s %s/%s - HTTP %d", + method, + origin, + path, + statusCode + ); + }); + diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { + const { + request: { method, path, origin } + } = evt; + debuglog("trailers received from %s %s/%s", method, origin, path); + }); + diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { + const { + request: { method, path, origin }, + error: error2 + } = evt; + debuglog( + "request to %s %s/%s errored - %s", + method, + origin, + path, + error2.message + ); + }); + isClientSet = true; + } + if (websocketDebuglog.enabled) { + if (!isClientSet) { + const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error: error2 + } = evt; + debuglog( + "connection to %s%s using %s%s errored - %s", + host, + port ? `:${port}` : "", + protocol, + version, + error2.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path); + }); + } + diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { + const { + address: { address, port } + } = evt; + websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : ""); + }); + diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => { + const { websocket, code, reason } = evt; + websocketDebuglog( + "closed connection to %s - %s %s", + websocket.url, + code, + reason + ); + }); + diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => { + websocketDebuglog("connection errored - %s", err.message); + }); + diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => { + websocketDebuglog("ping received"); + }); + diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => { + websocketDebuglog("pong received"); + }); + } + module.exports = { + channels + }; + } +}); + +// +var require_request = __commonJS({ + ""(exports, module) { + "use strict"; + var { + InvalidArgumentError, + NotSupportedError + } = require_errors(); + var assert = __require("node:assert"); + var { + isValidHTTPToken, + isValidHeaderValue, + isStream, + destroy, + isBuffer, + isFormDataLike, + isIterable, + isBlobLike, + buildURL, + validateHandler, + getServerName, + normalizedMethodRecords + } = require_util(); + var { channels } = require_diagnostics(); + var { headerNameLowerCasedRecord } = require_constants(); + var invalidPathRegex = /[^\u0021-\u00ff]/; + var kHandler = Symbol("handler"); + var Request = class { + constructor(origin, { + path, + method, + body, + headers, + query, + idempotent, + blocking, + upgrade, + headersTimeout, + bodyTimeout, + reset, + throwOnError, + expectContinue, + servername + }, handler) { + if (typeof path !== "string") { + throw new InvalidArgumentError("path must be a string"); + } else if (path[0] !== "/" && !(path.startsWith("http://") || path.startsWith("https://")) && method !== "CONNECT") { + throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); + } else if (invalidPathRegex.test(path)) { + throw new InvalidArgumentError("invalid request path"); + } + if (typeof method !== "string") { + throw new InvalidArgumentError("method must be a string"); + } else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) { + throw new InvalidArgumentError("invalid request method"); + } + if (upgrade && typeof upgrade !== "string") { + throw new InvalidArgumentError("upgrade must be a string"); + } + if (upgrade && !isValidHeaderValue(upgrade)) { + throw new InvalidArgumentError("invalid upgrade header"); + } + if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("invalid headersTimeout"); + } + if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("invalid bodyTimeout"); + } + if (reset != null && typeof reset !== "boolean") { + throw new InvalidArgumentError("invalid reset"); + } + if (expectContinue != null && typeof expectContinue !== "boolean") { + throw new InvalidArgumentError("invalid expectContinue"); + } + this.headersTimeout = headersTimeout; + this.bodyTimeout = bodyTimeout; + this.throwOnError = throwOnError === true; + this.method = method; + this.abort = null; + if (body == null) { + this.body = null; + } else if (isStream(body)) { + this.body = body; + const rState = this.body._readableState; + if (!rState || !rState.autoDestroy) { + this.endHandler = function autoDestroy() { + destroy(this); + }; + this.body.on("end", this.endHandler); + } + this.errorHandler = (err) => { + if (this.abort) { + this.abort(err); + } else { + this.error = err; + } + }; + this.body.on("error", this.errorHandler); + } else if (isBuffer(body)) { + this.body = body.byteLength ? body : null; + } else if (ArrayBuffer.isView(body)) { + this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null; + } else if (body instanceof ArrayBuffer) { + this.body = body.byteLength ? Buffer.from(body) : null; + } else if (typeof body === "string") { + this.body = body.length ? Buffer.from(body) : null; + } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) { + this.body = body; + } else { + throw new InvalidArgumentError("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable"); + } + this.completed = false; + this.aborted = false; + this.upgrade = upgrade || null; + this.path = query ? buildURL(path, query) : path; + this.origin = origin; + this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent; + this.blocking = blocking == null ? false : blocking; + this.reset = reset == null ? null : reset; + this.host = null; + this.contentLength = null; + this.contentType = null; + this.headers = []; + this.expectContinue = expectContinue != null ? expectContinue : false; + if (Array.isArray(headers)) { + if (headers.length % 2 !== 0) { + throw new InvalidArgumentError("headers array must be even"); + } + for (let i = 0; i < headers.length; i += 2) { + processHeader(this, headers[i], headers[i + 1]); + } + } else if (headers && typeof headers === "object") { + if (headers[Symbol.iterator]) { + for (const header of headers) { + if (!Array.isArray(header) || header.length !== 2) { + throw new InvalidArgumentError("headers must be in key-value pair format"); + } + processHeader(this, header[0], header[1]); + } + } else { + const keys = Object.keys(headers); + for (let i = 0; i < keys.length; ++i) { + processHeader(this, keys[i], headers[keys[i]]); + } + } + } else if (headers != null) { + throw new InvalidArgumentError("headers must be an object or an array"); + } + validateHandler(handler, method, upgrade); + this.servername = servername || getServerName(this.host); + this[kHandler] = handler; + if (channels.create.hasSubscribers) { + channels.create.publish({ request: this }); + } + } + onBodySent(chunk) { + if (this[kHandler].onBodySent) { + try { + return this[kHandler].onBodySent(chunk); + } catch (err) { + this.abort(err); + } + } + } + onRequestSent() { + if (channels.bodySent.hasSubscribers) { + channels.bodySent.publish({ request: this }); + } + if (this[kHandler].onRequestSent) { + try { + return this[kHandler].onRequestSent(); + } catch (err) { + this.abort(err); + } + } + } + onConnect(abort) { + assert(!this.aborted); + assert(!this.completed); + if (this.error) { + abort(this.error); + } else { + this.abort = abort; + return this[kHandler].onConnect(abort); + } + } + onResponseStarted() { + return this[kHandler].onResponseStarted?.(); + } + onHeaders(statusCode, headers, resume, statusText) { + assert(!this.aborted); + assert(!this.completed); + if (channels.headers.hasSubscribers) { + channels.headers.publish({ request: this, response: { statusCode, headers, statusText } }); + } + try { + return this[kHandler].onHeaders(statusCode, headers, resume, statusText); + } catch (err) { + this.abort(err); + } + } + onData(chunk) { + assert(!this.aborted); + assert(!this.completed); + try { + return this[kHandler].onData(chunk); + } catch (err) { + this.abort(err); + return false; + } + } + onUpgrade(statusCode, headers, socket) { + assert(!this.aborted); + assert(!this.completed); + return this[kHandler].onUpgrade(statusCode, headers, socket); + } + onComplete(trailers) { + this.onFinally(); + assert(!this.aborted); + this.completed = true; + if (channels.trailers.hasSubscribers) { + channels.trailers.publish({ request: this, trailers }); + } + try { + return this[kHandler].onComplete(trailers); + } catch (err) { + this.onError(err); + } + } + onError(error2) { + this.onFinally(); + if (channels.error.hasSubscribers) { + channels.error.publish({ request: this, error: error2 }); + } + if (this.aborted) { + return; + } + this.aborted = true; + return this[kHandler].onError(error2); + } + onFinally() { + if (this.errorHandler) { + this.body.off("error", this.errorHandler); + this.errorHandler = null; + } + if (this.endHandler) { + this.body.off("end", this.endHandler); + this.endHandler = null; + } + } + addHeader(key, value) { + processHeader(this, key, value); + return this; + } + }; + function processHeader(request, key, val) { + if (val && (typeof val === "object" && !Array.isArray(val))) { + throw new InvalidArgumentError(`invalid ${key} header`); + } else if (val === void 0) { + return; + } + let headerName = headerNameLowerCasedRecord[key]; + if (headerName === void 0) { + headerName = key.toLowerCase(); + if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) { + throw new InvalidArgumentError("invalid header key"); + } + } + if (Array.isArray(val)) { + const arr = []; + for (let i = 0; i < val.length; i++) { + if (typeof val[i] === "string") { + if (!isValidHeaderValue(val[i])) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + arr.push(val[i]); + } else if (val[i] === null) { + arr.push(""); + } else if (typeof val[i] === "object") { + throw new InvalidArgumentError(`invalid ${key} header`); + } else { + arr.push(`${val[i]}`); + } + } + val = arr; + } else if (typeof val === "string") { + if (!isValidHeaderValue(val)) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + } else if (val === null) { + val = ""; + } else { + val = `${val}`; + } + if (headerName === "host") { + if (request.host !== null) { + throw new InvalidArgumentError("duplicate host header"); + } + if (typeof val !== "string") { + throw new InvalidArgumentError("invalid host header"); + } + request.host = val; + } else if (headerName === "content-length") { + if (request.contentLength !== null) { + throw new InvalidArgumentError("duplicate content-length header"); + } + request.contentLength = parseInt(val, 10); + if (!Number.isFinite(request.contentLength)) { + throw new InvalidArgumentError("invalid content-length header"); + } + } else if (request.contentType === null && headerName === "content-type") { + request.contentType = val; + request.headers.push(key, val); + } else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") { + throw new InvalidArgumentError(`invalid ${headerName} header`); + } else if (headerName === "connection") { + const value = typeof val === "string" ? val.toLowerCase() : null; + if (value !== "close" && value !== "keep-alive") { + throw new InvalidArgumentError("invalid connection header"); + } + if (value === "close") { + request.reset = true; + } + } else if (headerName === "expect") { + throw new NotSupportedError("expect header not supported"); + } else { + request.headers.push(key, val); + } + } + module.exports = Request; + } +}); + +// +var require_dispatcher = __commonJS({ + ""(exports, module) { + "use strict"; + var EventEmitter = __require("node:events"); + var Dispatcher = class extends EventEmitter { + dispatch() { + throw new Error("not implemented"); + } + close() { + throw new Error("not implemented"); + } + destroy() { + throw new Error("not implemented"); + } + compose(...args) { + const interceptors = Array.isArray(args[0]) ? args[0] : args; + let dispatch = this.dispatch.bind(this); + for (const interceptor of interceptors) { + if (interceptor == null) { + continue; + } + if (typeof interceptor !== "function") { + throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`); + } + dispatch = interceptor(dispatch); + if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) { + throw new TypeError("invalid interceptor"); + } + } + return new ComposedDispatcher(this, dispatch); + } + }; + var ComposedDispatcher = class extends Dispatcher { + #dispatcher = null; + #dispatch = null; + constructor(dispatcher, dispatch) { + super(); + this.#dispatcher = dispatcher; + this.#dispatch = dispatch; + } + dispatch(...args) { + this.#dispatch(...args); + } + close(...args) { + return this.#dispatcher.close(...args); + } + destroy(...args) { + return this.#dispatcher.destroy(...args); + } + }; + module.exports = Dispatcher; + } +}); + +// +var require_dispatcher_base = __commonJS({ + ""(exports, module) { + "use strict"; + var Dispatcher = require_dispatcher(); + var { + ClientDestroyedError, + ClientClosedError, + InvalidArgumentError + } = require_errors(); + var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols(); + var kOnDestroyed = Symbol("onDestroyed"); + var kOnClosed = Symbol("onClosed"); + var kInterceptedDispatch = Symbol("Intercepted Dispatch"); + var kWebSocketOptions = Symbol("webSocketOptions"); + var DispatcherBase = class extends Dispatcher { + constructor(opts) { + super(); + this[kDestroyed] = false; + this[kOnDestroyed] = null; + this[kClosed] = false; + this[kOnClosed] = []; + this[kWebSocketOptions] = opts?.webSocket ?? {}; + } + get webSocketOptions() { + return { + maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024 + }; + } + get destroyed() { + return this[kDestroyed]; + } + get closed() { + return this[kClosed]; + } + get interceptors() { + return this[kInterceptors]; + } + set interceptors(newInterceptors) { + if (newInterceptors) { + for (let i = newInterceptors.length - 1; i >= 0; i--) { + const interceptor = this[kInterceptors][i]; + if (typeof interceptor !== "function") { + throw new InvalidArgumentError("interceptor must be an function"); + } + } + } + this[kInterceptors] = newInterceptors; + } + close(callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + this.close((err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + queueMicrotask(() => callback(new ClientDestroyedError(), null)); + return; + } + if (this[kClosed]) { + if (this[kOnClosed]) { + this[kOnClosed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + this[kClosed] = true; + this[kOnClosed].push(callback); + const onClosed = () => { + const callbacks = this[kOnClosed]; + this[kOnClosed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }; + this[kClose]().then(() => this.destroy()).then(() => { + queueMicrotask(onClosed); + }); + } + destroy(err, callback) { + if (typeof err === "function") { + callback = err; + err = null; + } + if (callback === void 0) { + return new Promise((resolve, reject) => { + this.destroy(err, (err2, data) => { + return err2 ? ( + /* istanbul ignore next: should never error */ + reject(err2) + ) : resolve(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + if (this[kOnDestroyed]) { + this[kOnDestroyed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + if (!err) { + err = new ClientDestroyedError(); + } + this[kDestroyed] = true; + this[kOnDestroyed] = this[kOnDestroyed] || []; + this[kOnDestroyed].push(callback); + const onDestroyed = () => { + const callbacks = this[kOnDestroyed]; + this[kOnDestroyed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }; + this[kDestroy](err).then(() => { + queueMicrotask(onDestroyed); + }); + } + [kInterceptedDispatch](opts, handler) { + if (!this[kInterceptors] || this[kInterceptors].length === 0) { + this[kInterceptedDispatch] = this[kDispatch]; + return this[kDispatch](opts, handler); + } + let dispatch = this[kDispatch].bind(this); + for (let i = this[kInterceptors].length - 1; i >= 0; i--) { + dispatch = this[kInterceptors][i](dispatch); + } + this[kInterceptedDispatch] = dispatch; + return dispatch(opts, handler); + } + dispatch(opts, handler) { + if (!handler || typeof handler !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + try { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object."); + } + if (this[kDestroyed] || this[kOnDestroyed]) { + throw new ClientDestroyedError(); + } + if (this[kClosed]) { + throw new ClientClosedError(); + } + return this[kInterceptedDispatch](opts, handler); + } catch (err) { + if (typeof handler.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + handler.onError(err); + return false; + } + } + }; + module.exports = DispatcherBase; + } +}); + +// +var require_timers = __commonJS({ + ""(exports, module) { + "use strict"; + var fastNow = 0; + var RESOLUTION_MS = 1e3; + var TICK_MS = (RESOLUTION_MS >> 1) - 1; + var fastNowTimeout; + var kFastTimer = Symbol("kFastTimer"); + var fastTimers = []; + var NOT_IN_LIST = -2; + var TO_BE_CLEARED = -1; + var PENDING = 0; + var ACTIVE = 1; + function onTick() { + fastNow += TICK_MS; + let idx = 0; + let len = fastTimers.length; + while (idx < len) { + const timer = fastTimers[idx]; + if (timer._state === PENDING) { + timer._idleStart = fastNow - TICK_MS; + timer._state = ACTIVE; + } else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) { + timer._state = TO_BE_CLEARED; + timer._idleStart = -1; + timer._onTimeout(timer._timerArg); + } + if (timer._state === TO_BE_CLEARED) { + timer._state = NOT_IN_LIST; + if (--len !== 0) { + fastTimers[idx] = fastTimers[len]; + } + } else { + ++idx; + } + } + fastTimers.length = len; + if (fastTimers.length !== 0) { + refreshTimeout(); + } + } + function refreshTimeout() { + if (fastNowTimeout) { + fastNowTimeout.refresh(); + } else { + clearTimeout(fastNowTimeout); + fastNowTimeout = setTimeout(onTick, TICK_MS); + if (fastNowTimeout.unref) { + fastNowTimeout.unref(); + } + } + } + var FastTimer = class { + [kFastTimer] = true; + /** + * The state of the timer, which can be one of the following: + * - NOT_IN_LIST (-2) + * - TO_BE_CLEARED (-1) + * - PENDING (0) + * - ACTIVE (1) + * + * @type {-2|-1|0|1} + * @private + */ + _state = NOT_IN_LIST; + /** + * The number of milliseconds to wait before calling the callback. + * + * @type {number} + * @private + */ + _idleTimeout = -1; + /** + * The time in milliseconds when the timer was started. This value is used to + * calculate when the timer should expire. + * + * @type {number} + * @default -1 + * @private + */ + _idleStart = -1; + /** + * The function to be executed when the timer expires. + * @type {Function} + * @private + */ + _onTimeout; + /** + * The argument to be passed to the callback when the timer expires. + * + * @type {*} + * @private + */ + _timerArg; + /** + * @constructor + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should wait + * before the specified function or code is executed. + * @param {*} arg + */ + constructor(callback, delay, arg) { + this._onTimeout = callback; + this._idleTimeout = delay; + this._timerArg = arg; + this.refresh(); + } + /** + * Sets the timer's start time to the current time, and reschedules the timer + * to call its callback at the previously specified duration adjusted to the + * current time. + * Using this on a timer that has already called its callback will reactivate + * the timer. + * + * @returns {void} + */ + refresh() { + if (this._state === NOT_IN_LIST) { + fastTimers.push(this); + } + if (!fastNowTimeout || fastTimers.length === 1) { + refreshTimeout(); + } + this._state = PENDING; + } + /** + * The `clear` method cancels the timer, preventing it from executing. + * + * @returns {void} + * @private + */ + clear() { + this._state = TO_BE_CLEARED; + this._idleStart = -1; + } + }; + module.exports = { + /** + * The setTimeout() method sets a timer which executes a function once the + * timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {NodeJS.Timeout|FastTimer} + */ + setTimeout(callback, delay, arg) { + return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated Timer previously created + * by calling setTimeout. + * + * @param {NodeJS.Timeout|FastTimer} timeout + */ + clearTimeout(timeout) { + if (timeout[kFastTimer]) { + timeout.clear(); + } else { + clearTimeout(timeout); + } + }, + /** + * The setFastTimeout() method sets a fastTimer which executes a function once + * the timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {FastTimer} + */ + setFastTimeout(callback, delay, arg) { + return new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated FastTimer previously + * created by calling setFastTimeout. + * + * @param {FastTimer} timeout + */ + clearFastTimeout(timeout) { + timeout.clear(); + }, + /** + * The now method returns the value of the internal fast timer clock. + * + * @returns {number} + */ + now() { + return fastNow; + }, + /** + * Trigger the onTick function to process the fastTimers array. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + * @param {number} [delay=0] The delay in milliseconds to add to the now value. + */ + tick(delay = 0) { + fastNow += delay - RESOLUTION_MS + 1; + onTick(); + onTick(); + }, + /** + * Reset FastTimers. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + reset() { + fastNow = 0; + fastTimers.length = 0; + clearTimeout(fastNowTimeout); + fastNowTimeout = null; + }, + /** + * Exporting for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + kFastTimer + }; + } +}); + +// +var require_connect = __commonJS({ + ""(exports, module) { + "use strict"; + var net = __require("node:net"); + var assert = __require("node:assert"); + var util = require_util(); + var { InvalidArgumentError, ConnectTimeoutError } = require_errors(); + var timers = require_timers(); + function noop() { + } + var tls; + var SessionCache; + if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) { + SessionCache = class WeakSessionCache { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + this._sessionRegistry = new global.FinalizationRegistry((key) => { + if (this._sessionCache.size < this._maxCachedSessions) { + return; + } + const ref = this._sessionCache.get(key); + if (ref !== void 0 && ref.deref() === void 0) { + this._sessionCache.delete(key); + } + }); + } + get(sessionKey) { + const ref = this._sessionCache.get(sessionKey); + return ref ? ref.deref() : null; + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + this._sessionCache.set(sessionKey, new WeakRef(session)); + this._sessionRegistry.register(session, sessionKey); + } + }; + } else { + SessionCache = class SimpleSessionCache { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + } + get(sessionKey) { + return this._sessionCache.get(sessionKey); + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + if (this._sessionCache.size >= this._maxCachedSessions) { + const { value: oldestKey } = this._sessionCache.keys().next(); + this._sessionCache.delete(oldestKey); + } + this._sessionCache.set(sessionKey, session); + } + }; + } + function buildConnector({ allowH2, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) { + if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { + throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero"); + } + const options = { path: socketPath, ...opts }; + const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions); + timeout = timeout == null ? 1e4 : timeout; + allowH2 = allowH2 != null ? allowH2 : false; + return function connect({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) { + let socket; + if (protocol === "https:") { + if (!tls) { + tls = __require("node:tls"); + } + servername = servername || options.servername || util.getServerName(host) || null; + const sessionKey = servername || hostname; + assert(sessionKey); + const session = customSession || sessionCache.get(sessionKey) || null; + port = port || 443; + socket = tls.connect({ + highWaterMark: 16384, + // TLS in node can't have bigger HWM anyway... + ...options, + servername, + session, + localAddress, + // TODO(HTTP/2): Add support for h2c + ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"], + socket: httpSocket, + // upgrade socket connection + port, + host: hostname + }); + socket.on("session", function(session2) { + sessionCache.set(sessionKey, session2); + }); + } else { + assert(!httpSocket, "httpSocket can only be sent on TLS update"); + port = port || 80; + socket = net.connect({ + highWaterMark: 64 * 1024, + // Same as nodejs fs streams. + ...options, + localAddress, + port, + host: hostname + }); + } + if (options.keepAlive == null || options.keepAlive) { + const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay; + socket.setKeepAlive(true, keepAliveInitialDelay); + } + const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port }); + socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(null, this); + } + }).on("error", function(err) { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(err); + } + }); + return socket; + }; + } + var setupConnectTimeout = process.platform === "win32" ? (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop; + } + let s1 = null; + let s2 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts)); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + clearImmediate(s2); + }; + } : (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop; + } + let s1 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + onConnectTimeout(socketWeakRef.deref(), opts); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + }; + }; + function onConnectTimeout(socket, opts) { + if (socket == null) { + return; + } + let message = "Connect Timeout Error"; + if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) { + message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`; + } else { + message += ` (attempted address: ${opts.hostname}:${opts.port},`; + } + message += ` timeout: ${opts.timeout}ms)`; + util.destroy(socket, new ConnectTimeoutError(message)); + } + module.exports = buildConnector; + } +}); + +// +var require_utils = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.enumToMap = void 0; + function enumToMap(obj) { + const res = {}; + Object.keys(obj).forEach((key) => { + const value = obj[key]; + if (typeof value === "number") { + res[key] = value; + } + }); + return res; + } + exports.enumToMap = enumToMap; + } +}); + +// +var require_constants2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0; + var utils_1 = require_utils(); + var ERROR; + (function(ERROR2) { + ERROR2[ERROR2["OK"] = 0] = "OK"; + ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL"; + ERROR2[ERROR2["STRICT"] = 2] = "STRICT"; + ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED"; + ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; + ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; + ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD"; + ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL"; + ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; + ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION"; + ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; + ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; + ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; + ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS"; + ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; + ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; + ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; + ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; + ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; + ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; + ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; + ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED"; + ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; + ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; + ERROR2[ERROR2["USER"] = 24] = "USER"; + })(ERROR = exports.ERROR || (exports.ERROR = {})); + var TYPE; + (function(TYPE2) { + TYPE2[TYPE2["BOTH"] = 0] = "BOTH"; + TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST"; + TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE"; + })(TYPE = exports.TYPE || (exports.TYPE = {})); + var FLAGS; + (function(FLAGS2) { + FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; + FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; + FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; + FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED"; + FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE"; + FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; + FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY"; + FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING"; + FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; + })(FLAGS = exports.FLAGS || (exports.FLAGS = {})); + var LENIENT_FLAGS; + (function(LENIENT_FLAGS2) { + LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS"; + LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; + LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; + })(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); + var METHODS; + (function(METHODS2) { + METHODS2[METHODS2["DELETE"] = 0] = "DELETE"; + METHODS2[METHODS2["GET"] = 1] = "GET"; + METHODS2[METHODS2["HEAD"] = 2] = "HEAD"; + METHODS2[METHODS2["POST"] = 3] = "POST"; + METHODS2[METHODS2["PUT"] = 4] = "PUT"; + METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT"; + METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS"; + METHODS2[METHODS2["TRACE"] = 7] = "TRACE"; + METHODS2[METHODS2["COPY"] = 8] = "COPY"; + METHODS2[METHODS2["LOCK"] = 9] = "LOCK"; + METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL"; + METHODS2[METHODS2["MOVE"] = 11] = "MOVE"; + METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND"; + METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH"; + METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH"; + METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK"; + METHODS2[METHODS2["BIND"] = 16] = "BIND"; + METHODS2[METHODS2["REBIND"] = 17] = "REBIND"; + METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND"; + METHODS2[METHODS2["ACL"] = 19] = "ACL"; + METHODS2[METHODS2["REPORT"] = 20] = "REPORT"; + METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY"; + METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT"; + METHODS2[METHODS2["MERGE"] = 23] = "MERGE"; + METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH"; + METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY"; + METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE"; + METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; + METHODS2[METHODS2["PATCH"] = 28] = "PATCH"; + METHODS2[METHODS2["PURGE"] = 29] = "PURGE"; + METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR"; + METHODS2[METHODS2["LINK"] = 31] = "LINK"; + METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK"; + METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE"; + METHODS2[METHODS2["PRI"] = 34] = "PRI"; + METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE"; + METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE"; + METHODS2[METHODS2["SETUP"] = 37] = "SETUP"; + METHODS2[METHODS2["PLAY"] = 38] = "PLAY"; + METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE"; + METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN"; + METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER"; + METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER"; + METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT"; + METHODS2[METHODS2["RECORD"] = 44] = "RECORD"; + METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH"; + })(METHODS = exports.METHODS || (exports.METHODS = {})); + exports.METHODS_HTTP = [ + METHODS.DELETE, + METHODS.GET, + METHODS.HEAD, + METHODS.POST, + METHODS.PUT, + METHODS.CONNECT, + METHODS.OPTIONS, + METHODS.TRACE, + METHODS.COPY, + METHODS.LOCK, + METHODS.MKCOL, + METHODS.MOVE, + METHODS.PROPFIND, + METHODS.PROPPATCH, + METHODS.SEARCH, + METHODS.UNLOCK, + METHODS.BIND, + METHODS.REBIND, + METHODS.UNBIND, + METHODS.ACL, + METHODS.REPORT, + METHODS.MKACTIVITY, + METHODS.CHECKOUT, + METHODS.MERGE, + METHODS["M-SEARCH"], + METHODS.NOTIFY, + METHODS.SUBSCRIBE, + METHODS.UNSUBSCRIBE, + METHODS.PATCH, + METHODS.PURGE, + METHODS.MKCALENDAR, + METHODS.LINK, + METHODS.UNLINK, + METHODS.PRI, + // TODO(indutny): should we allow it with HTTP? + METHODS.SOURCE + ]; + exports.METHODS_ICE = [ + METHODS.SOURCE + ]; + exports.METHODS_RTSP = [ + METHODS.OPTIONS, + METHODS.DESCRIBE, + METHODS.ANNOUNCE, + METHODS.SETUP, + METHODS.PLAY, + METHODS.PAUSE, + METHODS.TEARDOWN, + METHODS.GET_PARAMETER, + METHODS.SET_PARAMETER, + METHODS.REDIRECT, + METHODS.RECORD, + METHODS.FLUSH, + // For AirPlay + METHODS.GET, + METHODS.POST + ]; + exports.METHOD_MAP = utils_1.enumToMap(METHODS); + exports.H_METHOD_MAP = {}; + Object.keys(exports.METHOD_MAP).forEach((key) => { + if (/^H/.test(key)) { + exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key]; + } + }); + var FINISH; + (function(FINISH2) { + FINISH2[FINISH2["SAFE"] = 0] = "SAFE"; + FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; + FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE"; + })(FINISH = exports.FINISH || (exports.FINISH = {})); + exports.ALPHA = []; + for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { + exports.ALPHA.push(String.fromCharCode(i)); + exports.ALPHA.push(String.fromCharCode(i + 32)); + } + exports.NUM_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9 + }; + exports.HEX_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9, + A: 10, + B: 11, + C: 12, + D: 13, + E: 14, + F: 15, + a: 10, + b: 11, + c: 12, + d: 13, + e: 14, + f: 15 + }; + exports.NUM = [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ]; + exports.ALPHANUM = exports.ALPHA.concat(exports.NUM); + exports.MARK = ["-", "_", ".", "!", "~", "*", "'", "(", ")"]; + exports.USERINFO_CHARS = exports.ALPHANUM.concat(exports.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]); + exports.STRICT_URL_CHAR = [ + "!", + '"', + "$", + "%", + "&", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + ":", + ";", + "<", + "=", + ">", + "@", + "[", + "\\", + "]", + "^", + "_", + "`", + "{", + "|", + "}", + "~" + ].concat(exports.ALPHANUM); + exports.URL_CHAR = exports.STRICT_URL_CHAR.concat([" ", "\f"]); + for (let i = 128; i <= 255; i++) { + exports.URL_CHAR.push(i); + } + exports.HEX = exports.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); + exports.STRICT_TOKEN = [ + "!", + "#", + "$", + "%", + "&", + "'", + "*", + "+", + "-", + ".", + "^", + "_", + "`", + "|", + "~" + ].concat(exports.ALPHANUM); + exports.TOKEN = exports.STRICT_TOKEN.concat([" "]); + exports.HEADER_CHARS = [" "]; + for (let i = 32; i <= 255; i++) { + if (i !== 127) { + exports.HEADER_CHARS.push(i); + } + } + exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44); + exports.MAJOR = exports.NUM_MAP; + exports.MINOR = exports.MAJOR; + var HEADER_STATE; + (function(HEADER_STATE2) { + HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL"; + HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION"; + HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; + HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; + })(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {})); + exports.SPECIAL_HEADERS = { + "connection": HEADER_STATE.CONNECTION, + "content-length": HEADER_STATE.CONTENT_LENGTH, + "proxy-connection": HEADER_STATE.CONNECTION, + "transfer-encoding": HEADER_STATE.TRANSFER_ENCODING, + "upgrade": HEADER_STATE.UPGRADE + }; + } +}); + +// +var require_llhttp_wasm = __commonJS({ + ""(exports, module) { + "use strict"; + var { Buffer: Buffer2 } = __require("node:buffer"); + module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64"); + } +}); + +// +var require_llhttp_simd_wasm = __commonJS({ + ""(exports, module) { + "use strict"; + var { Buffer: Buffer2 } = __require("node:buffer"); + module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64"); + } +}); + +// +var require_constants3 = __commonJS({ + ""(exports, module) { + "use strict"; + var corsSafeListedMethods = ( + /** @type {const} */ + ["GET", "HEAD", "POST"] + ); + var corsSafeListedMethodsSet = new Set(corsSafeListedMethods); + var nullBodyStatus = ( + /** @type {const} */ + [101, 204, 205, 304] + ); + var redirectStatus = ( + /** @type {const} */ + [301, 302, 303, 307, 308] + ); + var redirectStatusSet = new Set(redirectStatus); + var badPorts = ( + /** @type {const} */ + [ + "1", + "7", + "9", + "11", + "13", + "15", + "17", + "19", + "20", + "21", + "22", + "23", + "25", + "37", + "42", + "43", + "53", + "69", + "77", + "79", + "87", + "95", + "101", + "102", + "103", + "104", + "109", + "110", + "111", + "113", + "115", + "117", + "119", + "123", + "135", + "137", + "139", + "143", + "161", + "179", + "389", + "427", + "465", + "512", + "513", + "514", + "515", + "526", + "530", + "531", + "532", + "540", + "548", + "554", + "556", + "563", + "587", + "601", + "636", + "989", + "990", + "993", + "995", + "1719", + "1720", + "1723", + "2049", + "3659", + "4045", + "4190", + "5060", + "5061", + "6000", + "6566", + "6665", + "6666", + "6667", + "6668", + "6669", + "6679", + "6697", + "10080" + ] + ); + var badPortsSet = new Set(badPorts); + var referrerPolicy = ( + /** @type {const} */ + [ + "", + "no-referrer", + "no-referrer-when-downgrade", + "same-origin", + "origin", + "strict-origin", + "origin-when-cross-origin", + "strict-origin-when-cross-origin", + "unsafe-url" + ] + ); + var referrerPolicySet = new Set(referrerPolicy); + var requestRedirect = ( + /** @type {const} */ + ["follow", "manual", "error"] + ); + var safeMethods = ( + /** @type {const} */ + ["GET", "HEAD", "OPTIONS", "TRACE"] + ); + var safeMethodsSet = new Set(safeMethods); + var requestMode = ( + /** @type {const} */ + ["navigate", "same-origin", "no-cors", "cors"] + ); + var requestCredentials = ( + /** @type {const} */ + ["omit", "same-origin", "include"] + ); + var requestCache = ( + /** @type {const} */ + [ + "default", + "no-store", + "reload", + "no-cache", + "force-cache", + "only-if-cached" + ] + ); + var requestBodyHeader = ( + /** @type {const} */ + [ + "content-encoding", + "content-language", + "content-location", + "content-type", + // See https://github.com/nodejs/undici/issues/2021 + // 'Content-Length' is a forbidden header name, which is typically + // removed in the Headers implementation. However, undici doesn't + // filter out headers, so we add it here. + "content-length" + ] + ); + var requestDuplex = ( + /** @type {const} */ + [ + "half" + ] + ); + var forbiddenMethods = ( + /** @type {const} */ + ["CONNECT", "TRACE", "TRACK"] + ); + var forbiddenMethodsSet = new Set(forbiddenMethods); + var subresource = ( + /** @type {const} */ + [ + "audio", + "audioworklet", + "font", + "image", + "manifest", + "paintworklet", + "script", + "style", + "track", + "video", + "xslt", + "" + ] + ); + var subresourceSet = new Set(subresource); + module.exports = { + subresource, + forbiddenMethods, + requestBodyHeader, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + redirectStatus, + corsSafeListedMethods, + nullBodyStatus, + safeMethods, + badPorts, + requestDuplex, + subresourceSet, + badPortsSet, + redirectStatusSet, + corsSafeListedMethodsSet, + safeMethodsSet, + forbiddenMethodsSet, + referrerPolicySet + }; + } +}); + +// +var require_global = __commonJS({ + ""(exports, module) { + "use strict"; + var globalOrigin = Symbol.for("undici.globalOrigin.1"); + function getGlobalOrigin() { + return globalThis[globalOrigin]; + } + function setGlobalOrigin(newOrigin) { + if (newOrigin === void 0) { + Object.defineProperty(globalThis, globalOrigin, { + value: void 0, + writable: true, + enumerable: false, + configurable: false + }); + return; + } + const parsedURL = new URL(newOrigin); + if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") { + throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`); + } + Object.defineProperty(globalThis, globalOrigin, { + value: parsedURL, + writable: true, + enumerable: false, + configurable: false + }); + } + module.exports = { + getGlobalOrigin, + setGlobalOrigin + }; + } +}); + +// +var require_data_url = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var encoder = new TextEncoder(); + var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/; + var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/; + var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g; + var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/; + function dataURLProcessor(dataURL) { + assert(dataURL.protocol === "data:"); + let input = URLSerializer(dataURL, true); + input = input.slice(5); + const position = { position: 0 }; + let mimeType = collectASequenceOfCodePointsFast( + ",", + input, + position + ); + const mimeTypeLength = mimeType.length; + mimeType = removeASCIIWhitespace(mimeType, true, true); + if (position.position >= input.length) { + return "failure"; + } + position.position++; + const encodedBody = input.slice(mimeTypeLength + 1); + let body = stringPercentDecode(encodedBody); + if (/;(\u0020){0,}base64$/i.test(mimeType)) { + const stringBody = isomorphicDecode(body); + body = forgivingBase64(stringBody); + if (body === "failure") { + return "failure"; + } + mimeType = mimeType.slice(0, -6); + mimeType = mimeType.replace(/(\u0020)+$/, ""); + mimeType = mimeType.slice(0, -1); + } + if (mimeType.startsWith(";")) { + mimeType = "text/plain" + mimeType; + } + let mimeTypeRecord = parseMIMEType(mimeType); + if (mimeTypeRecord === "failure") { + mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII"); + } + return { mimeType: mimeTypeRecord, body }; + } + function URLSerializer(url, excludeFragment = false) { + if (!excludeFragment) { + return url.href; + } + const href = url.href; + const hashLength = url.hash.length; + const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength); + if (!hashLength && href.endsWith("#")) { + return serialized.slice(0, -1); + } + return serialized; + } + function collectASequenceOfCodePoints(condition, input, position) { + let result = ""; + while (position.position < input.length && condition(input[position.position])) { + result += input[position.position]; + position.position++; + } + return result; + } + function collectASequenceOfCodePointsFast(char, input, position) { + const idx = input.indexOf(char, position.position); + const start = position.position; + if (idx === -1) { + position.position = input.length; + return input.slice(start); + } + position.position = idx; + return input.slice(start, position.position); + } + function stringPercentDecode(input) { + const bytes = encoder.encode(input); + return percentDecode(bytes); + } + function isHexCharByte(byte) { + return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102; + } + function hexByteToNumber(byte) { + return ( + // 0-9 + byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55 + ); + } + function percentDecode(input) { + const length = input.length; + const output = new Uint8Array(length); + let j = 0; + for (let i = 0; i < length; ++i) { + const byte = input[i]; + if (byte !== 37) { + output[j++] = byte; + } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) { + output[j++] = 37; + } else { + output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]); + i += 2; + } + } + return length === j ? output : output.subarray(0, j); + } + function parseMIMEType(input) { + input = removeHTTPWhitespace(input, true, true); + const position = { position: 0 }; + const type = collectASequenceOfCodePointsFast( + "/", + input, + position + ); + if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { + return "failure"; + } + if (position.position > input.length) { + return "failure"; + } + position.position++; + let subtype = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + subtype = removeHTTPWhitespace(subtype, false, true); + if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { + return "failure"; + } + const typeLowercase = type.toLowerCase(); + const subtypeLowercase = subtype.toLowerCase(); + const mimeType = { + type: typeLowercase, + subtype: subtypeLowercase, + /** @type {Map} */ + parameters: /* @__PURE__ */ new Map(), + // https://mimesniff.spec.whatwg.org/#mime-type-essence + essence: `${typeLowercase}/${subtypeLowercase}` + }; + while (position.position < input.length) { + position.position++; + collectASequenceOfCodePoints( + // https://fetch.spec.whatwg.org/#http-whitespace + (char) => HTTP_WHITESPACE_REGEX.test(char), + input, + position + ); + let parameterName = collectASequenceOfCodePoints( + (char) => char !== ";" && char !== "=", + input, + position + ); + parameterName = parameterName.toLowerCase(); + if (position.position < input.length) { + if (input[position.position] === ";") { + continue; + } + position.position++; + } + if (position.position > input.length) { + break; + } + let parameterValue = null; + if (input[position.position] === '"') { + parameterValue = collectAnHTTPQuotedString(input, position, true); + collectASequenceOfCodePointsFast( + ";", + input, + position + ); + } else { + parameterValue = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + parameterValue = removeHTTPWhitespace(parameterValue, false, true); + if (parameterValue.length === 0) { + continue; + } + } + if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) { + mimeType.parameters.set(parameterName, parameterValue); + } + } + return mimeType; + } + function forgivingBase64(data) { + data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, ""); + let dataLength = data.length; + if (dataLength % 4 === 0) { + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + } + } + } + if (dataLength % 4 === 1) { + return "failure"; + } + if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) { + return "failure"; + } + const buffer = Buffer.from(data, "base64"); + return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); + } + function collectAnHTTPQuotedString(input, position, extractValue) { + const positionStart = position.position; + let value = ""; + assert(input[position.position] === '"'); + position.position++; + while (true) { + value += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== "\\", + input, + position + ); + if (position.position >= input.length) { + break; + } + const quoteOrBackslash = input[position.position]; + position.position++; + if (quoteOrBackslash === "\\") { + if (position.position >= input.length) { + value += "\\"; + break; + } + value += input[position.position]; + position.position++; + } else { + assert(quoteOrBackslash === '"'); + break; + } + } + if (extractValue) { + return value; + } + return input.slice(positionStart, position.position); + } + function serializeAMimeType(mimeType) { + assert(mimeType !== "failure"); + const { parameters, essence } = mimeType; + let serialization = essence; + for (let [name, value] of parameters.entries()) { + serialization += ";"; + serialization += name; + serialization += "="; + if (!HTTP_TOKEN_CODEPOINTS.test(value)) { + value = value.replace(/(\\|")/g, "\\$1"); + value = '"' + value; + value += '"'; + } + serialization += value; + } + return serialization; + } + function isHTTPWhiteSpace(char) { + return char === 13 || char === 10 || char === 9 || char === 32; + } + function removeHTTPWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isHTTPWhiteSpace); + } + function isASCIIWhitespace(char) { + return char === 13 || char === 10 || char === 9 || char === 12 || char === 32; + } + function removeASCIIWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isASCIIWhitespace); + } + function removeChars(str, leading, trailing, predicate) { + let lead = 0; + let trail = str.length - 1; + if (leading) { + while (lead < str.length && predicate(str.charCodeAt(lead))) + lead++; + } + if (trailing) { + while (trail > 0 && predicate(str.charCodeAt(trail))) + trail--; + } + return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1); + } + function isomorphicDecode(input) { + const length = input.length; + if ((2 << 15) - 1 > length) { + return String.fromCharCode.apply(null, input); + } + let result = ""; + let i = 0; + let addition = (2 << 15) - 1; + while (i < length) { + if (i + addition > length) { + addition = length - i; + } + result += String.fromCharCode.apply(null, input.subarray(i, i += addition)); + } + return result; + } + function minimizeSupportedMimeType(mimeType) { + switch (mimeType.essence) { + case "application/ecmascript": + case "application/javascript": + case "application/x-ecmascript": + case "application/x-javascript": + case "text/ecmascript": + case "text/javascript": + case "text/javascript1.0": + case "text/javascript1.1": + case "text/javascript1.2": + case "text/javascript1.3": + case "text/javascript1.4": + case "text/javascript1.5": + case "text/jscript": + case "text/livescript": + case "text/x-ecmascript": + case "text/x-javascript": + return "text/javascript"; + case "application/json": + case "text/json": + return "application/json"; + case "image/svg+xml": + return "image/svg+xml"; + case "text/xml": + case "application/xml": + return "application/xml"; + } + if (mimeType.subtype.endsWith("+json")) { + return "application/json"; + } + if (mimeType.subtype.endsWith("+xml")) { + return "application/xml"; + } + return ""; + } + module.exports = { + dataURLProcessor, + URLSerializer, + collectASequenceOfCodePoints, + collectASequenceOfCodePointsFast, + stringPercentDecode, + parseMIMEType, + collectAnHTTPQuotedString, + serializeAMimeType, + removeChars, + removeHTTPWhitespace, + minimizeSupportedMimeType, + HTTP_TOKEN_CODEPOINTS, + isomorphicDecode + }; + } +}); + +// +var require_webidl = __commonJS({ + ""(exports, module) { + "use strict"; + var { types, inspect } = __require("node:util"); + var { markAsUncloneable } = __require("node:worker_threads"); + var { toUSVString } = require_util(); + var webidl = {}; + webidl.converters = {}; + webidl.util = {}; + webidl.errors = {}; + webidl.errors.exception = function(message) { + return new TypeError(`${message.header}: ${message.message}`); + }; + webidl.errors.conversionFailed = function(context) { + const plural = context.types.length === 1 ? "" : " one of"; + const message = `${context.argument} could not be converted to${plural}: ${context.types.join(", ")}.`; + return webidl.errors.exception({ + header: context.prefix, + message + }); + }; + webidl.errors.invalidArgument = function(context) { + return webidl.errors.exception({ + header: context.prefix, + message: `"${context.value}" is an invalid ${context.type}.` + }); + }; + webidl.brandCheck = function(V, I, opts) { + if (opts?.strict !== false) { + if (!(V instanceof I)) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } else { + if (V?.[Symbol.toStringTag] !== I.prototype[Symbol.toStringTag]) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } + }; + webidl.argumentLengthCheck = function({ length }, min, ctx) { + if (length < min) { + throw webidl.errors.exception({ + message: `${min} argument${min !== 1 ? "s" : ""} required, but${length ? " only" : ""} ${length} found.`, + header: ctx + }); + } + }; + webidl.illegalConstructor = function() { + throw webidl.errors.exception({ + header: "TypeError", + message: "Illegal constructor" + }); + }; + webidl.util.Type = function(V) { + switch (typeof V) { + case "undefined": + return "Undefined"; + case "boolean": + return "Boolean"; + case "string": + return "String"; + case "symbol": + return "Symbol"; + case "number": + return "Number"; + case "bigint": + return "BigInt"; + case "function": + case "object": { + if (V === null) { + return "Null"; + } + return "Object"; + } + } + }; + webidl.util.markAsUncloneable = markAsUncloneable || (() => { + }); + webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) { + let upperBound; + let lowerBound; + if (bitLength === 64) { + upperBound = Math.pow(2, 53) - 1; + if (signedness === "unsigned") { + lowerBound = 0; + } else { + lowerBound = Math.pow(-2, 53) + 1; + } + } else if (signedness === "unsigned") { + lowerBound = 0; + upperBound = Math.pow(2, bitLength) - 1; + } else { + lowerBound = Math.pow(-2, bitLength) - 1; + upperBound = Math.pow(2, bitLength - 1) - 1; + } + let x = Number(V); + if (x === 0) { + x = 0; + } + if (opts?.enforceRange === true) { + if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Could not convert ${webidl.util.Stringify(V)} to an integer.` + }); + } + x = webidl.util.IntegerPart(x); + if (x < lowerBound || x > upperBound) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` + }); + } + return x; + } + if (!Number.isNaN(x) && opts?.clamp === true) { + x = Math.min(Math.max(x, lowerBound), upperBound); + if (Math.floor(x) % 2 === 0) { + x = Math.floor(x); + } else { + x = Math.ceil(x); + } + return x; + } + if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + return 0; + } + x = webidl.util.IntegerPart(x); + x = x % Math.pow(2, bitLength); + if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) { + return x - Math.pow(2, bitLength); + } + return x; + }; + webidl.util.IntegerPart = function(n) { + const r = Math.floor(Math.abs(n)); + if (n < 0) { + return -1 * r; + } + return r; + }; + webidl.util.Stringify = function(V) { + const type = webidl.util.Type(V); + switch (type) { + case "Symbol": + return `Symbol(${V.description})`; + case "Object": + return inspect(V); + case "String": + return `"${V}"`; + default: + return `${V}`; + } + }; + webidl.sequenceConverter = function(converter) { + return (V, prefix, argument, Iterable) => { + if (webidl.util.Type(V) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` + }); + } + const method = typeof Iterable === "function" ? Iterable() : V?.[Symbol.iterator]?.(); + const seq = []; + let index = 0; + if (method === void 0 || typeof method.next !== "function") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is not iterable.` + }); + } + while (true) { + const { done, value } = method.next(); + if (done) { + break; + } + seq.push(converter(value, prefix, `${argument}[${index++}]`)); + } + return seq; + }; + }; + webidl.recordConverter = function(keyConverter, valueConverter) { + return (O, prefix, argument) => { + if (webidl.util.Type(O) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} ("${webidl.util.Type(O)}") is not an Object.` + }); + } + const result = {}; + if (!types.isProxy(O)) { + const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]; + for (const key of keys2) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + return result; + } + const keys = Reflect.ownKeys(O); + for (const key of keys) { + const desc = Reflect.getOwnPropertyDescriptor(O, key); + if (desc?.enumerable) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + } + return result; + }; + }; + webidl.interfaceConverter = function(i) { + return (V, prefix, argument, opts) => { + if (opts?.strict !== false && !(V instanceof i)) { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.` + }); + } + return V; + }; + }; + webidl.dictionaryConverter = function(converters) { + return (dictionary, prefix, argument) => { + const type = webidl.util.Type(dictionary); + const dict = {}; + if (type === "Null" || type === "Undefined") { + return dict; + } else if (type !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${dictionary} to be one of: Null, Undefined, Object.` + }); + } + for (const options of converters) { + const { key, defaultValue, required, converter } = options; + if (required === true) { + if (!Object.hasOwn(dictionary, key)) { + throw webidl.errors.exception({ + header: prefix, + message: `Missing required key "${key}".` + }); + } + } + let value = dictionary[key]; + const hasDefault = Object.hasOwn(options, "defaultValue"); + if (hasDefault && value !== null) { + value ??= defaultValue(); + } + if (required || hasDefault || value !== void 0) { + value = converter(value, prefix, `${argument}.${key}`); + if (options.allowedValues && !options.allowedValues.includes(value)) { + throw webidl.errors.exception({ + header: prefix, + message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.` + }); + } + dict[key] = value; + } + } + return dict; + }; + }; + webidl.nullableConverter = function(converter) { + return (V, prefix, argument) => { + if (V === null) { + return V; + } + return converter(V, prefix, argument); + }; + }; + webidl.converters.DOMString = function(V, prefix, argument, opts) { + if (V === null && opts?.legacyNullToEmptyString) { + return ""; + } + if (typeof V === "symbol") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is a symbol, which cannot be converted to a DOMString.` + }); + } + return String(V); + }; + webidl.converters.ByteString = function(V, prefix, argument) { + const x = webidl.converters.DOMString(V, prefix, argument); + for (let index = 0; index < x.length; index++) { + if (x.charCodeAt(index) > 255) { + throw new TypeError( + `Cannot convert argument to a ByteString because the character at index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.` + ); + } + } + return x; + }; + webidl.converters.USVString = toUSVString; + webidl.converters.boolean = function(V) { + const x = Boolean(V); + return x; + }; + webidl.converters.any = function(V) { + return V; + }; + webidl.converters["long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned short"] = function(V, prefix, argument, opts) { + const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument); + return x; + }; + webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${argument} ("${webidl.util.Stringify(V)}")`, + types: ["ArrayBuffer"] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.resizable || V.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.TypedArray = function(V, T, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: [T.name] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.DataView = function(V, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) { + throw webidl.errors.exception({ + header: prefix, + message: `${name} is not a DataView.` + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.BufferSource = function(V, prefix, name, opts) { + if (types.isAnyArrayBuffer(V)) { + return webidl.converters.ArrayBuffer(V, prefix, name, { ...opts, allowShared: false }); + } + if (types.isTypedArray(V)) { + return webidl.converters.TypedArray(V, V.constructor, prefix, name, { ...opts, allowShared: false }); + } + if (types.isDataView(V)) { + return webidl.converters.DataView(V, prefix, name, { ...opts, allowShared: false }); + } + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: ["BufferSource"] + }); + }; + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.ByteString + ); + webidl.converters["sequence>"] = webidl.sequenceConverter( + webidl.converters["sequence"] + ); + webidl.converters["record"] = webidl.recordConverter( + webidl.converters.ByteString, + webidl.converters.ByteString + ); + module.exports = { + webidl + }; + } +}); + +// +var require_util2 = __commonJS({ + ""(exports, module) { + "use strict"; + var { Transform } = __require("node:stream"); + var zlib = __require("node:zlib"); + var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3(); + var { getGlobalOrigin } = require_global(); + var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url(); + var { performance: performance2 } = __require("node:perf_hooks"); + var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util(); + var assert = __require("node:assert"); + var { isUint8Array } = __require("node:util/types"); + var { webidl } = require_webidl(); + var supportedHashes = []; + var crypto; + try { + crypto = __require("node:crypto"); + const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; + supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)); + } catch { + } + function responseURL(response) { + const urlList = response.urlList; + const length = urlList.length; + return length === 0 ? null : urlList[length - 1].toString(); + } + function responseLocationURL(response, requestFragment) { + if (!redirectStatusSet.has(response.status)) { + return null; + } + let location = response.headersList.get("location", true); + if (location !== null && isValidHeaderValue(location)) { + if (!isValidEncodedURL(location)) { + location = normalizeBinaryStringToUtf8(location); + } + location = new URL(location, responseURL(response)); + } + if (location && !location.hash) { + location.hash = requestFragment; + } + return location; + } + function isValidEncodedURL(url) { + for (let i = 0; i < url.length; ++i) { + const code = url.charCodeAt(i); + if (code > 126 || // Non-US-ASCII + DEL + code < 32) { + return false; + } + } + return true; + } + function normalizeBinaryStringToUtf8(value) { + return Buffer.from(value, "binary").toString("utf8"); + } + function requestCurrentURL(request) { + return request.urlList[request.urlList.length - 1]; + } + function requestBadPort(request) { + const url = requestCurrentURL(request); + if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { + return "blocked"; + } + return "allowed"; + } + function isErrorLike(object) { + return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException"); + } + function isValidReasonPhrase(statusText) { + for (let i = 0; i < statusText.length; ++i) { + const c = statusText.charCodeAt(i); + if (!(c === 9 || // HTAB + c >= 32 && c <= 126 || // SP / VCHAR + c >= 128 && c <= 255)) { + return false; + } + } + return true; + } + var isValidHeaderName = isValidHTTPToken; + function isValidHeaderValue(potentialValue) { + return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false; + } + function setRequestReferrerPolicyOnRedirect(request, actualResponse) { + const { headersList } = actualResponse; + const policyHeader = (headersList.get("referrer-policy", true) ?? "").split(","); + let policy = ""; + if (policyHeader.length > 0) { + for (let i = policyHeader.length; i !== 0; i--) { + const token = policyHeader[i - 1].trim(); + if (referrerPolicyTokens.has(token)) { + policy = token; + break; + } + } + } + if (policy !== "") { + request.referrerPolicy = policy; + } + } + function crossOriginResourcePolicyCheck() { + return "allowed"; + } + function corsCheck() { + return "success"; + } + function TAOCheck() { + return "success"; + } + function appendFetchMetadata(httpRequest) { + let header = null; + header = httpRequest.mode; + httpRequest.headersList.set("sec-fetch-mode", header, true); + } + function appendRequestOriginHeader(request) { + let serializedOrigin = request.origin; + if (serializedOrigin === "client" || serializedOrigin === void 0) { + return; + } + if (request.responseTainting === "cors" || request.mode === "websocket") { + request.headersList.append("origin", serializedOrigin, true); + } else if (request.method !== "GET" && request.method !== "HEAD") { + switch (request.referrerPolicy) { + case "no-referrer": + serializedOrigin = null; + break; + case "no-referrer-when-downgrade": + case "strict-origin": + case "strict-origin-when-cross-origin": + if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { + serializedOrigin = null; + } + break; + case "same-origin": + if (!sameOrigin(request, requestCurrentURL(request))) { + serializedOrigin = null; + } + break; + default: + } + request.headersList.append("origin", serializedOrigin, true); + } + } + function coarsenTime(timestamp, crossOriginIsolatedCapability) { + return timestamp; + } + function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) { + if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) { + return { + domainLookupStartTime: defaultStartTime, + domainLookupEndTime: defaultStartTime, + connectionStartTime: defaultStartTime, + connectionEndTime: defaultStartTime, + secureConnectionStartTime: defaultStartTime, + ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol + }; + } + return { + domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability), + domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability), + connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability), + connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability), + secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability), + ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol + }; + } + function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) { + return coarsenTime(performance2.now(), crossOriginIsolatedCapability); + } + function createOpaqueTimingInfo(timingInfo) { + return { + startTime: timingInfo.startTime ?? 0, + redirectStartTime: 0, + redirectEndTime: 0, + postRedirectStartTime: timingInfo.startTime ?? 0, + finalServiceWorkerStartTime: 0, + finalNetworkResponseStartTime: 0, + finalNetworkRequestStartTime: 0, + endTime: 0, + encodedBodySize: 0, + decodedBodySize: 0, + finalConnectionTimingInfo: null + }; + } + function makePolicyContainer() { + return { + referrerPolicy: "strict-origin-when-cross-origin" + }; + } + function clonePolicyContainer(policyContainer) { + return { + referrerPolicy: policyContainer.referrerPolicy + }; + } + function determineRequestsReferrer(request) { + const policy = request.referrerPolicy; + assert(policy); + let referrerSource = null; + if (request.referrer === "client") { + const globalOrigin = getGlobalOrigin(); + if (!globalOrigin || globalOrigin.origin === "null") { + return "no-referrer"; + } + referrerSource = new URL(globalOrigin); + } else if (request.referrer instanceof URL) { + referrerSource = request.referrer; + } + let referrerURL = stripURLForReferrer(referrerSource); + const referrerOrigin = stripURLForReferrer(referrerSource, true); + if (referrerURL.toString().length > 4096) { + referrerURL = referrerOrigin; + } + const areSameOrigin = sameOrigin(request, referrerURL); + const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url); + switch (policy) { + case "origin": + return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true); + case "unsafe-url": + return referrerURL; + case "same-origin": + return areSameOrigin ? referrerOrigin : "no-referrer"; + case "origin-when-cross-origin": + return areSameOrigin ? referrerURL : referrerOrigin; + case "strict-origin-when-cross-origin": { + const currentURL = requestCurrentURL(request); + if (sameOrigin(referrerURL, currentURL)) { + return referrerURL; + } + if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { + return "no-referrer"; + } + return referrerOrigin; + } + case "strict-origin": + case "no-referrer-when-downgrade": + default: + return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin; + } + } + function stripURLForReferrer(url, originOnly) { + assert(url instanceof URL); + url = new URL(url); + if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") { + return "no-referrer"; + } + url.username = ""; + url.password = ""; + url.hash = ""; + if (originOnly) { + url.pathname = ""; + url.search = ""; + } + return url; + } + function isURLPotentiallyTrustworthy(url) { + if (!(url instanceof URL)) { + return false; + } + if (url.href === "about:blank" || url.href === "about:srcdoc") { + return true; + } + if (url.protocol === "data:") + return true; + if (url.protocol === "file:") + return true; + return isOriginPotentiallyTrustworthy(url.origin); + function isOriginPotentiallyTrustworthy(origin) { + if (origin == null || origin === "null") + return false; + const originAsURL = new URL(origin); + if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") { + return true; + } + if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || (originAsURL.hostname === "localhost" || originAsURL.hostname.includes("localhost.")) || originAsURL.hostname.endsWith(".localhost")) { + return true; + } + return false; + } + } + function bytesMatch(bytes, metadataList) { + if (crypto === void 0) { + return true; + } + const parsedMetadata = parseMetadata(metadataList); + if (parsedMetadata === "no metadata") { + return true; + } + if (parsedMetadata.length === 0) { + return true; + } + const strongest = getStrongestMetadata(parsedMetadata); + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest); + for (const item of metadata) { + const algorithm = item.algo; + const expectedValue = item.hash; + let actualValue = crypto.createHash(algorithm).update(bytes).digest("base64"); + if (actualValue[actualValue.length - 1] === "=") { + if (actualValue[actualValue.length - 2] === "=") { + actualValue = actualValue.slice(0, -2); + } else { + actualValue = actualValue.slice(0, -1); + } + } + if (compareBase64Mixed(actualValue, expectedValue)) { + return true; + } + } + return false; + } + var parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i; + function parseMetadata(metadata) { + const result = []; + let empty = true; + for (const token of metadata.split(" ")) { + empty = false; + const parsedToken = parseHashWithOptions.exec(token); + if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) { + continue; + } + const algorithm = parsedToken.groups.algo.toLowerCase(); + if (supportedHashes.includes(algorithm)) { + result.push(parsedToken.groups); + } + } + if (empty === true) { + return "no metadata"; + } + return result; + } + function getStrongestMetadata(metadataList) { + let algorithm = metadataList[0].algo; + if (algorithm[3] === "5") { + return algorithm; + } + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i]; + if (metadata.algo[3] === "5") { + algorithm = "sha512"; + break; + } else if (algorithm[3] === "3") { + continue; + } else if (metadata.algo[3] === "3") { + algorithm = "sha384"; + } + } + return algorithm; + } + function filterMetadataListByAlgorithm(metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList; + } + let pos = 0; + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i]; + } + } + metadataList.length = pos; + return metadataList; + } + function compareBase64Mixed(actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false; + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") { + continue; + } + return false; + } + } + return true; + } + function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) { + } + function sameOrigin(A, B) { + if (A.origin === B.origin && A.origin === "null") { + return true; + } + if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { + return true; + } + return false; + } + function createDeferredPromise() { + let res; + let rej; + const promise = new Promise((resolve, reject) => { + res = resolve; + rej = reject; + }); + return { promise, resolve: res, reject: rej }; + } + function isAborted(fetchParams) { + return fetchParams.controller.state === "aborted"; + } + function isCancelled(fetchParams) { + return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated"; + } + function normalizeMethod(method) { + return normalizedMethodRecordsBase[method.toLowerCase()] ?? method; + } + function serializeJavascriptValueToJSONString(value) { + const result = JSON.stringify(value); + if (result === void 0) { + throw new TypeError("Value is not JSON serializable"); + } + assert(typeof result === "string"); + return result; + } + var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); + function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) { + class FastIterableIterator { + /** @type {any} */ + #target; + /** @type {'key' | 'value' | 'key+value'} */ + #kind; + /** @type {number} */ + #index; + /** + * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object + * @param {unknown} target + * @param {'key' | 'value' | 'key+value'} kind + */ + constructor(target, kind) { + this.#target = target; + this.#kind = kind; + this.#index = 0; + } + next() { + if (typeof this !== "object" || this === null || !(#target in this)) { + throw new TypeError( + `'next' called on an object that does not implement interface ${name} Iterator.` + ); + } + const index = this.#index; + const values = this.#target[kInternalIterator]; + const len = values.length; + if (index >= len) { + return { + value: void 0, + done: true + }; + } + const { [keyIndex]: key, [valueIndex]: value } = values[index]; + this.#index = index + 1; + let result; + switch (this.#kind) { + case "key": + result = key; + break; + case "value": + result = value; + break; + case "key+value": + result = [key, value]; + break; + } + return { + value: result, + done: false + }; + } + } + delete FastIterableIterator.prototype.constructor; + Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype); + Object.defineProperties(FastIterableIterator.prototype, { + [Symbol.toStringTag]: { + writable: false, + enumerable: false, + configurable: true, + value: `${name} Iterator` + }, + next: { writable: true, enumerable: true, configurable: true } + }); + return function(target, kind) { + return new FastIterableIterator(target, kind); + }; + } + function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) { + const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex); + const properties = { + keys: { + writable: true, + enumerable: true, + configurable: true, + value: function keys() { + webidl.brandCheck(this, object); + return makeIterator(this, "key"); + } + }, + values: { + writable: true, + enumerable: true, + configurable: true, + value: function values() { + webidl.brandCheck(this, object); + return makeIterator(this, "value"); + } + }, + entries: { + writable: true, + enumerable: true, + configurable: true, + value: function entries() { + webidl.brandCheck(this, object); + return makeIterator(this, "key+value"); + } + }, + forEach: { + writable: true, + enumerable: true, + configurable: true, + value: function forEach(callbackfn, thisArg = globalThis) { + webidl.brandCheck(this, object); + webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`); + if (typeof callbackfn !== "function") { + throw new TypeError( + `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.` + ); + } + for (const { 0: key, 1: value } of makeIterator(this, "key+value")) { + callbackfn.call(thisArg, value, key, this); + } + } + } + }; + return Object.defineProperties(object.prototype, { + ...properties, + [Symbol.iterator]: { + writable: true, + enumerable: false, + configurable: true, + value: properties.entries.value + } + }); + } + async function fullyReadBody(body, processBody, processBodyError) { + const successSteps = processBody; + const errorSteps = processBodyError; + let reader; + try { + reader = body.stream.getReader(); + } catch (e) { + errorSteps(e); + return; + } + try { + successSteps(await readAllBytes(reader)); + } catch (e) { + errorSteps(e); + } + } + function isReadableStreamLike(stream) { + return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function"; + } + function readableStreamClose(controller) { + try { + controller.close(); + controller.byobRequest?.respond(0); + } catch (err) { + if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) { + throw err; + } + } + } + var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/; + function isomorphicEncode(input) { + assert(!invalidIsomorphicEncodeValueRegex.test(input)); + return input; + } + async function readAllBytes(reader) { + const bytes = []; + let byteLength = 0; + while (true) { + const { done, value: chunk } = await reader.read(); + if (done) { + return Buffer.concat(bytes, byteLength); + } + if (!isUint8Array(chunk)) { + throw new TypeError("Received non-Uint8Array chunk"); + } + bytes.push(chunk); + byteLength += chunk.length; + } + } + function urlIsLocal(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "about:" || protocol === "blob:" || protocol === "data:"; + } + function urlHasHttpsScheme(url) { + return typeof url === "string" && url[5] === ":" && url[0] === "h" && url[1] === "t" && url[2] === "t" && url[3] === "p" && url[4] === "s" || url.protocol === "https:"; + } + function urlIsHttpHttpsScheme(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "http:" || protocol === "https:"; + } + function simpleRangeHeaderValue(value, allowWhitespace) { + const data = value; + if (!data.startsWith("bytes")) { + return "failure"; + } + const position = { position: 5 }; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 61) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeStart = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeStartValue = rangeStart.length ? Number(rangeStart) : null; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 45) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeEnd = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null; + if (position.position < data.length) { + return "failure"; + } + if (rangeEndValue === null && rangeStartValue === null) { + return "failure"; + } + if (rangeStartValue > rangeEndValue) { + return "failure"; + } + return { rangeStartValue, rangeEndValue }; + } + function buildContentRange(rangeStart, rangeEnd, fullLength) { + let contentRange = "bytes "; + contentRange += isomorphicEncode(`${rangeStart}`); + contentRange += "-"; + contentRange += isomorphicEncode(`${rangeEnd}`); + contentRange += "/"; + contentRange += isomorphicEncode(`${fullLength}`); + return contentRange; + } + var InflateStream = class extends Transform { + #zlibOptions; + /** @param {zlib.ZlibOptions} [zlibOptions] */ + constructor(zlibOptions) { + super(); + this.#zlibOptions = zlibOptions; + } + _transform(chunk, encoding, callback) { + if (!this._inflateStream) { + if (chunk.length === 0) { + callback(); + return; + } + this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate(this.#zlibOptions) : zlib.createInflateRaw(this.#zlibOptions); + this._inflateStream.on("data", this.push.bind(this)); + this._inflateStream.on("end", () => this.push(null)); + this._inflateStream.on("error", (err) => this.destroy(err)); + } + this._inflateStream.write(chunk, encoding, callback); + } + _final(callback) { + if (this._inflateStream) { + this._inflateStream.end(); + this._inflateStream = null; + } + callback(); + } + }; + function createInflate(zlibOptions) { + return new InflateStream(zlibOptions); + } + function extractMimeType(headers) { + let charset = null; + let essence = null; + let mimeType = null; + const values = getDecodeSplit("content-type", headers); + if (values === null) { + return "failure"; + } + for (const value of values) { + const temporaryMimeType = parseMIMEType(value); + if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") { + continue; + } + mimeType = temporaryMimeType; + if (mimeType.essence !== essence) { + charset = null; + if (mimeType.parameters.has("charset")) { + charset = mimeType.parameters.get("charset"); + } + essence = mimeType.essence; + } else if (!mimeType.parameters.has("charset") && charset !== null) { + mimeType.parameters.set("charset", charset); + } + } + if (mimeType == null) { + return "failure"; + } + return mimeType; + } + function gettingDecodingSplitting(value) { + const input = value; + const position = { position: 0 }; + const values = []; + let temporaryValue = ""; + while (position.position < input.length) { + temporaryValue += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== ",", + input, + position + ); + if (position.position < input.length) { + if (input.charCodeAt(position.position) === 34) { + temporaryValue += collectAnHTTPQuotedString( + input, + position + ); + if (position.position < input.length) { + continue; + } + } else { + assert(input.charCodeAt(position.position) === 44); + position.position++; + } + } + temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32); + values.push(temporaryValue); + temporaryValue = ""; + } + return values; + } + function getDecodeSplit(name, list) { + const value = list.get(name, true); + if (value === null) { + return null; + } + return gettingDecodingSplitting(value); + } + var textDecoder = new TextDecoder(); + function utf8DecodeBytes(buffer) { + if (buffer.length === 0) { + return ""; + } + if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { + buffer = buffer.subarray(3); + } + const output = textDecoder.decode(buffer); + return output; + } + var EnvironmentSettingsObjectBase = class { + get baseUrl() { + return getGlobalOrigin(); + } + get origin() { + return this.baseUrl?.origin; + } + policyContainer = makePolicyContainer(); + }; + var EnvironmentSettingsObject = class { + settingsObject = new EnvironmentSettingsObjectBase(); + }; + var environmentSettingsObject = new EnvironmentSettingsObject(); + module.exports = { + isAborted, + isCancelled, + isValidEncodedURL, + createDeferredPromise, + ReadableStreamFrom, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + clampAndCoarsenConnectionTimingInfo, + coarsenedSharedCurrentTime, + determineRequestsReferrer, + makePolicyContainer, + clonePolicyContainer, + appendFetchMetadata, + appendRequestOriginHeader, + TAOCheck, + corsCheck, + crossOriginResourcePolicyCheck, + createOpaqueTimingInfo, + setRequestReferrerPolicyOnRedirect, + isValidHTTPToken, + requestBadPort, + requestCurrentURL, + responseURL, + responseLocationURL, + isBlobLike, + isURLPotentiallyTrustworthy, + isValidReasonPhrase, + sameOrigin, + normalizeMethod, + serializeJavascriptValueToJSONString, + iteratorMixin, + createIterator, + isValidHeaderName, + isValidHeaderValue, + isErrorLike, + fullyReadBody, + bytesMatch, + isReadableStreamLike, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlHasHttpsScheme, + urlIsHttpHttpsScheme, + readAllBytes, + simpleRangeHeaderValue, + buildContentRange, + parseMetadata, + createInflate, + extractMimeType, + getDecodeSplit, + utf8DecodeBytes, + environmentSettingsObject + }; + } +}); + +// +var require_symbols2 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kUrl: Symbol("url"), + kHeaders: Symbol("headers"), + kSignal: Symbol("signal"), + kState: Symbol("state"), + kDispatcher: Symbol("dispatcher") + }; + } +}); + +// +var require_file = __commonJS({ + ""(exports, module) { + "use strict"; + var { Blob: Blob2, File } = __require("node:buffer"); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var FileLike = class _FileLike { + constructor(blobLike, fileName, options = {}) { + const n = fileName; + const t = options.type; + const d = options.lastModified ?? Date.now(); + this[kState] = { + blobLike, + name: n, + type: t, + lastModified: d + }; + } + stream(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.stream(...args); + } + arrayBuffer(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.arrayBuffer(...args); + } + slice(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.slice(...args); + } + text(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.text(...args); + } + get size() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.size; + } + get type() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.type; + } + get name() { + webidl.brandCheck(this, _FileLike); + return this[kState].name; + } + get lastModified() { + webidl.brandCheck(this, _FileLike); + return this[kState].lastModified; + } + get [Symbol.toStringTag]() { + return "File"; + } + }; + webidl.converters.Blob = webidl.interfaceConverter(Blob2); + function isFileLike(object) { + return object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File"; + } + module.exports = { FileLike, isFileLike }; + } +}); + +// +var require_formdata = __commonJS({ + ""(exports, module) { + "use strict"; + var { isBlobLike, iteratorMixin } = require_util2(); + var { kState } = require_symbols2(); + var { kEnumerableProperty } = require_util(); + var { FileLike, isFileLike } = require_file(); + var { webidl } = require_webidl(); + var { File: NativeFile } = __require("node:buffer"); + var nodeUtil = __require("node:util"); + var File = globalThis.File ?? NativeFile; + var FormData = class _FormData { + constructor(form) { + webidl.util.markAsUncloneable(this); + if (form !== void 0) { + throw webidl.errors.conversionFailed({ + prefix: "FormData constructor", + argument: "Argument 1", + types: ["undefined"] + }); + } + this[kState] = []; + } + append(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.append"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0; + const entry = makeEntry(name, value, filename); + this[kState].push(entry); + } + delete(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + this[kState] = this[kState].filter((entry) => entry.name !== name); + } + get(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.get"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + const idx = this[kState].findIndex((entry) => entry.name === name); + if (idx === -1) { + return null; + } + return this[kState][idx].value; + } + getAll(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.getAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value); + } + has(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].findIndex((entry) => entry.name === name) !== -1; + } + set(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.set"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0; + const entry = makeEntry(name, value, filename); + const idx = this[kState].findIndex((entry2) => entry2.name === name); + if (idx !== -1) { + this[kState] = [ + ...this[kState].slice(0, idx), + entry, + ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name) + ]; + } else { + this[kState].push(entry); + } + } + [nodeUtil.inspect.custom](depth, options) { + const state = this[kState].reduce((a, b) => { + if (a[b.name]) { + if (Array.isArray(a[b.name])) { + a[b.name].push(b.value); + } else { + a[b.name] = [a[b.name], b.value]; + } + } else { + a[b.name] = b.value; + } + return a; + }, { __proto__: null }); + options.depth ??= depth; + options.colors ??= true; + const output = nodeUtil.formatWithOptions(options, state); + return `FormData ${output.slice(output.indexOf("]") + 2)}`; + } + }; + iteratorMixin("FormData", FormData, kState, "name", "value"); + Object.defineProperties(FormData.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + getAll: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FormData", + configurable: true + } + }); + function makeEntry(name, value, filename) { + if (typeof value === "string") { + } else { + if (!isFileLike(value)) { + value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type }); + } + if (filename !== void 0) { + const options = { + type: value.type, + lastModified: value.lastModified + }; + value = value instanceof NativeFile ? new File([value], filename, options) : new FileLike(value, filename, options); + } + } + return { name, value }; + } + module.exports = { FormData, makeEntry }; + } +}); + +// +var require_formdata_parser = __commonJS({ + ""(exports, module) { + "use strict"; + var { isUSVString, bufferToLowerCasedHeaderName } = require_util(); + var { utf8DecodeBytes } = require_util2(); + var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url(); + var { isFileLike } = require_file(); + var { makeEntry } = require_formdata(); + var assert = __require("node:assert"); + var { File: NodeFile } = __require("node:buffer"); + var File = globalThis.File ?? NodeFile; + var formDataNameBuffer = Buffer.from('form-data; name="'); + var filenameBuffer = Buffer.from("; filename"); + var dd = Buffer.from("--"); + var ddcrlf = Buffer.from("--\r\n"); + function isAsciiString(chars) { + for (let i = 0; i < chars.length; ++i) { + if ((chars.charCodeAt(i) & ~127) !== 0) { + return false; + } + } + return true; + } + function validateBoundary(boundary) { + const length = boundary.length; + if (length < 27 || length > 70) { + return false; + } + for (let i = 0; i < length; ++i) { + const cp = boundary.charCodeAt(i); + if (!(cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 39 || cp === 45 || cp === 95)) { + return false; + } + } + return true; + } + function multipartFormDataParser(input, mimeType) { + assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data"); + const boundaryString = mimeType.parameters.get("boundary"); + if (boundaryString === void 0) { + return "failure"; + } + const boundary = Buffer.from(`--${boundaryString}`, "utf8"); + const entryList = []; + const position = { position: 0 }; + while (input[position.position] === 13 && input[position.position + 1] === 10) { + position.position += 2; + } + let trailing = input.length; + while (input[trailing - 1] === 10 && input[trailing - 2] === 13) { + trailing -= 2; + } + if (trailing !== input.length) { + input = input.subarray(0, trailing); + } + while (true) { + if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) { + position.position += boundary.length; + } else { + return "failure"; + } + if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) { + return entryList; + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } + position.position += 2; + const result = parseMultipartFormDataHeaders(input, position); + if (result === "failure") { + return "failure"; + } + let { name, filename, contentType, encoding } = result; + position.position += 2; + let body; + { + const boundaryIndex = input.indexOf(boundary.subarray(2), position.position); + if (boundaryIndex === -1) { + return "failure"; + } + body = input.subarray(position.position, boundaryIndex - 4); + position.position += body.length; + if (encoding === "base64") { + body = Buffer.from(body.toString(), "base64"); + } + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + let value; + if (filename !== null) { + contentType ??= "text/plain"; + if (!isAsciiString(contentType)) { + contentType = ""; + } + value = new File([body], filename, { type: contentType }); + } else { + value = utf8DecodeBytes(Buffer.from(body)); + } + assert(isUSVString(name)); + assert(typeof value === "string" && isUSVString(value) || isFileLike(value)); + entryList.push(makeEntry(name, value, filename)); + } + } + function parseMultipartFormDataHeaders(input, position) { + let name = null; + let filename = null; + let contentType = null; + let encoding = null; + while (true) { + if (input[position.position] === 13 && input[position.position + 1] === 10) { + if (name === null) { + return "failure"; + } + return { name, filename, contentType, encoding }; + } + let headerName = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 58, + input, + position + ); + headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32); + if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) { + return "failure"; + } + if (input[position.position] !== 58) { + return "failure"; + } + position.position++; + collectASequenceOfBytes( + (char) => char === 32 || char === 9, + input, + position + ); + switch (bufferToLowerCasedHeaderName(headerName)) { + case "content-disposition": { + name = filename = null; + if (!bufferStartsWith(input, formDataNameBuffer, position)) { + return "failure"; + } + position.position += 17; + name = parseMultipartFormDataName(input, position); + if (name === null) { + return "failure"; + } + if (bufferStartsWith(input, filenameBuffer, position)) { + let check = position.position + filenameBuffer.length; + if (input[check] === 42) { + position.position += 1; + check += 1; + } + if (input[check] !== 61 || input[check + 1] !== 34) { + return "failure"; + } + position.position += 12; + filename = parseMultipartFormDataName(input, position); + if (filename === null) { + return "failure"; + } + } + break; + } + case "content-type": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + contentType = isomorphicDecode(headerValue); + break; + } + case "content-transfer-encoding": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + encoding = isomorphicDecode(headerValue); + break; + } + default: { + collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + } + } + if (input[position.position] !== 13 && input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + } + } + function parseMultipartFormDataName(input, position) { + assert(input[position.position - 1] === 34); + let name = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 34, + input, + position + ); + if (input[position.position] !== 34) { + return null; + } else { + position.position++; + } + name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"'); + return name; + } + function collectASequenceOfBytes(condition, input, position) { + let start = position.position; + while (start < input.length && condition(input[start])) { + ++start; + } + return input.subarray(position.position, position.position = start); + } + function removeChars(buf, leading, trailing, predicate) { + let lead = 0; + let trail = buf.length - 1; + if (leading) { + while (lead < buf.length && predicate(buf[lead])) + lead++; + } + if (trailing) { + while (trail > 0 && predicate(buf[trail])) + trail--; + } + return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1); + } + function bufferStartsWith(buffer, start, position) { + if (buffer.length < start.length) { + return false; + } + for (let i = 0; i < start.length; i++) { + if (start[i] !== buffer[position.position + i]) { + return false; + } + } + return true; + } + module.exports = { + multipartFormDataParser, + validateBoundary + }; + } +}); + +// +var require_body = __commonJS({ + ""(exports, module) { + "use strict"; + var util = require_util(); + var { + ReadableStreamFrom, + isBlobLike, + isReadableStreamLike, + readableStreamClose, + createDeferredPromise, + fullyReadBody, + extractMimeType, + utf8DecodeBytes + } = require_util2(); + var { FormData } = require_formdata(); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var { Blob: Blob2 } = __require("node:buffer"); + var assert = __require("node:assert"); + var { isErrored, isDisturbed } = __require("node:stream"); + var { isArrayBuffer } = __require("node:util/types"); + var { serializeAMimeType } = require_data_url(); + var { multipartFormDataParser } = require_formdata_parser(); + var random; + try { + const crypto = __require("node:crypto"); + random = (max) => crypto.randomInt(0, max); + } catch { + random = (max) => Math.floor(Math.random(max)); + } + var textEncoder = new TextEncoder(); + function noop() { + } + var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0; + var streamRegistry; + if (hasFinalizationRegistry) { + streamRegistry = new FinalizationRegistry((weakRef) => { + const stream = weakRef.deref(); + if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) { + stream.cancel("Response object has been garbage collected").catch(noop); + } + }); + } + function extractBody(object, keepalive = false) { + let stream = null; + if (object instanceof ReadableStream) { + stream = object; + } else if (isBlobLike(object)) { + stream = object.stream(); + } else { + stream = new ReadableStream({ + async pull(controller) { + const buffer = typeof source === "string" ? textEncoder.encode(source) : source; + if (buffer.byteLength) { + controller.enqueue(buffer); + } + queueMicrotask(() => readableStreamClose(controller)); + }, + start() { + }, + type: "bytes" + }); + } + assert(isReadableStreamLike(stream)); + let action = null; + let source = null; + let length = null; + let type = null; + if (typeof object === "string") { + source = object; + type = "text/plain;charset=UTF-8"; + } else if (object instanceof URLSearchParams) { + source = object.toString(); + type = "application/x-www-form-urlencoded;charset=UTF-8"; + } else if (isArrayBuffer(object)) { + source = new Uint8Array(object.slice()); + } else if (ArrayBuffer.isView(object)) { + source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)); + } else if (util.isFormDataLike(object)) { + const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`; + const prefix = `--${boundary}\r +Content-Disposition: form-data`; + const escape = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22"); + const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n"); + const blobParts = []; + const rn = new Uint8Array([13, 10]); + length = 0; + let hasUnknownSizeValue = false; + for (const [name, value] of object) { + if (typeof value === "string") { + const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r +\r +${normalizeLinefeeds(value)}\r +`); + blobParts.push(chunk2); + length += chunk2.byteLength; + } else { + const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r +Content-Type: ${value.type || "application/octet-stream"}\r +\r +`); + blobParts.push(chunk2, value, rn); + if (typeof value.size === "number") { + length += chunk2.byteLength + value.size + rn.byteLength; + } else { + hasUnknownSizeValue = true; + } + } + } + const chunk = textEncoder.encode(`--${boundary}--\r +`); + blobParts.push(chunk); + length += chunk.byteLength; + if (hasUnknownSizeValue) { + length = null; + } + source = object; + action = async function* () { + for (const part of blobParts) { + if (part.stream) { + yield* part.stream(); + } else { + yield part; + } + } + }; + type = `multipart/form-data; boundary=${boundary}`; + } else if (isBlobLike(object)) { + source = object; + length = object.size; + if (object.type) { + type = object.type; + } + } else if (typeof object[Symbol.asyncIterator] === "function") { + if (keepalive) { + throw new TypeError("keepalive"); + } + if (util.isDisturbed(object) || object.locked) { + throw new TypeError( + "Response body object should not be disturbed or locked" + ); + } + stream = object instanceof ReadableStream ? object : ReadableStreamFrom(object); + } + if (typeof source === "string" || util.isBuffer(source)) { + length = Buffer.byteLength(source); + } + if (action != null) { + let iterator; + stream = new ReadableStream({ + async start() { + iterator = action(object)[Symbol.asyncIterator](); + }, + async pull(controller) { + const { value, done } = await iterator.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + if (!isErrored(stream)) { + const buffer = new Uint8Array(value); + if (buffer.byteLength) { + controller.enqueue(buffer); + } + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator.return(); + }, + type: "bytes" + }); + } + const body = { stream, source, length }; + return [body, type]; + } + function safelyExtractBody(object, keepalive = false) { + if (object instanceof ReadableStream) { + assert(!util.isDisturbed(object), "The body has already been consumed."); + assert(!object.locked, "The stream is locked."); + } + return extractBody(object, keepalive); + } + function cloneBody(instance, body) { + const [out1, out2] = body.stream.tee(); + body.stream = out1; + return { + stream: out2, + length: body.length, + source: body.source + }; + } + function throwIfAborted(state) { + if (state.aborted) { + throw new DOMException("The operation was aborted.", "AbortError"); + } + } + function bodyMixinMethods(instance) { + const methods = { + blob() { + return consumeBody(this, (bytes) => { + let mimeType = bodyMimeType(this); + if (mimeType === null) { + mimeType = ""; + } else if (mimeType) { + mimeType = serializeAMimeType(mimeType); + } + return new Blob2([bytes], { type: mimeType }); + }, instance); + }, + arrayBuffer() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes).buffer; + }, instance); + }, + text() { + return consumeBody(this, utf8DecodeBytes, instance); + }, + json() { + return consumeBody(this, parseJSONFromBytes, instance); + }, + formData() { + return consumeBody(this, (value) => { + const mimeType = bodyMimeType(this); + if (mimeType !== null) { + switch (mimeType.essence) { + case "multipart/form-data": { + const parsed = multipartFormDataParser(value, mimeType); + if (parsed === "failure") { + throw new TypeError("Failed to parse body as FormData."); + } + const fd = new FormData(); + fd[kState] = parsed; + return fd; + } + case "application/x-www-form-urlencoded": { + const entries = new URLSearchParams(value.toString()); + const fd = new FormData(); + for (const [name, value2] of entries) { + fd.append(name, value2); + } + return fd; + } + } + } + throw new TypeError( + 'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".' + ); + }, instance); + }, + bytes() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes); + }, instance); + } + }; + return methods; + } + function mixinBody(prototype) { + Object.assign(prototype.prototype, bodyMixinMethods(prototype)); + } + async function consumeBody(object, convertBytesToJSValue, instance) { + webidl.brandCheck(object, instance); + if (bodyUnusable(object)) { + throw new TypeError("Body is unusable: Body has already been read"); + } + throwIfAborted(object[kState]); + const promise = createDeferredPromise(); + const errorSteps = (error2) => promise.reject(error2); + const successSteps = (data) => { + try { + promise.resolve(convertBytesToJSValue(data)); + } catch (e) { + errorSteps(e); + } + }; + if (object[kState].body == null) { + successSteps(Buffer.allocUnsafe(0)); + return promise.promise; + } + await fullyReadBody(object[kState].body, successSteps, errorSteps); + return promise.promise; + } + function bodyUnusable(object) { + const body = object[kState].body; + return body != null && (body.stream.locked || util.isDisturbed(body.stream)); + } + function parseJSONFromBytes(bytes) { + return JSON.parse(utf8DecodeBytes(bytes)); + } + function bodyMimeType(requestOrResponse) { + const headers = requestOrResponse[kState].headersList; + const mimeType = extractMimeType(headers); + if (mimeType === "failure") { + return null; + } + return mimeType; + } + module.exports = { + extractBody, + safelyExtractBody, + cloneBody, + mixinBody, + streamRegistry, + hasFinalizationRegistry, + bodyUnusable + }; + } +}); + +// +var require_client_h1 = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var util = require_util(); + var { channels } = require_diagnostics(); + var timers = require_timers(); + var { + RequestContentLengthMismatchError, + ResponseContentLengthMismatchError, + RequestAbortedError, + HeadersTimeoutError, + HeadersOverflowError, + SocketError, + InformationalError, + BodyTimeoutError, + HTTPParserError, + ResponseExceededMaxSizeError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kParser, + kBlocking, + kRunning, + kPending, + kSize, + kWriting, + kQueue, + kNoRef, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kSocket, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kMaxRequests, + kCounter, + kMaxResponseSize, + kOnError, + kResume, + kHTTPContext + } = require_symbols(); + var constants3 = require_constants2(); + var EMPTY_BUF = Buffer.alloc(0); + var FastBuffer = Buffer[Symbol.species]; + var addListener = util.addListener; + var removeAllListeners = util.removeAllListeners; + var extractBody; + async function lazyllhttp() { + const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; + let mod; + try { + mod = await WebAssembly.compile(require_llhttp_simd_wasm()); + } catch (e) { + mod = await WebAssembly.compile(llhttpWasmData || require_llhttp_wasm()); + } + return await WebAssembly.instantiate(mod, { + env: { + /* eslint-disable camelcase */ + wasm_on_url: (p, at, len) => { + return 0; + }, + wasm_on_status: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_begin: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageBegin() || 0; + }, + wasm_on_header_field: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_header_value: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { + assert(currentParser.ptr === p); + return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0; + }, + wasm_on_body: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_complete: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageComplete() || 0; + } + /* eslint-enable camelcase */ + } + }); + } + var llhttpInstance = null; + var llhttpPromise = lazyllhttp(); + llhttpPromise.catch(); + var currentParser = null; + var currentBufferRef = null; + var currentBufferSize = 0; + var currentBufferPtr = null; + var USE_NATIVE_TIMER = 0; + var USE_FAST_TIMER = 1; + var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER; + var TIMEOUT_BODY = 4 | USE_FAST_TIMER; + var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; + var Parser = class { + constructor(client, socket, { exports: exports2 }) { + assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); + this.llhttp = exports2; + this.ptr = this.llhttp.llhttp_alloc(constants3.TYPE.RESPONSE); + this.client = client; + this.socket = socket; + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.statusCode = null; + this.statusText = ""; + this.upgrade = false; + this.headers = []; + this.headersSize = 0; + this.headersMaxSize = client[kMaxHeadersSize]; + this.shouldKeepAlive = false; + this.paused = false; + this.resume = this.resume.bind(this); + this.bytesRead = 0; + this.keepAlive = ""; + this.contentLength = ""; + this.connection = ""; + this.maxResponseSize = client[kMaxResponseSize]; + } + setTimeout(delay, type) { + if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) { + if (this.timeout) { + timers.clearTimeout(this.timeout); + this.timeout = null; + } + if (delay) { + if (type & USE_FAST_TIMER) { + this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this)); + } else { + this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this)); + this.timeout.unref(); + } + } + this.timeoutValue = delay; + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.timeoutType = type; + } + resume() { + if (this.socket.destroyed || !this.paused) { + return; + } + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_resume(this.ptr); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.paused = false; + this.execute(this.socket.read() || EMPTY_BUF); + this.readMore(); + } + readMore() { + while (!this.paused && this.ptr) { + const chunk = this.socket.read(); + if (chunk === null) { + break; + } + this.execute(chunk); + } + } + execute(data) { + assert(this.ptr != null); + assert(currentParser == null); + assert(!this.paused); + const { socket, llhttp } = this; + if (data.length > currentBufferSize) { + if (currentBufferPtr) { + llhttp.free(currentBufferPtr); + } + currentBufferSize = Math.ceil(data.length / 4096) * 4096; + currentBufferPtr = llhttp.malloc(currentBufferSize); + } + new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data); + try { + let ret; + try { + currentBufferRef = data; + currentParser = this; + ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length); + } catch (err) { + throw err; + } finally { + currentParser = null; + currentBufferRef = null; + } + const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; + if (ret !== constants3.ERROR.OK) { + const body = data.subarray(offset); + if (ret === constants3.ERROR.PAUSED_UPGRADE) { + this.onUpgrade(body); + } else if (ret === constants3.ERROR.PAUSED) { + this.paused = true; + socket.unshift(body); + } else { + throw this.createError(ret, body); + } + } + } catch (err) { + util.destroy(socket, err); + } + } + finish() { + assert(currentParser === null); + assert(this.ptr != null); + assert(!this.paused); + const { llhttp } = this; + let ret; + try { + currentParser = this; + ret = llhttp.llhttp_finish(this.ptr); + } finally { + currentParser = null; + } + if (ret === constants3.ERROR.OK) { + return null; + } + if (ret === constants3.ERROR.PAUSED || ret === constants3.ERROR.PAUSED_UPGRADE) { + this.paused = true; + return null; + } + return this.createError(ret, EMPTY_BUF); + } + createError(ret, data) { + const { llhttp, contentLength, bytesRead } = this; + if (contentLength && bytesRead !== parseInt(contentLength, 10)) { + return new ResponseContentLengthMismatchError(); + } + const ptr = llhttp.llhttp_get_error_reason(this.ptr); + let message = ""; + if (ptr) { + const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0); + message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")"; + } + return new HTTPParserError(message, constants3.ERROR[ret], data); + } + destroy() { + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_free(this.ptr); + this.ptr = null; + this.timeout && timers.clearTimeout(this.timeout); + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.paused = false; + } + onStatus(buf) { + this.statusText = buf.toString(); + } + onMessageBegin() { + const { socket, client } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + if (!request) { + return -1; + } + request.onResponseStarted(); + } + onHeaderField(buf) { + const len = this.headers.length; + if ((len & 1) === 0) { + this.headers.push(buf); + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + this.trackHeader(buf.length); + } + onHeaderValue(buf) { + let len = this.headers.length; + if ((len & 1) === 1) { + this.headers.push(buf); + len += 1; + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + const key = this.headers[len - 2]; + if (key.length === 10) { + const headerName = util.bufferToLowerCasedHeaderName(key); + if (headerName === "keep-alive") { + this.keepAlive += buf.toString(); + } else if (headerName === "connection") { + this.connection += buf.toString(); + } + } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === "content-length") { + this.contentLength += buf.toString(); + } + this.trackHeader(buf.length); + } + trackHeader(len) { + this.headersSize += len; + if (this.headersSize >= this.headersMaxSize) { + util.destroy(this.socket, new HeadersOverflowError()); + } + } + onUpgrade(head) { + const { upgrade, client, socket, headers, statusCode } = this; + assert(upgrade); + assert(client[kSocket] === socket); + assert(!socket.destroyed); + assert(!this.paused); + assert((headers.length & 1) === 0); + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + assert(request.upgrade || request.method === "CONNECT"); + this.statusCode = null; + this.statusText = ""; + this.shouldKeepAlive = null; + this.headers = []; + this.headersSize = 0; + socket.unshift(head); + socket[kParser].destroy(); + socket[kParser] = null; + socket[kClient] = null; + socket[kError] = null; + removeAllListeners(socket); + client[kSocket] = null; + client[kHTTPContext] = null; + client[kQueue][client[kRunningIdx]++] = null; + client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade")); + try { + request.onUpgrade(statusCode, headers, socket); + } catch (err) { + util.destroy(socket, err); + } + client[kResume](); + } + onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { + const { client, socket, headers, statusText } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + if (!request) { + return -1; + } + assert(!this.upgrade); + assert(this.statusCode < 200); + if (statusCode === 100) { + util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); + return -1; + } + if (upgrade && !request.upgrade) { + util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket))); + return -1; + } + assert(this.timeoutType === TIMEOUT_HEADERS); + this.statusCode = statusCode; + this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD. + request.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive"; + if (this.statusCode >= 200) { + const bodyTimeout = request.bodyTimeout != null ? request.bodyTimeout : client[kBodyTimeout]; + this.setTimeout(bodyTimeout, TIMEOUT_BODY); + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + if (request.method === "CONNECT") { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + if (upgrade) { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + assert((this.headers.length & 1) === 0); + this.headers = []; + this.headersSize = 0; + if (this.shouldKeepAlive && client[kPipelining]) { + const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null; + if (keepAliveTimeout != null) { + const timeout = Math.min( + keepAliveTimeout - client[kKeepAliveTimeoutThreshold], + client[kKeepAliveMaxTimeout] + ); + if (timeout <= 0) { + socket[kReset] = true; + } else { + client[kKeepAliveTimeoutValue] = timeout; + } + } else { + client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]; + } + } else { + socket[kReset] = true; + } + const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false; + if (request.aborted) { + return -1; + } + if (request.method === "HEAD") { + return 1; + } + if (statusCode < 200) { + return 1; + } + if (socket[kBlocking]) { + socket[kBlocking] = false; + client[kResume](); + } + return pause ? constants3.ERROR.PAUSED : 0; + } + onBody(buf) { + const { client, socket, statusCode, maxResponseSize } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + assert(statusCode >= 200); + if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) { + util.destroy(socket, new ResponseExceededMaxSizeError()); + return -1; + } + this.bytesRead += buf.length; + if (request.onData(buf) === false) { + return constants3.ERROR.PAUSED; + } + } + onMessageComplete() { + const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this; + if (socket.destroyed && (!statusCode || shouldKeepAlive)) { + return -1; + } + if (upgrade) { + return; + } + assert(statusCode >= 100); + assert((this.headers.length & 1) === 0); + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + this.statusCode = null; + this.statusText = ""; + this.bytesRead = 0; + this.contentLength = ""; + this.keepAlive = ""; + this.connection = ""; + this.headers = []; + this.headersSize = 0; + if (statusCode < 200) { + return; + } + if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { + util.destroy(socket, new ResponseContentLengthMismatchError()); + return -1; + } + request.onComplete(headers); + client[kQueue][client[kRunningIdx]++] = null; + if (socket[kWriting]) { + assert(client[kRunning] === 0); + util.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (!shouldKeepAlive) { + util.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (socket[kReset] && client[kRunning] === 0) { + util.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (client[kPipelining] == null || client[kPipelining] === 1) { + setImmediate(() => client[kResume]()); + } else { + client[kResume](); + } + } + }; + function onParserTimeout(parser) { + const { socket, timeoutType, client, paused } = parser.deref(); + if (timeoutType === TIMEOUT_HEADERS) { + if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { + assert(!paused, "cannot be paused while waiting for headers"); + util.destroy(socket, new HeadersTimeoutError()); + } + } else if (timeoutType === TIMEOUT_BODY) { + if (!paused) { + util.destroy(socket, new BodyTimeoutError()); + } + } else if (timeoutType === TIMEOUT_KEEP_ALIVE) { + assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]); + util.destroy(socket, new InformationalError("socket idle timeout")); + } + } + async function connectH1(client, socket) { + client[kSocket] = socket; + if (!llhttpInstance) { + llhttpInstance = await llhttpPromise; + llhttpPromise = null; + } + socket[kNoRef] = false; + socket[kWriting] = false; + socket[kReset] = false; + socket[kBlocking] = false; + socket[kParser] = new Parser(client, socket, llhttpInstance); + addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + const parser = this[kParser]; + if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { + const parserErr = parser.finish(); + if (parserErr) { + this[kError] = parserErr; + this[kClient][kOnError](parserErr); + } + return; + } + this[kError] = err; + this[kClient][kOnError](err); + }); + addListener(socket, "readable", function() { + const parser = this[kParser]; + if (parser) { + parser.readMore(); + } + }); + addListener(socket, "end", function() { + const parser = this[kParser]; + if (parser.statusCode && !parser.shouldKeepAlive) { + const parserErr = parser.finish(); + if (parserErr) { + util.destroy(this, parserErr); + } + return; + } + util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); + }); + addListener(socket, "close", function() { + const client2 = this[kClient]; + const parser = this[kParser]; + if (parser) { + if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { + this[kError] = parser.finish() || this[kError]; + } + this[kParser].destroy(); + this[kParser] = null; + } + const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); + client2[kSocket] = null; + client2[kHTTPContext] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client2, request, err); + } + } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { + const request = client2[kQueue][client2[kRunningIdx]]; + client2[kQueue][client2[kRunningIdx]++] = null; + util.errorRequest(client2, request, err); + } + client2[kPendingIdx] = client2[kRunningIdx]; + assert(client2[kRunning] === 0); + client2.emit("disconnect", client2[kUrl], [client2], err); + client2[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h1", + defaultPipelining: 1, + write(...args) { + return writeH1(client, ...args); + }, + resume() { + resumeH1(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy(request) { + if (socket[kWriting] || socket[kReset] || socket[kBlocking]) { + return true; + } + if (request) { + if (client[kRunning] > 0 && !request.idempotent) { + return true; + } + if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) { + return true; + } + if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) { + return true; + } + } + return false; + } + }; + } + function resumeH1(client) { + const socket = client[kSocket]; + if (socket && !socket.destroyed) { + if (client[kSize] === 0) { + if (!socket[kNoRef] && socket.unref) { + socket.unref(); + socket[kNoRef] = true; + } + } else if (socket[kNoRef] && socket.ref) { + socket.ref(); + socket[kNoRef] = false; + } + if (client[kSize] === 0) { + if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { + socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); + } + } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) { + if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) { + const request = client[kQueue][client[kRunningIdx]]; + const headersTimeout = request.headersTimeout != null ? request.headersTimeout : client[kHeadersTimeout]; + socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS); + } + } + } + } + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + function writeH1(client, request) { + const { method, path, host, upgrade, blocking, reset } = request; + let { body, headers, contentLength } = request; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; + if (util.isFormDataLike(body)) { + if (!extractBody) { + extractBody = require_body().extractBody; + } + const [bodyStream, contentType] = extractBody(body); + if (request.contentType == null) { + headers.push("content-type", contentType); + } + body = bodyStream.stream; + contentLength = bodyStream.length; + } else if (util.isBlobLike(body) && request.contentType == null && body.type) { + headers.push("content-type", body.type); + } + if (body && typeof body.read === "function") { + body.read(0); + } + const bodyLength = util.bodyLength(body); + contentLength = bodyLength ?? contentLength; + if (contentLength === null) { + contentLength = request.contentLength; + } + if (contentLength === 0 && !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request, new RequestContentLengthMismatchError()); + return false; + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + const socket = client[kSocket]; + const abort = (err) => { + if (request.aborted || request.completed) { + return; + } + util.errorRequest(client, request, err || new RequestAbortedError()); + util.destroy(body); + util.destroy(socket, new InformationalError("aborted")); + }; + try { + request.onConnect(abort); + } catch (err) { + util.errorRequest(client, request, err); + } + if (request.aborted) { + return false; + } + if (method === "HEAD") { + socket[kReset] = true; + } + if (upgrade || method === "CONNECT") { + socket[kReset] = true; + } + if (reset != null) { + socket[kReset] = reset; + } + if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { + socket[kReset] = true; + } + if (blocking) { + socket[kBlocking] = true; + } + let header = `${method} ${path} HTTP/1.1\r +`; + if (typeof host === "string") { + header += `host: ${host}\r +`; + } else { + header += client[kHostHeader]; + } + if (upgrade) { + header += `connection: upgrade\r +upgrade: ${upgrade}\r +`; + } else if (client[kPipelining] && !socket[kReset]) { + header += "connection: keep-alive\r\n"; + } else { + header += "connection: close\r\n"; + } + if (Array.isArray(headers)) { + for (let n = 0; n < headers.length; n += 2) { + const key = headers[n + 0]; + const val = headers[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + header += `${key}: ${val[i]}\r +`; + } + } else { + header += `${key}: ${val}\r +`; + } + } + } + if (channels.sendHeaders.hasSubscribers) { + channels.sendHeaders.publish({ request, headers: header, socket }); + } + if (!body || bodyLength === 0) { + writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isBuffer(body)) { + writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload); + } else { + writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload); + } + } else if (util.isStream(body)) { + writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isIterable(body)) { + writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else { + assert(false); + } + return true; + } + function writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + let finished = false; + const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); + const onData = function(chunk) { + if (finished) { + return; + } + try { + if (!writer.write(chunk) && this.pause) { + this.pause(); + } + } catch (err) { + util.destroy(this, err); + } + }; + const onDrain = function() { + if (finished) { + return; + } + if (body.resume) { + body.resume(); + } + }; + const onClose = function() { + queueMicrotask(() => { + body.removeListener("error", onFinished); + }); + if (!finished) { + const err = new RequestAbortedError(); + queueMicrotask(() => onFinished(err)); + } + }; + const onFinished = function(err) { + if (finished) { + return; + } + finished = true; + assert(socket.destroyed || socket[kWriting] && client[kRunning] <= 1); + socket.off("drain", onDrain).off("error", onFinished); + body.removeListener("data", onData).removeListener("end", onFinished).removeListener("close", onClose); + if (!err) { + try { + writer.end(); + } catch (er) { + err = er; + } + } + writer.destroy(err); + if (err && (err.code !== "UND_ERR_INFO" || err.message !== "reset")) { + util.destroy(body, err); + } else { + util.destroy(body); + } + }; + body.on("data", onData).on("end", onFinished).on("error", onFinished).on("close", onClose); + if (body.resume) { + body.resume(); + } + socket.on("drain", onDrain).on("error", onFinished); + if (body.errorEmitted ?? body.errored) { + setImmediate(() => onFinished(body.errored)); + } else if (body.endEmitted ?? body.readableEnded) { + setImmediate(() => onFinished(null)); + } + if (body.closeEmitted ?? body.closed) { + setImmediate(onClose); + } + } + function writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload) { + try { + if (!body) { + if (contentLength === 0) { + socket.write(`${header}content-length: 0\r +\r +`, "latin1"); + } else { + assert(contentLength === null, "no body must not have content length"); + socket.write(`${header}\r +`, "latin1"); + } + } else if (util.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + socket.write(body); + socket.uncork(); + request.onBodySent(body); + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + } + request.onRequestSent(); + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + socket.write(buffer); + socket.uncork(); + request.onBodySent(buffer); + request.onRequestSent(); + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + const waitForDrain = () => new Promise((resolve, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve; + } + }); + socket.on("close", onDrain).on("drain", onDrain); + const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + if (!writer.write(chunk)) { + await waitForDrain(); + } + } + writer.end(); + } catch (err) { + writer.destroy(err); + } finally { + socket.off("close", onDrain).off("drain", onDrain); + } + } + var AsyncWriter = class { + constructor({ abort, socket, request, contentLength, client, expectsPayload, header }) { + this.socket = socket; + this.request = request; + this.contentLength = contentLength; + this.client = client; + this.bytesWritten = 0; + this.expectsPayload = expectsPayload; + this.header = header; + this.abort = abort; + socket[kWriting] = true; + } + write(chunk) { + const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return false; + } + const len = Buffer.byteLength(chunk); + if (!len) { + return true; + } + if (contentLength !== null && bytesWritten + len > contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + socket.cork(); + if (bytesWritten === 0) { + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + if (contentLength === null) { + socket.write(`${header}transfer-encoding: chunked\r +`, "latin1"); + } else { + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + } + } + if (contentLength === null) { + socket.write(`\r +${len.toString(16)}\r +`, "latin1"); + } + this.bytesWritten += len; + const ret = socket.write(chunk); + socket.uncork(); + request.onBodySent(chunk); + if (!ret) { + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + } + return ret; + } + end() { + const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this; + request.onRequestSent(); + socket[kWriting] = false; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return; + } + if (bytesWritten === 0) { + if (expectsPayload) { + socket.write(`${header}content-length: 0\r +\r +`, "latin1"); + } else { + socket.write(`${header}\r +`, "latin1"); + } + } else if (contentLength === null) { + socket.write("\r\n0\r\n\r\n", "latin1"); + } + if (contentLength !== null && bytesWritten !== contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } else { + process.emitWarning(new RequestContentLengthMismatchError()); + } + } + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + client[kResume](); + } + destroy(err) { + const { socket, client, abort } = this; + socket[kWriting] = false; + if (err) { + assert(client[kRunning] <= 1, "pipeline should only contain this request"); + abort(err); + } + } + }; + module.exports = connectH1; + } +}); + +// +var require_client_h2 = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { pipeline } = __require("node:stream"); + var util = require_util(); + var { + RequestContentLengthMismatchError, + RequestAbortedError, + SocketError, + InformationalError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kRunning, + kPending, + kQueue, + kPendingIdx, + kRunningIdx, + kError, + kSocket, + kStrictContentLength, + kOnError, + kMaxConcurrentStreams, + kHTTP2Session, + kResume, + kSize, + kHTTPContext + } = require_symbols(); + var kOpenStreams = Symbol("open streams"); + var extractBody; + var h2ExperimentalWarned = false; + var http2; + try { + http2 = __require("node:http2"); + } catch { + http2 = { constants: {} }; + } + var { + constants: { + HTTP2_HEADER_AUTHORITY, + HTTP2_HEADER_METHOD, + HTTP2_HEADER_PATH, + HTTP2_HEADER_SCHEME, + HTTP2_HEADER_CONTENT_LENGTH, + HTTP2_HEADER_EXPECT, + HTTP2_HEADER_STATUS + } + } = http2; + function parseH2Headers(headers) { + const result = []; + for (const [name, value] of Object.entries(headers)) { + if (Array.isArray(value)) { + for (const subvalue of value) { + result.push(Buffer.from(name), Buffer.from(subvalue)); + } + } else { + result.push(Buffer.from(name), Buffer.from(value)); + } + } + return result; + } + async function connectH2(client, socket) { + client[kSocket] = socket; + if (!h2ExperimentalWarned) { + h2ExperimentalWarned = true; + process.emitWarning("H2 support is experimental, expect them to change at any time.", { + code: "UNDICI-H2" + }); + } + const session = http2.connect(client[kUrl], { + createConnection: () => socket, + peerMaxConcurrentStreams: client[kMaxConcurrentStreams] + }); + session[kOpenStreams] = 0; + session[kClient] = client; + session[kSocket] = socket; + util.addListener(session, "error", onHttp2SessionError); + util.addListener(session, "frameError", onHttp2FrameError); + util.addListener(session, "end", onHttp2SessionEnd); + util.addListener(session, "goaway", onHTTP2GoAway); + util.addListener(session, "close", function() { + const { [kClient]: client2 } = this; + const { [kSocket]: socket2 } = client2; + const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util.getSocketInfo(socket2)); + client2[kHTTP2Session] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client2, request, err); + } + } + }); + session.unref(); + client[kHTTP2Session] = session; + socket[kHTTP2Session] = session; + util.addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kError] = err; + this[kClient][kOnError](err); + }); + util.addListener(socket, "end", function() { + util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); + }); + util.addListener(socket, "close", function() { + const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); + client[kSocket] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + } + client[kPendingIdx] = client[kRunningIdx]; + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h2", + defaultPipelining: Infinity, + write(...args) { + return writeH2(client, ...args); + }, + resume() { + resumeH2(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy() { + return false; + } + }; + } + function resumeH2(client) { + const socket = client[kSocket]; + if (socket?.destroyed === false) { + if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) { + socket.unref(); + client[kHTTP2Session].unref(); + } else { + socket.ref(); + client[kHTTP2Session].ref(); + } + } + } + function onHttp2SessionError(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + function onHttp2FrameError(type, code, id) { + if (id === 0) { + const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + } + function onHttp2SessionEnd() { + const err = new SocketError("other side closed", util.getSocketInfo(this[kSocket])); + this.destroy(err); + util.destroy(this[kSocket], err); + } + function onHTTP2GoAway(code) { + const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util.getSocketInfo(this)); + const client = this[kClient]; + client[kSocket] = null; + client[kHTTPContext] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + this[kHTTP2Session] = null; + } + util.destroy(this[kSocket], err); + if (client[kRunningIdx] < client[kQueue].length) { + const request = client[kQueue][client[kRunningIdx]]; + client[kQueue][client[kRunningIdx]++] = null; + util.errorRequest(client, request, err); + client[kPendingIdx] = client[kRunningIdx]; + } + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + } + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + function writeH2(client, request) { + const session = client[kHTTP2Session]; + const { method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request; + let { body } = request; + if (upgrade) { + util.errorRequest(client, request, new Error("Upgrade not supported for H2")); + return false; + } + const headers = {}; + for (let n = 0; n < reqHeaders.length; n += 2) { + const key = reqHeaders[n + 0]; + const val = reqHeaders[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + if (headers[key]) { + headers[key] += `,${val[i]}`; + } else { + headers[key] = val[i]; + } + } + } else { + headers[key] = val; + } + } + let stream; + const { hostname, port } = client[kUrl]; + headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`; + headers[HTTP2_HEADER_METHOD] = method; + const abort = (err) => { + if (request.aborted || request.completed) { + return; + } + err = err || new RequestAbortedError(); + util.errorRequest(client, request, err); + if (stream != null) { + util.destroy(stream, err); + } + util.destroy(body, err); + client[kQueue][client[kRunningIdx]++] = null; + client[kResume](); + }; + try { + request.onConnect(abort); + } catch (err) { + util.errorRequest(client, request, err); + } + if (request.aborted) { + return false; + } + if (method === "CONNECT") { + session.ref(); + stream = session.request(headers, { endStream: false, signal }); + if (stream.id && !stream.pending) { + request.onUpgrade(null, null, stream); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + } else { + stream.once("ready", () => { + request.onUpgrade(null, null, stream); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + }); + } + stream.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) + session.unref(); + }); + return true; + } + headers[HTTP2_HEADER_PATH] = path; + headers[HTTP2_HEADER_SCHEME] = "https"; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; + if (body && typeof body.read === "function") { + body.read(0); + } + let contentLength = util.bodyLength(body); + if (util.isFormDataLike(body)) { + extractBody ??= require_body().extractBody; + const [bodyStream, contentType] = extractBody(body); + headers["content-type"] = contentType; + body = bodyStream.stream; + contentLength = bodyStream.length; + } + if (contentLength == null) { + contentLength = request.contentLength; + } + if (contentLength === 0 || !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request, new RequestContentLengthMismatchError()); + return false; + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + if (contentLength != null) { + assert(body, "no body must not have content length"); + headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`; + } + session.ref(); + const shouldEndStream = method === "GET" || method === "HEAD" || body === null; + if (expectContinue) { + headers[HTTP2_HEADER_EXPECT] = "100-continue"; + stream = session.request(headers, { endStream: shouldEndStream, signal }); + stream.once("continue", writeBodyH2); + } else { + stream = session.request(headers, { + endStream: shouldEndStream, + signal + }); + writeBodyH2(); + } + ++session[kOpenStreams]; + stream.once("response", (headers2) => { + const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2; + request.onResponseStarted(); + if (request.aborted) { + const err = new RequestAbortedError(); + util.errorRequest(client, request, err); + util.destroy(stream, err); + return; + } + if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) { + stream.pause(); + } + stream.on("data", (chunk) => { + if (request.onData(chunk) === false) { + stream.pause(); + } + }); + }); + stream.once("end", () => { + if (stream.state?.state == null || stream.state.state < 6) { + request.onComplete([]); + } + if (session[kOpenStreams] === 0) { + session.unref(); + } + abort(new InformationalError("HTTP/2: stream half-closed (remote)")); + client[kQueue][client[kRunningIdx]++] = null; + client[kPendingIdx] = client[kRunningIdx]; + client[kResume](); + }); + stream.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) { + session.unref(); + } + }); + stream.once("error", function(err) { + abort(err); + }); + stream.once("frameError", (type, code) => { + abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)); + }); + return true; + function writeBodyH2() { + if (!body || contentLength === 0) { + writeBuffer( + abort, + stream, + null, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBuffer(body)) { + writeBuffer( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable( + abort, + stream, + body.stream(), + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + writeBlob( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } + } else if (util.isStream(body)) { + writeStream( + abort, + client[kSocket], + expectsPayload, + stream, + body, + client, + request, + contentLength + ); + } else if (util.isIterable(body)) { + writeIterable( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + assert(false); + } + } + } + function writeBuffer(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + try { + if (body != null && util.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + h2stream.cork(); + h2stream.write(body); + h2stream.uncork(); + h2stream.end(); + request.onBodySent(body); + } + if (!expectsPayload) { + socket[kReset] = true; + } + request.onRequestSent(); + client[kResume](); + } catch (error2) { + abort(error2); + } + } + function writeStream(abort, socket, expectsPayload, h2stream, body, client, request, contentLength) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + const pipe = pipeline( + body, + h2stream, + (err) => { + if (err) { + util.destroy(pipe, err); + abort(err); + } else { + util.removeAllListeners(pipe); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } + } + ); + util.addListener(pipe, "data", onPipeData); + function onPipeData(chunk) { + request.onBodySent(chunk); + } + } + async function writeBlob(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + h2stream.cork(); + h2stream.write(buffer); + h2stream.uncork(); + h2stream.end(); + request.onBodySent(buffer); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + const waitForDrain = () => new Promise((resolve, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve; + } + }); + h2stream.on("close", onDrain).on("drain", onDrain); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + const res = h2stream.write(chunk); + request.onBodySent(chunk); + if (!res) { + await waitForDrain(); + } + } + h2stream.end(); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } finally { + h2stream.off("close", onDrain).off("drain", onDrain); + } + } + module.exports = connectH2; + } +}); + +// +var require_redirect_handler = __commonJS({ + ""(exports, module) { + "use strict"; + var util = require_util(); + var { kBodyUsed } = require_symbols(); + var assert = __require("node:assert"); + var { InvalidArgumentError } = require_errors(); + var EE = __require("node:events"); + var redirectableStatusCodes = [300, 301, 302, 303, 307, 308]; + var kBody = Symbol("body"); + var BodyAsyncIterable = class { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + var RedirectHandler = class { + constructor(dispatch, maxRedirections, opts, handler) { + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + util.validateHandler(handler, opts.method, opts.upgrade); + this.dispatch = dispatch; + this.location = null; + this.abort = null; + this.opts = { ...opts, maxRedirections: 0 }; + this.maxRedirections = maxRedirections; + this.handler = handler; + this.history = []; + this.redirectionLimitReached = false; + if (util.isStream(this.opts.body)) { + if (util.bodyLength(this.opts.body) === 0) { + this.opts.body.on("data", function() { + assert(false); + }); + } + if (typeof this.opts.body.readableDidRead !== "boolean") { + this.opts.body[kBodyUsed] = false; + EE.prototype.on.call(this.opts.body, "data", function() { + this[kBodyUsed] = true; + }); + } + } else if (this.opts.body && typeof this.opts.body.pipeTo === "function") { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util.isIterable(this.opts.body)) { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } + } + onConnect(abort) { + this.abort = abort; + this.handler.onConnect(abort, { history: this.history }); + } + onUpgrade(statusCode, headers, socket) { + this.handler.onUpgrade(statusCode, headers, socket); + } + onError(error2) { + this.handler.onError(error2); + } + onHeaders(statusCode, headers, resume, statusText) { + this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers); + if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) { + if (this.request) { + this.request.abort(new Error("max redirects")); + } + this.redirectionLimitReached = true; + this.abort(new Error("max redirects")); + return; + } + if (this.opts.origin) { + this.history.push(new URL(this.opts.path, this.opts.origin)); + } + if (!this.location) { + return this.handler.onHeaders(statusCode, headers, resume, statusText); + } + const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))); + const path = search ? `${pathname}${search}` : pathname; + this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); + this.opts.path = path; + this.opts.origin = origin; + this.opts.maxRedirections = 0; + this.opts.query = null; + if (statusCode === 303 && this.opts.method !== "HEAD") { + this.opts.method = "GET"; + this.opts.body = null; + } + } + onData(chunk) { + if (this.location) { + } else { + return this.handler.onData(chunk); + } + } + onComplete(trailers) { + if (this.location) { + this.location = null; + this.abort = null; + this.dispatch(this.opts, this); + } else { + this.handler.onComplete(trailers); + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) { + this.handler.onBodySent(chunk); + } + } + }; + function parseLocation(statusCode, headers) { + if (redirectableStatusCodes.indexOf(statusCode) === -1) { + return null; + } + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].length === 8 && util.headerNameToString(headers[i]) === "location") { + return headers[i + 1]; + } + } + } + function shouldRemoveHeader(header, removeContent, unknownOrigin) { + if (header.length === 4) { + return util.headerNameToString(header) === "host"; + } + if (removeContent && util.headerNameToString(header).startsWith("content-")) { + return true; + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util.headerNameToString(header); + return name === "authorization" || name === "cookie" || name === "proxy-authorization"; + } + return false; + } + function cleanRequestHeaders(headers, removeContent, unknownOrigin) { + const ret = []; + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) { + ret.push(headers[i], headers[i + 1]); + } + } + } else if (headers && typeof headers === "object") { + for (const key of Object.keys(headers)) { + if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) { + ret.push(key, headers[key]); + } + } + } else { + assert(headers == null, "headers must be an object or an array"); + } + return ret; + } + module.exports = RedirectHandler; + } +}); + +// +var require_redirect_interceptor = __commonJS({ + ""(exports, module) { + "use strict"; + var RedirectHandler = require_redirect_handler(); + function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) { + return (dispatch) => { + return function Intercept(opts, handler) { + const { maxRedirections = defaultMaxRedirections } = opts; + if (!maxRedirections) { + return dispatch(opts, handler); + } + const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler); + opts = { ...opts, maxRedirections: 0 }; + return dispatch(opts, redirectHandler); + }; + }; + } + module.exports = createRedirectInterceptor; + } +}); + +// +var require_client = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var net = __require("node:net"); + var http = __require("node:http"); + var util = require_util(); + var { channels } = require_diagnostics(); + var Request = require_request(); + var DispatcherBase = require_dispatcher_base(); + var { + InvalidArgumentError, + InformationalError, + ClientDestroyedError + } = require_errors(); + var buildConnector = require_connect(); + var { + kUrl, + kServerName, + kClient, + kBusy, + kConnect, + kResuming, + kRunning, + kPending, + kSize, + kQueue, + kConnected, + kConnecting, + kNeedDrain, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kConnector, + kMaxRedirections, + kMaxRequests, + kCounter, + kClose, + kDestroy, + kDispatch, + kInterceptors, + kLocalAddress, + kMaxResponseSize, + kOnError, + kHTTPContext, + kMaxConcurrentStreams, + kResume + } = require_symbols(); + var connectH1 = require_client_h1(); + var connectH2 = require_client_h2(); + var deprecatedInterceptorWarned = false; + var kClosedResolve = Symbol("kClosedResolve"); + var noop = () => { + }; + function getPipelining(client) { + return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1; + } + var Client = class extends DispatcherBase { + /** + * + * @param {string|URL} url + * @param {import('../../types/client.js').Client.Options} options + */ + constructor(url, { + interceptors, + maxHeaderSize, + headersTimeout, + socketTimeout, + requestTimeout, + connectTimeout, + bodyTimeout, + idleTimeout, + keepAlive, + keepAliveTimeout, + maxKeepAliveTimeout, + keepAliveMaxTimeout, + keepAliveTimeoutThreshold, + socketPath, + pipelining, + tls, + strictContentLength, + maxCachedSessions, + maxRedirections, + connect: connect2, + maxRequestsPerClient, + localAddress, + maxResponseSize, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + // h2 + maxConcurrentStreams, + allowH2, + webSocket + } = {}) { + super({ webSocket }); + if (keepAlive !== void 0) { + throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead"); + } + if (socketTimeout !== void 0) { + throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead"); + } + if (requestTimeout !== void 0) { + throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead"); + } + if (idleTimeout !== void 0) { + throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead"); + } + if (maxKeepAliveTimeout !== void 0) { + throw new InvalidArgumentError("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead"); + } + if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) { + throw new InvalidArgumentError("invalid maxHeaderSize"); + } + if (socketPath != null && typeof socketPath !== "string") { + throw new InvalidArgumentError("invalid socketPath"); + } + if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) { + throw new InvalidArgumentError("invalid connectTimeout"); + } + if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveTimeout"); + } + if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveMaxTimeout"); + } + if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) { + throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold"); + } + if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("headersTimeout must be a positive integer or zero"); + } + if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero"); + } + if (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) { + throw new InvalidArgumentError("maxRequestsPerClient must be a positive number"); + } + if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) { + throw new InvalidArgumentError("localAddress must be valid string IP address"); + } + if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) { + throw new InvalidArgumentError("maxResponseSize must be a positive number"); + } + if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) { + throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number"); + } + if (allowH2 != null && typeof allowH2 !== "boolean") { + throw new InvalidArgumentError("allowH2 must be a valid boolean value"); + } + if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) { + throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0"); + } + if (typeof connect2 !== "function") { + connect2 = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect2 + }); + } + if (interceptors?.Client && Array.isArray(interceptors.Client)) { + this[kInterceptors] = interceptors.Client; + if (!deprecatedInterceptorWarned) { + deprecatedInterceptorWarned = true; + process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", { + code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED" + }); + } + } else { + this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })]; + } + this[kUrl] = util.parseOrigin(url); + this[kConnector] = connect2; + this[kPipelining] = pipelining != null ? pipelining : 1; + this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize; + this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout; + this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout; + this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold; + this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]; + this[kServerName] = null; + this[kLocalAddress] = localAddress != null ? localAddress : null; + this[kResuming] = 0; + this[kNeedDrain] = 0; + this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r +`; + this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5; + this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5; + this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength; + this[kMaxRedirections] = maxRedirections; + this[kMaxRequests] = maxRequestsPerClient; + this[kClosedResolve] = null; + this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1; + this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100; + this[kHTTPContext] = null; + this[kQueue] = []; + this[kRunningIdx] = 0; + this[kPendingIdx] = 0; + this[kResume] = (sync) => resume(this, sync); + this[kOnError] = (err) => onError(this, err); + } + get pipelining() { + return this[kPipelining]; + } + set pipelining(value) { + this[kPipelining] = value; + this[kResume](true); + } + get [kPending]() { + return this[kQueue].length - this[kPendingIdx]; + } + get [kRunning]() { + return this[kPendingIdx] - this[kRunningIdx]; + } + get [kSize]() { + return this[kQueue].length - this[kRunningIdx]; + } + get [kConnected]() { + return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed; + } + get [kBusy]() { + return Boolean( + this[kHTTPContext]?.busy(null) || this[kSize] >= (getPipelining(this) || 1) || this[kPending] > 0 + ); + } + /* istanbul ignore: only used for test */ + [kConnect](cb) { + connect(this); + this.once("connect", cb); + } + [kDispatch](opts, handler) { + const origin = opts.origin || this[kUrl].origin; + const request = new Request(origin, opts, handler); + this[kQueue].push(request); + if (this[kResuming]) { + } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { + this[kResuming] = 1; + queueMicrotask(() => resume(this)); + } else { + this[kResume](true); + } + if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { + this[kNeedDrain] = 2; + } + return this[kNeedDrain] < 2; + } + async [kClose]() { + return new Promise((resolve) => { + if (this[kSize]) { + this[kClosedResolve] = resolve; + } else { + resolve(null); + } + }); + } + async [kDestroy](err) { + return new Promise((resolve) => { + const requests = this[kQueue].splice(this[kPendingIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(this, request, err); + } + const callback = () => { + if (this[kClosedResolve]) { + this[kClosedResolve](); + this[kClosedResolve] = null; + } + resolve(null); + }; + if (this[kHTTPContext]) { + this[kHTTPContext].destroy(err, callback); + this[kHTTPContext] = null; + } else { + queueMicrotask(callback); + } + this[kResume](); + }); + } + }; + var createRedirectInterceptor = require_redirect_interceptor(); + function onError(client, err) { + if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") { + assert(client[kPendingIdx] === client[kRunningIdx]); + const requests = client[kQueue].splice(client[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client, request, err); + } + assert(client[kSize] === 0); + } + } + async function connect(client) { + assert(!client[kConnecting]); + assert(!client[kHTTPContext]); + let { host, hostname, protocol, port } = client[kUrl]; + if (hostname[0] === "[") { + const idx = hostname.indexOf("]"); + assert(idx !== -1); + const ip = hostname.substring(1, idx); + assert(net.isIP(ip)); + hostname = ip; + } + client[kConnecting] = true; + if (channels.beforeConnect.hasSubscribers) { + channels.beforeConnect.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector] + }); + } + try { + const socket = await new Promise((resolve, reject) => { + client[kConnector]({ + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, (err, socket2) => { + if (err) { + reject(err); + } else { + resolve(socket2); + } + }); + }); + if (client.destroyed) { + util.destroy(socket.on("error", noop), new ClientDestroyedError()); + return; + } + assert(socket); + try { + client[kHTTPContext] = socket.alpnProtocol === "h2" ? await connectH2(client, socket) : await connectH1(client, socket); + } catch (err) { + socket.destroy().on("error", noop); + throw err; + } + client[kConnecting] = false; + socket[kCounter] = 0; + socket[kMaxRequests] = client[kMaxRequests]; + socket[kClient] = client; + socket[kError] = null; + if (channels.connected.hasSubscribers) { + channels.connected.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + socket + }); + } + client.emit("connect", client[kUrl], [client]); + } catch (err) { + if (client.destroyed) { + return; + } + client[kConnecting] = false; + if (channels.connectError.hasSubscribers) { + channels.connectError.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + error: err + }); + } + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + assert(client[kRunning] === 0); + while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) { + const request = client[kQueue][client[kPendingIdx]++]; + util.errorRequest(client, request, err); + } + } else { + onError(client, err); + } + client.emit("connectionError", client[kUrl], [client], err); + } + client[kResume](); + } + function emitDrain(client) { + client[kNeedDrain] = 0; + client.emit("drain", client[kUrl], [client]); + } + function resume(client, sync) { + if (client[kResuming] === 2) { + return; + } + client[kResuming] = 2; + _resume(client, sync); + client[kResuming] = 0; + if (client[kRunningIdx] > 256) { + client[kQueue].splice(0, client[kRunningIdx]); + client[kPendingIdx] -= client[kRunningIdx]; + client[kRunningIdx] = 0; + } + } + function _resume(client, sync) { + while (true) { + if (client.destroyed) { + assert(client[kPending] === 0); + return; + } + if (client[kClosedResolve] && !client[kSize]) { + client[kClosedResolve](); + client[kClosedResolve] = null; + return; + } + if (client[kHTTPContext]) { + client[kHTTPContext].resume(); + } + if (client[kBusy]) { + client[kNeedDrain] = 2; + } else if (client[kNeedDrain] === 2) { + if (sync) { + client[kNeedDrain] = 1; + queueMicrotask(() => emitDrain(client)); + } else { + emitDrain(client); + } + continue; + } + if (client[kPending] === 0) { + return; + } + if (client[kRunning] >= (getPipelining(client) || 1)) { + return; + } + const request = client[kQueue][client[kPendingIdx]]; + if (client[kUrl].protocol === "https:" && client[kServerName] !== request.servername) { + if (client[kRunning] > 0) { + return; + } + client[kServerName] = request.servername; + client[kHTTPContext]?.destroy(new InformationalError("servername changed"), () => { + client[kHTTPContext] = null; + resume(client); + }); + } + if (client[kConnecting]) { + return; + } + if (!client[kHTTPContext]) { + connect(client); + return; + } + if (client[kHTTPContext].destroyed) { + return; + } + if (client[kHTTPContext].busy(request)) { + return; + } + if (!request.aborted && client[kHTTPContext].write(request)) { + client[kPendingIdx]++; + } else { + client[kQueue].splice(client[kPendingIdx], 1); + } + } + } + module.exports = Client; + } +}); + +// +var require_fixed_queue = __commonJS({ + ""(exports, module) { + "use strict"; + var kSize = 2048; + var kMask = kSize - 1; + var FixedCircularBuffer = class { + constructor() { + this.bottom = 0; + this.top = 0; + this.list = new Array(kSize); + this.next = null; + } + isEmpty() { + return this.top === this.bottom; + } + isFull() { + return (this.top + 1 & kMask) === this.bottom; + } + push(data) { + this.list[this.top] = data; + this.top = this.top + 1 & kMask; + } + shift() { + const nextItem = this.list[this.bottom]; + if (nextItem === void 0) + return null; + this.list[this.bottom] = void 0; + this.bottom = this.bottom + 1 & kMask; + return nextItem; + } + }; + module.exports = class FixedQueue { + constructor() { + this.head = this.tail = new FixedCircularBuffer(); + } + isEmpty() { + return this.head.isEmpty(); + } + push(data) { + if (this.head.isFull()) { + this.head = this.head.next = new FixedCircularBuffer(); + } + this.head.push(data); + } + shift() { + const tail = this.tail; + const next = tail.shift(); + if (tail.isEmpty() && tail.next !== null) { + this.tail = tail.next; + } + return next; + } + }; + } +}); + +// +var require_pool_stats = __commonJS({ + ""(exports, module) { + var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols(); + var kPool = Symbol("pool"); + var PoolStats = class { + constructor(pool) { + this[kPool] = pool; + } + get connected() { + return this[kPool][kConnected]; + } + get free() { + return this[kPool][kFree]; + } + get pending() { + return this[kPool][kPending]; + } + get queued() { + return this[kPool][kQueued]; + } + get running() { + return this[kPool][kRunning]; + } + get size() { + return this[kPool][kSize]; + } + }; + module.exports = PoolStats; + } +}); + +// +var require_pool_base = __commonJS({ + ""(exports, module) { + "use strict"; + var DispatcherBase = require_dispatcher_base(); + var FixedQueue = require_fixed_queue(); + var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols(); + var PoolStats = require_pool_stats(); + var kClients = Symbol("clients"); + var kNeedDrain = Symbol("needDrain"); + var kQueue = Symbol("queue"); + var kClosedResolve = Symbol("closed resolve"); + var kOnDrain = Symbol("onDrain"); + var kOnConnect = Symbol("onConnect"); + var kOnDisconnect = Symbol("onDisconnect"); + var kOnConnectionError = Symbol("onConnectionError"); + var kGetDispatcher = Symbol("get dispatcher"); + var kAddClient = Symbol("add client"); + var kRemoveClient = Symbol("remove client"); + var kStats = Symbol("stats"); + var PoolBase = class extends DispatcherBase { + constructor(opts) { + super(opts); + this[kQueue] = new FixedQueue(); + this[kClients] = []; + this[kQueued] = 0; + const pool = this; + this[kOnDrain] = function onDrain(origin, targets) { + const queue = pool[kQueue]; + let needDrain = false; + while (!needDrain) { + const item = queue.shift(); + if (!item) { + break; + } + pool[kQueued]--; + needDrain = !this.dispatch(item.opts, item.handler); + } + this[kNeedDrain] = needDrain; + if (!this[kNeedDrain] && pool[kNeedDrain]) { + pool[kNeedDrain] = false; + pool.emit("drain", origin, [pool, ...targets]); + } + if (pool[kClosedResolve] && queue.isEmpty()) { + Promise.all(pool[kClients].map((c) => c.close())).then(pool[kClosedResolve]); + } + }; + this[kOnConnect] = (origin, targets) => { + pool.emit("connect", origin, [pool, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + pool.emit("disconnect", origin, [pool, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + pool.emit("connectionError", origin, [pool, ...targets], err); + }; + this[kStats] = new PoolStats(this); + } + get [kBusy]() { + return this[kNeedDrain]; + } + get [kConnected]() { + return this[kClients].filter((client) => client[kConnected]).length; + } + get [kFree]() { + return this[kClients].filter((client) => client[kConnected] && !client[kNeedDrain]).length; + } + get [kPending]() { + let ret = this[kQueued]; + for (const { [kPending]: pending } of this[kClients]) { + ret += pending; + } + return ret; + } + get [kRunning]() { + let ret = 0; + for (const { [kRunning]: running } of this[kClients]) { + ret += running; + } + return ret; + } + get [kSize]() { + let ret = this[kQueued]; + for (const { [kSize]: size } of this[kClients]) { + ret += size; + } + return ret; + } + get stats() { + return this[kStats]; + } + async [kClose]() { + if (this[kQueue].isEmpty()) { + await Promise.all(this[kClients].map((c) => c.close())); + } else { + await new Promise((resolve) => { + this[kClosedResolve] = resolve; + }); + } + } + async [kDestroy](err) { + while (true) { + const item = this[kQueue].shift(); + if (!item) { + break; + } + item.handler.onError(err); + } + await Promise.all(this[kClients].map((c) => c.destroy(err))); + } + [kDispatch](opts, handler) { + const dispatcher = this[kGetDispatcher](); + if (!dispatcher) { + this[kNeedDrain] = true; + this[kQueue].push({ opts, handler }); + this[kQueued]++; + } else if (!dispatcher.dispatch(opts, handler)) { + dispatcher[kNeedDrain] = true; + this[kNeedDrain] = !this[kGetDispatcher](); + } + return !this[kNeedDrain]; + } + [kAddClient](client) { + client.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].push(client); + if (this[kNeedDrain]) { + queueMicrotask(() => { + if (this[kNeedDrain]) { + this[kOnDrain](client[kUrl], [this, client]); + } + }); + } + return this; + } + [kRemoveClient](client) { + client.close(() => { + const idx = this[kClients].indexOf(client); + if (idx !== -1) { + this[kClients].splice(idx, 1); + } + }); + this[kNeedDrain] = this[kClients].some((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true); + } + }; + module.exports = { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + }; + } +}); + +// +var require_pool = __commonJS({ + ""(exports, module) { + "use strict"; + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kGetDispatcher + } = require_pool_base(); + var Client = require_client(); + var { + InvalidArgumentError + } = require_errors(); + var util = require_util(); + var { kUrl, kInterceptors } = require_symbols(); + var buildConnector = require_connect(); + var kOptions = Symbol("options"); + var kConnections = Symbol("connections"); + var kFactory = Symbol("factory"); + function defaultFactory(origin, opts) { + return new Client(origin, opts); + } + var Pool = class extends PoolBase { + constructor(origin, { + connections, + factory = defaultFactory, + connect, + connectTimeout, + tls, + maxCachedSessions, + socketPath, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + allowH2, + ...options + } = {}) { + if (connections != null && (!Number.isFinite(connections) || connections < 0)) { + throw new InvalidArgumentError("invalid connections"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (typeof connect !== "function") { + connect = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect + }); + } + super(options); + this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : []; + this[kConnections] = connections || null; + this[kUrl] = util.parseOrigin(origin); + this[kOptions] = { ...util.deepClone(options), connect, allowH2 }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kFactory] = factory; + this.on("connectionError", (origin2, targets, error2) => { + for (const target of targets) { + const idx = this[kClients].indexOf(target); + if (idx !== -1) { + this[kClients].splice(idx, 1); + } + } + }); + } + [kGetDispatcher]() { + for (const client of this[kClients]) { + if (!client[kNeedDrain]) { + return client; + } + } + if (!this[kConnections] || this[kClients].length < this[kConnections]) { + const dispatcher = this[kFactory](this[kUrl], this[kOptions]); + this[kAddClient](dispatcher); + return dispatcher; + } + } + }; + module.exports = Pool; + } +}); + +// +var require_balanced_pool = __commonJS({ + ""(exports, module) { + "use strict"; + var { + BalancedPoolMissingUpstreamError, + InvalidArgumentError + } = require_errors(); + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + } = require_pool_base(); + var Pool = require_pool(); + var { kUrl, kInterceptors } = require_symbols(); + var { parseOrigin } = require_util(); + var kFactory = Symbol("factory"); + var kOptions = Symbol("options"); + var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor"); + var kCurrentWeight = Symbol("kCurrentWeight"); + var kIndex = Symbol("kIndex"); + var kWeight = Symbol("kWeight"); + var kMaxWeightPerServer = Symbol("kMaxWeightPerServer"); + var kErrorPenalty = Symbol("kErrorPenalty"); + function getGreatestCommonDivisor(a, b) { + if (a === 0) + return b; + while (b !== 0) { + const t = b; + b = a % b; + a = t; + } + return a; + } + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + var BalancedPool = class extends PoolBase { + constructor(upstreams = [], { factory = defaultFactory, ...opts } = {}) { + super(); + this[kOptions] = opts; + this[kIndex] = -1; + this[kCurrentWeight] = 0; + this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100; + this[kErrorPenalty] = this[kOptions].errorPenalty || 15; + if (!Array.isArray(upstreams)) { + upstreams = [upstreams]; + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + this[kInterceptors] = opts.interceptors?.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) ? opts.interceptors.BalancedPool : []; + this[kFactory] = factory; + for (const upstream of upstreams) { + this.addUpstream(upstream); + } + this._updateBalancedPoolStats(); + } + addUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + if (this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true)) { + return this; + } + const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions])); + this[kAddClient](pool); + pool.on("connect", () => { + pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]); + }); + pool.on("connectionError", () => { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + }); + pool.on("disconnect", (...args) => { + const err = args[2]; + if (err && err.code === "UND_ERR_SOCKET") { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + } + }); + for (const client of this[kClients]) { + client[kWeight] = this[kMaxWeightPerServer]; + } + this._updateBalancedPoolStats(); + return this; + } + _updateBalancedPoolStats() { + let result = 0; + for (let i = 0; i < this[kClients].length; i++) { + result = getGreatestCommonDivisor(this[kClients][i][kWeight], result); + } + this[kGreatestCommonDivisor] = result; + } + removeUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true); + if (pool) { + this[kRemoveClient](pool); + } + return this; + } + get upstreams() { + return this[kClients].filter((dispatcher) => dispatcher.closed !== true && dispatcher.destroyed !== true).map((p) => p[kUrl].origin); + } + [kGetDispatcher]() { + if (this[kClients].length === 0) { + throw new BalancedPoolMissingUpstreamError(); + } + const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.destroyed !== true); + if (!dispatcher) { + return; + } + const allClientsBusy = this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true); + if (allClientsBusy) { + return; + } + let counter = 0; + let maxWeightIndex = this[kClients].findIndex((pool) => !pool[kNeedDrain]); + while (counter++ < this[kClients].length) { + this[kIndex] = (this[kIndex] + 1) % this[kClients].length; + const pool = this[kClients][this[kIndex]]; + if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { + maxWeightIndex = this[kIndex]; + } + if (this[kIndex] === 0) { + this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]; + if (this[kCurrentWeight] <= 0) { + this[kCurrentWeight] = this[kMaxWeightPerServer]; + } + } + if (pool[kWeight] >= this[kCurrentWeight] && !pool[kNeedDrain]) { + return pool; + } + } + this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]; + this[kIndex] = maxWeightIndex; + return this[kClients][maxWeightIndex]; + } + }; + module.exports = BalancedPool; + } +}); + +// +var require_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var { InvalidArgumentError } = require_errors(); + var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var DispatcherBase = require_dispatcher_base(); + var Pool = require_pool(); + var Client = require_client(); + var util = require_util(); + var createRedirectInterceptor = require_redirect_interceptor(); + var kOnConnect = Symbol("onConnect"); + var kOnDisconnect = Symbol("onDisconnect"); + var kOnConnectionError = Symbol("onConnectionError"); + var kMaxRedirections = Symbol("maxRedirections"); + var kOnDrain = Symbol("onDrain"); + var kFactory = Symbol("factory"); + var kOptions = Symbol("options"); + function defaultFactory(origin, opts) { + return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts); + } + var Agent = class extends DispatcherBase { + constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (!Number.isInteger(maxRedirections) || maxRedirections < 0) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + super(options); + if (connect && typeof connect !== "function") { + connect = { ...connect }; + } + this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })]; + this[kOptions] = { ...util.deepClone(options), connect }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kMaxRedirections] = maxRedirections; + this[kFactory] = factory; + this[kClients] = /* @__PURE__ */ new Map(); + this[kOnDrain] = (origin, targets) => { + this.emit("drain", origin, [this, ...targets]); + }; + this[kOnConnect] = (origin, targets) => { + this.emit("connect", origin, [this, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + this.emit("disconnect", origin, [this, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + this.emit("connectionError", origin, [this, ...targets], err); + }; + } + get [kRunning]() { + let ret = 0; + for (const client of this[kClients].values()) { + ret += client[kRunning]; + } + return ret; + } + [kDispatch](opts, handler) { + let key; + if (opts.origin && (typeof opts.origin === "string" || opts.origin instanceof URL)) { + key = String(opts.origin); + } else { + throw new InvalidArgumentError("opts.origin must be a non-empty string or URL."); + } + let dispatcher = this[kClients].get(key); + if (!dispatcher) { + dispatcher = this[kFactory](opts.origin, this[kOptions]).on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].set(key, dispatcher); + } + return dispatcher.dispatch(opts, handler); + } + async [kClose]() { + const closePromises = []; + for (const client of this[kClients].values()) { + closePromises.push(client.close()); + } + this[kClients].clear(); + await Promise.all(closePromises); + } + async [kDestroy](err) { + const destroyPromises = []; + for (const client of this[kClients].values()) { + destroyPromises.push(client.destroy(err)); + } + this[kClients].clear(); + await Promise.all(destroyPromises); + } + }; + module.exports = Agent; + } +}); + +// +var require_proxy_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var { URL: URL2 } = __require("node:url"); + var Agent = require_agent(); + var Pool = require_pool(); + var DispatcherBase = require_dispatcher_base(); + var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors(); + var buildConnector = require_connect(); + var Client = require_client(); + var kAgent = Symbol("proxy agent"); + var kClient = Symbol("proxy client"); + var kProxyHeaders = Symbol("proxy headers"); + var kRequestTls = Symbol("request tls settings"); + var kProxyTls = Symbol("proxy tls settings"); + var kConnectEndpoint = Symbol("connect endpoint function"); + var kTunnelProxy = Symbol("tunnel proxy"); + function defaultProtocolPort(protocol) { + return protocol === "https:" ? 443 : 80; + } + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + var noop = () => { + }; + function defaultAgentFactory(origin, opts) { + if (opts.connections === 1) { + return new Client(origin, opts); + } + return new Pool(origin, opts); + } + var Http1ProxyWrapper = class extends DispatcherBase { + #client; + constructor(proxyUrl, { headers = {}, connect, factory }) { + super(); + if (!proxyUrl) { + throw new InvalidArgumentError("Proxy URL is mandatory"); + } + this[kProxyHeaders] = headers; + if (factory) { + this.#client = factory(proxyUrl, { connect }); + } else { + this.#client = new Client(proxyUrl, { connect }); + } + } + [kDispatch](opts, handler) { + const onHeaders = handler.onHeaders; + handler.onHeaders = function(statusCode, data, resume) { + if (statusCode === 407) { + if (typeof handler.onError === "function") { + handler.onError(new InvalidArgumentError("Proxy Authentication Required (407)")); + } + return; + } + if (onHeaders) + onHeaders.call(this, statusCode, data, resume); + }; + const { + origin, + path = "/", + headers = {} + } = opts; + opts.path = origin + path; + if (!("host" in headers) && !("Host" in headers)) { + const { host } = new URL2(origin); + headers.host = host; + } + opts.headers = { ...this[kProxyHeaders], ...headers }; + return this.#client[kDispatch](opts, handler); + } + async [kClose]() { + return this.#client.close(); + } + async [kDestroy](err) { + return this.#client.destroy(err); + } + }; + var ProxyAgent2 = class extends DispatcherBase { + constructor(opts) { + super(); + if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) { + throw new InvalidArgumentError("Proxy uri is mandatory"); + } + const { clientFactory = defaultFactory } = opts; + if (typeof clientFactory !== "function") { + throw new InvalidArgumentError("Proxy opts.clientFactory must be a function."); + } + const { proxyTunnel = true } = opts; + const url = this.#getUrl(opts); + const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url; + this[kProxy] = { uri: href, protocol }; + this[kInterceptors] = opts.interceptors?.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : []; + this[kRequestTls] = opts.requestTls; + this[kProxyTls] = opts.proxyTls; + this[kProxyHeaders] = opts.headers || {}; + this[kTunnelProxy] = proxyTunnel; + if (opts.auth && opts.token) { + throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token"); + } else if (opts.auth) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${opts.auth}`; + } else if (opts.token) { + this[kProxyHeaders]["proxy-authorization"] = opts.token; + } else if (username && password) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`; + } + const connect = buildConnector({ ...opts.proxyTls }); + this[kConnectEndpoint] = buildConnector({ ...opts.requestTls }); + const agentFactory = opts.factory || defaultAgentFactory; + const factory = (origin2, options) => { + const { protocol: protocol2 } = new URL2(origin2); + if (!this[kTunnelProxy] && protocol2 === "http:" && this[kProxy].protocol === "http:") { + return new Http1ProxyWrapper(this[kProxy].uri, { + headers: this[kProxyHeaders], + connect, + factory: agentFactory + }); + } + return agentFactory(origin2, options); + }; + this[kClient] = clientFactory(url, { connect }); + this[kAgent] = new Agent({ + ...opts, + factory, + connect: async (opts2, callback) => { + let requestedPath = opts2.host; + if (!opts2.port) { + requestedPath += `:${defaultProtocolPort(opts2.protocol)}`; + } + try { + const { socket, statusCode } = await this[kClient].connect({ + origin, + port, + path: requestedPath, + signal: opts2.signal, + headers: { + ...this[kProxyHeaders], + host: opts2.host + }, + servername: this[kProxyTls]?.servername || proxyHostname + }); + if (statusCode !== 200) { + socket.on("error", noop).destroy(); + callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)); + } + if (opts2.protocol !== "https:") { + callback(null, socket); + return; + } + let servername; + if (this[kRequestTls]) { + servername = this[kRequestTls].servername; + } else { + servername = opts2.servername; + } + this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback); + } catch (err) { + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + callback(new SecureProxyConnectionError(err)); + } else { + callback(err); + } + } + } + }); + } + dispatch(opts, handler) { + const headers = buildHeaders(opts.headers); + throwIfProxyAuthIsSent(headers); + if (headers && !("host" in headers) && !("Host" in headers)) { + const { host } = new URL2(opts.origin); + headers.host = host; + } + return this[kAgent].dispatch( + { + ...opts, + headers + }, + handler + ); + } + /** + * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts + * @returns {URL} + */ + #getUrl(opts) { + if (typeof opts === "string") { + return new URL2(opts); + } else if (opts instanceof URL2) { + return opts; + } else { + return new URL2(opts.uri); + } + } + async [kClose]() { + await this[kAgent].close(); + await this[kClient].close(); + } + async [kDestroy]() { + await this[kAgent].destroy(); + await this[kClient].destroy(); + } + }; + function buildHeaders(headers) { + if (Array.isArray(headers)) { + const headersPair = {}; + for (let i = 0; i < headers.length; i += 2) { + headersPair[headers[i]] = headers[i + 1]; + } + return headersPair; + } + return headers; + } + function throwIfProxyAuthIsSent(headers) { + const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization"); + if (existProxyAuth) { + throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor"); + } + } + module.exports = ProxyAgent2; + } +}); + +// +var require_env_http_proxy_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var DispatcherBase = require_dispatcher_base(); + var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); + var ProxyAgent2 = require_proxy_agent(); + var Agent = require_agent(); + var DEFAULT_PORTS = { + "http:": 80, + "https:": 443 + }; + var experimentalWarned = false; + var EnvHttpProxyAgent = class extends DispatcherBase { + #noProxyValue = null; + #noProxyEntries = null; + #opts = null; + constructor(opts = {}) { + super(); + this.#opts = opts; + if (!experimentalWarned) { + experimentalWarned = true; + process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", { + code: "UNDICI-EHPA" + }); + } + const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts; + this[kNoProxyAgent] = new Agent(agentOpts); + const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY; + if (HTTP_PROXY) { + this[kHttpProxyAgent] = new ProxyAgent2({ ...agentOpts, uri: HTTP_PROXY }); + } else { + this[kHttpProxyAgent] = this[kNoProxyAgent]; + } + const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY; + if (HTTPS_PROXY) { + this[kHttpsProxyAgent] = new ProxyAgent2({ ...agentOpts, uri: HTTPS_PROXY }); + } else { + this[kHttpsProxyAgent] = this[kHttpProxyAgent]; + } + this.#parseNoProxy(); + } + [kDispatch](opts, handler) { + const url = new URL(opts.origin); + const agent = this.#getProxyAgentForUrl(url); + return agent.dispatch(opts, handler); + } + async [kClose]() { + await this[kNoProxyAgent].close(); + if (!this[kHttpProxyAgent][kClosed]) { + await this[kHttpProxyAgent].close(); + } + if (!this[kHttpsProxyAgent][kClosed]) { + await this[kHttpsProxyAgent].close(); + } + } + async [kDestroy](err) { + await this[kNoProxyAgent].destroy(err); + if (!this[kHttpProxyAgent][kDestroyed]) { + await this[kHttpProxyAgent].destroy(err); + } + if (!this[kHttpsProxyAgent][kDestroyed]) { + await this[kHttpsProxyAgent].destroy(err); + } + } + #getProxyAgentForUrl(url) { + let { protocol, host: hostname, port } = url; + hostname = hostname.replace(/:\d*$/, "").toLowerCase(); + port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0; + if (!this.#shouldProxy(hostname, port)) { + return this[kNoProxyAgent]; + } + if (protocol === "https:") { + return this[kHttpsProxyAgent]; + } + return this[kHttpProxyAgent]; + } + #shouldProxy(hostname, port) { + if (this.#noProxyChanged) { + this.#parseNoProxy(); + } + if (this.#noProxyEntries.length === 0) { + return true; + } + if (this.#noProxyValue === "*") { + return false; + } + for (let i = 0; i < this.#noProxyEntries.length; i++) { + const entry = this.#noProxyEntries[i]; + if (entry.port && entry.port !== port) { + continue; + } + if (!/^[.*]/.test(entry.hostname)) { + if (hostname === entry.hostname) { + return false; + } + } else { + if (hostname.endsWith(entry.hostname.replace(/^\*/, ""))) { + return false; + } + } + } + return true; + } + #parseNoProxy() { + const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv; + const noProxySplit = noProxyValue.split(/[,\s]/); + const noProxyEntries = []; + for (let i = 0; i < noProxySplit.length; i++) { + const entry = noProxySplit[i]; + if (!entry) { + continue; + } + const parsed = entry.match(/^(.+):(\d+)$/); + noProxyEntries.push({ + hostname: (parsed ? parsed[1] : entry).toLowerCase(), + port: parsed ? Number.parseInt(parsed[2], 10) : 0 + }); + } + this.#noProxyValue = noProxyValue; + this.#noProxyEntries = noProxyEntries; + } + get #noProxyChanged() { + if (this.#opts.noProxy !== void 0) { + return false; + } + return this.#noProxyValue !== this.#noProxyEnv; + } + get #noProxyEnv() { + return process.env.no_proxy ?? process.env.NO_PROXY ?? ""; + } + }; + module.exports = EnvHttpProxyAgent; + } +}); + +// +var require_retry_handler = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { kRetryHandlerDefaultRetry } = require_symbols(); + var { RequestRetryError } = require_errors(); + var { + isDisturbed, + parseHeaders, + parseRangeHeader, + wrapRequestBody + } = require_util(); + function calculateRetryAfterHeader(retryAfter) { + const current = Date.now(); + return new Date(retryAfter).getTime() - current; + } + var RetryHandler = class _RetryHandler { + constructor(opts, handlers) { + const { retryOptions, ...dispatchOpts } = opts; + const { + // Retry scoped + retry: retryFn, + maxRetries, + maxTimeout, + minTimeout, + timeoutFactor, + // Response scoped + methods, + errorCodes, + retryAfter, + statusCodes + } = retryOptions ?? {}; + this.dispatch = handlers.dispatch; + this.handler = handlers.handler; + this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }; + this.abort = null; + this.aborted = false; + this.retryOpts = { + retry: retryFn ?? _RetryHandler[kRetryHandlerDefaultRetry], + retryAfter: retryAfter ?? true, + maxTimeout: maxTimeout ?? 30 * 1e3, + // 30s, + minTimeout: minTimeout ?? 500, + // .5s + timeoutFactor: timeoutFactor ?? 2, + maxRetries: maxRetries ?? 5, + // What errors we should retry + methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"], + // Indicates which errors to retry + statusCodes: statusCodes ?? [500, 502, 503, 504, 429], + // List of errors to retry + errorCodes: errorCodes ?? [ + "ECONNRESET", + "ECONNREFUSED", + "ENOTFOUND", + "ENETDOWN", + "ENETUNREACH", + "EHOSTDOWN", + "EHOSTUNREACH", + "EPIPE", + "UND_ERR_SOCKET" + ] + }; + this.retryCount = 0; + this.retryCountCheckpoint = 0; + this.start = 0; + this.end = null; + this.etag = null; + this.resume = null; + this.handler.onConnect((reason) => { + this.aborted = true; + if (this.abort) { + this.abort(reason); + } else { + this.reason = reason; + } + }); + } + onRequestSent() { + if (this.handler.onRequestSent) { + this.handler.onRequestSent(); + } + } + onUpgrade(statusCode, headers, socket) { + if (this.handler.onUpgrade) { + this.handler.onUpgrade(statusCode, headers, socket); + } + } + onConnect(abort) { + if (this.aborted) { + abort(this.reason); + } else { + this.abort = abort; + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) + return this.handler.onBodySent(chunk); + } + static [kRetryHandlerDefaultRetry](err, { state, opts }, cb) { + const { statusCode, code, headers } = err; + const { method, retryOptions } = opts; + const { + maxRetries, + minTimeout, + maxTimeout, + timeoutFactor, + statusCodes, + errorCodes, + methods + } = retryOptions; + const { counter } = state; + if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) { + cb(err); + return; + } + if (Array.isArray(methods) && !methods.includes(method)) { + cb(err); + return; + } + if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) { + cb(err); + return; + } + if (counter > maxRetries) { + cb(err); + return; + } + let retryAfterHeader = headers?.["retry-after"]; + if (retryAfterHeader) { + retryAfterHeader = Number(retryAfterHeader); + retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3; + } + const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout); + setTimeout(() => cb(null), retryTimeout); + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = parseHeaders(rawHeaders); + this.retryCount += 1; + if (statusCode >= 300) { + if (this.retryOpts.statusCodes.includes(statusCode) === false) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } else { + this.abort( + new RequestRetryError("Request failed", statusCode, { + headers, + data: { + count: this.retryCount + } + }) + ); + return false; + } + } + if (this.resume != null) { + this.resume = null; + if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) { + this.abort( + new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const contentRange = parseRangeHeader(headers["content-range"]); + if (!contentRange) { + this.abort( + new RequestRetryError("Content-Range mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + if (this.etag != null && this.etag !== headers.etag) { + this.abort( + new RequestRetryError("ETag mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const { start, size, end = size - 1 } = contentRange; + assert(this.start === start, "content-range mismatch"); + assert(this.end == null || this.end === end, "content-range mismatch"); + this.resume = resume; + return true; + } + if (this.end == null) { + if (statusCode === 206) { + const range = parseRangeHeader(headers["content-range"]); + if (range == null) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const { start, size, end = size - 1 } = range; + assert( + start != null && Number.isFinite(start), + "content-range mismatch" + ); + assert(end != null && Number.isFinite(end), "invalid content-length"); + this.start = start; + this.end = end; + } + if (this.end == null) { + const contentLength = headers["content-length"]; + this.end = contentLength != null ? Number(contentLength) - 1 : null; + } + assert(Number.isFinite(this.start)); + assert( + this.end == null || Number.isFinite(this.end), + "invalid content-length" + ); + this.resume = resume; + this.etag = headers.etag != null ? headers.etag : null; + if (this.etag != null && this.etag.startsWith("W/")) { + this.etag = null; + } + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const err = new RequestRetryError("Request failed", statusCode, { + headers, + data: { count: this.retryCount } + }); + this.abort(err); + return false; + } + onData(chunk) { + this.start += chunk.length; + return this.handler.onData(chunk); + } + onComplete(rawTrailers) { + this.retryCount = 0; + return this.handler.onComplete(rawTrailers); + } + onError(err) { + if (this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err); + } + if (this.retryCount - this.retryCountCheckpoint > 0) { + this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint); + } else { + this.retryCount += 1; + } + this.retryOpts.retry( + err, + { + state: { counter: this.retryCount }, + opts: { retryOptions: this.retryOpts, ...this.opts } + }, + onRetry.bind(this) + ); + function onRetry(err2) { + if (err2 != null || this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err2); + } + if (this.start !== 0) { + const headers = { range: `bytes=${this.start}-${this.end ?? ""}` }; + if (this.etag != null) { + headers["if-match"] = this.etag; + } + this.opts = { + ...this.opts, + headers: { + ...this.opts.headers, + ...headers + } + }; + } + try { + this.retryCountCheckpoint = this.retryCount; + this.dispatch(this.opts, this); + } catch (err3) { + this.handler.onError(err3); + } + } + } + }; + module.exports = RetryHandler; + } +}); + +// +var require_retry_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var Dispatcher = require_dispatcher(); + var RetryHandler = require_retry_handler(); + var RetryAgent = class extends Dispatcher { + #agent = null; + #options = null; + constructor(agent, options = {}) { + super(options); + this.#agent = agent; + this.#options = options; + } + dispatch(opts, handler) { + const retry = new RetryHandler({ + ...opts, + retryOptions: this.#options + }, { + dispatch: this.#agent.dispatch.bind(this.#agent), + handler + }); + return this.#agent.dispatch(opts, retry); + } + close() { + return this.#agent.close(); + } + destroy() { + return this.#agent.destroy(); + } + }; + module.exports = RetryAgent; + } +}); + +// +var require_readable = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { Readable } = __require("node:stream"); + var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors(); + var util = require_util(); + var { ReadableStreamFrom } = require_util(); + var kConsume = Symbol("kConsume"); + var kReading = Symbol("kReading"); + var kBody = Symbol("kBody"); + var kAbort = Symbol("kAbort"); + var kContentType = Symbol("kContentType"); + var kContentLength = Symbol("kContentLength"); + var noop = () => { + }; + var BodyReadable = class extends Readable { + constructor({ + resume, + abort, + contentType = "", + contentLength, + highWaterMark = 64 * 1024 + // Same as nodejs fs streams. + }) { + super({ + autoDestroy: true, + read: resume, + highWaterMark + }); + this._readableState.dataEmitted = false; + this[kAbort] = abort; + this[kConsume] = null; + this[kBody] = null; + this[kContentType] = contentType; + this[kContentLength] = contentLength; + this[kReading] = false; + } + destroy(err) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (err) { + this[kAbort](); + } + return super.destroy(err); + } + _destroy(err, callback) { + if (!this[kReading]) { + setImmediate(() => { + callback(err); + }); + } else { + callback(err); + } + } + on(ev, ...args) { + if (ev === "data" || ev === "readable") { + this[kReading] = true; + } + return super.on(ev, ...args); + } + addListener(ev, ...args) { + return this.on(ev, ...args); + } + off(ev, ...args) { + const ret = super.off(ev, ...args); + if (ev === "data" || ev === "readable") { + this[kReading] = this.listenerCount("data") > 0 || this.listenerCount("readable") > 0; + } + return ret; + } + removeListener(ev, ...args) { + return this.off(ev, ...args); + } + push(chunk) { + if (this[kConsume] && chunk !== null) { + consumePush(this[kConsume], chunk); + return this[kReading] ? super.push(chunk) : true; + } + return super.push(chunk); + } + // https://fetch.spec.whatwg.org/#dom-body-text + async text() { + return consume(this, "text"); + } + // https://fetch.spec.whatwg.org/#dom-body-json + async json() { + return consume(this, "json"); + } + // https://fetch.spec.whatwg.org/#dom-body-blob + async blob() { + return consume(this, "blob"); + } + // https://fetch.spec.whatwg.org/#dom-body-bytes + async bytes() { + return consume(this, "bytes"); + } + // https://fetch.spec.whatwg.org/#dom-body-arraybuffer + async arrayBuffer() { + return consume(this, "arrayBuffer"); + } + // https://fetch.spec.whatwg.org/#dom-body-formdata + async formData() { + throw new NotSupportedError(); + } + // https://fetch.spec.whatwg.org/#dom-body-bodyused + get bodyUsed() { + return util.isDisturbed(this); + } + // https://fetch.spec.whatwg.org/#dom-body-body + get body() { + if (!this[kBody]) { + this[kBody] = ReadableStreamFrom(this); + if (this[kConsume]) { + this[kBody].getReader(); + assert(this[kBody].locked); + } + } + return this[kBody]; + } + async dump(opts) { + let limit = Number.isFinite(opts?.limit) ? opts.limit : 128 * 1024; + const signal = opts?.signal; + if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) { + throw new InvalidArgumentError("signal must be an AbortSignal"); + } + signal?.throwIfAborted(); + if (this._readableState.closeEmitted) { + return null; + } + return await new Promise((resolve, reject) => { + if (this[kContentLength] > limit) { + this.destroy(new AbortError()); + } + const onAbort = () => { + this.destroy(signal.reason ?? new AbortError()); + }; + signal?.addEventListener("abort", onAbort); + this.on("close", function() { + signal?.removeEventListener("abort", onAbort); + if (signal?.aborted) { + reject(signal.reason ?? new AbortError()); + } else { + resolve(null); + } + }).on("error", noop).on("data", function(chunk) { + limit -= chunk.length; + if (limit <= 0) { + this.destroy(); + } + }).resume(); + }); + } + }; + function isLocked(self) { + return self[kBody] && self[kBody].locked === true || self[kConsume]; + } + function isUnusable(self) { + return util.isDisturbed(self) || isLocked(self); + } + async function consume(stream, type) { + assert(!stream[kConsume]); + return new Promise((resolve, reject) => { + if (isUnusable(stream)) { + const rState = stream._readableState; + if (rState.destroyed && rState.closeEmitted === false) { + stream.on("error", (err) => { + reject(err); + }).on("close", () => { + reject(new TypeError("unusable")); + }); + } else { + reject(rState.errored ?? new TypeError("unusable")); + } + } else { + queueMicrotask(() => { + stream[kConsume] = { + type, + stream, + resolve, + reject, + length: 0, + body: [] + }; + stream.on("error", function(err) { + consumeFinish(this[kConsume], err); + }).on("close", function() { + if (this[kConsume].body !== null) { + consumeFinish(this[kConsume], new RequestAbortedError()); + } + }); + consumeStart(stream[kConsume]); + }); + } + }); + } + function consumeStart(consume2) { + if (consume2.body === null) { + return; + } + const { _readableState: state } = consume2.stream; + if (state.bufferIndex) { + const start = state.bufferIndex; + const end = state.buffer.length; + for (let n = start; n < end; n++) { + consumePush(consume2, state.buffer[n]); + } + } else { + for (const chunk of state.buffer) { + consumePush(consume2, chunk); + } + } + if (state.endEmitted) { + consumeEnd(this[kConsume]); + } else { + consume2.stream.on("end", function() { + consumeEnd(this[kConsume]); + }); + } + consume2.stream.resume(); + while (consume2.stream.read() != null) { + } + } + function chunksDecode(chunks, length) { + if (chunks.length === 0 || length === 0) { + return ""; + } + const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length); + const bufferLength = buffer.length; + const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0; + return buffer.utf8Slice(start, bufferLength); + } + function chunksConcat(chunks, length) { + if (chunks.length === 0 || length === 0) { + return new Uint8Array(0); + } + if (chunks.length === 1) { + return new Uint8Array(chunks[0]); + } + const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer); + let offset = 0; + for (let i = 0; i < chunks.length; ++i) { + const chunk = chunks[i]; + buffer.set(chunk, offset); + offset += chunk.length; + } + return buffer; + } + function consumeEnd(consume2) { + const { type, body, resolve, stream, length } = consume2; + try { + if (type === "text") { + resolve(chunksDecode(body, length)); + } else if (type === "json") { + resolve(JSON.parse(chunksDecode(body, length))); + } else if (type === "arrayBuffer") { + resolve(chunksConcat(body, length).buffer); + } else if (type === "blob") { + resolve(new Blob(body, { type: stream[kContentType] })); + } else if (type === "bytes") { + resolve(chunksConcat(body, length)); + } + consumeFinish(consume2); + } catch (err) { + stream.destroy(err); + } + } + function consumePush(consume2, chunk) { + consume2.length += chunk.length; + consume2.body.push(chunk); + } + function consumeFinish(consume2, err) { + if (consume2.body === null) { + return; + } + if (err) { + consume2.reject(err); + } else { + consume2.resolve(); + } + consume2.type = null; + consume2.stream = null; + consume2.resolve = null; + consume2.reject = null; + consume2.length = 0; + consume2.body = null; + } + module.exports = { Readable: BodyReadable, chunksDecode }; + } +}); + +// +var require_util3 = __commonJS({ + ""(exports, module) { + var assert = __require("node:assert"); + var { + ResponseStatusCodeError + } = require_errors(); + var { chunksDecode } = require_readable(); + var CHUNK_LIMIT = 128 * 1024; + async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) { + assert(body); + let chunks = []; + let length = 0; + try { + for await (const chunk of body) { + chunks.push(chunk); + length += chunk.length; + if (length > CHUNK_LIMIT) { + chunks = []; + length = 0; + break; + } + } + } catch { + chunks = []; + length = 0; + } + const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`; + if (statusCode === 204 || !contentType || !length) { + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers))); + return; + } + const stackTraceLimit = Error.stackTraceLimit; + Error.stackTraceLimit = 0; + let payload; + try { + if (isContentTypeApplicationJson(contentType)) { + payload = JSON.parse(chunksDecode(chunks, length)); + } else if (isContentTypeText(contentType)) { + payload = chunksDecode(chunks, length); + } + } catch { + } finally { + Error.stackTraceLimit = stackTraceLimit; + } + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload))); + } + var isContentTypeApplicationJson = (contentType) => { + return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n"; + }; + var isContentTypeText = (contentType) => { + return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t"; + }; + module.exports = { + getResolveErrorBodyCallback, + isContentTypeApplicationJson, + isContentTypeText + }; + } +}); + +// +var require_api_request = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { Readable } = require_readable(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var util = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = __require("node:async_hooks"); + var RequestHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (highWaterMark && (typeof highWaterMark !== "number" || highWaterMark < 0)) { + throw new InvalidArgumentError("invalid highWaterMark"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_REQUEST"); + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on("error", util.nop), err); + } + throw err; + } + this.method = method; + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.res = null; + this.abort = null; + this.body = body; + this.trailers = {}; + this.context = null; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError; + this.highWaterMark = highWaterMark; + this.signal = signal; + this.reason = null; + this.removeAbortListener = null; + if (util.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + if (this.signal) { + if (this.signal.aborted) { + this.reason = this.signal.reason ?? new RequestAbortedError(); + } else { + this.removeAbortListener = util.addAbortListener(this.signal, () => { + this.reason = this.signal.reason ?? new RequestAbortedError(); + if (this.res) { + util.destroy(this.res.on("error", util.nop), this.reason); + } else if (this.abort) { + this.abort(this.reason); + } + if (this.removeAbortListener) { + this.res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + }); + } + } + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this; + const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + const contentLength = parsedHeaders["content-length"]; + const res = new Readable({ + resume, + abort, + contentType, + contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null, + highWaterMark + }); + if (this.removeAbortListener) { + res.on("close", this.removeAbortListener); + } + this.callback = null; + this.res = res; + if (callback !== null) { + if (this.throwOnError && statusCode >= 400) { + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + trailers: this.trailers, + opaque, + body: res, + context + }); + } + } + } + onData(chunk) { + return this.res.push(chunk); + } + onComplete(trailers) { + util.parseHeaders(trailers, this.trailers); + this.res.push(null); + } + onError(err) { + const { res, callback, body, opaque } = this; + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (res) { + this.res = null; + queueMicrotask(() => { + util.destroy(res, err); + }); + } + if (body) { + this.body = null; + util.destroy(body, err); + } + if (this.removeAbortListener) { + res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + } + }; + function request(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + request.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + this.dispatch(opts, new RequestHandler(opts, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = request; + module.exports.RequestHandler = RequestHandler; + } +}); + +// +var require_abort_signal = __commonJS({ + ""(exports, module) { + var { addAbortListener } = require_util(); + var { RequestAbortedError } = require_errors(); + var kListener = Symbol("kListener"); + var kSignal = Symbol("kSignal"); + function abort(self) { + if (self.abort) { + self.abort(self[kSignal]?.reason); + } else { + self.reason = self[kSignal]?.reason ?? new RequestAbortedError(); + } + removeSignal(self); + } + function addSignal(self, signal) { + self.reason = null; + self[kSignal] = null; + self[kListener] = null; + if (!signal) { + return; + } + if (signal.aborted) { + abort(self); + return; + } + self[kSignal] = signal; + self[kListener] = () => { + abort(self); + }; + addAbortListener(self[kSignal], self[kListener]); + } + function removeSignal(self) { + if (!self[kSignal]) { + return; + } + if ("removeEventListener" in self[kSignal]) { + self[kSignal].removeEventListener("abort", self[kListener]); + } else { + self[kSignal].removeListener("abort", self[kListener]); + } + self[kSignal] = null; + self[kListener] = null; + } + module.exports = { + addSignal, + removeSignal + }; + } +}); + +// +var require_api_stream = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { finished, PassThrough } = __require("node:stream"); + var { InvalidArgumentError, InvalidReturnValueError } = require_errors(); + var util = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = __require("node:async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var StreamHandler = class extends AsyncResource { + constructor(opts, factory, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("invalid factory"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_STREAM"); + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on("error", util.nop), err); + } + throw err; + } + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.factory = factory; + this.callback = callback; + this.res = null; + this.abort = null; + this.context = null; + this.trailers = null; + this.body = body; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError || false; + if (util.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { factory, opaque, context, callback, responseHeaders } = this; + const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + this.factory = null; + let res; + if (this.throwOnError && statusCode >= 400) { + const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + res = new PassThrough(); + this.callback = null; + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + if (factory === null) { + return; + } + res = this.runInAsyncScope(factory, null, { + statusCode, + headers, + opaque, + context + }); + if (!res || typeof res.write !== "function" || typeof res.end !== "function" || typeof res.on !== "function") { + throw new InvalidReturnValueError("expected Writable"); + } + finished(res, { readable: false }, (err) => { + const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this; + this.res = null; + if (err || !res2.readable) { + util.destroy(res2, err); + } + this.callback = null; + this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers }); + if (err) { + abort(); + } + }); + } + res.on("drain", resume); + this.res = res; + const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : res._writableState?.needDrain; + return needDrain !== true; + } + onData(chunk) { + const { res } = this; + return res ? res.write(chunk) : true; + } + onComplete(trailers) { + const { res } = this; + removeSignal(this); + if (!res) { + return; + } + this.trailers = util.parseHeaders(trailers); + res.end(); + } + onError(err) { + const { res, callback, opaque, body } = this; + removeSignal(this); + this.factory = null; + if (res) { + this.res = null; + util.destroy(res, err); + } else if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (body) { + this.body = null; + util.destroy(body, err); + } + } + }; + function stream(opts, factory, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + stream.call(this, opts, factory, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + this.dispatch(opts, new StreamHandler(opts, factory, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = stream; + } +}); + +// +var require_api_pipeline = __commonJS({ + ""(exports, module) { + "use strict"; + var { + Readable, + Duplex, + PassThrough + } = __require("node:stream"); + var { + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError + } = require_errors(); + var util = require_util(); + var { AsyncResource } = __require("node:async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = __require("node:assert"); + var kResume = Symbol("resume"); + var PipelineRequest = class extends Readable { + constructor() { + super({ autoDestroy: true }); + this[kResume] = null; + } + _read() { + const { [kResume]: resume } = this; + if (resume) { + this[kResume] = null; + resume(); + } + } + _destroy(err, callback) { + this._read(); + callback(err); + } + }; + var PipelineResponse = class extends Readable { + constructor(resume) { + super({ autoDestroy: true }); + this[kResume] = resume; + } + _read() { + this[kResume](); + } + _destroy(err, callback) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + callback(err); + } + }; + var PipelineHandler = class extends AsyncResource { + constructor(opts, handler) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof handler !== "function") { + throw new InvalidArgumentError("invalid handler"); + } + const { signal, method, opaque, onInfo, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_PIPELINE"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.handler = handler; + this.abort = null; + this.context = null; + this.onInfo = onInfo || null; + this.req = new PipelineRequest().on("error", util.nop); + this.ret = new Duplex({ + readableObjectMode: opts.objectMode, + autoDestroy: true, + read: () => { + const { body } = this; + if (body?.resume) { + body.resume(); + } + }, + write: (chunk, encoding, callback) => { + const { req } = this; + if (req.push(chunk, encoding) || req._readableState.destroyed) { + callback(); + } else { + req[kResume] = callback; + } + }, + destroy: (err, callback) => { + const { body, req, res, ret, abort } = this; + if (!err && !ret._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (abort && err) { + abort(); + } + util.destroy(body, err); + util.destroy(req, err); + util.destroy(res, err); + removeSignal(this); + callback(err); + } + }).on("prefinish", () => { + const { req } = this; + req.push(null); + }); + this.res = null; + addSignal(this, signal); + } + onConnect(abort, context) { + const { ret, res } = this; + if (this.reason) { + abort(this.reason); + return; + } + assert(!res, "pipeline cannot be retried"); + assert(!ret.destroyed); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume) { + const { opaque, handler, context } = this; + if (statusCode < 200) { + if (this.onInfo) { + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + this.onInfo({ statusCode, headers }); + } + return; + } + this.res = new PipelineResponse(resume); + let body; + try { + this.handler = null; + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + body = this.runInAsyncScope(handler, null, { + statusCode, + headers, + opaque, + body: this.res, + context + }); + } catch (err) { + this.res.on("error", util.nop); + throw err; + } + if (!body || typeof body.on !== "function") { + throw new InvalidReturnValueError("expected Readable"); + } + body.on("data", (chunk) => { + const { ret, body: body2 } = this; + if (!ret.push(chunk) && body2.pause) { + body2.pause(); + } + }).on("error", (err) => { + const { ret } = this; + util.destroy(ret, err); + }).on("end", () => { + const { ret } = this; + ret.push(null); + }).on("close", () => { + const { ret } = this; + if (!ret._readableState.ended) { + util.destroy(ret, new RequestAbortedError()); + } + }); + this.body = body; + } + onData(chunk) { + const { res } = this; + return res.push(chunk); + } + onComplete(trailers) { + const { res } = this; + res.push(null); + } + onError(err) { + const { ret } = this; + this.handler = null; + util.destroy(ret, err); + } + }; + function pipeline(opts, handler) { + try { + const pipelineHandler = new PipelineHandler(opts, handler); + this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler); + return pipelineHandler.ret; + } catch (err) { + return new PassThrough().destroy(err); + } + } + module.exports = pipeline; + } +}); + +// +var require_api_upgrade = __commonJS({ + ""(exports, module) { + "use strict"; + var { InvalidArgumentError, SocketError } = require_errors(); + var { AsyncResource } = __require("node:async_hooks"); + var util = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = __require("node:assert"); + var UpgradeHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_UPGRADE"); + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.abort = null; + this.context = null; + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = null; + } + onHeaders() { + throw new SocketError("bad upgrade", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + assert(statusCode === 101); + const { callback, opaque, context } = this; + removeSignal(this); + this.callback = null; + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + this.runInAsyncScope(callback, null, null, { + headers, + socket, + opaque, + context + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + function upgrade(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + upgrade.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + const upgradeHandler = new UpgradeHandler(opts, callback); + this.dispatch({ + ...opts, + method: opts.method || "GET", + upgrade: opts.protocol || "Websocket" + }, upgradeHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = upgrade; + } +}); + +// +var require_api_connect = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { AsyncResource } = __require("node:async_hooks"); + var { InvalidArgumentError, SocketError } = require_errors(); + var util = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var ConnectHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_CONNECT"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.callback = callback; + this.abort = null; + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders() { + throw new SocketError("bad connect", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + const { callback, opaque, context } = this; + removeSignal(this); + this.callback = null; + let headers = rawHeaders; + if (headers != null) { + headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + } + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + socket, + opaque, + context + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + function connect(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + connect.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + const connectHandler = new ConnectHandler(opts, callback); + this.dispatch({ ...opts, method: "CONNECT" }, connectHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = connect; + } +}); + +// +var require_api = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports.request = require_api_request(); + module.exports.stream = require_api_stream(); + module.exports.pipeline = require_api_pipeline(); + module.exports.upgrade = require_api_upgrade(); + module.exports.connect = require_api_connect(); + } +}); + +// +var require_mock_errors = __commonJS({ + ""(exports, module) { + "use strict"; + var { UndiciError } = require_errors(); + var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"); + var MockNotMatchedError = class _MockNotMatchedError extends UndiciError { + constructor(message) { + super(message); + Error.captureStackTrace(this, _MockNotMatchedError); + this.name = "MockNotMatchedError"; + this.message = message || "The request does not match any registered mock dispatches"; + this.code = "UND_MOCK_ERR_MOCK_NOT_MATCHED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kMockNotMatchedError] === true; + } + [kMockNotMatchedError] = true; + }; + module.exports = { + MockNotMatchedError + }; + } +}); + +// +var require_mock_symbols = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kAgent: Symbol("agent"), + kOptions: Symbol("options"), + kFactory: Symbol("factory"), + kDispatches: Symbol("dispatches"), + kDispatchKey: Symbol("dispatch key"), + kDefaultHeaders: Symbol("default headers"), + kDefaultTrailers: Symbol("default trailers"), + kContentLength: Symbol("content length"), + kMockAgent: Symbol("mock agent"), + kMockAgentSet: Symbol("mock agent set"), + kMockAgentGet: Symbol("mock agent get"), + kMockDispatch: Symbol("mock dispatch"), + kClose: Symbol("close"), + kOriginalClose: Symbol("original agent close"), + kOrigin: Symbol("origin"), + kIsMockActive: Symbol("is mock active"), + kNetConnect: Symbol("net connect"), + kGetNetConnect: Symbol("get net connect"), + kConnected: Symbol("connected") + }; + } +}); + +// +var require_mock_utils = __commonJS({ + ""(exports, module) { + "use strict"; + var { MockNotMatchedError } = require_mock_errors(); + var { + kDispatches, + kMockAgent, + kOriginalDispatch, + kOrigin, + kGetNetConnect + } = require_mock_symbols(); + var { buildURL } = require_util(); + var { STATUS_CODES } = __require("node:http"); + var { + types: { + isPromise + } + } = __require("node:util"); + function matchValue(match, value) { + if (typeof match === "string") { + return match === value; + } + if (match instanceof RegExp) { + return match.test(value); + } + if (typeof match === "function") { + return match(value) === true; + } + return false; + } + function lowerCaseEntries(headers) { + return Object.fromEntries( + Object.entries(headers).map(([headerName, headerValue]) => { + return [headerName.toLocaleLowerCase(), headerValue]; + }) + ); + } + function getHeaderByName(headers, key) { + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) { + return headers[i + 1]; + } + } + return void 0; + } else if (typeof headers.get === "function") { + return headers.get(key); + } else { + return lowerCaseEntries(headers)[key.toLocaleLowerCase()]; + } + } + function buildHeadersFromArray(headers) { + const clone = headers.slice(); + const entries = []; + for (let index = 0; index < clone.length; index += 2) { + entries.push([clone[index], clone[index + 1]]); + } + return Object.fromEntries(entries); + } + function matchHeaders(mockDispatch2, headers) { + if (typeof mockDispatch2.headers === "function") { + if (Array.isArray(headers)) { + headers = buildHeadersFromArray(headers); + } + return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {}); + } + if (typeof mockDispatch2.headers === "undefined") { + return true; + } + if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") { + return false; + } + for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) { + const headerValue = getHeaderByName(headers, matchHeaderName); + if (!matchValue(matchHeaderValue, headerValue)) { + return false; + } + } + return true; + } + function safeUrl(path) { + if (typeof path !== "string") { + return path; + } + const pathSegments = path.split("?"); + if (pathSegments.length !== 2) { + return path; + } + const qp = new URLSearchParams(pathSegments.pop()); + qp.sort(); + return [...pathSegments, qp.toString()].join("?"); + } + function matchKey(mockDispatch2, { path, method, body, headers }) { + const pathMatch = matchValue(mockDispatch2.path, path); + const methodMatch = matchValue(mockDispatch2.method, method); + const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; + const headersMatch = matchHeaders(mockDispatch2, headers); + return pathMatch && methodMatch && bodyMatch && headersMatch; + } + function getResponseData(data) { + if (Buffer.isBuffer(data)) { + return data; + } else if (data instanceof Uint8Array) { + return data; + } else if (data instanceof ArrayBuffer) { + return data; + } else if (typeof data === "object") { + return JSON.stringify(data); + } else { + return data.toString(); + } + } + function getMockDispatch(mockDispatches, key) { + const basePath = key.query ? buildURL(key.path, key.query) : key.path; + const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath; + let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== "undefined" ? matchValue(body, key.body) : true); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers)); + if (matchedMockDispatches.length === 0) { + const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers; + throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`); + } + return matchedMockDispatches[0]; + } + function addMockDispatch(mockDispatches, key, data) { + const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false }; + const replyData = typeof data === "function" ? { callback: data } : { ...data }; + const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }; + mockDispatches.push(newMockDispatch); + return newMockDispatch; + } + function deleteMockDispatch(mockDispatches, key) { + const index = mockDispatches.findIndex((dispatch) => { + if (!dispatch.consumed) { + return false; + } + return matchKey(dispatch, key); + }); + if (index !== -1) { + mockDispatches.splice(index, 1); + } + } + function buildKey(opts) { + const { path, method, body, headers, query } = opts; + return { + path, + method, + body, + headers, + query + }; + } + function generateKeyValues(data) { + const keys = Object.keys(data); + const result = []; + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + const value = data[key]; + const name = Buffer.from(`${key}`); + if (Array.isArray(value)) { + for (let j = 0; j < value.length; ++j) { + result.push(name, Buffer.from(`${value[j]}`)); + } + } else { + result.push(name, Buffer.from(`${value}`)); + } + } + return result; + } + function getStatusText(statusCode) { + return STATUS_CODES[statusCode] || "unknown"; + } + async function getResponse(body) { + const buffers = []; + for await (const data of body) { + buffers.push(data); + } + return Buffer.concat(buffers).toString("utf8"); + } + function mockDispatch(opts, handler) { + const key = buildKey(opts); + const mockDispatch2 = getMockDispatch(this[kDispatches], key); + mockDispatch2.timesInvoked++; + if (mockDispatch2.data.callback) { + mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) }; + } + const { data: { statusCode, data, headers, trailers, error: error2 }, delay, persist } = mockDispatch2; + const { timesInvoked, times } = mockDispatch2; + mockDispatch2.consumed = !persist && timesInvoked >= times; + mockDispatch2.pending = timesInvoked < times; + if (error2 !== null) { + deleteMockDispatch(this[kDispatches], key); + handler.onError(error2); + return true; + } + if (typeof delay === "number" && delay > 0) { + setTimeout(() => { + handleReply(this[kDispatches]); + }, delay); + } else { + handleReply(this[kDispatches]); + } + function handleReply(mockDispatches, _data = data) { + const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers; + const body = typeof _data === "function" ? _data({ ...opts, headers: optsHeaders }) : _data; + if (isPromise(body)) { + body.then((newData) => handleReply(mockDispatches, newData)); + return; + } + const responseData = getResponseData(body); + const responseHeaders = generateKeyValues(headers); + const responseTrailers = generateKeyValues(trailers); + handler.onConnect?.((err) => handler.onError(err), null); + handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode)); + handler.onData?.(Buffer.from(responseData)); + handler.onComplete?.(responseTrailers); + deleteMockDispatch(mockDispatches, key); + } + function resume() { + } + return true; + } + function buildMockDispatch() { + const agent = this[kMockAgent]; + const origin = this[kOrigin]; + const originalDispatch = this[kOriginalDispatch]; + return function dispatch(opts, handler) { + if (agent.isMockActive) { + try { + mockDispatch.call(this, opts, handler); + } catch (error2) { + if (error2 instanceof MockNotMatchedError) { + const netConnect = agent[kGetNetConnect](); + if (netConnect === false) { + throw new MockNotMatchedError(`${error2.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`); + } + if (checkNetConnect(netConnect, origin)) { + originalDispatch.call(this, opts, handler); + } else { + throw new MockNotMatchedError(`${error2.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`); + } + } else { + throw error2; + } + } + } else { + originalDispatch.call(this, opts, handler); + } + }; + } + function checkNetConnect(netConnect, origin) { + const url = new URL(origin); + if (netConnect === true) { + return true; + } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) { + return true; + } + return false; + } + function buildMockOptions(opts) { + if (opts) { + const { agent, ...mockOptions } = opts; + return mockOptions; + } + } + module.exports = { + getResponseData, + getMockDispatch, + addMockDispatch, + deleteMockDispatch, + buildKey, + generateKeyValues, + matchValue, + getResponse, + getStatusText, + mockDispatch, + buildMockDispatch, + checkNetConnect, + buildMockOptions, + getHeaderByName, + buildHeadersFromArray + }; + } +}); + +// +var require_mock_interceptor = __commonJS({ + ""(exports, module) { + "use strict"; + var { getResponseData, buildKey, addMockDispatch } = require_mock_utils(); + var { + kDispatches, + kDispatchKey, + kDefaultHeaders, + kDefaultTrailers, + kContentLength, + kMockDispatch + } = require_mock_symbols(); + var { InvalidArgumentError } = require_errors(); + var { buildURL } = require_util(); + var MockScope = class { + constructor(mockDispatch) { + this[kMockDispatch] = mockDispatch; + } + /** + * Delay a reply by a set amount in ms. + */ + delay(waitInMs) { + if (typeof waitInMs !== "number" || !Number.isInteger(waitInMs) || waitInMs <= 0) { + throw new InvalidArgumentError("waitInMs must be a valid integer > 0"); + } + this[kMockDispatch].delay = waitInMs; + return this; + } + /** + * For a defined reply, never mark as consumed. + */ + persist() { + this[kMockDispatch].persist = true; + return this; + } + /** + * Allow one to define a reply for a set amount of matching requests. + */ + times(repeatTimes) { + if (typeof repeatTimes !== "number" || !Number.isInteger(repeatTimes) || repeatTimes <= 0) { + throw new InvalidArgumentError("repeatTimes must be a valid integer > 0"); + } + this[kMockDispatch].times = repeatTimes; + return this; + } + }; + var MockInterceptor = class { + constructor(opts, mockDispatches) { + if (typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object"); + } + if (typeof opts.path === "undefined") { + throw new InvalidArgumentError("opts.path must be defined"); + } + if (typeof opts.method === "undefined") { + opts.method = "GET"; + } + if (typeof opts.path === "string") { + if (opts.query) { + opts.path = buildURL(opts.path, opts.query); + } else { + const parsedURL = new URL(opts.path, "data://"); + opts.path = parsedURL.pathname + parsedURL.search; + } + } + if (typeof opts.method === "string") { + opts.method = opts.method.toUpperCase(); + } + this[kDispatchKey] = buildKey(opts); + this[kDispatches] = mockDispatches; + this[kDefaultHeaders] = {}; + this[kDefaultTrailers] = {}; + this[kContentLength] = false; + } + createMockScopeDispatchData({ statusCode, data, responseOptions }) { + const responseData = getResponseData(data); + const contentLength = this[kContentLength] ? { "content-length": responseData.length } : {}; + const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }; + const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }; + return { statusCode, data, headers, trailers }; + } + validateReplyParameters(replyParameters) { + if (typeof replyParameters.statusCode === "undefined") { + throw new InvalidArgumentError("statusCode must be defined"); + } + if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) { + throw new InvalidArgumentError("responseOptions must be an object"); + } + } + /** + * Mock an undici request with a defined reply. + */ + reply(replyOptionsCallbackOrStatusCode) { + if (typeof replyOptionsCallbackOrStatusCode === "function") { + const wrappedDefaultsCallback = (opts) => { + const resolvedData = replyOptionsCallbackOrStatusCode(opts); + if (typeof resolvedData !== "object" || resolvedData === null) { + throw new InvalidArgumentError("reply options callback must return an object"); + } + const replyParameters2 = { data: "", responseOptions: {}, ...resolvedData }; + this.validateReplyParameters(replyParameters2); + return { + ...this.createMockScopeDispatchData(replyParameters2) + }; + }; + const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback); + return new MockScope(newMockDispatch2); + } + const replyParameters = { + statusCode: replyOptionsCallbackOrStatusCode, + data: arguments[1] === void 0 ? "" : arguments[1], + responseOptions: arguments[2] === void 0 ? {} : arguments[2] + }; + this.validateReplyParameters(replyParameters); + const dispatchData = this.createMockScopeDispatchData(replyParameters); + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData); + return new MockScope(newMockDispatch); + } + /** + * Mock an undici request with a defined error. + */ + replyWithError(error2) { + if (typeof error2 === "undefined") { + throw new InvalidArgumentError("error must be defined"); + } + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error: error2 }); + return new MockScope(newMockDispatch); + } + /** + * Set default reply headers on the interceptor for subsequent replies + */ + defaultReplyHeaders(headers) { + if (typeof headers === "undefined") { + throw new InvalidArgumentError("headers must be defined"); + } + this[kDefaultHeaders] = headers; + return this; + } + /** + * Set default reply trailers on the interceptor for subsequent replies + */ + defaultReplyTrailers(trailers) { + if (typeof trailers === "undefined") { + throw new InvalidArgumentError("trailers must be defined"); + } + this[kDefaultTrailers] = trailers; + return this; + } + /** + * Set reply content length header for replies on the interceptor + */ + replyContentLength() { + this[kContentLength] = true; + return this; + } + }; + module.exports.MockInterceptor = MockInterceptor; + module.exports.MockScope = MockScope; + } +}); + +// +var require_mock_client = __commonJS({ + ""(exports, module) { + "use strict"; + var { promisify } = __require("node:util"); + var Client = require_client(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var MockClient = class extends Client { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + module.exports = MockClient; + } +}); + +// +var require_mock_pool = __commonJS({ + ""(exports, module) { + "use strict"; + var { promisify } = __require("node:util"); + var Pool = require_pool(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var MockPool = class extends Pool { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + module.exports = MockPool; + } +}); + +// +var require_pluralizer = __commonJS({ + ""(exports, module) { + "use strict"; + var singulars = { + pronoun: "it", + is: "is", + was: "was", + this: "this" + }; + var plurals = { + pronoun: "they", + is: "are", + was: "were", + this: "these" + }; + module.exports = class Pluralizer { + constructor(singular, plural) { + this.singular = singular; + this.plural = plural; + } + pluralize(count) { + const one = count === 1; + const keys = one ? singulars : plurals; + const noun = one ? this.singular : this.plural; + return { ...keys, count, noun }; + } + }; + } +}); + +// +var require_pending_interceptors_formatter = __commonJS({ + ""(exports, module) { + "use strict"; + var { Transform } = __require("node:stream"); + var { Console } = __require("node:console"); + var PERSISTENT = process.versions.icu ? "\u2705" : "Y "; + var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N "; + module.exports = class PendingInterceptorsFormatter { + constructor({ disableColors } = {}) { + this.transform = new Transform({ + transform(chunk, _enc, cb) { + cb(null, chunk); + } + }); + this.logger = new Console({ + stdout: this.transform, + inspectOptions: { + colors: !disableColors && !process.env.CI + } + }); + } + format(pendingInterceptors) { + const withPrettyHeaders = pendingInterceptors.map( + ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + Method: method, + Origin: origin, + Path: path, + "Status code": statusCode, + Persistent: persist ? PERSISTENT : NOT_PERSISTENT, + Invocations: timesInvoked, + Remaining: persist ? Infinity : times - timesInvoked + }) + ); + this.logger.table(withPrettyHeaders); + return this.transform.read().toString(); + } + }; + } +}); + +// +var require_mock_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var { kClients } = require_symbols(); + var Agent = require_agent(); + var { + kAgent, + kMockAgentSet, + kMockAgentGet, + kDispatches, + kIsMockActive, + kNetConnect, + kGetNetConnect, + kOptions, + kFactory + } = require_mock_symbols(); + var MockClient = require_mock_client(); + var MockPool = require_mock_pool(); + var { matchValue, buildMockOptions } = require_mock_utils(); + var { InvalidArgumentError, UndiciError } = require_errors(); + var Dispatcher = require_dispatcher(); + var Pluralizer = require_pluralizer(); + var PendingInterceptorsFormatter = require_pending_interceptors_formatter(); + var MockAgent = class extends Dispatcher { + constructor(opts) { + super(opts); + this[kNetConnect] = true; + this[kIsMockActive] = true; + if (opts?.agent && typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + const agent = opts?.agent ? opts.agent : new Agent(opts); + this[kAgent] = agent; + this[kClients] = agent[kClients]; + this[kOptions] = buildMockOptions(opts); + } + get(origin) { + let dispatcher = this[kMockAgentGet](origin); + if (!dispatcher) { + dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + } + return dispatcher; + } + dispatch(opts, handler) { + this.get(opts.origin); + return this[kAgent].dispatch(opts, handler); + } + async close() { + await this[kAgent].close(); + this[kClients].clear(); + } + deactivate() { + this[kIsMockActive] = false; + } + activate() { + this[kIsMockActive] = true; + } + enableNetConnect(matcher) { + if (typeof matcher === "string" || typeof matcher === "function" || matcher instanceof RegExp) { + if (Array.isArray(this[kNetConnect])) { + this[kNetConnect].push(matcher); + } else { + this[kNetConnect] = [matcher]; + } + } else if (typeof matcher === "undefined") { + this[kNetConnect] = true; + } else { + throw new InvalidArgumentError("Unsupported matcher. Must be one of String|Function|RegExp."); + } + } + disableNetConnect() { + this[kNetConnect] = false; + } + // This is required to bypass issues caused by using global symbols - see: + // https://github.com/nodejs/undici/issues/1447 + get isMockActive() { + return this[kIsMockActive]; + } + [kMockAgentSet](origin, dispatcher) { + this[kClients].set(origin, dispatcher); + } + [kFactory](origin) { + const mockOptions = Object.assign({ agent: this }, this[kOptions]); + return this[kOptions] && this[kOptions].connections === 1 ? new MockClient(origin, mockOptions) : new MockPool(origin, mockOptions); + } + [kMockAgentGet](origin) { + const client = this[kClients].get(origin); + if (client) { + return client; + } + if (typeof origin !== "string") { + const dispatcher = this[kFactory]("http://localhost:9999"); + this[kMockAgentSet](origin, dispatcher); + return dispatcher; + } + for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) { + if (nonExplicitDispatcher && typeof keyMatcher !== "string" && matchValue(keyMatcher, origin)) { + const dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches]; + return dispatcher; + } + } + } + [kGetNetConnect]() { + return this[kNetConnect]; + } + pendingInterceptors() { + const mockAgentClients = this[kClients]; + return Array.from(mockAgentClients.entries()).flatMap(([origin, scope]) => scope[kDispatches].map((dispatch) => ({ ...dispatch, origin }))).filter(({ pending }) => pending); + } + assertNoPendingInterceptors({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) { + const pending = this.pendingInterceptors(); + if (pending.length === 0) { + return; + } + const pluralizer = new Pluralizer("interceptor", "interceptors").pluralize(pending.length); + throw new UndiciError(` +${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending: + +${pendingInterceptorsFormatter.format(pending)} +`.trim()); + } + }; + module.exports = MockAgent; + } +}); + +// +var require_global2 = __commonJS({ + ""(exports, module) { + "use strict"; + var globalDispatcher = Symbol.for("undici.globalDispatcher.1"); + var { InvalidArgumentError } = require_errors(); + var Agent = require_agent(); + if (getGlobalDispatcher() === void 0) { + setGlobalDispatcher(new Agent()); + } + function setGlobalDispatcher(agent) { + if (!agent || typeof agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument agent must implement Agent"); + } + Object.defineProperty(globalThis, globalDispatcher, { + value: agent, + writable: true, + enumerable: false, + configurable: false + }); + } + function getGlobalDispatcher() { + return globalThis[globalDispatcher]; + } + module.exports = { + setGlobalDispatcher, + getGlobalDispatcher + }; + } +}); + +// +var require_decorator_handler = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = class DecoratorHandler { + #handler; + constructor(handler) { + if (typeof handler !== "object" || handler === null) { + throw new TypeError("handler must be an object"); + } + this.#handler = handler; + } + onConnect(...args) { + return this.#handler.onConnect?.(...args); + } + onError(...args) { + return this.#handler.onError?.(...args); + } + onUpgrade(...args) { + return this.#handler.onUpgrade?.(...args); + } + onResponseStarted(...args) { + return this.#handler.onResponseStarted?.(...args); + } + onHeaders(...args) { + return this.#handler.onHeaders?.(...args); + } + onData(...args) { + return this.#handler.onData?.(...args); + } + onComplete(...args) { + return this.#handler.onComplete?.(...args); + } + onBodySent(...args) { + return this.#handler.onBodySent?.(...args); + } + }; + } +}); + +// +var require_redirect = __commonJS({ + ""(exports, module) { + "use strict"; + var RedirectHandler = require_redirect_handler(); + module.exports = (opts) => { + const globalMaxRedirections = opts?.maxRedirections; + return (dispatch) => { + return function redirectInterceptor(opts2, handler) { + const { maxRedirections = globalMaxRedirections, ...baseOpts } = opts2; + if (!maxRedirections) { + return dispatch(opts2, handler); + } + const redirectHandler = new RedirectHandler( + dispatch, + maxRedirections, + opts2, + handler + ); + return dispatch(baseOpts, redirectHandler); + }; + }; + }; + } +}); + +// +var require_retry = __commonJS({ + ""(exports, module) { + "use strict"; + var RetryHandler = require_retry_handler(); + module.exports = (globalOpts) => { + return (dispatch) => { + return function retryInterceptor(opts, handler) { + return dispatch( + opts, + new RetryHandler( + { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } }, + { + handler, + dispatch + } + ) + ); + }; + }; + }; + } +}); + +// +var require_dump = __commonJS({ + ""(exports, module) { + "use strict"; + var util = require_util(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var DecoratorHandler = require_decorator_handler(); + var DumpHandler = class extends DecoratorHandler { + #maxSize = 1024 * 1024; + #abort = null; + #dumped = false; + #aborted = false; + #size = 0; + #reason = null; + #handler = null; + constructor({ maxSize }, handler) { + super(handler); + if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) { + throw new InvalidArgumentError("maxSize must be a number greater than 0"); + } + this.#maxSize = maxSize ?? this.#maxSize; + this.#handler = handler; + } + onConnect(abort) { + this.#abort = abort; + this.#handler.onConnect(this.#customAbort.bind(this)); + } + #customAbort(reason) { + this.#aborted = true; + this.#reason = reason; + } + // TODO: will require adjustment after new hooks are out + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = util.parseHeaders(rawHeaders); + const contentLength = headers["content-length"]; + if (contentLength != null && contentLength > this.#maxSize) { + throw new RequestAbortedError( + `Response size (${contentLength}) larger than maxSize (${this.#maxSize})` + ); + } + if (this.#aborted) { + return true; + } + return this.#handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + onError(err) { + if (this.#dumped) { + return; + } + err = this.#reason ?? err; + this.#handler.onError(err); + } + onData(chunk) { + this.#size = this.#size + chunk.length; + if (this.#size >= this.#maxSize) { + this.#dumped = true; + if (this.#aborted) { + this.#handler.onError(this.#reason); + } else { + this.#handler.onComplete([]); + } + } + return true; + } + onComplete(trailers) { + if (this.#dumped) { + return; + } + if (this.#aborted) { + this.#handler.onError(this.reason); + return; + } + this.#handler.onComplete(trailers); + } + }; + function createDumpInterceptor({ maxSize: defaultMaxSize } = { + maxSize: 1024 * 1024 + }) { + return (dispatch) => { + return function Intercept(opts, handler) { + const { dumpMaxSize = defaultMaxSize } = opts; + const dumpHandler = new DumpHandler( + { maxSize: dumpMaxSize }, + handler + ); + return dispatch(opts, dumpHandler); + }; + }; + } + module.exports = createDumpInterceptor; + } +}); + +// +var require_dns = __commonJS({ + ""(exports, module) { + "use strict"; + var { isIP } = __require("node:net"); + var { lookup } = __require("node:dns"); + var DecoratorHandler = require_decorator_handler(); + var { InvalidArgumentError, InformationalError } = require_errors(); + var maxInt = Math.pow(2, 31) - 1; + var DNSInstance = class { + #maxTTL = 0; + #maxItems = 0; + #records = /* @__PURE__ */ new Map(); + dualStack = true; + affinity = null; + lookup = null; + pick = null; + constructor(opts) { + this.#maxTTL = opts.maxTTL; + this.#maxItems = opts.maxItems; + this.dualStack = opts.dualStack; + this.affinity = opts.affinity; + this.lookup = opts.lookup ?? this.#defaultLookup; + this.pick = opts.pick ?? this.#defaultPick; + } + get full() { + return this.#records.size === this.#maxItems; + } + runLookup(origin, opts, cb) { + const ips = this.#records.get(origin.hostname); + if (ips == null && this.full) { + cb(null, origin.origin); + return; + } + const newOpts = { + affinity: this.affinity, + dualStack: this.dualStack, + lookup: this.lookup, + pick: this.pick, + ...opts.dns, + maxTTL: this.#maxTTL, + maxItems: this.#maxItems + }; + if (ips == null) { + this.lookup(origin, newOpts, (err, addresses) => { + if (err || addresses == null || addresses.length === 0) { + cb(err ?? new InformationalError("No DNS entries found")); + return; + } + this.setRecords(origin, addresses); + const records = this.#records.get(origin.hostname); + const ip = this.pick( + origin, + records, + newOpts.affinity + ); + let port; + if (typeof ip.port === "number") { + port = `:${ip.port}`; + } else if (origin.port !== "") { + port = `:${origin.port}`; + } else { + port = ""; + } + cb( + null, + `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` + ); + }); + } else { + const ip = this.pick( + origin, + ips, + newOpts.affinity + ); + if (ip == null) { + this.#records.delete(origin.hostname); + this.runLookup(origin, opts, cb); + return; + } + let port; + if (typeof ip.port === "number") { + port = `:${ip.port}`; + } else if (origin.port !== "") { + port = `:${origin.port}`; + } else { + port = ""; + } + cb( + null, + `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` + ); + } + } + #defaultLookup(origin, opts, cb) { + lookup( + origin.hostname, + { + all: true, + family: this.dualStack === false ? this.affinity : 0, + order: "ipv4first" + }, + (err, addresses) => { + if (err) { + return cb(err); + } + const results = /* @__PURE__ */ new Map(); + for (const addr of addresses) { + results.set(`${addr.address}:${addr.family}`, addr); + } + cb(null, results.values()); + } + ); + } + #defaultPick(origin, hostnameRecords, affinity) { + let ip = null; + const { records, offset } = hostnameRecords; + let family; + if (this.dualStack) { + if (affinity == null) { + if (offset == null || offset === maxInt) { + hostnameRecords.offset = 0; + affinity = 4; + } else { + hostnameRecords.offset++; + affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4; + } + } + if (records[affinity] != null && records[affinity].ips.length > 0) { + family = records[affinity]; + } else { + family = records[affinity === 4 ? 6 : 4]; + } + } else { + family = records[affinity]; + } + if (family == null || family.ips.length === 0) { + return ip; + } + if (family.offset == null || family.offset === maxInt) { + family.offset = 0; + } else { + family.offset++; + } + const position = family.offset % family.ips.length; + ip = family.ips[position] ?? null; + if (ip == null) { + return ip; + } + if (Date.now() - ip.timestamp > ip.ttl) { + family.ips.splice(position, 1); + return this.pick(origin, hostnameRecords, affinity); + } + return ip; + } + setRecords(origin, addresses) { + const timestamp = Date.now(); + const records = { records: { 4: null, 6: null } }; + for (const record of addresses) { + record.timestamp = timestamp; + if (typeof record.ttl === "number") { + record.ttl = Math.min(record.ttl, this.#maxTTL); + } else { + record.ttl = this.#maxTTL; + } + const familyRecords = records.records[record.family] ?? { ips: [] }; + familyRecords.ips.push(record); + records.records[record.family] = familyRecords; + } + this.#records.set(origin.hostname, records); + } + getHandler(meta, opts) { + return new DNSDispatchHandler(this, meta, opts); + } + }; + var DNSDispatchHandler = class extends DecoratorHandler { + #state = null; + #opts = null; + #dispatch = null; + #handler = null; + #origin = null; + constructor(state, { origin, handler, dispatch }, opts) { + super(handler); + this.#origin = origin; + this.#handler = handler; + this.#opts = { ...opts }; + this.#state = state; + this.#dispatch = dispatch; + } + onError(err) { + switch (err.code) { + case "ETIMEDOUT": + case "ECONNREFUSED": { + if (this.#state.dualStack) { + this.#state.runLookup(this.#origin, this.#opts, (err2, newOrigin) => { + if (err2) { + return this.#handler.onError(err2); + } + const dispatchOpts = { + ...this.#opts, + origin: newOrigin + }; + this.#dispatch(dispatchOpts, this); + }); + return; + } + this.#handler.onError(err); + return; + } + case "ENOTFOUND": + this.#state.deleteRecord(this.#origin); + default: + this.#handler.onError(err); + break; + } + } + }; + module.exports = (interceptorOpts) => { + if (interceptorOpts?.maxTTL != null && (typeof interceptorOpts?.maxTTL !== "number" || interceptorOpts?.maxTTL < 0)) { + throw new InvalidArgumentError("Invalid maxTTL. Must be a positive number"); + } + if (interceptorOpts?.maxItems != null && (typeof interceptorOpts?.maxItems !== "number" || interceptorOpts?.maxItems < 1)) { + throw new InvalidArgumentError( + "Invalid maxItems. Must be a positive number and greater than zero" + ); + } + if (interceptorOpts?.affinity != null && interceptorOpts?.affinity !== 4 && interceptorOpts?.affinity !== 6) { + throw new InvalidArgumentError("Invalid affinity. Must be either 4 or 6"); + } + if (interceptorOpts?.dualStack != null && typeof interceptorOpts?.dualStack !== "boolean") { + throw new InvalidArgumentError("Invalid dualStack. Must be a boolean"); + } + if (interceptorOpts?.lookup != null && typeof interceptorOpts?.lookup !== "function") { + throw new InvalidArgumentError("Invalid lookup. Must be a function"); + } + if (interceptorOpts?.pick != null && typeof interceptorOpts?.pick !== "function") { + throw new InvalidArgumentError("Invalid pick. Must be a function"); + } + const dualStack = interceptorOpts?.dualStack ?? true; + let affinity; + if (dualStack) { + affinity = interceptorOpts?.affinity ?? null; + } else { + affinity = interceptorOpts?.affinity ?? 4; + } + const opts = { + maxTTL: interceptorOpts?.maxTTL ?? 1e4, + // Expressed in ms + lookup: interceptorOpts?.lookup ?? null, + pick: interceptorOpts?.pick ?? null, + dualStack, + affinity, + maxItems: interceptorOpts?.maxItems ?? Infinity + }; + const instance = new DNSInstance(opts); + return (dispatch) => { + return function dnsInterceptor(origDispatchOpts, handler) { + const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin); + if (isIP(origin.hostname) !== 0) { + return dispatch(origDispatchOpts, handler); + } + instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => { + if (err) { + return handler.onError(err); + } + let dispatchOpts = null; + dispatchOpts = { + ...origDispatchOpts, + servername: origin.hostname, + // For SNI on TLS + origin: newOrigin, + headers: { + host: origin.hostname, + ...origDispatchOpts.headers + } + }; + dispatch( + dispatchOpts, + instance.getHandler({ origin, dispatch, handler }, origDispatchOpts) + ); + }); + return true; + }; + }; + }; + } +}); + +// +var require_headers = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConstruct } = require_symbols(); + var { kEnumerableProperty } = require_util(); + var { + iteratorMixin, + isValidHeaderName, + isValidHeaderValue + } = require_util2(); + var { webidl } = require_webidl(); + var assert = __require("node:assert"); + var util = __require("node:util"); + var kHeadersMap = Symbol("headers map"); + var kHeadersSortedMap = Symbol("headers map sorted"); + function isHTTPWhiteSpaceCharCode(code) { + return code === 10 || code === 13 || code === 9 || code === 32; + } + function headerValueNormalize(potentialValue) { + let i = 0; + let j = potentialValue.length; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) + --j; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) + ++i; + return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j); + } + function fill(headers, object) { + if (Array.isArray(object)) { + for (let i = 0; i < object.length; ++i) { + const header = object[i]; + if (header.length !== 2) { + throw webidl.errors.exception({ + header: "Headers constructor", + message: `expected name/value pair to be length 2, found ${header.length}.` + }); + } + appendHeader(headers, header[0], header[1]); + } + } else if (typeof object === "object" && object !== null) { + const keys = Object.keys(object); + for (let i = 0; i < keys.length; ++i) { + appendHeader(headers, keys[i], object[keys[i]]); + } + } else { + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + } + } + function appendHeader(headers, name, value) { + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value, + type: "header value" + }); + } + if (getHeadersGuard(headers) === "immutable") { + throw new TypeError("immutable"); + } + return getHeadersList(headers).append(name, value, false); + } + function compareHeaderName(a, b) { + return a[0] < b[0] ? -1 : 1; + } + var HeadersList = class _HeadersList { + /** @type {[string, string][]|null} */ + cookies = null; + constructor(init) { + if (init instanceof _HeadersList) { + this[kHeadersMap] = new Map(init[kHeadersMap]); + this[kHeadersSortedMap] = init[kHeadersSortedMap]; + this.cookies = init.cookies === null ? null : [...init.cookies]; + } else { + this[kHeadersMap] = new Map(init); + this[kHeadersSortedMap] = null; + } + } + /** + * @see https://fetch.spec.whatwg.org/#header-list-contains + * @param {string} name + * @param {boolean} isLowerCase + */ + contains(name, isLowerCase) { + return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase()); + } + clear() { + this[kHeadersMap].clear(); + this[kHeadersSortedMap] = null; + this.cookies = null; + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-append + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + append(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + const exists2 = this[kHeadersMap].get(lowercaseName); + if (exists2) { + const delimiter = lowercaseName === "cookie" ? "; " : ", "; + this[kHeadersMap].set(lowercaseName, { + name: exists2.name, + value: `${exists2.value}${delimiter}${value}` + }); + } else { + this[kHeadersMap].set(lowercaseName, { name, value }); + } + if (lowercaseName === "set-cookie") { + (this.cookies ??= []).push(value); + } + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-set + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + set(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + if (lowercaseName === "set-cookie") { + this.cookies = [value]; + } + this[kHeadersMap].set(lowercaseName, { name, value }); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-delete + * @param {string} name + * @param {boolean} isLowerCase + */ + delete(name, isLowerCase) { + this[kHeadersSortedMap] = null; + if (!isLowerCase) + name = name.toLowerCase(); + if (name === "set-cookie") { + this.cookies = null; + } + this[kHeadersMap].delete(name); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-get + * @param {string} name + * @param {boolean} isLowerCase + * @returns {string | null} + */ + get(name, isLowerCase) { + return this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())?.value ?? null; + } + *[Symbol.iterator]() { + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + yield [name, value]; + } + } + get entries() { + const headers = {}; + if (this[kHeadersMap].size !== 0) { + for (const { name, value } of this[kHeadersMap].values()) { + headers[name] = value; + } + } + return headers; + } + rawValues() { + return this[kHeadersMap].values(); + } + get entriesList() { + const headers = []; + if (this[kHeadersMap].size !== 0) { + for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) { + if (lowerName === "set-cookie") { + for (const cookie of this.cookies) { + headers.push([name, cookie]); + } + } else { + headers.push([name, value]); + } + } + } + return headers; + } + // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set + toSortedArray() { + const size = this[kHeadersMap].size; + const array = new Array(size); + if (size <= 32) { + if (size === 0) { + return array; + } + const iterator = this[kHeadersMap][Symbol.iterator](); + const firstValue = iterator.next().value; + array[0] = [firstValue[0], firstValue[1].value]; + assert(firstValue[1].value !== null); + for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) { + value = iterator.next().value; + x = array[i] = [value[0], value[1].value]; + assert(x[1] !== null); + left = 0; + right = i; + while (left < right) { + pivot = left + (right - left >> 1); + if (array[pivot][0] <= x[0]) { + left = pivot + 1; + } else { + right = pivot; + } + } + if (i !== pivot) { + j = i; + while (j > left) { + array[j] = array[--j]; + } + array[left] = x; + } + } + if (!iterator.next().done) { + throw new TypeError("Unreachable"); + } + return array; + } else { + let i = 0; + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + array[i++] = [name, value]; + assert(value !== null); + } + return array.sort(compareHeaderName); + } + } + }; + var Headers2 = class _Headers { + #guard; + #headersList; + constructor(init = void 0) { + webidl.util.markAsUncloneable(this); + if (init === kConstruct) { + return; + } + this.#headersList = new HeadersList(); + this.#guard = "none"; + if (init !== void 0) { + init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); + fill(this, init); + } + } + // https://fetch.spec.whatwg.org/#dom-headers-append + append(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.append"); + const prefix = "Headers.append"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + return appendHeader(this, name, value); + } + // https://fetch.spec.whatwg.org/#dom-headers-delete + delete(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.delete"); + const prefix = "Headers.delete"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.delete", + value: name, + type: "header name" + }); + } + if (this.#guard === "immutable") { + throw new TypeError("immutable"); + } + if (!this.#headersList.contains(name, false)) { + return; + } + this.#headersList.delete(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-get + get(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.get"); + const prefix = "Headers.get"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return this.#headersList.get(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-has + has(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.has"); + const prefix = "Headers.has"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return this.#headersList.contains(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-set + set(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.set"); + const prefix = "Headers.set"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix, + value, + type: "header value" + }); + } + if (this.#guard === "immutable") { + throw new TypeError("immutable"); + } + this.#headersList.set(name, value, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie + getSetCookie() { + webidl.brandCheck(this, _Headers); + const list = this.#headersList.cookies; + if (list) { + return [...list]; + } + return []; + } + // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine + get [kHeadersSortedMap]() { + if (this.#headersList[kHeadersSortedMap]) { + return this.#headersList[kHeadersSortedMap]; + } + const headers = []; + const names = this.#headersList.toSortedArray(); + const cookies = this.#headersList.cookies; + if (cookies === null || cookies.length === 1) { + return this.#headersList[kHeadersSortedMap] = names; + } + for (let i = 0; i < names.length; ++i) { + const { 0: name, 1: value } = names[i]; + if (name === "set-cookie") { + for (let j = 0; j < cookies.length; ++j) { + headers.push([name, cookies[j]]); + } + } else { + headers.push([name, value]); + } + } + return this.#headersList[kHeadersSortedMap] = headers; + } + [util.inspect.custom](depth, options) { + options.depth ??= depth; + return `Headers ${util.formatWithOptions(options, this.#headersList.entries)}`; + } + static getHeadersGuard(o) { + return o.#guard; + } + static setHeadersGuard(o, guard) { + o.#guard = guard; + } + static getHeadersList(o) { + return o.#headersList; + } + static setHeadersList(o, list) { + o.#headersList = list; + } + }; + var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers2; + Reflect.deleteProperty(Headers2, "getHeadersGuard"); + Reflect.deleteProperty(Headers2, "setHeadersGuard"); + Reflect.deleteProperty(Headers2, "getHeadersList"); + Reflect.deleteProperty(Headers2, "setHeadersList"); + iteratorMixin("Headers", Headers2, kHeadersSortedMap, 0, 1); + Object.defineProperties(Headers2.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + getSetCookie: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Headers", + configurable: true + }, + [util.inspect.custom]: { + enumerable: false + } + }); + webidl.converters.HeadersInit = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object") { + const iterator = Reflect.get(V, Symbol.iterator); + if (!util.types.isProxy(V) && iterator === Headers2.prototype.entries) { + try { + return getHeadersList(V).entriesList; + } catch { + } + } + if (typeof iterator === "function") { + return webidl.converters["sequence>"](V, prefix, argument, iterator.bind(V)); + } + return webidl.converters["record"](V, prefix, argument); + } + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + }; + module.exports = { + fill, + // for test. + compareHeaderName, + Headers: Headers2, + HeadersList, + getHeadersGuard, + setHeadersGuard, + setHeadersList, + getHeadersList + }; + } +}); + +// +var require_response = __commonJS({ + ""(exports, module) { + "use strict"; + var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers(); + var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body(); + var util = require_util(); + var nodeUtil = __require("node:util"); + var { kEnumerableProperty } = util; + var { + isValidReasonPhrase, + isCancelled, + isAborted, + isBlobLike, + serializeJavascriptValueToJSONString, + isErrorLike, + isomorphicEncode, + environmentSettingsObject: relevantRealm + } = require_util2(); + var { + redirectStatusSet, + nullBodyStatus + } = require_constants3(); + var { kState, kHeaders } = require_symbols2(); + var { webidl } = require_webidl(); + var { FormData } = require_formdata(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = __require("node:assert"); + var { types } = __require("node:util"); + var textEncoder = new TextEncoder("utf-8"); + var Response = class _Response { + // Creates network error Response. + static error() { + const responseObject = fromInnerResponse(makeNetworkError(), "immutable"); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response-json + static json(data, init = {}) { + webidl.argumentLengthCheck(arguments, 1, "Response.json"); + if (init !== null) { + init = webidl.converters.ResponseInit(init); + } + const bytes = textEncoder.encode( + serializeJavascriptValueToJSONString(data) + ); + const body = extractBody(bytes); + const responseObject = fromInnerResponse(makeResponse({}), "response"); + initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); + return responseObject; + } + // Creates a redirect Response that redirects to url with status status. + static redirect(url, status = 302) { + webidl.argumentLengthCheck(arguments, 1, "Response.redirect"); + url = webidl.converters.USVString(url); + status = webidl.converters["unsigned short"](status); + let parsedURL; + try { + parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl); + } catch (err) { + throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }); + } + if (!redirectStatusSet.has(status)) { + throw new RangeError(`Invalid status code ${status}`); + } + const responseObject = fromInnerResponse(makeResponse({}), "immutable"); + responseObject[kState].status = status; + const value = isomorphicEncode(URLSerializer(parsedURL)); + responseObject[kState].headersList.append("location", value, true); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response + constructor(body = null, init = {}) { + webidl.util.markAsUncloneable(this); + if (body === kConstruct) { + return; + } + if (body !== null) { + body = webidl.converters.BodyInit(body); + } + init = webidl.converters.ResponseInit(init); + this[kState] = makeResponse({}); + this[kHeaders] = new Headers2(kConstruct); + setHeadersGuard(this[kHeaders], "response"); + setHeadersList(this[kHeaders], this[kState].headersList); + let bodyWithType = null; + if (body != null) { + const [extractedBody, type] = extractBody(body); + bodyWithType = { body: extractedBody, type }; + } + initializeResponse(this, init, bodyWithType); + } + // Returns response’s type, e.g., "cors". + get type() { + webidl.brandCheck(this, _Response); + return this[kState].type; + } + // Returns response’s URL, if it has one; otherwise the empty string. + get url() { + webidl.brandCheck(this, _Response); + const urlList = this[kState].urlList; + const url = urlList[urlList.length - 1] ?? null; + if (url === null) { + return ""; + } + return URLSerializer(url, true); + } + // Returns whether response was obtained through a redirect. + get redirected() { + webidl.brandCheck(this, _Response); + return this[kState].urlList.length > 1; + } + // Returns response’s status. + get status() { + webidl.brandCheck(this, _Response); + return this[kState].status; + } + // Returns whether response’s status is an ok status. + get ok() { + webidl.brandCheck(this, _Response); + return this[kState].status >= 200 && this[kState].status <= 299; + } + // Returns response’s status message. + get statusText() { + webidl.brandCheck(this, _Response); + return this[kState].statusText; + } + // Returns response’s headers as Headers. + get headers() { + webidl.brandCheck(this, _Response); + return this[kHeaders]; + } + get body() { + webidl.brandCheck(this, _Response); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Response); + return !!this[kState].body && util.isDisturbed(this[kState].body.stream); + } + // Returns a clone of response. + clone() { + webidl.brandCheck(this, _Response); + if (bodyUnusable(this)) { + throw webidl.errors.exception({ + header: "Response.clone", + message: "Body has already been consumed." + }); + } + const clonedResponse = cloneResponse(this[kState]); + if (hasFinalizationRegistry && this[kState].body?.stream) { + streamRegistry.register(this, new WeakRef(this[kState].body.stream)); + } + return fromInnerResponse(clonedResponse, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + status: this.status, + statusText: this.statusText, + headers: this.headers, + body: this.body, + bodyUsed: this.bodyUsed, + ok: this.ok, + redirected: this.redirected, + type: this.type, + url: this.url + }; + return `Response ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + mixinBody(Response); + Object.defineProperties(Response.prototype, { + type: kEnumerableProperty, + url: kEnumerableProperty, + status: kEnumerableProperty, + ok: kEnumerableProperty, + redirected: kEnumerableProperty, + statusText: kEnumerableProperty, + headers: kEnumerableProperty, + clone: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Response", + configurable: true + } + }); + Object.defineProperties(Response, { + json: kEnumerableProperty, + redirect: kEnumerableProperty, + error: kEnumerableProperty + }); + function cloneResponse(response) { + if (response.internalResponse) { + return filterResponse( + cloneResponse(response.internalResponse), + response.type + ); + } + const newResponse = makeResponse({ ...response, body: null }); + if (response.body != null) { + newResponse.body = cloneBody(newResponse, response.body); + } + return newResponse; + } + function makeResponse(init) { + return { + aborted: false, + rangeRequested: false, + timingAllowPassed: false, + requestIncludesCredentials: false, + type: "default", + status: 200, + timingInfo: null, + cacheState: "", + statusText: "", + ...init, + headersList: init?.headersList ? new HeadersList(init?.headersList) : new HeadersList(), + urlList: init?.urlList ? [...init.urlList] : [] + }; + } + function makeNetworkError(reason) { + const isError = isErrorLike(reason); + return makeResponse({ + type: "error", + status: 0, + error: isError ? reason : new Error(reason ? String(reason) : reason), + aborted: reason && reason.name === "AbortError" + }); + } + function isNetworkError(response) { + return ( + // A network error is a response whose type is "error", + response.type === "error" && // status is 0 + response.status === 0 + ); + } + function makeFilteredResponse(response, state) { + state = { + internalResponse: response, + ...state + }; + return new Proxy(response, { + get(target, p) { + return p in state ? state[p] : target[p]; + }, + set(target, p, value) { + assert(!(p in state)); + target[p] = value; + return true; + } + }); + } + function filterResponse(response, type) { + if (type === "basic") { + return makeFilteredResponse(response, { + type: "basic", + headersList: response.headersList + }); + } else if (type === "cors") { + return makeFilteredResponse(response, { + type: "cors", + headersList: response.headersList + }); + } else if (type === "opaque") { + return makeFilteredResponse(response, { + type: "opaque", + urlList: Object.freeze([]), + status: 0, + statusText: "", + body: null + }); + } else if (type === "opaqueredirect") { + return makeFilteredResponse(response, { + type: "opaqueredirect", + status: 0, + statusText: "", + headersList: [], + body: null + }); + } else { + assert(false); + } + } + function makeAppropriateNetworkError(fetchParams, err = null) { + assert(isCancelled(fetchParams)); + return isAborted(fetchParams) ? makeNetworkError(Object.assign(new DOMException("The operation was aborted.", "AbortError"), { cause: err })) : makeNetworkError(Object.assign(new DOMException("Request was cancelled."), { cause: err })); + } + function initializeResponse(response, init, body) { + if (init.status !== null && (init.status < 200 || init.status > 599)) { + throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.'); + } + if ("statusText" in init && init.statusText != null) { + if (!isValidReasonPhrase(String(init.statusText))) { + throw new TypeError("Invalid statusText"); + } + } + if ("status" in init && init.status != null) { + response[kState].status = init.status; + } + if ("statusText" in init && init.statusText != null) { + response[kState].statusText = init.statusText; + } + if ("headers" in init && init.headers != null) { + fill(response[kHeaders], init.headers); + } + if (body) { + if (nullBodyStatus.includes(response.status)) { + throw webidl.errors.exception({ + header: "Response constructor", + message: `Invalid response status code ${response.status}` + }); + } + response[kState].body = body.body; + if (body.type != null && !response[kState].headersList.contains("content-type", true)) { + response[kState].headersList.append("content-type", body.type, true); + } + } + } + function fromInnerResponse(innerResponse, guard) { + const response = new Response(kConstruct); + response[kState] = innerResponse; + response[kHeaders] = new Headers2(kConstruct); + setHeadersList(response[kHeaders], innerResponse.headersList); + setHeadersGuard(response[kHeaders], guard); + if (hasFinalizationRegistry && innerResponse.body?.stream) { + streamRegistry.register(response, new WeakRef(innerResponse.body.stream)); + } + return response; + } + webidl.converters.ReadableStream = webidl.interfaceConverter( + ReadableStream + ); + webidl.converters.FormData = webidl.interfaceConverter( + FormData + ); + webidl.converters.URLSearchParams = webidl.interfaceConverter( + URLSearchParams + ); + webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, name); + } + if (isBlobLike(V)) { + return webidl.converters.Blob(V, prefix, name, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V, prefix, name); + } + if (util.isFormDataLike(V)) { + return webidl.converters.FormData(V, prefix, name, { strict: false }); + } + if (V instanceof URLSearchParams) { + return webidl.converters.URLSearchParams(V, prefix, name); + } + return webidl.converters.DOMString(V, prefix, name); + }; + webidl.converters.BodyInit = function(V, prefix, argument) { + if (V instanceof ReadableStream) { + return webidl.converters.ReadableStream(V, prefix, argument); + } + if (V?.[Symbol.asyncIterator]) { + return V; + } + return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument); + }; + webidl.converters.ResponseInit = webidl.dictionaryConverter([ + { + key: "status", + converter: webidl.converters["unsigned short"], + defaultValue: () => 200 + }, + { + key: "statusText", + converter: webidl.converters.ByteString, + defaultValue: () => "" + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + } + ]); + module.exports = { + isNetworkError, + makeNetworkError, + makeResponse, + makeAppropriateNetworkError, + filterResponse, + Response, + cloneResponse, + fromInnerResponse + }; + } +}); + +// +var require_dispatcher_weakref = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConnected, kSize } = require_symbols(); + var CompatWeakRef = class { + constructor(value) { + this.value = value; + } + deref() { + return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value; + } + }; + var CompatFinalizer = class { + constructor(finalizer) { + this.finalizer = finalizer; + } + register(dispatcher, key) { + if (dispatcher.on) { + dispatcher.on("disconnect", () => { + if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { + this.finalizer(key); + } + }); + } + } + unregister(key) { + } + }; + module.exports = function() { + if (process.env.NODE_V8_COVERAGE && process.version.startsWith("v18")) { + process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"); + return { + WeakRef: CompatWeakRef, + FinalizationRegistry: CompatFinalizer + }; + } + return { WeakRef, FinalizationRegistry }; + }; + } +}); + +// +var require_request2 = __commonJS({ + ""(exports, module) { + "use strict"; + var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body(); + var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers(); + var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()(); + var util = require_util(); + var nodeUtil = __require("node:util"); + var { + isValidHTTPToken, + sameOrigin, + environmentSettingsObject + } = require_util2(); + var { + forbiddenMethodsSet, + corsSafeListedMethodsSet, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + requestDuplex + } = require_constants3(); + var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util; + var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2(); + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = __require("node:assert"); + var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __require("node:events"); + var kAbortController = Symbol("abortController"); + var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => { + signal.removeEventListener("abort", abort); + }); + var dependentControllerMap = /* @__PURE__ */ new WeakMap(); + function buildAbort(acRef) { + return abort; + function abort() { + const ac = acRef.deref(); + if (ac !== void 0) { + requestFinalizer.unregister(abort); + this.removeEventListener("abort", abort); + ac.abort(this.reason); + const controllerList = dependentControllerMap.get(ac.signal); + if (controllerList !== void 0) { + if (controllerList.size !== 0) { + for (const ref of controllerList) { + const ctrl = ref.deref(); + if (ctrl !== void 0) { + ctrl.abort(this.reason); + } + } + controllerList.clear(); + } + dependentControllerMap.delete(ac.signal); + } + } + } + } + var patchMethodWarning = false; + var Request = class _Request { + // https://fetch.spec.whatwg.org/#dom-request + constructor(input, init = {}) { + webidl.util.markAsUncloneable(this); + if (input === kConstruct) { + return; + } + const prefix = "Request constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + input = webidl.converters.RequestInfo(input, prefix, "input"); + init = webidl.converters.RequestInit(init, prefix, "init"); + let request = null; + let fallbackMode = null; + const baseUrl = environmentSettingsObject.settingsObject.baseUrl; + let signal = null; + if (typeof input === "string") { + this[kDispatcher] = init.dispatcher; + let parsedURL; + try { + parsedURL = new URL(input, baseUrl); + } catch (err) { + throw new TypeError("Failed to parse URL from " + input, { cause: err }); + } + if (parsedURL.username || parsedURL.password) { + throw new TypeError( + "Request cannot be constructed from a URL that includes credentials: " + input + ); + } + request = makeRequest({ urlList: [parsedURL] }); + fallbackMode = "cors"; + } else { + this[kDispatcher] = init.dispatcher || input[kDispatcher]; + assert(input instanceof _Request); + request = input[kState]; + signal = input[kSignal]; + } + const origin = environmentSettingsObject.settingsObject.origin; + let window2 = "client"; + if (request.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) { + window2 = request.window; + } + if (init.window != null) { + throw new TypeError(`'window' option '${window2}' must be null`); + } + if ("window" in init) { + window2 = "no-window"; + } + request = makeRequest({ + // URL request’s URL. + // undici implementation note: this is set as the first item in request's urlList in makeRequest + // method request’s method. + method: request.method, + // header list A copy of request’s header list. + // undici implementation note: headersList is cloned in makeRequest + headersList: request.headersList, + // unsafe-request flag Set. + unsafeRequest: request.unsafeRequest, + // client This’s relevant settings object. + client: environmentSettingsObject.settingsObject, + // window window. + window: window2, + // priority request’s priority. + priority: request.priority, + // origin request’s origin. The propagation of the origin is only significant for navigation requests + // being handled by a service worker. In this scenario a request can have an origin that is different + // from the current client. + origin: request.origin, + // referrer request’s referrer. + referrer: request.referrer, + // referrer policy request’s referrer policy. + referrerPolicy: request.referrerPolicy, + // mode request’s mode. + mode: request.mode, + // credentials mode request’s credentials mode. + credentials: request.credentials, + // cache mode request’s cache mode. + cache: request.cache, + // redirect mode request’s redirect mode. + redirect: request.redirect, + // integrity metadata request’s integrity metadata. + integrity: request.integrity, + // keepalive request’s keepalive. + keepalive: request.keepalive, + // reload-navigation flag request’s reload-navigation flag. + reloadNavigation: request.reloadNavigation, + // history-navigation flag request’s history-navigation flag. + historyNavigation: request.historyNavigation, + // URL list A clone of request’s URL list. + urlList: [...request.urlList] + }); + const initHasKey = Object.keys(init).length !== 0; + if (initHasKey) { + if (request.mode === "navigate") { + request.mode = "same-origin"; + } + request.reloadNavigation = false; + request.historyNavigation = false; + request.origin = "client"; + request.referrer = "client"; + request.referrerPolicy = ""; + request.url = request.urlList[request.urlList.length - 1]; + request.urlList = [request.url]; + } + if (init.referrer !== void 0) { + const referrer = init.referrer; + if (referrer === "") { + request.referrer = "no-referrer"; + } else { + let parsedReferrer; + try { + parsedReferrer = new URL(referrer, baseUrl); + } catch (err) { + throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }); + } + if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) { + request.referrer = "client"; + } else { + request.referrer = parsedReferrer; + } + } + } + if (init.referrerPolicy !== void 0) { + request.referrerPolicy = init.referrerPolicy; + } + let mode; + if (init.mode !== void 0) { + mode = init.mode; + } else { + mode = fallbackMode; + } + if (mode === "navigate") { + throw webidl.errors.exception({ + header: "Request constructor", + message: "invalid request mode navigate." + }); + } + if (mode != null) { + request.mode = mode; + } + if (init.credentials !== void 0) { + request.credentials = init.credentials; + } + if (init.cache !== void 0) { + request.cache = init.cache; + } + if (request.cache === "only-if-cached" && request.mode !== "same-origin") { + throw new TypeError( + "'only-if-cached' can be set only with 'same-origin' mode" + ); + } + if (init.redirect !== void 0) { + request.redirect = init.redirect; + } + if (init.integrity != null) { + request.integrity = String(init.integrity); + } + if (init.keepalive !== void 0) { + request.keepalive = Boolean(init.keepalive); + } + if (init.method !== void 0) { + let method = init.method; + const mayBeNormalized = normalizedMethodRecords[method]; + if (mayBeNormalized !== void 0) { + request.method = mayBeNormalized; + } else { + if (!isValidHTTPToken(method)) { + throw new TypeError(`'${method}' is not a valid HTTP method.`); + } + const upperCase = method.toUpperCase(); + if (forbiddenMethodsSet.has(upperCase)) { + throw new TypeError(`'${method}' HTTP method is unsupported.`); + } + method = normalizedMethodRecordsBase[upperCase] ?? method; + request.method = method; + } + if (!patchMethodWarning && request.method === "patch") { + process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", { + code: "UNDICI-FETCH-patch" + }); + patchMethodWarning = true; + } + } + if (init.signal !== void 0) { + signal = init.signal; + } + this[kState] = request; + const ac = new AbortController(); + this[kSignal] = ac.signal; + if (signal != null) { + if (!signal || typeof signal.aborted !== "boolean" || typeof signal.addEventListener !== "function") { + throw new TypeError( + "Failed to construct 'Request': member signal is not of type AbortSignal." + ); + } + if (signal.aborted) { + ac.abort(signal.reason); + } else { + this[kAbortController] = ac; + const acRef = new WeakRef(ac); + const abort = buildAbort(acRef); + try { + if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) { + setMaxListeners(1500, signal); + } else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) { + setMaxListeners(1500, signal); + } + } catch { + } + util.addAbortListener(signal, abort); + requestFinalizer.register(ac, { signal, abort }, abort); + } + } + this[kHeaders] = new Headers2(kConstruct); + setHeadersList(this[kHeaders], request.headersList); + setHeadersGuard(this[kHeaders], "request"); + if (mode === "no-cors") { + if (!corsSafeListedMethodsSet.has(request.method)) { + throw new TypeError( + `'${request.method} is unsupported in no-cors mode.` + ); + } + setHeadersGuard(this[kHeaders], "request-no-cors"); + } + if (initHasKey) { + const headersList = getHeadersList(this[kHeaders]); + const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); + headersList.clear(); + if (headers instanceof HeadersList) { + for (const { name, value } of headers.rawValues()) { + headersList.append(name, value, false); + } + headersList.cookies = headers.cookies; + } else { + fillHeaders(this[kHeaders], headers); + } + } + const inputBody = input instanceof _Request ? input[kState].body : null; + if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) { + throw new TypeError("Request with GET/HEAD method cannot have body."); + } + let initBody = null; + if (init.body != null) { + const [extractedBody, contentType] = extractBody( + init.body, + request.keepalive + ); + initBody = extractedBody; + if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) { + this[kHeaders].append("content-type", contentType); + } + } + const inputOrInitBody = initBody ?? inputBody; + if (inputOrInitBody != null && inputOrInitBody.source == null) { + if (initBody != null && init.duplex == null) { + throw new TypeError("RequestInit: duplex option is required when sending a body."); + } + if (request.mode !== "same-origin" && request.mode !== "cors") { + throw new TypeError( + 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' + ); + } + request.useCORSPreflightFlag = true; + } + let finalBody = inputOrInitBody; + if (initBody == null && inputBody != null) { + if (bodyUnusable(input)) { + throw new TypeError( + "Cannot construct a Request with a Request object that has already been used." + ); + } + const identityTransform = new TransformStream(); + inputBody.stream.pipeThrough(identityTransform); + finalBody = { + source: inputBody.source, + length: inputBody.length, + stream: identityTransform.readable + }; + } + this[kState].body = finalBody; + } + // Returns request’s HTTP method, which is "GET" by default. + get method() { + webidl.brandCheck(this, _Request); + return this[kState].method; + } + // Returns the URL of request as a string. + get url() { + webidl.brandCheck(this, _Request); + return URLSerializer(this[kState].url); + } + // Returns a Headers object consisting of the headers associated with request. + // Note that headers added in the network layer by the user agent will not + // be accounted for in this object, e.g., the "Host" header. + get headers() { + webidl.brandCheck(this, _Request); + return this[kHeaders]; + } + // Returns the kind of resource requested by request, e.g., "document" + // or "script". + get destination() { + webidl.brandCheck(this, _Request); + return this[kState].destination; + } + // Returns the referrer of request. Its value can be a same-origin URL if + // explicitly set in init, the empty string to indicate no referrer, and + // "about:client" when defaulting to the global’s default. This is used + // during fetching to determine the value of the `Referer` header of the + // request being made. + get referrer() { + webidl.brandCheck(this, _Request); + if (this[kState].referrer === "no-referrer") { + return ""; + } + if (this[kState].referrer === "client") { + return "about:client"; + } + return this[kState].referrer.toString(); + } + // Returns the referrer policy associated with request. + // This is used during fetching to compute the value of the request’s + // referrer. + get referrerPolicy() { + webidl.brandCheck(this, _Request); + return this[kState].referrerPolicy; + } + // Returns the mode associated with request, which is a string indicating + // whether the request will use CORS, or will be restricted to same-origin + // URLs. + get mode() { + webidl.brandCheck(this, _Request); + return this[kState].mode; + } + // Returns the credentials mode associated with request, + // which is a string indicating whether credentials will be sent with the + // request always, never, or only when sent to a same-origin URL. + get credentials() { + return this[kState].credentials; + } + // Returns the cache mode associated with request, + // which is a string indicating how the request will + // interact with the browser’s cache when fetching. + get cache() { + webidl.brandCheck(this, _Request); + return this[kState].cache; + } + // Returns the redirect mode associated with request, + // which is a string indicating how redirects for the + // request will be handled during fetching. A request + // will follow redirects by default. + get redirect() { + webidl.brandCheck(this, _Request); + return this[kState].redirect; + } + // Returns request’s subresource integrity metadata, which is a + // cryptographic hash of the resource being fetched. Its value + // consists of multiple hashes separated by whitespace. [SRI] + get integrity() { + webidl.brandCheck(this, _Request); + return this[kState].integrity; + } + // Returns a boolean indicating whether or not request can outlive the + // global in which it was created. + get keepalive() { + webidl.brandCheck(this, _Request); + return this[kState].keepalive; + } + // Returns a boolean indicating whether or not request is for a reload + // navigation. + get isReloadNavigation() { + webidl.brandCheck(this, _Request); + return this[kState].reloadNavigation; + } + // Returns a boolean indicating whether or not request is for a history + // navigation (a.k.a. back-forward navigation). + get isHistoryNavigation() { + webidl.brandCheck(this, _Request); + return this[kState].historyNavigation; + } + // Returns the signal associated with request, which is an AbortSignal + // object indicating whether or not request has been aborted, and its + // abort event handler. + get signal() { + webidl.brandCheck(this, _Request); + return this[kSignal]; + } + get body() { + webidl.brandCheck(this, _Request); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Request); + return !!this[kState].body && util.isDisturbed(this[kState].body.stream); + } + get duplex() { + webidl.brandCheck(this, _Request); + return "half"; + } + // Returns a clone of request. + clone() { + webidl.brandCheck(this, _Request); + if (bodyUnusable(this)) { + throw new TypeError("unusable"); + } + const clonedRequest = cloneRequest(this[kState]); + const ac = new AbortController(); + if (this.signal.aborted) { + ac.abort(this.signal.reason); + } else { + let list = dependentControllerMap.get(this.signal); + if (list === void 0) { + list = /* @__PURE__ */ new Set(); + dependentControllerMap.set(this.signal, list); + } + const acRef = new WeakRef(ac); + list.add(acRef); + util.addAbortListener( + ac.signal, + buildAbort(acRef) + ); + } + return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + method: this.method, + url: this.url, + headers: this.headers, + destination: this.destination, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + mode: this.mode, + credentials: this.credentials, + cache: this.cache, + redirect: this.redirect, + integrity: this.integrity, + keepalive: this.keepalive, + isReloadNavigation: this.isReloadNavigation, + isHistoryNavigation: this.isHistoryNavigation, + signal: this.signal + }; + return `Request ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + mixinBody(Request); + function makeRequest(init) { + return { + method: init.method ?? "GET", + localURLsOnly: init.localURLsOnly ?? false, + unsafeRequest: init.unsafeRequest ?? false, + body: init.body ?? null, + client: init.client ?? null, + reservedClient: init.reservedClient ?? null, + replacesClientId: init.replacesClientId ?? "", + window: init.window ?? "client", + keepalive: init.keepalive ?? false, + serviceWorkers: init.serviceWorkers ?? "all", + initiator: init.initiator ?? "", + destination: init.destination ?? "", + priority: init.priority ?? null, + origin: init.origin ?? "client", + policyContainer: init.policyContainer ?? "client", + referrer: init.referrer ?? "client", + referrerPolicy: init.referrerPolicy ?? "", + mode: init.mode ?? "no-cors", + useCORSPreflightFlag: init.useCORSPreflightFlag ?? false, + credentials: init.credentials ?? "same-origin", + useCredentials: init.useCredentials ?? false, + cache: init.cache ?? "default", + redirect: init.redirect ?? "follow", + integrity: init.integrity ?? "", + cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? "", + parserMetadata: init.parserMetadata ?? "", + reloadNavigation: init.reloadNavigation ?? false, + historyNavigation: init.historyNavigation ?? false, + userActivation: init.userActivation ?? false, + taintedOrigin: init.taintedOrigin ?? false, + redirectCount: init.redirectCount ?? 0, + responseTainting: init.responseTainting ?? "basic", + preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false, + done: init.done ?? false, + timingAllowFailed: init.timingAllowFailed ?? false, + urlList: init.urlList, + url: init.urlList[0], + headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() + }; + } + function cloneRequest(request) { + const newRequest = makeRequest({ ...request, body: null }); + if (request.body != null) { + newRequest.body = cloneBody(newRequest, request.body); + } + return newRequest; + } + function fromInnerRequest(innerRequest, signal, guard) { + const request = new Request(kConstruct); + request[kState] = innerRequest; + request[kSignal] = signal; + request[kHeaders] = new Headers2(kConstruct); + setHeadersList(request[kHeaders], innerRequest.headersList); + setHeadersGuard(request[kHeaders], guard); + return request; + } + Object.defineProperties(Request.prototype, { + method: kEnumerableProperty, + url: kEnumerableProperty, + headers: kEnumerableProperty, + redirect: kEnumerableProperty, + clone: kEnumerableProperty, + signal: kEnumerableProperty, + duplex: kEnumerableProperty, + destination: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + isHistoryNavigation: kEnumerableProperty, + isReloadNavigation: kEnumerableProperty, + keepalive: kEnumerableProperty, + integrity: kEnumerableProperty, + cache: kEnumerableProperty, + credentials: kEnumerableProperty, + attribute: kEnumerableProperty, + referrerPolicy: kEnumerableProperty, + referrer: kEnumerableProperty, + mode: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Request", + configurable: true + } + }); + webidl.converters.Request = webidl.interfaceConverter( + Request + ); + webidl.converters.RequestInfo = function(V, prefix, argument) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, argument); + } + if (V instanceof Request) { + return webidl.converters.Request(V, prefix, argument); + } + return webidl.converters.USVString(V, prefix, argument); + }; + webidl.converters.AbortSignal = webidl.interfaceConverter( + AbortSignal + ); + webidl.converters.RequestInit = webidl.dictionaryConverter([ + { + key: "method", + converter: webidl.converters.ByteString + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + }, + { + key: "body", + converter: webidl.nullableConverter( + webidl.converters.BodyInit + ) + }, + { + key: "referrer", + converter: webidl.converters.USVString + }, + { + key: "referrerPolicy", + converter: webidl.converters.DOMString, + // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy + allowedValues: referrerPolicy + }, + { + key: "mode", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#concept-request-mode + allowedValues: requestMode + }, + { + key: "credentials", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcredentials + allowedValues: requestCredentials + }, + { + key: "cache", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcache + allowedValues: requestCache + }, + { + key: "redirect", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestredirect + allowedValues: requestRedirect + }, + { + key: "integrity", + converter: webidl.converters.DOMString + }, + { + key: "keepalive", + converter: webidl.converters.boolean + }, + { + key: "signal", + converter: webidl.nullableConverter( + (signal) => webidl.converters.AbortSignal( + signal, + "RequestInit", + "signal", + { strict: false } + ) + ) + }, + { + key: "window", + converter: webidl.converters.any + }, + { + key: "duplex", + converter: webidl.converters.DOMString, + allowedValues: requestDuplex + }, + { + key: "dispatcher", + // undici specific option + converter: webidl.converters.any + } + ]); + module.exports = { Request, makeRequest, fromInnerRequest, cloneRequest }; + } +}); + +// +var require_fetch = __commonJS({ + ""(exports, module) { + "use strict"; + var { + makeNetworkError, + makeAppropriateNetworkError, + filterResponse, + makeResponse, + fromInnerResponse + } = require_response(); + var { HeadersList } = require_headers(); + var { Request, cloneRequest } = require_request2(); + var zlib = __require("node:zlib"); + var { + bytesMatch, + makePolicyContainer, + clonePolicyContainer, + requestBadPort, + TAOCheck, + appendRequestOriginHeader, + responseLocationURL, + requestCurrentURL, + setRequestReferrerPolicyOnRedirect, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + createOpaqueTimingInfo, + appendFetchMetadata, + corsCheck, + crossOriginResourcePolicyCheck, + determineRequestsReferrer, + coarsenedSharedCurrentTime, + createDeferredPromise, + isBlobLike, + sameOrigin, + isCancelled, + isAborted, + isErrorLike, + fullyReadBody, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlIsHttpHttpsScheme, + urlHasHttpsScheme, + clampAndCoarsenConnectionTimingInfo, + simpleRangeHeaderValue, + buildContentRange, + createInflate, + extractMimeType + } = require_util2(); + var { kState, kDispatcher } = require_symbols2(); + var assert = __require("node:assert"); + var { safelyExtractBody, extractBody } = require_body(); + var { + redirectStatusSet, + nullBodyStatus, + safeMethodsSet, + requestBodyHeader, + subresourceSet + } = require_constants3(); + var EE = __require("node:events"); + var { Readable, pipeline, finished } = __require("node:stream"); + var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util(); + var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url(); + var { getGlobalDispatcher } = require_global2(); + var { webidl } = require_webidl(); + var { STATUS_CODES } = __require("node:http"); + var GET_OR_HEAD = ["GET", "HEAD"]; + var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici"; + var resolveObjectURL; + var Fetch = class extends EE { + constructor(dispatcher) { + super(); + this.dispatcher = dispatcher; + this.connection = null; + this.dump = false; + this.state = "ongoing"; + } + terminate(reason) { + if (this.state !== "ongoing") { + return; + } + this.state = "terminated"; + this.connection?.destroy(reason); + this.emit("terminated", reason); + } + // https://fetch.spec.whatwg.org/#fetch-controller-abort + abort(error2) { + if (this.state !== "ongoing") { + return; + } + this.state = "aborted"; + if (!error2) { + error2 = new DOMException("The operation was aborted.", "AbortError"); + } + this.serializedAbortReason = error2; + this.connection?.destroy(error2); + this.emit("terminated", error2); + } + }; + function handleFetchDone(response) { + finalizeAndReportTiming(response, "fetch"); + } + function fetch2(input, init = void 0) { + webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); + let p = createDeferredPromise(); + let requestObject; + try { + requestObject = new Request(input, init); + } catch (e) { + p.reject(e); + return p.promise; + } + const request = requestObject[kState]; + if (requestObject.signal.aborted) { + abortFetch(p, request, null, requestObject.signal.reason); + return p.promise; + } + const globalObject = request.client.globalObject; + if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") { + request.serviceWorkers = "none"; + } + let responseObject = null; + let locallyAborted = false; + let controller = null; + addAbortListener( + requestObject.signal, + () => { + locallyAborted = true; + assert(controller != null); + controller.abort(requestObject.signal.reason); + const realResponse = responseObject?.deref(); + abortFetch(p, request, realResponse, requestObject.signal.reason); + } + ); + const processResponse = (response) => { + if (locallyAborted) { + return; + } + if (response.aborted) { + abortFetch(p, request, responseObject, controller.serializedAbortReason); + return; + } + if (response.type === "error") { + p.reject(new TypeError("fetch failed", { cause: response.error })); + return; + } + responseObject = new WeakRef(fromInnerResponse(response, "immutable")); + p.resolve(responseObject.deref()); + p = null; + }; + controller = fetching({ + request, + processResponseEndOfBody: handleFetchDone, + processResponse, + dispatcher: requestObject[kDispatcher] + // undici + }); + return p.promise; + } + function finalizeAndReportTiming(response, initiatorType = "other") { + if (response.type === "error" && response.aborted) { + return; + } + if (!response.urlList?.length) { + return; + } + const originalURL = response.urlList[0]; + let timingInfo = response.timingInfo; + let cacheState = response.cacheState; + if (!urlIsHttpHttpsScheme(originalURL)) { + return; + } + if (timingInfo === null) { + return; + } + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo({ + startTime: timingInfo.startTime + }); + cacheState = ""; + } + timingInfo.endTime = coarsenedSharedCurrentTime(); + response.timingInfo = timingInfo; + markResourceTiming( + timingInfo, + originalURL.href, + initiatorType, + globalThis, + cacheState + ); + } + var markResourceTiming = performance.markResourceTiming; + function abortFetch(p, request, responseObject, error2) { + if (p) { + p.reject(error2); + } + if (request.body != null && isReadable(request.body?.stream)) { + request.body.stream.cancel(error2).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + if (responseObject == null) { + return; + } + const response = responseObject[kState]; + if (response.body != null && isReadable(response.body?.stream)) { + response.body.stream.cancel(error2).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + } + function fetching({ + request, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseEndOfBody, + processResponseConsumeBody, + useParallelQueue = false, + dispatcher = getGlobalDispatcher() + // undici + }) { + assert(dispatcher); + let taskDestination = null; + let crossOriginIsolatedCapability = false; + if (request.client != null) { + taskDestination = request.client.globalObject; + crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability; + } + const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); + const timingInfo = createOpaqueTimingInfo({ + startTime: currentTime + }); + const fetchParams = { + controller: new Fetch(dispatcher), + request, + timingInfo, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseConsumeBody, + processResponseEndOfBody, + taskDestination, + crossOriginIsolatedCapability + }; + assert(!request.body || request.body.stream); + if (request.window === "client") { + request.window = request.client?.globalObject?.constructor?.name === "Window" ? request.client : "no-window"; + } + if (request.origin === "client") { + request.origin = request.client.origin; + } + if (request.policyContainer === "client") { + if (request.client != null) { + request.policyContainer = clonePolicyContainer( + request.client.policyContainer + ); + } else { + request.policyContainer = makePolicyContainer(); + } + } + if (!request.headersList.contains("accept", true)) { + const value = "*/*"; + request.headersList.append("accept", value, true); + } + if (!request.headersList.contains("accept-language", true)) { + request.headersList.append("accept-language", "*", true); + } + if (request.priority === null) { + } + if (subresourceSet.has(request.destination)) { + } + mainFetch(fetchParams).catch((err) => { + fetchParams.controller.terminate(err); + }); + return fetchParams.controller; + } + async function mainFetch(fetchParams, recursive = false) { + const request = fetchParams.request; + let response = null; + if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { + response = makeNetworkError("local URLs only"); + } + tryUpgradeRequestToAPotentiallyTrustworthyURL(request); + if (requestBadPort(request) === "blocked") { + response = makeNetworkError("bad port"); + } + if (request.referrerPolicy === "") { + request.referrerPolicy = request.policyContainer.referrerPolicy; + } + if (request.referrer !== "no-referrer") { + request.referrer = determineRequestsReferrer(request); + } + if (response === null) { + response = await (async () => { + const currentURL = requestCurrentURL(request); + if ( + // - request’s current URL’s origin is same origin with request’s origin, + // and request’s response tainting is "basic" + sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || // request’s current URL’s scheme is "data" + currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket" + (request.mode === "navigate" || request.mode === "websocket") + ) { + request.responseTainting = "basic"; + return await schemeFetch(fetchParams); + } + if (request.mode === "same-origin") { + return makeNetworkError('request mode cannot be "same-origin"'); + } + if (request.mode === "no-cors") { + if (request.redirect !== "follow") { + return makeNetworkError( + 'redirect mode cannot be "follow" for "no-cors" request' + ); + } + request.responseTainting = "opaque"; + return await schemeFetch(fetchParams); + } + if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { + return makeNetworkError("URL scheme must be a HTTP(S) scheme"); + } + request.responseTainting = "cors"; + return await httpFetch(fetchParams); + })(); + } + if (recursive) { + return response; + } + if (response.status !== 0 && !response.internalResponse) { + if (request.responseTainting === "cors") { + } + if (request.responseTainting === "basic") { + response = filterResponse(response, "basic"); + } else if (request.responseTainting === "cors") { + response = filterResponse(response, "cors"); + } else if (request.responseTainting === "opaque") { + response = filterResponse(response, "opaque"); + } else { + assert(false); + } + } + let internalResponse = response.status === 0 ? response : response.internalResponse; + if (internalResponse.urlList.length === 0) { + internalResponse.urlList.push(...request.urlList); + } + if (!request.timingAllowFailed) { + response.timingAllowPassed = true; + } + if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range", true)) { + response = internalResponse = makeNetworkError(); + } + if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { + internalResponse.body = null; + fetchParams.controller.dump = true; + } + if (request.integrity) { + const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason)); + if (request.responseTainting === "opaque" || response.body == null) { + processBodyError(response.error); + return; + } + const processBody = (bytes) => { + if (!bytesMatch(bytes, request.integrity)) { + processBodyError("integrity mismatch"); + return; + } + response.body = safelyExtractBody(bytes)[0]; + fetchFinale(fetchParams, response); + }; + await fullyReadBody(response.body, processBody, processBodyError); + } else { + fetchFinale(fetchParams, response); + } + } + function schemeFetch(fetchParams) { + if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { + return Promise.resolve(makeAppropriateNetworkError(fetchParams)); + } + const { request } = fetchParams; + const { protocol: scheme } = requestCurrentURL(request); + switch (scheme) { + case "about:": { + return Promise.resolve(makeNetworkError("about scheme is not supported")); + } + case "blob:": { + if (!resolveObjectURL) { + resolveObjectURL = __require("node:buffer").resolveObjectURL; + } + const blobURLEntry = requestCurrentURL(request); + if (blobURLEntry.search.length !== 0) { + return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource.")); + } + const blob = resolveObjectURL(blobURLEntry.toString()); + if (request.method !== "GET" || !isBlobLike(blob)) { + return Promise.resolve(makeNetworkError("invalid method")); + } + const response = makeResponse(); + const fullLength = blob.size; + const serializedFullLength = isomorphicEncode(`${fullLength}`); + const type = blob.type; + if (!request.headersList.contains("range", true)) { + const bodyWithType = extractBody(blob); + response.statusText = "OK"; + response.body = bodyWithType[0]; + response.headersList.set("content-length", serializedFullLength, true); + response.headersList.set("content-type", type, true); + } else { + response.rangeRequested = true; + const rangeHeader = request.headersList.get("range", true); + const rangeValue = simpleRangeHeaderValue(rangeHeader, true); + if (rangeValue === "failure") { + return Promise.resolve(makeNetworkError("failed to fetch the data URL")); + } + let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; + if (rangeStart === null) { + rangeStart = fullLength - rangeEnd; + rangeEnd = rangeStart + rangeEnd - 1; + } else { + if (rangeStart >= fullLength) { + return Promise.resolve(makeNetworkError("Range start is greater than the blob's size.")); + } + if (rangeEnd === null || rangeEnd >= fullLength) { + rangeEnd = fullLength - 1; + } + } + const slicedBlob = blob.slice(rangeStart, rangeEnd, type); + const slicedBodyWithType = extractBody(slicedBlob); + response.body = slicedBodyWithType[0]; + const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); + const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); + response.status = 206; + response.statusText = "Partial Content"; + response.headersList.set("content-length", serializedSlicedLength, true); + response.headersList.set("content-type", type, true); + response.headersList.set("content-range", contentRange, true); + } + return Promise.resolve(response); + } + case "data:": { + const currentURL = requestCurrentURL(request); + const dataURLStruct = dataURLProcessor(currentURL); + if (dataURLStruct === "failure") { + return Promise.resolve(makeNetworkError("failed to fetch the data URL")); + } + const mimeType = serializeAMimeType(dataURLStruct.mimeType); + return Promise.resolve(makeResponse({ + statusText: "OK", + headersList: [ + ["content-type", { name: "Content-Type", value: mimeType }] + ], + body: safelyExtractBody(dataURLStruct.body)[0] + })); + } + case "file:": { + return Promise.resolve(makeNetworkError("not implemented... yet...")); + } + case "http:": + case "https:": { + return httpFetch(fetchParams).catch((err) => makeNetworkError(err)); + } + default: { + return Promise.resolve(makeNetworkError("unknown scheme")); + } + } + } + function finalizeResponse(fetchParams, response) { + fetchParams.request.done = true; + if (fetchParams.processResponseDone != null) { + queueMicrotask(() => fetchParams.processResponseDone(response)); + } + } + function fetchFinale(fetchParams, response) { + let timingInfo = fetchParams.timingInfo; + const processResponseEndOfBody = () => { + const unsafeEndTime = Date.now(); + if (fetchParams.request.destination === "document") { + fetchParams.controller.fullTimingInfo = timingInfo; + } + fetchParams.controller.reportTimingSteps = () => { + if (fetchParams.request.url.protocol !== "https:") { + return; + } + timingInfo.endTime = unsafeEndTime; + let cacheState = response.cacheState; + const bodyInfo = response.bodyInfo; + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo(timingInfo); + cacheState = ""; + } + let responseStatus = 0; + if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) { + responseStatus = response.status; + const mimeType = extractMimeType(response.headersList); + if (mimeType !== "failure") { + bodyInfo.contentType = minimizeSupportedMimeType(mimeType); + } + } + if (fetchParams.request.initiatorType != null) { + markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus); + } + }; + const processResponseEndOfBodyTask = () => { + fetchParams.request.done = true; + if (fetchParams.processResponseEndOfBody != null) { + queueMicrotask(() => fetchParams.processResponseEndOfBody(response)); + } + if (fetchParams.request.initiatorType != null) { + fetchParams.controller.reportTimingSteps(); + } + }; + queueMicrotask(() => processResponseEndOfBodyTask()); + }; + if (fetchParams.processResponse != null) { + queueMicrotask(() => { + fetchParams.processResponse(response); + fetchParams.processResponse = null; + }); + } + const internalResponse = response.type === "error" ? response : response.internalResponse ?? response; + if (internalResponse.body == null) { + processResponseEndOfBody(); + } else { + finished(internalResponse.body.stream, () => { + processResponseEndOfBody(); + }); + } + } + async function httpFetch(fetchParams) { + const request = fetchParams.request; + let response = null; + let actualResponse = null; + const timingInfo = fetchParams.timingInfo; + if (request.serviceWorkers === "all") { + } + if (response === null) { + if (request.redirect === "follow") { + request.serviceWorkers = "none"; + } + actualResponse = response = await httpNetworkOrCacheFetch(fetchParams); + if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") { + return makeNetworkError("cors failure"); + } + if (TAOCheck(request, response) === "failure") { + request.timingAllowFailed = true; + } + } + if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( + request.origin, + request.client, + request.destination, + actualResponse + ) === "blocked") { + return makeNetworkError("blocked"); + } + if (redirectStatusSet.has(actualResponse.status)) { + if (request.redirect !== "manual") { + fetchParams.controller.connection.destroy(void 0, false); + } + if (request.redirect === "error") { + response = makeNetworkError("unexpected redirect"); + } else if (request.redirect === "manual") { + response = actualResponse; + } else if (request.redirect === "follow") { + response = await httpRedirectFetch(fetchParams, response); + } else { + assert(false); + } + } + response.timingInfo = timingInfo; + return response; + } + function httpRedirectFetch(fetchParams, response) { + const request = fetchParams.request; + const actualResponse = response.internalResponse ? response.internalResponse : response; + let locationURL; + try { + locationURL = responseLocationURL( + actualResponse, + requestCurrentURL(request).hash + ); + if (locationURL == null) { + return response; + } + } catch (err) { + return Promise.resolve(makeNetworkError(err)); + } + if (!urlIsHttpHttpsScheme(locationURL)) { + return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme")); + } + if (request.redirectCount === 20) { + return Promise.resolve(makeNetworkError("redirect count exceeded")); + } + request.redirectCount += 1; + if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) { + return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')); + } + if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) { + return Promise.resolve(makeNetworkError( + 'URL cannot contain credentials for request mode "cors"' + )); + } + if (actualResponse.status !== 303 && request.body != null && request.body.source == null) { + return Promise.resolve(makeNetworkError()); + } + if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) { + request.method = "GET"; + request.body = null; + for (const headerName of requestBodyHeader) { + request.headersList.delete(headerName); + } + } + if (!sameOrigin(requestCurrentURL(request), locationURL)) { + request.headersList.delete("authorization", true); + request.headersList.delete("proxy-authorization", true); + request.headersList.delete("cookie", true); + request.headersList.delete("host", true); + } + if (request.body != null) { + assert(request.body.source != null); + request.body = safelyExtractBody(request.body.source)[0]; + } + const timingInfo = fetchParams.timingInfo; + timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + if (timingInfo.redirectStartTime === 0) { + timingInfo.redirectStartTime = timingInfo.startTime; + } + request.urlList.push(locationURL); + setRequestReferrerPolicyOnRedirect(request, actualResponse); + return mainFetch(fetchParams, true); + } + async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { + const request = fetchParams.request; + let httpFetchParams = null; + let httpRequest = null; + let response = null; + const httpCache = null; + const revalidatingFlag = false; + if (request.window === "no-window" && request.redirect === "error") { + httpFetchParams = fetchParams; + httpRequest = request; + } else { + httpRequest = cloneRequest(request); + httpFetchParams = { ...fetchParams }; + httpFetchParams.request = httpRequest; + } + const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic"; + const contentLength = httpRequest.body ? httpRequest.body.length : null; + let contentLengthHeaderValue = null; + if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) { + contentLengthHeaderValue = "0"; + } + if (contentLength != null) { + contentLengthHeaderValue = isomorphicEncode(`${contentLength}`); + } + if (contentLengthHeaderValue != null) { + httpRequest.headersList.append("content-length", contentLengthHeaderValue, true); + } + if (contentLength != null && httpRequest.keepalive) { + } + if (httpRequest.referrer instanceof URL) { + httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true); + } + appendRequestOriginHeader(httpRequest); + appendFetchMetadata(httpRequest); + if (!httpRequest.headersList.contains("user-agent", true)) { + httpRequest.headersList.append("user-agent", defaultUserAgent); + } + if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "max-age=0", true); + } + if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") { + if (!httpRequest.headersList.contains("pragma", true)) { + httpRequest.headersList.append("pragma", "no-cache", true); + } + if (!httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "no-cache", true); + } + } + if (httpRequest.headersList.contains("range", true)) { + httpRequest.headersList.append("accept-encoding", "identity", true); + } + if (!httpRequest.headersList.contains("accept-encoding", true)) { + if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { + httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true); + } else { + httpRequest.headersList.append("accept-encoding", "gzip, deflate", true); + } + } + httpRequest.headersList.delete("host", true); + if (includeCredentials) { + } + if (httpCache == null) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") { + } + if (response == null) { + if (httpRequest.cache === "only-if-cached") { + return makeNetworkError("only if cached"); + } + const forwardResponse = await httpNetworkFetch( + httpFetchParams, + includeCredentials, + isNewConnectionFetch + ); + if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) { + } + if (revalidatingFlag && forwardResponse.status === 304) { + } + if (response == null) { + response = forwardResponse; + } + } + response.urlList = [...httpRequest.urlList]; + if (httpRequest.headersList.contains("range", true)) { + response.rangeRequested = true; + } + response.requestIncludesCredentials = includeCredentials; + if (response.status === 407) { + if (request.window === "no-window") { + return makeNetworkError(); + } + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + return makeNetworkError("proxy authentication required"); + } + if ( + // response’s status is 421 + response.status === 421 && // isNewConnectionFetch is false + !isNewConnectionFetch && // request’s body is null, or request’s body is non-null and request’s body’s source is non-null + (request.body == null || request.body.source != null) + ) { + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + fetchParams.controller.connection.destroy(); + response = await httpNetworkOrCacheFetch( + fetchParams, + isAuthenticationFetch, + true + ); + } + if (isAuthenticationFetch) { + } + return response; + } + async function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) { + assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed); + fetchParams.controller.connection = { + abort: null, + destroyed: false, + destroy(err, abort = true) { + if (!this.destroyed) { + this.destroyed = true; + if (abort) { + this.abort?.(err ?? new DOMException("The operation was aborted.", "AbortError")); + } + } + } + }; + const request = fetchParams.request; + let response = null; + const timingInfo = fetchParams.timingInfo; + const httpCache = null; + if (httpCache == null) { + request.cache = "no-store"; + } + const newConnection = forceNewConnection ? "yes" : "no"; + if (request.mode === "websocket") { + } else { + } + let requestBody = null; + if (request.body == null && fetchParams.processRequestEndOfBody) { + queueMicrotask(() => fetchParams.processRequestEndOfBody()); + } else if (request.body != null) { + const processBodyChunk = async function* (bytes) { + if (isCancelled(fetchParams)) { + return; + } + yield bytes; + fetchParams.processRequestBodyChunkLength?.(bytes.byteLength); + }; + const processEndOfBody = () => { + if (isCancelled(fetchParams)) { + return; + } + if (fetchParams.processRequestEndOfBody) { + fetchParams.processRequestEndOfBody(); + } + }; + const processBodyError = (e) => { + if (isCancelled(fetchParams)) { + return; + } + if (e.name === "AbortError") { + fetchParams.controller.abort(); + } else { + fetchParams.controller.terminate(e); + } + }; + requestBody = async function* () { + try { + for await (const bytes of request.body.stream) { + yield* processBodyChunk(bytes); + } + processEndOfBody(); + } catch (err) { + processBodyError(err); + } + }(); + } + try { + const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody }); + if (socket) { + response = makeResponse({ status, statusText, headersList, socket }); + } else { + const iterator = body[Symbol.asyncIterator](); + fetchParams.controller.next = () => iterator.next(); + response = makeResponse({ status, statusText, headersList }); + } + } catch (err) { + if (err.name === "AbortError") { + fetchParams.controller.connection.destroy(); + return makeAppropriateNetworkError(fetchParams, err); + } + return makeNetworkError(err); + } + const pullAlgorithm = async () => { + await fetchParams.controller.resume(); + }; + const cancelAlgorithm = (reason) => { + if (!isCancelled(fetchParams)) { + fetchParams.controller.abort(reason); + } + }; + const stream = new ReadableStream( + { + async start(controller) { + fetchParams.controller.controller = controller; + }, + async pull(controller) { + await pullAlgorithm(controller); + }, + async cancel(reason) { + await cancelAlgorithm(reason); + }, + type: "bytes" + } + ); + response.body = { stream, source: null, length: null }; + fetchParams.controller.onAborted = onAborted; + fetchParams.controller.on("terminated", onAborted); + fetchParams.controller.resume = async () => { + while (true) { + let bytes; + let isFailure; + try { + const { done, value } = await fetchParams.controller.next(); + if (isAborted(fetchParams)) { + break; + } + bytes = done ? void 0 : value; + } catch (err) { + if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { + bytes = void 0; + } else { + bytes = err; + isFailure = true; + } + } + if (bytes === void 0) { + readableStreamClose(fetchParams.controller.controller); + finalizeResponse(fetchParams, response); + return; + } + timingInfo.decodedBodySize += bytes?.byteLength ?? 0; + if (isFailure) { + fetchParams.controller.terminate(bytes); + return; + } + const buffer = new Uint8Array(bytes); + if (buffer.byteLength) { + fetchParams.controller.controller.enqueue(buffer); + } + if (isErrored(stream)) { + fetchParams.controller.terminate(); + return; + } + if (fetchParams.controller.controller.desiredSize <= 0) { + return; + } + } + }; + function onAborted(reason) { + if (isAborted(fetchParams)) { + response.aborted = true; + if (isReadable(stream)) { + fetchParams.controller.controller.error( + fetchParams.controller.serializedAbortReason + ); + } + } else { + if (isReadable(stream)) { + fetchParams.controller.controller.error(new TypeError("terminated", { + cause: isErrorLike(reason) ? reason : void 0 + })); + } + } + fetchParams.controller.connection.destroy(); + } + return response; + function dispatch({ body }) { + const url = requestCurrentURL(request); + const agent = fetchParams.controller.dispatcher; + return new Promise((resolve, reject) => agent.dispatch( + { + path: url.pathname + url.search, + origin: url.origin, + method: request.method, + body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body, + headers: request.headersList.entries, + maxRedirections: 0, + upgrade: request.mode === "websocket" ? "websocket" : void 0 + }, + { + body: null, + abort: null, + onConnect(abort) { + const { connection } = fetchParams.controller; + timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability); + if (connection.destroyed) { + abort(new DOMException("The operation was aborted.", "AbortError")); + } else { + fetchParams.controller.on("terminated", abort); + this.abort = connection.abort = abort; + } + timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onResponseStarted() { + timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onHeaders(status, rawHeaders, resume, statusText) { + if (status < 200) { + return; + } + let location = ""; + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + location = headersList.get("location", true); + this.body = new Readable({ read: resume }); + const decoders = []; + const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status); + if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) { + const contentEncoding = headersList.get("content-encoding", true); + const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : []; + const maxContentEncodings = 5; + if (codings.length > maxContentEncodings) { + reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`)); + return true; + } + for (let i = codings.length - 1; i >= 0; --i) { + const coding = codings[i].trim(); + if (coding === "x-gzip" || coding === "gzip") { + decoders.push(zlib.createGunzip({ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "deflate") { + decoders.push(createInflate({ + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "br") { + decoders.push(zlib.createBrotliDecompress({ + flush: zlib.constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH + })); + } else { + decoders.length = 0; + break; + } + } + } + const onError = this.onError.bind(this); + resolve({ + status, + statusText, + headersList, + body: decoders.length ? pipeline(this.body, ...decoders, (err) => { + if (err) { + this.onError(err); + } + }).on("error", onError) : this.body.on("error", onError) + }); + return true; + }, + onData(chunk) { + if (fetchParams.controller.dump) { + return; + } + const bytes = chunk; + timingInfo.encodedBodySize += bytes.byteLength; + return this.body.push(bytes); + }, + onComplete() { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + if (fetchParams.controller.onAborted) { + fetchParams.controller.off("terminated", fetchParams.controller.onAborted); + } + fetchParams.controller.ended = true; + this.body.push(null); + }, + onError(error2) { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + this.body?.destroy(error2); + fetchParams.controller.terminate(error2); + reject(error2); + }, + onUpgrade(status, rawHeaders, socket) { + if (status !== 101) { + return; + } + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + resolve({ + status, + statusText: STATUS_CODES[status], + headersList, + socket + }); + return true; + } + } + )); + } + } + module.exports = { + fetch: fetch2, + Fetch, + fetching, + finalizeAndReportTiming + }; + } +}); + +// +var require_symbols3 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kState: Symbol("FileReader state"), + kResult: Symbol("FileReader result"), + kError: Symbol("FileReader error"), + kLastProgressEventFired: Symbol("FileReader last progress event fired timestamp"), + kEvents: Symbol("FileReader events"), + kAborted: Symbol("FileReader aborted") + }; + } +}); + +// +var require_progressevent = __commonJS({ + ""(exports, module) { + "use strict"; + var { webidl } = require_webidl(); + var kState = Symbol("ProgressEvent state"); + var ProgressEvent = class _ProgressEvent extends Event { + constructor(type, eventInitDict = {}) { + type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type"); + eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {}); + super(type, eventInitDict); + this[kState] = { + lengthComputable: eventInitDict.lengthComputable, + loaded: eventInitDict.loaded, + total: eventInitDict.total + }; + } + get lengthComputable() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].lengthComputable; + } + get loaded() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].loaded; + } + get total() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].total; + } + }; + webidl.converters.ProgressEventInit = webidl.dictionaryConverter([ + { + key: "lengthComputable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "loaded", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "total", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]); + module.exports = { + ProgressEvent + }; + } +}); + +// +var require_encoding = __commonJS({ + ""(exports, module) { + "use strict"; + function getEncoding(label) { + if (!label) { + return "failure"; + } + switch (label.trim().toLowerCase()) { + case "unicode-1-1-utf-8": + case "unicode11utf8": + case "unicode20utf8": + case "utf-8": + case "utf8": + case "x-unicode20utf8": + return "UTF-8"; + case "866": + case "cp866": + case "csibm866": + case "ibm866": + return "IBM866"; + case "csisolatin2": + case "iso-8859-2": + case "iso-ir-101": + case "iso8859-2": + case "iso88592": + case "iso_8859-2": + case "iso_8859-2:1987": + case "l2": + case "latin2": + return "ISO-8859-2"; + case "csisolatin3": + case "iso-8859-3": + case "iso-ir-109": + case "iso8859-3": + case "iso88593": + case "iso_8859-3": + case "iso_8859-3:1988": + case "l3": + case "latin3": + return "ISO-8859-3"; + case "csisolatin4": + case "iso-8859-4": + case "iso-ir-110": + case "iso8859-4": + case "iso88594": + case "iso_8859-4": + case "iso_8859-4:1988": + case "l4": + case "latin4": + return "ISO-8859-4"; + case "csisolatincyrillic": + case "cyrillic": + case "iso-8859-5": + case "iso-ir-144": + case "iso8859-5": + case "iso88595": + case "iso_8859-5": + case "iso_8859-5:1988": + return "ISO-8859-5"; + case "arabic": + case "asmo-708": + case "csiso88596e": + case "csiso88596i": + case "csisolatinarabic": + case "ecma-114": + case "iso-8859-6": + case "iso-8859-6-e": + case "iso-8859-6-i": + case "iso-ir-127": + case "iso8859-6": + case "iso88596": + case "iso_8859-6": + case "iso_8859-6:1987": + return "ISO-8859-6"; + case "csisolatingreek": + case "ecma-118": + case "elot_928": + case "greek": + case "greek8": + case "iso-8859-7": + case "iso-ir-126": + case "iso8859-7": + case "iso88597": + case "iso_8859-7": + case "iso_8859-7:1987": + case "sun_eu_greek": + return "ISO-8859-7"; + case "csiso88598e": + case "csisolatinhebrew": + case "hebrew": + case "iso-8859-8": + case "iso-8859-8-e": + case "iso-ir-138": + case "iso8859-8": + case "iso88598": + case "iso_8859-8": + case "iso_8859-8:1988": + case "visual": + return "ISO-8859-8"; + case "csiso88598i": + case "iso-8859-8-i": + case "logical": + return "ISO-8859-8-I"; + case "csisolatin6": + case "iso-8859-10": + case "iso-ir-157": + case "iso8859-10": + case "iso885910": + case "l6": + case "latin6": + return "ISO-8859-10"; + case "iso-8859-13": + case "iso8859-13": + case "iso885913": + return "ISO-8859-13"; + case "iso-8859-14": + case "iso8859-14": + case "iso885914": + return "ISO-8859-14"; + case "csisolatin9": + case "iso-8859-15": + case "iso8859-15": + case "iso885915": + case "iso_8859-15": + case "l9": + return "ISO-8859-15"; + case "iso-8859-16": + return "ISO-8859-16"; + case "cskoi8r": + case "koi": + case "koi8": + case "koi8-r": + case "koi8_r": + return "KOI8-R"; + case "koi8-ru": + case "koi8-u": + return "KOI8-U"; + case "csmacintosh": + case "mac": + case "macintosh": + case "x-mac-roman": + return "macintosh"; + case "iso-8859-11": + case "iso8859-11": + case "iso885911": + case "tis-620": + case "windows-874": + return "windows-874"; + case "cp1250": + case "windows-1250": + case "x-cp1250": + return "windows-1250"; + case "cp1251": + case "windows-1251": + case "x-cp1251": + return "windows-1251"; + case "ansi_x3.4-1968": + case "ascii": + case "cp1252": + case "cp819": + case "csisolatin1": + case "ibm819": + case "iso-8859-1": + case "iso-ir-100": + case "iso8859-1": + case "iso88591": + case "iso_8859-1": + case "iso_8859-1:1987": + case "l1": + case "latin1": + case "us-ascii": + case "windows-1252": + case "x-cp1252": + return "windows-1252"; + case "cp1253": + case "windows-1253": + case "x-cp1253": + return "windows-1253"; + case "cp1254": + case "csisolatin5": + case "iso-8859-9": + case "iso-ir-148": + case "iso8859-9": + case "iso88599": + case "iso_8859-9": + case "iso_8859-9:1989": + case "l5": + case "latin5": + case "windows-1254": + case "x-cp1254": + return "windows-1254"; + case "cp1255": + case "windows-1255": + case "x-cp1255": + return "windows-1255"; + case "cp1256": + case "windows-1256": + case "x-cp1256": + return "windows-1256"; + case "cp1257": + case "windows-1257": + case "x-cp1257": + return "windows-1257"; + case "cp1258": + case "windows-1258": + case "x-cp1258": + return "windows-1258"; + case "x-mac-cyrillic": + case "x-mac-ukrainian": + return "x-mac-cyrillic"; + case "chinese": + case "csgb2312": + case "csiso58gb231280": + case "gb2312": + case "gb_2312": + case "gb_2312-80": + case "gbk": + case "iso-ir-58": + case "x-gbk": + return "GBK"; + case "gb18030": + return "gb18030"; + case "big5": + case "big5-hkscs": + case "cn-big5": + case "csbig5": + case "x-x-big5": + return "Big5"; + case "cseucpkdfmtjapanese": + case "euc-jp": + case "x-euc-jp": + return "EUC-JP"; + case "csiso2022jp": + case "iso-2022-jp": + return "ISO-2022-JP"; + case "csshiftjis": + case "ms932": + case "ms_kanji": + case "shift-jis": + case "shift_jis": + case "sjis": + case "windows-31j": + case "x-sjis": + return "Shift_JIS"; + case "cseuckr": + case "csksc56011987": + case "euc-kr": + case "iso-ir-149": + case "korean": + case "ks_c_5601-1987": + case "ks_c_5601-1989": + case "ksc5601": + case "ksc_5601": + case "windows-949": + return "EUC-KR"; + case "csiso2022kr": + case "hz-gb-2312": + case "iso-2022-cn": + case "iso-2022-cn-ext": + case "iso-2022-kr": + case "replacement": + return "replacement"; + case "unicodefffe": + case "utf-16be": + return "UTF-16BE"; + case "csunicode": + case "iso-10646-ucs-2": + case "ucs-2": + case "unicode": + case "unicodefeff": + case "utf-16": + case "utf-16le": + return "UTF-16LE"; + case "x-user-defined": + return "x-user-defined"; + default: + return "failure"; + } + } + module.exports = { + getEncoding + }; + } +}); + +// +var require_util4 = __commonJS({ + ""(exports, module) { + "use strict"; + var { + kState, + kError, + kResult, + kAborted, + kLastProgressEventFired + } = require_symbols3(); + var { ProgressEvent } = require_progressevent(); + var { getEncoding } = require_encoding(); + var { serializeAMimeType, parseMIMEType } = require_data_url(); + var { types } = __require("node:util"); + var { StringDecoder } = __require("string_decoder"); + var { btoa } = __require("node:buffer"); + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + function readOperation(fr, blob, type, encodingName) { + if (fr[kState] === "loading") { + throw new DOMException("Invalid state", "InvalidStateError"); + } + fr[kState] = "loading"; + fr[kResult] = null; + fr[kError] = null; + const stream = blob.stream(); + const reader = stream.getReader(); + const bytes = []; + let chunkPromise = reader.read(); + let isFirstChunk = true; + (async () => { + while (!fr[kAborted]) { + try { + const { done, value } = await chunkPromise; + if (isFirstChunk && !fr[kAborted]) { + queueMicrotask(() => { + fireAProgressEvent("loadstart", fr); + }); + } + isFirstChunk = false; + if (!done && types.isUint8Array(value)) { + bytes.push(value); + if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) { + fr[kLastProgressEventFired] = Date.now(); + queueMicrotask(() => { + fireAProgressEvent("progress", fr); + }); + } + chunkPromise = reader.read(); + } else if (done) { + queueMicrotask(() => { + fr[kState] = "done"; + try { + const result = packageData(bytes, type, blob.type, encodingName); + if (fr[kAborted]) { + return; + } + fr[kResult] = result; + fireAProgressEvent("load", fr); + } catch (error2) { + fr[kError] = error2; + fireAProgressEvent("error", fr); + } + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } catch (error2) { + if (fr[kAborted]) { + return; + } + queueMicrotask(() => { + fr[kState] = "done"; + fr[kError] = error2; + fireAProgressEvent("error", fr); + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } + })(); + } + function fireAProgressEvent(e, reader) { + const event = new ProgressEvent(e, { + bubbles: false, + cancelable: false + }); + reader.dispatchEvent(event); + } + function packageData(bytes, type, mimeType, encodingName) { + switch (type) { + case "DataURL": { + let dataURL = "data:"; + const parsed = parseMIMEType(mimeType || "application/octet-stream"); + if (parsed !== "failure") { + dataURL += serializeAMimeType(parsed); + } + dataURL += ";base64,"; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + dataURL += btoa(decoder.write(chunk)); + } + dataURL += btoa(decoder.end()); + return dataURL; + } + case "Text": { + let encoding = "failure"; + if (encodingName) { + encoding = getEncoding(encodingName); + } + if (encoding === "failure" && mimeType) { + const type2 = parseMIMEType(mimeType); + if (type2 !== "failure") { + encoding = getEncoding(type2.parameters.get("charset")); + } + } + if (encoding === "failure") { + encoding = "UTF-8"; + } + return decode(bytes, encoding); + } + case "ArrayBuffer": { + const sequence = combineByteSequences(bytes); + return sequence.buffer; + } + case "BinaryString": { + let binaryString = ""; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + binaryString += decoder.write(chunk); + } + binaryString += decoder.end(); + return binaryString; + } + } + } + function decode(ioQueue, encoding) { + const bytes = combineByteSequences(ioQueue); + const BOMEncoding = BOMSniffing(bytes); + let slice = 0; + if (BOMEncoding !== null) { + encoding = BOMEncoding; + slice = BOMEncoding === "UTF-8" ? 3 : 2; + } + const sliced = bytes.slice(slice); + return new TextDecoder(encoding).decode(sliced); + } + function BOMSniffing(ioQueue) { + const [a, b, c] = ioQueue; + if (a === 239 && b === 187 && c === 191) { + return "UTF-8"; + } else if (a === 254 && b === 255) { + return "UTF-16BE"; + } else if (a === 255 && b === 254) { + return "UTF-16LE"; + } + return null; + } + function combineByteSequences(sequences) { + const size = sequences.reduce((a, b) => { + return a + b.byteLength; + }, 0); + let offset = 0; + return sequences.reduce((a, b) => { + a.set(b, offset); + offset += b.byteLength; + return a; + }, new Uint8Array(size)); + } + module.exports = { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + }; + } +}); + +// +var require_filereader = __commonJS({ + ""(exports, module) { + "use strict"; + var { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + } = require_util4(); + var { + kState, + kError, + kResult, + kEvents, + kAborted + } = require_symbols3(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var FileReader = class _FileReader extends EventTarget { + constructor() { + super(); + this[kState] = "empty"; + this[kResult] = null; + this[kError] = null; + this[kEvents] = { + loadend: null, + error: null, + abort: null, + load: null, + progress: null, + loadstart: null + }; + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer + * @param {import('buffer').Blob} blob + */ + readAsArrayBuffer(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsArrayBuffer"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "ArrayBuffer"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsBinaryString + * @param {import('buffer').Blob} blob + */ + readAsBinaryString(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsBinaryString"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "BinaryString"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsDataText + * @param {import('buffer').Blob} blob + * @param {string?} encoding + */ + readAsText(blob, encoding = void 0) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText"); + blob = webidl.converters.Blob(blob, { strict: false }); + if (encoding !== void 0) { + encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "encoding"); + } + readOperation(this, blob, "Text", encoding); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL + * @param {import('buffer').Blob} blob + */ + readAsDataURL(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsDataURL"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "DataURL"); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-abort + */ + abort() { + if (this[kState] === "empty" || this[kState] === "done") { + this[kResult] = null; + return; + } + if (this[kState] === "loading") { + this[kState] = "done"; + this[kResult] = null; + } + this[kAborted] = true; + fireAProgressEvent("abort", this); + if (this[kState] !== "loading") { + fireAProgressEvent("loadend", this); + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate + */ + get readyState() { + webidl.brandCheck(this, _FileReader); + switch (this[kState]) { + case "empty": + return this.EMPTY; + case "loading": + return this.LOADING; + case "done": + return this.DONE; + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-result + */ + get result() { + webidl.brandCheck(this, _FileReader); + return this[kResult]; + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-error + */ + get error() { + webidl.brandCheck(this, _FileReader); + return this[kError]; + } + get onloadend() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadend; + } + set onloadend(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadend) { + this.removeEventListener("loadend", this[kEvents].loadend); + } + if (typeof fn === "function") { + this[kEvents].loadend = fn; + this.addEventListener("loadend", fn); + } else { + this[kEvents].loadend = null; + } + } + get onerror() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].error; + } + set onerror(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].error) { + this.removeEventListener("error", this[kEvents].error); + } + if (typeof fn === "function") { + this[kEvents].error = fn; + this.addEventListener("error", fn); + } else { + this[kEvents].error = null; + } + } + get onloadstart() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadstart; + } + set onloadstart(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadstart) { + this.removeEventListener("loadstart", this[kEvents].loadstart); + } + if (typeof fn === "function") { + this[kEvents].loadstart = fn; + this.addEventListener("loadstart", fn); + } else { + this[kEvents].loadstart = null; + } + } + get onprogress() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].progress; + } + set onprogress(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].progress) { + this.removeEventListener("progress", this[kEvents].progress); + } + if (typeof fn === "function") { + this[kEvents].progress = fn; + this.addEventListener("progress", fn); + } else { + this[kEvents].progress = null; + } + } + get onload() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].load; + } + set onload(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].load) { + this.removeEventListener("load", this[kEvents].load); + } + if (typeof fn === "function") { + this[kEvents].load = fn; + this.addEventListener("load", fn); + } else { + this[kEvents].load = null; + } + } + get onabort() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].abort; + } + set onabort(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].abort) { + this.removeEventListener("abort", this[kEvents].abort); + } + if (typeof fn === "function") { + this[kEvents].abort = fn; + this.addEventListener("abort", fn); + } else { + this[kEvents].abort = null; + } + } + }; + FileReader.EMPTY = FileReader.prototype.EMPTY = 0; + FileReader.LOADING = FileReader.prototype.LOADING = 1; + FileReader.DONE = FileReader.prototype.DONE = 2; + Object.defineProperties(FileReader.prototype, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors, + readAsArrayBuffer: kEnumerableProperty, + readAsBinaryString: kEnumerableProperty, + readAsText: kEnumerableProperty, + readAsDataURL: kEnumerableProperty, + abort: kEnumerableProperty, + readyState: kEnumerableProperty, + result: kEnumerableProperty, + error: kEnumerableProperty, + onloadstart: kEnumerableProperty, + onprogress: kEnumerableProperty, + onload: kEnumerableProperty, + onabort: kEnumerableProperty, + onerror: kEnumerableProperty, + onloadend: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FileReader", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(FileReader, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors + }); + module.exports = { + FileReader + }; + } +}); + +// +var require_symbols4 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kConstruct: require_symbols().kConstruct + }; + } +}); + +// +var require_util5 = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { URLSerializer } = require_data_url(); + var { isValidHeaderName } = require_util2(); + function urlEquals(A, B, excludeFragment = false) { + const serializedA = URLSerializer(A, excludeFragment); + const serializedB = URLSerializer(B, excludeFragment); + return serializedA === serializedB; + } + function getFieldValues(header) { + assert(header !== null); + const values = []; + for (let value of header.split(",")) { + value = value.trim(); + if (isValidHeaderName(value)) { + values.push(value); + } + } + return values; + } + module.exports = { + urlEquals, + getFieldValues + }; + } +}); + +// +var require_cache = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConstruct } = require_symbols4(); + var { urlEquals, getFieldValues } = require_util5(); + var { kEnumerableProperty, isDisturbed } = require_util(); + var { webidl } = require_webidl(); + var { Response, cloneResponse, fromInnerResponse } = require_response(); + var { Request, fromInnerRequest } = require_request2(); + var { kState } = require_symbols2(); + var { fetching } = require_fetch(); + var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2(); + var assert = __require("node:assert"); + var Cache = class _Cache { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list + * @type {requestResponseList} + */ + #relevantRequestResponseList; + constructor() { + if (arguments[0] !== kConstruct) { + webidl.illegalConstructor(); + } + webidl.util.markAsUncloneable(this); + this.#relevantRequestResponseList = arguments[1]; + } + async match(request, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.match"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + const p = this.#internalMatchAll(request, options, 1); + if (p.length === 0) { + return; + } + return p[0]; + } + async matchAll(request = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.matchAll"; + if (request !== void 0) + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + return this.#internalMatchAll(request, options); + } + async add(request) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.add"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + const requests = [request]; + const responseArrayPromise = this.addAll(requests); + return await responseArrayPromise; + } + async addAll(requests) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.addAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const responsePromises = []; + const requestList = []; + for (let request of requests) { + if (request === void 0) { + throw webidl.errors.conversionFailed({ + prefix, + argument: "Argument 1", + types: ["undefined is not allowed"] + }); + } + request = webidl.converters.RequestInfo(request); + if (typeof request === "string") { + continue; + } + const r = request[kState]; + if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme when method is not GET." + }); + } + } + const fetchControllers = []; + for (const request of requests) { + const r = new Request(request)[kState]; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme." + }); + } + r.initiator = "fetch"; + r.destination = "subresource"; + requestList.push(r); + const responsePromise = createDeferredPromise(); + fetchControllers.push(fetching({ + request: r, + processResponse(response) { + if (response.type === "error" || response.status === 206 || response.status < 200 || response.status > 299) { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "Received an invalid status code or the request failed." + })); + } else if (response.headersList.contains("vary")) { + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "invalid vary field value" + })); + for (const controller of fetchControllers) { + controller.abort(); + } + return; + } + } + } + }, + processResponseEndOfBody(response) { + if (response.aborted) { + responsePromise.reject(new DOMException("aborted", "AbortError")); + return; + } + responsePromise.resolve(response); + } + })); + responsePromises.push(responsePromise.promise); + } + const p = Promise.all(responsePromises); + const responses = await p; + const operations = []; + let index = 0; + for (const response of responses) { + const operation = { + type: "put", + // 7.3.2 + request: requestList[index], + // 7.3.3 + response + // 7.3.4 + }; + operations.push(operation); + index++; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(void 0); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async put(request, response) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.put"; + webidl.argumentLengthCheck(arguments, 2, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + response = webidl.converters.Response(response, prefix, "response"); + let innerRequest = null; + if (request instanceof Request) { + innerRequest = request[kState]; + } else { + innerRequest = new Request(request)[kState]; + } + if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected an http/s scheme when method is not GET" + }); + } + const innerResponse = response[kState]; + if (innerResponse.status === 206) { + throw webidl.errors.exception({ + header: prefix, + message: "Got 206 status" + }); + } + if (innerResponse.headersList.contains("vary")) { + const fieldValues = getFieldValues(innerResponse.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + throw webidl.errors.exception({ + header: prefix, + message: "Got * vary field value" + }); + } + } + } + if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { + throw webidl.errors.exception({ + header: prefix, + message: "Response body is locked or disturbed" + }); + } + const clonedResponse = cloneResponse(innerResponse); + const bodyReadPromise = createDeferredPromise(); + if (innerResponse.body != null) { + const stream = innerResponse.body.stream; + const reader = stream.getReader(); + readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject); + } else { + bodyReadPromise.resolve(void 0); + } + const operations = []; + const operation = { + type: "put", + // 14. + request: innerRequest, + // 15. + response: clonedResponse + // 16. + }; + operations.push(operation); + const bytes = await bodyReadPromise.promise; + if (clonedResponse.body != null) { + clonedResponse.body.source = bytes; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async delete(request, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request instanceof Request) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return false; + } + } else { + assert(typeof request === "string"); + r = new Request(request)[kState]; + } + const operations = []; + const operation = { + type: "delete", + request: r, + options + }; + operations.push(operation); + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + let requestResponses; + try { + requestResponses = this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(!!requestResponses?.length); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys + * @param {any} request + * @param {import('../../types/cache').CacheQueryOptions} options + * @returns {Promise} + */ + async keys(request = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.keys"; + if (request !== void 0) + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request !== void 0) { + if (request instanceof Request) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request === "string") { + r = new Request(request)[kState]; + } + } + const promise = createDeferredPromise(); + const requests = []; + if (request === void 0) { + for (const requestResponse of this.#relevantRequestResponseList) { + requests.push(requestResponse[0]); + } + } else { + const requestResponses = this.#queryCache(r, options); + for (const requestResponse of requestResponses) { + requests.push(requestResponse[0]); + } + } + queueMicrotask(() => { + const requestList = []; + for (const request2 of requests) { + const requestObject = fromInnerRequest( + request2, + new AbortController().signal, + "immutable" + ); + requestList.push(requestObject); + } + promise.resolve(Object.freeze(requestList)); + }); + return promise.promise; + } + /** + * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm + * @param {CacheBatchOperation[]} operations + * @returns {requestResponseList} + */ + #batchCacheOperations(operations) { + const cache = this.#relevantRequestResponseList; + const backupCache = [...cache]; + const addedItems = []; + const resultList = []; + try { + for (const operation of operations) { + if (operation.type !== "delete" && operation.type !== "put") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: 'operation type does not match "delete" or "put"' + }); + } + if (operation.type === "delete" && operation.response != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "delete operation should not have an associated response" + }); + } + if (this.#queryCache(operation.request, operation.options, addedItems).length) { + throw new DOMException("???", "InvalidStateError"); + } + let requestResponses; + if (operation.type === "delete") { + requestResponses = this.#queryCache(operation.request, operation.options); + if (requestResponses.length === 0) { + return []; + } + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + } else if (operation.type === "put") { + if (operation.response == null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "put operation should have an associated response" + }); + } + const r = operation.request; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "expected http or https scheme" + }); + } + if (r.method !== "GET") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "not get method" + }); + } + if (operation.options != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "options must not be defined" + }); + } + requestResponses = this.#queryCache(operation.request); + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + cache.push([operation.request, operation.response]); + addedItems.push([operation.request, operation.response]); + } + resultList.push([operation.request, operation.response]); + } + return resultList; + } catch (e) { + this.#relevantRequestResponseList.length = 0; + this.#relevantRequestResponseList = backupCache; + throw e; + } + } + /** + * @see https://w3c.github.io/ServiceWorker/#query-cache + * @param {any} requestQuery + * @param {import('../../types/cache').CacheQueryOptions} options + * @param {requestResponseList} targetStorage + * @returns {requestResponseList} + */ + #queryCache(requestQuery, options, targetStorage) { + const resultList = []; + const storage = targetStorage ?? this.#relevantRequestResponseList; + for (const requestResponse of storage) { + const [cachedRequest, cachedResponse] = requestResponse; + if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) { + resultList.push(requestResponse); + } + } + return resultList; + } + /** + * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm + * @param {any} requestQuery + * @param {any} request + * @param {any | null} response + * @param {import('../../types/cache').CacheQueryOptions | undefined} options + * @returns {boolean} + */ + #requestMatchesCachedItem(requestQuery, request, response = null, options) { + const queryURL = new URL(requestQuery.url); + const cachedURL = new URL(request.url); + if (options?.ignoreSearch) { + cachedURL.search = ""; + queryURL.search = ""; + } + if (!urlEquals(queryURL, cachedURL, true)) { + return false; + } + if (response == null || options?.ignoreVary || !response.headersList.contains("vary")) { + return true; + } + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + return false; + } + const requestValue = request.headersList.get(fieldValue); + const queryValue = requestQuery.headersList.get(fieldValue); + if (requestValue !== queryValue) { + return false; + } + } + return true; + } + #internalMatchAll(request, options, maxResponses = Infinity) { + let r = null; + if (request !== void 0) { + if (request instanceof Request) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request === "string") { + r = new Request(request)[kState]; + } + } + const responses = []; + if (request === void 0) { + for (const requestResponse of this.#relevantRequestResponseList) { + responses.push(requestResponse[1]); + } + } else { + const requestResponses = this.#queryCache(r, options); + for (const requestResponse of requestResponses) { + responses.push(requestResponse[1]); + } + } + const responseList = []; + for (const response of responses) { + const responseObject = fromInnerResponse(response, "immutable"); + responseList.push(responseObject.clone()); + if (responseList.length >= maxResponses) { + break; + } + } + return Object.freeze(responseList); + } + }; + Object.defineProperties(Cache.prototype, { + [Symbol.toStringTag]: { + value: "Cache", + configurable: true + }, + match: kEnumerableProperty, + matchAll: kEnumerableProperty, + add: kEnumerableProperty, + addAll: kEnumerableProperty, + put: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + var cacheQueryOptionConverters = [ + { + key: "ignoreSearch", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreMethod", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreVary", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters); + webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([ + ...cacheQueryOptionConverters, + { + key: "cacheName", + converter: webidl.converters.DOMString + } + ]); + webidl.converters.Response = webidl.interfaceConverter(Response); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.RequestInfo + ); + module.exports = { + Cache + }; + } +}); + +// +var require_cachestorage = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConstruct } = require_symbols4(); + var { Cache } = require_cache(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var CacheStorage = class _CacheStorage { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map + * @type {Map} + */ + async has(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return this.#caches.has(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open + * @param {string} cacheName + * @returns {Promise} + */ + async open(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.open"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + if (this.#caches.has(cacheName)) { + const cache2 = this.#caches.get(cacheName); + return new Cache(kConstruct, cache2); + } + const cache = []; + this.#caches.set(cacheName, cache); + return new Cache(kConstruct, cache); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete + * @param {string} cacheName + * @returns {Promise} + */ + async delete(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return this.#caches.delete(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys + * @returns {Promise} + */ + async keys() { + webidl.brandCheck(this, _CacheStorage); + const keys = this.#caches.keys(); + return [...keys]; + } + }; + Object.defineProperties(CacheStorage.prototype, { + [Symbol.toStringTag]: { + value: "CacheStorage", + configurable: true + }, + match: kEnumerableProperty, + has: kEnumerableProperty, + open: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + module.exports = { + CacheStorage + }; + } +}); + +// +var require_constants4 = __commonJS({ + ""(exports, module) { + "use strict"; + var maxAttributeValueSize = 1024; + var maxNameValuePairSize = 4096; + module.exports = { + maxAttributeValueSize, + maxNameValuePairSize + }; + } +}); + +// +var require_util6 = __commonJS({ + ""(exports, module) { + "use strict"; + function isCTLExcludingHtab(value) { + for (let i = 0; i < value.length; ++i) { + const code = value.charCodeAt(i); + if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) { + return true; + } + } + return false; + } + function validateCookieName(name) { + for (let i = 0; i < name.length; ++i) { + const code = name.charCodeAt(i); + if (code < 33 || // exclude CTLs (0-31), SP and HT + code > 126 || // exclude non-ascii and DEL + code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 60 || // < + code === 62 || // > + code === 64 || // @ + code === 44 || // , + code === 59 || // ; + code === 58 || // : + code === 92 || // \ + code === 47 || // / + code === 91 || // [ + code === 93 || // ] + code === 63 || // ? + code === 61 || // = + code === 123 || // { + code === 125) { + throw new Error("Invalid cookie name"); + } + } + } + function validateCookieValue(value) { + let len = value.length; + let i = 0; + if (value[0] === '"') { + if (len === 1 || value[len - 1] !== '"') { + throw new Error("Invalid cookie value"); + } + --len; + ++i; + } + while (i < len) { + const code = value.charCodeAt(i++); + if (code < 33 || // exclude CTLs (0-31) + code > 126 || // non-ascii and DEL (127) + code === 34 || // " + code === 44 || // , + code === 59 || // ; + code === 92) { + throw new Error("Invalid cookie value"); + } + } + } + function validateCookiePath(path) { + for (let i = 0; i < path.length; ++i) { + const code = path.charCodeAt(i); + if (code < 32 || // exclude CTLs (0-31) + code === 127 || // DEL + code === 59) { + throw new Error("Invalid cookie path"); + } + } + } + function validateCookieDomain(domain) { + if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) { + throw new Error("Invalid cookie domain"); + } + } + var IMFDays = [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ]; + var IMFMonths = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ]; + var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0")); + function toIMFDate(date) { + if (typeof date === "number") { + date = new Date(date); + } + return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`; + } + function validateCookieMaxAge(maxAge) { + if (maxAge < 0) { + throw new Error("Invalid cookie max-age"); + } + } + function stringify(cookie) { + if (cookie.name.length === 0) { + return null; + } + validateCookieName(cookie.name); + validateCookieValue(cookie.value); + const out = [`${cookie.name}=${cookie.value}`]; + if (cookie.name.startsWith("__Secure-")) { + cookie.secure = true; + } + if (cookie.name.startsWith("__Host-")) { + cookie.secure = true; + cookie.domain = null; + cookie.path = "/"; + } + if (cookie.secure) { + out.push("Secure"); + } + if (cookie.httpOnly) { + out.push("HttpOnly"); + } + if (typeof cookie.maxAge === "number") { + validateCookieMaxAge(cookie.maxAge); + out.push(`Max-Age=${cookie.maxAge}`); + } + if (cookie.domain) { + validateCookieDomain(cookie.domain); + out.push(`Domain=${cookie.domain}`); + } + if (cookie.path) { + validateCookiePath(cookie.path); + out.push(`Path=${cookie.path}`); + } + if (cookie.expires && cookie.expires.toString() !== "Invalid Date") { + out.push(`Expires=${toIMFDate(cookie.expires)}`); + } + if (cookie.sameSite) { + out.push(`SameSite=${cookie.sameSite}`); + } + for (const part of cookie.unparsed) { + if (!part.includes("=")) { + throw new Error("Invalid unparsed"); + } + const [key, ...value] = part.split("="); + out.push(`${key.trim()}=${value.join("=")}`); + } + return out.join("; "); + } + module.exports = { + isCTLExcludingHtab, + validateCookieName, + validateCookiePath, + validateCookieValue, + toIMFDate, + stringify + }; + } +}); + +// +var require_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4(); + var { isCTLExcludingHtab } = require_util6(); + var { collectASequenceOfCodePointsFast } = require_data_url(); + var assert = __require("node:assert"); + function parseSetCookie(header) { + if (isCTLExcludingHtab(header)) { + return null; + } + let nameValuePair = ""; + let unparsedAttributes = ""; + let name = ""; + let value = ""; + if (header.includes(";")) { + const position = { position: 0 }; + nameValuePair = collectASequenceOfCodePointsFast(";", header, position); + unparsedAttributes = header.slice(position.position); + } else { + nameValuePair = header; + } + if (!nameValuePair.includes("=")) { + value = nameValuePair; + } else { + const position = { position: 0 }; + name = collectASequenceOfCodePointsFast( + "=", + nameValuePair, + position + ); + value = nameValuePair.slice(position.position + 1); + } + name = name.trim(); + value = value.trim(); + if (name.length + value.length > maxNameValuePairSize) { + return null; + } + return { + name, + value, + ...parseUnparsedAttributes(unparsedAttributes) + }; + } + function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) { + if (unparsedAttributes.length === 0) { + return cookieAttributeList; + } + assert(unparsedAttributes[0] === ";"); + unparsedAttributes = unparsedAttributes.slice(1); + let cookieAv = ""; + if (unparsedAttributes.includes(";")) { + cookieAv = collectASequenceOfCodePointsFast( + ";", + unparsedAttributes, + { position: 0 } + ); + unparsedAttributes = unparsedAttributes.slice(cookieAv.length); + } else { + cookieAv = unparsedAttributes; + unparsedAttributes = ""; + } + let attributeName = ""; + let attributeValue = ""; + if (cookieAv.includes("=")) { + const position = { position: 0 }; + attributeName = collectASequenceOfCodePointsFast( + "=", + cookieAv, + position + ); + attributeValue = cookieAv.slice(position.position + 1); + } else { + attributeName = cookieAv; + } + attributeName = attributeName.trim(); + attributeValue = attributeValue.trim(); + if (attributeValue.length > maxAttributeValueSize) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const attributeNameLowercase = attributeName.toLowerCase(); + if (attributeNameLowercase === "expires") { + const expiryTime = new Date(attributeValue); + cookieAttributeList.expires = expiryTime; + } else if (attributeNameLowercase === "max-age") { + const charCode = attributeValue.charCodeAt(0); + if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + if (!/^\d+$/.test(attributeValue)) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const deltaSeconds = Number(attributeValue); + cookieAttributeList.maxAge = deltaSeconds; + } else if (attributeNameLowercase === "domain") { + let cookieDomain = attributeValue; + if (cookieDomain[0] === ".") { + cookieDomain = cookieDomain.slice(1); + } + cookieDomain = cookieDomain.toLowerCase(); + cookieAttributeList.domain = cookieDomain; + } else if (attributeNameLowercase === "path") { + let cookiePath = ""; + if (attributeValue.length === 0 || attributeValue[0] !== "/") { + cookiePath = "/"; + } else { + cookiePath = attributeValue; + } + cookieAttributeList.path = cookiePath; + } else if (attributeNameLowercase === "secure") { + cookieAttributeList.secure = true; + } else if (attributeNameLowercase === "httponly") { + cookieAttributeList.httpOnly = true; + } else if (attributeNameLowercase === "samesite") { + let enforcement = "Default"; + const attributeValueLowercase = attributeValue.toLowerCase(); + if (attributeValueLowercase.includes("none")) { + enforcement = "None"; + } + if (attributeValueLowercase.includes("strict")) { + enforcement = "Strict"; + } + if (attributeValueLowercase.includes("lax")) { + enforcement = "Lax"; + } + cookieAttributeList.sameSite = enforcement; + } else { + cookieAttributeList.unparsed ??= []; + cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); + } + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + module.exports = { + parseSetCookie, + parseUnparsedAttributes + }; + } +}); + +// +var require_cookies = __commonJS({ + ""(exports, module) { + "use strict"; + var { parseSetCookie } = require_parse(); + var { stringify } = require_util6(); + var { webidl } = require_webidl(); + var { Headers: Headers2 } = require_headers(); + function getCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookie = headers.get("cookie"); + const out = {}; + if (!cookie) { + return out; + } + for (const piece of cookie.split(";")) { + const [name, ...value] = piece.split("="); + out[name.trim()] = value.join("="); + } + return out; + } + function deleteCookie(headers, name, attributes) { + webidl.brandCheck(headers, Headers2, { strict: false }); + const prefix = "deleteCookie"; + webidl.argumentLengthCheck(arguments, 2, prefix); + name = webidl.converters.DOMString(name, prefix, "name"); + attributes = webidl.converters.DeleteCookieAttributes(attributes); + setCookie(headers, { + name, + value: "", + expires: /* @__PURE__ */ new Date(0), + ...attributes + }); + } + function getSetCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getSetCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookies = headers.getSetCookie(); + if (!cookies) { + return []; + } + return cookies.map((pair) => parseSetCookie(pair)); + } + function setCookie(headers, cookie) { + webidl.argumentLengthCheck(arguments, 2, "setCookie"); + webidl.brandCheck(headers, Headers2, { strict: false }); + cookie = webidl.converters.Cookie(cookie); + const str = stringify(cookie); + if (str) { + headers.append("Set-Cookie", str); + } + } + webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([ + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + } + ]); + webidl.converters.Cookie = webidl.dictionaryConverter([ + { + converter: webidl.converters.DOMString, + key: "name" + }, + { + converter: webidl.converters.DOMString, + key: "value" + }, + { + converter: webidl.nullableConverter((value) => { + if (typeof value === "number") { + return webidl.converters["unsigned long long"](value); + } + return new Date(value); + }), + key: "expires", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters["long long"]), + key: "maxAge", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "secure", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "httpOnly", + defaultValue: () => null + }, + { + converter: webidl.converters.USVString, + key: "sameSite", + allowedValues: ["Strict", "Lax", "None"] + }, + { + converter: webidl.sequenceConverter(webidl.converters.DOMString), + key: "unparsed", + defaultValue: () => new Array(0) + } + ]); + module.exports = { + getCookies, + deleteCookie, + getSetCookies, + setCookie + }; + } +}); + +// +var require_events = __commonJS({ + ""(exports, module) { + "use strict"; + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var { kConstruct } = require_symbols(); + var { MessagePort } = __require("node:worker_threads"); + var MessageEvent = class _MessageEvent extends Event { + #eventInit; + constructor(type, eventInitDict = {}) { + if (type === kConstruct) { + super(arguments[1], arguments[2]); + webidl.util.markAsUncloneable(this); + return; + } + const prefix = "MessageEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict"); + super(type, eventInitDict); + this.#eventInit = eventInitDict; + webidl.util.markAsUncloneable(this); + } + get data() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.data; + } + get origin() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.origin; + } + get lastEventId() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.lastEventId; + } + get source() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.source; + } + get ports() { + webidl.brandCheck(this, _MessageEvent); + if (!Object.isFrozen(this.#eventInit.ports)) { + Object.freeze(this.#eventInit.ports); + } + return this.#eventInit.ports; + } + initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) { + webidl.brandCheck(this, _MessageEvent); + webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent"); + return new _MessageEvent(type, { + bubbles, + cancelable, + data, + origin, + lastEventId, + source, + ports + }); + } + static createFastMessageEvent(type, init) { + const messageEvent = new _MessageEvent(kConstruct, type, init); + messageEvent.#eventInit = init; + messageEvent.#eventInit.data ??= null; + messageEvent.#eventInit.origin ??= ""; + messageEvent.#eventInit.lastEventId ??= ""; + messageEvent.#eventInit.source ??= null; + messageEvent.#eventInit.ports ??= []; + return messageEvent; + } + }; + var { createFastMessageEvent } = MessageEvent; + delete MessageEvent.createFastMessageEvent; + var CloseEvent = class _CloseEvent extends Event { + #eventInit; + constructor(type, eventInitDict = {}) { + const prefix = "CloseEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.CloseEventInit(eventInitDict); + super(type, eventInitDict); + this.#eventInit = eventInitDict; + webidl.util.markAsUncloneable(this); + } + get wasClean() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.wasClean; + } + get code() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.code; + } + get reason() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.reason; + } + }; + var ErrorEvent = class _ErrorEvent extends Event { + #eventInit; + constructor(type, eventInitDict) { + const prefix = "ErrorEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + super(type, eventInitDict); + webidl.util.markAsUncloneable(this); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}); + this.#eventInit = eventInitDict; + } + get message() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.message; + } + get filename() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.filename; + } + get lineno() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.lineno; + } + get colno() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.colno; + } + get error() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.error; + } + }; + Object.defineProperties(MessageEvent.prototype, { + [Symbol.toStringTag]: { + value: "MessageEvent", + configurable: true + }, + data: kEnumerableProperty, + origin: kEnumerableProperty, + lastEventId: kEnumerableProperty, + source: kEnumerableProperty, + ports: kEnumerableProperty, + initMessageEvent: kEnumerableProperty + }); + Object.defineProperties(CloseEvent.prototype, { + [Symbol.toStringTag]: { + value: "CloseEvent", + configurable: true + }, + reason: kEnumerableProperty, + code: kEnumerableProperty, + wasClean: kEnumerableProperty + }); + Object.defineProperties(ErrorEvent.prototype, { + [Symbol.toStringTag]: { + value: "ErrorEvent", + configurable: true + }, + message: kEnumerableProperty, + filename: kEnumerableProperty, + lineno: kEnumerableProperty, + colno: kEnumerableProperty, + error: kEnumerableProperty + }); + webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.MessagePort + ); + var eventInit = [ + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.MessageEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "data", + converter: webidl.converters.any, + defaultValue: () => null + }, + { + key: "origin", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lastEventId", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "source", + // Node doesn't implement WindowProxy or ServiceWorker, so the only + // valid value for source is a MessagePort. + converter: webidl.nullableConverter(webidl.converters.MessagePort), + defaultValue: () => null + }, + { + key: "ports", + converter: webidl.converters["sequence"], + defaultValue: () => new Array(0) + } + ]); + webidl.converters.CloseEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "wasClean", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "code", + converter: webidl.converters["unsigned short"], + defaultValue: () => 0 + }, + { + key: "reason", + converter: webidl.converters.USVString, + defaultValue: () => "" + } + ]); + webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "message", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "filename", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lineno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "colno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "error", + converter: webidl.converters.any + } + ]); + module.exports = { + MessageEvent, + CloseEvent, + ErrorEvent, + createFastMessageEvent + }; + } +}); + +// +var require_constants5 = __commonJS({ + ""(exports, module) { + "use strict"; + var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + var states = { + CONNECTING: 0, + OPEN: 1, + CLOSING: 2, + CLOSED: 3 + }; + var sentCloseFrameState = { + NOT_SENT: 0, + PROCESSING: 1, + SENT: 2 + }; + var opcodes = { + CONTINUATION: 0, + TEXT: 1, + BINARY: 2, + CLOSE: 8, + PING: 9, + PONG: 10 + }; + var maxUnsigned16Bit = 2 ** 16 - 1; + var parserStates = { + INFO: 0, + PAYLOADLENGTH_16: 2, + PAYLOADLENGTH_64: 3, + READ_DATA: 4 + }; + var emptyBuffer = Buffer.allocUnsafe(0); + var sendHints = { + string: 1, + typedArray: 2, + arrayBuffer: 3, + blob: 4 + }; + module.exports = { + uid, + sentCloseFrameState, + staticPropertyDescriptors, + states, + opcodes, + maxUnsigned16Bit, + parserStates, + emptyBuffer, + sendHints + }; + } +}); + +// +var require_symbols5 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kWebSocketURL: Symbol("url"), + kReadyState: Symbol("ready state"), + kController: Symbol("controller"), + kResponse: Symbol("response"), + kBinaryType: Symbol("binary type"), + kSentClose: Symbol("sent close"), + kReceivedClose: Symbol("received close"), + kByteParser: Symbol("byte parser") + }; + } +}); + +// +var require_util7 = __commonJS({ + ""(exports, module) { + "use strict"; + var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5(); + var { states, opcodes } = require_constants5(); + var { ErrorEvent, createFastMessageEvent } = require_events(); + var { isUtf8 } = __require("node:buffer"); + var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url(); + function isConnecting(ws) { + return ws[kReadyState] === states.CONNECTING; + } + function isEstablished(ws) { + return ws[kReadyState] === states.OPEN; + } + function isClosing(ws) { + return ws[kReadyState] === states.CLOSING; + } + function isClosed(ws) { + return ws[kReadyState] === states.CLOSED; + } + function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { + const event = eventFactory(e, eventInitDict); + target.dispatchEvent(event); + } + function websocketMessageReceived(ws, type, data) { + if (ws[kReadyState] !== states.OPEN) { + return; + } + let dataForEvent; + if (type === opcodes.TEXT) { + try { + dataForEvent = utf8Decode(data); + } catch { + failWebsocketConnection(ws, "Received invalid UTF-8 in text frame."); + return; + } + } else if (type === opcodes.BINARY) { + if (ws[kBinaryType] === "blob") { + dataForEvent = new Blob([data]); + } else { + dataForEvent = toArrayBuffer(data); + } + } + fireEvent("message", ws, createFastMessageEvent, { + origin: ws[kWebSocketURL].origin, + data: dataForEvent + }); + } + function toArrayBuffer(buffer) { + if (buffer.byteLength === buffer.buffer.byteLength) { + return buffer.buffer; + } + return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); + } + function isValidSubprotocol(protocol) { + if (protocol.length === 0) { + return false; + } + for (let i = 0; i < protocol.length; ++i) { + const code = protocol.charCodeAt(i); + if (code < 33 || // CTL, contains SP (0x20) and HT (0x09) + code > 126 || code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 44 || // , + code === 47 || // / + code === 58 || // : + code === 59 || // ; + code === 60 || // < + code === 61 || // = + code === 62 || // > + code === 63 || // ? + code === 64 || // @ + code === 91 || // [ + code === 92 || // \ + code === 93 || // ] + code === 123 || // { + code === 125) { + return false; + } + } + return true; + } + function isValidStatusCode(code) { + if (code >= 1e3 && code < 1015) { + return code !== 1004 && // reserved + code !== 1005 && // "MUST NOT be set as a status code" + code !== 1006; + } + return code >= 3e3 && code <= 4999; + } + function failWebsocketConnection(ws, reason) { + const { [kController]: controller, [kResponse]: response } = ws; + controller.abort(); + if (response?.socket && !response.socket.destroyed) { + response.socket.destroy(); + } + if (reason) { + fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { + error: new Error(reason), + message: reason + }); + } + } + function isControlFrame(opcode) { + return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG; + } + function isContinuationFrame(opcode) { + return opcode === opcodes.CONTINUATION; + } + function isTextBinaryFrame(opcode) { + return opcode === opcodes.TEXT || opcode === opcodes.BINARY; + } + function isValidOpcode(opcode) { + return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode); + } + function parseExtensions(extensions) { + const position = { position: 0 }; + const extensionList = /* @__PURE__ */ new Map(); + while (position.position < extensions.length) { + const pair = collectASequenceOfCodePointsFast(";", extensions, position); + const [name, value = ""] = pair.split("="); + extensionList.set( + removeHTTPWhitespace(name, true, false), + removeHTTPWhitespace(value, false, true) + ); + position.position++; + } + return extensionList; + } + function isValidClientWindowBits(value) { + if (value.length === 0) { + return false; + } + for (let i = 0; i < value.length; i++) { + const byte = value.charCodeAt(i); + if (byte < 48 || byte > 57) { + return false; + } + } + const num = Number.parseInt(value, 10); + return num >= 8 && num <= 15; + } + var hasIntl = typeof process.versions.icu === "string"; + var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0; + var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) { + if (isUtf8(buffer)) { + return buffer.toString("utf-8"); + } + throw new TypeError("Invalid utf-8 received."); + }; + module.exports = { + isConnecting, + isEstablished, + isClosing, + isClosed, + fireEvent, + isValidSubprotocol, + isValidStatusCode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isContinuationFrame, + isTextBinaryFrame, + isValidOpcode, + parseExtensions, + isValidClientWindowBits + }; + } +}); + +// +var require_frame = __commonJS({ + ""(exports, module) { + "use strict"; + var { maxUnsigned16Bit } = require_constants5(); + var BUFFER_SIZE = 16386; + var crypto; + var buffer = null; + var bufIdx = BUFFER_SIZE; + try { + crypto = __require("node:crypto"); + } catch { + crypto = { + // not full compatibility, but minimum. + randomFillSync: function randomFillSync(buffer2, _offset, _size) { + for (let i = 0; i < buffer2.length; ++i) { + buffer2[i] = Math.random() * 255 | 0; + } + return buffer2; + } + }; + } + function generateMask() { + if (bufIdx === BUFFER_SIZE) { + bufIdx = 0; + crypto.randomFillSync(buffer ??= Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE); + } + return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]; + } + var WebsocketFrameSend = class { + /** + * @param {Buffer|undefined} data + */ + constructor(data) { + this.frameData = data; + } + createFrame(opcode) { + const frameData = this.frameData; + const maskKey = generateMask(); + const bodyLength = frameData?.byteLength ?? 0; + let payloadLength = bodyLength; + let offset = 6; + if (bodyLength > maxUnsigned16Bit) { + offset += 8; + payloadLength = 127; + } else if (bodyLength > 125) { + offset += 2; + payloadLength = 126; + } + const buffer2 = Buffer.allocUnsafe(bodyLength + offset); + buffer2[0] = buffer2[1] = 0; + buffer2[0] |= 128; + buffer2[0] = (buffer2[0] & 240) + opcode; + buffer2[offset - 4] = maskKey[0]; + buffer2[offset - 3] = maskKey[1]; + buffer2[offset - 2] = maskKey[2]; + buffer2[offset - 1] = maskKey[3]; + buffer2[1] = payloadLength; + if (payloadLength === 126) { + buffer2.writeUInt16BE(bodyLength, 2); + } else if (payloadLength === 127) { + buffer2[2] = buffer2[3] = 0; + buffer2.writeUIntBE(bodyLength, 4, 6); + } + buffer2[1] |= 128; + for (let i = 0; i < bodyLength; ++i) { + buffer2[offset + i] = frameData[i] ^ maskKey[i & 3]; + } + return buffer2; + } + }; + module.exports = { + WebsocketFrameSend + }; + } +}); + +// +var require_connection = __commonJS({ + ""(exports, module) { + "use strict"; + var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5(); + var { + kReadyState, + kSentClose, + kByteParser, + kReceivedClose, + kResponse + } = require_symbols5(); + var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util7(); + var { channels } = require_diagnostics(); + var { CloseEvent } = require_events(); + var { makeRequest } = require_request2(); + var { fetching } = require_fetch(); + var { Headers: Headers2, getHeadersList } = require_headers(); + var { getDecodeSplit } = require_util2(); + var { WebsocketFrameSend } = require_frame(); + var crypto; + try { + crypto = __require("node:crypto"); + } catch { + } + function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { + const requestURL = url; + requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; + const request = makeRequest({ + urlList: [requestURL], + client, + serviceWorkers: "none", + referrer: "no-referrer", + mode: "websocket", + credentials: "include", + cache: "no-store", + redirect: "error" + }); + if (options.headers) { + const headersList = getHeadersList(new Headers2(options.headers)); + request.headersList = headersList; + } + const keyValue = crypto.randomBytes(16).toString("base64"); + request.headersList.append("sec-websocket-key", keyValue); + request.headersList.append("sec-websocket-version", "13"); + for (const protocol of protocols) { + request.headersList.append("sec-websocket-protocol", protocol); + } + const permessageDeflate = "permessage-deflate; client_max_window_bits"; + request.headersList.append("sec-websocket-extensions", permessageDeflate); + const controller = fetching({ + request, + useParallelQueue: true, + dispatcher: options.dispatcher, + processResponse(response) { + if (response.type === "error" || response.status !== 101) { + failWebsocketConnection(ws, "Received network error or non-101 status code."); + return; + } + if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { + failWebsocketConnection(ws, "Server did not respond with sent protocols."); + return; + } + if (response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") { + failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); + return; + } + if (response.headersList.get("Connection")?.toLowerCase() !== "upgrade") { + failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); + return; + } + const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); + const digest = crypto.createHash("sha1").update(keyValue + uid).digest("base64"); + if (secWSAccept !== digest) { + failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header."); + return; + } + const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); + let extensions; + if (secExtension !== null) { + extensions = parseExtensions(secExtension); + if (!extensions.has("permessage-deflate")) { + failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match."); + return; + } + } + const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); + if (secProtocol !== null) { + const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList); + if (!requestProtocols.includes(secProtocol)) { + failWebsocketConnection(ws, "Protocol was not set in the opening handshake."); + return; + } + } + response.socket.on("data", onSocketData); + response.socket.on("close", onSocketClose); + response.socket.on("error", onSocketError); + if (channels.open.hasSubscribers) { + channels.open.publish({ + address: response.socket.address(), + protocol: secProtocol, + extensions: secExtension + }); + } + onEstablish(response, extensions); + } + }); + return controller; + } + function closeWebSocketConnection(ws, code, reason, reasonByteLength) { + if (isClosing(ws) || isClosed(ws)) { + } else if (!isEstablished(ws)) { + failWebsocketConnection(ws, "Connection was closed before it was established."); + ws[kReadyState] = states.CLOSING; + } else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) { + ws[kSentClose] = sentCloseFrameState.PROCESSING; + const frame = new WebsocketFrameSend(); + if (code !== void 0 && reason === void 0) { + frame.frameData = Buffer.allocUnsafe(2); + frame.frameData.writeUInt16BE(code, 0); + } else if (code !== void 0 && reason !== void 0) { + frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength); + frame.frameData.writeUInt16BE(code, 0); + frame.frameData.write(reason, 2, "utf-8"); + } else { + frame.frameData = emptyBuffer; + } + const socket = ws[kResponse].socket; + socket.write(frame.createFrame(opcodes.CLOSE)); + ws[kSentClose] = sentCloseFrameState.SENT; + ws[kReadyState] = states.CLOSING; + } else { + ws[kReadyState] = states.CLOSING; + } + } + function onSocketData(chunk) { + if (!this.ws[kByteParser].write(chunk)) { + this.pause(); + } + } + function onSocketClose() { + const { ws } = this; + const { [kResponse]: response } = ws; + response.socket.off("data", onSocketData); + response.socket.off("close", onSocketClose); + response.socket.off("error", onSocketError); + const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose]; + let code = 1005; + let reason = ""; + const result = ws[kByteParser].closingInfo; + if (result && !result.error) { + code = result.code ?? 1005; + reason = result.reason; + } else if (!ws[kReceivedClose]) { + code = 1006; + } + ws[kReadyState] = states.CLOSED; + fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { + wasClean, + code, + reason + }); + if (channels.close.hasSubscribers) { + channels.close.publish({ + websocket: ws, + code, + reason + }); + } + } + function onSocketError(error2) { + const { ws } = this; + ws[kReadyState] = states.CLOSING; + if (channels.socketError.hasSubscribers) { + channels.socketError.publish(error2); + } + this.destroy(); + } + module.exports = { + establishWebSocketConnection, + closeWebSocketConnection + }; + } +}); + +// +var require_permessage_deflate = __commonJS({ + ""(exports, module) { + "use strict"; + var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("node:zlib"); + var { isValidClientWindowBits } = require_util7(); + var { MessageSizeExceededError } = require_errors(); + var tail = Buffer.from([0, 0, 255, 255]); + var kBuffer = Symbol("kBuffer"); + var kLength = Symbol("kLength"); + var PerMessageDeflate = class { + /** @type {import('node:zlib').InflateRaw} */ + #inflate; + #options = {}; + #maxPayloadSize = 0; + /** + * @param {Map} extensions + */ + constructor(extensions, options) { + this.#options.serverNoContextTakeover = extensions.has("server_no_context_takeover"); + this.#options.serverMaxWindowBits = extensions.get("server_max_window_bits"); + this.#maxPayloadSize = options.maxPayloadSize; + } + /** + * Decompress a compressed payload. + * @param {Buffer} chunk Compressed data + * @param {boolean} fin Final fragment flag + * @param {Function} callback Callback function + */ + decompress(chunk, fin, callback) { + if (!this.#inflate) { + let windowBits = Z_DEFAULT_WINDOWBITS; + if (this.#options.serverMaxWindowBits) { + if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) { + callback(new Error("Invalid server_max_window_bits")); + return; + } + windowBits = Number.parseInt(this.#options.serverMaxWindowBits); + } + try { + this.#inflate = createInflateRaw({ windowBits }); + } catch (err) { + callback(err); + return; + } + this.#inflate[kBuffer] = []; + this.#inflate[kLength] = 0; + this.#inflate.on("data", (data) => { + this.#inflate[kLength] += data.length; + if (this.#maxPayloadSize > 0 && this.#inflate[kLength] > this.#maxPayloadSize) { + callback(new MessageSizeExceededError()); + this.#inflate.removeAllListeners(); + this.#inflate = null; + return; + } + this.#inflate[kBuffer].push(data); + }); + this.#inflate.on("error", (err) => { + this.#inflate = null; + callback(err); + }); + } + this.#inflate.write(chunk); + if (fin) { + this.#inflate.write(tail); + } + this.#inflate.flush(() => { + if (!this.#inflate) { + return; + } + const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength]); + this.#inflate[kBuffer].length = 0; + this.#inflate[kLength] = 0; + callback(null, full); + }); + } + }; + module.exports = { PerMessageDeflate }; + } +}); + +// +var require_receiver = __commonJS({ + ""(exports, module) { + "use strict"; + var { Writable } = __require("node:stream"); + var assert = __require("node:assert"); + var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5(); + var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5(); + var { channels } = require_diagnostics(); + var { + isValidStatusCode, + isValidOpcode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isTextBinaryFrame, + isContinuationFrame + } = require_util7(); + var { WebsocketFrameSend } = require_frame(); + var { closeWebSocketConnection } = require_connection(); + var { PerMessageDeflate } = require_permessage_deflate(); + var { MessageSizeExceededError } = require_errors(); + var ByteParser = class extends Writable { + #buffers = []; + #fragmentsBytes = 0; + #byteOffset = 0; + #loop = false; + #state = parserStates.INFO; + #info = {}; + #fragments = []; + /** @type {Map} */ + #extensions; + /** @type {number} */ + #maxPayloadSize; + /** + * @param {import('./websocket').WebSocket} ws + * @param {Map|null} extensions + * @param {{ maxPayloadSize?: number }} [options] + */ + constructor(ws, extensions, options = {}) { + super(); + this.ws = ws; + this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions; + this.#maxPayloadSize = options.maxPayloadSize ?? 0; + if (this.#extensions.has("permessage-deflate")) { + this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options)); + } + } + /** + * @param {Buffer} chunk + * @param {() => void} callback + */ + _write(chunk, _, callback) { + this.#buffers.push(chunk); + this.#byteOffset += chunk.length; + this.#loop = true; + this.run(callback); + } + #validatePayloadLength() { + if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength > this.#maxPayloadSize) { + failWebsocketConnection(this.ws, "Payload size exceeds maximum allowed size"); + return false; + } + return true; + } + /** + * Runs whenever a new chunk is received. + * Callback is called whenever there are no more chunks buffering, + * or not enough bytes are buffered to parse. + */ + run(callback) { + while (this.#loop) { + if (this.#state === parserStates.INFO) { + if (this.#byteOffset < 2) { + return callback(); + } + const buffer = this.consume(2); + const fin = (buffer[0] & 128) !== 0; + const opcode = buffer[0] & 15; + const masked = (buffer[1] & 128) === 128; + const fragmented = !fin && opcode !== opcodes.CONTINUATION; + const payloadLength = buffer[1] & 127; + const rsv1 = buffer[0] & 64; + const rsv2 = buffer[0] & 32; + const rsv3 = buffer[0] & 16; + if (!isValidOpcode(opcode)) { + failWebsocketConnection(this.ws, "Invalid opcode received"); + return callback(); + } + if (masked) { + failWebsocketConnection(this.ws, "Frame cannot be masked"); + return callback(); + } + if (rsv1 !== 0 && !this.#extensions.has("permessage-deflate")) { + failWebsocketConnection(this.ws, "Expected RSV1 to be clear."); + return; + } + if (rsv2 !== 0 || rsv3 !== 0) { + failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear"); + return; + } + if (fragmented && !isTextBinaryFrame(opcode)) { + failWebsocketConnection(this.ws, "Invalid frame type was fragmented."); + return; + } + if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) { + failWebsocketConnection(this.ws, "Expected continuation frame"); + return; + } + if (this.#info.fragmented && fragmented) { + failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes."); + return; + } + if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) { + failWebsocketConnection(this.ws, "Control frame either too large or fragmented"); + return; + } + if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) { + failWebsocketConnection(this.ws, "Unexpected continuation frame"); + return; + } + if (payloadLength <= 125) { + this.#info.payloadLength = payloadLength; + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (payloadLength === 126) { + this.#state = parserStates.PAYLOADLENGTH_16; + } else if (payloadLength === 127) { + this.#state = parserStates.PAYLOADLENGTH_64; + } + if (isTextBinaryFrame(opcode)) { + this.#info.binaryType = opcode; + this.#info.compressed = rsv1 !== 0; + } + this.#info.opcode = opcode; + this.#info.masked = masked; + this.#info.fin = fin; + this.#info.fragmented = fragmented; + } else if (this.#state === parserStates.PAYLOADLENGTH_16) { + if (this.#byteOffset < 2) { + return callback(); + } + const buffer = this.consume(2); + this.#info.payloadLength = buffer.readUInt16BE(0); + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (this.#state === parserStates.PAYLOADLENGTH_64) { + if (this.#byteOffset < 8) { + return callback(); + } + const buffer = this.consume(8); + const upper = buffer.readUInt32BE(0); + const lower = buffer.readUInt32BE(4); + if (upper !== 0 || lower > 2 ** 31 - 1) { + failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); + return; + } + this.#info.payloadLength = lower; + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (this.#state === parserStates.READ_DATA) { + if (this.#byteOffset < this.#info.payloadLength) { + return callback(); + } + const body = this.consume(this.#info.payloadLength); + if (isControlFrame(this.#info.opcode)) { + this.#loop = this.parseControlFrame(body); + this.#state = parserStates.INFO; + } else { + if (!this.#info.compressed) { + this.writeFragments(body); + if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { + failWebsocketConnection(this.ws, new MessageSizeExceededError().message); + return; + } + if (!this.#info.fragmented && this.#info.fin) { + websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments()); + } + this.#state = parserStates.INFO; + } else { + this.#extensions.get("permessage-deflate").decompress( + body, + this.#info.fin, + (error2, data) => { + if (error2) { + failWebsocketConnection(this.ws, error2.message); + return; + } + this.writeFragments(data); + if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { + failWebsocketConnection(this.ws, new MessageSizeExceededError().message); + return; + } + if (!this.#info.fin) { + this.#state = parserStates.INFO; + this.#loop = true; + this.run(callback); + return; + } + websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments()); + this.#loop = true; + this.#state = parserStates.INFO; + this.run(callback); + } + ); + this.#loop = false; + break; + } + } + } + } + } + /** + * Take n bytes from the buffered Buffers + * @param {number} n + * @returns {Buffer} + */ + consume(n) { + if (n > this.#byteOffset) { + throw new Error("Called consume() before buffers satiated."); + } else if (n === 0) { + return emptyBuffer; + } + if (this.#buffers[0].length === n) { + this.#byteOffset -= this.#buffers[0].length; + return this.#buffers.shift(); + } + const buffer = Buffer.allocUnsafe(n); + let offset = 0; + while (offset !== n) { + const next = this.#buffers[0]; + const { length } = next; + if (length + offset === n) { + buffer.set(this.#buffers.shift(), offset); + break; + } else if (length + offset > n) { + buffer.set(next.subarray(0, n - offset), offset); + this.#buffers[0] = next.subarray(n - offset); + break; + } else { + buffer.set(this.#buffers.shift(), offset); + offset += next.length; + } + } + this.#byteOffset -= n; + return buffer; + } + writeFragments(fragment) { + this.#fragmentsBytes += fragment.length; + this.#fragments.push(fragment); + } + consumeFragments() { + const fragments = this.#fragments; + if (fragments.length === 1) { + this.#fragmentsBytes = 0; + return fragments.shift(); + } + const output = Buffer.concat(fragments, this.#fragmentsBytes); + this.#fragments = []; + this.#fragmentsBytes = 0; + return output; + } + parseCloseBody(data) { + assert(data.length !== 1); + let code; + if (data.length >= 2) { + code = data.readUInt16BE(0); + } + if (code !== void 0 && !isValidStatusCode(code)) { + return { code: 1002, reason: "Invalid status code", error: true }; + } + let reason = data.subarray(2); + if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) { + reason = reason.subarray(3); + } + try { + reason = utf8Decode(reason); + } catch { + return { code: 1007, reason: "Invalid UTF-8", error: true }; + } + return { code, reason, error: false }; + } + /** + * Parses control frames. + * @param {Buffer} body + */ + parseControlFrame(body) { + const { opcode, payloadLength } = this.#info; + if (opcode === opcodes.CLOSE) { + if (payloadLength === 1) { + failWebsocketConnection(this.ws, "Received close frame with a 1-byte body."); + return false; + } + this.#info.closeInfo = this.parseCloseBody(body); + if (this.#info.closeInfo.error) { + const { code, reason } = this.#info.closeInfo; + closeWebSocketConnection(this.ws, code, reason, reason.length); + failWebsocketConnection(this.ws, reason); + return false; + } + if (this.ws[kSentClose] !== sentCloseFrameState.SENT) { + let body2 = emptyBuffer; + if (this.#info.closeInfo.code) { + body2 = Buffer.allocUnsafe(2); + body2.writeUInt16BE(this.#info.closeInfo.code, 0); + } + const closeFrame = new WebsocketFrameSend(body2); + this.ws[kResponse].socket.write( + closeFrame.createFrame(opcodes.CLOSE), + (err) => { + if (!err) { + this.ws[kSentClose] = sentCloseFrameState.SENT; + } + } + ); + } + this.ws[kReadyState] = states.CLOSING; + this.ws[kReceivedClose] = true; + return false; + } else if (opcode === opcodes.PING) { + if (!this.ws[kReceivedClose]) { + const frame = new WebsocketFrameSend(body); + this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG)); + if (channels.ping.hasSubscribers) { + channels.ping.publish({ + payload: body + }); + } + } + } else if (opcode === opcodes.PONG) { + if (channels.pong.hasSubscribers) { + channels.pong.publish({ + payload: body + }); + } + } + return true; + } + get closingInfo() { + return this.#info.closeInfo; + } + }; + module.exports = { + ByteParser + }; + } +}); + +// +var require_sender = __commonJS({ + ""(exports, module) { + "use strict"; + var { WebsocketFrameSend } = require_frame(); + var { opcodes, sendHints } = require_constants5(); + var FixedQueue = require_fixed_queue(); + var FastBuffer = Buffer[Symbol.species]; + var SendQueue = class { + /** + * @type {FixedQueue} + */ + #queue = new FixedQueue(); + /** + * @type {boolean} + */ + #running = false; + /** @type {import('node:net').Socket} */ + #socket; + constructor(socket) { + this.#socket = socket; + } + add(item, cb, hint) { + if (hint !== sendHints.blob) { + const frame = createFrame(item, hint); + if (!this.#running) { + this.#socket.write(frame, cb); + } else { + const node2 = { + promise: null, + callback: cb, + frame + }; + this.#queue.push(node2); + } + return; + } + const node = { + promise: item.arrayBuffer().then((ab) => { + node.promise = null; + node.frame = createFrame(ab, hint); + }), + callback: cb, + frame: null + }; + this.#queue.push(node); + if (!this.#running) { + this.#run(); + } + } + async #run() { + this.#running = true; + const queue = this.#queue; + while (!queue.isEmpty()) { + const node = queue.shift(); + if (node.promise !== null) { + await node.promise; + } + this.#socket.write(node.frame, node.callback); + node.callback = node.frame = null; + } + this.#running = false; + } + }; + function createFrame(data, hint) { + return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY); + } + function toBuffer(data, hint) { + switch (hint) { + case sendHints.string: + return Buffer.from(data); + case sendHints.arrayBuffer: + case sendHints.blob: + return new FastBuffer(data); + case sendHints.typedArray: + return new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } + } + module.exports = { SendQueue }; + } +}); + +// +var require_websocket = __commonJS({ + ""(exports, module) { + "use strict"; + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { environmentSettingsObject } = require_util2(); + var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5(); + var { + kWebSocketURL, + kReadyState, + kController, + kBinaryType, + kResponse, + kSentClose, + kByteParser + } = require_symbols5(); + var { + isConnecting, + isEstablished, + isClosing, + isValidSubprotocol, + fireEvent + } = require_util7(); + var { establishWebSocketConnection, closeWebSocketConnection } = require_connection(); + var { ByteParser } = require_receiver(); + var { kEnumerableProperty, isBlobLike } = require_util(); + var { getGlobalDispatcher } = require_global2(); + var { types } = __require("node:util"); + var { ErrorEvent, CloseEvent } = require_events(); + var { SendQueue } = require_sender(); + var WebSocket = class _WebSocket extends EventTarget { + #events = { + open: null, + error: null, + close: null, + message: null + }; + #bufferedAmount = 0; + #protocol = ""; + #extensions = ""; + /** @type {SendQueue} */ + #sendQueue; + /** + * @param {string} url + * @param {string|string[]} protocols + */ + constructor(url, protocols = []) { + super(); + webidl.util.markAsUncloneable(this); + const prefix = "WebSocket constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols, prefix, "options"); + url = webidl.converters.USVString(url, prefix, "url"); + protocols = options.protocols; + const baseURL = environmentSettingsObject.settingsObject.baseUrl; + let urlRecord; + try { + urlRecord = new URL(url, baseURL); + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + if (urlRecord.protocol === "http:") { + urlRecord.protocol = "ws:"; + } else if (urlRecord.protocol === "https:") { + urlRecord.protocol = "wss:"; + } + if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") { + throw new DOMException( + `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, + "SyntaxError" + ); + } + if (urlRecord.hash || urlRecord.href.endsWith("#")) { + throw new DOMException("Got fragment", "SyntaxError"); + } + if (typeof protocols === "string") { + protocols = [protocols]; + } + if (protocols.length !== new Set(protocols.map((p) => p.toLowerCase())).size) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + if (protocols.length > 0 && !protocols.every((p) => isValidSubprotocol(p))) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + this[kWebSocketURL] = new URL(urlRecord.href); + const client = environmentSettingsObject.settingsObject; + this[kController] = establishWebSocketConnection( + urlRecord, + protocols, + client, + this, + (response, extensions) => this.#onConnectionEstablished(response, extensions), + options + ); + this[kReadyState] = _WebSocket.CONNECTING; + this[kSentClose] = sentCloseFrameState.NOT_SENT; + this[kBinaryType] = "blob"; + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-close + * @param {number|undefined} code + * @param {string|undefined} reason + */ + close(code = void 0, reason = void 0) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.close"; + if (code !== void 0) { + code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true }); + } + if (reason !== void 0) { + reason = webidl.converters.USVString(reason, prefix, "reason"); + } + if (code !== void 0) { + if (code !== 1e3 && (code < 3e3 || code > 4999)) { + throw new DOMException("invalid code", "InvalidAccessError"); + } + } + let reasonByteLength = 0; + if (reason !== void 0) { + reasonByteLength = Buffer.byteLength(reason); + if (reasonByteLength > 123) { + throw new DOMException( + `Reason must be less than 123 bytes; received ${reasonByteLength}`, + "SyntaxError" + ); + } + } + closeWebSocketConnection(this, code, reason, reasonByteLength); + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-send + * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data + */ + send(data) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.send"; + webidl.argumentLengthCheck(arguments, 1, prefix); + data = webidl.converters.WebSocketSendData(data, prefix, "data"); + if (isConnecting(this)) { + throw new DOMException("Sent before connected.", "InvalidStateError"); + } + if (!isEstablished(this) || isClosing(this)) { + return; + } + if (typeof data === "string") { + const length = Buffer.byteLength(data); + this.#bufferedAmount += length; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= length; + }, sendHints.string); + } else if (types.isArrayBuffer(data)) { + this.#bufferedAmount += data.byteLength; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.byteLength; + }, sendHints.arrayBuffer); + } else if (ArrayBuffer.isView(data)) { + this.#bufferedAmount += data.byteLength; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.byteLength; + }, sendHints.typedArray); + } else if (isBlobLike(data)) { + this.#bufferedAmount += data.size; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.size; + }, sendHints.blob); + } + } + get readyState() { + webidl.brandCheck(this, _WebSocket); + return this[kReadyState]; + } + get bufferedAmount() { + webidl.brandCheck(this, _WebSocket); + return this.#bufferedAmount; + } + get url() { + webidl.brandCheck(this, _WebSocket); + return URLSerializer(this[kWebSocketURL]); + } + get extensions() { + webidl.brandCheck(this, _WebSocket); + return this.#extensions; + } + get protocol() { + webidl.brandCheck(this, _WebSocket); + return this.#protocol; + } + get onopen() { + webidl.brandCheck(this, _WebSocket); + return this.#events.open; + } + set onopen(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.open) { + this.removeEventListener("open", this.#events.open); + } + if (typeof fn === "function") { + this.#events.open = fn; + this.addEventListener("open", fn); + } else { + this.#events.open = null; + } + } + get onerror() { + webidl.brandCheck(this, _WebSocket); + return this.#events.error; + } + set onerror(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.error) { + this.removeEventListener("error", this.#events.error); + } + if (typeof fn === "function") { + this.#events.error = fn; + this.addEventListener("error", fn); + } else { + this.#events.error = null; + } + } + get onclose() { + webidl.brandCheck(this, _WebSocket); + return this.#events.close; + } + set onclose(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.close) { + this.removeEventListener("close", this.#events.close); + } + if (typeof fn === "function") { + this.#events.close = fn; + this.addEventListener("close", fn); + } else { + this.#events.close = null; + } + } + get onmessage() { + webidl.brandCheck(this, _WebSocket); + return this.#events.message; + } + set onmessage(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.message) { + this.removeEventListener("message", this.#events.message); + } + if (typeof fn === "function") { + this.#events.message = fn; + this.addEventListener("message", fn); + } else { + this.#events.message = null; + } + } + get binaryType() { + webidl.brandCheck(this, _WebSocket); + return this[kBinaryType]; + } + set binaryType(type) { + webidl.brandCheck(this, _WebSocket); + if (type !== "blob" && type !== "arraybuffer") { + this[kBinaryType] = "blob"; + } else { + this[kBinaryType] = type; + } + } + /** + * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol + */ + #onConnectionEstablished(response, parsedExtensions) { + this[kResponse] = response; + const maxPayloadSize = this[kController]?.dispatcher?.webSocketOptions?.maxPayloadSize; + const parser = new ByteParser(this, parsedExtensions, { + maxPayloadSize + }); + parser.on("drain", onParserDrain); + parser.on("error", onParserError.bind(this)); + response.socket.ws = this; + this[kByteParser] = parser; + this.#sendQueue = new SendQueue(response.socket); + this[kReadyState] = states.OPEN; + const extensions = response.headersList.get("sec-websocket-extensions"); + if (extensions !== null) { + this.#extensions = extensions; + } + const protocol = response.headersList.get("sec-websocket-protocol"); + if (protocol !== null) { + this.#protocol = protocol; + } + fireEvent("open", this); + } + }; + WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING; + WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN; + WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING; + WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED; + Object.defineProperties(WebSocket.prototype, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors, + url: kEnumerableProperty, + readyState: kEnumerableProperty, + bufferedAmount: kEnumerableProperty, + onopen: kEnumerableProperty, + onerror: kEnumerableProperty, + onclose: kEnumerableProperty, + close: kEnumerableProperty, + onmessage: kEnumerableProperty, + binaryType: kEnumerableProperty, + send: kEnumerableProperty, + extensions: kEnumerableProperty, + protocol: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "WebSocket", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(WebSocket, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors + }); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.DOMString + ); + webidl.converters["DOMString or sequence"] = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) { + return webidl.converters["sequence"](V); + } + return webidl.converters.DOMString(V, prefix, argument); + }; + webidl.converters.WebSocketInit = webidl.dictionaryConverter([ + { + key: "protocols", + converter: webidl.converters["DOMString or sequence"], + defaultValue: () => new Array(0) + }, + { + key: "dispatcher", + converter: webidl.converters.any, + defaultValue: () => getGlobalDispatcher() + }, + { + key: "headers", + converter: webidl.nullableConverter(webidl.converters.HeadersInit) + } + ]); + webidl.converters["DOMString or sequence or WebSocketInit"] = function(V) { + if (webidl.util.Type(V) === "Object" && !(Symbol.iterator in V)) { + return webidl.converters.WebSocketInit(V); + } + return { protocols: webidl.converters["DOMString or sequence"](V) }; + }; + webidl.converters.WebSocketSendData = function(V) { + if (webidl.util.Type(V) === "Object") { + if (isBlobLike(V)) { + return webidl.converters.Blob(V, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V); + } + } + return webidl.converters.USVString(V); + }; + function onParserDrain() { + this.ws[kResponse].socket.resume(); + } + function onParserError(err) { + let message; + let code; + if (err instanceof CloseEvent) { + message = err.reason; + code = err.code; + } else { + message = err.message; + } + fireEvent("error", this, () => new ErrorEvent("error", { error: err, message })); + closeWebSocketConnection(this, code); + } + module.exports = { + WebSocket + }; + } +}); + +// +var require_util8 = __commonJS({ + ""(exports, module) { + "use strict"; + function isValidLastEventId(value) { + return value.indexOf("\0") === -1; + } + function isASCIINumber(value) { + if (value.length === 0) + return false; + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) + return false; + } + return true; + } + function delay(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms).unref(); + }); + } + module.exports = { + isValidLastEventId, + isASCIINumber, + delay + }; + } +}); + +// +var require_eventsource_stream = __commonJS({ + ""(exports, module) { + "use strict"; + var { Transform } = __require("node:stream"); + var { isASCIINumber, isValidLastEventId } = require_util8(); + var BOM = [239, 187, 191]; + var LF = 10; + var CR = 13; + var COLON = 58; + var SPACE = 32; + var EventSourceStream = class extends Transform { + /** + * @type {eventSourceSettings} + */ + state = null; + /** + * Leading byte-order-mark check. + * @type {boolean} + */ + checkBOM = true; + /** + * @type {boolean} + */ + crlfCheck = false; + /** + * @type {boolean} + */ + eventEndCheck = false; + /** + * @type {Buffer} + */ + buffer = null; + pos = 0; + event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + /** + * @param {object} options + * @param {eventSourceSettings} options.eventSourceSettings + * @param {Function} [options.push] + */ + constructor(options = {}) { + options.readableObjectMode = true; + super(options); + this.state = options.eventSourceSettings || {}; + if (options.push) { + this.push = options.push; + } + } + /** + * @param {Buffer} chunk + * @param {string} _encoding + * @param {Function} callback + * @returns {void} + */ + _transform(chunk, _encoding, callback) { + if (chunk.length === 0) { + callback(); + return; + } + if (this.buffer) { + this.buffer = Buffer.concat([this.buffer, chunk]); + } else { + this.buffer = chunk; + } + if (this.checkBOM) { + switch (this.buffer.length) { + case 1: + if (this.buffer[0] === BOM[0]) { + callback(); + return; + } + this.checkBOM = false; + callback(); + return; + case 2: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) { + callback(); + return; + } + this.checkBOM = false; + break; + case 3: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = Buffer.alloc(0); + this.checkBOM = false; + callback(); + return; + } + this.checkBOM = false; + break; + default: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = this.buffer.subarray(3); + } + this.checkBOM = false; + break; + } + } + while (this.pos < this.buffer.length) { + if (this.eventEndCheck) { + if (this.crlfCheck) { + if (this.buffer[this.pos] === LF) { + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.crlfCheck = false; + continue; + } + this.crlfCheck = false; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) { + this.processEvent(this.event); + } + this.clearEvent(); + continue; + } + this.eventEndCheck = false; + continue; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.parseLine(this.buffer.subarray(0, this.pos), this.event); + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.eventEndCheck = true; + continue; + } + this.pos++; + } + callback(); + } + /** + * @param {Buffer} line + * @param {EventStreamEvent} event + */ + parseLine(line, event) { + if (line.length === 0) { + return; + } + const colonPosition = line.indexOf(COLON); + if (colonPosition === 0) { + return; + } + let field = ""; + let value = ""; + if (colonPosition !== -1) { + field = line.subarray(0, colonPosition).toString("utf8"); + let valueStart = colonPosition + 1; + if (line[valueStart] === SPACE) { + ++valueStart; + } + value = line.subarray(valueStart).toString("utf8"); + } else { + field = line.toString("utf8"); + value = ""; + } + switch (field) { + case "data": + if (event[field] === void 0) { + event[field] = value; + } else { + event[field] += ` +${value}`; + } + break; + case "retry": + if (isASCIINumber(value)) { + event[field] = value; + } + break; + case "id": + if (isValidLastEventId(value)) { + event[field] = value; + } + break; + case "event": + if (value.length > 0) { + event[field] = value; + } + break; + } + } + /** + * @param {EventSourceStreamEvent} event + */ + processEvent(event) { + if (event.retry && isASCIINumber(event.retry)) { + this.state.reconnectionTime = parseInt(event.retry, 10); + } + if (event.id && isValidLastEventId(event.id)) { + this.state.lastEventId = event.id; + } + if (event.data !== void 0) { + this.push({ + type: event.event || "message", + options: { + data: event.data, + lastEventId: this.state.lastEventId, + origin: this.state.origin + } + }); + } + } + clearEvent() { + this.event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + } + }; + module.exports = { + EventSourceStream + }; + } +}); + +// +var require_eventsource = __commonJS({ + ""(exports, module) { + "use strict"; + var { pipeline } = __require("node:stream"); + var { fetching } = require_fetch(); + var { makeRequest } = require_request2(); + var { webidl } = require_webidl(); + var { EventSourceStream } = require_eventsource_stream(); + var { parseMIMEType } = require_data_url(); + var { createFastMessageEvent } = require_events(); + var { isNetworkError } = require_response(); + var { delay } = require_util8(); + var { kEnumerableProperty } = require_util(); + var { environmentSettingsObject } = require_util2(); + var experimentalWarned = false; + var defaultReconnectionTime = 3e3; + var CONNECTING = 0; + var OPEN = 1; + var CLOSED = 2; + var ANONYMOUS = "anonymous"; + var USE_CREDENTIALS = "use-credentials"; + var EventSource = class _EventSource extends EventTarget { + #events = { + open: null, + error: null, + message: null + }; + #url = null; + #withCredentials = false; + #readyState = CONNECTING; + #request = null; + #controller = null; + #dispatcher; + /** + * @type {import('./eventsource-stream').eventSourceSettings} + */ + #state; + /** + * Creates a new EventSource object. + * @param {string} url + * @param {EventSourceInit} [eventSourceInitDict] + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface + */ + constructor(url, eventSourceInitDict = {}) { + super(); + webidl.util.markAsUncloneable(this); + const prefix = "EventSource constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + if (!experimentalWarned) { + experimentalWarned = true; + process.emitWarning("EventSource is experimental, expect them to change at any time.", { + code: "UNDICI-ES" + }); + } + url = webidl.converters.USVString(url, prefix, "url"); + eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict"); + this.#dispatcher = eventSourceInitDict.dispatcher; + this.#state = { + lastEventId: "", + reconnectionTime: defaultReconnectionTime + }; + const settings = environmentSettingsObject; + let urlRecord; + try { + urlRecord = new URL(url, settings.settingsObject.baseUrl); + this.#state.origin = urlRecord.origin; + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + this.#url = urlRecord.href; + let corsAttributeState = ANONYMOUS; + if (eventSourceInitDict.withCredentials) { + corsAttributeState = USE_CREDENTIALS; + this.#withCredentials = true; + } + const initRequest = { + redirect: "follow", + keepalive: true, + // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes + mode: "cors", + credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit", + referrer: "no-referrer" + }; + initRequest.client = environmentSettingsObject.settingsObject; + initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]]; + initRequest.cache = "no-store"; + initRequest.initiator = "other"; + initRequest.urlList = [new URL(this.#url)]; + this.#request = makeRequest(initRequest); + this.#connect(); + } + /** + * Returns the state of this EventSource object's connection. It can have the + * values described below. + * @returns {0|1|2} + * @readonly + */ + get readyState() { + return this.#readyState; + } + /** + * Returns the URL providing the event stream. + * @readonly + * @returns {string} + */ + get url() { + return this.#url; + } + /** + * Returns a boolean indicating whether the EventSource object was + * instantiated with CORS credentials set (true), or not (false, the default). + */ + get withCredentials() { + return this.#withCredentials; + } + #connect() { + if (this.#readyState === CLOSED) + return; + this.#readyState = CONNECTING; + const fetchParams = { + request: this.#request, + dispatcher: this.#dispatcher + }; + const processEventSourceEndOfBody = (response) => { + if (isNetworkError(response)) { + this.dispatchEvent(new Event("error")); + this.close(); + } + this.#reconnect(); + }; + fetchParams.processResponseEndOfBody = processEventSourceEndOfBody; + fetchParams.processResponse = (response) => { + if (isNetworkError(response)) { + if (response.aborted) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } else { + this.#reconnect(); + return; + } + } + const contentType = response.headersList.get("content-type", true); + const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure"; + const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream"; + if (response.status !== 200 || contentTypeValid === false) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } + this.#readyState = OPEN; + this.dispatchEvent(new Event("open")); + this.#state.origin = response.urlList[response.urlList.length - 1].origin; + const eventSourceStream = new EventSourceStream({ + eventSourceSettings: this.#state, + push: (event) => { + this.dispatchEvent(createFastMessageEvent( + event.type, + event.options + )); + } + }); + pipeline( + response.body.stream, + eventSourceStream, + (error2) => { + if (error2?.aborted === false) { + this.close(); + this.dispatchEvent(new Event("error")); + } + } + ); + }; + this.#controller = fetching(fetchParams); + } + /** + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model + * @returns {Promise} + */ + async #reconnect() { + if (this.#readyState === CLOSED) + return; + this.#readyState = CONNECTING; + this.dispatchEvent(new Event("error")); + await delay(this.#state.reconnectionTime); + if (this.#readyState !== CONNECTING) + return; + if (this.#state.lastEventId.length) { + this.#request.headersList.set("last-event-id", this.#state.lastEventId, true); + } + this.#connect(); + } + /** + * Closes the connection, if any, and sets the readyState attribute to + * CLOSED. + */ + close() { + webidl.brandCheck(this, _EventSource); + if (this.#readyState === CLOSED) + return; + this.#readyState = CLOSED; + this.#controller.abort(); + this.#request = null; + } + get onopen() { + return this.#events.open; + } + set onopen(fn) { + if (this.#events.open) { + this.removeEventListener("open", this.#events.open); + } + if (typeof fn === "function") { + this.#events.open = fn; + this.addEventListener("open", fn); + } else { + this.#events.open = null; + } + } + get onmessage() { + return this.#events.message; + } + set onmessage(fn) { + if (this.#events.message) { + this.removeEventListener("message", this.#events.message); + } + if (typeof fn === "function") { + this.#events.message = fn; + this.addEventListener("message", fn); + } else { + this.#events.message = null; + } + } + get onerror() { + return this.#events.error; + } + set onerror(fn) { + if (this.#events.error) { + this.removeEventListener("error", this.#events.error); + } + if (typeof fn === "function") { + this.#events.error = fn; + this.addEventListener("error", fn); + } else { + this.#events.error = null; + } + } + }; + var constantsPropertyDescriptors = { + CONNECTING: { + __proto__: null, + configurable: false, + enumerable: true, + value: CONNECTING, + writable: false + }, + OPEN: { + __proto__: null, + configurable: false, + enumerable: true, + value: OPEN, + writable: false + }, + CLOSED: { + __proto__: null, + configurable: false, + enumerable: true, + value: CLOSED, + writable: false + } + }; + Object.defineProperties(EventSource, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, { + close: kEnumerableProperty, + onerror: kEnumerableProperty, + onmessage: kEnumerableProperty, + onopen: kEnumerableProperty, + readyState: kEnumerableProperty, + url: kEnumerableProperty, + withCredentials: kEnumerableProperty + }); + webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([ + { + key: "withCredentials", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "dispatcher", + // undici only + converter: webidl.converters.any + } + ]); + module.exports = { + EventSource, + defaultReconnectionTime + }; + } +}); + +// +var require_undici = __commonJS({ + ""(exports, module) { + "use strict"; + var Client = require_client(); + var Dispatcher = require_dispatcher(); + var Pool = require_pool(); + var BalancedPool = require_balanced_pool(); + var Agent = require_agent(); + var ProxyAgent2 = require_proxy_agent(); + var EnvHttpProxyAgent = require_env_http_proxy_agent(); + var RetryAgent = require_retry_agent(); + var errors = require_errors(); + var util = require_util(); + var { InvalidArgumentError } = errors; + var api = require_api(); + var buildConnector = require_connect(); + var MockClient = require_mock_client(); + var MockAgent = require_mock_agent(); + var MockPool = require_mock_pool(); + var mockErrors = require_mock_errors(); + var RetryHandler = require_retry_handler(); + var { getGlobalDispatcher, setGlobalDispatcher } = require_global2(); + var DecoratorHandler = require_decorator_handler(); + var RedirectHandler = require_redirect_handler(); + var createRedirectInterceptor = require_redirect_interceptor(); + Object.assign(Dispatcher.prototype, api); + module.exports.Dispatcher = Dispatcher; + module.exports.Client = Client; + module.exports.Pool = Pool; + module.exports.BalancedPool = BalancedPool; + module.exports.Agent = Agent; + module.exports.ProxyAgent = ProxyAgent2; + module.exports.EnvHttpProxyAgent = EnvHttpProxyAgent; + module.exports.RetryAgent = RetryAgent; + module.exports.RetryHandler = RetryHandler; + module.exports.DecoratorHandler = DecoratorHandler; + module.exports.RedirectHandler = RedirectHandler; + module.exports.createRedirectInterceptor = createRedirectInterceptor; + module.exports.interceptors = { + redirect: require_redirect(), + retry: require_retry(), + dump: require_dump(), + dns: require_dns() + }; + module.exports.buildConnector = buildConnector; + module.exports.errors = errors; + module.exports.util = { + parseHeaders: util.parseHeaders, + headerNameToString: util.headerNameToString + }; + function makeDispatcher(fn) { + return (url, opts, handler) => { + if (typeof opts === "function") { + handler = opts; + opts = null; + } + if (!url || typeof url !== "string" && typeof url !== "object" && !(url instanceof URL)) { + throw new InvalidArgumentError("invalid url"); + } + if (opts != null && typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (opts && opts.path != null) { + if (typeof opts.path !== "string") { + throw new InvalidArgumentError("invalid opts.path"); + } + let path = opts.path; + if (!opts.path.startsWith("/")) { + path = `/${path}`; + } + url = new URL(util.parseOrigin(url).origin + path); + } else { + if (!opts) { + opts = typeof url === "object" ? url : {}; + } + url = util.parseURL(url); + } + const { agent, dispatcher = getGlobalDispatcher() } = opts; + if (agent) { + throw new InvalidArgumentError("unsupported opts.agent. Did you mean opts.client?"); + } + return fn.call(dispatcher, { + ...opts, + origin: url.origin, + path: url.search ? `${url.pathname}${url.search}` : url.pathname, + method: opts.method || (opts.body ? "PUT" : "GET") + }, handler); + }; + } + module.exports.setGlobalDispatcher = setGlobalDispatcher; + module.exports.getGlobalDispatcher = getGlobalDispatcher; + var fetchImpl = require_fetch().fetch; + module.exports.fetch = async function fetch2(init, options = void 0) { + try { + return await fetchImpl(init, options); + } catch (err) { + if (err && typeof err === "object") { + Error.captureStackTrace(err); + } + throw err; + } + }; + module.exports.Headers = require_headers().Headers; + module.exports.Response = require_response().Response; + module.exports.Request = require_request2().Request; + module.exports.FormData = require_formdata().FormData; + module.exports.File = globalThis.File ?? __require("node:buffer").File; + module.exports.FileReader = require_filereader().FileReader; + var { setGlobalOrigin, getGlobalOrigin } = require_global(); + module.exports.setGlobalOrigin = setGlobalOrigin; + module.exports.getGlobalOrigin = getGlobalOrigin; + var { CacheStorage } = require_cachestorage(); + var { kConstruct } = require_symbols4(); + module.exports.caches = new CacheStorage(kConstruct); + var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies(); + module.exports.deleteCookie = deleteCookie; + module.exports.getCookies = getCookies; + module.exports.getSetCookies = getSetCookies; + module.exports.setCookie = setCookie; + var { parseMIMEType, serializeAMimeType } = require_data_url(); + module.exports.parseMIMEType = parseMIMEType; + module.exports.serializeAMimeType = serializeAMimeType; + var { CloseEvent, ErrorEvent, MessageEvent } = require_events(); + module.exports.WebSocket = require_websocket().WebSocket; + module.exports.CloseEvent = CloseEvent; + module.exports.ErrorEvent = ErrorEvent; + module.exports.MessageEvent = MessageEvent; + module.exports.request = makeDispatcher(api.request); + module.exports.stream = makeDispatcher(api.stream); + module.exports.pipeline = makeDispatcher(api.pipeline); + module.exports.connect = makeDispatcher(api.connect); + module.exports.upgrade = makeDispatcher(api.upgrade); + module.exports.MockClient = MockClient; + module.exports.MockPool = MockPool; + module.exports.MockAgent = MockAgent; + module.exports.mockErrors = mockErrors; + var { EventSource } = require_eventsource(); + module.exports.EventSource = EventSource; + } +}); + +// +var require_array = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.splitWhen = exports.flatten = void 0; + function flatten(items) { + return items.reduce((collection, item) => [].concat(collection, item), []); + } + exports.flatten = flatten; + function splitWhen(items, predicate) { + const result = [[]]; + let groupIndex = 0; + for (const item of items) { + if (predicate(item)) { + groupIndex++; + result[groupIndex] = []; + } else { + result[groupIndex].push(item); + } + } + return result; + } + exports.splitWhen = splitWhen; + } +}); + +// +var require_errno = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.isEnoentCodeError = void 0; + function isEnoentCodeError(error2) { + return error2.code === "ENOENT"; + } + exports.isEnoentCodeError = isEnoentCodeError; + } +}); + +// +var require_fs = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.createDirentFromStats = void 0; + var DirentFromStats = class { + constructor(name, stats) { + this.name = name; + this.isBlockDevice = stats.isBlockDevice.bind(stats); + this.isCharacterDevice = stats.isCharacterDevice.bind(stats); + this.isDirectory = stats.isDirectory.bind(stats); + this.isFIFO = stats.isFIFO.bind(stats); + this.isFile = stats.isFile.bind(stats); + this.isSocket = stats.isSocket.bind(stats); + this.isSymbolicLink = stats.isSymbolicLink.bind(stats); + } + }; + function createDirentFromStats(name, stats) { + return new DirentFromStats(name, stats); + } + exports.createDirentFromStats = createDirentFromStats; + } +}); + +// +var require_path = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0; + var os4 = __require("os"); + var path = __require("path"); + var IS_WINDOWS_PLATFORM = os4.platform() === "win32"; + var LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; + var POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g; + var WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()[\]{}]|^!|[!+@](?=\())/g; + var DOS_DEVICE_PATH_RE = /^\\\\([.?])/; + var WINDOWS_BACKSLASHES_RE = /\\(?![!()+@[\]{}])/g; + function unixify(filepath) { + return filepath.replace(/\\/g, "/"); + } + exports.unixify = unixify; + function makeAbsolute(cwd, filepath) { + return path.resolve(cwd, filepath); + } + exports.makeAbsolute = makeAbsolute; + function removeLeadingDotSegment(entry) { + if (entry.charAt(0) === ".") { + const secondCharactery = entry.charAt(1); + if (secondCharactery === "/" || secondCharactery === "\\") { + return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT); + } + } + return entry; + } + exports.removeLeadingDotSegment = removeLeadingDotSegment; + exports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath; + function escapeWindowsPath(pattern) { + return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, "\\$2"); + } + exports.escapeWindowsPath = escapeWindowsPath; + function escapePosixPath(pattern) { + return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, "\\$2"); + } + exports.escapePosixPath = escapePosixPath; + exports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern; + function convertWindowsPathToPattern(filepath) { + return escapeWindowsPath(filepath).replace(DOS_DEVICE_PATH_RE, "//$1").replace(WINDOWS_BACKSLASHES_RE, "/"); + } + exports.convertWindowsPathToPattern = convertWindowsPathToPattern; + function convertPosixPathToPattern(filepath) { + return escapePosixPath(filepath); + } + exports.convertPosixPathToPattern = convertPosixPathToPattern; + } +}); + +// +var require_is_extglob = __commonJS({ + ""(exports, module) { + module.exports = function isExtglob(str) { + if (typeof str !== "string" || str === "") { + return false; + } + var match; + while (match = /(\\).|([@?!+*]\(.*\))/g.exec(str)) { + if (match[2]) + return true; + str = str.slice(match.index + match[0].length); + } + return false; + }; + } +}); + +// +var require_is_glob = __commonJS({ + ""(exports, module) { + var isExtglob = require_is_extglob(); + var chars = { "{": "}", "(": ")", "[": "]" }; + var strictCheck = function(str) { + if (str[0] === "!") { + return true; + } + var index = 0; + var pipeIndex = -2; + var closeSquareIndex = -2; + var closeCurlyIndex = -2; + var closeParenIndex = -2; + var backSlashIndex = -2; + while (index < str.length) { + if (str[index] === "*") { + return true; + } + if (str[index + 1] === "?" && /[\].+)]/.test(str[index])) { + return true; + } + if (closeSquareIndex !== -1 && str[index] === "[" && str[index + 1] !== "]") { + if (closeSquareIndex < index) { + closeSquareIndex = str.indexOf("]", index); + } + if (closeSquareIndex > index) { + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + } + } + if (closeCurlyIndex !== -1 && str[index] === "{" && str[index + 1] !== "}") { + closeCurlyIndex = str.indexOf("}", index); + if (closeCurlyIndex > index) { + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) { + return true; + } + } + } + if (closeParenIndex !== -1 && str[index] === "(" && str[index + 1] === "?" && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ")") { + closeParenIndex = str.indexOf(")", index); + if (closeParenIndex > index) { + backSlashIndex = str.indexOf("\\", index); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + if (pipeIndex !== -1 && str[index] === "(" && str[index + 1] !== "|") { + if (pipeIndex < index) { + pipeIndex = str.indexOf("|", index); + } + if (pipeIndex !== -1 && str[pipeIndex + 1] !== ")") { + closeParenIndex = str.indexOf(")", pipeIndex); + if (closeParenIndex > pipeIndex) { + backSlashIndex = str.indexOf("\\", pipeIndex); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + } + if (str[index] === "\\") { + var open2 = str[index + 1]; + index += 2; + var close = chars[open2]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + if (str[index] === "!") { + return true; + } + } else { + index++; + } + } + return false; + }; + var relaxedCheck = function(str) { + if (str[0] === "!") { + return true; + } + var index = 0; + while (index < str.length) { + if (/[*?{}()[\]]/.test(str[index])) { + return true; + } + if (str[index] === "\\") { + var open2 = str[index + 1]; + index += 2; + var close = chars[open2]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + if (str[index] === "!") { + return true; + } + } else { + index++; + } + } + return false; + }; + module.exports = function isGlob(str, options) { + if (typeof str !== "string" || str === "") { + return false; + } + if (isExtglob(str)) { + return true; + } + var check = strictCheck; + if (options && options.strict === false) { + check = relaxedCheck; + } + return check(str); + }; + } +}); + +// +var require_glob_parent = __commonJS({ + ""(exports, module) { + "use strict"; + var isGlob = require_is_glob(); + var pathPosixDirname = __require("path").posix.dirname; + var isWin32 = __require("os").platform() === "win32"; + var slash = "/"; + var backslash = /\\/g; + var enclosure = /[\{\[].*[\}\]]$/; + var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/; + var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g; + module.exports = function globParent(str, opts) { + var options = Object.assign({ flipBackslashes: true }, opts); + if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) { + str = str.replace(backslash, slash); + } + if (enclosure.test(str)) { + str += slash; + } + str += "a"; + do { + str = pathPosixDirname(str); + } while (isGlob(str) || globby.test(str)); + return str.replace(escaped, "$1"); + }; + } +}); + +// +var require_utils2 = __commonJS({ + ""(exports) { + "use strict"; + exports.isInteger = (num) => { + if (typeof num === "number") { + return Number.isInteger(num); + } + if (typeof num === "string" && num.trim() !== "") { + return Number.isInteger(Number(num)); + } + return false; + }; + exports.find = (node, type) => node.nodes.find((node2) => node2.type === type); + exports.exceedsLimit = (min, max, step = 1, limit) => { + if (limit === false) + return false; + if (!exports.isInteger(min) || !exports.isInteger(max)) + return false; + return (Number(max) - Number(min)) / Number(step) >= limit; + }; + exports.escapeNode = (block, n = 0, type) => { + const node = block.nodes[n]; + if (!node) + return; + if (type && node.type === type || node.type === "open" || node.type === "close") { + if (node.escaped !== true) { + node.value = "\\" + node.value; + node.escaped = true; + } + } + }; + exports.encloseBrace = (node) => { + if (node.type !== "brace") + return false; + if (node.commas >> 0 + node.ranges >> 0 === 0) { + node.invalid = true; + return true; + } + return false; + }; + exports.isInvalidBrace = (block) => { + if (block.type !== "brace") + return false; + if (block.invalid === true || block.dollar) + return true; + if (block.commas >> 0 + block.ranges >> 0 === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; + }; + exports.isOpenOrClose = (node) => { + if (node.type === "open" || node.type === "close") { + return true; + } + return node.open === true || node.close === true; + }; + exports.reduce = (nodes) => nodes.reduce((acc, node) => { + if (node.type === "text") + acc.push(node.value); + if (node.type === "range") + node.type = "text"; + return acc; + }, []); + exports.flatten = (...args) => { + const result = []; + const flat = (arr) => { + for (let i = 0; i < arr.length; i++) { + const ele = arr[i]; + if (Array.isArray(ele)) { + flat(ele); + continue; + } + if (ele !== void 0) { + result.push(ele); + } + } + return result; + }; + flat(args); + return result; + }; + } +}); + +// +var require_stringify = __commonJS({ + ""(exports, module) { + "use strict"; + var utils = require_utils2(); + module.exports = (ast, options = {}) => { + const stringify = (node, parent = {}) => { + const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ""; + if (node.value) { + if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) { + return "\\" + node.value; + } + return node.value; + } + if (node.value) { + return node.value; + } + if (node.nodes) { + for (const child of node.nodes) { + output += stringify(child); + } + } + return output; + }; + return stringify(ast); + }; + } +}); + +// +var require_is_number = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = function(num) { + if (typeof num === "number") { + return num - num === 0; + } + if (typeof num === "string" && num.trim() !== "") { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; + }; + } +}); + +// +var require_to_regex_range = __commonJS({ + ""(exports, module) { + "use strict"; + var isNumber = require_is_number(); + var toRegexRange = (min, max, options) => { + if (isNumber(min) === false) { + throw new TypeError("toRegexRange: expected the first argument to be a number"); + } + if (max === void 0 || min === max) { + return String(min); + } + if (isNumber(max) === false) { + throw new TypeError("toRegexRange: expected the second argument to be a number."); + } + let opts = { relaxZeros: true, ...options }; + if (typeof opts.strictZeros === "boolean") { + opts.relaxZeros = opts.strictZeros === false; + } + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ":" + max + "=" + relax + shorthand + capture + wrap; + if (toRegexRange.cache.hasOwnProperty(cacheKey)) { + return toRegexRange.cache[cacheKey].result; + } + let a = Math.min(min, max); + let b = Math.max(min, max); + if (Math.abs(a - b) === 1) { + let result = min + "|" + max; + if (opts.capture) { + return `(${result})`; + } + if (opts.wrap === false) { + return result; + } + return `(?:${result})`; + } + let isPadded = hasPadding(min) || hasPadding(max); + let state = { min, max, a, b }; + let positives = []; + let negatives = []; + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + if (b >= 0) { + positives = splitToPatterns(a, b, state, opts); + } + state.negatives = negatives; + state.positives = positives; + state.result = collatePatterns(negatives, positives, opts); + if (opts.capture === true) { + state.result = `(${state.result})`; + } else if (opts.wrap !== false && positives.length + negatives.length > 1) { + state.result = `(?:${state.result})`; + } + toRegexRange.cache[cacheKey] = state; + return state.result; + }; + function collatePatterns(neg, pos, options) { + let onlyNegative = filterPatterns(neg, pos, "-", false, options) || []; + let onlyPositive = filterPatterns(pos, neg, "", false, options) || []; + let intersected = filterPatterns(neg, pos, "-?", true, options) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join("|"); + } + function splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + let stop = countNines(min, nines); + let stops = /* @__PURE__ */ new Set([max]); + while (min <= stop && stop <= max) { + stops.add(stop); + nines += 1; + stop = countNines(min, nines); + } + stop = countZeros(max + 1, zeros) - 1; + while (min < stop && stop <= max) { + stops.add(stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + stops = [...stops]; + stops.sort(compare); + return stops; + } + function rangeToPattern(start, stop, options) { + if (start === stop) { + return { pattern: start, count: [], digits: 0 }; + } + let zipped = zip(start, stop); + let digits = zipped.length; + let pattern = ""; + let count = 0; + for (let i = 0; i < digits; i++) { + let [startDigit, stopDigit] = zipped[i]; + if (startDigit === stopDigit) { + pattern += startDigit; + } else if (startDigit !== "0" || stopDigit !== "9") { + pattern += toCharacterClass(startDigit, stopDigit, options); + } else { + count++; + } + } + if (count) { + pattern += options.shorthand === true ? "\\d" : "[0-9]"; + } + return { pattern, count: [count], digits }; + } + function splitToPatterns(min, max, tok, options) { + let ranges = splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + for (let i = 0; i < ranges.length; i++) { + let max2 = ranges[i]; + let obj = rangeToPattern(String(start), String(max2), options); + let zeros = ""; + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) { + prev.count.pop(); + } + prev.count.push(obj.count[0]); + prev.string = prev.pattern + toQuantifier(prev.count); + start = max2 + 1; + continue; + } + if (tok.isPadded) { + zeros = padZeros(max2, tok, options); + } + obj.string = zeros + obj.pattern + toQuantifier(obj.count); + tokens.push(obj); + start = max2 + 1; + prev = obj; + } + return tokens; + } + function filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + for (let ele of arr) { + let { string } = ele; + if (!intersection && !contains(comparison, "string", string)) { + result.push(prefix + string); + } + if (intersection && contains(comparison, "string", string)) { + result.push(prefix + string); + } + } + return result; + } + function zip(a, b) { + let arr = []; + for (let i = 0; i < a.length; i++) + arr.push([a[i], b[i]]); + return arr; + } + function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; + } + function contains(arr, key, val) { + return arr.some((ele) => ele[key] === val); + } + function countNines(min, len) { + return Number(String(min).slice(0, -len) + "9".repeat(len)); + } + function countZeros(integer, zeros) { + return integer - integer % Math.pow(10, zeros); + } + function toQuantifier(digits) { + let [start = 0, stop = ""] = digits; + if (stop || start > 1) { + return `{${start + (stop ? "," + stop : "")}}`; + } + return ""; + } + function toCharacterClass(a, b, options) { + return `[${a}${b - a === 1 ? "" : "-"}${b}]`; + } + function hasPadding(str) { + return /^-?(0+)\d/.test(str); + } + function padZeros(value, tok, options) { + if (!tok.isPadded) { + return value; + } + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + switch (diff) { + case 0: + return ""; + case 1: + return relax ? "0?" : "0"; + case 2: + return relax ? "0{0,2}" : "00"; + default: { + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } + } + } + toRegexRange.cache = {}; + toRegexRange.clearCache = () => toRegexRange.cache = {}; + module.exports = toRegexRange; + } +}); + +// +var require_fill_range = __commonJS({ + ""(exports, module) { + "use strict"; + var util = __require("util"); + var toRegexRange = require_to_regex_range(); + var isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val); + var transform = (toNumber) => { + return (value) => toNumber === true ? Number(value) : String(value); + }; + var isValidValue = (value) => { + return typeof value === "number" || typeof value === "string" && value !== ""; + }; + var isNumber = (num) => Number.isInteger(+num); + var zeros = (input) => { + let value = `${input}`; + let index = -1; + if (value[0] === "-") + value = value.slice(1); + if (value === "0") + return false; + while (value[++index] === "0") + ; + return index > 0; + }; + var stringify = (start, end, options) => { + if (typeof start === "string" || typeof end === "string") { + return true; + } + return options.stringify === true; + }; + var pad = (input, maxLength, toNumber) => { + if (maxLength > 0) { + let dash = input[0] === "-" ? "-" : ""; + if (dash) + input = input.slice(1); + input = dash + input.padStart(dash ? maxLength - 1 : maxLength, "0"); + } + if (toNumber === false) { + return String(input); + } + return input; + }; + var toMaxLen = (input, maxLength) => { + let negative = input[0] === "-" ? "-" : ""; + if (negative) { + input = input.slice(1); + maxLength--; + } + while (input.length < maxLength) + input = "0" + input; + return negative ? "-" + input : input; + }; + var toSequence = (parts, options, maxLen) => { + parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + let prefix = options.capture ? "" : "?:"; + let positives = ""; + let negatives = ""; + let result; + if (parts.positives.length) { + positives = parts.positives.map((v) => toMaxLen(String(v), maxLen)).join("|"); + } + if (parts.negatives.length) { + negatives = `-(${prefix}${parts.negatives.map((v) => toMaxLen(String(v), maxLen)).join("|")})`; + } + if (positives && negatives) { + result = `${positives}|${negatives}`; + } else { + result = positives || negatives; + } + if (options.wrap) { + return `(${prefix}${result})`; + } + return result; + }; + var toRange = (a, b, isNumbers, options) => { + if (isNumbers) { + return toRegexRange(a, b, { wrap: false, ...options }); + } + let start = String.fromCharCode(a); + if (a === b) + return start; + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; + }; + var toRegex = (start, end, options) => { + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? "" : "?:"; + return wrap ? `(${prefix}${start.join("|")})` : start.join("|"); + } + return toRegexRange(start, end, options); + }; + var rangeError = (...args) => { + return new RangeError("Invalid range arguments: " + util.inspect(...args)); + }; + var invalidRange = (start, end, options) => { + if (options.strictRanges === true) + throw rangeError([start, end]); + return []; + }; + var invalidStep = (step, options) => { + if (options.strictRanges === true) { + throw new TypeError(`Expected step "${step}" to be a number`); + } + return []; + }; + var fillNumbers = (start, end, step = 1, options = {}) => { + let a = Number(start); + let b = Number(end); + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) + throw rangeError([start, end]); + return []; + } + if (a === 0) + a = 0; + if (b === 0) + b = 0; + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + let padded = zeros(startString) || zeros(endString) || zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && stringify(start, end, options) === false; + let format = options.transform || transform(toNumber); + if (options.toRegex && step === 1) { + return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options); + } + let parts = { negatives: [], positives: [] }; + let push = (num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num)); + let range = []; + let index = 0; + while (descending ? a >= b : a <= b) { + if (options.toRegex === true && step > 1) { + push(a); + } else { + range.push(pad(format(a, index), maxLen, toNumber)); + } + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) { + return step > 1 ? toSequence(parts, options, maxLen) : toRegex(range, null, { wrap: false, ...options }); + } + return range; + }; + var fillLetters = (start, end, step = 1, options = {}) => { + if (!isNumber(start) && start.length > 1 || !isNumber(end) && end.length > 1) { + return invalidRange(start, end, options); + } + let format = options.transform || ((val) => String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + if (options.toRegex && step === 1) { + return toRange(min, max, false, options); + } + let range = []; + let index = 0; + while (descending ? a >= b : a <= b) { + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) { + return toRegex(range, null, { wrap: false, options }); + } + return range; + }; + var fill = (start, end, step, options = {}) => { + if (end == null && isValidValue(start)) { + return [start]; + } + if (!isValidValue(start) || !isValidValue(end)) { + return invalidRange(start, end, options); + } + if (typeof step === "function") { + return fill(start, end, 1, { transform: step }); + } + if (isObject(step)) { + return fill(start, end, 0, step); + } + let opts = { ...options }; + if (opts.capture === true) + opts.wrap = true; + step = step || opts.step || 1; + if (!isNumber(step)) { + if (step != null && !isObject(step)) + return invalidStep(step, opts); + return fill(start, end, 1, step); + } + if (isNumber(start) && isNumber(end)) { + return fillNumbers(start, end, step, opts); + } + return fillLetters(start, end, Math.max(Math.abs(step), 1), opts); + }; + module.exports = fill; + } +}); + +// +var require_compile = __commonJS({ + ""(exports, module) { + "use strict"; + var fill = require_fill_range(); + var utils = require_utils2(); + var compile = (ast, options = {}) => { + const walk = (node, parent = {}) => { + const invalidBlock = utils.isInvalidBrace(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + const invalid = invalidBlock === true || invalidNode === true; + const prefix = options.escapeInvalid === true ? "\\" : ""; + let output = ""; + if (node.isOpen === true) { + return prefix + node.value; + } + if (node.isClose === true) { + console.log("node.isClose", prefix, node.value); + return prefix + node.value; + } + if (node.type === "open") { + return invalid ? prefix + node.value : "("; + } + if (node.type === "close") { + return invalid ? prefix + node.value : ")"; + } + if (node.type === "comma") { + return node.prev.type === "comma" ? "" : invalid ? node.value : "|"; + } + if (node.value) { + return node.value; + } + if (node.nodes && node.ranges > 0) { + const args = utils.reduce(node.nodes); + const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true }); + if (range.length !== 0) { + return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + } + if (node.nodes) { + for (const child of node.nodes) { + output += walk(child, node); + } + } + return output; + }; + return walk(ast); + }; + module.exports = compile; + } +}); + +// +var require_expand = __commonJS({ + ""(exports, module) { + "use strict"; + var fill = require_fill_range(); + var stringify = require_stringify(); + var utils = require_utils2(); + var append = (queue = "", stash = "", enclose = false) => { + const result = []; + queue = [].concat(queue); + stash = [].concat(stash); + if (!stash.length) + return queue; + if (!queue.length) { + return enclose ? utils.flatten(stash).map((ele) => `{${ele}}`) : stash; + } + for (const item of queue) { + if (Array.isArray(item)) { + for (const value of item) { + result.push(append(value, stash, enclose)); + } + } else { + for (let ele of stash) { + if (enclose === true && typeof ele === "string") + ele = `{${ele}}`; + result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele); + } + } + } + return utils.flatten(result); + }; + var expand = (ast, options = {}) => { + const rangeLimit = options.rangeLimit === void 0 ? 1e3 : options.rangeLimit; + const walk = (node, parent = {}) => { + node.queue = []; + let p = parent; + let q = parent.queue; + while (p.type !== "brace" && p.type !== "root" && p.parent) { + p = p.parent; + q = p.queue; + } + if (node.invalid || node.dollar) { + q.push(append(q.pop(), stringify(node, options))); + return; + } + if (node.type === "brace" && node.invalid !== true && node.nodes.length === 2) { + q.push(append(q.pop(), ["{}"])); + return; + } + if (node.nodes && node.ranges > 0) { + const args = utils.reduce(node.nodes); + if (utils.exceedsLimit(...args, options.step, rangeLimit)) { + throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit."); + } + let range = fill(...args, options); + if (range.length === 0) { + range = stringify(node, options); + } + q.push(append(q.pop(), range)); + node.nodes = []; + return; + } + const enclose = utils.encloseBrace(node); + let queue = node.queue; + let block = node; + while (block.type !== "brace" && block.type !== "root" && block.parent) { + block = block.parent; + queue = block.queue; + } + for (let i = 0; i < node.nodes.length; i++) { + const child = node.nodes[i]; + if (child.type === "comma" && node.type === "brace") { + if (i === 1) + queue.push(""); + queue.push(""); + continue; + } + if (child.type === "close") { + q.push(append(q.pop(), queue, enclose)); + continue; + } + if (child.value && child.type !== "open") { + queue.push(append(queue.pop(), child.value)); + continue; + } + if (child.nodes) { + walk(child, node); + } + } + return queue; + }; + return utils.flatten(walk(ast)); + }; + module.exports = expand; + } +}); + +// +var require_constants6 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + MAX_LENGTH: 1e4, + // Digits + CHAR_0: "0", + /* 0 */ + CHAR_9: "9", + /* 9 */ + // Alphabet chars. + CHAR_UPPERCASE_A: "A", + /* A */ + CHAR_LOWERCASE_A: "a", + /* a */ + CHAR_UPPERCASE_Z: "Z", + /* Z */ + CHAR_LOWERCASE_Z: "z", + /* z */ + CHAR_LEFT_PARENTHESES: "(", + /* ( */ + CHAR_RIGHT_PARENTHESES: ")", + /* ) */ + CHAR_ASTERISK: "*", + /* * */ + // Non-alphabetic chars. + CHAR_AMPERSAND: "&", + /* & */ + CHAR_AT: "@", + /* @ */ + CHAR_BACKSLASH: "\\", + /* \ */ + CHAR_BACKTICK: "`", + /* ` */ + CHAR_CARRIAGE_RETURN: "\r", + /* \r */ + CHAR_CIRCUMFLEX_ACCENT: "^", + /* ^ */ + CHAR_COLON: ":", + /* : */ + CHAR_COMMA: ",", + /* , */ + CHAR_DOLLAR: "$", + /* . */ + CHAR_DOT: ".", + /* . */ + CHAR_DOUBLE_QUOTE: '"', + /* " */ + CHAR_EQUAL: "=", + /* = */ + CHAR_EXCLAMATION_MARK: "!", + /* ! */ + CHAR_FORM_FEED: "\f", + /* \f */ + CHAR_FORWARD_SLASH: "/", + /* / */ + CHAR_HASH: "#", + /* # */ + CHAR_HYPHEN_MINUS: "-", + /* - */ + CHAR_LEFT_ANGLE_BRACKET: "<", + /* < */ + CHAR_LEFT_CURLY_BRACE: "{", + /* { */ + CHAR_LEFT_SQUARE_BRACKET: "[", + /* [ */ + CHAR_LINE_FEED: "\n", + /* \n */ + CHAR_NO_BREAK_SPACE: "\xA0", + /* \u00A0 */ + CHAR_PERCENT: "%", + /* % */ + CHAR_PLUS: "+", + /* + */ + CHAR_QUESTION_MARK: "?", + /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: ">", + /* > */ + CHAR_RIGHT_CURLY_BRACE: "}", + /* } */ + CHAR_RIGHT_SQUARE_BRACKET: "]", + /* ] */ + CHAR_SEMICOLON: ";", + /* ; */ + CHAR_SINGLE_QUOTE: "'", + /* ' */ + CHAR_SPACE: " ", + /* */ + CHAR_TAB: " ", + /* \t */ + CHAR_UNDERSCORE: "_", + /* _ */ + CHAR_VERTICAL_LINE: "|", + /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: "\uFEFF" + /* \uFEFF */ + }; + } +}); + +// +var require_parse2 = __commonJS({ + ""(exports, module) { + "use strict"; + var stringify = require_stringify(); + var { + MAX_LENGTH, + CHAR_BACKSLASH, + /* \ */ + CHAR_BACKTICK, + /* ` */ + CHAR_COMMA, + /* , */ + CHAR_DOT, + /* . */ + CHAR_LEFT_PARENTHESES, + /* ( */ + CHAR_RIGHT_PARENTHESES, + /* ) */ + CHAR_LEFT_CURLY_BRACE, + /* { */ + CHAR_RIGHT_CURLY_BRACE, + /* } */ + CHAR_LEFT_SQUARE_BRACKET, + /* [ */ + CHAR_RIGHT_SQUARE_BRACKET, + /* ] */ + CHAR_DOUBLE_QUOTE, + /* " */ + CHAR_SINGLE_QUOTE, + /* ' */ + CHAR_NO_BREAK_SPACE, + CHAR_ZERO_WIDTH_NOBREAK_SPACE + } = require_constants6(); + var parse = (input, options = {}) => { + if (typeof input !== "string") { + throw new TypeError("Expected a string"); + } + const opts = options || {}; + const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + if (input.length > max) { + throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + } + const ast = { type: "root", input, nodes: [] }; + const stack = [ast]; + let block = ast; + let prev = ast; + let brackets = 0; + const length = input.length; + let index = 0; + let depth = 0; + let value; + const advance = () => input[index++]; + const push = (node) => { + if (node.type === "text" && prev.type === "dot") { + prev.type = "text"; + } + if (prev && prev.type === "text" && node.type === "text") { + prev.value += node.value; + return; + } + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + push({ type: "bos" }); + while (index < length) { + block = stack[stack.length - 1]; + value = advance(); + if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) { + continue; + } + if (value === CHAR_BACKSLASH) { + push({ type: "text", value: (options.keepEscaping ? value : "") + advance() }); + continue; + } + if (value === CHAR_RIGHT_SQUARE_BRACKET) { + push({ type: "text", value: "\\" + value }); + continue; + } + if (value === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + let next; + while (index < length && (next = advance())) { + value += next; + if (next === CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + if (next === CHAR_BACKSLASH) { + value += advance(); + continue; + } + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + if (brackets === 0) { + break; + } + } + } + push({ type: "text", value }); + continue; + } + if (value === CHAR_LEFT_PARENTHESES) { + block = push({ type: "paren", nodes: [] }); + stack.push(block); + push({ type: "text", value }); + continue; + } + if (value === CHAR_RIGHT_PARENTHESES) { + if (block.type !== "paren") { + push({ type: "text", value }); + continue; + } + block = stack.pop(); + push({ type: "text", value }); + block = stack[stack.length - 1]; + continue; + } + if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) { + const open2 = value; + let next; + if (options.keepQuotes !== true) { + value = ""; + } + while (index < length && (next = advance())) { + if (next === CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + if (next === open2) { + if (options.keepQuotes === true) + value += next; + break; + } + value += next; + } + push({ type: "text", value }); + continue; + } + if (value === CHAR_LEFT_CURLY_BRACE) { + depth++; + const dollar = prev.value && prev.value.slice(-1) === "$" || block.dollar === true; + const brace = { + type: "brace", + open: true, + close: false, + dollar, + depth, + commas: 0, + ranges: 0, + nodes: [] + }; + block = push(brace); + stack.push(block); + push({ type: "open", value }); + continue; + } + if (value === CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== "brace") { + push({ type: "text", value }); + continue; + } + const type = "close"; + block = stack.pop(); + block.close = true; + push({ type, value }); + depth--; + block = stack[stack.length - 1]; + continue; + } + if (value === CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + const open2 = block.nodes.shift(); + block.nodes = [open2, { type: "text", value: stringify(block) }]; + } + push({ type: "comma", value }); + block.commas++; + continue; + } + if (value === CHAR_DOT && depth > 0 && block.commas === 0) { + const siblings = block.nodes; + if (depth === 0 || siblings.length === 0) { + push({ type: "text", value }); + continue; + } + if (prev.type === "dot") { + block.range = []; + prev.value += value; + prev.type = "range"; + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = "text"; + continue; + } + block.ranges++; + block.args = []; + continue; + } + if (prev.type === "range") { + siblings.pop(); + const before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + push({ type: "dot", value }); + continue; + } + push({ type: "text", value }); + } + do { + block = stack.pop(); + if (block.type !== "root") { + block.nodes.forEach((node) => { + if (!node.nodes) { + if (node.type === "open") + node.isOpen = true; + if (node.type === "close") + node.isClose = true; + if (!node.nodes) + node.type = "text"; + node.invalid = true; + } + }); + const parent = stack[stack.length - 1]; + const index2 = parent.nodes.indexOf(block); + parent.nodes.splice(index2, 1, ...block.nodes); + } + } while (stack.length > 0); + push({ type: "eos" }); + return ast; + }; + module.exports = parse; + } +}); + +// +var require_braces = __commonJS({ + ""(exports, module) { + "use strict"; + var stringify = require_stringify(); + var compile = require_compile(); + var expand = require_expand(); + var parse = require_parse2(); + var braces = (input, options = {}) => { + let output = []; + if (Array.isArray(input)) { + for (const pattern of input) { + const result = braces.create(pattern, options); + if (Array.isArray(result)) { + output.push(...result); + } else { + output.push(result); + } + } + } else { + output = [].concat(braces.create(input, options)); + } + if (options && options.expand === true && options.nodupes === true) { + output = [...new Set(output)]; + } + return output; + }; + braces.parse = (input, options = {}) => parse(input, options); + braces.stringify = (input, options = {}) => { + if (typeof input === "string") { + return stringify(braces.parse(input, options), options); + } + return stringify(input, options); + }; + braces.compile = (input, options = {}) => { + if (typeof input === "string") { + input = braces.parse(input, options); + } + return compile(input, options); + }; + braces.expand = (input, options = {}) => { + if (typeof input === "string") { + input = braces.parse(input, options); + } + let result = expand(input, options); + if (options.noempty === true) { + result = result.filter(Boolean); + } + if (options.nodupes === true) { + result = [...new Set(result)]; + } + return result; + }; + braces.create = (input, options = {}) => { + if (input === "" || input.length < 3) { + return [input]; + } + return options.expand !== true ? braces.compile(input, options) : braces.expand(input, options); + }; + module.exports = braces; + } +}); + +// +var require_constants7 = __commonJS({ + ""(exports, module) { + "use strict"; + var path = __require("path"); + var WIN_SLASH = "\\\\/"; + var WIN_NO_SLASH = `[^${WIN_SLASH}]`; + var DEFAULT_MAX_EXTGLOB_RECURSION = 0; + var DOT_LITERAL = "\\."; + var PLUS_LITERAL = "\\+"; + var QMARK_LITERAL = "\\?"; + var SLASH_LITERAL = "\\/"; + var ONE_CHAR = "(?=.)"; + var QMARK = "[^/]"; + var END_ANCHOR = `(?:${SLASH_LITERAL}|$)`; + var START_ANCHOR = `(?:^|${SLASH_LITERAL})`; + var DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`; + var NO_DOT = `(?!${DOT_LITERAL})`; + var NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`; + var NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`; + var NO_DOTS_SLASH = `(?!${DOTS_SLASH})`; + var QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`; + var STAR = `${QMARK}*?`; + var POSIX_CHARS = { + DOT_LITERAL, + PLUS_LITERAL, + QMARK_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + QMARK, + END_ANCHOR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK_NO_DOT, + STAR, + START_ANCHOR + }; + var WINDOWS_CHARS = { + ...POSIX_CHARS, + SLASH_LITERAL: `[${WIN_SLASH}]`, + QMARK: WIN_NO_SLASH, + STAR: `${WIN_NO_SLASH}*?`, + DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`, + NO_DOT: `(?!${DOT_LITERAL})`, + NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`, + NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`, + QMARK_NO_DOT: `[^.${WIN_SLASH}]`, + START_ANCHOR: `(?:^|[${WIN_SLASH}])`, + END_ANCHOR: `(?:[${WIN_SLASH}]|$)` + }; + var POSIX_REGEX_SOURCE = { + __proto__: null, + alnum: "a-zA-Z0-9", + alpha: "a-zA-Z", + ascii: "\\x00-\\x7F", + blank: " \\t", + cntrl: "\\x00-\\x1F\\x7F", + digit: "0-9", + graph: "\\x21-\\x7E", + lower: "a-z", + print: "\\x20-\\x7E ", + punct: "\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~", + space: " \\t\\r\\n\\v\\f", + upper: "A-Z", + word: "A-Za-z0-9_", + xdigit: "A-Fa-f0-9" + }; + module.exports = { + DEFAULT_MAX_EXTGLOB_RECURSION, + MAX_LENGTH: 1024 * 64, + POSIX_REGEX_SOURCE, + // regular expressions + REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g, + REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/, + REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/, + REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g, + REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g, + REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g, + // Replace globs with equivalent patterns to reduce parsing time. + REPLACEMENTS: { + __proto__: null, + "***": "*", + "**/**": "**", + "**/**/**": "**" + }, + // Digits + CHAR_0: 48, + /* 0 */ + CHAR_9: 57, + /* 9 */ + // Alphabet chars. + CHAR_UPPERCASE_A: 65, + /* A */ + CHAR_LOWERCASE_A: 97, + /* a */ + CHAR_UPPERCASE_Z: 90, + /* Z */ + CHAR_LOWERCASE_Z: 122, + /* z */ + CHAR_LEFT_PARENTHESES: 40, + /* ( */ + CHAR_RIGHT_PARENTHESES: 41, + /* ) */ + CHAR_ASTERISK: 42, + /* * */ + // Non-alphabetic chars. + CHAR_AMPERSAND: 38, + /* & */ + CHAR_AT: 64, + /* @ */ + CHAR_BACKWARD_SLASH: 92, + /* \ */ + CHAR_CARRIAGE_RETURN: 13, + /* \r */ + CHAR_CIRCUMFLEX_ACCENT: 94, + /* ^ */ + CHAR_COLON: 58, + /* : */ + CHAR_COMMA: 44, + /* , */ + CHAR_DOT: 46, + /* . */ + CHAR_DOUBLE_QUOTE: 34, + /* " */ + CHAR_EQUAL: 61, + /* = */ + CHAR_EXCLAMATION_MARK: 33, + /* ! */ + CHAR_FORM_FEED: 12, + /* \f */ + CHAR_FORWARD_SLASH: 47, + /* / */ + CHAR_GRAVE_ACCENT: 96, + /* ` */ + CHAR_HASH: 35, + /* # */ + CHAR_HYPHEN_MINUS: 45, + /* - */ + CHAR_LEFT_ANGLE_BRACKET: 60, + /* < */ + CHAR_LEFT_CURLY_BRACE: 123, + /* { */ + CHAR_LEFT_SQUARE_BRACKET: 91, + /* [ */ + CHAR_LINE_FEED: 10, + /* \n */ + CHAR_NO_BREAK_SPACE: 160, + /* \u00A0 */ + CHAR_PERCENT: 37, + /* % */ + CHAR_PLUS: 43, + /* + */ + CHAR_QUESTION_MARK: 63, + /* ? */ + CHAR_RIGHT_ANGLE_BRACKET: 62, + /* > */ + CHAR_RIGHT_CURLY_BRACE: 125, + /* } */ + CHAR_RIGHT_SQUARE_BRACKET: 93, + /* ] */ + CHAR_SEMICOLON: 59, + /* ; */ + CHAR_SINGLE_QUOTE: 39, + /* ' */ + CHAR_SPACE: 32, + /* */ + CHAR_TAB: 9, + /* \t */ + CHAR_UNDERSCORE: 95, + /* _ */ + CHAR_VERTICAL_LINE: 124, + /* | */ + CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, + /* \uFEFF */ + SEP: path.sep, + /** + * Create EXTGLOB_CHARS + */ + extglobChars(chars) { + return { + "!": { type: "negate", open: "(?:(?!(?:", close: `))${chars.STAR})` }, + "?": { type: "qmark", open: "(?:", close: ")?" }, + "+": { type: "plus", open: "(?:", close: ")+" }, + "*": { type: "star", open: "(?:", close: ")*" }, + "@": { type: "at", open: "(?:", close: ")" } + }; + }, + /** + * Create GLOB_CHARS + */ + globChars(win32) { + return win32 === true ? WINDOWS_CHARS : POSIX_CHARS; + } + }; + } +}); + +// +var require_utils3 = __commonJS({ + ""(exports) { + "use strict"; + var path = __require("path"); + var win32 = process.platform === "win32"; + var { + REGEX_BACKSLASH, + REGEX_REMOVE_BACKSLASH, + REGEX_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_GLOBAL + } = require_constants7(); + exports.isObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val); + exports.hasRegexChars = (str) => REGEX_SPECIAL_CHARS.test(str); + exports.isRegexChar = (str) => str.length === 1 && exports.hasRegexChars(str); + exports.escapeRegex = (str) => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, "\\$1"); + exports.toPosixSlashes = (str) => str.replace(REGEX_BACKSLASH, "/"); + exports.removeBackslashes = (str) => { + return str.replace(REGEX_REMOVE_BACKSLASH, (match) => { + return match === "\\" ? "" : match; + }); + }; + exports.supportsLookbehinds = () => { + const segs = process.version.slice(1).split(".").map(Number); + if (segs.length === 3 && segs[0] >= 9 || segs[0] === 8 && segs[1] >= 10) { + return true; + } + return false; + }; + exports.isWindows = (options) => { + if (options && typeof options.windows === "boolean") { + return options.windows; + } + return win32 === true || path.sep === "\\"; + }; + exports.escapeLast = (input, char, lastIdx) => { + const idx = input.lastIndexOf(char, lastIdx); + if (idx === -1) + return input; + if (input[idx - 1] === "\\") + return exports.escapeLast(input, char, idx - 1); + return `${input.slice(0, idx)}\\${input.slice(idx)}`; + }; + exports.removePrefix = (input, state = {}) => { + let output = input; + if (output.startsWith("./")) { + output = output.slice(2); + state.prefix = "./"; + } + return output; + }; + exports.wrapOutput = (input, state = {}, options = {}) => { + const prepend = options.contains ? "" : "^"; + const append = options.contains ? "" : "$"; + let output = `${prepend}(?:${input})${append}`; + if (state.negated === true) { + output = `(?:^(?!${output}).*$)`; + } + return output; + }; + } +}); + +// +var require_scan = __commonJS({ + ""(exports, module) { + "use strict"; + var utils = require_utils3(); + var { + CHAR_ASTERISK, + /* * */ + CHAR_AT, + /* @ */ + CHAR_BACKWARD_SLASH, + /* \ */ + CHAR_COMMA, + /* , */ + CHAR_DOT, + /* . */ + CHAR_EXCLAMATION_MARK, + /* ! */ + CHAR_FORWARD_SLASH, + /* / */ + CHAR_LEFT_CURLY_BRACE, + /* { */ + CHAR_LEFT_PARENTHESES, + /* ( */ + CHAR_LEFT_SQUARE_BRACKET, + /* [ */ + CHAR_PLUS, + /* + */ + CHAR_QUESTION_MARK, + /* ? */ + CHAR_RIGHT_CURLY_BRACE, + /* } */ + CHAR_RIGHT_PARENTHESES, + /* ) */ + CHAR_RIGHT_SQUARE_BRACKET + /* ] */ + } = require_constants7(); + var isPathSeparator = (code) => { + return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; + }; + var depth = (token) => { + if (token.isPrefix !== true) { + token.depth = token.isGlobstar ? Infinity : 1; + } + }; + var scan = (input, options) => { + const opts = options || {}; + const length = input.length - 1; + const scanToEnd = opts.parts === true || opts.scanToEnd === true; + const slashes = []; + const tokens = []; + const parts = []; + let str = input; + let index = -1; + let start = 0; + let lastIndex = 0; + let isBrace = false; + let isBracket = false; + let isGlob = false; + let isExtglob = false; + let isGlobstar = false; + let braceEscaped = false; + let backslashes = false; + let negated = false; + let negatedExtglob = false; + let finished = false; + let braces = 0; + let prev; + let code; + let token = { value: "", depth: 0, isGlob: false }; + const eos = () => index >= length; + const peek = () => str.charCodeAt(index + 1); + const advance = () => { + prev = code; + return str.charCodeAt(++index); + }; + while (index < length) { + code = advance(); + let next; + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + if (code === CHAR_LEFT_CURLY_BRACE) { + braceEscaped = true; + } + continue; + } + if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) { + braces++; + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + if (code === CHAR_LEFT_CURLY_BRACE) { + braces++; + continue; + } + if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (braceEscaped !== true && code === CHAR_COMMA) { + isBrace = token.isBrace = true; + isGlob = token.isGlob = true; + finished = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_RIGHT_CURLY_BRACE) { + braces--; + if (braces === 0) { + braceEscaped = false; + isBrace = token.isBrace = true; + finished = true; + break; + } + } + } + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_FORWARD_SLASH) { + slashes.push(index); + tokens.push(token); + token = { value: "", depth: 0, isGlob: false }; + if (finished === true) + continue; + if (prev === CHAR_DOT && index === start + 1) { + start += 2; + continue; + } + lastIndex = index + 1; + continue; + } + if (opts.noext !== true) { + const isExtglobChar = code === CHAR_PLUS || code === CHAR_AT || code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK || code === CHAR_EXCLAMATION_MARK; + if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + isExtglob = token.isExtglob = true; + finished = true; + if (code === CHAR_EXCLAMATION_MARK && index === start) { + negatedExtglob = true; + } + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + if (code === CHAR_RIGHT_PARENTHESES) { + isGlob = token.isGlob = true; + finished = true; + break; + } + } + continue; + } + break; + } + } + if (code === CHAR_ASTERISK) { + if (prev === CHAR_ASTERISK) + isGlobstar = token.isGlobstar = true; + isGlob = token.isGlob = true; + finished = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_QUESTION_MARK) { + isGlob = token.isGlob = true; + finished = true; + if (scanToEnd === true) { + continue; + } + break; + } + if (code === CHAR_LEFT_SQUARE_BRACKET) { + while (eos() !== true && (next = advance())) { + if (next === CHAR_BACKWARD_SLASH) { + backslashes = token.backslashes = true; + advance(); + continue; + } + if (next === CHAR_RIGHT_SQUARE_BRACKET) { + isBracket = token.isBracket = true; + isGlob = token.isGlob = true; + finished = true; + break; + } + } + if (scanToEnd === true) { + continue; + } + break; + } + if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) { + negated = token.negated = true; + start++; + continue; + } + if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) { + isGlob = token.isGlob = true; + if (scanToEnd === true) { + while (eos() !== true && (code = advance())) { + if (code === CHAR_LEFT_PARENTHESES) { + backslashes = token.backslashes = true; + code = advance(); + continue; + } + if (code === CHAR_RIGHT_PARENTHESES) { + finished = true; + break; + } + } + continue; + } + break; + } + if (isGlob === true) { + finished = true; + if (scanToEnd === true) { + continue; + } + break; + } + } + if (opts.noext === true) { + isExtglob = false; + isGlob = false; + } + let base = str; + let prefix = ""; + let glob2 = ""; + if (start > 0) { + prefix = str.slice(0, start); + str = str.slice(start); + lastIndex -= start; + } + if (base && isGlob === true && lastIndex > 0) { + base = str.slice(0, lastIndex); + glob2 = str.slice(lastIndex); + } else if (isGlob === true) { + base = ""; + glob2 = str; + } else { + base = str; + } + if (base && base !== "" && base !== "/" && base !== str) { + if (isPathSeparator(base.charCodeAt(base.length - 1))) { + base = base.slice(0, -1); + } + } + if (opts.unescape === true) { + if (glob2) + glob2 = utils.removeBackslashes(glob2); + if (base && backslashes === true) { + base = utils.removeBackslashes(base); + } + } + const state = { + prefix, + input, + start, + base, + glob: glob2, + isBrace, + isBracket, + isGlob, + isExtglob, + isGlobstar, + negated, + negatedExtglob + }; + if (opts.tokens === true) { + state.maxDepth = 0; + if (!isPathSeparator(code)) { + tokens.push(token); + } + state.tokens = tokens; + } + if (opts.parts === true || opts.tokens === true) { + let prevIndex; + for (let idx = 0; idx < slashes.length; idx++) { + const n = prevIndex ? prevIndex + 1 : start; + const i = slashes[idx]; + const value = input.slice(n, i); + if (opts.tokens) { + if (idx === 0 && start !== 0) { + tokens[idx].isPrefix = true; + tokens[idx].value = prefix; + } else { + tokens[idx].value = value; + } + depth(tokens[idx]); + state.maxDepth += tokens[idx].depth; + } + if (idx !== 0 || value !== "") { + parts.push(value); + } + prevIndex = i; + } + if (prevIndex && prevIndex + 1 < input.length) { + const value = input.slice(prevIndex + 1); + parts.push(value); + if (opts.tokens) { + tokens[tokens.length - 1].value = value; + depth(tokens[tokens.length - 1]); + state.maxDepth += tokens[tokens.length - 1].depth; + } + } + state.slashes = slashes; + state.parts = parts; + } + return state; + }; + module.exports = scan; + } +}); + +// +var require_parse3 = __commonJS({ + ""(exports, module) { + "use strict"; + var constants3 = require_constants7(); + var utils = require_utils3(); + var { + MAX_LENGTH, + POSIX_REGEX_SOURCE, + REGEX_NON_SPECIAL_CHARS, + REGEX_SPECIAL_CHARS_BACKREF, + REPLACEMENTS + } = constants3; + var expandRange = (args, options) => { + if (typeof options.expandRange === "function") { + return options.expandRange(...args, options); + } + args.sort(); + const value = `[${args.join("-")}]`; + try { + new RegExp(value); + } catch (ex) { + return args.map((v) => utils.escapeRegex(v)).join(".."); + } + return value; + }; + var syntaxError = (type, char) => { + return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`; + }; + var splitTopLevel = (input) => { + const parts = []; + let bracket = 0; + let paren = 0; + let quote = 0; + let value = ""; + let escaped = false; + for (const ch of input) { + if (escaped === true) { + value += ch; + escaped = false; + continue; + } + if (ch === "\\") { + value += ch; + escaped = true; + continue; + } + if (ch === '"') { + quote = quote === 1 ? 0 : 1; + value += ch; + continue; + } + if (quote === 0) { + if (ch === "[") { + bracket++; + } else if (ch === "]" && bracket > 0) { + bracket--; + } else if (bracket === 0) { + if (ch === "(") { + paren++; + } else if (ch === ")" && paren > 0) { + paren--; + } else if (ch === "|" && paren === 0) { + parts.push(value); + value = ""; + continue; + } + } + } + value += ch; + } + parts.push(value); + return parts; + }; + var isPlainBranch = (branch) => { + let escaped = false; + for (const ch of branch) { + if (escaped === true) { + escaped = false; + continue; + } + if (ch === "\\") { + escaped = true; + continue; + } + if (/[?*+@!()[\]{}]/.test(ch)) { + return false; + } + } + return true; + }; + var normalizeSimpleBranch = (branch) => { + let value = branch.trim(); + let changed = true; + while (changed === true) { + changed = false; + if (/^@\([^\\()[\]{}|]+\)$/.test(value)) { + value = value.slice(2, -1); + changed = true; + } + } + if (!isPlainBranch(value)) { + return; + } + return value.replace(/\\(.)/g, "$1"); + }; + var hasRepeatedCharPrefixOverlap = (branches) => { + const values = branches.map(normalizeSimpleBranch).filter(Boolean); + for (let i = 0; i < values.length; i++) { + for (let j = i + 1; j < values.length; j++) { + const a = values[i]; + const b = values[j]; + const char = a[0]; + if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) { + continue; + } + if (a === b || a.startsWith(b) || b.startsWith(a)) { + return true; + } + } + } + return false; + }; + var parseRepeatedExtglob = (pattern, requireEnd = true) => { + if (pattern[0] !== "+" && pattern[0] !== "*" || pattern[1] !== "(") { + return; + } + let bracket = 0; + let paren = 0; + let quote = 0; + let escaped = false; + for (let i = 1; i < pattern.length; i++) { + const ch = pattern[i]; + if (escaped === true) { + escaped = false; + continue; + } + if (ch === "\\") { + escaped = true; + continue; + } + if (ch === '"') { + quote = quote === 1 ? 0 : 1; + continue; + } + if (quote === 1) { + continue; + } + if (ch === "[") { + bracket++; + continue; + } + if (ch === "]" && bracket > 0) { + bracket--; + continue; + } + if (bracket > 0) { + continue; + } + if (ch === "(") { + paren++; + continue; + } + if (ch === ")") { + paren--; + if (paren === 0) { + if (requireEnd === true && i !== pattern.length - 1) { + return; + } + return { + type: pattern[0], + body: pattern.slice(2, i), + end: i + }; + } + } + } + }; + var getStarExtglobSequenceOutput = (pattern) => { + let index = 0; + const chars = []; + while (index < pattern.length) { + const match = parseRepeatedExtglob(pattern.slice(index), false); + if (!match || match.type !== "*") { + return; + } + const branches = splitTopLevel(match.body).map((branch2) => branch2.trim()); + if (branches.length !== 1) { + return; + } + const branch = normalizeSimpleBranch(branches[0]); + if (!branch || branch.length !== 1) { + return; + } + chars.push(branch); + index += match.end + 1; + } + if (chars.length < 1) { + return; + } + const source = chars.length === 1 ? utils.escapeRegex(chars[0]) : `[${chars.map((ch) => utils.escapeRegex(ch)).join("")}]`; + return `${source}*`; + }; + var repeatedExtglobRecursion = (pattern) => { + let depth = 0; + let value = pattern.trim(); + let match = parseRepeatedExtglob(value); + while (match) { + depth++; + value = match.body.trim(); + match = parseRepeatedExtglob(value); + } + return depth; + }; + var analyzeRepeatedExtglob = (body, options) => { + if (options.maxExtglobRecursion === false) { + return { risky: false }; + } + const max = typeof options.maxExtglobRecursion === "number" ? options.maxExtglobRecursion : constants3.DEFAULT_MAX_EXTGLOB_RECURSION; + const branches = splitTopLevel(body).map((branch) => branch.trim()); + if (branches.length > 1) { + if (branches.some((branch) => branch === "") || branches.some((branch) => /^[*?]+$/.test(branch)) || hasRepeatedCharPrefixOverlap(branches)) { + return { risky: true }; + } + } + for (const branch of branches) { + const safeOutput = getStarExtglobSequenceOutput(branch); + if (safeOutput) { + return { risky: true, safeOutput }; + } + if (repeatedExtglobRecursion(branch) > max) { + return { risky: true }; + } + } + return { risky: false }; + }; + var parse = (input, options) => { + if (typeof input !== "string") { + throw new TypeError("Expected a string"); + } + input = REPLACEMENTS[input] || input; + const opts = { ...options }; + const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + let len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + const bos = { type: "bos", value: "", output: opts.prepend || "" }; + const tokens = [bos]; + const capture = opts.capture ? "" : "?:"; + const win32 = utils.isWindows(options); + const PLATFORM_CHARS = constants3.globChars(win32); + const EXTGLOB_CHARS = constants3.extglobChars(PLATFORM_CHARS); + const { + DOT_LITERAL, + PLUS_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOT_SLASH, + NO_DOTS_SLASH, + QMARK, + QMARK_NO_DOT, + STAR, + START_ANCHOR + } = PLATFORM_CHARS; + const globstar = (opts2) => { + return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + const nodot = opts.dot ? "" : NO_DOT; + const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT; + let star = opts.bash === true ? globstar(opts) : STAR; + if (opts.capture) { + star = `(${star})`; + } + if (typeof opts.noext === "boolean") { + opts.noextglob = opts.noext; + } + const state = { + input, + index: -1, + start: 0, + dot: opts.dot === true, + consumed: "", + output: "", + prefix: "", + backtrack: false, + negated: false, + brackets: 0, + braces: 0, + parens: 0, + quotes: 0, + globstar: false, + tokens + }; + input = utils.removePrefix(input, state); + len = input.length; + const extglobs = []; + const braces = []; + const stack = []; + let prev = bos; + let value; + const eos = () => state.index === len - 1; + const peek = state.peek = (n = 1) => input[state.index + n]; + const advance = state.advance = () => input[++state.index] || ""; + const remaining = () => input.slice(state.index + 1); + const consume = (value2 = "", num = 0) => { + state.consumed += value2; + state.index += num; + }; + const append = (token) => { + state.output += token.output != null ? token.output : token.value; + consume(token.value); + }; + const negate = () => { + let count = 1; + while (peek() === "!" && (peek(2) !== "(" || peek(3) === "?")) { + advance(); + state.start++; + count++; + } + if (count % 2 === 0) { + return false; + } + state.negated = true; + state.start++; + return true; + }; + const increment = (type) => { + state[type]++; + stack.push(type); + }; + const decrement = (type) => { + state[type]--; + stack.pop(); + }; + const push = (tok) => { + if (prev.type === "globstar") { + const isBrace = state.braces > 0 && (tok.type === "comma" || tok.type === "brace"); + const isExtglob = tok.extglob === true || extglobs.length && (tok.type === "pipe" || tok.type === "paren"); + if (tok.type !== "slash" && tok.type !== "paren" && !isBrace && !isExtglob) { + state.output = state.output.slice(0, -prev.output.length); + prev.type = "star"; + prev.value = "*"; + prev.output = star; + state.output += prev.output; + } + } + if (extglobs.length && tok.type !== "paren") { + extglobs[extglobs.length - 1].inner += tok.value; + } + if (tok.value || tok.output) + append(tok); + if (prev && prev.type === "text" && tok.type === "text") { + prev.value += tok.value; + prev.output = (prev.output || "") + tok.value; + return; + } + tok.prev = prev; + tokens.push(tok); + prev = tok; + }; + const extglobOpen = (type, value2) => { + const token = { ...EXTGLOB_CHARS[value2], conditions: 1, inner: "" }; + token.prev = prev; + token.parens = state.parens; + token.output = state.output; + token.startIndex = state.index; + token.tokensIndex = tokens.length; + const output = (opts.capture ? "(" : "") + token.open; + increment("parens"); + push({ type, value: value2, output: state.output ? "" : ONE_CHAR }); + push({ type: "paren", extglob: true, value: advance(), output }); + extglobs.push(token); + }; + const extglobClose = (token) => { + const literal = input.slice(token.startIndex, state.index + 1); + const body = input.slice(token.startIndex + 2, state.index); + const analysis = analyzeRepeatedExtglob(body, opts); + if ((token.type === "plus" || token.type === "star") && analysis.risky) { + const safeOutput = analysis.safeOutput ? (token.output ? "" : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput) : void 0; + const open2 = tokens[token.tokensIndex]; + open2.type = "text"; + open2.value = literal; + open2.output = safeOutput || utils.escapeRegex(literal); + for (let i = token.tokensIndex + 1; i < tokens.length; i++) { + tokens[i].value = ""; + tokens[i].output = ""; + delete tokens[i].suffix; + } + state.output = token.output + open2.output; + state.backtrack = true; + push({ type: "paren", extglob: true, value, output: "" }); + decrement("parens"); + return; + } + let output = token.close + (opts.capture ? ")" : ""); + let rest; + if (token.type === "negate") { + let extglobStar = star; + if (token.inner && token.inner.length > 1 && token.inner.includes("/")) { + extglobStar = globstar(opts); + } + if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) { + output = token.close = `)$))${extglobStar}`; + } + if (token.inner.includes("*") && (rest = remaining()) && /^\.[^\\/.]+$/.test(rest)) { + const expression = parse(rest, { ...options, fastpaths: false }).output; + output = token.close = `)${expression})${extglobStar})`; + } + if (token.prev.type === "bos") { + state.negatedExtglob = true; + } + } + push({ type: "paren", extglob: true, value, output }); + decrement("parens"); + }; + if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) { + let backslashes = false; + let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => { + if (first === "\\") { + backslashes = true; + return m; + } + if (first === "?") { + if (esc) { + return esc + first + (rest ? QMARK.repeat(rest.length) : ""); + } + if (index === 0) { + return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : ""); + } + return QMARK.repeat(chars.length); + } + if (first === ".") { + return DOT_LITERAL.repeat(chars.length); + } + if (first === "*") { + if (esc) { + return esc + first + (rest ? star : ""); + } + return star; + } + return esc ? m : `\\${m}`; + }); + if (backslashes === true) { + if (opts.unescape === true) { + output = output.replace(/\\/g, ""); + } else { + output = output.replace(/\\+/g, (m) => { + return m.length % 2 === 0 ? "\\\\" : m ? "\\" : ""; + }); + } + } + if (output === input && opts.contains === true) { + state.output = input; + return state; + } + state.output = utils.wrapOutput(output, state, options); + return state; + } + while (!eos()) { + value = advance(); + if (value === "\0") { + continue; + } + if (value === "\\") { + const next = peek(); + if (next === "/" && opts.bash !== true) { + continue; + } + if (next === "." || next === ";") { + continue; + } + if (!next) { + value += "\\"; + push({ type: "text", value }); + continue; + } + const match = /^\\+/.exec(remaining()); + let slashes = 0; + if (match && match[0].length > 2) { + slashes = match[0].length; + state.index += slashes; + if (slashes % 2 !== 0) { + value += "\\"; + } + } + if (opts.unescape === true) { + value = advance(); + } else { + value += advance(); + } + if (state.brackets === 0) { + push({ type: "text", value }); + continue; + } + } + if (state.brackets > 0 && (value !== "]" || prev.value === "[" || prev.value === "[^")) { + if (opts.posix !== false && value === ":") { + const inner = prev.value.slice(1); + if (inner.includes("[")) { + prev.posix = true; + if (inner.includes(":")) { + const idx = prev.value.lastIndexOf("["); + const pre = prev.value.slice(0, idx); + const rest2 = prev.value.slice(idx + 2); + const posix = POSIX_REGEX_SOURCE[rest2]; + if (posix) { + prev.value = pre + posix; + state.backtrack = true; + advance(); + if (!bos.output && tokens.indexOf(prev) === 1) { + bos.output = ONE_CHAR; + } + continue; + } + } + } + } + if (value === "[" && peek() !== ":" || value === "-" && peek() === "]") { + value = `\\${value}`; + } + if (value === "]" && (prev.value === "[" || prev.value === "[^")) { + value = `\\${value}`; + } + if (opts.posix === true && value === "!" && prev.value === "[") { + value = "^"; + } + prev.value += value; + append({ value }); + continue; + } + if (state.quotes === 1 && value !== '"') { + value = utils.escapeRegex(value); + prev.value += value; + append({ value }); + continue; + } + if (value === '"') { + state.quotes = state.quotes === 1 ? 0 : 1; + if (opts.keepQuotes === true) { + push({ type: "text", value }); + } + continue; + } + if (value === "(") { + increment("parens"); + push({ type: "paren", value }); + continue; + } + if (value === ")") { + if (state.parens === 0 && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError("opening", "(")); + } + const extglob = extglobs[extglobs.length - 1]; + if (extglob && state.parens === extglob.parens + 1) { + extglobClose(extglobs.pop()); + continue; + } + push({ type: "paren", value, output: state.parens ? ")" : "\\)" }); + decrement("parens"); + continue; + } + if (value === "[") { + if (opts.nobracket === true || !remaining().includes("]")) { + if (opts.nobracket !== true && opts.strictBrackets === true) { + throw new SyntaxError(syntaxError("closing", "]")); + } + value = `\\${value}`; + } else { + increment("brackets"); + } + push({ type: "bracket", value }); + continue; + } + if (value === "]") { + if (opts.nobracket === true || prev && prev.type === "bracket" && prev.value.length === 1) { + push({ type: "text", value, output: `\\${value}` }); + continue; + } + if (state.brackets === 0) { + if (opts.strictBrackets === true) { + throw new SyntaxError(syntaxError("opening", "[")); + } + push({ type: "text", value, output: `\\${value}` }); + continue; + } + decrement("brackets"); + const prevValue = prev.value.slice(1); + if (prev.posix !== true && prevValue[0] === "^" && !prevValue.includes("/")) { + value = `/${value}`; + } + prev.value += value; + append({ value }); + if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) { + continue; + } + const escaped = utils.escapeRegex(prev.value); + state.output = state.output.slice(0, -prev.value.length); + if (opts.literalBrackets === true) { + state.output += escaped; + prev.value = escaped; + continue; + } + prev.value = `(${capture}${escaped}|${prev.value})`; + state.output += prev.value; + continue; + } + if (value === "{" && opts.nobrace !== true) { + increment("braces"); + const open2 = { + type: "brace", + value, + output: "(", + outputIndex: state.output.length, + tokensIndex: state.tokens.length + }; + braces.push(open2); + push(open2); + continue; + } + if (value === "}") { + const brace = braces[braces.length - 1]; + if (opts.nobrace === true || !brace) { + push({ type: "text", value, output: value }); + continue; + } + let output = ")"; + if (brace.dots === true) { + const arr = tokens.slice(); + const range = []; + for (let i = arr.length - 1; i >= 0; i--) { + tokens.pop(); + if (arr[i].type === "brace") { + break; + } + if (arr[i].type !== "dots") { + range.unshift(arr[i].value); + } + } + output = expandRange(range, opts); + state.backtrack = true; + } + if (brace.comma !== true && brace.dots !== true) { + const out = state.output.slice(0, brace.outputIndex); + const toks = state.tokens.slice(brace.tokensIndex); + brace.value = brace.output = "\\{"; + value = output = "\\}"; + state.output = out; + for (const t of toks) { + state.output += t.output || t.value; + } + } + push({ type: "brace", value, output }); + decrement("braces"); + braces.pop(); + continue; + } + if (value === "|") { + if (extglobs.length > 0) { + extglobs[extglobs.length - 1].conditions++; + } + push({ type: "text", value }); + continue; + } + if (value === ",") { + let output = value; + const brace = braces[braces.length - 1]; + if (brace && stack[stack.length - 1] === "braces") { + brace.comma = true; + output = "|"; + } + push({ type: "comma", value, output }); + continue; + } + if (value === "/") { + if (prev.type === "dot" && state.index === state.start + 1) { + state.start = state.index + 1; + state.consumed = ""; + state.output = ""; + tokens.pop(); + prev = bos; + continue; + } + push({ type: "slash", value, output: SLASH_LITERAL }); + continue; + } + if (value === ".") { + if (state.braces > 0 && prev.type === "dot") { + if (prev.value === ".") + prev.output = DOT_LITERAL; + const brace = braces[braces.length - 1]; + prev.type = "dots"; + prev.output += value; + prev.value += value; + brace.dots = true; + continue; + } + if (state.braces + state.parens === 0 && prev.type !== "bos" && prev.type !== "slash") { + push({ type: "text", value, output: DOT_LITERAL }); + continue; + } + push({ type: "dot", value, output: DOT_LITERAL }); + continue; + } + if (value === "?") { + const isGroup = prev && prev.value === "("; + if (!isGroup && opts.noextglob !== true && peek() === "(" && peek(2) !== "?") { + extglobOpen("qmark", value); + continue; + } + if (prev && prev.type === "paren") { + const next = peek(); + let output = value; + if (next === "<" && !utils.supportsLookbehinds()) { + throw new Error("Node.js v10 or higher is required for regex lookbehinds"); + } + if (prev.value === "(" && !/[!=<:]/.test(next) || next === "<" && !/<([!=]|\w+>)/.test(remaining())) { + output = `\\${value}`; + } + push({ type: "text", value, output }); + continue; + } + if (opts.dot !== true && (prev.type === "slash" || prev.type === "bos")) { + push({ type: "qmark", value, output: QMARK_NO_DOT }); + continue; + } + push({ type: "qmark", value, output: QMARK }); + continue; + } + if (value === "!") { + if (opts.noextglob !== true && peek() === "(") { + if (peek(2) !== "?" || !/[!=<:]/.test(peek(3))) { + extglobOpen("negate", value); + continue; + } + } + if (opts.nonegate !== true && state.index === 0) { + negate(); + continue; + } + } + if (value === "+") { + if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") { + extglobOpen("plus", value); + continue; + } + if (prev && prev.value === "(" || opts.regex === false) { + push({ type: "plus", value, output: PLUS_LITERAL }); + continue; + } + if (prev && (prev.type === "bracket" || prev.type === "paren" || prev.type === "brace") || state.parens > 0) { + push({ type: "plus", value }); + continue; + } + push({ type: "plus", value: PLUS_LITERAL }); + continue; + } + if (value === "@") { + if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") { + push({ type: "at", extglob: true, value, output: "" }); + continue; + } + push({ type: "text", value }); + continue; + } + if (value !== "*") { + if (value === "$" || value === "^") { + value = `\\${value}`; + } + const match = REGEX_NON_SPECIAL_CHARS.exec(remaining()); + if (match) { + value += match[0]; + state.index += match[0].length; + } + push({ type: "text", value }); + continue; + } + if (prev && (prev.type === "globstar" || prev.star === true)) { + prev.type = "star"; + prev.star = true; + prev.value += value; + prev.output = star; + state.backtrack = true; + state.globstar = true; + consume(value); + continue; + } + let rest = remaining(); + if (opts.noextglob !== true && /^\([^?]/.test(rest)) { + extglobOpen("star", value); + continue; + } + if (prev.type === "star") { + if (opts.noglobstar === true) { + consume(value); + continue; + } + const prior = prev.prev; + const before = prior.prev; + const isStart = prior.type === "slash" || prior.type === "bos"; + const afterStar = before && (before.type === "star" || before.type === "globstar"); + if (opts.bash === true && (!isStart || rest[0] && rest[0] !== "/")) { + push({ type: "star", value, output: "" }); + continue; + } + const isBrace = state.braces > 0 && (prior.type === "comma" || prior.type === "brace"); + const isExtglob = extglobs.length && (prior.type === "pipe" || prior.type === "paren"); + if (!isStart && prior.type !== "paren" && !isBrace && !isExtglob) { + push({ type: "star", value, output: "" }); + continue; + } + while (rest.slice(0, 3) === "/**") { + const after = input[state.index + 4]; + if (after && after !== "/") { + break; + } + rest = rest.slice(3); + consume("/**", 3); + } + if (prior.type === "bos" && eos()) { + prev.type = "globstar"; + prev.value += value; + prev.output = globstar(opts); + state.output = prev.output; + state.globstar = true; + consume(value); + continue; + } + if (prior.type === "slash" && prior.prev.type !== "bos" && !afterStar && eos()) { + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + prev.type = "globstar"; + prev.output = globstar(opts) + (opts.strictSlashes ? ")" : "|$)"); + prev.value += value; + state.globstar = true; + state.output += prior.output + prev.output; + consume(value); + continue; + } + if (prior.type === "slash" && prior.prev.type !== "bos" && rest[0] === "/") { + const end = rest[1] !== void 0 ? "|$" : ""; + state.output = state.output.slice(0, -(prior.output + prev.output).length); + prior.output = `(?:${prior.output}`; + prev.type = "globstar"; + prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`; + prev.value += value; + state.output += prior.output + prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: "slash", value: "/", output: "" }); + continue; + } + if (prior.type === "bos" && rest[0] === "/") { + prev.type = "globstar"; + prev.value += value; + prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`; + state.output = prev.output; + state.globstar = true; + consume(value + advance()); + push({ type: "slash", value: "/", output: "" }); + continue; + } + state.output = state.output.slice(0, -prev.output.length); + prev.type = "globstar"; + prev.output = globstar(opts); + prev.value += value; + state.output += prev.output; + state.globstar = true; + consume(value); + continue; + } + const token = { type: "star", value, output: star }; + if (opts.bash === true) { + token.output = ".*?"; + if (prev.type === "bos" || prev.type === "slash") { + token.output = nodot + token.output; + } + push(token); + continue; + } + if (prev && (prev.type === "bracket" || prev.type === "paren") && opts.regex === true) { + token.output = value; + push(token); + continue; + } + if (state.index === state.start || prev.type === "slash" || prev.type === "dot") { + if (prev.type === "dot") { + state.output += NO_DOT_SLASH; + prev.output += NO_DOT_SLASH; + } else if (opts.dot === true) { + state.output += NO_DOTS_SLASH; + prev.output += NO_DOTS_SLASH; + } else { + state.output += nodot; + prev.output += nodot; + } + if (peek() !== "*") { + state.output += ONE_CHAR; + prev.output += ONE_CHAR; + } + } + push(token); + } + while (state.brackets > 0) { + if (opts.strictBrackets === true) + throw new SyntaxError(syntaxError("closing", "]")); + state.output = utils.escapeLast(state.output, "["); + decrement("brackets"); + } + while (state.parens > 0) { + if (opts.strictBrackets === true) + throw new SyntaxError(syntaxError("closing", ")")); + state.output = utils.escapeLast(state.output, "("); + decrement("parens"); + } + while (state.braces > 0) { + if (opts.strictBrackets === true) + throw new SyntaxError(syntaxError("closing", "}")); + state.output = utils.escapeLast(state.output, "{"); + decrement("braces"); + } + if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) { + push({ type: "maybe_slash", value: "", output: `${SLASH_LITERAL}?` }); + } + if (state.backtrack === true) { + state.output = ""; + for (const token of state.tokens) { + state.output += token.output != null ? token.output : token.value; + if (token.suffix) { + state.output += token.suffix; + } + } + } + return state; + }; + parse.fastpaths = (input, options) => { + const opts = { ...options }; + const max = typeof opts.maxLength === "number" ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH; + const len = input.length; + if (len > max) { + throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`); + } + input = REPLACEMENTS[input] || input; + const win32 = utils.isWindows(options); + const { + DOT_LITERAL, + SLASH_LITERAL, + ONE_CHAR, + DOTS_SLASH, + NO_DOT, + NO_DOTS, + NO_DOTS_SLASH, + STAR, + START_ANCHOR + } = constants3.globChars(win32); + const nodot = opts.dot ? NO_DOTS : NO_DOT; + const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT; + const capture = opts.capture ? "" : "?:"; + const state = { negated: false, prefix: "" }; + let star = opts.bash === true ? ".*?" : STAR; + if (opts.capture) { + star = `(${star})`; + } + const globstar = (opts2) => { + if (opts2.noglobstar === true) + return star; + return `(${capture}(?:(?!${START_ANCHOR}${opts2.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`; + }; + const create = (str) => { + switch (str) { + case "*": + return `${nodot}${ONE_CHAR}${star}`; + case ".*": + return `${DOT_LITERAL}${ONE_CHAR}${star}`; + case "*.*": + return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + case "*/*": + return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`; + case "**": + return nodot + globstar(opts); + case "**/*": + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`; + case "**/*.*": + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`; + case "**/.*": + return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`; + default: { + const match = /^(.*?)\.(\w+)$/.exec(str); + if (!match) + return; + const source2 = create(match[1]); + if (!source2) + return; + return source2 + DOT_LITERAL + match[2]; + } + } + }; + const output = utils.removePrefix(input, state); + let source = create(output); + if (source && opts.strictSlashes !== true) { + source += `${SLASH_LITERAL}?`; + } + return source; + }; + module.exports = parse; + } +}); + +// +var require_picomatch = __commonJS({ + ""(exports, module) { + "use strict"; + var path = __require("path"); + var scan = require_scan(); + var parse = require_parse3(); + var utils = require_utils3(); + var constants3 = require_constants7(); + var isObject = (val) => val && typeof val === "object" && !Array.isArray(val); + var picomatch = (glob2, options, returnState = false) => { + if (Array.isArray(glob2)) { + const fns = glob2.map((input) => picomatch(input, options, returnState)); + const arrayMatcher = (str) => { + for (const isMatch of fns) { + const state2 = isMatch(str); + if (state2) + return state2; + } + return false; + }; + return arrayMatcher; + } + const isState = isObject(glob2) && glob2.tokens && glob2.input; + if (glob2 === "" || typeof glob2 !== "string" && !isState) { + throw new TypeError("Expected pattern to be a non-empty string"); + } + const opts = options || {}; + const posix = utils.isWindows(options); + const regex = isState ? picomatch.compileRe(glob2, options) : picomatch.makeRe(glob2, options, false, true); + const state = regex.state; + delete regex.state; + let isIgnored = () => false; + if (opts.ignore) { + const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null }; + isIgnored = picomatch(opts.ignore, ignoreOpts, returnState); + } + const matcher = (input, returnObject = false) => { + const { isMatch, match, output } = picomatch.test(input, regex, options, { glob: glob2, posix }); + const result = { glob: glob2, state, regex, posix, input, output, match, isMatch }; + if (typeof opts.onResult === "function") { + opts.onResult(result); + } + if (isMatch === false) { + result.isMatch = false; + return returnObject ? result : false; + } + if (isIgnored(input)) { + if (typeof opts.onIgnore === "function") { + opts.onIgnore(result); + } + result.isMatch = false; + return returnObject ? result : false; + } + if (typeof opts.onMatch === "function") { + opts.onMatch(result); + } + return returnObject ? result : true; + }; + if (returnState) { + matcher.state = state; + } + return matcher; + }; + picomatch.test = (input, regex, options, { glob: glob2, posix } = {}) => { + if (typeof input !== "string") { + throw new TypeError("Expected input to be a string"); + } + if (input === "") { + return { isMatch: false, output: "" }; + } + const opts = options || {}; + const format = opts.format || (posix ? utils.toPosixSlashes : null); + let match = input === glob2; + let output = match && format ? format(input) : input; + if (match === false) { + output = format ? format(input) : input; + match = output === glob2; + } + if (match === false || opts.capture === true) { + if (opts.matchBase === true || opts.basename === true) { + match = picomatch.matchBase(input, regex, options, posix); + } else { + match = regex.exec(output); + } + } + return { isMatch: Boolean(match), match, output }; + }; + picomatch.matchBase = (input, glob2, options, posix = utils.isWindows(options)) => { + const regex = glob2 instanceof RegExp ? glob2 : picomatch.makeRe(glob2, options); + return regex.test(path.basename(input)); + }; + picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + picomatch.parse = (pattern, options) => { + if (Array.isArray(pattern)) + return pattern.map((p) => picomatch.parse(p, options)); + return parse(pattern, { ...options, fastpaths: false }); + }; + picomatch.scan = (input, options) => scan(input, options); + picomatch.compileRe = (state, options, returnOutput = false, returnState = false) => { + if (returnOutput === true) { + return state.output; + } + const opts = options || {}; + const prepend = opts.contains ? "" : "^"; + const append = opts.contains ? "" : "$"; + let source = `${prepend}(?:${state.output})${append}`; + if (state && state.negated === true) { + source = `^(?!${source}).*$`; + } + const regex = picomatch.toRegex(source, options); + if (returnState === true) { + regex.state = state; + } + return regex; + }; + picomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => { + if (!input || typeof input !== "string") { + throw new TypeError("Expected a non-empty string"); + } + let parsed = { negated: false, fastpaths: true }; + if (options.fastpaths !== false && (input[0] === "." || input[0] === "*")) { + parsed.output = parse.fastpaths(input, options); + } + if (!parsed.output) { + parsed = parse(input, options); + } + return picomatch.compileRe(parsed, options, returnOutput, returnState); + }; + picomatch.toRegex = (source, options) => { + try { + const opts = options || {}; + return new RegExp(source, opts.flags || (opts.nocase ? "i" : "")); + } catch (err) { + if (options && options.debug === true) + throw err; + return /$^/; + } + }; + picomatch.constants = constants3; + module.exports = picomatch; + } +}); + +// +var require_picomatch2 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = require_picomatch(); + } +}); + +// +var require_micromatch = __commonJS({ + ""(exports, module) { + "use strict"; + var util = __require("util"); + var braces = require_braces(); + var picomatch = require_picomatch2(); + var utils = require_utils3(); + var isEmptyString = (v) => v === "" || v === "./"; + var hasBraces = (v) => { + const index = v.indexOf("{"); + return index > -1 && v.indexOf("}", index) > -1; + }; + var micromatch = (list, patterns, options) => { + patterns = [].concat(patterns); + list = [].concat(list); + let omit = /* @__PURE__ */ new Set(); + let keep = /* @__PURE__ */ new Set(); + let items = /* @__PURE__ */ new Set(); + let negatives = 0; + let onResult = (state) => { + items.add(state.output); + if (options && options.onResult) { + options.onResult(state); + } + }; + for (let i = 0; i < patterns.length; i++) { + let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true); + let negated = isMatch.state.negated || isMatch.state.negatedExtglob; + if (negated) + negatives++; + for (let item of list) { + let matched = isMatch(item, true); + let match = negated ? !matched.isMatch : matched.isMatch; + if (!match) + continue; + if (negated) { + omit.add(matched.output); + } else { + omit.delete(matched.output); + keep.add(matched.output); + } + } + } + let result = negatives === patterns.length ? [...items] : [...keep]; + let matches = result.filter((item) => !omit.has(item)); + if (options && matches.length === 0) { + if (options.failglob === true) { + throw new Error(`No matches found for "${patterns.join(", ")}"`); + } + if (options.nonull === true || options.nullglob === true) { + return options.unescape ? patterns.map((p) => p.replace(/\\/g, "")) : patterns; + } + } + return matches; + }; + micromatch.match = micromatch; + micromatch.matcher = (pattern, options) => picomatch(pattern, options); + micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str); + micromatch.any = micromatch.isMatch; + micromatch.not = (list, patterns, options = {}) => { + patterns = [].concat(patterns).map(String); + let result = /* @__PURE__ */ new Set(); + let items = []; + let onResult = (state) => { + if (options.onResult) + options.onResult(state); + items.push(state.output); + }; + let matches = new Set(micromatch(list, patterns, { ...options, onResult })); + for (let item of items) { + if (!matches.has(item)) { + result.add(item); + } + } + return [...result]; + }; + micromatch.contains = (str, pattern, options) => { + if (typeof str !== "string") { + throw new TypeError(`Expected a string: "${util.inspect(str)}"`); + } + if (Array.isArray(pattern)) { + return pattern.some((p) => micromatch.contains(str, p, options)); + } + if (typeof pattern === "string") { + if (isEmptyString(str) || isEmptyString(pattern)) { + return false; + } + if (str.includes(pattern) || str.startsWith("./") && str.slice(2).includes(pattern)) { + return true; + } + } + return micromatch.isMatch(str, pattern, { ...options, contains: true }); + }; + micromatch.matchKeys = (obj, patterns, options) => { + if (!utils.isObject(obj)) { + throw new TypeError("Expected the first argument to be an object"); + } + let keys = micromatch(Object.keys(obj), patterns, options); + let res = {}; + for (let key of keys) + res[key] = obj[key]; + return res; + }; + micromatch.some = (list, patterns, options) => { + let items = [].concat(list); + for (let pattern of [].concat(patterns)) { + let isMatch = picomatch(String(pattern), options); + if (items.some((item) => isMatch(item))) { + return true; + } + } + return false; + }; + micromatch.every = (list, patterns, options) => { + let items = [].concat(list); + for (let pattern of [].concat(patterns)) { + let isMatch = picomatch(String(pattern), options); + if (!items.every((item) => isMatch(item))) { + return false; + } + } + return true; + }; + micromatch.all = (str, patterns, options) => { + if (typeof str !== "string") { + throw new TypeError(`Expected a string: "${util.inspect(str)}"`); + } + return [].concat(patterns).every((p) => picomatch(p, options)(str)); + }; + micromatch.capture = (glob2, input, options) => { + let posix = utils.isWindows(options); + let regex = picomatch.makeRe(String(glob2), { ...options, capture: true }); + let match = regex.exec(posix ? utils.toPosixSlashes(input) : input); + if (match) { + return match.slice(1).map((v) => v === void 0 ? "" : v); + } + }; + micromatch.makeRe = (...args) => picomatch.makeRe(...args); + micromatch.scan = (...args) => picomatch.scan(...args); + micromatch.parse = (patterns, options) => { + let res = []; + for (let pattern of [].concat(patterns || [])) { + for (let str of braces(String(pattern), options)) { + res.push(picomatch.parse(str, options)); + } + } + return res; + }; + micromatch.braces = (pattern, options) => { + if (typeof pattern !== "string") + throw new TypeError("Expected a string"); + if (options && options.nobrace === true || !hasBraces(pattern)) { + return [pattern]; + } + return braces(pattern, options); + }; + micromatch.braceExpand = (pattern, options) => { + if (typeof pattern !== "string") + throw new TypeError("Expected a string"); + return micromatch.braces(pattern, { ...options, expand: true }); + }; + micromatch.hasBraces = hasBraces; + module.exports = micromatch; + } +}); + +// +var require_pattern = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0; + var path = __require("path"); + var globParent = require_glob_parent(); + var micromatch = require_micromatch(); + var GLOBSTAR = "**"; + var ESCAPE_SYMBOL = "\\"; + var COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/; + var REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[[^[]*]/; + var REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\([^(]*\|[^|]*\)/; + var GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\([^(]*\)/; + var BRACE_EXPANSION_SEPARATORS_RE = /,|\.\./; + var DOUBLE_SLASH_RE = /(?!^)\/{2,}/g; + function isStaticPattern(pattern, options = {}) { + return !isDynamicPattern(pattern, options); + } + exports.isStaticPattern = isStaticPattern; + function isDynamicPattern(pattern, options = {}) { + if (pattern === "") { + return false; + } + if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) { + return true; + } + if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) { + return true; + } + if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) { + return true; + } + if (options.braceExpansion !== false && hasBraceExpansion(pattern)) { + return true; + } + return false; + } + exports.isDynamicPattern = isDynamicPattern; + function hasBraceExpansion(pattern) { + const openingBraceIndex = pattern.indexOf("{"); + if (openingBraceIndex === -1) { + return false; + } + const closingBraceIndex = pattern.indexOf("}", openingBraceIndex + 1); + if (closingBraceIndex === -1) { + return false; + } + const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex); + return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent); + } + function convertToPositivePattern(pattern) { + return isNegativePattern(pattern) ? pattern.slice(1) : pattern; + } + exports.convertToPositivePattern = convertToPositivePattern; + function convertToNegativePattern(pattern) { + return "!" + pattern; + } + exports.convertToNegativePattern = convertToNegativePattern; + function isNegativePattern(pattern) { + return pattern.startsWith("!") && pattern[1] !== "("; + } + exports.isNegativePattern = isNegativePattern; + function isPositivePattern(pattern) { + return !isNegativePattern(pattern); + } + exports.isPositivePattern = isPositivePattern; + function getNegativePatterns(patterns) { + return patterns.filter(isNegativePattern); + } + exports.getNegativePatterns = getNegativePatterns; + function getPositivePatterns(patterns) { + return patterns.filter(isPositivePattern); + } + exports.getPositivePatterns = getPositivePatterns; + function getPatternsInsideCurrentDirectory(patterns) { + return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern)); + } + exports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory; + function getPatternsOutsideCurrentDirectory(patterns) { + return patterns.filter(isPatternRelatedToParentDirectory); + } + exports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory; + function isPatternRelatedToParentDirectory(pattern) { + return pattern.startsWith("..") || pattern.startsWith("./.."); + } + exports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory; + function getBaseDirectory(pattern) { + return globParent(pattern, { flipBackslashes: false }); + } + exports.getBaseDirectory = getBaseDirectory; + function hasGlobStar(pattern) { + return pattern.includes(GLOBSTAR); + } + exports.hasGlobStar = hasGlobStar; + function endsWithSlashGlobStar(pattern) { + return pattern.endsWith("/" + GLOBSTAR); + } + exports.endsWithSlashGlobStar = endsWithSlashGlobStar; + function isAffectDepthOfReadingPattern(pattern) { + const basename = path.basename(pattern); + return endsWithSlashGlobStar(pattern) || isStaticPattern(basename); + } + exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern; + function expandPatternsWithBraceExpansion(patterns) { + return patterns.reduce((collection, pattern) => { + return collection.concat(expandBraceExpansion(pattern)); + }, []); + } + exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion; + function expandBraceExpansion(pattern) { + const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true }); + patterns.sort((a, b) => a.length - b.length); + return patterns.filter((pattern2) => pattern2 !== ""); + } + exports.expandBraceExpansion = expandBraceExpansion; + function getPatternParts(pattern, options) { + let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true })); + if (parts.length === 0) { + parts = [pattern]; + } + if (parts[0].startsWith("/")) { + parts[0] = parts[0].slice(1); + parts.unshift(""); + } + return parts; + } + exports.getPatternParts = getPatternParts; + function makeRe(pattern, options) { + return micromatch.makeRe(pattern, options); + } + exports.makeRe = makeRe; + function convertPatternsToRe(patterns, options) { + return patterns.map((pattern) => makeRe(pattern, options)); + } + exports.convertPatternsToRe = convertPatternsToRe; + function matchAny(entry, patternsRe) { + return patternsRe.some((patternRe) => patternRe.test(entry)); + } + exports.matchAny = matchAny; + function removeDuplicateSlashes(pattern) { + return pattern.replace(DOUBLE_SLASH_RE, "/"); + } + exports.removeDuplicateSlashes = removeDuplicateSlashes; + function partitionAbsoluteAndRelative(patterns) { + const absolute = []; + const relative = []; + for (const pattern of patterns) { + if (isAbsolute(pattern)) { + absolute.push(pattern); + } else { + relative.push(pattern); + } + } + return [absolute, relative]; + } + exports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative; + function isAbsolute(pattern) { + return path.isAbsolute(pattern); + } + exports.isAbsolute = isAbsolute; + } +}); + +// +var require_merge2 = __commonJS({ + ""(exports, module) { + "use strict"; + var Stream = __require("stream"); + var PassThrough = Stream.PassThrough; + var slice = Array.prototype.slice; + module.exports = merge2; + function merge2() { + const streamsQueue = []; + const args = slice.call(arguments); + let merging = false; + let options = args[args.length - 1]; + if (options && !Array.isArray(options) && options.pipe == null) { + args.pop(); + } else { + options = {}; + } + const doEnd = options.end !== false; + const doPipeError = options.pipeError === true; + if (options.objectMode == null) { + options.objectMode = true; + } + if (options.highWaterMark == null) { + options.highWaterMark = 64 * 1024; + } + const mergedStream = PassThrough(options); + function addStream() { + for (let i = 0, len = arguments.length; i < len; i++) { + streamsQueue.push(pauseStreams(arguments[i], options)); + } + mergeStream(); + return this; + } + function mergeStream() { + if (merging) { + return; + } + merging = true; + let streams = streamsQueue.shift(); + if (!streams) { + process.nextTick(endStream); + return; + } + if (!Array.isArray(streams)) { + streams = [streams]; + } + let pipesCount = streams.length + 1; + function next() { + if (--pipesCount > 0) { + return; + } + merging = false; + mergeStream(); + } + function pipe(stream) { + function onend() { + stream.removeListener("merge2UnpipeEnd", onend); + stream.removeListener("end", onend); + if (doPipeError) { + stream.removeListener("error", onerror); + } + next(); + } + function onerror(err) { + mergedStream.emit("error", err); + } + if (stream._readableState.endEmitted) { + return next(); + } + stream.on("merge2UnpipeEnd", onend); + stream.on("end", onend); + if (doPipeError) { + stream.on("error", onerror); + } + stream.pipe(mergedStream, { end: false }); + stream.resume(); + } + for (let i = 0; i < streams.length; i++) { + pipe(streams[i]); + } + next(); + } + function endStream() { + merging = false; + mergedStream.emit("queueDrain"); + if (doEnd) { + mergedStream.end(); + } + } + mergedStream.setMaxListeners(0); + mergedStream.add = addStream; + mergedStream.on("unpipe", function(stream) { + stream.emit("merge2UnpipeEnd"); + }); + if (args.length) { + addStream.apply(null, args); + } + return mergedStream; + } + function pauseStreams(streams, options) { + if (!Array.isArray(streams)) { + if (!streams._readableState && streams.pipe) { + streams = streams.pipe(PassThrough(options)); + } + if (!streams._readableState || !streams.pause || !streams.pipe) { + throw new Error("Only readable stream can be merged."); + } + streams.pause(); + } else { + for (let i = 0, len = streams.length; i < len; i++) { + streams[i] = pauseStreams(streams[i], options); + } + } + return streams; + } + } +}); + +// +var require_stream = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.merge = void 0; + var merge2 = require_merge2(); + function merge(streams) { + const mergedStream = merge2(streams); + streams.forEach((stream) => { + stream.once("error", (error2) => mergedStream.emit("error", error2)); + }); + mergedStream.once("close", () => propagateCloseEventToSources(streams)); + mergedStream.once("end", () => propagateCloseEventToSources(streams)); + return mergedStream; + } + exports.merge = merge; + function propagateCloseEventToSources(streams) { + streams.forEach((stream) => stream.emit("close")); + } + } +}); + +// +var require_string = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.isEmpty = exports.isString = void 0; + function isString(input) { + return typeof input === "string"; + } + exports.isString = isString; + function isEmpty(input) { + return input === ""; + } + exports.isEmpty = isEmpty; + } +}); + +// +var require_utils4 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0; + var array = require_array(); + exports.array = array; + var errno = require_errno(); + exports.errno = errno; + var fs2 = require_fs(); + exports.fs = fs2; + var path = require_path(); + exports.path = path; + var pattern = require_pattern(); + exports.pattern = pattern; + var stream = require_stream(); + exports.stream = stream; + var string = require_string(); + exports.string = string; + } +}); + +// +var require_tasks = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0; + var utils = require_utils4(); + function generate(input, settings) { + const patterns = processPatterns(input, settings); + const ignore = processPatterns(settings.ignore, settings); + const positivePatterns = getPositivePatterns(patterns); + const negativePatterns = getNegativePatternsAsPositive(patterns, ignore); + const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings)); + const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings)); + const staticTasks = convertPatternsToTasks( + staticPatterns, + negativePatterns, + /* dynamic */ + false + ); + const dynamicTasks = convertPatternsToTasks( + dynamicPatterns, + negativePatterns, + /* dynamic */ + true + ); + return staticTasks.concat(dynamicTasks); + } + exports.generate = generate; + function processPatterns(input, settings) { + let patterns = input; + if (settings.braceExpansion) { + patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns); + } + if (settings.baseNameMatch) { + patterns = patterns.map((pattern) => pattern.includes("/") ? pattern : `**/${pattern}`); + } + return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern)); + } + function convertPatternsToTasks(positive, negative, dynamic) { + const tasks = []; + const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive); + const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive); + const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory); + const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory); + tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic)); + if ("." in insideCurrentDirectoryGroup) { + tasks.push(convertPatternGroupToTask(".", patternsInsideCurrentDirectory, negative, dynamic)); + } else { + tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic)); + } + return tasks; + } + exports.convertPatternsToTasks = convertPatternsToTasks; + function getPositivePatterns(patterns) { + return utils.pattern.getPositivePatterns(patterns); + } + exports.getPositivePatterns = getPositivePatterns; + function getNegativePatternsAsPositive(patterns, ignore) { + const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore); + const positive = negative.map(utils.pattern.convertToPositivePattern); + return positive; + } + exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive; + function groupPatternsByBaseDirectory(patterns) { + const group = {}; + return patterns.reduce((collection, pattern) => { + const base = utils.pattern.getBaseDirectory(pattern); + if (base in collection) { + collection[base].push(pattern); + } else { + collection[base] = [pattern]; + } + return collection; + }, group); + } + exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory; + function convertPatternGroupsToTasks(positive, negative, dynamic) { + return Object.keys(positive).map((base) => { + return convertPatternGroupToTask(base, positive[base], negative, dynamic); + }); + } + exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks; + function convertPatternGroupToTask(base, positive, negative, dynamic) { + return { + dynamic, + positive, + negative, + base, + patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern)) + }; + } + exports.convertPatternGroupToTask = convertPatternGroupToTask; + } +}); + +// +var require_async = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.read = void 0; + function read(path, settings, callback) { + settings.fs.lstat(path, (lstatError, lstat2) => { + if (lstatError !== null) { + callFailureCallback(callback, lstatError); + return; + } + if (!lstat2.isSymbolicLink() || !settings.followSymbolicLink) { + callSuccessCallback(callback, lstat2); + return; + } + settings.fs.stat(path, (statError, stat2) => { + if (statError !== null) { + if (settings.throwErrorOnBrokenSymbolicLink) { + callFailureCallback(callback, statError); + return; + } + callSuccessCallback(callback, lstat2); + return; + } + if (settings.markSymbolicLink) { + stat2.isSymbolicLink = () => true; + } + callSuccessCallback(callback, stat2); + }); + }); + } + exports.read = read; + function callFailureCallback(callback, error2) { + callback(error2); + } + function callSuccessCallback(callback, result) { + callback(null, result); + } + } +}); + +// +var require_sync = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.read = void 0; + function read(path, settings) { + const lstat2 = settings.fs.lstatSync(path); + if (!lstat2.isSymbolicLink() || !settings.followSymbolicLink) { + return lstat2; + } + try { + const stat2 = settings.fs.statSync(path); + if (settings.markSymbolicLink) { + stat2.isSymbolicLink = () => true; + } + return stat2; + } catch (error2) { + if (!settings.throwErrorOnBrokenSymbolicLink) { + return lstat2; + } + throw error2; + } + } + exports.read = read; + } +}); + +// +var require_fs2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0; + var fs2 = __require("fs"); + exports.FILE_SYSTEM_ADAPTER = { + lstat: fs2.lstat, + stat: fs2.stat, + lstatSync: fs2.lstatSync, + statSync: fs2.statSync + }; + function createFileSystemAdapter(fsMethods) { + if (fsMethods === void 0) { + return exports.FILE_SYSTEM_ADAPTER; + } + return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods); + } + exports.createFileSystemAdapter = createFileSystemAdapter; + } +}); + +// +var require_settings = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var fs2 = require_fs2(); + var Settings = class { + constructor(_options = {}) { + this._options = _options; + this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true); + this.fs = fs2.createFileSystemAdapter(this._options.fs); + this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } + }; + exports.default = Settings; + } +}); + +// +var require_out = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.statSync = exports.stat = exports.Settings = void 0; + var async = require_async(); + var sync = require_sync(); + var settings_1 = require_settings(); + exports.Settings = settings_1.default; + function stat2(path, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === "function") { + async.read(path, getSettings(), optionsOrSettingsOrCallback); + return; + } + async.read(path, getSettings(optionsOrSettingsOrCallback), callback); + } + exports.stat = stat2; + function statSync(path, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + return sync.read(path, settings); + } + exports.statSync = statSync; + function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); + } + } +}); + +// +var require_queue_microtask = __commonJS({ + ""(exports, module) { + var promise; + module.exports = typeof queueMicrotask === "function" ? queueMicrotask.bind(typeof window !== "undefined" ? window : global) : (cb) => (promise || (promise = Promise.resolve())).then(cb).catch((err) => setTimeout(() => { + throw err; + }, 0)); + } +}); + +// +var require_run_parallel = __commonJS({ + ""(exports, module) { + module.exports = runParallel; + var queueMicrotask2 = require_queue_microtask(); + function runParallel(tasks, cb) { + let results, pending, keys; + let isSync = true; + if (Array.isArray(tasks)) { + results = []; + pending = tasks.length; + } else { + keys = Object.keys(tasks); + results = {}; + pending = keys.length; + } + function done(err) { + function end() { + if (cb) + cb(err, results); + cb = null; + } + if (isSync) + queueMicrotask2(end); + else + end(); + } + function each(i, err, result) { + results[i] = result; + if (--pending === 0 || err) { + done(err); + } + } + if (!pending) { + done(null); + } else if (keys) { + keys.forEach(function(key) { + tasks[key](function(err, result) { + each(key, err, result); + }); + }); + } else { + tasks.forEach(function(task, i) { + task(function(err, result) { + each(i, err, result); + }); + }); + } + isSync = false; + } + } +}); + +// +var require_constants8 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0; + var NODE_PROCESS_VERSION_PARTS = process.versions.node.split("."); + if (NODE_PROCESS_VERSION_PARTS[0] === void 0 || NODE_PROCESS_VERSION_PARTS[1] === void 0) { + throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`); + } + var MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10); + var MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10); + var SUPPORTED_MAJOR_VERSION = 10; + var SUPPORTED_MINOR_VERSION = 10; + var IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION; + var IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION; + exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR; + } +}); + +// +var require_fs3 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.createDirentFromStats = void 0; + var DirentFromStats = class { + constructor(name, stats) { + this.name = name; + this.isBlockDevice = stats.isBlockDevice.bind(stats); + this.isCharacterDevice = stats.isCharacterDevice.bind(stats); + this.isDirectory = stats.isDirectory.bind(stats); + this.isFIFO = stats.isFIFO.bind(stats); + this.isFile = stats.isFile.bind(stats); + this.isSocket = stats.isSocket.bind(stats); + this.isSymbolicLink = stats.isSymbolicLink.bind(stats); + } + }; + function createDirentFromStats(name, stats) { + return new DirentFromStats(name, stats); + } + exports.createDirentFromStats = createDirentFromStats; + } +}); + +// +var require_utils5 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.fs = void 0; + var fs2 = require_fs3(); + exports.fs = fs2; + } +}); + +// +var require_common = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.joinPathSegments = void 0; + function joinPathSegments(a, b, separator) { + if (a.endsWith(separator)) { + return a + b; + } + return a + separator + b; + } + exports.joinPathSegments = joinPathSegments; + } +}); + +// +var require_async2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.readdir = exports.readdirWithFileTypes = exports.read = void 0; + var fsStat = require_out(); + var rpl = require_run_parallel(); + var constants_1 = require_constants8(); + var utils = require_utils5(); + var common = require_common(); + function read(directory, settings, callback) { + if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { + readdirWithFileTypes(directory, settings, callback); + return; + } + readdir2(directory, settings, callback); + } + exports.read = read; + function readdirWithFileTypes(directory, settings, callback) { + settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => { + if (readdirError !== null) { + callFailureCallback(callback, readdirError); + return; + } + const entries = dirents.map((dirent) => ({ + dirent, + name: dirent.name, + path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) + })); + if (!settings.followSymbolicLinks) { + callSuccessCallback(callback, entries); + return; + } + const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings)); + rpl(tasks, (rplError, rplEntries) => { + if (rplError !== null) { + callFailureCallback(callback, rplError); + return; + } + callSuccessCallback(callback, rplEntries); + }); + }); + } + exports.readdirWithFileTypes = readdirWithFileTypes; + function makeRplTaskEntry(entry, settings) { + return (done) => { + if (!entry.dirent.isSymbolicLink()) { + done(null, entry); + return; + } + settings.fs.stat(entry.path, (statError, stats) => { + if (statError !== null) { + if (settings.throwErrorOnBrokenSymbolicLink) { + done(statError); + return; + } + done(null, entry); + return; + } + entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); + done(null, entry); + }); + }; + } + function readdir2(directory, settings, callback) { + settings.fs.readdir(directory, (readdirError, names) => { + if (readdirError !== null) { + callFailureCallback(callback, readdirError); + return; + } + const tasks = names.map((name) => { + const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); + return (done) => { + fsStat.stat(path, settings.fsStatSettings, (error2, stats) => { + if (error2 !== null) { + done(error2); + return; + } + const entry = { + name, + path, + dirent: utils.fs.createDirentFromStats(name, stats) + }; + if (settings.stats) { + entry.stats = stats; + } + done(null, entry); + }); + }; + }); + rpl(tasks, (rplError, entries) => { + if (rplError !== null) { + callFailureCallback(callback, rplError); + return; + } + callSuccessCallback(callback, entries); + }); + }); + } + exports.readdir = readdir2; + function callFailureCallback(callback, error2) { + callback(error2); + } + function callSuccessCallback(callback, result) { + callback(null, result); + } + } +}); + +// +var require_sync2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.readdir = exports.readdirWithFileTypes = exports.read = void 0; + var fsStat = require_out(); + var constants_1 = require_constants8(); + var utils = require_utils5(); + var common = require_common(); + function read(directory, settings) { + if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { + return readdirWithFileTypes(directory, settings); + } + return readdir2(directory, settings); + } + exports.read = read; + function readdirWithFileTypes(directory, settings) { + const dirents = settings.fs.readdirSync(directory, { withFileTypes: true }); + return dirents.map((dirent) => { + const entry = { + dirent, + name: dirent.name, + path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator) + }; + if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) { + try { + const stats = settings.fs.statSync(entry.path); + entry.dirent = utils.fs.createDirentFromStats(entry.name, stats); + } catch (error2) { + if (settings.throwErrorOnBrokenSymbolicLink) { + throw error2; + } + } + } + return entry; + }); + } + exports.readdirWithFileTypes = readdirWithFileTypes; + function readdir2(directory, settings) { + const names = settings.fs.readdirSync(directory); + return names.map((name) => { + const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator); + const stats = fsStat.statSync(entryPath, settings.fsStatSettings); + const entry = { + name, + path: entryPath, + dirent: utils.fs.createDirentFromStats(name, stats) + }; + if (settings.stats) { + entry.stats = stats; + } + return entry; + }); + } + exports.readdir = readdir2; + } +}); + +// +var require_fs4 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0; + var fs2 = __require("fs"); + exports.FILE_SYSTEM_ADAPTER = { + lstat: fs2.lstat, + stat: fs2.stat, + lstatSync: fs2.lstatSync, + statSync: fs2.statSync, + readdir: fs2.readdir, + readdirSync: fs2.readdirSync + }; + function createFileSystemAdapter(fsMethods) { + if (fsMethods === void 0) { + return exports.FILE_SYSTEM_ADAPTER; + } + return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods); + } + exports.createFileSystemAdapter = createFileSystemAdapter; + } +}); + +// +var require_settings2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var path = __require("path"); + var fsStat = require_out(); + var fs2 = require_fs4(); + var Settings = class { + constructor(_options = {}) { + this._options = _options; + this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false); + this.fs = fs2.createFileSystemAdapter(this._options.fs); + this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep); + this.stats = this._getValue(this._options.stats, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true); + this.fsStatSettings = new fsStat.Settings({ + followSymbolicLink: this.followSymbolicLinks, + fs: this.fs, + throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink + }); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } + }; + exports.default = Settings; + } +}); + +// +var require_out2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Settings = exports.scandirSync = exports.scandir = void 0; + var async = require_async2(); + var sync = require_sync2(); + var settings_1 = require_settings2(); + exports.Settings = settings_1.default; + function scandir(path, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === "function") { + async.read(path, getSettings(), optionsOrSettingsOrCallback); + return; + } + async.read(path, getSettings(optionsOrSettingsOrCallback), callback); + } + exports.scandir = scandir; + function scandirSync(path, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + return sync.read(path, settings); + } + exports.scandirSync = scandirSync; + function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); + } + } +}); + +// +var require_reusify = __commonJS({ + ""(exports, module) { + "use strict"; + function reusify(Constructor) { + var head = new Constructor(); + var tail = head; + function get() { + var current = head; + if (current.next) { + head = current.next; + } else { + head = new Constructor(); + tail = head; + } + current.next = null; + return current; + } + function release(obj) { + tail.next = obj; + tail = obj; + } + return { + get, + release + }; + } + module.exports = reusify; + } +}); + +// +var require_queue = __commonJS({ + ""(exports, module) { + "use strict"; + var reusify = require_reusify(); + function fastqueue(context, worker, _concurrency) { + if (typeof context === "function") { + _concurrency = worker; + worker = context; + context = null; + } + if (!(_concurrency >= 1)) { + throw new Error("fastqueue concurrency must be equal to or greater than 1"); + } + var cache = reusify(Task); + var queueHead = null; + var queueTail = null; + var _running = 0; + var errorHandler = null; + var self = { + push, + drain: noop, + saturated: noop, + pause, + paused: false, + get concurrency() { + return _concurrency; + }, + set concurrency(value) { + if (!(value >= 1)) { + throw new Error("fastqueue concurrency must be equal to or greater than 1"); + } + _concurrency = value; + if (self.paused) + return; + for (; queueHead && _running < _concurrency; ) { + _running++; + release(); + } + }, + running, + resume, + idle, + length, + getQueue, + unshift, + empty: noop, + kill, + killAndDrain, + error: error2, + abort + }; + return self; + function running() { + return _running; + } + function pause() { + self.paused = true; + } + function length() { + var current = queueHead; + var counter = 0; + while (current) { + current = current.next; + counter++; + } + return counter; + } + function getQueue() { + var current = queueHead; + var tasks = []; + while (current) { + tasks.push(current.value); + current = current.next; + } + return tasks; + } + function resume() { + if (!self.paused) + return; + self.paused = false; + if (queueHead === null) { + _running++; + release(); + return; + } + for (; queueHead && _running < _concurrency; ) { + _running++; + release(); + } + } + function idle() { + return _running === 0 && self.length() === 0; + } + function push(value, done) { + var current = cache.get(); + current.context = context; + current.release = release; + current.value = value; + current.callback = done || noop; + current.errorHandler = errorHandler; + if (_running >= _concurrency || self.paused) { + if (queueTail) { + queueTail.next = current; + queueTail = current; + } else { + queueHead = current; + queueTail = current; + self.saturated(); + } + } else { + _running++; + worker.call(context, current.value, current.worked); + } + } + function unshift(value, done) { + var current = cache.get(); + current.context = context; + current.release = release; + current.value = value; + current.callback = done || noop; + current.errorHandler = errorHandler; + if (_running >= _concurrency || self.paused) { + if (queueHead) { + current.next = queueHead; + queueHead = current; + } else { + queueHead = current; + queueTail = current; + self.saturated(); + } + } else { + _running++; + worker.call(context, current.value, current.worked); + } + } + function release(holder) { + if (holder) { + cache.release(holder); + } + var next = queueHead; + if (next && _running <= _concurrency) { + if (!self.paused) { + if (queueTail === queueHead) { + queueTail = null; + } + queueHead = next.next; + next.next = null; + worker.call(context, next.value, next.worked); + if (queueTail === null) { + self.empty(); + } + } else { + _running--; + } + } else if (--_running === 0) { + self.drain(); + } + } + function kill() { + queueHead = null; + queueTail = null; + self.drain = noop; + } + function killAndDrain() { + queueHead = null; + queueTail = null; + self.drain(); + self.drain = noop; + } + function abort() { + var current = queueHead; + queueHead = null; + queueTail = null; + while (current) { + var next = current.next; + var callback = current.callback; + var errorHandler2 = current.errorHandler; + var val = current.value; + var context2 = current.context; + current.value = null; + current.callback = noop; + current.errorHandler = null; + if (errorHandler2) { + errorHandler2(new Error("abort"), val); + } + callback.call(context2, new Error("abort")); + current.release(current); + current = next; + } + self.drain = noop; + } + function error2(handler) { + errorHandler = handler; + } + } + function noop() { + } + function Task() { + this.value = null; + this.callback = noop; + this.next = null; + this.release = noop; + this.context = null; + this.errorHandler = null; + var self = this; + this.worked = function worked(err, result) { + var callback = self.callback; + var errorHandler = self.errorHandler; + var val = self.value; + self.value = null; + self.callback = noop; + if (self.errorHandler) { + errorHandler(err, val); + } + callback.call(self.context, err, result); + self.release(self); + }; + } + function queueAsPromised(context, worker, _concurrency) { + if (typeof context === "function") { + _concurrency = worker; + worker = context; + context = null; + } + function asyncWrapper(arg, cb) { + worker.call(this, arg).then(function(res) { + cb(null, res); + }, cb); + } + var queue = fastqueue(context, asyncWrapper, _concurrency); + var pushCb = queue.push; + var unshiftCb = queue.unshift; + queue.push = push; + queue.unshift = unshift; + queue.drained = drained; + return queue; + function push(value) { + var p = new Promise(function(resolve, reject) { + pushCb(value, function(err, result) { + if (err) { + reject(err); + return; + } + resolve(result); + }); + }); + p.catch(noop); + return p; + } + function unshift(value) { + var p = new Promise(function(resolve, reject) { + unshiftCb(value, function(err, result) { + if (err) { + reject(err); + return; + } + resolve(result); + }); + }); + p.catch(noop); + return p; + } + function drained() { + var p = new Promise(function(resolve) { + process.nextTick(function() { + if (queue.idle()) { + resolve(); + } else { + var previousDrain = queue.drain; + queue.drain = function() { + if (typeof previousDrain === "function") + previousDrain(); + resolve(); + queue.drain = previousDrain; + }; + } + }); + }); + return p; + } + } + module.exports = fastqueue; + module.exports.promise = queueAsPromised; + } +}); + +// +var require_common2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0; + function isFatalError(settings, error2) { + if (settings.errorFilter === null) { + return true; + } + return !settings.errorFilter(error2); + } + exports.isFatalError = isFatalError; + function isAppliedFilter(filter, value) { + return filter === null || filter(value); + } + exports.isAppliedFilter = isAppliedFilter; + function replacePathSegmentSeparator(filepath, separator) { + return filepath.split(/[/\\]/).join(separator); + } + exports.replacePathSegmentSeparator = replacePathSegmentSeparator; + function joinPathSegments(a, b, separator) { + if (a === "") { + return b; + } + if (a.endsWith(separator)) { + return a + b; + } + return a + separator + b; + } + exports.joinPathSegments = joinPathSegments; + } +}); + +// +var require_reader = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var common = require_common2(); + var Reader = class { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator); + } + }; + exports.default = Reader; + } +}); + +// +var require_async3 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var events_1 = __require("events"); + var fsScandir = require_out2(); + var fastq = require_queue(); + var common = require_common2(); + var reader_1 = require_reader(); + var AsyncReader = class extends reader_1.default { + constructor(_root, _settings) { + super(_root, _settings); + this._settings = _settings; + this._scandir = fsScandir.scandir; + this._emitter = new events_1.EventEmitter(); + this._queue = fastq(this._worker.bind(this), this._settings.concurrency); + this._isFatalError = false; + this._isDestroyed = false; + this._queue.drain = () => { + if (!this._isFatalError) { + this._emitter.emit("end"); + } + }; + } + read() { + this._isFatalError = false; + this._isDestroyed = false; + setImmediate(() => { + this._pushToQueue(this._root, this._settings.basePath); + }); + return this._emitter; + } + get isDestroyed() { + return this._isDestroyed; + } + destroy() { + if (this._isDestroyed) { + throw new Error("The reader is already destroyed"); + } + this._isDestroyed = true; + this._queue.killAndDrain(); + } + onEntry(callback) { + this._emitter.on("entry", callback); + } + onError(callback) { + this._emitter.once("error", callback); + } + onEnd(callback) { + this._emitter.once("end", callback); + } + _pushToQueue(directory, base) { + const queueItem = { directory, base }; + this._queue.push(queueItem, (error2) => { + if (error2 !== null) { + this._handleError(error2); + } + }); + } + _worker(item, done) { + this._scandir(item.directory, this._settings.fsScandirSettings, (error2, entries) => { + if (error2 !== null) { + done(error2, void 0); + return; + } + for (const entry of entries) { + this._handleEntry(entry, item.base); + } + done(null, void 0); + }); + } + _handleError(error2) { + if (this._isDestroyed || !common.isFatalError(this._settings, error2)) { + return; + } + this._isFatalError = true; + this._isDestroyed = true; + this._emitter.emit("error", error2); + } + _handleEntry(entry, base) { + if (this._isDestroyed || this._isFatalError) { + return; + } + const fullpath = entry.path; + if (base !== void 0) { + entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); + } + if (common.isAppliedFilter(this._settings.entryFilter, entry)) { + this._emitEntry(entry); + } + if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { + this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path); + } + } + _emitEntry(entry) { + this._emitter.emit("entry", entry); + } + }; + exports.default = AsyncReader; + } +}); + +// +var require_async4 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var async_1 = require_async3(); + var AsyncProvider = class { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new async_1.default(this._root, this._settings); + this._storage = []; + } + read(callback) { + this._reader.onError((error2) => { + callFailureCallback(callback, error2); + }); + this._reader.onEntry((entry) => { + this._storage.push(entry); + }); + this._reader.onEnd(() => { + callSuccessCallback(callback, this._storage); + }); + this._reader.read(); + } + }; + exports.default = AsyncProvider; + function callFailureCallback(callback, error2) { + callback(error2); + } + function callSuccessCallback(callback, entries) { + callback(null, entries); + } + } +}); + +// +var require_stream2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var stream_1 = __require("stream"); + var async_1 = require_async3(); + var StreamProvider = class { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new async_1.default(this._root, this._settings); + this._stream = new stream_1.Readable({ + objectMode: true, + read: () => { + }, + destroy: () => { + if (!this._reader.isDestroyed) { + this._reader.destroy(); + } + } + }); + } + read() { + this._reader.onError((error2) => { + this._stream.emit("error", error2); + }); + this._reader.onEntry((entry) => { + this._stream.push(entry); + }); + this._reader.onEnd(() => { + this._stream.push(null); + }); + this._reader.read(); + return this._stream; + } + }; + exports.default = StreamProvider; + } +}); + +// +var require_sync3 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var fsScandir = require_out2(); + var common = require_common2(); + var reader_1 = require_reader(); + var SyncReader = class extends reader_1.default { + constructor() { + super(...arguments); + this._scandir = fsScandir.scandirSync; + this._storage = []; + this._queue = /* @__PURE__ */ new Set(); + } + read() { + this._pushToQueue(this._root, this._settings.basePath); + this._handleQueue(); + return this._storage; + } + _pushToQueue(directory, base) { + this._queue.add({ directory, base }); + } + _handleQueue() { + for (const item of this._queue.values()) { + this._handleDirectory(item.directory, item.base); + } + } + _handleDirectory(directory, base) { + try { + const entries = this._scandir(directory, this._settings.fsScandirSettings); + for (const entry of entries) { + this._handleEntry(entry, base); + } + } catch (error2) { + this._handleError(error2); + } + } + _handleError(error2) { + if (!common.isFatalError(this._settings, error2)) { + return; + } + throw error2; + } + _handleEntry(entry, base) { + const fullpath = entry.path; + if (base !== void 0) { + entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator); + } + if (common.isAppliedFilter(this._settings.entryFilter, entry)) { + this._pushToStorage(entry); + } + if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) { + this._pushToQueue(fullpath, base === void 0 ? void 0 : entry.path); + } + } + _pushToStorage(entry) { + this._storage.push(entry); + } + }; + exports.default = SyncReader; + } +}); + +// +var require_sync4 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var sync_1 = require_sync3(); + var SyncProvider = class { + constructor(_root, _settings) { + this._root = _root; + this._settings = _settings; + this._reader = new sync_1.default(this._root, this._settings); + } + read() { + return this._reader.read(); + } + }; + exports.default = SyncProvider; + } +}); + +// +var require_settings3 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var path = __require("path"); + var fsScandir = require_out2(); + var Settings = class { + constructor(_options = {}) { + this._options = _options; + this.basePath = this._getValue(this._options.basePath, void 0); + this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY); + this.deepFilter = this._getValue(this._options.deepFilter, null); + this.entryFilter = this._getValue(this._options.entryFilter, null); + this.errorFilter = this._getValue(this._options.errorFilter, null); + this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep); + this.fsScandirSettings = new fsScandir.Settings({ + followSymbolicLinks: this._options.followSymbolicLinks, + fs: this._options.fs, + pathSegmentSeparator: this._options.pathSegmentSeparator, + stats: this._options.stats, + throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink + }); + } + _getValue(option, value) { + return option !== null && option !== void 0 ? option : value; + } + }; + exports.default = Settings; + } +}); + +// +var require_out3 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0; + var async_1 = require_async4(); + var stream_1 = require_stream2(); + var sync_1 = require_sync4(); + var settings_1 = require_settings3(); + exports.Settings = settings_1.default; + function walk(directory, optionsOrSettingsOrCallback, callback) { + if (typeof optionsOrSettingsOrCallback === "function") { + new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback); + return; + } + new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback); + } + exports.walk = walk; + function walkSync(directory, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + const provider = new sync_1.default(directory, settings); + return provider.read(); + } + exports.walkSync = walkSync; + function walkStream(directory, optionsOrSettings) { + const settings = getSettings(optionsOrSettings); + const provider = new stream_1.default(directory, settings); + return provider.read(); + } + exports.walkStream = walkStream; + function getSettings(settingsOrOptions = {}) { + if (settingsOrOptions instanceof settings_1.default) { + return settingsOrOptions; + } + return new settings_1.default(settingsOrOptions); + } + } +}); + +// +var require_reader2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var path = __require("path"); + var fsStat = require_out(); + var utils = require_utils4(); + var Reader = class { + constructor(_settings) { + this._settings = _settings; + this._fsStatSettings = new fsStat.Settings({ + followSymbolicLink: this._settings.followSymbolicLinks, + fs: this._settings.fs, + throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks + }); + } + _getFullEntryPath(filepath) { + return path.resolve(this._settings.cwd, filepath); + } + _makeEntry(stats, pattern) { + const entry = { + name: pattern, + path: pattern, + dirent: utils.fs.createDirentFromStats(pattern, stats) + }; + if (this._settings.stats) { + entry.stats = stats; + } + return entry; + } + _isFatalError(error2) { + return !utils.errno.isEnoentCodeError(error2) && !this._settings.suppressErrors; + } + }; + exports.default = Reader; + } +}); + +// +var require_stream3 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var stream_1 = __require("stream"); + var fsStat = require_out(); + var fsWalk = require_out3(); + var reader_1 = require_reader2(); + var ReaderStream = class extends reader_1.default { + constructor() { + super(...arguments); + this._walkStream = fsWalk.walkStream; + this._stat = fsStat.stat; + } + dynamic(root, options) { + return this._walkStream(root, options); + } + static(patterns, options) { + const filepaths = patterns.map(this._getFullEntryPath, this); + const stream = new stream_1.PassThrough({ objectMode: true }); + stream._write = (index, _enc, done) => { + return this._getEntry(filepaths[index], patterns[index], options).then((entry) => { + if (entry !== null && options.entryFilter(entry)) { + stream.push(entry); + } + if (index === filepaths.length - 1) { + stream.end(); + } + done(); + }).catch(done); + }; + for (let i = 0; i < filepaths.length; i++) { + stream.write(i); + } + return stream; + } + _getEntry(filepath, pattern, options) { + return this._getStat(filepath).then((stats) => this._makeEntry(stats, pattern)).catch((error2) => { + if (options.errorFilter(error2)) { + return null; + } + throw error2; + }); + } + _getStat(filepath) { + return new Promise((resolve, reject) => { + this._stat(filepath, this._fsStatSettings, (error2, stats) => { + return error2 === null ? resolve(stats) : reject(error2); + }); + }); + } + }; + exports.default = ReaderStream; + } +}); + +// +var require_async5 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var fsWalk = require_out3(); + var reader_1 = require_reader2(); + var stream_1 = require_stream3(); + var ReaderAsync = class extends reader_1.default { + constructor() { + super(...arguments); + this._walkAsync = fsWalk.walk; + this._readerStream = new stream_1.default(this._settings); + } + dynamic(root, options) { + return new Promise((resolve, reject) => { + this._walkAsync(root, options, (error2, entries) => { + if (error2 === null) { + resolve(entries); + } else { + reject(error2); + } + }); + }); + } + async static(patterns, options) { + const entries = []; + const stream = this._readerStream.static(patterns, options); + return new Promise((resolve, reject) => { + stream.once("error", reject); + stream.on("data", (entry) => entries.push(entry)); + stream.once("end", () => resolve(entries)); + }); + } + }; + exports.default = ReaderAsync; + } +}); + +// +var require_matcher = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var utils = require_utils4(); + var Matcher = class { + constructor(_patterns, _settings, _micromatchOptions) { + this._patterns = _patterns; + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + this._storage = []; + this._fillStorage(); + } + _fillStorage() { + for (const pattern of this._patterns) { + const segments = this._getPatternSegments(pattern); + const sections = this._splitSegmentsIntoSections(segments); + this._storage.push({ + complete: sections.length <= 1, + pattern, + segments, + sections + }); + } + } + _getPatternSegments(pattern) { + const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions); + return parts.map((part) => { + const dynamic = utils.pattern.isDynamicPattern(part, this._settings); + if (!dynamic) { + return { + dynamic: false, + pattern: part + }; + } + return { + dynamic: true, + pattern: part, + patternRe: utils.pattern.makeRe(part, this._micromatchOptions) + }; + }); + } + _splitSegmentsIntoSections(segments) { + return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern)); + } + }; + exports.default = Matcher; + } +}); + +// +var require_partial = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var matcher_1 = require_matcher(); + var PartialMatcher = class extends matcher_1.default { + match(filepath) { + const parts = filepath.split("/"); + const levels = parts.length; + const patterns = this._storage.filter((info2) => !info2.complete || info2.segments.length > levels); + for (const pattern of patterns) { + const section = pattern.sections[0]; + if (!pattern.complete && levels > section.length) { + return true; + } + const match = parts.every((part, index) => { + const segment = pattern.segments[index]; + if (segment.dynamic && segment.patternRe.test(part)) { + return true; + } + if (!segment.dynamic && segment.pattern === part) { + return true; + } + return false; + }); + if (match) { + return true; + } + } + return false; + } + }; + exports.default = PartialMatcher; + } +}); + +// +var require_deep = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var utils = require_utils4(); + var partial_1 = require_partial(); + var DeepFilter = class { + constructor(_settings, _micromatchOptions) { + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + } + getFilter(basePath, positive, negative) { + const matcher = this._getMatcher(positive); + const negativeRe = this._getNegativePatternsRe(negative); + return (entry) => this._filter(basePath, entry, matcher, negativeRe); + } + _getMatcher(patterns) { + return new partial_1.default(patterns, this._settings, this._micromatchOptions); + } + _getNegativePatternsRe(patterns) { + const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern); + return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions); + } + _filter(basePath, entry, matcher, negativeRe) { + if (this._isSkippedByDeep(basePath, entry.path)) { + return false; + } + if (this._isSkippedSymbolicLink(entry)) { + return false; + } + const filepath = utils.path.removeLeadingDotSegment(entry.path); + if (this._isSkippedByPositivePatterns(filepath, matcher)) { + return false; + } + return this._isSkippedByNegativePatterns(filepath, negativeRe); + } + _isSkippedByDeep(basePath, entryPath) { + if (this._settings.deep === Infinity) { + return false; + } + return this._getEntryLevel(basePath, entryPath) >= this._settings.deep; + } + _getEntryLevel(basePath, entryPath) { + const entryPathDepth = entryPath.split("/").length; + if (basePath === "") { + return entryPathDepth; + } + const basePathDepth = basePath.split("/").length; + return entryPathDepth - basePathDepth; + } + _isSkippedSymbolicLink(entry) { + return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink(); + } + _isSkippedByPositivePatterns(entryPath, matcher) { + return !this._settings.baseNameMatch && !matcher.match(entryPath); + } + _isSkippedByNegativePatterns(entryPath, patternsRe) { + return !utils.pattern.matchAny(entryPath, patternsRe); + } + }; + exports.default = DeepFilter; + } +}); + +// +var require_entry = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var utils = require_utils4(); + var EntryFilter = class { + constructor(_settings, _micromatchOptions) { + this._settings = _settings; + this._micromatchOptions = _micromatchOptions; + this.index = /* @__PURE__ */ new Map(); + } + getFilter(positive, negative) { + const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative); + const patterns = { + positive: { + all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions) + }, + negative: { + absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })), + relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })) + } + }; + return (entry) => this._filter(entry, patterns); + } + _filter(entry, patterns) { + const filepath = utils.path.removeLeadingDotSegment(entry.path); + if (this._settings.unique && this._isDuplicateEntry(filepath)) { + return false; + } + if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) { + return false; + } + const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory()); + if (this._settings.unique && isMatched) { + this._createIndexRecord(filepath); + } + return isMatched; + } + _isDuplicateEntry(filepath) { + return this.index.has(filepath); + } + _createIndexRecord(filepath) { + this.index.set(filepath, void 0); + } + _onlyFileFilter(entry) { + return this._settings.onlyFiles && !entry.dirent.isFile(); + } + _onlyDirectoryFilter(entry) { + return this._settings.onlyDirectories && !entry.dirent.isDirectory(); + } + _isMatchToPatternsSet(filepath, patterns, isDirectory2) { + const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory2); + if (!isMatched) { + return false; + } + const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory2); + if (isMatchedByRelativeNegative) { + return false; + } + const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory2); + if (isMatchedByAbsoluteNegative) { + return false; + } + return true; + } + _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory2) { + if (patternsRe.length === 0) { + return false; + } + const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath); + return this._isMatchToPatterns(fullpath, patternsRe, isDirectory2); + } + _isMatchToPatterns(filepath, patternsRe, isDirectory2) { + if (patternsRe.length === 0) { + return false; + } + const isMatched = utils.pattern.matchAny(filepath, patternsRe); + if (!isMatched && isDirectory2) { + return utils.pattern.matchAny(filepath + "/", patternsRe); + } + return isMatched; + } + }; + exports.default = EntryFilter; + } +}); + +// +var require_error = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var utils = require_utils4(); + var ErrorFilter = class { + constructor(_settings) { + this._settings = _settings; + } + getFilter() { + return (error2) => this._isNonFatalError(error2); + } + _isNonFatalError(error2) { + return utils.errno.isEnoentCodeError(error2) || this._settings.suppressErrors; + } + }; + exports.default = ErrorFilter; + } +}); + +// +var require_entry2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var utils = require_utils4(); + var EntryTransformer = class { + constructor(_settings) { + this._settings = _settings; + } + getTransformer() { + return (entry) => this._transform(entry); + } + _transform(entry) { + let filepath = entry.path; + if (this._settings.absolute) { + filepath = utils.path.makeAbsolute(this._settings.cwd, filepath); + filepath = utils.path.unixify(filepath); + } + if (this._settings.markDirectories && entry.dirent.isDirectory()) { + filepath += "/"; + } + if (!this._settings.objectMode) { + return filepath; + } + return Object.assign(Object.assign({}, entry), { path: filepath }); + } + }; + exports.default = EntryTransformer; + } +}); + +// +var require_provider = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var path = __require("path"); + var deep_1 = require_deep(); + var entry_1 = require_entry(); + var error_1 = require_error(); + var entry_2 = require_entry2(); + var Provider = class { + constructor(_settings) { + this._settings = _settings; + this.errorFilter = new error_1.default(this._settings); + this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions()); + this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions()); + this.entryTransformer = new entry_2.default(this._settings); + } + _getRootDirectory(task) { + return path.resolve(this._settings.cwd, task.base); + } + _getReaderOptions(task) { + const basePath = task.base === "." ? "" : task.base; + return { + basePath, + pathSegmentSeparator: "/", + concurrency: this._settings.concurrency, + deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative), + entryFilter: this.entryFilter.getFilter(task.positive, task.negative), + errorFilter: this.errorFilter.getFilter(), + followSymbolicLinks: this._settings.followSymbolicLinks, + fs: this._settings.fs, + stats: this._settings.stats, + throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink, + transform: this.entryTransformer.getTransformer() + }; + } + _getMicromatchOptions() { + return { + dot: this._settings.dot, + matchBase: this._settings.baseNameMatch, + nobrace: !this._settings.braceExpansion, + nocase: !this._settings.caseSensitiveMatch, + noext: !this._settings.extglob, + noglobstar: !this._settings.globstar, + posix: true, + strictSlashes: false + }; + } + }; + exports.default = Provider; + } +}); + +// +var require_async6 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var async_1 = require_async5(); + var provider_1 = require_provider(); + var ProviderAsync = class extends provider_1.default { + constructor() { + super(...arguments); + this._reader = new async_1.default(this._settings); + } + async read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const entries = await this.api(root, task, options); + return entries.map((entry) => options.transform(entry)); + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } + }; + exports.default = ProviderAsync; + } +}); + +// +var require_stream4 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var stream_1 = __require("stream"); + var stream_2 = require_stream3(); + var provider_1 = require_provider(); + var ProviderStream = class extends provider_1.default { + constructor() { + super(...arguments); + this._reader = new stream_2.default(this._settings); + } + read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const source = this.api(root, task, options); + const destination = new stream_1.Readable({ objectMode: true, read: () => { + } }); + source.once("error", (error2) => destination.emit("error", error2)).on("data", (entry) => destination.emit("data", options.transform(entry))).once("end", () => destination.emit("end")); + destination.once("close", () => source.destroy()); + return destination; + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } + }; + exports.default = ProviderStream; + } +}); + +// +var require_sync5 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var fsStat = require_out(); + var fsWalk = require_out3(); + var reader_1 = require_reader2(); + var ReaderSync = class extends reader_1.default { + constructor() { + super(...arguments); + this._walkSync = fsWalk.walkSync; + this._statSync = fsStat.statSync; + } + dynamic(root, options) { + return this._walkSync(root, options); + } + static(patterns, options) { + const entries = []; + for (const pattern of patterns) { + const filepath = this._getFullEntryPath(pattern); + const entry = this._getEntry(filepath, pattern, options); + if (entry === null || !options.entryFilter(entry)) { + continue; + } + entries.push(entry); + } + return entries; + } + _getEntry(filepath, pattern, options) { + try { + const stats = this._getStat(filepath); + return this._makeEntry(stats, pattern); + } catch (error2) { + if (options.errorFilter(error2)) { + return null; + } + throw error2; + } + } + _getStat(filepath) { + return this._statSync(filepath, this._fsStatSettings); + } + }; + exports.default = ReaderSync; + } +}); + +// +var require_sync6 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var sync_1 = require_sync5(); + var provider_1 = require_provider(); + var ProviderSync = class extends provider_1.default { + constructor() { + super(...arguments); + this._reader = new sync_1.default(this._settings); + } + read(task) { + const root = this._getRootDirectory(task); + const options = this._getReaderOptions(task); + const entries = this.api(root, task, options); + return entries.map(options.transform); + } + api(root, task, options) { + if (task.dynamic) { + return this._reader.dynamic(root, options); + } + return this._reader.static(task.patterns, options); + } + }; + exports.default = ProviderSync; + } +}); + +// +var require_settings4 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0; + var fs2 = __require("fs"); + var os4 = __require("os"); + var CPU_COUNT = Math.max(os4.cpus().length, 1); + exports.DEFAULT_FILE_SYSTEM_ADAPTER = { + lstat: fs2.lstat, + lstatSync: fs2.lstatSync, + stat: fs2.stat, + statSync: fs2.statSync, + readdir: fs2.readdir, + readdirSync: fs2.readdirSync + }; + var Settings = class { + constructor(_options = {}) { + this._options = _options; + this.absolute = this._getValue(this._options.absolute, false); + this.baseNameMatch = this._getValue(this._options.baseNameMatch, false); + this.braceExpansion = this._getValue(this._options.braceExpansion, true); + this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true); + this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT); + this.cwd = this._getValue(this._options.cwd, process.cwd()); + this.deep = this._getValue(this._options.deep, Infinity); + this.dot = this._getValue(this._options.dot, false); + this.extglob = this._getValue(this._options.extglob, true); + this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true); + this.fs = this._getFileSystemMethods(this._options.fs); + this.globstar = this._getValue(this._options.globstar, true); + this.ignore = this._getValue(this._options.ignore, []); + this.markDirectories = this._getValue(this._options.markDirectories, false); + this.objectMode = this._getValue(this._options.objectMode, false); + this.onlyDirectories = this._getValue(this._options.onlyDirectories, false); + this.onlyFiles = this._getValue(this._options.onlyFiles, true); + this.stats = this._getValue(this._options.stats, false); + this.suppressErrors = this._getValue(this._options.suppressErrors, false); + this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false); + this.unique = this._getValue(this._options.unique, true); + if (this.onlyDirectories) { + this.onlyFiles = false; + } + if (this.stats) { + this.objectMode = true; + } + this.ignore = [].concat(this.ignore); + } + _getValue(option, value) { + return option === void 0 ? value : option; + } + _getFileSystemMethods(methods = {}) { + return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods); + } + }; + exports.default = Settings; + } +}); + +// +var require_out4 = __commonJS({ + ""(exports, module) { + "use strict"; + var taskManager = require_tasks(); + var async_1 = require_async6(); + var stream_1 = require_stream4(); + var sync_1 = require_sync6(); + var settings_1 = require_settings4(); + var utils = require_utils4(); + async function FastGlob(source, options) { + assertPatternsInput(source); + const works = getWorks(source, async_1.default, options); + const result = await Promise.all(works); + return utils.array.flatten(result); + } + (function(FastGlob2) { + FastGlob2.glob = FastGlob2; + FastGlob2.globSync = sync; + FastGlob2.globStream = stream; + FastGlob2.async = FastGlob2; + function sync(source, options) { + assertPatternsInput(source); + const works = getWorks(source, sync_1.default, options); + return utils.array.flatten(works); + } + FastGlob2.sync = sync; + function stream(source, options) { + assertPatternsInput(source); + const works = getWorks(source, stream_1.default, options); + return utils.stream.merge(works); + } + FastGlob2.stream = stream; + function generateTasks(source, options) { + assertPatternsInput(source); + const patterns = [].concat(source); + const settings = new settings_1.default(options); + return taskManager.generate(patterns, settings); + } + FastGlob2.generateTasks = generateTasks; + function isDynamicPattern(source, options) { + assertPatternsInput(source); + const settings = new settings_1.default(options); + return utils.pattern.isDynamicPattern(source, settings); + } + FastGlob2.isDynamicPattern = isDynamicPattern; + function escapePath(source) { + assertPatternsInput(source); + return utils.path.escape(source); + } + FastGlob2.escapePath = escapePath; + function convertPathToPattern(source) { + assertPatternsInput(source); + return utils.path.convertPathToPattern(source); + } + FastGlob2.convertPathToPattern = convertPathToPattern; + let posix; + (function(posix2) { + function escapePath2(source) { + assertPatternsInput(source); + return utils.path.escapePosixPath(source); + } + posix2.escapePath = escapePath2; + function convertPathToPattern2(source) { + assertPatternsInput(source); + return utils.path.convertPosixPathToPattern(source); + } + posix2.convertPathToPattern = convertPathToPattern2; + })(posix = FastGlob2.posix || (FastGlob2.posix = {})); + let win32; + (function(win322) { + function escapePath2(source) { + assertPatternsInput(source); + return utils.path.escapeWindowsPath(source); + } + win322.escapePath = escapePath2; + function convertPathToPattern2(source) { + assertPatternsInput(source); + return utils.path.convertWindowsPathToPattern(source); + } + win322.convertPathToPattern = convertPathToPattern2; + })(win32 = FastGlob2.win32 || (FastGlob2.win32 = {})); + })(FastGlob || (FastGlob = {})); + function getWorks(source, _Provider, options) { + const patterns = [].concat(source); + const settings = new settings_1.default(options); + const tasks = taskManager.generate(patterns, settings); + const provider = new _Provider(settings); + return tasks.map(provider.read, provider); + } + function assertPatternsInput(input) { + const source = [].concat(input); + const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item)); + if (!isValidSource) { + throw new TypeError("Patterns must be a string (non empty) or an array of strings"); + } + } + module.exports = FastGlob; + } +}); + +// +import * as os from "os"; + +// +function toCommandValue(input) { + if (input === null || input === void 0) { + return ""; + } else if (typeof input === "string" || input instanceof String) { + return input; + } + return JSON.stringify(input); +} +function toCommandProperties(annotationProperties) { + if (!Object.keys(annotationProperties).length) { + return {}; + } + return { + title: annotationProperties.title, + file: annotationProperties.file, + line: annotationProperties.startLine, + endLine: annotationProperties.endLine, + col: annotationProperties.startColumn, + endColumn: annotationProperties.endColumn + }; +} + +// +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); +} +var CMD_STRING = "::"; +var Command = class { + constructor(command, properties, message) { + if (!command) { + command = "missing.command"; + } + this.command = command; + this.properties = properties; + this.message = message; + } + toString() { + let cmdStr = CMD_STRING + this.command; + if (this.properties && Object.keys(this.properties).length > 0) { + cmdStr += " "; + let first = true; + for (const key in this.properties) { + if (this.properties.hasOwnProperty(key)) { + const val = this.properties[key]; + if (val) { + if (first) { + first = false; + } else { + cmdStr += ","; + } + cmdStr += `${key}=${escapeProperty(val)}`; + } + } + } + } + cmdStr += `${CMD_STRING}${escapeData(this.message)}`; + return cmdStr; + } +}; +function escapeData(s) { + return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A"); +} +function escapeProperty(s) { + return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C"); +} + +// +import * as os3 from "os"; + +// +var tunnel = __toESM(require_tunnel2()); +var import_undici = __toESM(require_undici()); +var HttpCodes; +(function(HttpCodes2) { + HttpCodes2[HttpCodes2["OK"] = 200] = "OK"; + HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther"; + HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified"; + HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy"; + HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest"; + HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden"; + HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound"; + HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict"; + HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone"; + HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway"; + HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes || (HttpCodes = {})); +var Headers; +(function(Headers2) { + Headers2["Accept"] = "accept"; + Headers2["ContentType"] = "content-type"; +})(Headers || (Headers = {})); +var MediaTypes; +(function(MediaTypes2) { + MediaTypes2["ApplicationJson"] = "application/json"; +})(MediaTypes || (MediaTypes = {})); +var HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +var HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; + +// +import { EOL as EOL2 } from "os"; +import { constants, promises } from "fs"; +var __awaiter = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var { access, appendFile, writeFile } = promises; +var SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY"; +var Summary = class { + constructor() { + this._buffer = ""; + } + /** + * Finds the summary file path from the environment, rejects if env var is not found or file does not exist + * Also checks r/w permissions. + * + * @returns step summary file path + */ + filePath() { + return __awaiter(this, void 0, void 0, function* () { + if (this._filePath) { + return this._filePath; + } + const pathFromEnv = process.env[SUMMARY_ENV_VAR]; + if (!pathFromEnv) { + throw new Error(`Unable to find environment variable for $${SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); + } + try { + yield access(pathFromEnv, constants.R_OK | constants.W_OK); + } catch (_a) { + throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); + } + this._filePath = pathFromEnv; + return this._filePath; + }); + } + /** + * Wraps content in an HTML tag, adding any HTML attributes + * + * @param {string} tag HTML tag to wrap + * @param {string | null} content content within the tag + * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add + * + * @returns {string} content wrapped in HTML element + */ + wrap(tag, content, attrs = {}) { + const htmlAttrs = Object.entries(attrs).map(([key, value]) => ` ${key}="${value}"`).join(""); + if (!content) { + return `<${tag}${htmlAttrs}>`; + } + return `<${tag}${htmlAttrs}>${content}`; + } + /** + * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. + * + * @param {SummaryWriteOptions} [options] (optional) options for write operation + * + * @returns {Promise} summary instance + */ + write(options) { + return __awaiter(this, void 0, void 0, function* () { + const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); + const filePath = yield this.filePath(); + const writeFunc = overwrite ? writeFile : appendFile; + yield writeFunc(filePath, this._buffer, { encoding: "utf8" }); + return this.emptyBuffer(); + }); + } + /** + * Clears the summary buffer and wipes the summary file + * + * @returns {Summary} summary instance + */ + clear() { + return __awaiter(this, void 0, void 0, function* () { + return this.emptyBuffer().write({ overwrite: true }); + }); + } + /** + * Returns the current summary buffer as a string + * + * @returns {string} string of summary buffer + */ + stringify() { + return this._buffer; + } + /** + * If the summary buffer is empty + * + * @returns {boolen} true if the buffer is empty + */ + isEmptyBuffer() { + return this._buffer.length === 0; + } + /** + * Resets the summary buffer without writing to summary file + * + * @returns {Summary} summary instance + */ + emptyBuffer() { + this._buffer = ""; + return this; + } + /** + * Adds raw text to the summary buffer + * + * @param {string} text content to add + * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) + * + * @returns {Summary} summary instance + */ + addRaw(text, addEOL = false) { + this._buffer += text; + return addEOL ? this.addEOL() : this; + } + /** + * Adds the operating system-specific end-of-line marker to the buffer + * + * @returns {Summary} summary instance + */ + addEOL() { + return this.addRaw(EOL2); + } + /** + * Adds an HTML codeblock to the summary buffer + * + * @param {string} code content to render within fenced code block + * @param {string} lang (optional) language to syntax highlight code + * + * @returns {Summary} summary instance + */ + addCodeBlock(code, lang) { + const attrs = Object.assign({}, lang && { lang }); + const element = this.wrap("pre", this.wrap("code", code), attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML list to the summary buffer + * + * @param {string[]} items list of items to render + * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) + * + * @returns {Summary} summary instance + */ + addList(items, ordered = false) { + const tag = ordered ? "ol" : "ul"; + const listItems = items.map((item) => this.wrap("li", item)).join(""); + const element = this.wrap(tag, listItems); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML table to the summary buffer + * + * @param {SummaryTableCell[]} rows table rows + * + * @returns {Summary} summary instance + */ + addTable(rows) { + const tableBody = rows.map((row) => { + const cells = row.map((cell) => { + if (typeof cell === "string") { + return this.wrap("td", cell); + } + const { header, data, colspan, rowspan } = cell; + const tag = header ? "th" : "td"; + const attrs = Object.assign(Object.assign({}, colspan && { colspan }), rowspan && { rowspan }); + return this.wrap(tag, data, attrs); + }).join(""); + return this.wrap("tr", cells); + }).join(""); + const element = this.wrap("table", tableBody); + return this.addRaw(element).addEOL(); + } + /** + * Adds a collapsable HTML details element to the summary buffer + * + * @param {string} label text for the closed state + * @param {string} content collapsable content + * + * @returns {Summary} summary instance + */ + addDetails(label, content) { + const element = this.wrap("details", this.wrap("summary", label) + content); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML image tag to the summary buffer + * + * @param {string} src path to the image you to embed + * @param {string} alt text description of the image + * @param {SummaryImageOptions} options (optional) addition image attributes + * + * @returns {Summary} summary instance + */ + addImage(src, alt, options) { + const { width, height } = options || {}; + const attrs = Object.assign(Object.assign({}, width && { width }), height && { height }); + const element = this.wrap("img", null, Object.assign({ src, alt }, attrs)); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML section heading element + * + * @param {string} text heading text + * @param {number | string} [level=1] (optional) the heading level, default: 1 + * + * @returns {Summary} summary instance + */ + addHeading(text, level) { + const tag = `h${level}`; + const allowedTag = ["h1", "h2", "h3", "h4", "h5", "h6"].includes(tag) ? tag : "h1"; + const element = this.wrap(allowedTag, text); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML thematic break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addSeparator() { + const element = this.wrap("hr", null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML line break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addBreak() { + const element = this.wrap("br", null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML blockquote to the summary buffer + * + * @param {string} text quote text + * @param {string} cite (optional) citation url + * + * @returns {Summary} summary instance + */ + addQuote(text, cite) { + const attrs = Object.assign({}, cite && { cite }); + const element = this.wrap("blockquote", text, attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML anchor tag to the summary buffer + * + * @param {string} text link text/content + * @param {string} href hyperlink + * + * @returns {Summary} summary instance + */ + addLink(text, href) { + const element = this.wrap("a", text, { href }); + return this.addRaw(element).addEOL(); + } +}; +var _summary = new Summary(); + +// +import os2 from "os"; + +// +import * as fs from "fs"; +var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs.promises; +var IS_WINDOWS = process.platform === "win32"; +var READONLY = fs.constants.O_RDONLY; + +// +var IS_WINDOWS2 = process.platform === "win32"; + +// +var platform = os2.platform(); +var arch = os2.arch(); + +// +var ExitCode; +(function(ExitCode2) { + ExitCode2[ExitCode2["Success"] = 0] = "Success"; + ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; +})(ExitCode || (ExitCode = {})); +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +function error(message, properties = {}) { + issueCommand("error", toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +function warning(message, properties = {}) { + issueCommand("warning", toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +function info(message) { + process.stdout.write(message + os3.EOL); +} + +// .github/local-actions/update-models/lib/main.ts +var import_fast_glob = __toESM(require_out4()); +import { readFile, writeFile as writeFile2 } from "node:fs/promises"; +function parseDeprecations(html) { + const replacements = /* @__PURE__ */ new Map(); + const tbodyRegex = /]*>([\s\S]*?)<\/tbody>/gi; + let tbodyMatch; + while ((tbodyMatch = tbodyRegex.exec(html)) !== null) { + const tbodyContent = tbodyMatch[1]; + const trRegex = /]*>([\s\S]*?)<\/tr>/gi; + let trMatch; + while ((trMatch = trRegex.exec(tbodyContent)) !== null) { + const trContent = trMatch[1]; + if (!trContent) + continue; + if (trContent.includes("colspan")) + continue; + const tdRegex = /]*>([\s\S]*?)<\/td>/gi; + const tds = []; + let tdMatch; + while ((tdMatch = tdRegex.exec(trContent)) !== null) { + tds.push(tdMatch[1].trim()); + } + if (tds.length >= 4) { + const modelMatch = tds[0].match(/]*>([^<]+)<\/code>/); + const model = modelMatch ? modelMatch[1].trim() : tds[0]; + const replacementMatch = tds[3].match(/]*>([^<]+)<\/code>/); + const replacement = replacementMatch ? replacementMatch[1].trim() : tds[3].replace(/<[^>]*>/g, "").trim(); + if (model && replacement && replacement.includes("gemini")) { + replacements.set(model, replacement); + } + } + } + } + return replacements; +} +async function run() { + info("Fetching Gemini deprecations page..."); + let html = ""; + try { + const response = await fetch("https://ai.google.dev/gemini-api/docs/deprecations"); + if (!response.ok) { + throw new Error(`Failed to fetch: ${response.statusText}`); + } + html = await response.text(); + } catch (error2) { + setFailed(`Error fetching deprecations page: ${error2}`); + return; + } + const replacements = parseDeprecations(html); + if (replacements.size === 0) { + warning("No model replacements found on the deprecations page."); + return; + } + info(`Found ${replacements.size} model replacement(s) on the deprecations page.`); + for (const [oldModel, newModel] of replacements.entries()) { + info(` - ${oldModel} -> ${newModel}`); + } + const files = await (0, import_fast_glob.default)(["**/*.{ts,yml,yaml}"], { + ignore: ["**/", "**/dist/**", "**/.git/**"], + dot: true + }); + let totalUpdated = 0; + for (const file of files) { + try { + const content = await readFile(file, "utf-8"); + let updatedContent = content; + let fileChanged = false; + for (const [oldModel, newModel] of replacements.entries()) { + const escapedOldModel = oldModel.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&"); + const regex = new RegExp(`(? { + setFailed(`Unhandled execution error: ${err}`); +}); +/** + * @license + * Copyright Google LLC + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/*! Bundled license information: + +undici/lib/web/fetch/body.js: + (*! formdata-polyfill. MIT License. Jimmy Wärting *) + +undici/lib/web/websocket/frame.js: + (*! ws. MIT License. Einar Otto Stangvik *) + +is-extglob/index.js: + (*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + *) + +is-glob/index.js: + (*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + *) + +is-number/index.js: + (*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + *) + +to-regex-range/index.js: + (*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + *) + +fill-range/index.js: + (*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + *) + +queue-microtask/index.js: + (*! queue-microtask. MIT License. Feross Aboukhadijeh *) + +run-parallel/index.js: + (*! run-parallel. MIT License. Feross Aboukhadijeh *) +*/ +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdHVubmVsQDAuMC42L25vZGVfbW9kdWxlcy90dW5uZWwvbGliL3R1bm5lbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3RyZWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2RpYWdub3N0aWNzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9yZXF1ZXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi91dGlsL3RpbWVycy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2RhdGEtdXJsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3dlYmlkbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZmlsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvYm9keS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9jbGllbnQtaDIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9maXhlZC1xdWV1ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1iYXNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wb29sLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9hZ2VudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9yZXRyeS1hZ2VudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1waXBlbGluZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay11dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stcG9vbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWFnZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kdW1wLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZG5zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY29va2llcy9wYXJzZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2Nvbm5lY3Rpb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3NlbmRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RyZWFtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvYXJyYXkuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1nbG9iQDMuMy4zL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3V0aWxzL2Vycm5vLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9mcy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvcGF0aC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9pcy1leHRnbG9iQDIuMS4xL25vZGVfbW9kdWxlcy9pcy1leHRnbG9iL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2lzLWdsb2JANC4wLjMvbm9kZV9tb2R1bGVzL2lzLWdsb2IvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZ2xvYi1wYXJlbnRANS4xLjIvbm9kZV9tb2R1bGVzL2dsb2ItcGFyZW50L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2JyYWNlc0AzLjAuMy9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9icmFjZXNAMy4wLjMvbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvc3RyaW5naWZ5LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2lzLW51bWJlckA3LjAuMC9ub2RlX21vZHVsZXMvaXMtbnVtYmVyL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3RvLXJlZ2V4LXJhbmdlQDUuMC4xL25vZGVfbW9kdWxlcy90by1yZWdleC1yYW5nZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9maWxsLXJhbmdlQDcuMS4xL25vZGVfbW9kdWxlcy9maWxsLXJhbmdlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2JyYWNlc0AzLjAuMy9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9jb21waWxlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2JyYWNlc0AzLjAuMy9ub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9leHBhbmQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvYnJhY2VzQDMuMC4zL25vZGVfbW9kdWxlcy9icmFjZXMvbGliL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9icmFjZXNAMy4wLjMvbm9kZV9tb2R1bGVzL2JyYWNlcy9saWIvcGFyc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvYnJhY2VzQDMuMC4zL25vZGVfbW9kdWxlcy9icmFjZXMvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvcGljb21hdGNoQDIuMy4yL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9waWNvbWF0Y2hAMi4zLjIvbm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvdXRpbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvcGljb21hdGNoQDIuMy4yL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3NjYW4uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvcGljb21hdGNoQDIuMy4yL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3BhcnNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3BpY29tYXRjaEAyLjMuMi9ub2RlX21vZHVsZXMvcGljb21hdGNoL2xpYi9waWNvbWF0Y2guanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvcGljb21hdGNoQDIuMy4yL25vZGVfbW9kdWxlcy9waWNvbWF0Y2gvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvbWljcm9tYXRjaEA0LjAuOC9ub2RlX21vZHVsZXMvbWljcm9tYXRjaC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvcGF0dGVybi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9tZXJnZTJAMS40LjEvbm9kZV9tb2R1bGVzL21lcmdlMi9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvdXRpbHMvc3RyZWFtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC91dGlscy9zdHJpbmcuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1nbG9iQDMuMy4zL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3V0aWxzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9tYW5hZ2Vycy90YXNrcy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Abm9kZWxpYitmcy5zdGF0QDIuMC41L25vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zdGF0L291dC9wcm92aWRlcnMvYXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMuc3RhdEAyLjAuNS9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc3RhdC9vdXQvcHJvdmlkZXJzL3N5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMuc3RhdEAyLjAuNS9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc3RhdC9vdXQvYWRhcHRlcnMvZnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMuc3RhdEAyLjAuNS9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc3RhdC9vdXQvc2V0dGluZ3MuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMuc3RhdEAyLjAuNS9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc3RhdC9vdXQvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvcXVldWUtbWljcm90YXNrQDEuMi4zL25vZGVfbW9kdWxlcy9xdWV1ZS1taWNyb3Rhc2svaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvcnVuLXBhcmFsbGVsQDEuMi4wL25vZGVfbW9kdWxlcy9ydW4tcGFyYWxsZWwvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMuc2NhbmRpckAyLjEuNS9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLnNjYW5kaXJAMi4xLjUvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3V0aWxzL2ZzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLnNjYW5kaXJAMi4xLjUvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3V0aWxzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLnNjYW5kaXJAMi4xLjUvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9jb21tb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMuc2NhbmRpckAyLjEuNS9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMuc2NhbmRpci9vdXQvcHJvdmlkZXJzL2FzeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLnNjYW5kaXJAMi4xLjUvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLnNjYW5kaXJAMi4xLjUvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L2FkYXB0ZXJzL2ZzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLnNjYW5kaXJAMi4xLjUvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L3NldHRpbmdzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLnNjYW5kaXJAMi4xLjUvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnNjYW5kaXIvb3V0L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3JldXNpZnlAMS4xLjAvbm9kZV9tb2R1bGVzL3JldXNpZnkvcmV1c2lmeS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0cUAxLjIwLjEvbm9kZV9tb2R1bGVzL2Zhc3RxL3F1ZXVlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLndhbGtAMS4yLjgvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3JlYWRlcnMvY29tbW9uLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLndhbGtAMS4yLjgvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3JlYWRlcnMvcmVhZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLndhbGtAMS4yLjgvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3JlYWRlcnMvYXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMud2Fsa0AxLjIuOC9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcHJvdmlkZXJzL2FzeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLndhbGtAMS4yLjgvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3Byb3ZpZGVycy9zdHJlYW0uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG5vZGVsaWIrZnMud2Fsa0AxLjIuOC9ub2RlX21vZHVsZXMvQG5vZGVsaWIvZnMud2Fsay9vdXQvcmVhZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLndhbGtAMS4yLjgvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3Byb3ZpZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLndhbGtAMS4yLjgvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L3NldHRpbmdzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0Bub2RlbGliK2ZzLndhbGtAMS4yLjgvbm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsvb3V0L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9yZWFkZXJzL3JlYWRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9zdHJlYW0uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1nbG9iQDMuMy4zL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3JlYWRlcnMvYXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1nbG9iQDMuMy4zL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9tYXRjaGVycy9tYXRjaGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvbWF0Y2hlcnMvcGFydGlhbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcHJvdmlkZXJzL2ZpbHRlcnMvZGVlcC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcHJvdmlkZXJzL2ZpbHRlcnMvZW50cnkuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1nbG9iQDMuMy4zL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9maWx0ZXJzL2Vycm9yLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvdHJhbnNmb3JtZXJzL2VudHJ5LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvcHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1nbG9iQDMuMy4zL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L3Byb3ZpZGVycy9hc3luYy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcHJvdmlkZXJzL3N0cmVhbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvcmVhZGVycy9zeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2Zhc3QtZ2xvYkAzLjMuMy9ub2RlX21vZHVsZXMvZmFzdC1nbG9iL291dC9wcm92aWRlcnMvc3luYy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9mYXN0LWdsb2JAMy4zLjMvbm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9vdXQvc2V0dGluZ3MuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1nbG9iQDMuMy4zL25vZGVfbW9kdWxlcy9mYXN0LWdsb2Ivb3V0L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvbW1hbmQudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytodHRwLWNsaWVudEA0LjAuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3N1bW1hcnkudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvcGxhdGZvcm0udHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMraW9AMy4wLjIvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby11dGlsLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2V4ZWNAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL3Rvb2xydW5uZXIudHMiLCAibGliL21haW4udHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUVBLFFBQUksTUFBTSxVQUFRLEtBQUs7QUFDdkIsUUFBSSxNQUFNLFVBQVEsS0FBSztBQUN2QixRQUFJLE9BQU8sVUFBUSxNQUFNO0FBQ3pCLFFBQUksUUFBUSxVQUFRLE9BQU87QUFDM0IsUUFBSSxTQUFTLFVBQVEsUUFBUTtBQUM3QixRQUFJLFNBQVMsVUFBUSxRQUFRO0FBQzdCLFFBQUksT0FBTyxVQUFRLE1BQU07QUFHekIsWUFBUSxlQUFlQTtBQUN2QixZQUFRLGdCQUFnQkM7QUFDeEIsWUFBUSxnQkFBZ0JDO0FBQ3hCLFlBQVEsaUJBQWlCQztBQUd6QixhQUFTSCxjQUFhLFNBQVM7QUFDN0IsVUFBSSxRQUFRLElBQUksZUFBZSxPQUFPO0FBQ3RDLFlBQU0sVUFBVSxLQUFLO0FBQ3JCLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBU0MsZUFBYyxTQUFTO0FBQzlCLFVBQUksUUFBUSxJQUFJ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TyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3hhQTtBQUFBO0FBQUE7QUFHQSxRQUFNLDZCQUE2QixDQUFDO0FBR3BDLFFBQU0sdUJBQXVCO0FBQUEsTUFDM0I7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFB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U0FBUUEsU0FBUSxNQUFNLElBQUksRUFBRSxJQUFJO0FBQ2hDLE1BQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxNQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEMsTUFBQUEsU0FBUUEsU0FBUSxLQUFLLElBQUksRUFBRSxJQUFJO0FBRS9CLE1BQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxNQUFBQSxTQUFRQSxTQUFRLFlBQVksSUFBSSxFQUFFLElBQUk7QUFDdEMsTUFBQUEsU0FBUUEsU0FBUSxVQUFVLElBQUksRUFBRSxJQUFJO0FBQ3BDLE1BQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUVqQyxNQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsV0FBVyxJQUFJLEVBQUUsSUFBSTtBQUNyQyxNQUFBQSxTQUFRQSxTQUFRLGFBQWEsSUFBSSxFQUFFLElBQUk7QUFFdkMsTUFBQUEsU0FBUUEsU0FBUSxPQUFPLElBQUksRUFBRSxJQUFJO0FBQ2pDLE1BQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUVqQyxNQUFBQSxTQUFRQSxTQUFRLFlBQVksSUFBSSxFQUFFLElBQUk7QUFFdEMsTUFBQUEsU0FBUUEsU0FBUSxNQUFNLElBQUksRUFBRSxJQUFJO0FBQ2hDLE1BQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUVsQyxNQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFFbEMsTUFBQUEsU0FBUUEsU0FBUSxLQUFLLElBQUksRUFBRSxJQUFJO0FBRS9CLE1BQUFBLFNBQVFBLFNBQVEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQyxNQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsTUFB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O0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FB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QUNwRCxDQUFDOyIsCiAgIm5hbWVzIjogWyJodHRwT3Zlckh0dHAiLCAiaHR0cHNPdmVySHR0cCIsICJodHRwT3Zlckh0dHBzIiwgImh0dHBzT3Zlckh0dHBzIiwgIm9wdGlvbnMiLCAiZGVidWciLCAiZXJyb3IiLCAic29ja2V0IiwgInJlcXVpcmVfdHVubmVsIiwgIkJsb2IiLCAiaWR4IiwgInN0cmVhbSIsICJlcnIiLCAiZXJyb3IiLCAiZXJyb3IiLCAiZXJyIiwgInNlc3Npb24iLCAicmVxdWlyZV9jb25zdGFudHMiLCAiRVJST1IiLCAiVFlQRSIsICJGTEFHUyIsICJMRU5JRU5UX0ZMQUdTIiwgIk1FVEhPRFMiLCAiRklOSVNIIiwgIkhFQURFUl9TVEFURSIsICJCdWZmZXIiLCAiQnVmZmVyIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgImtleXMiLCAicmVxdWlyZV91dGlsIiwgInBlcmZvcm1hbmNlIiwgInJlcXVpcmVfc3ltYm9scyIsICJCbG9iIiwgImVudHJ5IiwgIkJsb2IiLCAiY2h1bmsiLCAidmFsdWUiLCAiZXJyb3IiLCAiY29uc3RhbnRzIiwgImV4cG9ydHMiLCAiY2xpZW50IiwgImNsaWVudCIsICJzb2NrZXQiLCAiaGVhZGVycyIsICJlcnJvciIsICJlcnJvciIsICJjb25uZWN0IiwgInNvY2tldCIsICJvcmlnaW4iLCAiZXJyb3IiLCAicG9vbCIsICJkaXNwYXRjaGVyIiwgIlVSTCIsICJQcm94eUFnZW50IiwgIm9yaWdpbiIsICJwcm90b2NvbCIsICJvcHRzIiwgIlByb3h5QWdlbnQiLCAiZXJyIiwgImNvbnN1bWUiLCAicmVxdWlyZV91dGlsIiwgImNhbGxiYWNrIiwgInJlcyIsICJvcGFxdWUiLCAiYm9keSIsICJtb2NrRGlzcGF0Y2giLCAiZXJyb3IiLCAicmVwbHlQYXJhbWV0ZXJzIiwgIm5ld01vY2tEaXNwYXRjaCIsICJlcnJvciIsICJyZXF1aXJlX2dsb2JhbCIsICJvcHRzIiwgImVyciIsICJleGlzdHMiLCAiSGVhZGVycyIsICJIZWFkZXJzIiwgInJlcXVpcmVfcmVxdWVzdCIsICJIZWFkZXJzIiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgIndpbmRvdyIsICJlcnJvciIsICJmZXRjaCIsICJyZXF1aXJlX3N5bWJvbHMiLCAicmVxdWlyZV91dGlsIiwgImVycm9yIiwgInR5cGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJyZXF1ZXN0IiwgImNhY2hlIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgInJlcXVpcmVfdXRpbCIsICJIZWFkZXJzIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgInJlcXVpcmVfc3ltYm9scyIsICJyZXF1aXJlX3V0aWwiLCAiYnVmZmVyIiwgIkhlYWRlcnMiLCAiZXJyb3IiLCAiZXJyb3IiLCAiYm9keSIsICJub2RlIiwgInJlcXVpcmVfdXRpbCIsICJlcnJvciIsICJQcm94eUFnZW50IiwgImZldGNoIiwgImVycm9yIiwgIm9zIiwgIm9wZW4iLCAicmVxdWlyZV91dGlscyIsICJub2RlIiwgIm1heCIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJyZXF1aXJlX3BhcnNlIiwgIm9wZW4iLCAiaW5kZXgiLCAicmVxdWlyZV9jb25zdGFudHMiLCAicmVxdWlyZV91dGlscyIsICJnbG9iIiwgInJlcXVpcmVfcGFyc2UiLCAiY29uc3RhbnRzIiwgImJyYW5jaCIsICJvcHRzIiwgInZhbHVlIiwgIm9wZW4iLCAicmVzdCIsICJzb3VyY2UiLCAiY29uc3RhbnRzIiwgImdsb2IiLCAic3RhdGUiLCAicmVxdWlyZV9waWNvbWF0Y2giLCAiZ2xvYiIsICJwYXR0ZXJuIiwgImVycm9yIiwgInJlcXVpcmVfdXRpbHMiLCAiZnMiLCAibHN0YXQiLCAic3RhdCIsICJlcnJvciIsICJsc3RhdCIsICJzdGF0IiwgImVycm9yIiwgInJlcXVpcmVfZnMiLCAiZnMiLCAiZnMiLCAic3RhdCIsICJxdWV1ZU1pY3JvdGFzayIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJyZXF1aXJlX2ZzIiwgInJlcXVpcmVfdXRpbHMiLCAiZnMiLCAicmVxdWlyZV9hc3luYyIsICJyZWFkZGlyIiwgImVycm9yIiwgInJlcXVpcmVfc3luYyIsICJyZWFkZGlyIiwgImVycm9yIiwgInJlcXVpcmVfZnMiLCAiZnMiLCAicmVxdWlyZV9zZXR0aW5ncyIsICJmcyIsICJyZXF1aXJlX291dCIsICJlcnJvciIsICJlcnJvckhhbmRsZXIiLCAiY29udGV4dCIsICJyZXF1aXJlX2NvbW1vbiIsICJlcnJvciIsICJyZXF1aXJlX2FzeW5jIiwgImVycm9yIiwgInJlcXVpcmVfYXN5bmMiLCAiZXJyb3IiLCAicmVxdWlyZV9zdHJlYW0iLCAiZXJyb3IiLCAicmVxdWlyZV9zeW5jIiwgImVycm9yIiwgInJlcXVpcmVfc3luYyIsICJyZXF1aXJlX3NldHRpbmdzIiwgInJlcXVpcmVfb3V0IiwgInJlcXVpcmVfcmVhZGVyIiwgImVycm9yIiwgInJlcXVpcmVfc3RyZWFtIiwgImVycm9yIiwgInJlcXVpcmVfYXN5bmMiLCAiZXJyb3IiLCAiaW5mbyIsICJpc0RpcmVjdG9yeSIsICJlcnJvciIsICJyZXF1aXJlX2VudHJ5IiwgInJlcXVpcmVfYXN5bmMiLCAicmVxdWlyZV9zdHJlYW0iLCAiZXJyb3IiLCAicmVxdWlyZV9zeW5jIiwgImVycm9yIiwgInJlcXVpcmVfc3luYyIsICJyZXF1aXJlX3NldHRpbmdzIiwgImZzIiwgIm9zIiwgInJlcXVpcmVfb3V0IiwgIkZhc3RHbG9iIiwgInBvc2l4IiwgImVzY2FwZVBhdGgiLCAiY29udmVydFBhdGhUb1BhdHRlcm4iLCAid2luMzIiLCAib3MiLCAiSHR0cENvZGVzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJFT0wiLCAiRU9MIiwgIm9zIiwgIklTX1dJTkRPV1MiLCAib3MiLCAiRXhpdENvZGUiLCAid3JpdGVGaWxlIiwgImVycm9yIiwgImdsb2IiXQp9Cg== diff --git a/.github/local-actions/update-models/package.json b/.github/local-actions/update-models/package.json new file mode 100644 index 000000000..5b2deb1c5 --- /dev/null +++ b/.github/local-actions/update-models/package.json @@ -0,0 +1,8 @@ +{ + "type": "module", + "dependencies": { + "@actions/core": "3.0.1", + "@types/node": "24.12.4", + "fast-glob": "3.3.3" + } +} diff --git a/.github/workflows/update-models.yml b/.github/workflows/update-models.yml new file mode 100644 index 000000000..fca0a94da --- /dev/null +++ b/.github/workflows/update-models.yml @@ -0,0 +1,59 @@ +name: Gemini Models Auto-Update + +on: + schedule: + # Runs daily at 04:00 UTC + - cron: '0 4 * * *' + workflow_dispatch: # Allows manual trigger. + +permissions: {} + +defaults: + run: + shell: bash + +jobs: + update-models: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Setup Node and pnpm + uses: ./github-actions/npm/checkout-and-setup-node + + - uses: ./github-actions/bazel/setup + - uses: ./github-actions/bazel/configure-remote + with: + google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run Model Updater Action + uses: ./.github/local-actions/update-models + + - name: Regenerate Generated Files + run: pnpm update-generated-files + + - name: Run Tests + run: pnpm bazel test -- //... + + - name: Create Pull Request + uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1 + with: + token: ${{ secrets.ANGULAR_ROBOT_ACCESS_TOKEN }} + push-to-fork: 'angular-robot/dev-infra' + delete-branch: true + maintainer-can-modify: true + branch: gemini-model-updates + committer: Angular Robot + author: Angular Robot + title: 'build: update gemini models to recommended versions' + commit-message: 'build: update gemini models to recommended versions' + body: | + Automatically updated Gemini model versions based on the official deprecation schedules. + Also rebuilt any dependent checked-in action bundles and verified all tests pass. + labels: | + action: merge diff --git a/.prettierignore b/.prettierignore index f2adf5510..09e29637e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,7 @@ .github/local-actions/labels-sync/main.js .github/local-actions/lock-closed/main.js .github/local-actions/stale-cleanup/main.js +.github/local-actions/update-models/main.js github-actions/bazel/configure-remote/configure-remote.js github-actions/branch-manager/main.js github-actions/browserstack/set-browserstack-env.js diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6a77f448..cfb8f212f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,6 +126,18 @@ importers: specifier: 24.12.4 version: 24.12.4 + .github/local-actions/update-models: + dependencies: + '@actions/core': + specifier: 3.0.1 + version: 3.0.1 + '@types/node': + specifier: 24.12.4 + version: 24.12.4 + fast-glob: + specifier: 3.3.3 + version: 3.3.3 + apps/code-of-conduct: dependencies: '@angular/animations': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 44a26d413..17faae3c7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,6 +10,7 @@ packages: - .github/local-actions/labels-sync - .github/local-actions/lock-closed - .github/local-actions/stale-cleanup + - .github/local-actions/update-models - github-actions - github-actions/google-internal-tests - github-actions/unified-status-check